@pipeline-builder/pipeline-data 4.1.24 → 4.1.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/alert-destinations.d.ts +17 -0
- package/lib/api/alert-destinations.js +36 -0
- package/lib/api/reporting/analytics-queries.d.ts +274 -0
- package/lib/api/reporting/analytics-queries.js +598 -0
- package/lib/api/reporting/daily-rollup.d.ts +41 -0
- package/lib/api/reporting/daily-rollup.js +173 -0
- package/lib/api/reporting/deploy-rollup.d.ts +78 -0
- package/lib/api/reporting/deploy-rollup.js +203 -0
- package/lib/api/reporting/dora-scoring.d.ts +14 -0
- package/lib/api/reporting/dora-scoring.js +25 -1
- package/lib/api/reporting/dora.js +30 -6
- package/lib/api/reporting/failure-classifier.d.ts +54 -0
- package/lib/api/reporting/failure-classifier.js +179 -0
- package/lib/api/reporting/ingest.d.ts +2 -2
- package/lib/api/reporting/ingest.js +129 -4
- package/lib/api/reporting/last-deploy.d.ts +31 -0
- package/lib/api/reporting/last-deploy.js +93 -0
- package/lib/api/reporting/needs-attention.d.ts +93 -0
- package/lib/api/reporting/needs-attention.js +152 -0
- package/lib/api/reporting/plugin-exposure.d.ts +129 -0
- package/lib/api/reporting/plugin-exposure.js +312 -0
- package/lib/api/reporting/retention-sweep.js +9 -1
- package/lib/api/reporting/sql-helpers.d.ts +35 -2
- package/lib/api/reporting/sql-helpers.js +39 -1
- package/lib/api/reporting/stakeholder/compose.d.ts +115 -0
- package/lib/api/reporting/stakeholder/compose.js +234 -0
- package/lib/api/reporting/stakeholder/index.d.ts +14 -0
- package/lib/api/reporting/stakeholder/index.js +17 -0
- package/lib/api/reporting/stakeholder/period.d.ts +102 -0
- package/lib/api/reporting/stakeholder/period.js +273 -0
- package/lib/api/reporting/stakeholder/report-html.d.ts +93 -0
- package/lib/api/reporting/stakeholder/report-html.js +208 -0
- package/lib/api/reporting/stakeholder/sections.d.ts +117 -0
- package/lib/api/reporting/stakeholder/sections.js +249 -0
- package/lib/api/reporting/stakeholder/store.d.ts +450 -0
- package/lib/api/reporting/stakeholder/store.js +981 -0
- package/lib/api/reporting/stakeholder/templates.d.ts +21 -0
- package/lib/api/reporting/stakeholder/templates.js +104 -0
- package/lib/api/reporting/types.d.ts +73 -0
- package/lib/api/reporting/types.js +1 -1
- package/lib/api/reporting-service.d.ts +94 -5
- package/lib/api/reporting-service.js +169 -10
- package/lib/api/soft-delete-sweep.d.ts +11 -2
- package/lib/api/soft-delete-sweep.js +17 -6
- package/lib/database/drizzle-schema.d.ts +2263 -385
- package/lib/database/drizzle-schema.js +18 -7
- package/lib/database/index.d.ts +1 -1
- package/lib/database/index.js +4 -2
- package/lib/database/schema/compliance.d.ts +0 -682
- package/lib/database/schema/compliance.js +6 -66
- package/lib/database/schema/ecosystem.d.ts +20 -157
- package/lib/database/schema/ecosystem.js +23 -16
- package/lib/database/schema/pipeline.d.ts +200 -0
- package/lib/database/schema/pipeline.js +100 -1
- package/lib/database/schema/plugin.d.ts +20 -1
- package/lib/database/schema/plugin.js +13 -1
- package/lib/database/schema/reporting-analytics.d.ts +1212 -0
- package/lib/database/schema/reporting-analytics.js +250 -0
- package/lib/database/schema/reporting-stakeholder.d.ts +1405 -0
- package/lib/database/schema/reporting-stakeholder.js +251 -0
- package/lib/index.d.ts +10 -1
- package/lib/index.js +15 -1
- package/lib/testing/exports.json +67 -4
- package/package.json +4 -3
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ReportCadence, ReportTemplate } from '../../../database/schema/reporting-stakeholder.js';
|
|
2
|
+
/** A named, ordered section list with the cadence it is designed for. */
|
|
3
|
+
export interface TemplateSpec {
|
|
4
|
+
id: ReportTemplate;
|
|
5
|
+
/** What a lead picks in the UI. */
|
|
6
|
+
label: string;
|
|
7
|
+
/** One line explaining who it is for — shown next to the label. */
|
|
8
|
+
audience: string;
|
|
9
|
+
/** The cadence this template assumes. A weekly DORA report is mostly noise. */
|
|
10
|
+
cadence: ReportCadence;
|
|
11
|
+
sections: readonly string[];
|
|
12
|
+
}
|
|
13
|
+
export declare const REPORT_TEMPLATE_SPECS: readonly TemplateSpec[];
|
|
14
|
+
/** Look a template up by id. */
|
|
15
|
+
export declare function getTemplate(id: string): TemplateSpec | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Every section id a template names must exist in the registry. Called at module
|
|
18
|
+
* load so a template referencing a removed section fails the BUILD rather than
|
|
19
|
+
* producing a report full of "Unknown report section" panels in production.
|
|
20
|
+
*/
|
|
21
|
+
export declare function assertTemplatesResolve(): void;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* The manager-facing templates.
|
|
5
|
+
*
|
|
6
|
+
* A template is a curated section list, not a free-form picker, because the
|
|
7
|
+
* failure mode of this feature is a report nobody reads. Managers do not act on
|
|
8
|
+
* "p95 stage duration"; they act on answers to four questions — are we shipping,
|
|
9
|
+
* is it getting better or worse, what is blocking us, is anything risky. Each
|
|
10
|
+
* template answers those in that order, so the first thing on the page is a
|
|
11
|
+
* number with a direction rather than a table.
|
|
12
|
+
*
|
|
13
|
+
* Section ORDER is the reading order. It is deliberate and worth preserving.
|
|
14
|
+
*/
|
|
15
|
+
import { getSection } from './sections.js';
|
|
16
|
+
export const REPORT_TEMPLATE_SPECS = [
|
|
17
|
+
{
|
|
18
|
+
id: 'weekly_delivery',
|
|
19
|
+
label: 'Weekly delivery summary',
|
|
20
|
+
audience: 'For an engineering manager: what shipped this week and what is blocking it.',
|
|
21
|
+
cadence: 'weekly',
|
|
22
|
+
// NEEDS ATTENTION LEADS. A weekly report's job is to answer "what should I
|
|
23
|
+
// look at", and putting the decision first is the difference between a report
|
|
24
|
+
// that gets read and a table that gets skimmed. Then: are we shipping, what is
|
|
25
|
+
// breaking, and which pipelines are worst.
|
|
26
|
+
//
|
|
27
|
+
// No DORA here: weekly DORA on a normal team is too small a sample to mean
|
|
28
|
+
// anything, and the locked-section path would dominate the page for orgs
|
|
29
|
+
// without the add-on.
|
|
30
|
+
sections: [
|
|
31
|
+
'needs_attention',
|
|
32
|
+
'execution_count',
|
|
33
|
+
'success_rate',
|
|
34
|
+
'failure_analysis',
|
|
35
|
+
'pipeline_breakdown',
|
|
36
|
+
'promotion',
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: 'monthly_health',
|
|
41
|
+
label: 'Monthly engineering health',
|
|
42
|
+
audience: 'For a director: delivery performance with DORA levels and trend.',
|
|
43
|
+
cadence: 'monthly',
|
|
44
|
+
// A month is the smallest window where DORA bands are meaningful. Adds the
|
|
45
|
+
// supply-chain and posture panels a director is accountable for and a lead
|
|
46
|
+
// rarely volunteers: vulnerable plugins, versions behind, compliance.
|
|
47
|
+
sections: [
|
|
48
|
+
'needs_attention',
|
|
49
|
+
'dora',
|
|
50
|
+
'dora_trend',
|
|
51
|
+
'success_rate',
|
|
52
|
+
'failure_analysis',
|
|
53
|
+
'stage_performance',
|
|
54
|
+
'plugin_vulnerabilities',
|
|
55
|
+
'outdated_plugins',
|
|
56
|
+
'compliance_posture',
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: 'quarterly_review',
|
|
61
|
+
label: 'Quarterly review',
|
|
62
|
+
audience: 'For a leadership review: the quarter across teams, with quarter-over-quarter change.',
|
|
63
|
+
cadence: 'quarterly',
|
|
64
|
+
// Widest view: delivery, health, supply chain, adoption and cost-of-build.
|
|
65
|
+
// `adoption` and `resource_consumption` are here and nowhere else — both are
|
|
66
|
+
// quarter-scale questions, and asking them weekly would produce noise a lead
|
|
67
|
+
// would rightly ignore.
|
|
68
|
+
sections: [
|
|
69
|
+
'dora',
|
|
70
|
+
'dora_trend',
|
|
71
|
+
'execution_count',
|
|
72
|
+
'success_rate',
|
|
73
|
+
'failure_analysis',
|
|
74
|
+
'promotion',
|
|
75
|
+
'environments',
|
|
76
|
+
'plugin_vulnerabilities',
|
|
77
|
+
'outdated_plugins',
|
|
78
|
+
'compliance_posture',
|
|
79
|
+
'adoption',
|
|
80
|
+
'resource_consumption',
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
/** Look a template up by id. */
|
|
85
|
+
export function getTemplate(id) {
|
|
86
|
+
return REPORT_TEMPLATE_SPECS.find((t) => t.id === id);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Every section id a template names must exist in the registry. Called at module
|
|
90
|
+
* load so a template referencing a removed section fails the BUILD rather than
|
|
91
|
+
* producing a report full of "Unknown report section" panels in production.
|
|
92
|
+
*/
|
|
93
|
+
export function assertTemplatesResolve() {
|
|
94
|
+
for (const template of REPORT_TEMPLATE_SPECS) {
|
|
95
|
+
for (const id of template.sections) {
|
|
96
|
+
if (!getSection(id)) {
|
|
97
|
+
throw new Error(`Template "${template.id}" names unknown section "${id}". `
|
|
98
|
+
+ 'Register it in sections.ts or remove it from the template.');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
assertTemplatesResolve();
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvc3Rha2Vob2xkZXIvdGVtcGxhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBZTNDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUE0QjtJQUM1RDtRQUNFLEVBQUUsRUFBRSxpQkFBaUI7UUFDckIsS0FBSyxFQUFFLHlCQUF5QjtRQUNoQyxRQUFRLEVBQUUsNkVBQTZFO1FBQ3ZGLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLDJFQUEyRTtRQUMzRSw4RUFBOEU7UUFDOUUsK0VBQStFO1FBQy9FLDJDQUEyQztRQUMzQyxFQUFFO1FBQ0YsMkVBQTJFO1FBQzNFLHlFQUF5RTtRQUN6RSxzQkFBc0I7UUFDdEIsUUFBUSxFQUFFO1lBQ1IsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQUNqQixjQUFjO1lBQ2Qsa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQixXQUFXO1NBQ1o7S0FDRjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGdCQUFnQjtRQUNwQixLQUFLLEVBQUUsNEJBQTRCO1FBQ25DLFFBQVEsRUFBRSxrRUFBa0U7UUFDNUUsT0FBTyxFQUFFLFNBQVM7UUFDbEIsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSxzRUFBc0U7UUFDdEUsUUFBUSxFQUFFO1lBQ1IsaUJBQWlCO1lBQ2pCLE1BQU07WUFDTixZQUFZO1lBQ1osY0FBYztZQUNkLGtCQUFrQjtZQUNsQixtQkFBbUI7WUFDbkIsd0JBQXdCO1lBQ3hCLGtCQUFrQjtZQUNsQixvQkFBb0I7U0FDckI7S0FDRjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGtCQUFrQjtRQUN0QixLQUFLLEVBQUUsa0JBQWtCO1FBQ3pCLFFBQVEsRUFBRSxzRkFBc0Y7UUFDaEcsT0FBTyxFQUFFLFdBQVc7UUFDcEIsMkVBQTJFO1FBQzNFLDZFQUE2RTtRQUM3RSw2RUFBNkU7UUFDN0Usd0JBQXdCO1FBQ3hCLFFBQVEsRUFBRTtZQUNSLE1BQU07WUFDTixZQUFZO1lBQ1osaUJBQWlCO1lBQ2pCLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsV0FBVztZQUNYLGNBQWM7WUFDZCx3QkFBd0I7WUFDeEIsa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQixVQUFVO1lBQ1Ysc0JBQXNCO1NBQ3ZCO0tBQ0Y7Q0FDRixDQUFDO0FBRUYsZ0NBQWdDO0FBQ2hDLE1BQU0sVUFBVSxXQUFXLENBQUMsRUFBVTtJQUNwQyxPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsS0FBSyxNQUFNLFFBQVEsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzdDLEtBQUssTUFBTSxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxJQUFJLEtBQUssQ0FDYixhQUFhLFFBQVEsQ0FBQyxFQUFFLDRCQUE0QixFQUFFLEtBQUs7c0JBQ3pELDREQUE0RCxDQUMvRCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELHNCQUFzQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgbWFuYWdlci1mYWNpbmcgdGVtcGxhdGVzLlxuICpcbiAqIEEgdGVtcGxhdGUgaXMgYSBjdXJhdGVkIHNlY3Rpb24gbGlzdCwgbm90IGEgZnJlZS1mb3JtIHBpY2tlciwgYmVjYXVzZSB0aGVcbiAqIGZhaWx1cmUgbW9kZSBvZiB0aGlzIGZlYXR1cmUgaXMgYSByZXBvcnQgbm9ib2R5IHJlYWRzLiBNYW5hZ2VycyBkbyBub3QgYWN0IG9uXG4gKiBcInA5NSBzdGFnZSBkdXJhdGlvblwiOyB0aGV5IGFjdCBvbiBhbnN3ZXJzIHRvIGZvdXIgcXVlc3Rpb25zIOKAlCBhcmUgd2Ugc2hpcHBpbmcsXG4gKiBpcyBpdCBnZXR0aW5nIGJldHRlciBvciB3b3JzZSwgd2hhdCBpcyBibG9ja2luZyB1cywgaXMgYW55dGhpbmcgcmlza3kuIEVhY2hcbiAqIHRlbXBsYXRlIGFuc3dlcnMgdGhvc2UgaW4gdGhhdCBvcmRlciwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIHRoZSBwYWdlIGlzIGFcbiAqIG51bWJlciB3aXRoIGEgZGlyZWN0aW9uIHJhdGhlciB0aGFuIGEgdGFibGUuXG4gKlxuICogU2VjdGlvbiBPUkRFUiBpcyB0aGUgcmVhZGluZyBvcmRlci4gSXQgaXMgZGVsaWJlcmF0ZSBhbmQgd29ydGggcHJlc2VydmluZy5cbiAqL1xuXG5pbXBvcnQgeyBnZXRTZWN0aW9uIH0gZnJvbSAnLi9zZWN0aW9ucy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlcG9ydENhZGVuY2UsIFJlcG9ydFRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YWJhc2Uvc2NoZW1hL3JlcG9ydGluZy1zdGFrZWhvbGRlci5qcyc7XG5cbi8qKiBBIG5hbWVkLCBvcmRlcmVkIHNlY3Rpb24gbGlzdCB3aXRoIHRoZSBjYWRlbmNlIGl0IGlzIGRlc2lnbmVkIGZvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVTcGVjIHtcbiAgaWQ6IFJlcG9ydFRlbXBsYXRlO1xuICAvKiogV2hhdCBhIGxlYWQgcGlja3MgaW4gdGhlIFVJLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogT25lIGxpbmUgZXhwbGFpbmluZyB3aG8gaXQgaXMgZm9yIOKAlCBzaG93biBuZXh0IHRvIHRoZSBsYWJlbC4gKi9cbiAgYXVkaWVuY2U6IHN0cmluZztcbiAgLyoqIFRoZSBjYWRlbmNlIHRoaXMgdGVtcGxhdGUgYXNzdW1lcy4gQSB3ZWVrbHkgRE9SQSByZXBvcnQgaXMgbW9zdGx5IG5vaXNlLiAqL1xuICBjYWRlbmNlOiBSZXBvcnRDYWRlbmNlO1xuICBzZWN0aW9uczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCBSRVBPUlRfVEVNUExBVEVfU1BFQ1M6IHJlYWRvbmx5IFRlbXBsYXRlU3BlY1tdID0gW1xuICB7XG4gICAgaWQ6ICd3ZWVrbHlfZGVsaXZlcnknLFxuICAgIGxhYmVsOiAnV2Vla2x5IGRlbGl2ZXJ5IHN1bW1hcnknLFxuICAgIGF1ZGllbmNlOiAnRm9yIGFuIGVuZ2luZWVyaW5nIG1hbmFnZXI6IHdoYXQgc2hpcHBlZCB0aGlzIHdlZWsgYW5kIHdoYXQgaXMgYmxvY2tpbmcgaXQuJyxcbiAgICBjYWRlbmNlOiAnd2Vla2x5JyxcbiAgICAvLyBORUVEUyBBVFRFTlRJT04gTEVBRFMuIEEgd2Vla2x5IHJlcG9ydCdzIGpvYiBpcyB0byBhbnN3ZXIgXCJ3aGF0IHNob3VsZCBJXG4gICAgLy8gbG9vayBhdFwiLCBhbmQgcHV0dGluZyB0aGUgZGVjaXNpb24gZmlyc3QgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHJlcG9ydFxuICAgIC8vIHRoYXQgZ2V0cyByZWFkIGFuZCBhIHRhYmxlIHRoYXQgZ2V0cyBza2ltbWVkLiBUaGVuOiBhcmUgd2Ugc2hpcHBpbmcsIHdoYXQgaXNcbiAgICAvLyBicmVha2luZywgYW5kIHdoaWNoIHBpcGVsaW5lcyBhcmUgd29yc3QuXG4gICAgLy9cbiAgICAvLyBObyBET1JBIGhlcmU6IHdlZWtseSBET1JBIG9uIGEgbm9ybWFsIHRlYW0gaXMgdG9vIHNtYWxsIGEgc2FtcGxlIHRvIG1lYW5cbiAgICAvLyBhbnl0aGluZywgYW5kIHRoZSBsb2NrZWQtc2VjdGlvbiBwYXRoIHdvdWxkIGRvbWluYXRlIHRoZSBwYWdlIGZvciBvcmdzXG4gICAgLy8gd2l0aG91dCB0aGUgYWRkLW9uLlxuICAgIHNlY3Rpb25zOiBbXG4gICAgICAnbmVlZHNfYXR0ZW50aW9uJyxcbiAgICAgICdleGVjdXRpb25fY291bnQnLFxuICAgICAgJ3N1Y2Nlc3NfcmF0ZScsXG4gICAgICAnZmFpbHVyZV9hbmFseXNpcycsXG4gICAgICAncGlwZWxpbmVfYnJlYWtkb3duJyxcbiAgICAgICdwcm9tb3Rpb24nLFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBpZDogJ21vbnRobHlfaGVhbHRoJyxcbiAgICBsYWJlbDogJ01vbnRobHkgZW5naW5lZXJpbmcgaGVhbHRoJyxcbiAgICBhdWRpZW5jZTogJ0ZvciBhIGRpcmVjdG9yOiBkZWxpdmVyeSBwZXJmb3JtYW5jZSB3aXRoIERPUkEgbGV2ZWxzIGFuZCB0cmVuZC4nLFxuICAgIGNhZGVuY2U6ICdtb250aGx5JyxcbiAgICAvLyBBIG1vbnRoIGlzIHRoZSBzbWFsbGVzdCB3aW5kb3cgd2hlcmUgRE9SQSBiYW5kcyBhcmUgbWVhbmluZ2Z1bC4gQWRkcyB0aGVcbiAgICAvLyBzdXBwbHktY2hhaW4gYW5kIHBvc3R1cmUgcGFuZWxzIGEgZGlyZWN0b3IgaXMgYWNjb3VudGFibGUgZm9yIGFuZCBhIGxlYWRcbiAgICAvLyByYXJlbHkgdm9sdW50ZWVyczogdnVsbmVyYWJsZSBwbHVnaW5zLCB2ZXJzaW9ucyBiZWhpbmQsIGNvbXBsaWFuY2UuXG4gICAgc2VjdGlvbnM6IFtcbiAgICAgICduZWVkc19hdHRlbnRpb24nLFxuICAgICAgJ2RvcmEnLFxuICAgICAgJ2RvcmFfdHJlbmQnLFxuICAgICAgJ3N1Y2Nlc3NfcmF0ZScsXG4gICAgICAnZmFpbHVyZV9hbmFseXNpcycsXG4gICAgICAnc3RhZ2VfcGVyZm9ybWFuY2UnLFxuICAgICAgJ3BsdWdpbl92dWxuZXJhYmlsaXRpZXMnLFxuICAgICAgJ291dGRhdGVkX3BsdWdpbnMnLFxuICAgICAgJ2NvbXBsaWFuY2VfcG9zdHVyZScsXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGlkOiAncXVhcnRlcmx5X3JldmlldycsXG4gICAgbGFiZWw6ICdRdWFydGVybHkgcmV2aWV3JyxcbiAgICBhdWRpZW5jZTogJ0ZvciBhIGxlYWRlcnNoaXAgcmV2aWV3OiB0aGUgcXVhcnRlciBhY3Jvc3MgdGVhbXMsIHdpdGggcXVhcnRlci1vdmVyLXF1YXJ0ZXIgY2hhbmdlLicsXG4gICAgY2FkZW5jZTogJ3F1YXJ0ZXJseScsXG4gICAgLy8gV2lkZXN0IHZpZXc6IGRlbGl2ZXJ5LCBoZWFsdGgsIHN1cHBseSBjaGFpbiwgYWRvcHRpb24gYW5kIGNvc3Qtb2YtYnVpbGQuXG4gICAgLy8gYGFkb3B0aW9uYCBhbmQgYHJlc291cmNlX2NvbnN1bXB0aW9uYCBhcmUgaGVyZSBhbmQgbm93aGVyZSBlbHNlIOKAlCBib3RoIGFyZVxuICAgIC8vIHF1YXJ0ZXItc2NhbGUgcXVlc3Rpb25zLCBhbmQgYXNraW5nIHRoZW0gd2Vla2x5IHdvdWxkIHByb2R1Y2Ugbm9pc2UgYSBsZWFkXG4gICAgLy8gd291bGQgcmlnaHRseSBpZ25vcmUuXG4gICAgc2VjdGlvbnM6IFtcbiAgICAgICdkb3JhJyxcbiAgICAgICdkb3JhX3RyZW5kJyxcbiAgICAgICdleGVjdXRpb25fY291bnQnLFxuICAgICAgJ3N1Y2Nlc3NfcmF0ZScsXG4gICAgICAnZmFpbHVyZV9hbmFseXNpcycsXG4gICAgICAncHJvbW90aW9uJyxcbiAgICAgICdlbnZpcm9ubWVudHMnLFxuICAgICAgJ3BsdWdpbl92dWxuZXJhYmlsaXRpZXMnLFxuICAgICAgJ291dGRhdGVkX3BsdWdpbnMnLFxuICAgICAgJ2NvbXBsaWFuY2VfcG9zdHVyZScsXG4gICAgICAnYWRvcHRpb24nLFxuICAgICAgJ3Jlc291cmNlX2NvbnN1bXB0aW9uJyxcbiAgICBdLFxuICB9LFxuXTtcblxuLyoqIExvb2sgYSB0ZW1wbGF0ZSB1cCBieSBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW1wbGF0ZShpZDogc3RyaW5nKTogVGVtcGxhdGVTcGVjIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIFJFUE9SVF9URU1QTEFURV9TUEVDUy5maW5kKCh0KSA9PiB0LmlkID09PSBpZCk7XG59XG5cbi8qKlxuICogRXZlcnkgc2VjdGlvbiBpZCBhIHRlbXBsYXRlIG5hbWVzIG11c3QgZXhpc3QgaW4gdGhlIHJlZ2lzdHJ5LiBDYWxsZWQgYXQgbW9kdWxlXG4gKiBsb2FkIHNvIGEgdGVtcGxhdGUgcmVmZXJlbmNpbmcgYSByZW1vdmVkIHNlY3Rpb24gZmFpbHMgdGhlIEJVSUxEIHJhdGhlciB0aGFuXG4gKiBwcm9kdWNpbmcgYSByZXBvcnQgZnVsbCBvZiBcIlVua25vd24gcmVwb3J0IHNlY3Rpb25cIiBwYW5lbHMgaW4gcHJvZHVjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFRlbXBsYXRlc1Jlc29sdmUoKTogdm9pZCB7XG4gIGZvciAoY29uc3QgdGVtcGxhdGUgb2YgUkVQT1JUX1RFTVBMQVRFX1NQRUNTKSB7XG4gICAgZm9yIChjb25zdCBpZCBvZiB0ZW1wbGF0ZS5zZWN0aW9ucykge1xuICAgICAgaWYgKCFnZXRTZWN0aW9uKGlkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRlbXBsYXRlIFwiJHt0ZW1wbGF0ZS5pZH1cIiBuYW1lcyB1bmtub3duIHNlY3Rpb24gXCIke2lkfVwiLiBgXG4gICAgICAgICAgKyAnUmVnaXN0ZXIgaXQgaW4gc2VjdGlvbnMudHMgb3IgcmVtb3ZlIGl0IGZyb20gdGhlIHRlbXBsYXRlLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmFzc2VydFRlbXBsYXRlc1Jlc29sdmUoKTtcbiJdfQ==
|
|
@@ -153,9 +153,30 @@ export interface ReportingRetentionSettings {
|
|
|
153
153
|
defaultDoraRetentionDays: number;
|
|
154
154
|
}
|
|
155
155
|
/** Options for the reporting retention sweep. */
|
|
156
|
+
/**
|
|
157
|
+
* How a time-bucketed report slices its periods. Absent means UTC + Monday, which
|
|
158
|
+
* is what every pre-timezone caller got — so an omitted value can never silently
|
|
159
|
+
* change an existing report's boundaries.
|
|
160
|
+
*/
|
|
161
|
+
export interface BucketOptions {
|
|
162
|
+
/** IANA timezone the buckets are cut in (validated at the route). */
|
|
163
|
+
tz?: string;
|
|
164
|
+
/** Where the week starts. Postgres DATE_TRUNC is Monday-only, so `sunday`
|
|
165
|
+
* shifts the boundary explicitly. */
|
|
166
|
+
weekStart?: 'monday' | 'sunday';
|
|
167
|
+
}
|
|
156
168
|
export interface ReportingRetentionOptions {
|
|
157
169
|
/** Rows deleted per statement (default 1000). */
|
|
158
170
|
batchSize?: number;
|
|
171
|
+
/**
|
|
172
|
+
* The leader-locked run this sweep belongs to. Checked BETWEEN ORGS: aborted
|
|
173
|
+
* means the lock was lost (another pod is taking over) or the process is
|
|
174
|
+
* shutting down, and the remaining orgs are picked up next tick. Without it a
|
|
175
|
+
* long sweep kept deleting after another pod had already taken the lock.
|
|
176
|
+
*/
|
|
177
|
+
run?: {
|
|
178
|
+
signal: AbortSignal;
|
|
179
|
+
};
|
|
159
180
|
/** Max batches per table per org per tick (default 50); the rest defers to
|
|
160
181
|
* the next tick so a huge backlog can't hold locks too long. */
|
|
161
182
|
maxBatchesPerTable?: number;
|
|
@@ -204,6 +225,10 @@ export interface DoraOptions {
|
|
|
204
225
|
* passes it in; unset falls back to the env default.
|
|
205
226
|
*/
|
|
206
227
|
incidentWindowHours?: number;
|
|
228
|
+
/** IANA timezone for the trend's buckets (see {@link BucketOptions}). */
|
|
229
|
+
tz?: string;
|
|
230
|
+
/** Week start for the trend's buckets. */
|
|
231
|
+
weekStart?: 'monday' | 'sunday';
|
|
207
232
|
}
|
|
208
233
|
/**
|
|
209
234
|
* Per-org reporting settings surfaced to the org-admin panel. `incidentWindowHours`
|
|
@@ -301,6 +326,11 @@ export interface DoraMetrics {
|
|
|
301
326
|
incidents: number;
|
|
302
327
|
restored: number;
|
|
303
328
|
medianSeconds: number | null;
|
|
329
|
+
/** 90th/95th percentile recovery, over the same sample as the median. The
|
|
330
|
+
* median alone hides the long tail that actually defines an outage's cost;
|
|
331
|
+
* `null` when no recovery gap was observed. */
|
|
332
|
+
p90Seconds: number | null;
|
|
333
|
+
p95Seconds: number | null;
|
|
304
334
|
level: DoraLevel;
|
|
305
335
|
};
|
|
306
336
|
/**
|
|
@@ -346,11 +376,16 @@ export interface DoraEnvMetrics {
|
|
|
346
376
|
* successful deploys with a resolvable commit timestamp (deltas clamped ≥0).
|
|
347
377
|
* `medianSeconds` is `null` (= unknown) when no successful deploy in this env
|
|
348
378
|
* carried a `commit_timestamp`. The old median-run-duration proxy is removed.
|
|
379
|
+
*
|
|
380
|
+
* `p90Seconds`/`p95Seconds` come from the same sample. The level is scored off
|
|
381
|
+
* the MEDIAN only, so adding the tails cannot move a team's DORA band.
|
|
349
382
|
*/
|
|
350
383
|
leadTime: {
|
|
351
384
|
/** Successful deploys with a resolvable commit time (the median sample). */
|
|
352
385
|
deployments: number;
|
|
353
386
|
medianSeconds: number | null;
|
|
387
|
+
p90Seconds: number | null;
|
|
388
|
+
p95Seconds: number | null;
|
|
354
389
|
level: DoraLevel;
|
|
355
390
|
};
|
|
356
391
|
}
|
|
@@ -459,6 +494,44 @@ export interface IngestResult {
|
|
|
459
494
|
* PIPELINE or BUILD events would land rows and push no frame at all.
|
|
460
495
|
*/
|
|
461
496
|
affectedOrgs: string[];
|
|
497
|
+
/**
|
|
498
|
+
* Events dropped because the pipeline they name belongs to an org the caller
|
|
499
|
+
* may not write for. Surfaced so the route can log and count them: a non-zero
|
|
500
|
+
* value is either a misrouted producer or an attempt to inject events into
|
|
501
|
+
* another tenant's reports, and both need to be visible.
|
|
502
|
+
*/
|
|
503
|
+
droppedForeignOrg: number;
|
|
504
|
+
/**
|
|
505
|
+
* Events dropped because their timestamps are impossible — dated in the future,
|
|
506
|
+
* or completing before they started. Rejected here rather than clamped later:
|
|
507
|
+
* a deploy whose duration or lead time is negative silently skews deployment
|
|
508
|
+
* frequency, change-failure rate and lead time for the whole org, and a clamp
|
|
509
|
+
* to 0 makes a bad clock look like an instant deploy.
|
|
510
|
+
*/
|
|
511
|
+
droppedInvalidTime: number;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Who is writing, for the ingest tenancy check.
|
|
515
|
+
*
|
|
516
|
+
* `/reports/events` resolves an event's org from the pipeline registry, so
|
|
517
|
+
* without this a token holding `reporting:ingest` could post events for ANY
|
|
518
|
+
* pipeline id and have them attributed to that pipeline's org — one org
|
|
519
|
+
* injecting rows into another's reports.
|
|
520
|
+
*/
|
|
521
|
+
export interface IngestCaller {
|
|
522
|
+
/**
|
|
523
|
+
* Org ids this caller may write events for: its own, plus descendant teams.
|
|
524
|
+
* Resolved by the route. An event whose pipeline belongs to anything else is
|
|
525
|
+
* dropped.
|
|
526
|
+
*/
|
|
527
|
+
allowedOrgIds: readonly string[];
|
|
528
|
+
/**
|
|
529
|
+
* A verified INTERNAL service principal (the plugin service posts plugin-build
|
|
530
|
+
* events for every tenant). Such callers are exempt: they hold a signed
|
|
531
|
+
* service key no external client can mint, and they legitimately write
|
|
532
|
+
* cross-tenant. Never set this from anything a request body can influence.
|
|
533
|
+
*/
|
|
534
|
+
crossTenant?: boolean;
|
|
462
535
|
}
|
|
463
536
|
/**
|
|
464
537
|
* One org's ingestion-health row as READ back by the Reports UI. The
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUHVibGljIHJlc3VsdCBzaGFwZXMgZm9yIHRoZSByZXBvcnRpbmcgc2VydmljZS5cbiAqXG4gKiBTcGxpdCBvdXQgb2YgcmVwb3J0aW5nLXNlcnZpY2UudHMgcHVyZWx5IGZvciBzaXplOiB0aGVzZSBhcmUgZGF0YSBjb250cmFjdHNcbiAqIHdpdGggbm8gYmVoYXZpb3VyLiByZXBvcnRpbmctc2VydmljZS50cyByZS1leHBvcnRzIHRoZW0sIHNvIHRoZVxuICogYEBwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGFgIHB1YmxpYyBzdXJmYWNlIGlzIHVuY2hhbmdlZC5cbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkNvdW50IHtcbiAgaWQ6IHN0cmluZztcbiAgcHJvamVjdDogc3RyaW5nO1xuICBvcmdhbml6YXRpb246IHN0cmluZztcbiAgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICB0b3RhbDogbnVtYmVyO1xuICBzdWNjZWVkZWQ6IG51bWJlcjtcbiAgZmFpbGVkOiBudW1iZXI7XG4gIGNhbmNlbGVkOiBudW1iZXI7XG4gIGZpcnN0RXhlY3V0aW9uOiBzdHJpbmcgfCBudWxsO1xuICBsYXN0RXhlY3V0aW9uOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVTZXJpZXNFbnRyeSB7XG4gIHBlcmlvZDogc3RyaW5nO1xuICBzdWNjZWVkZWQ6IG51bWJlcjtcbiAgZmFpbGVkOiBudW1iZXI7XG4gIGNhbmNlbGVkOiBudW1iZXI7XG4gIHN1Y2Nlc3NQY3Q6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdXJhdGlvblN0YXRzIHtcbiAgaWQ6IHN0cmluZztcbiAgcHJvamVjdDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGF2Z01zOiBudW1iZXI7XG4gIG1pbk1zOiBudW1iZXI7XG4gIG1heE1zOiBudW1iZXI7XG4gIHA5NU1zOiBudW1iZXI7XG4gIGV4ZWN1dGlvbnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUV4ZWN1dGlvbiB7XG4gIGV4ZWN1dGlvbklkOiBzdHJpbmc7XG4gIC8qKiBSb2xsZWQtdXAgdGVybWluYWwgc3RhdHVzOiBzdWNjZWVkZWQgfCBmYWlsZWQgfCBjYW5jZWxlZCB8IGluLXByb2dyZXNzLiAqL1xuICBzdGF0dXM6IHN0cmluZztcbiAgc3RhcnRlZEF0OiBzdHJpbmcgfCBudWxsO1xuICBlbmRlZEF0OiBzdHJpbmcgfCBudWxsO1xuICBkdXJhdGlvbk1zOiBudW1iZXIgfCBudWxsO1xuICAvKiogRmlyc3QgZmFpbGluZyBzdGFnZS9hY3Rpb24gZm9yIHRoZSBleGVjdXRpb24gKG51bGwgd2hlbiBpdCBkaWRuJ3QgZmFpbCkuICovXG4gIGZhaWxpbmdTdGFnZTogc3RyaW5nIHwgbnVsbDtcbiAgZmFpbGluZ0FjdGlvbjogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFnZUZhaWx1cmUge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgZmFpbHVyZXM6IG51bWJlcjtcbiAgdG90YWw6IG51bWJlcjtcbiAgZmFpbHVyZVBjdDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlQm90dGxlbmVjayB7XG4gIGlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIGF2Z01zOiBudW1iZXI7XG4gIG1heE1zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRmFpbHVyZSB7XG4gIGFjdGlvbk5hbWU6IHN0cmluZztcbiAgZmFpbHVyZXM6IG51bWJlcjtcbiAgdG90YWw6IG51bWJlcjtcbiAgZmFpbHVyZVBjdDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yRW50cnkge1xuICBlcnJvclBhdHRlcm46IHN0cmluZztcbiAgb2NjdXJyZW5jZXM6IG51bWJlcjtcbiAgYWZmZWN0ZWRQaXBlbGluZXM6IG51bWJlcjtcbiAgbGFzdFNlZW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TdW1tYXJ5IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgYWN0aXZlOiBudW1iZXI7XG4gIGluYWN0aXZlOiBudW1iZXI7XG4gIC8qKiBDb3VudHMgcGVyIHNoYXJpbmcgcnVuZyDigJQgb25lIGJ1Y2tldCBwZXIgYHZpc2liaWxpdHlgIHZhbHVlLiAqL1xuICBwdWJsaWM6IG51bWJlcjtcbiAgb3JnOiBudW1iZXI7XG4gIHByaXZhdGU6IG51bWJlcjtcbiAgdW5pcXVlTmFtZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlQ29tcHV0ZURpc3RyaWJ1dGlvbiB7XG4gIHBsdWdpblR5cGU6IHN0cmluZztcbiAgY29tcHV0ZVR5cGU6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uQ291bnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb25Db3VudDogbnVtYmVyO1xuICBsYXRlc3RWZXJzaW9uOiBzdHJpbmc7XG4gIGhhc0RlZmF1bHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRUaW1lU2VyaWVzRW50cnkge1xuICBwZXJpb2Q6IHN0cmluZztcbiAgc3VjY2VlZGVkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBzdWNjZXNzUGN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGREdXJhdGlvbiB7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgYXZnTXM6IG51bWJlcjtcbiAgbWF4TXM6IG51bWJlcjtcbiAgYnVpbGRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogUGx1Z2luIHJ1bnRpbWUgcmVwb3J0IGZpbHRlcnMuIGBwdWJsaXNoZXI6IG51bGxgIHNlbGVjdHMgb3duLW9yZ1xuICogKHB1Ymxpc2hlci1sZXNzKSBwbHVnaW5zOyBhbiBvbWl0dGVkIGZpZWxkIGRvZXNuJ3QgZmlsdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblJ1bnRpbWVGaWx0ZXIge1xuICBuYW1lPzogc3RyaW5nO1xuICBwdWJsaXNoZXI/OiBzdHJpbmcgfCBudWxsO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKiogUGVyIHBsdWdpbiB2ZXJzaW9uIHJ1bnRpbWUgc3RhdHMgb3ZlciBhIHdpbmRvdyAodGVybWluYWwgQUNUSU9OIHJ1bnMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5SdW50aW1lU3RhdHMge1xuICBwbHVnaW5QdWJsaXNoZXI6IHN0cmluZyB8IG51bGw7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICBydW5zOiBudW1iZXI7XG4gIHN1Y2NlZWRlZDogbnVtYmVyO1xuICBmYWlsZWQ6IG51bWJlcjtcbiAgLyoqIDDigJMxMDAsIG9uZSBkZWNpbWFsLiAqL1xuICBzdWNjZXNzUGN0OiBudW1iZXI7XG4gIC8qKiBOdWxsIHdoZW4gbm8gcnVuIGluIHRoZSBncm91cCBjYXJyaWVkIGEgZHVyYXRpb24uICovXG4gIHA1ME1zOiBudW1iZXIgfCBudWxsO1xuICBwOTVNczogbnVtYmVyIHwgbnVsbDtcbiAgbGFzdFJ1bjogc3RyaW5nO1xufVxuXG4vKiogQ3Jvc3Mtb3JnIDMwLWRheSBhZ2dyZWdhdGUgZm9yIG9uZSBgKHB1Ymxpc2hlciwgbmFtZSlgIGxpc3RpbmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblJ1bnRpbWVBZ2dyZWdhdGUge1xuICBydW5zMzBkOiBudW1iZXI7XG4gIC8qKiAw4oCTMTsgbnVsbCB3aGVuIHRoZXJlIHdlcmUgbm8gcnVucy4gKi9cbiAgc3VjY2Vzc1JhdGUzMGQ6IG51bWJlciB8IG51bGw7XG4gIGFjdGl2ZU9yZ0NvdW50MzBkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRGYWlsdXJlIHtcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgb2NjdXJyZW5jZXM6IG51bWJlcjtcbiAgbGFzdFNlZW46IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgRE9SQSBoZWFkbGluZSBlbnZpcm9ubWVudC4gRGVwbG95bWVudCB0byB0aGlzIGxpdGVyYWwgZW52IG5hbWUgaXMgdGhlXG4gKiBpbmR1c3RyeS1zdGFuZGFyZCBET1JBIHNpZ25hbDsgTVRUUiBpcyBtZWFzdXJlZCBwcm9kdWN0aW9uLW9ubHksIGFuZCB0aGlzXG4gKiBlbnZpcm9ubWVudCdzIGNhcmQgaXMgdGhlIHN1bW1hcnkgc2hvd24gYXQgdGhlIHRvcCBvZiB0aGUgcGFuZWwuXG4gKi9cblxuLyoqIFBlci1vcmcgcmV0ZW50aW9uIG92ZXJyaWRlIHJvdy4gQm90aCBudWxsYWJsZSDih5IgZ2xvYmFsIGRlZmF1bHRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRpbmdSZXRlbnRpb25TZXR0aW5ncyB7XG4gIGV2ZW50UmV0ZW50aW9uRGF5czogbnVtYmVyIHwgbnVsbDtcbiAgZG9yYVJldGVudGlvbkRheXM6IG51bWJlciB8IG51bGw7XG4gIGRlZmF1bHRFdmVudFJldGVudGlvbkRheXM6IG51bWJlcjtcbiAgZGVmYXVsdERvcmFSZXRlbnRpb25EYXlzOiBudW1iZXI7XG59XG5cbi8qKiBPcHRpb25zIGZvciB0aGUgcmVwb3J0aW5nIHJldGVudGlvbiBzd2VlcC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0aW5nUmV0ZW50aW9uT3B0aW9ucyB7XG4gIC8qKiBSb3dzIGRlbGV0ZWQgcGVyIHN0YXRlbWVudCAoZGVmYXVsdCAxMDAwKS4gKi9cbiAgYmF0Y2hTaXplPzogbnVtYmVyO1xuICAvKiogTWF4IGJhdGNoZXMgcGVyIHRhYmxlIHBlciBvcmcgcGVyIHRpY2sgKGRlZmF1bHQgNTApOyB0aGUgcmVzdCBkZWZlcnMgdG9cbiAgICogIHRoZSBuZXh0IHRpY2sgc28gYSBodWdlIGJhY2tsb2cgY2FuJ3QgaG9sZCBsb2NrcyB0b28gbG9uZy4gKi9cbiAgbWF4QmF0Y2hlc1BlclRhYmxlPzogbnVtYmVyO1xuICAvKiogRml4ZWQgXCJub3dcIiBmb3IgdGhlIHdob2xlIHN3ZWVwIChkZWZhdWx0IGBuZXcgRGF0ZSgpYCkuICovXG4gIG5vdz86IERhdGU7XG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBvcmcgd2hvc2UgYGRvcmFfc2V0dGluZ3NgIHJldGVudGlvbiBnb3Zlcm5zIGBvcmdJZGAncyByb3dzIOKAlCBpdHNcbiAgICogYWNjb3VudCBST09ULiBSZXRlbnRpb24gaXMgYSBiaWxsaW5nIGVudGl0bGVtZW50IHN5bmNlZCBvbnRvIHRoZSByb290IG9ubHksXG4gICAqIHNvIGEgdGVhbSdzIHJvd3MgbXVzdCBmb2xsb3cgdGhlIHJvb3QncyAocHVyY2hhc2VkKSB3aW5kb3csIG5vdCB0aGUgZW52XG4gICAqIGRlZmF1bHQuIFJldHVybiBgbnVsbGAgd2hlbiB0aGUgcm9vdCBjYW4ndCBiZSByZXNvbHZlZDogdGhhdCBvcmcgaXMgU0tJUFBFRFxuICAgKiB0aGlzIHRpY2sgKG5ldmVyIHB1cmdlZCBvbiBhIHBvc3NpYmx5LXNob3J0ZXIgd2luZG93KS4gRGVmYXVsdDogaWRlbnRpdHlcbiAgICogKGV2ZXJ5IG9yZyBpcyBpdHMgb3duIHJvb3Qg4oCUIGEgZmxhdCBkZXBsb3ltZW50KS5cbiAgICovXG4gIHJlc29sdmVSZXRlbnRpb25PcmdJZD86IChvcmdJZDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xufVxuXG4vKiogUGVyLXJ1biBwdXJnZSB0YWxsaWVzIChhbHNvIGxvZ2dlZCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydGluZ1JldGVudGlvbkNvdW50cyB7XG4gIC8qKiBPcmdzIHN3ZXB0IHRoaXMgcnVuLiAqL1xuICBvcmdzOiBudW1iZXI7XG4gIC8qKiBTdGFuZGFyZCBgcGlwZWxpbmVfZXZlbnRzYCAoZW52aXJvbm1lbnQgSVMgTlVMTCkgcm93cyBwdXJnZWQuICovXG4gIHN0YW5kYXJkRXZlbnRzOiBudW1iZXI7XG4gIC8qKiBET1JBLXNvdXJjZSBgcGlwZWxpbmVfZXZlbnRzYCAoZW52aXJvbm1lbnQgSVMgTk9UIE5VTEwpIHJvd3MgcHVyZ2VkLiAqL1xuICBkb3JhRXZlbnRzOiBudW1iZXI7XG4gIC8qKiBgZGVwbG95bWVudF9vdXRjb21lc2Agcm93cyBwdXJnZWQuICovXG4gIGRlcGxveW1lbnRPdXRjb21lczogbnVtYmVyO1xuICAvKiogYGluY2lkZW50c2Agcm93cyBwdXJnZWQuICovXG4gIGluY2lkZW50czogbnVtYmVyO1xufVxuXG4vKipcbiAqIERPUkEgcGVyZm9ybWFuY2UgYmFuZC4gYG51bGxgID0gaW5zdWZmaWNpZW50IGRhdGEgdG8gY2xhc3NpZnkgKG5vXG4gKiBkZXBsb3ltZW50cy9mYWlsdXJlcy9sZWFkLXRpbWUgc2FtcGxlIGluIHRoZSB3aW5kb3cpLCBzbyB0aGUgVUkgc2hvd3MgYVxuICogbmV1dHJhbCBzdGF0ZSByYXRoZXIgdGhhbiBtaXNsYWJlbGluZyBhbiBlbXB0eSB3aW5kb3cgYXMgXCJsb3dcIi5cbiAqL1xuZXhwb3J0IHR5cGUgRG9yYUxldmVsID0gJ2VsaXRlJyB8ICdoaWdoJyB8ICdtZWRpdW0nIHwgJ2xvdycgfCBudWxsO1xuXG4vKiogT3B0aW9uYWwgc2NvcGluZyBmb3Ige0BsaW5rIFJlcG9ydGluZ1NlcnZpY2UuZ2V0RG9yYU1ldHJpY3N9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb3JhT3B0aW9ucyB7XG4gIC8qKiBSZXN0cmljdCB0byBhIHNpbmdsZSBwaXBlbGluZSAocGVyLXBpcGVsaW5lIERPUkEpLiAqL1xuICBwaXBlbGluZUlkPzogc3RyaW5nO1xuICAvKiogUmVzdHJpY3QgdG8gYSBzaW5nbGUgZGVwbG95IGVudmlyb25tZW50IChlbHNlIGFsbCBkZXBsb3kgZW52aXJvbm1lbnRzKS4gKi9cbiAgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQZXItb3JnIGluY2lkZW504oaSZGVwbG95IGNvcnJlbGF0aW9uIHdpbmRvdyBvdmVycmlkZSAoaG91cnMpLiBXaGVuIHNldCAoYVxuICAgKiBwb3NpdGl2ZSBmaW5pdGUgbnVtYmVyKSwgdGhlIGluY2lkZW50IGNvcnJlbGF0aW9uIHVzZXMgaXQgaW5zdGVhZCBvZiB0aGVcbiAgICogZ2xvYmFsIGBET1JBX0lOQ0lERU5UX1dJTkRPV19IT1VSU2AuIFRoZSByb3V0ZSByZXNvbHZlcyB0aGlzIGZyb20gdGhlIG9yZydzXG4gICAqIGBkb3JhX3NldHRpbmdzYCByb3cgKHNlZSB7QGxpbmsgUmVwb3J0aW5nU2VydmljZS5nZXRSZXBvcnRpbmdTZXR0aW5nc30pIGFuZFxuICAgKiBwYXNzZXMgaXQgaW47IHVuc2V0IGZhbGxzIGJhY2sgdG8gdGhlIGVudiBkZWZhdWx0LlxuICAgKi9cbiAgaW5jaWRlbnRXaW5kb3dIb3Vycz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQZXItb3JnIHJlcG9ydGluZyBzZXR0aW5ncyBzdXJmYWNlZCB0byB0aGUgb3JnLWFkbWluIHBhbmVsLiBgaW5jaWRlbnRXaW5kb3dIb3Vyc2BcbiAqIGlzIHRoZSBpbmNpZGVudOKGkmRlcGxveSBjb3JyZWxhdGlvbiB3aW5kb3c7IGBldmVudFJldGVudGlvbkRheXNgIC9cbiAqIGBkb3JhUmV0ZW50aW9uRGF5c2AgYXJlIHRoZSB0d28gcmV0ZW50aW9uLXN3ZWVwIHdpbmRvd3MuIEVhY2ggb3ZlcnJpZGVcbiAqIGlzIGBudWxsYCB3aGVuIHVuc2V0ICh0aGUgcGFpcmVkIGBkZWZhdWx0KmAgZmllbGQgc2hvd3MgdGhlIGVudiBmYWxsYmFjayBhcHBsaWVkKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRpbmdTZXR0aW5ncyB7XG4gIC8qKiBUaGUgb3JnJ3Mgc3RvcmVkIGNvcnJlbGF0aW9uLXdpbmRvdyBvdmVycmlkZSBpbiBob3Vycywgb3IgYG51bGxgIHdoZW4gdW5zZXQuICovXG4gIGluY2lkZW50V2luZG93SG91cnM6IG51bWJlciB8IG51bGw7XG4gIC8qKiBUaGUgZ2xvYmFsIGVudiBkZWZhdWx0IGFwcGxpZWQgd2hlbiBubyBvdmVycmlkZSBpcyBzdG9yZWQuICovXG4gIGRlZmF1bHRXaW5kb3dIb3VyczogbnVtYmVyO1xuICAvKiogU3RhbmRhcmQtZXZlbnQgcmV0ZW50aW9uIG92ZXJyaWRlIGluIGRheXMsIG9yIGBudWxsYCB3aGVuIHVuc2V0LiAqL1xuICBldmVudFJldGVudGlvbkRheXM6IG51bWJlciB8IG51bGw7XG4gIC8qKiBET1JBLXNvdXJjZSByZXRlbnRpb24gb3ZlcnJpZGUgaW4gZGF5cywgb3IgYG51bGxgIHdoZW4gdW5zZXQuICovXG4gIGRvcmFSZXRlbnRpb25EYXlzOiBudW1iZXIgfCBudWxsO1xuICAvKiogR2xvYmFsIHN0YW5kYXJkLWV2ZW50IHJldGVudGlvbiBkZWZhdWx0IGFwcGxpZWQgd2hlbiB1bnNldCAoZGF5cykuICovXG4gIGRlZmF1bHRFdmVudFJldGVudGlvbkRheXM6IG51bWJlcjtcbiAgLyoqIEdsb2JhbCBET1JBLXNvdXJjZSByZXRlbnRpb24gZGVmYXVsdCBhcHBsaWVkIHdoZW4gdW5zZXQgKGRheXMpLiAqL1xuICBkZWZhdWx0RG9yYVJldGVudGlvbkRheXM6IG51bWJlcjtcbn1cblxuLyoqIEEgcGFydGlhbCByZXBvcnRpbmctc2V0dGluZ3Mgd3JpdGUgKDcpLiBPbmx5IHByb3ZpZGVkIGZpZWxkcyBhcmVcbiAqICB1cHNlcnRlZDsgb21pdHRlZCBmaWVsZHMgYXJlIGxlZnQgdW5jaGFuZ2VkIChhbiBvbWl0dGVkIHJldGVudGlvbiBmaWVsZCBrZWVwc1xuICogIGl0cyBzdG9yZWQgb3ZlcnJpZGUgLyB0aGUgZ2xvYmFsIGRlZmF1bHQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRpbmdTZXR0aW5nc1BhdGNoIHtcbiAgaW5jaWRlbnRXaW5kb3dIb3Vycz86IG51bWJlcjtcbiAgZXZlbnRSZXRlbnRpb25EYXlzPzogbnVtYmVyO1xuICBkb3JhUmV0ZW50aW9uRGF5cz86IG51bWJlcjtcbn1cblxuLyoqIE9uZSByb3cgb2YgdGhlIG9yZy1hZG1pbiBpbmNpZGVudHMgbGlzdCAocmVjZW50IGluY2lkZW50cyArIGRlcGxveSBjb3JyZWxhdGlvbikuICovXG5leHBvcnQgaW50ZXJmYWNlIEluY2lkZW50TGlzdEl0ZW0ge1xuICBpbmNpZGVudElkOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHNldmVyaXR5OiBzdHJpbmc7XG4gIG9wZW5lZEF0OiBzdHJpbmcgfCBudWxsO1xuICByZXNvbHZlZEF0OiBzdHJpbmcgfCBudWxsO1xuICBjcmVhdGVkQXQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUcnVlIG9uY2UgdGhlIGluY2lkZW50IGhhcyBhIGByZXNvbHZlZF9hdGAuICovXG4gIHJlc29sdmVkOiBib29sZWFuO1xuICAvKiogVGhlIGNvcnJlbGF0ZWQgZGVwbG95IGV4ZWN1dGlvbiBpZCAobW9zdCByZWNlbnQgc3VjY2Vzc2Z1bCBkZXBsb3kgaW4td2luZG93KSwgb3IgbnVsbC4gKi9cbiAgY29ycmVsYXRlZEV4ZWN1dGlvbklkOiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhhdCBkZXBsb3kncyBjb21wbGV0aW9uIGluc3RhbnQsIG9yIG51bGwgd2hlbiB1bmNvcnJlbGF0ZWQuICovXG4gIGRlcGxveUNvbXBsZXRlZEF0OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKiogUmVzdWx0IG9mIHRoZSB3aXJpbmctdGVzdCBkcnktcnVuIGNvcnJlbGF0aW9uICh7QGxpbmsgUmVwb3J0aW5nU2VydmljZS50ZXN0SW5jaWRlbnRDb3JyZWxhdGlvbn0pLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmNpZGVudFRlc3RSZXN1bHQge1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICAvKiogVGhlIHN5bnRoZXRpYyBpbmNpZGVudCdzIG9wZW5lZEF0IChub3csIElTTykuICovXG4gIG9wZW5lZEF0OiBzdHJpbmc7XG4gIC8qKiBUaGUgZWZmZWN0aXZlIGNvcnJlbGF0aW9uIHdpbmRvdyB1c2VkLiAqL1xuICB3aW5kb3dIb3VyczogbnVtYmVyO1xuICAvKiogV2hldGhlciBhIHJlY2VudCBzdWNjZXNzZnVsIGRlcGxveSB0byBgZW52aXJvbm1lbnRgIGNvcnJlbGF0ZWQuICovXG4gIGNvcnJlbGF0ZWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgY29ycmVsYXRlZCBkZXBsb3kgZXhlY3V0aW9uIGlkLCBvciBudWxsLiAqL1xuICBleGVjdXRpb25JZDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoYXQgZGVwbG95J3MgY29tcGxldGlvbiBpbnN0YW50LCBvciBudWxsLiAqL1xuICBkZXBsb3lDb21wbGV0ZWRBdDogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gRE9SQSBwZXJmb3JtYW5jZSBiYW5kcyAodGhyZXNob2xkcyBmcm9tIHRoZSBET1JBL0FjY2VsZXJhdGUgcmVwb3J0cykuIEVhY2hcbi8vIGhlbHBlciByZXR1cm5zIGBudWxsYCB3aGVuIHRoZXJlJ3Mgbm8gc2FtcGxlIHRvIGNsYXNzaWZ5LlxuLyoqIERlcGxveW1lbnQgZnJlcXVlbmN5IGJ5IGRlcGxveXMvZGF5OiBlbGl0ZSDiiaUxL2RheSwgaGlnaCDiiaUxL3dlZWssIG1lZGl1bSDiiaUxL21vbnRoLiAqL1xuXG4vKipcbiAqIERPUkEgbWV0cmljcyBvdmVyIGEgW2Zyb20sdG9dIHdpbmRvdywgb3JnLXNjb3BlZCAoc2luZ2xlLW9yZyBvciByb2xsdXAgc3VidHJlZSkuXG4gKlxuICogREVQTE9ZLUJBU0lTIOKAlCBldmVyeSBtZXRyaWMgZGVyaXZlcyBmcm9tIHJlYWwgREVQTE9ZLVNUQUdFIGV4ZWN1dGlvbnMsIGkuZS5cbiAqIGBwaXBlbGluZV9ldmVudHNgIHJvd3Mgd2l0aCBgZXZlbnRfdHlwZT0nU1RBR0UnYCBhbmQgYSBub24tbnVsbCBgZW52aXJvbm1lbnRgXG4gKiAodGhlIGZvcndhcmRlciBzZXRzIGBlbnZpcm9ubWVudGAgb25seSBmb3IgdGhlIHN0YWdlcyBhIHVzZXIgZGVjbGFyZWQgaW5cbiAqIGBwYi5kZXBsb3lzYCkuIEEgQ0ktb25seSBidWlsZC90ZXN0IHBpcGVsaW5lIHdpdGggbm8gZGVwbG95IHN0YWdlIHByb2R1Y2VzIE5PXG4gKiBET1JBIGRhdGEg4oCUIHRoZXJlIGlzIG5vIHJ1bi1iYXNlZCBmYWxsYmFjay4gVGhlIHBhbmVsIGlzIGVtcHR5IHVudGlsIGRlcGxveWVkXG4gKiBwaXBlbGluZXMgcmUtc3ludGggd2l0aCB0aGUgbmV3IGRlcGxveSB0YWdzIGFuZCBzdGFydCBlbWl0dGluZyBkZXBsb3kgZXZlbnRzLlxuICpcbiAqIGBwcm9kdWN0aW9uYCBpcyB0aGUgaGVhZGxpbmUgZW52aXJvbm1lbnQ7IE1UVFIgaXMgbWVhc3VyZWQgcHJvZHVjdGlvbi1vbmx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvcmFNZXRyaWNzIHtcbiAgLyoqIFRoZSBbZnJvbSx0b10gd2luZG93IGVjaG9lZCBiYWNrIChkZXBsb3kgYGNvbXBsZXRlZF9hdGAgcmFuZ2UpLiAqL1xuICB3aW5kb3c6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH07XG4gIC8qKiBUaGUgc2NvcGluZyBhcHBsaWVkIChlY2hvZWQgZm9yIHRoZSBVSSk7IGBudWxsYCB3aGVuIHVuc2NvcGVkLiAqL1xuICBmaWx0ZXJzOiB7IHBpcGVsaW5lSWQ6IHN0cmluZyB8IG51bGw7IGVudmlyb25tZW50OiBzdHJpbmcgfCBudWxsIH07XG4gIC8qKiBUaGUgaGVhZGxpbmUgZW52aXJvbm1lbnQgbmFtZSAoYHByb2R1Y3Rpb25gKS4gKi9cbiAgaGVhZGxpbmU6IHN0cmluZztcbiAgLyoqIFBlci1lbnZpcm9ubWVudCBERiAvIENGUiAvIGxlYWQgdGltZS4gU29ydGVkIGhlYWRsaW5lLWZpcnN0LCB0aGVuIEHihpJaLiAqL1xuICBlbnZpcm9ubWVudHM6IERvcmFFbnZNZXRyaWNzW107XG4gIC8qKlxuICAgKiBNZWFuIFRpbWUgVG8gUmVzdG9yZSDigJQgUFJPRFVDVElPTi1PTkxZLCBmcm9tIGBkZXBsb3ltZW50X291dGNvbWVzYC5cbiAgICogYG1lZGlhbihyZXN0b3JlZC5hdCDiiJIgZGVwbG95ZWQuY29tcGxldGVkX2F0KWAgb3ZlciByZXN0b3JlZCBwcm9kdWN0aW9uXG4gICAqIGluY2lkZW50cyAoZGVsdGFzIGNsYW1wZWQg4omlMCkuIGBpbmNpZGVudHNgIGNvdW50cyBwcm9kdWN0aW9uIGRlcGxveXMgbWFya2VkXG4gICAqIGZhaWxlZDsgYHJlc3RvcmVkYCBjb3VudHMgdGhvc2UgdGhhdCByZWNvdmVyZWQ7IGBtZWRpYW5TZWNvbmRzYCBpcyBudWxsIHdoZW5cbiAgICogbm8gcmVzdG9yZWQgaW5jaWRlbnQgaGFzIGEgcmVzb2x2YWJsZSBkZXBsb3kgdGltZS5cbiAgICovXG4gIG1lYW5UaW1lVG9SZXN0b3JlOiB7XG4gICAgaW5jaWRlbnRzOiBudW1iZXI7XG4gICAgcmVzdG9yZWQ6IG51bWJlcjtcbiAgICBtZWRpYW5TZWNvbmRzOiBudW1iZXIgfCBudWxsO1xuICAgIGxldmVsOiBEb3JhTGV2ZWw7XG4gIH07XG4gIC8qKlxuICAgKiBDb3ZlcmFnZSByZWNvbmNpbGlhdGlvbiDigJQgcmVnaXN0ZXJlZCBwaXBlbGluZXMgd2l0aCBubyBvYnNlcnZlZCBkZXBsb3kgaW5cbiAgICogdGhlIHdpbmRvdy4gQSBoaWdoIGB3aXRob3V0RGVwbG95c2AgY291bnQgbWVhbnMgRE9SQSBpcyBibGluZCB0byBtb3N0IG9mIHRoZVxuICAgKiBmbGVldCAocGlwZWxpbmVzIHRoYXQgaGF2ZW4ndCByZS1zeW50aGVkIHdpdGggZGVwbG95IHRhZ3MsIG9yIGRvbid0IGRlcGxveSkuXG4gICAqL1xuICBjb3ZlcmFnZToge1xuICAgIC8qKiBQaXBlbGluZXMgaW4gdGhlIHJlZ2lzdHJ5IChvcmctc2NvcGVkKS4gKi9cbiAgICByZWdpc3RlcmVkOiBudW1iZXI7XG4gICAgLyoqIFJlZ2lzdGVyZWQgcGlwZWxpbmVzIHdpdGgg4omlMSBkZXBsb3ktc3RhZ2UgZXhlY3V0aW9uIGluIHRoZSB3aW5kb3cuICovXG4gICAgZGVwbG95aW5nOiBudW1iZXI7XG4gICAgLyoqIHJlZ2lzdGVyZWQg4oiSIGRlcGxveWluZyAoY2xhbXBlZCDiiaUwKS4gKi9cbiAgICB3aXRob3V0RGVwbG95czogbnVtYmVyO1xuICB9O1xufVxuXG4vKiogUGVyLWVudmlyb25tZW50IERPUkEgbWV0cmljcyAoZGVwbG95bWVudCBmcmVxdWVuY3ksIENGUiwgbGVhZCB0aW1lKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9yYUVudk1ldHJpY3Mge1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICAvKiogRGVwbG95bWVudCBGcmVxdWVuY3kg4oCUIHN1Y2Nlc3NmdWwgZGVwbG95LXN0YWdlIGV4ZWN1dGlvbnMgZm9yIHRoaXMgZW52LiAqL1xuICBkZXBsb3ltZW50RnJlcXVlbmN5OiB7XG4gICAgZGVwbG95bWVudHM6IG51bWJlcjtcbiAgICBwZXJEYXk6IG51bWJlcjtcbiAgICBsZXZlbDogRG9yYUxldmVsO1xuICB9O1xuICAvKipcbiAgICogQ2hhbmdlIEZhaWx1cmUgUmF0ZSDigJQgdHdvLWNsYXNzOlxuICAgKiBgKGRlcGxveVRpbWVGYWlsdXJlcyArIHBvc3REZXBsb3lGYWlsdXJlcykgLyBhdHRlbXB0c2AuXG4gICAqIC0gYGRlcGxveVRpbWVGYWlsdXJlc2Ag4oCUIGRlcGxveSBzdGFnZSBgcmVzdWx0PWZhaWxlZGAgKGZyb20gZXZlbnRzKS5cbiAgICogLSBgcG9zdERlcGxveUZhaWx1cmVzYCDigJQgYSBzdWNjZXNzZnVsIGRlcGxveSBsYXRlciBtYXJrZWQgZmFpbGVkIGluIHByb2RcbiAgICogICAoZnJvbSBgZGVwbG95bWVudF9vdXRjb21lc2ApLlxuICAgKiAtIGBhdHRlbXB0c2Ag4oCUIGFsbCB0ZXJtaW5hbCBkZXBsb3ktc3RhZ2UgYXR0ZW1wdHMgKHN1Y2NlZWRlZCArIGZhaWxlZCkuXG4gICAqL1xuICBjaGFuZ2VGYWlsdXJlUmF0ZToge1xuICAgIHJhdGU6IG51bWJlcjtcbiAgICBkZXBsb3lUaW1lRmFpbHVyZXM6IG51bWJlcjtcbiAgICBwb3N0RGVwbG95RmFpbHVyZXM6IG51bWJlcjtcbiAgICBhdHRlbXB0czogbnVtYmVyO1xuICAgIGxldmVsOiBEb3JhTGV2ZWw7XG4gIH07XG4gIC8qKlxuICAgKiBMZWFkIFRpbWUg4oCUIE1FQVNVUkVEOiBgbWVkaWFuKGRlcGxveV9jb21wbGV0ZWQg4oiSIG9sZGVzdF9jb21taXRfdGltZSlgIG92ZXJcbiAgICogc3VjY2Vzc2Z1bCBkZXBsb3lzIHdpdGggYSByZXNvbHZhYmxlIGNvbW1pdCB0aW1lc3RhbXAgKGRlbHRhcyBjbGFtcGVkIOKJpTApLlxuICAgKiBgbWVkaWFuU2Vjb25kc2AgaXMgYG51bGxgICg9IHVua25vd24pIHdoZW4gbm8gc3VjY2Vzc2Z1bCBkZXBsb3kgaW4gdGhpcyBlbnZcbiAgICogY2FycmllZCBhIGBjb21taXRfdGltZXN0YW1wYC4gVGhlIG9sZCBtZWRpYW4tcnVuLWR1cmF0aW9uIHByb3h5IGlzIHJlbW92ZWQuXG4gICAqL1xuICBsZWFkVGltZToge1xuICAgIC8qKiBTdWNjZXNzZnVsIGRlcGxveXMgd2l0aCBhIHJlc29sdmFibGUgY29tbWl0IHRpbWUgKHRoZSBtZWRpYW4gc2FtcGxlKS4gKi9cbiAgICBkZXBsb3ltZW50czogbnVtYmVyO1xuICAgIG1lZGlhblNlY29uZHM6IG51bWJlciB8IG51bGw7XG4gICAgbGV2ZWw6IERvcmFMZXZlbDtcbiAgfTtcbn1cblxuLyoqIE9uZSBpbnRlcnZhbCBidWNrZXQgb2YgdGhlIERPUkEgdHJlbmQgKGRlcGxveSBmcmVxdWVuY3kgKyBjaGFuZ2UgZmFpbHVyZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIERvcmFUcmVuZFBvaW50IHtcbiAgLyoqIEJ1Y2tldCBzdGFydCAoREFURV9UUlVOQyBvZiB0aGUgZGVwbG95IGBjb21wbGV0ZWRfYXRgKSwgSVNPIHRleHQuICovXG4gIHBlcmlvZDogc3RyaW5nO1xuICAvKiogU3VjY2Vzc2Z1bCBkZXBsb3ktc3RhZ2UgZXhlY3V0aW9ucyBpbiB0aGUgYnVja2V0LiAqL1xuICBkZXBsb3ltZW50czogbnVtYmVyO1xuICAvKiogRmFpbGVkIGRlcGxveS1zdGFnZSBleGVjdXRpb25zIGluIHRoZSBidWNrZXQuICovXG4gIGZhaWxlZDogbnVtYmVyO1xuICAvKiogc3VjY2VlZGVkICsgZmFpbGVkIGluIHRoZSBidWNrZXQgKGRlcGxveSBhdHRlbXB0cykuICovXG4gIHRvdGFsOiBudW1iZXI7XG4gIC8qKiBmYWlsZWQvdG90YWwgYXMgYSBwZXJjZW50ICgwIHdoZW4gdG90YWwgaXMgMCkuIERlcGxveS10aW1lIENGUiBvbmx5LiAqL1xuICBjaGFuZ2VGYWlsdXJlUGN0OiBudW1iZXI7XG59XG5cbi8qKiBQZXItc3RhZ2UgYnVpbGQtaGVhbHRoIG1ldHJpY3MgZm9yIG9uZSBwaXBlbGluZSBvdmVyIGEgd2luZG93LiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZEhlYWx0aFN0YWdlIHtcbiAgc3RhZ2U6IHN0cmluZztcbiAgLyoqIFRlcm1pbmFsIHN0YWdlIHJ1bnMgKHN1Y2NlZWRlZCArIGZhaWxlZCkgaW4gdGhlIHdpbmRvdy4gKi9cbiAgcnVuczogbnVtYmVyO1xuICBzdWNjZXNzZXM6IG51bWJlcjtcbiAgZmFpbHVyZXM6IG51bWJlcjtcbiAgLyoqIHN1Y2Nlc3NlcyAvIHJ1bnMgYXMgYSBwZXJjZW50ICgwIHdoZW4gcnVucyBpcyAwKS4gKi9cbiAgc3VjY2Vzc1JhdGU6IG51bWJlcjtcbiAgLyoqIER1cmF0aW9uIHBlcmNlbnRpbGVzIG92ZXIgdGhlIHN0YWdlJ3MgdGVybWluYWwgcnVuczsgbnVsbCB3aGVuIG5vIGR1cmF0aW9ucy4gKi9cbiAgcDUwTXM6IG51bWJlciB8IG51bGw7XG4gIHA5ME1zOiBudW1iZXIgfCBudWxsO1xuICBwOTlNczogbnVtYmVyIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBQZXItcGlwZWxpbmUgYnVpbGQtaGVhbHRoIGJyZWFrZG93bi4gU3RhbmRhcmQgcmVwb3J0aW5nIChOT1RcbiAqIGBhZHZhbmNlZF9yZXBvcnRpbmdgLWdhdGVkKSDigJQgcGVyLXN0YWdlIHN1Y2Nlc3MgcmF0ZSArIHRpbWluZyBwZXJjZW50aWxlcywgd2l0aFxuICogdG90YWxzIHN1bW1lZCBhY3Jvc3Mgc3RhZ2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkSGVhbHRoIHtcbiAgc3RhZ2VzOiBCdWlsZEhlYWx0aFN0YWdlW107XG4gIHRvdGFsczogeyBydW5zOiBudW1iZXI7IGZhaWx1cmVzOiBudW1iZXI7IGZhaWx1cmVSYXRlOiBudW1iZXIgfTtcbn1cblxuLyoqIFBvc3QtZGVwbG95IGluY2lkZW50IG1hcmtlciBhY2NlcHRlZCBieSBgUmVwb3J0aW5nU2VydmljZS5yZWNvcmRJbmNpZGVudGAuICovXG5leHBvcnQgaW50ZXJmYWNlIEluY2lkZW50SW5wdXQge1xuICBpbmNpZGVudElkOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIG9wZW5lZEF0OiBzdHJpbmc7XG4gIHJlc29sdmVkQXQ/OiBzdHJpbmc7XG4gIHNldmVyaXR5OiBzdHJpbmc7XG59XG5cbi8qKiBFdmVudCBwYXlsb2FkIGFjY2VwdGVkIGJ5IGBSZXBvcnRpbmdTZXJ2aWNlLmluZ2VzdEV2ZW50c2AuIE1pcnJvcnMgdGhlIHJvdXRlJ3MgWm9kIHNoYXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RFdmVudCB7XG4gIC8qKiBTdGFibGUgcGlwZWxpbmUgaWQgdGhlIGV2ZW50cyBMYW1iZGEgcmVhZCBmcm9tIHRoZSBgcGIucGlwZWxpbmUtaWRgXG4gICAqICB0YWcgKD0gdGhlIHBsYXRmb3JtIHBpcGVsaW5lSWQpLiBUaGUgcmVnaXN0cnkgam9pbiBrZXkuICovXG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgZXZlbnRTb3VyY2U6ICdjb2RlcGlwZWxpbmUnIHwgJ2NvZGVidWlsZCcgfCAncGx1Z2luLWJ1aWxkJztcbiAgZXZlbnRUeXBlOiAnUElQRUxJTkUnIHwgJ1NUQUdFJyB8ICdBQ1RJT04nIHwgJ0JVSUxEJztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIGV4ZWN1dGlvbklkPzogc3RyaW5nO1xuICBzdGFnZU5hbWU/OiBzdHJpbmc7XG4gIGFjdGlvbk5hbWU/OiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBmYWlsdXJlIHJlYXNvbiAoQWN0aW9uIGV2ZW50cykuICovXG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBjb21wbGV0ZWRBdD86IHN0cmluZztcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgLyoqIFNvdXJjZSBjb21taXQgaWQgb2YgdGhlIGNoYW5nZSBiZWluZyBzaGlwcGVkIChET1JBIGRlcGxveSBhdHRyaWJ1dGlvbikuICovXG4gIGNvbW1pdFNoYT86IHN0cmluZztcbiAgLyoqIFNvdXJjZSByZWYvYnJhbmNoIChET1JBIGRlcGxveSBhdHRyaWJ1dGlvbikuICovXG4gIGNvbW1pdFJlZj86IHN0cmluZztcbiAgLyoqIERlcGxveSB0YXJnZXQgKGUuZy4gXCJwcm9kdWN0aW9uXCIpLiBJdHMgcHJlc2VuY2Ugb24gYSBTVEFHRS9BQ1RJT04gZXZlbnRcbiAgICogIG1hcmtzIGEgcmVhbCBkZXBsb3ltZW50IChkZXJpdmVkIHNlcnZlci1zaWRlIOKAlCB0aGVyZSBpcyBubyBgaXNEZXBsb3lgKS4gKi9cbiAgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG4gIC8qKiBPbGRlc3QgdW5zaGlwcGVkIGNvbW1pdCB0aW1lc3RhbXAgKElTTyA4NjAxKSBmb3IgbWVhc3VyZWQgbGVhZCB0aW1lLiAqL1xuICBjb21taXRUaW1lc3RhbXA/OiBzdHJpbmc7XG4gIC8qKiBOdW1iZXIgb2YgY29tbWl0cyBzaGlwcGVkIGluIHRoaXMgY2hhbmdlICjiiaUxKS4gKi9cbiAgY29tbWl0Q291bnQ/OiBudW1iZXI7XG4gIGRldGFpbD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIFBlci1ldmVudCBtZXRyaWMgZGVzY3JpcHRvciBlbWl0dGVkICh2aWEgdGhlIHtAbGluayBSZXBvcnRpbmdTZXJ2aWNlLmluZ2VzdEV2ZW50c31cbiAqIGBvbk1ldHJpY2AgaG9vaykgZm9yIGVhY2ggUkVHSVNURVJFRCB0ZXJtaW5hbCBkZXBsb3kvc3RhZ2UgZXZlbnQsIHNvIHRoZSByb3V0ZVxuICogbGF5ZXIgY2FuIGZhbiB0aGVtIGludG8gUHJvbWV0aGV1cyBjb3VudGVycyB3aXRob3V0IHBpcGVsaW5lLWRhdGEgaW1wb3J0aW5nXG4gKiBhcGktc2VydmVyJ3MgbWV0cmljcyByZWdpc3RyeS4gYHJlc3VsdGAgaXMgdGhlIHRlcm1pbmFsIG91dGNvbWU7IGBlbnZpcm9ubWVudGBcbiAqIGlzIG5vbi1udWxsIG9ubHkgZm9yIGEgZGVwbG95LXN0YWdlIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdE1ldHJpYyB7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgc3RhZ2U6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZyB8IG51bGw7XG4gIHJlc3VsdDogJ3N1Y2NlZWRlZCcgfCAnZmFpbGVkJztcbn1cblxuLyoqIENvdW50cyArIHRoZSAocG9zc2libHkgdHJ1bmNhdGVkKSBsaXN0IG9mIHVucmVnaXN0ZXJlZCBwaXBlbGluZSBpZHMgdGhlIGNhbGxlciBjYW4gbG9nLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RSZXN1bHQge1xuICBpbnNlcnRlZDogbnVtYmVyO1xuICBza2lwcGVkOiBudW1iZXI7XG4gIHVucmVnaXN0ZXJlZFBpcGVsaW5lSWRzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEV2ZXJ5IG9yZyB3aXRoIGF0IGxlYXN0IG9uZSByb3cgaW4gdGhpcyBiYXRjaCwgZGVkdXBlZC5cbiAgICpcbiAgICogQWxyZWFkeSBjb21wdXRlZCBmb3IgcG9zdC1jb21taXQgY2FjaGUgaW52YWxpZGF0aW9uOyBzdXJmYWNlZCBiZWNhdXNlIHRoZVxuICAgKiBpbmdlc3Qgcm91dGUgbmVlZHMgdGhlIHNhbWUgc2V0IHRvIHB1c2ggaXRzIGxpdmUgU1NFIGZyYW1lLiBUaGUgc3RhZ2UtbWV0cmljXG4gICAqIGhvb2sgY2FuJ3QgZHJpdmUgdGhhdCBmYW4tb3V0OiBpdCBvbmx5IGZpcmVzIGZvciBTVEFHRSBldmVudHMsIHNvIGEgYmF0Y2ggb2ZcbiAgICogUElQRUxJTkUgb3IgQlVJTEQgZXZlbnRzIHdvdWxkIGxhbmQgcm93cyBhbmQgcHVzaCBubyBmcmFtZSBhdCBhbGwuXG4gICAqL1xuICBhZmZlY3RlZE9yZ3M6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSBvcmcncyBpbmdlc3Rpb24taGVhbHRoIHJvdyBhcyBSRUFEIGJhY2sgYnkgdGhlIFJlcG9ydHMgVUkuIFRoZVxuICogQVdTIGV2ZW50cyBMYW1iZGEgd3JpdGVzIGl0OyB0aGlzIGlzIHRoZSBzaGFwZSB0aGF0IGxldHMgdGhlIFVJIHRlbGxcbiAqIFwiaW5nZXN0aW9uIGlzIGhlYWx0aHksIHRoZXJlIHdlcmUgc2ltcGx5IG5vIGRlcGxveXMgaW4gdGhlIHJhbmdlXCIgYXBhcnQgZnJvbVxuICogXCJ3ZSBoYXZlbid0IGhlYXJkIGZyb20gdGhlIGluZ2VzdCBwaXBlbGluZSBzaW5jZSBYXCIuXG4gKlxuICogYG51bGxgIGZyb20ge0BsaW5rIFJlcG9ydGluZ1NlcnZpY2UuZ2V0SW5nZXN0SGVhbHRofSBtZWFucyB0aGUgZGVwbG95bWVudCBoYXNcbiAqIE5FVkVSIHJlcG9ydGVkIOKAlCBub3QgXCJzdGFsZVwiLiBUaGUgdHdvIG11c3Qgbm90IGJlIGNvbmZsYXRlZDogYSBmcmVzaCBpbnN0YWxsXG4gKiAob3Igb25lIHdob3NlIGZvcndhcmRlciB3YXMgbmV2ZXIgd2lyZWQgdXApIGhhcyBubyBoZWFydGJlYXQgYXQgYWxsLCBhbmRcbiAqIGNhbGxpbmcgdGhhdCBcInN0YWxlXCIgd291bGQgaW52ZW50IGEgcmVncmVzc2lvbiB0aGF0IG5ldmVyIGhhcHBlbmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdEhlYWx0aFN0YXR1cyB7XG4gIC8qKiBXaGVuIHRoZSBmb3J3YXJkZXIgbGFzdCBwb3N0ZWQgYSBoZWFydGJlYXQgKGl0cyBvd24gY2xvY2ssIElTTyA4NjAxKS4gKi9cbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIC8qKiBUaW1lc3RhbXAgb2YgdGhlIG5ld2VzdCBldmVudCBpdCBoYWQgZm9yd2FyZGVkLCBvciBudWxsIGlmIGl0IGhhcyBzZWVuIG5vbmUuICovXG4gIGxhc3RFdmVudEF0OiBzdHJpbmcgfCBudWxsO1xuICAvKiogQ3VtdWxhdGl2ZSBldmVudHMgZm9yd2FyZGVkLCBvciBudWxsIHdoZW4gdGhlIGZvcndhcmRlciBkb2Vzbid0IHJlcG9ydCBpdC4gKi9cbiAgZm9yd2FyZGVkOiBudW1iZXIgfCBudWxsO1xuICAvKiogQ3VtdWxhdGl2ZSBldmVudHMgRFJPUFBFRCAobm9uLXplcm8g4oeSIGRhdGEgbG9zcyB1cHN0cmVhbSBvZiB0aGUgcmVwb3J0cykuICovXG4gIGRyb3BwZWQ6IG51bWJlciB8IG51bGw7XG59XG5cblxuLyoqXG4gKiBSZWFkLW9ubHkgcmVwb3J0aW5nIHNlcnZpY2UgZm9yIHBpcGVsaW5lIGV4ZWN1dGlvbiBhbmQgcGx1Z2luIGludmVudG9yeSBhZ2dyZWdhdGlvbnMuXG4gKiBEb2VzIG5vdCBleHRlbmQgQ3J1ZFNlcnZpY2Ug4oCUIHJlcG9ydHMgYXJlIGFnZ3JlZ2F0ZSBxdWVyaWVzLCBub3QgZW50aXR5IENSVUQuXG4gKlxuICogQWxsIHF1ZXJpZXMgYXJlIGNhY2hlZCBpbi1tZW1vcnkgdG8gYXZvaWQgcmVwZWF0ZWQgZXhwZW5zaXZlIFNRTCBhZ2dyZWdhdGlvbnM6XG4gKiAtIEludmVudG9yeSBxdWVyaWVzIChwbHVnaW4gc3VtbWFyeS9kaXN0cmlidXRpb24vdmVyc2lvbnMpOiA1IG1pbiBUVExcbiAqIC0gVGltZXNlcmllcyBxdWVyaWVzIChleGVjdXRpb24vYnVpbGQgbWV0cmljcyB3aXRoIGRhdGUgcmFuZ2VzKTogMiBtaW4gVFRMXG4gKi9cblxuLyoqXG4gKiBJbnRlcm5hbCByb3cgc2hhcGVzIGZvciB0aGUgRE9SQSBxdWVyaWVzLiBFeHBvcnRlZCBiZWNhdXNlIC4vZG9yYS50cyBjb25zdW1lc1xuICogdGhlbTsgbm90IHBhcnQgb2YgdGhlIHBhY2thZ2UncyBwdWJsaWMgc3VyZmFjZSAocmVwb3J0aW5nLXNlcnZpY2UudHNcbiAqIHJlLWV4cG9ydHMgdGhpcyBtb2R1bGUgd2hvbGVzYWxlLCB3aGljaCBpcyBhIGRlbGliZXJhdGUgc2ltcGxpZmljYXRpb24g4oCUIHRoZXNlXG4gKiBkZXNjcmliZSBxdWVyeSByZXN1bHRzLCBub3QgQVBJIGNvbnRyYWN0cykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95Um93IHtcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgc3RhdHVzOiAnU1VDQ0VFREVEJyB8ICdGQUlMRUQnIHwgc3RyaW5nO1xuICAvKiogRGVwbG95IGV4ZWN1dGlvbiBpZCDigJQgdGhlIGF0dHJpYnV0aW9uIGtleSBmb3IgZGVkdXAgYWdhaW5zdCBvdXRjb21lcy9pbmNpZGVudHMuICovXG4gIGV4ZWN1dGlvbl9pZDogc3RyaW5nIHwgbnVsbDtcbiAgY29tcGxldGVkX2F0OiBzdHJpbmcgfCBudWxsO1xuICBjb21taXRfdHM6IHN0cmluZyB8IG51bGw7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkZXBsb3kgY29tcGxldGVkIGluc2lkZSBbZnJvbSx0b10uIEFic2VudCAodW5kZWZpbmVkKSBpbiB1bml0XG4gICAqIGZpeHR1cmVzIOKHkiB0cmVhdGVkIGFzIGluLXdpbmRvdy4gYHRgL2BmYCB0b2xlcmF0ZWQgKHBnIGJvb2xlYW4gdGV4dCBmb3JtKS5cbiAgICovXG4gIGluX3dpbmRvdz86IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsO1xufVxuXG4vKiogUmF3IHBvc3QtZGVwbG95IG91dGNvbWUgbWFya2VyIHJvdyAoZnJvbSBgZGVwbG95bWVudF9vdXRjb21lc2AsIGluLXdpbmRvdykuICovXG5leHBvcnQgaW50ZXJmYWNlIE91dGNvbWVSb3cge1xuICBlbnZpcm9ubWVudDogc3RyaW5nIHwgbnVsbDtcbiAgb3V0Y29tZTogJ2ZhaWxlZCcgfCAncmVzdG9yZWQnIHwgc3RyaW5nO1xuICAvKiogRXhlY3V0aW9uIHRoZSB1c2VyIG1hcmtlZCDigJQgZGVkdXAga2V5IGFnYWluc3QgaW5jaWRlbnQtY29ycmVsYXRlZCBkZXBsb3lzLiAqL1xuICBleGVjdXRpb25faWQ6IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBQcm9kdWN0aW9uIHJlc3RvcmVkLWluY2lkZW50IHBhaXI6IHJlY292ZXJ5IHRpbWUgKyB0aGUgZGVwbG95J3MgY29tcGxldGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTXR0clBhaXJSb3cge1xuICByZXN0b3JlZF9hdDogc3RyaW5nIHwgbnVsbDtcbiAgZGVwbG95ZWRfYXQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBFeGVjdXRpb24gaWQg4oCUIGxldHMgaW5jaWRlbnQgcHJlY2VkZW5jZSBvdmVycmlkZSB0aGUgbWFudWFsIG91dGNvbWUgcGVyIGRlcGxveS4gKi9cbiAgZXhlY3V0aW9uX2lkOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIFJhdyBpbmNpZGVudCByb3cgKGZyb20gYGluY2lkZW50c2AsIG9wZW5lZCBpbi13aW5kb3cpLiBDb3JyZWxhdGVkIGluIEpTIHRvIHRoZVxuICogbW9zdCByZWNlbnQgc3VjY2Vzc2Z1bCBkZXBsb3kgdG8gYGVudmlyb25tZW50YCB3aXRoaW4gRE9SQV9JTkNJREVOVF9XSU5ET1dfSE9VUlNcbiAqIOKGkiBhbiBhdXRvbWF0ZWQgcG9zdC1kZXBsb3kgZmFpbHVyZSAoQ0ZSKSArIHJlYWwgcmVjb3ZlcnkgdGltZSAoTVRUUikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5jaWRlbnRSb3cge1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBvcGVuZWRfYXQ6IHN0cmluZyB8IG51bGw7XG4gIHJlc29sdmVkX2F0OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKiogQ292ZXJhZ2UgY291bnRzOiByZWdpc3RlcmVkIHBpcGVsaW5lcyB2cyB0aG9zZSB0aGF0IGFjdHVhbGx5IGRlcGxveWVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb3ZlcmFnZVJvdyB7XG4gIHJlZ2lzdGVyZWQ6IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG4gIGRlcGxveWluZzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbn1cbiJdfQ==
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUHVibGljIHJlc3VsdCBzaGFwZXMgZm9yIHRoZSByZXBvcnRpbmcgc2VydmljZS5cbiAqXG4gKiBTcGxpdCBvdXQgb2YgcmVwb3J0aW5nLXNlcnZpY2UudHMgcHVyZWx5IGZvciBzaXplOiB0aGVzZSBhcmUgZGF0YSBjb250cmFjdHNcbiAqIHdpdGggbm8gYmVoYXZpb3VyLiByZXBvcnRpbmctc2VydmljZS50cyByZS1leHBvcnRzIHRoZW0sIHNvIHRoZVxuICogYEBwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGFgIHB1YmxpYyBzdXJmYWNlIGlzIHVuY2hhbmdlZC5cbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkNvdW50IHtcbiAgaWQ6IHN0cmluZztcbiAgcHJvamVjdDogc3RyaW5nO1xuICBvcmdhbml6YXRpb246IHN0cmluZztcbiAgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICB0b3RhbDogbnVtYmVyO1xuICBzdWNjZWVkZWQ6IG51bWJlcjtcbiAgZmFpbGVkOiBudW1iZXI7XG4gIGNhbmNlbGVkOiBudW1iZXI7XG4gIGZpcnN0RXhlY3V0aW9uOiBzdHJpbmcgfCBudWxsO1xuICBsYXN0RXhlY3V0aW9uOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVTZXJpZXNFbnRyeSB7XG4gIHBlcmlvZDogc3RyaW5nO1xuICBzdWNjZWVkZWQ6IG51bWJlcjtcbiAgZmFpbGVkOiBudW1iZXI7XG4gIGNhbmNlbGVkOiBudW1iZXI7XG4gIHN1Y2Nlc3NQY3Q6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdXJhdGlvblN0YXRzIHtcbiAgaWQ6IHN0cmluZztcbiAgcHJvamVjdDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGF2Z01zOiBudW1iZXI7XG4gIG1pbk1zOiBudW1iZXI7XG4gIG1heE1zOiBudW1iZXI7XG4gIHA5NU1zOiBudW1iZXI7XG4gIGV4ZWN1dGlvbnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUV4ZWN1dGlvbiB7XG4gIGV4ZWN1dGlvbklkOiBzdHJpbmc7XG4gIC8qKiBSb2xsZWQtdXAgdGVybWluYWwgc3RhdHVzOiBzdWNjZWVkZWQgfCBmYWlsZWQgfCBjYW5jZWxlZCB8IGluLXByb2dyZXNzLiAqL1xuICBzdGF0dXM6IHN0cmluZztcbiAgc3RhcnRlZEF0OiBzdHJpbmcgfCBudWxsO1xuICBlbmRlZEF0OiBzdHJpbmcgfCBudWxsO1xuICBkdXJhdGlvbk1zOiBudW1iZXIgfCBudWxsO1xuICAvKiogRmlyc3QgZmFpbGluZyBzdGFnZS9hY3Rpb24gZm9yIHRoZSBleGVjdXRpb24gKG51bGwgd2hlbiBpdCBkaWRuJ3QgZmFpbCkuICovXG4gIGZhaWxpbmdTdGFnZTogc3RyaW5nIHwgbnVsbDtcbiAgZmFpbGluZ0FjdGlvbjogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFnZUZhaWx1cmUge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgZmFpbHVyZXM6IG51bWJlcjtcbiAgdG90YWw6IG51bWJlcjtcbiAgZmFpbHVyZVBjdDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlQm90dGxlbmVjayB7XG4gIGlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIGF2Z01zOiBudW1iZXI7XG4gIG1heE1zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRmFpbHVyZSB7XG4gIGFjdGlvbk5hbWU6IHN0cmluZztcbiAgZmFpbHVyZXM6IG51bWJlcjtcbiAgdG90YWw6IG51bWJlcjtcbiAgZmFpbHVyZVBjdDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yRW50cnkge1xuICBlcnJvclBhdHRlcm46IHN0cmluZztcbiAgb2NjdXJyZW5jZXM6IG51bWJlcjtcbiAgYWZmZWN0ZWRQaXBlbGluZXM6IG51bWJlcjtcbiAgbGFzdFNlZW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TdW1tYXJ5IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgYWN0aXZlOiBudW1iZXI7XG4gIGluYWN0aXZlOiBudW1iZXI7XG4gIC8qKiBDb3VudHMgcGVyIHNoYXJpbmcgcnVuZyDigJQgb25lIGJ1Y2tldCBwZXIgYHZpc2liaWxpdHlgIHZhbHVlLiAqL1xuICBwdWJsaWM6IG51bWJlcjtcbiAgb3JnOiBudW1iZXI7XG4gIHByaXZhdGU6IG51bWJlcjtcbiAgdW5pcXVlTmFtZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlQ29tcHV0ZURpc3RyaWJ1dGlvbiB7XG4gIHBsdWdpblR5cGU6IHN0cmluZztcbiAgY29tcHV0ZVR5cGU6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uQ291bnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb25Db3VudDogbnVtYmVyO1xuICBsYXRlc3RWZXJzaW9uOiBzdHJpbmc7XG4gIGhhc0RlZmF1bHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRUaW1lU2VyaWVzRW50cnkge1xuICBwZXJpb2Q6IHN0cmluZztcbiAgc3VjY2VlZGVkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBzdWNjZXNzUGN0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGREdXJhdGlvbiB7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgYXZnTXM6IG51bWJlcjtcbiAgbWF4TXM6IG51bWJlcjtcbiAgYnVpbGRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogUGx1Z2luIHJ1bnRpbWUgcmVwb3J0IGZpbHRlcnMuIGBwdWJsaXNoZXI6IG51bGxgIHNlbGVjdHMgb3duLW9yZ1xuICogKHB1Ymxpc2hlci1sZXNzKSBwbHVnaW5zOyBhbiBvbWl0dGVkIGZpZWxkIGRvZXNuJ3QgZmlsdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblJ1bnRpbWVGaWx0ZXIge1xuICBuYW1lPzogc3RyaW5nO1xuICBwdWJsaXNoZXI/OiBzdHJpbmcgfCBudWxsO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKiogUGVyIHBsdWdpbiB2ZXJzaW9uIHJ1bnRpbWUgc3RhdHMgb3ZlciBhIHdpbmRvdyAodGVybWluYWwgQUNUSU9OIHJ1bnMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5SdW50aW1lU3RhdHMge1xuICBwbHVnaW5QdWJsaXNoZXI6IHN0cmluZyB8IG51bGw7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICBydW5zOiBudW1iZXI7XG4gIHN1Y2NlZWRlZDogbnVtYmVyO1xuICBmYWlsZWQ6IG51bWJlcjtcbiAgLyoqIDDigJMxMDAsIG9uZSBkZWNpbWFsLiAqL1xuICBzdWNjZXNzUGN0OiBudW1iZXI7XG4gIC8qKiBOdWxsIHdoZW4gbm8gcnVuIGluIHRoZSBncm91cCBjYXJyaWVkIGEgZHVyYXRpb24uICovXG4gIHA1ME1zOiBudW1iZXIgfCBudWxsO1xuICBwOTVNczogbnVtYmVyIHwgbnVsbDtcbiAgbGFzdFJ1bjogc3RyaW5nO1xufVxuXG4vKiogQ3Jvc3Mtb3JnIDMwLWRheSBhZ2dyZWdhdGUgZm9yIG9uZSBgKHB1Ymxpc2hlciwgbmFtZSlgIGxpc3RpbmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblJ1bnRpbWVBZ2dyZWdhdGUge1xuICBydW5zMzBkOiBudW1iZXI7XG4gIC8qKiAw4oCTMTsgbnVsbCB3aGVuIHRoZXJlIHdlcmUgbm8gcnVucy4gKi9cbiAgc3VjY2Vzc1JhdGUzMGQ6IG51bWJlciB8IG51bGw7XG4gIGFjdGl2ZU9yZ0NvdW50MzBkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRGYWlsdXJlIHtcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgb2NjdXJyZW5jZXM6IG51bWJlcjtcbiAgbGFzdFNlZW46IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgRE9SQSBoZWFkbGluZSBlbnZpcm9ubWVudC4gRGVwbG95bWVudCB0byB0aGlzIGxpdGVyYWwgZW52IG5hbWUgaXMgdGhlXG4gKiBpbmR1c3RyeS1zdGFuZGFyZCBET1JBIHNpZ25hbDsgTVRUUiBpcyBtZWFzdXJlZCBwcm9kdWN0aW9uLW9ubHksIGFuZCB0aGlzXG4gKiBlbnZpcm9ubWVudCdzIGNhcmQgaXMgdGhlIHN1bW1hcnkgc2hvd24gYXQgdGhlIHRvcCBvZiB0aGUgcGFuZWwuXG4gKi9cblxuLyoqIFBlci1vcmcgcmV0ZW50aW9uIG92ZXJyaWRlIHJvdy4gQm90aCBudWxsYWJsZSDih5IgZ2xvYmFsIGRlZmF1bHRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRpbmdSZXRlbnRpb25TZXR0aW5ncyB7XG4gIGV2ZW50UmV0ZW50aW9uRGF5czogbnVtYmVyIHwgbnVsbDtcbiAgZG9yYVJldGVudGlvbkRheXM6IG51bWJlciB8IG51bGw7XG4gIGRlZmF1bHRFdmVudFJldGVudGlvbkRheXM6IG51bWJlcjtcbiAgZGVmYXVsdERvcmFSZXRlbnRpb25EYXlzOiBudW1iZXI7XG59XG5cbi8qKiBPcHRpb25zIGZvciB0aGUgcmVwb3J0aW5nIHJldGVudGlvbiBzd2VlcC4gKi9cbi8qKlxuICogSG93IGEgdGltZS1idWNrZXRlZCByZXBvcnQgc2xpY2VzIGl0cyBwZXJpb2RzLiBBYnNlbnQgbWVhbnMgVVRDICsgTW9uZGF5LCB3aGljaFxuICogaXMgd2hhdCBldmVyeSBwcmUtdGltZXpvbmUgY2FsbGVyIGdvdCDigJQgc28gYW4gb21pdHRlZCB2YWx1ZSBjYW4gbmV2ZXIgc2lsZW50bHlcbiAqIGNoYW5nZSBhbiBleGlzdGluZyByZXBvcnQncyBib3VuZGFyaWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldE9wdGlvbnMge1xuICAvKiogSUFOQSB0aW1lem9uZSB0aGUgYnVja2V0cyBhcmUgY3V0IGluICh2YWxpZGF0ZWQgYXQgdGhlIHJvdXRlKS4gKi9cbiAgdHo/OiBzdHJpbmc7XG4gIC8qKiBXaGVyZSB0aGUgd2VlayBzdGFydHMuIFBvc3RncmVzIERBVEVfVFJVTkMgaXMgTW9uZGF5LW9ubHksIHNvIGBzdW5kYXlgXG4gICAqICBzaGlmdHMgdGhlIGJvdW5kYXJ5IGV4cGxpY2l0bHkuICovXG4gIHdlZWtTdGFydD86ICdtb25kYXknIHwgJ3N1bmRheSc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0aW5nUmV0ZW50aW9uT3B0aW9ucyB7XG4gIC8qKiBSb3dzIGRlbGV0ZWQgcGVyIHN0YXRlbWVudCAoZGVmYXVsdCAxMDAwKS4gKi9cbiAgYmF0Y2hTaXplPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGxlYWRlci1sb2NrZWQgcnVuIHRoaXMgc3dlZXAgYmVsb25ncyB0by4gQ2hlY2tlZCBCRVRXRUVOIE9SR1M6IGFib3J0ZWRcbiAgICogbWVhbnMgdGhlIGxvY2sgd2FzIGxvc3QgKGFub3RoZXIgcG9kIGlzIHRha2luZyBvdmVyKSBvciB0aGUgcHJvY2VzcyBpc1xuICAgKiBzaHV0dGluZyBkb3duLCBhbmQgdGhlIHJlbWFpbmluZyBvcmdzIGFyZSBwaWNrZWQgdXAgbmV4dCB0aWNrLiBXaXRob3V0IGl0IGFcbiAgICogbG9uZyBzd2VlcCBrZXB0IGRlbGV0aW5nIGFmdGVyIGFub3RoZXIgcG9kIGhhZCBhbHJlYWR5IHRha2VuIHRoZSBsb2NrLlxuICAgKi9cbiAgcnVuPzogeyBzaWduYWw6IEFib3J0U2lnbmFsIH07XG4gIC8qKiBNYXggYmF0Y2hlcyBwZXIgdGFibGUgcGVyIG9yZyBwZXIgdGljayAoZGVmYXVsdCA1MCk7IHRoZSByZXN0IGRlZmVycyB0b1xuICAgKiAgdGhlIG5leHQgdGljayBzbyBhIGh1Z2UgYmFja2xvZyBjYW4ndCBob2xkIGxvY2tzIHRvbyBsb25nLiAqL1xuICBtYXhCYXRjaGVzUGVyVGFibGU/OiBudW1iZXI7XG4gIC8qKiBGaXhlZCBcIm5vd1wiIGZvciB0aGUgd2hvbGUgc3dlZXAgKGRlZmF1bHQgYG5ldyBEYXRlKClgKS4gKi9cbiAgbm93PzogRGF0ZTtcbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIG9yZyB3aG9zZSBgZG9yYV9zZXR0aW5nc2AgcmV0ZW50aW9uIGdvdmVybnMgYG9yZ0lkYCdzIHJvd3Mg4oCUIGl0c1xuICAgKiBhY2NvdW50IFJPT1QuIFJldGVudGlvbiBpcyBhIGJpbGxpbmcgZW50aXRsZW1lbnQgc3luY2VkIG9udG8gdGhlIHJvb3Qgb25seSxcbiAgICogc28gYSB0ZWFtJ3Mgcm93cyBtdXN0IGZvbGxvdyB0aGUgcm9vdCdzIChwdXJjaGFzZWQpIHdpbmRvdywgbm90IHRoZSBlbnZcbiAgICogZGVmYXVsdC4gUmV0dXJuIGBudWxsYCB3aGVuIHRoZSByb290IGNhbid0IGJlIHJlc29sdmVkOiB0aGF0IG9yZyBpcyBTS0lQUEVEXG4gICAqIHRoaXMgdGljayAobmV2ZXIgcHVyZ2VkIG9uIGEgcG9zc2libHktc2hvcnRlciB3aW5kb3cpLiBEZWZhdWx0OiBpZGVudGl0eVxuICAgKiAoZXZlcnkgb3JnIGlzIGl0cyBvd24gcm9vdCDigJQgYSBmbGF0IGRlcGxveW1lbnQpLlxuICAgKi9cbiAgcmVzb2x2ZVJldGVudGlvbk9yZ0lkPzogKG9yZ0lkOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG59XG5cbi8qKiBQZXItcnVuIHB1cmdlIHRhbGxpZXMgKGFsc28gbG9nZ2VkKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0aW5nUmV0ZW50aW9uQ291bnRzIHtcbiAgLyoqIE9yZ3Mgc3dlcHQgdGhpcyBydW4uICovXG4gIG9yZ3M6IG51bWJlcjtcbiAgLyoqIFN0YW5kYXJkIGBwaXBlbGluZV9ldmVudHNgIChlbnZpcm9ubWVudCBJUyBOVUxMKSByb3dzIHB1cmdlZC4gKi9cbiAgc3RhbmRhcmRFdmVudHM6IG51bWJlcjtcbiAgLyoqIERPUkEtc291cmNlIGBwaXBlbGluZV9ldmVudHNgIChlbnZpcm9ubWVudCBJUyBOT1QgTlVMTCkgcm93cyBwdXJnZWQuICovXG4gIGRvcmFFdmVudHM6IG51bWJlcjtcbiAgLyoqIGBkZXBsb3ltZW50X291dGNvbWVzYCByb3dzIHB1cmdlZC4gKi9cbiAgZGVwbG95bWVudE91dGNvbWVzOiBudW1iZXI7XG4gIC8qKiBgaW5jaWRlbnRzYCByb3dzIHB1cmdlZC4gKi9cbiAgaW5jaWRlbnRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogRE9SQSBwZXJmb3JtYW5jZSBiYW5kLiBgbnVsbGAgPSBpbnN1ZmZpY2llbnQgZGF0YSB0byBjbGFzc2lmeSAobm9cbiAqIGRlcGxveW1lbnRzL2ZhaWx1cmVzL2xlYWQtdGltZSBzYW1wbGUgaW4gdGhlIHdpbmRvdyksIHNvIHRoZSBVSSBzaG93cyBhXG4gKiBuZXV0cmFsIHN0YXRlIHJhdGhlciB0aGFuIG1pc2xhYmVsaW5nIGFuIGVtcHR5IHdpbmRvdyBhcyBcImxvd1wiLlxuICovXG5leHBvcnQgdHlwZSBEb3JhTGV2ZWwgPSAnZWxpdGUnIHwgJ2hpZ2gnIHwgJ21lZGl1bScgfCAnbG93JyB8IG51bGw7XG5cbi8qKiBPcHRpb25hbCBzY29waW5nIGZvciB7QGxpbmsgUmVwb3J0aW5nU2VydmljZS5nZXREb3JhTWV0cmljc30uICovXG5leHBvcnQgaW50ZXJmYWNlIERvcmFPcHRpb25zIHtcbiAgLyoqIFJlc3RyaWN0IHRvIGEgc2luZ2xlIHBpcGVsaW5lIChwZXItcGlwZWxpbmUgRE9SQSkuICovXG4gIHBpcGVsaW5lSWQ/OiBzdHJpbmc7XG4gIC8qKiBSZXN0cmljdCB0byBhIHNpbmdsZSBkZXBsb3kgZW52aXJvbm1lbnQgKGVsc2UgYWxsIGRlcGxveSBlbnZpcm9ubWVudHMpLiAqL1xuICBlbnZpcm9ubWVudD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBlci1vcmcgaW5jaWRlbnTihpJkZXBsb3kgY29ycmVsYXRpb24gd2luZG93IG92ZXJyaWRlIChob3VycykuIFdoZW4gc2V0IChhXG4gICAqIHBvc2l0aXZlIGZpbml0ZSBudW1iZXIpLCB0aGUgaW5jaWRlbnQgY29ycmVsYXRpb24gdXNlcyBpdCBpbnN0ZWFkIG9mIHRoZVxuICAgKiBnbG9iYWwgYERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTYC4gVGhlIHJvdXRlIHJlc29sdmVzIHRoaXMgZnJvbSB0aGUgb3JnJ3NcbiAgICogYGRvcmFfc2V0dGluZ3NgIHJvdyAoc2VlIHtAbGluayBSZXBvcnRpbmdTZXJ2aWNlLmdldFJlcG9ydGluZ1NldHRpbmdzfSkgYW5kXG4gICAqIHBhc3NlcyBpdCBpbjsgdW5zZXQgZmFsbHMgYmFjayB0byB0aGUgZW52IGRlZmF1bHQuXG4gICAqL1xuICBpbmNpZGVudFdpbmRvd0hvdXJzPzogbnVtYmVyO1xuICAvKiogSUFOQSB0aW1lem9uZSBmb3IgdGhlIHRyZW5kJ3MgYnVja2V0cyAoc2VlIHtAbGluayBCdWNrZXRPcHRpb25zfSkuICovXG4gIHR6Pzogc3RyaW5nO1xuICAvKiogV2VlayBzdGFydCBmb3IgdGhlIHRyZW5kJ3MgYnVja2V0cy4gKi9cbiAgd2Vla1N0YXJ0PzogJ21vbmRheScgfCAnc3VuZGF5Jztcbn1cblxuLyoqXG4gKiBQZXItb3JnIHJlcG9ydGluZyBzZXR0aW5ncyBzdXJmYWNlZCB0byB0aGUgb3JnLWFkbWluIHBhbmVsLiBgaW5jaWRlbnRXaW5kb3dIb3Vyc2BcbiAqIGlzIHRoZSBpbmNpZGVudOKGkmRlcGxveSBjb3JyZWxhdGlvbiB3aW5kb3c7IGBldmVudFJldGVudGlvbkRheXNgIC9cbiAqIGBkb3JhUmV0ZW50aW9uRGF5c2AgYXJlIHRoZSB0d28gcmV0ZW50aW9uLXN3ZWVwIHdpbmRvd3MuIEVhY2ggb3ZlcnJpZGVcbiAqIGlzIGBudWxsYCB3aGVuIHVuc2V0ICh0aGUgcGFpcmVkIGBkZWZhdWx0KmAgZmllbGQgc2hvd3MgdGhlIGVudiBmYWxsYmFjayBhcHBsaWVkKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRpbmdTZXR0aW5ncyB7XG4gIC8qKiBUaGUgb3JnJ3Mgc3RvcmVkIGNvcnJlbGF0aW9uLXdpbmRvdyBvdmVycmlkZSBpbiBob3Vycywgb3IgYG51bGxgIHdoZW4gdW5zZXQuICovXG4gIGluY2lkZW50V2luZG93SG91cnM6IG51bWJlciB8IG51bGw7XG4gIC8qKiBUaGUgZ2xvYmFsIGVudiBkZWZhdWx0IGFwcGxpZWQgd2hlbiBubyBvdmVycmlkZSBpcyBzdG9yZWQuICovXG4gIGRlZmF1bHRXaW5kb3dIb3VyczogbnVtYmVyO1xuICAvKiogU3RhbmRhcmQtZXZlbnQgcmV0ZW50aW9uIG92ZXJyaWRlIGluIGRheXMsIG9yIGBudWxsYCB3aGVuIHVuc2V0LiAqL1xuICBldmVudFJldGVudGlvbkRheXM6IG51bWJlciB8IG51bGw7XG4gIC8qKiBET1JBLXNvdXJjZSByZXRlbnRpb24gb3ZlcnJpZGUgaW4gZGF5cywgb3IgYG51bGxgIHdoZW4gdW5zZXQuICovXG4gIGRvcmFSZXRlbnRpb25EYXlzOiBudW1iZXIgfCBudWxsO1xuICAvKiogR2xvYmFsIHN0YW5kYXJkLWV2ZW50IHJldGVudGlvbiBkZWZhdWx0IGFwcGxpZWQgd2hlbiB1bnNldCAoZGF5cykuICovXG4gIGRlZmF1bHRFdmVudFJldGVudGlvbkRheXM6IG51bWJlcjtcbiAgLyoqIEdsb2JhbCBET1JBLXNvdXJjZSByZXRlbnRpb24gZGVmYXVsdCBhcHBsaWVkIHdoZW4gdW5zZXQgKGRheXMpLiAqL1xuICBkZWZhdWx0RG9yYVJldGVudGlvbkRheXM6IG51bWJlcjtcbn1cblxuLyoqIEEgcGFydGlhbCByZXBvcnRpbmctc2V0dGluZ3Mgd3JpdGUgKDcpLiBPbmx5IHByb3ZpZGVkIGZpZWxkcyBhcmVcbiAqICB1cHNlcnRlZDsgb21pdHRlZCBmaWVsZHMgYXJlIGxlZnQgdW5jaGFuZ2VkIChhbiBvbWl0dGVkIHJldGVudGlvbiBmaWVsZCBrZWVwc1xuICogIGl0cyBzdG9yZWQgb3ZlcnJpZGUgLyB0aGUgZ2xvYmFsIGRlZmF1bHQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRpbmdTZXR0aW5nc1BhdGNoIHtcbiAgaW5jaWRlbnRXaW5kb3dIb3Vycz86IG51bWJlcjtcbiAgZXZlbnRSZXRlbnRpb25EYXlzPzogbnVtYmVyO1xuICBkb3JhUmV0ZW50aW9uRGF5cz86IG51bWJlcjtcbn1cblxuLyoqIE9uZSByb3cgb2YgdGhlIG9yZy1hZG1pbiBpbmNpZGVudHMgbGlzdCAocmVjZW50IGluY2lkZW50cyArIGRlcGxveSBjb3JyZWxhdGlvbikuICovXG5leHBvcnQgaW50ZXJmYWNlIEluY2lkZW50TGlzdEl0ZW0ge1xuICBpbmNpZGVudElkOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHNldmVyaXR5OiBzdHJpbmc7XG4gIG9wZW5lZEF0OiBzdHJpbmcgfCBudWxsO1xuICByZXNvbHZlZEF0OiBzdHJpbmcgfCBudWxsO1xuICBjcmVhdGVkQXQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUcnVlIG9uY2UgdGhlIGluY2lkZW50IGhhcyBhIGByZXNvbHZlZF9hdGAuICovXG4gIHJlc29sdmVkOiBib29sZWFuO1xuICAvKiogVGhlIGNvcnJlbGF0ZWQgZGVwbG95IGV4ZWN1dGlvbiBpZCAobW9zdCByZWNlbnQgc3VjY2Vzc2Z1bCBkZXBsb3kgaW4td2luZG93KSwgb3IgbnVsbC4gKi9cbiAgY29ycmVsYXRlZEV4ZWN1dGlvbklkOiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhhdCBkZXBsb3kncyBjb21wbGV0aW9uIGluc3RhbnQsIG9yIG51bGwgd2hlbiB1bmNvcnJlbGF0ZWQuICovXG4gIGRlcGxveUNvbXBsZXRlZEF0OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKiogUmVzdWx0IG9mIHRoZSB3aXJpbmctdGVzdCBkcnktcnVuIGNvcnJlbGF0aW9uICh7QGxpbmsgUmVwb3J0aW5nU2VydmljZS50ZXN0SW5jaWRlbnRDb3JyZWxhdGlvbn0pLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmNpZGVudFRlc3RSZXN1bHQge1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICAvKiogVGhlIHN5bnRoZXRpYyBpbmNpZGVudCdzIG9wZW5lZEF0IChub3csIElTTykuICovXG4gIG9wZW5lZEF0OiBzdHJpbmc7XG4gIC8qKiBUaGUgZWZmZWN0aXZlIGNvcnJlbGF0aW9uIHdpbmRvdyB1c2VkLiAqL1xuICB3aW5kb3dIb3VyczogbnVtYmVyO1xuICAvKiogV2hldGhlciBhIHJlY2VudCBzdWNjZXNzZnVsIGRlcGxveSB0byBgZW52aXJvbm1lbnRgIGNvcnJlbGF0ZWQuICovXG4gIGNvcnJlbGF0ZWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgY29ycmVsYXRlZCBkZXBsb3kgZXhlY3V0aW9uIGlkLCBvciBudWxsLiAqL1xuICBleGVjdXRpb25JZDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoYXQgZGVwbG95J3MgY29tcGxldGlvbiBpbnN0YW50LCBvciBudWxsLiAqL1xuICBkZXBsb3lDb21wbGV0ZWRBdDogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gRE9SQSBwZXJmb3JtYW5jZSBiYW5kcyAodGhyZXNob2xkcyBmcm9tIHRoZSBET1JBL0FjY2VsZXJhdGUgcmVwb3J0cykuIEVhY2hcbi8vIGhlbHBlciByZXR1cm5zIGBudWxsYCB3aGVuIHRoZXJlJ3Mgbm8gc2FtcGxlIHRvIGNsYXNzaWZ5LlxuLyoqIERlcGxveW1lbnQgZnJlcXVlbmN5IGJ5IGRlcGxveXMvZGF5OiBlbGl0ZSDiiaUxL2RheSwgaGlnaCDiiaUxL3dlZWssIG1lZGl1bSDiiaUxL21vbnRoLiAqL1xuXG4vKipcbiAqIERPUkEgbWV0cmljcyBvdmVyIGEgW2Zyb20sdG9dIHdpbmRvdywgb3JnLXNjb3BlZCAoc2luZ2xlLW9yZyBvciByb2xsdXAgc3VidHJlZSkuXG4gKlxuICogREVQTE9ZLUJBU0lTIOKAlCBldmVyeSBtZXRyaWMgZGVyaXZlcyBmcm9tIHJlYWwgREVQTE9ZLVNUQUdFIGV4ZWN1dGlvbnMsIGkuZS5cbiAqIGBwaXBlbGluZV9ldmVudHNgIHJvd3Mgd2l0aCBgZXZlbnRfdHlwZT0nU1RBR0UnYCBhbmQgYSBub24tbnVsbCBgZW52aXJvbm1lbnRgXG4gKiAodGhlIGZvcndhcmRlciBzZXRzIGBlbnZpcm9ubWVudGAgb25seSBmb3IgdGhlIHN0YWdlcyBhIHVzZXIgZGVjbGFyZWQgaW5cbiAqIGBwYi5kZXBsb3lzYCkuIEEgQ0ktb25seSBidWlsZC90ZXN0IHBpcGVsaW5lIHdpdGggbm8gZGVwbG95IHN0YWdlIHByb2R1Y2VzIE5PXG4gKiBET1JBIGRhdGEg4oCUIHRoZXJlIGlzIG5vIHJ1bi1iYXNlZCBmYWxsYmFjay4gVGhlIHBhbmVsIGlzIGVtcHR5IHVudGlsIGRlcGxveWVkXG4gKiBwaXBlbGluZXMgcmUtc3ludGggd2l0aCB0aGUgbmV3IGRlcGxveSB0YWdzIGFuZCBzdGFydCBlbWl0dGluZyBkZXBsb3kgZXZlbnRzLlxuICpcbiAqIGBwcm9kdWN0aW9uYCBpcyB0aGUgaGVhZGxpbmUgZW52aXJvbm1lbnQ7IE1UVFIgaXMgbWVhc3VyZWQgcHJvZHVjdGlvbi1vbmx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvcmFNZXRyaWNzIHtcbiAgLyoqIFRoZSBbZnJvbSx0b10gd2luZG93IGVjaG9lZCBiYWNrIChkZXBsb3kgYGNvbXBsZXRlZF9hdGAgcmFuZ2UpLiAqL1xuICB3aW5kb3c6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH07XG4gIC8qKiBUaGUgc2NvcGluZyBhcHBsaWVkIChlY2hvZWQgZm9yIHRoZSBVSSk7IGBudWxsYCB3aGVuIHVuc2NvcGVkLiAqL1xuICBmaWx0ZXJzOiB7IHBpcGVsaW5lSWQ6IHN0cmluZyB8IG51bGw7IGVudmlyb25tZW50OiBzdHJpbmcgfCBudWxsIH07XG4gIC8qKiBUaGUgaGVhZGxpbmUgZW52aXJvbm1lbnQgbmFtZSAoYHByb2R1Y3Rpb25gKS4gKi9cbiAgaGVhZGxpbmU6IHN0cmluZztcbiAgLyoqIFBlci1lbnZpcm9ubWVudCBERiAvIENGUiAvIGxlYWQgdGltZS4gU29ydGVkIGhlYWRsaW5lLWZpcnN0LCB0aGVuIEHihpJaLiAqL1xuICBlbnZpcm9ubWVudHM6IERvcmFFbnZNZXRyaWNzW107XG4gIC8qKlxuICAgKiBNZWFuIFRpbWUgVG8gUmVzdG9yZSDigJQgUFJPRFVDVElPTi1PTkxZLCBmcm9tIGBkZXBsb3ltZW50X291dGNvbWVzYC5cbiAgICogYG1lZGlhbihyZXN0b3JlZC5hdCDiiJIgZGVwbG95ZWQuY29tcGxldGVkX2F0KWAgb3ZlciByZXN0b3JlZCBwcm9kdWN0aW9uXG4gICAqIGluY2lkZW50cyAoZGVsdGFzIGNsYW1wZWQg4omlMCkuIGBpbmNpZGVudHNgIGNvdW50cyBwcm9kdWN0aW9uIGRlcGxveXMgbWFya2VkXG4gICAqIGZhaWxlZDsgYHJlc3RvcmVkYCBjb3VudHMgdGhvc2UgdGhhdCByZWNvdmVyZWQ7IGBtZWRpYW5TZWNvbmRzYCBpcyBudWxsIHdoZW5cbiAgICogbm8gcmVzdG9yZWQgaW5jaWRlbnQgaGFzIGEgcmVzb2x2YWJsZSBkZXBsb3kgdGltZS5cbiAgICovXG4gIG1lYW5UaW1lVG9SZXN0b3JlOiB7XG4gICAgaW5jaWRlbnRzOiBudW1iZXI7XG4gICAgcmVzdG9yZWQ6IG51bWJlcjtcbiAgICBtZWRpYW5TZWNvbmRzOiBudW1iZXIgfCBudWxsO1xuICAgIC8qKiA5MHRoLzk1dGggcGVyY2VudGlsZSByZWNvdmVyeSwgb3ZlciB0aGUgc2FtZSBzYW1wbGUgYXMgdGhlIG1lZGlhbi4gVGhlXG4gICAgICogIG1lZGlhbiBhbG9uZSBoaWRlcyB0aGUgbG9uZyB0YWlsIHRoYXQgYWN0dWFsbHkgZGVmaW5lcyBhbiBvdXRhZ2UncyBjb3N0O1xuICAgICAqICBgbnVsbGAgd2hlbiBubyByZWNvdmVyeSBnYXAgd2FzIG9ic2VydmVkLiAqL1xuICAgIHA5MFNlY29uZHM6IG51bWJlciB8IG51bGw7XG4gICAgcDk1U2Vjb25kczogbnVtYmVyIHwgbnVsbDtcbiAgICBsZXZlbDogRG9yYUxldmVsO1xuICB9O1xuICAvKipcbiAgICogQ292ZXJhZ2UgcmVjb25jaWxpYXRpb24g4oCUIHJlZ2lzdGVyZWQgcGlwZWxpbmVzIHdpdGggbm8gb2JzZXJ2ZWQgZGVwbG95IGluXG4gICAqIHRoZSB3aW5kb3cuIEEgaGlnaCBgd2l0aG91dERlcGxveXNgIGNvdW50IG1lYW5zIERPUkEgaXMgYmxpbmQgdG8gbW9zdCBvZiB0aGVcbiAgICogZmxlZXQgKHBpcGVsaW5lcyB0aGF0IGhhdmVuJ3QgcmUtc3ludGhlZCB3aXRoIGRlcGxveSB0YWdzLCBvciBkb24ndCBkZXBsb3kpLlxuICAgKi9cbiAgY292ZXJhZ2U6IHtcbiAgICAvKiogUGlwZWxpbmVzIGluIHRoZSByZWdpc3RyeSAob3JnLXNjb3BlZCkuICovXG4gICAgcmVnaXN0ZXJlZDogbnVtYmVyO1xuICAgIC8qKiBSZWdpc3RlcmVkIHBpcGVsaW5lcyB3aXRoIOKJpTEgZGVwbG95LXN0YWdlIGV4ZWN1dGlvbiBpbiB0aGUgd2luZG93LiAqL1xuICAgIGRlcGxveWluZzogbnVtYmVyO1xuICAgIC8qKiByZWdpc3RlcmVkIOKIkiBkZXBsb3lpbmcgKGNsYW1wZWQg4omlMCkuICovXG4gICAgd2l0aG91dERlcGxveXM6IG51bWJlcjtcbiAgfTtcbn1cblxuLyoqIFBlci1lbnZpcm9ubWVudCBET1JBIG1ldHJpY3MgKGRlcGxveW1lbnQgZnJlcXVlbmN5LCBDRlIsIGxlYWQgdGltZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIERvcmFFbnZNZXRyaWNzIHtcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgLyoqIERlcGxveW1lbnQgRnJlcXVlbmN5IOKAlCBzdWNjZXNzZnVsIGRlcGxveS1zdGFnZSBleGVjdXRpb25zIGZvciB0aGlzIGVudi4gKi9cbiAgZGVwbG95bWVudEZyZXF1ZW5jeToge1xuICAgIGRlcGxveW1lbnRzOiBudW1iZXI7XG4gICAgcGVyRGF5OiBudW1iZXI7XG4gICAgbGV2ZWw6IERvcmFMZXZlbDtcbiAgfTtcbiAgLyoqXG4gICAqIENoYW5nZSBGYWlsdXJlIFJhdGUg4oCUIHR3by1jbGFzczpcbiAgICogYChkZXBsb3lUaW1lRmFpbHVyZXMgKyBwb3N0RGVwbG95RmFpbHVyZXMpIC8gYXR0ZW1wdHNgLlxuICAgKiAtIGBkZXBsb3lUaW1lRmFpbHVyZXNgIOKAlCBkZXBsb3kgc3RhZ2UgYHJlc3VsdD1mYWlsZWRgIChmcm9tIGV2ZW50cykuXG4gICAqIC0gYHBvc3REZXBsb3lGYWlsdXJlc2Ag4oCUIGEgc3VjY2Vzc2Z1bCBkZXBsb3kgbGF0ZXIgbWFya2VkIGZhaWxlZCBpbiBwcm9kXG4gICAqICAgKGZyb20gYGRlcGxveW1lbnRfb3V0Y29tZXNgKS5cbiAgICogLSBgYXR0ZW1wdHNgIOKAlCBhbGwgdGVybWluYWwgZGVwbG95LXN0YWdlIGF0dGVtcHRzIChzdWNjZWVkZWQgKyBmYWlsZWQpLlxuICAgKi9cbiAgY2hhbmdlRmFpbHVyZVJhdGU6IHtcbiAgICByYXRlOiBudW1iZXI7XG4gICAgZGVwbG95VGltZUZhaWx1cmVzOiBudW1iZXI7XG4gICAgcG9zdERlcGxveUZhaWx1cmVzOiBudW1iZXI7XG4gICAgYXR0ZW1wdHM6IG51bWJlcjtcbiAgICBsZXZlbDogRG9yYUxldmVsO1xuICB9O1xuICAvKipcbiAgICogTGVhZCBUaW1lIOKAlCBNRUFTVVJFRDogYG1lZGlhbihkZXBsb3lfY29tcGxldGVkIOKIkiBvbGRlc3RfY29tbWl0X3RpbWUpYCBvdmVyXG4gICAqIHN1Y2Nlc3NmdWwgZGVwbG95cyB3aXRoIGEgcmVzb2x2YWJsZSBjb21taXQgdGltZXN0YW1wIChkZWx0YXMgY2xhbXBlZCDiiaUwKS5cbiAgICogYG1lZGlhblNlY29uZHNgIGlzIGBudWxsYCAoPSB1bmtub3duKSB3aGVuIG5vIHN1Y2Nlc3NmdWwgZGVwbG95IGluIHRoaXMgZW52XG4gICAqIGNhcnJpZWQgYSBgY29tbWl0X3RpbWVzdGFtcGAuIFRoZSBvbGQgbWVkaWFuLXJ1bi1kdXJhdGlvbiBwcm94eSBpcyByZW1vdmVkLlxuICAgKlxuICAgKiBgcDkwU2Vjb25kc2AvYHA5NVNlY29uZHNgIGNvbWUgZnJvbSB0aGUgc2FtZSBzYW1wbGUuIFRoZSBsZXZlbCBpcyBzY29yZWQgb2ZmXG4gICAqIHRoZSBNRURJQU4gb25seSwgc28gYWRkaW5nIHRoZSB0YWlscyBjYW5ub3QgbW92ZSBhIHRlYW0ncyBET1JBIGJhbmQuXG4gICAqL1xuICBsZWFkVGltZToge1xuICAgIC8qKiBTdWNjZXNzZnVsIGRlcGxveXMgd2l0aCBhIHJlc29sdmFibGUgY29tbWl0IHRpbWUgKHRoZSBtZWRpYW4gc2FtcGxlKS4gKi9cbiAgICBkZXBsb3ltZW50czogbnVtYmVyO1xuICAgIG1lZGlhblNlY29uZHM6IG51bWJlciB8IG51bGw7XG4gICAgcDkwU2Vjb25kczogbnVtYmVyIHwgbnVsbDtcbiAgICBwOTVTZWNvbmRzOiBudW1iZXIgfCBudWxsO1xuICAgIGxldmVsOiBEb3JhTGV2ZWw7XG4gIH07XG59XG5cbi8qKiBPbmUgaW50ZXJ2YWwgYnVja2V0IG9mIHRoZSBET1JBIHRyZW5kIChkZXBsb3kgZnJlcXVlbmN5ICsgY2hhbmdlIGZhaWx1cmUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb3JhVHJlbmRQb2ludCB7XG4gIC8qKiBCdWNrZXQgc3RhcnQgKERBVEVfVFJVTkMgb2YgdGhlIGRlcGxveSBgY29tcGxldGVkX2F0YCksIElTTyB0ZXh0LiAqL1xuICBwZXJpb2Q6IHN0cmluZztcbiAgLyoqIFN1Y2Nlc3NmdWwgZGVwbG95LXN0YWdlIGV4ZWN1dGlvbnMgaW4gdGhlIGJ1Y2tldC4gKi9cbiAgZGVwbG95bWVudHM6IG51bWJlcjtcbiAgLyoqIEZhaWxlZCBkZXBsb3ktc3RhZ2UgZXhlY3V0aW9ucyBpbiB0aGUgYnVja2V0LiAqL1xuICBmYWlsZWQ6IG51bWJlcjtcbiAgLyoqIHN1Y2NlZWRlZCArIGZhaWxlZCBpbiB0aGUgYnVja2V0IChkZXBsb3kgYXR0ZW1wdHMpLiAqL1xuICB0b3RhbDogbnVtYmVyO1xuICAvKiogZmFpbGVkL3RvdGFsIGFzIGEgcGVyY2VudCAoMCB3aGVuIHRvdGFsIGlzIDApLiBEZXBsb3ktdGltZSBDRlIgb25seS4gKi9cbiAgY2hhbmdlRmFpbHVyZVBjdDogbnVtYmVyO1xufVxuXG4vKiogUGVyLXN0YWdlIGJ1aWxkLWhlYWx0aCBtZXRyaWNzIGZvciBvbmUgcGlwZWxpbmUgb3ZlciBhIHdpbmRvdy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRIZWFsdGhTdGFnZSB7XG4gIHN0YWdlOiBzdHJpbmc7XG4gIC8qKiBUZXJtaW5hbCBzdGFnZSBydW5zIChzdWNjZWVkZWQgKyBmYWlsZWQpIGluIHRoZSB3aW5kb3cuICovXG4gIHJ1bnM6IG51bWJlcjtcbiAgc3VjY2Vzc2VzOiBudW1iZXI7XG4gIGZhaWx1cmVzOiBudW1iZXI7XG4gIC8qKiBzdWNjZXNzZXMgLyBydW5zIGFzIGEgcGVyY2VudCAoMCB3aGVuIHJ1bnMgaXMgMCkuICovXG4gIHN1Y2Nlc3NSYXRlOiBudW1iZXI7XG4gIC8qKiBEdXJhdGlvbiBwZXJjZW50aWxlcyBvdmVyIHRoZSBzdGFnZSdzIHRlcm1pbmFsIHJ1bnM7IG51bGwgd2hlbiBubyBkdXJhdGlvbnMuICovXG4gIHA1ME1zOiBudW1iZXIgfCBudWxsO1xuICBwOTBNczogbnVtYmVyIHwgbnVsbDtcbiAgcDk5TXM6IG51bWJlciB8IG51bGw7XG59XG5cbi8qKlxuICogUGVyLXBpcGVsaW5lIGJ1aWxkLWhlYWx0aCBicmVha2Rvd24uIFN0YW5kYXJkIHJlcG9ydGluZyAoTk9UXG4gKiBgYWR2YW5jZWRfcmVwb3J0aW5nYC1nYXRlZCkg4oCUIHBlci1zdGFnZSBzdWNjZXNzIHJhdGUgKyB0aW1pbmcgcGVyY2VudGlsZXMsIHdpdGhcbiAqIHRvdGFscyBzdW1tZWQgYWNyb3NzIHN0YWdlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZEhlYWx0aCB7XG4gIHN0YWdlczogQnVpbGRIZWFsdGhTdGFnZVtdO1xuICB0b3RhbHM6IHsgcnVuczogbnVtYmVyOyBmYWlsdXJlczogbnVtYmVyOyBmYWlsdXJlUmF0ZTogbnVtYmVyIH07XG59XG5cbi8qKiBQb3N0LWRlcGxveSBpbmNpZGVudCBtYXJrZXIgYWNjZXB0ZWQgYnkgYFJlcG9ydGluZ1NlcnZpY2UucmVjb3JkSW5jaWRlbnRgLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmNpZGVudElucHV0IHtcbiAgaW5jaWRlbnRJZDogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBvcGVuZWRBdDogc3RyaW5nO1xuICByZXNvbHZlZEF0Pzogc3RyaW5nO1xuICBzZXZlcml0eTogc3RyaW5nO1xufVxuXG4vKiogRXZlbnQgcGF5bG9hZCBhY2NlcHRlZCBieSBgUmVwb3J0aW5nU2VydmljZS5pbmdlc3RFdmVudHNgLiBNaXJyb3JzIHRoZSByb3V0ZSdzIFpvZCBzaGFwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0RXZlbnQge1xuICAvKiogU3RhYmxlIHBpcGVsaW5lIGlkIHRoZSBldmVudHMgTGFtYmRhIHJlYWQgZnJvbSB0aGUgYHBiLnBpcGVsaW5lLWlkYFxuICAgKiAgdGFnICg9IHRoZSBwbGF0Zm9ybSBwaXBlbGluZUlkKS4gVGhlIHJlZ2lzdHJ5IGpvaW4ga2V5LiAqL1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIGV2ZW50U291cmNlOiAnY29kZXBpcGVsaW5lJyB8ICdjb2RlYnVpbGQnIHwgJ3BsdWdpbi1idWlsZCc7XG4gIGV2ZW50VHlwZTogJ1BJUEVMSU5FJyB8ICdTVEFHRScgfCAnQUNUSU9OJyB8ICdCVUlMRCc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBleGVjdXRpb25JZD86IHN0cmluZztcbiAgc3RhZ2VOYW1lPzogc3RyaW5nO1xuICBhY3Rpb25OYW1lPzogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZmFpbHVyZSByZWFzb24gKEFjdGlvbiBldmVudHMpLiAqL1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgY29tcGxldGVkQXQ/OiBzdHJpbmc7XG4gIGR1cmF0aW9uTXM/OiBudW1iZXI7XG4gIC8qKiBTb3VyY2UgY29tbWl0IGlkIG9mIHRoZSBjaGFuZ2UgYmVpbmcgc2hpcHBlZCAoRE9SQSBkZXBsb3kgYXR0cmlidXRpb24pLiAqL1xuICBjb21taXRTaGE/OiBzdHJpbmc7XG4gIC8qKiBTb3VyY2UgcmVmL2JyYW5jaCAoRE9SQSBkZXBsb3kgYXR0cmlidXRpb24pLiAqL1xuICBjb21taXRSZWY/OiBzdHJpbmc7XG4gIC8qKiBEZXBsb3kgdGFyZ2V0IChlLmcuIFwicHJvZHVjdGlvblwiKS4gSXRzIHByZXNlbmNlIG9uIGEgU1RBR0UvQUNUSU9OIGV2ZW50XG4gICAqICBtYXJrcyBhIHJlYWwgZGVwbG95bWVudCAoZGVyaXZlZCBzZXJ2ZXItc2lkZSDigJQgdGhlcmUgaXMgbm8gYGlzRGVwbG95YCkuICovXG4gIGVudmlyb25tZW50Pzogc3RyaW5nO1xuICAvKiogT2xkZXN0IHVuc2hpcHBlZCBjb21taXQgdGltZXN0YW1wIChJU08gODYwMSkgZm9yIG1lYXN1cmVkIGxlYWQgdGltZS4gKi9cbiAgY29tbWl0VGltZXN0YW1wPzogc3RyaW5nO1xuICAvKiogTnVtYmVyIG9mIGNvbW1pdHMgc2hpcHBlZCBpbiB0aGlzIGNoYW5nZSAo4omlMSkuICovXG4gIGNvbW1pdENvdW50PzogbnVtYmVyO1xuICBkZXRhaWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBQZXItZXZlbnQgbWV0cmljIGRlc2NyaXB0b3IgZW1pdHRlZCAodmlhIHRoZSB7QGxpbmsgUmVwb3J0aW5nU2VydmljZS5pbmdlc3RFdmVudHN9XG4gKiBgb25NZXRyaWNgIGhvb2spIGZvciBlYWNoIFJFR0lTVEVSRUQgdGVybWluYWwgZGVwbG95L3N0YWdlIGV2ZW50LCBzbyB0aGUgcm91dGVcbiAqIGxheWVyIGNhbiBmYW4gdGhlbSBpbnRvIFByb21ldGhldXMgY291bnRlcnMgd2l0aG91dCBwaXBlbGluZS1kYXRhIGltcG9ydGluZ1xuICogYXBpLXNlcnZlcidzIG1ldHJpY3MgcmVnaXN0cnkuIGByZXN1bHRgIGlzIHRoZSB0ZXJtaW5hbCBvdXRjb21lOyBgZW52aXJvbm1lbnRgXG4gKiBpcyBub24tbnVsbCBvbmx5IGZvciBhIGRlcGxveS1zdGFnZSBldmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RNZXRyaWMge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHN0YWdlOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmcgfCBudWxsO1xuICByZXN1bHQ6ICdzdWNjZWVkZWQnIHwgJ2ZhaWxlZCc7XG59XG5cbi8qKiBDb3VudHMgKyB0aGUgKHBvc3NpYmx5IHRydW5jYXRlZCkgbGlzdCBvZiB1bnJlZ2lzdGVyZWQgcGlwZWxpbmUgaWRzIHRoZSBjYWxsZXIgY2FuIGxvZy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0UmVzdWx0IHtcbiAgaW5zZXJ0ZWQ6IG51bWJlcjtcbiAgc2tpcHBlZDogbnVtYmVyO1xuICB1bnJlZ2lzdGVyZWRQaXBlbGluZUlkczogc3RyaW5nW107XG4gIC8qKlxuICAgKiBFdmVyeSBvcmcgd2l0aCBhdCBsZWFzdCBvbmUgcm93IGluIHRoaXMgYmF0Y2gsIGRlZHVwZWQuXG4gICAqXG4gICAqIEFscmVhZHkgY29tcHV0ZWQgZm9yIHBvc3QtY29tbWl0IGNhY2hlIGludmFsaWRhdGlvbjsgc3VyZmFjZWQgYmVjYXVzZSB0aGVcbiAgICogaW5nZXN0IHJvdXRlIG5lZWRzIHRoZSBzYW1lIHNldCB0byBwdXNoIGl0cyBsaXZlIFNTRSBmcmFtZS4gVGhlIHN0YWdlLW1ldHJpY1xuICAgKiBob29rIGNhbid0IGRyaXZlIHRoYXQgZmFuLW91dDogaXQgb25seSBmaXJlcyBmb3IgU1RBR0UgZXZlbnRzLCBzbyBhIGJhdGNoIG9mXG4gICAqIFBJUEVMSU5FIG9yIEJVSUxEIGV2ZW50cyB3b3VsZCBsYW5kIHJvd3MgYW5kIHB1c2ggbm8gZnJhbWUgYXQgYWxsLlxuICAgKi9cbiAgYWZmZWN0ZWRPcmdzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEV2ZW50cyBkcm9wcGVkIGJlY2F1c2UgdGhlIHBpcGVsaW5lIHRoZXkgbmFtZSBiZWxvbmdzIHRvIGFuIG9yZyB0aGUgY2FsbGVyXG4gICAqIG1heSBub3Qgd3JpdGUgZm9yLiBTdXJmYWNlZCBzbyB0aGUgcm91dGUgY2FuIGxvZyBhbmQgY291bnQgdGhlbTogYSBub24temVyb1xuICAgKiB2YWx1ZSBpcyBlaXRoZXIgYSBtaXNyb3V0ZWQgcHJvZHVjZXIgb3IgYW4gYXR0ZW1wdCB0byBpbmplY3QgZXZlbnRzIGludG9cbiAgICogYW5vdGhlciB0ZW5hbnQncyByZXBvcnRzLCBhbmQgYm90aCBuZWVkIHRvIGJlIHZpc2libGUuXG4gICAqL1xuICBkcm9wcGVkRm9yZWlnbk9yZzogbnVtYmVyO1xuICAvKipcbiAgICogRXZlbnRzIGRyb3BwZWQgYmVjYXVzZSB0aGVpciB0aW1lc3RhbXBzIGFyZSBpbXBvc3NpYmxlIOKAlCBkYXRlZCBpbiB0aGUgZnV0dXJlLFxuICAgKiBvciBjb21wbGV0aW5nIGJlZm9yZSB0aGV5IHN0YXJ0ZWQuIFJlamVjdGVkIGhlcmUgcmF0aGVyIHRoYW4gY2xhbXBlZCBsYXRlcjpcbiAgICogYSBkZXBsb3kgd2hvc2UgZHVyYXRpb24gb3IgbGVhZCB0aW1lIGlzIG5lZ2F0aXZlIHNpbGVudGx5IHNrZXdzIGRlcGxveW1lbnRcbiAgICogZnJlcXVlbmN5LCBjaGFuZ2UtZmFpbHVyZSByYXRlIGFuZCBsZWFkIHRpbWUgZm9yIHRoZSB3aG9sZSBvcmcsIGFuZCBhIGNsYW1wXG4gICAqIHRvIDAgbWFrZXMgYSBiYWQgY2xvY2sgbG9vayBsaWtlIGFuIGluc3RhbnQgZGVwbG95LlxuICAgKi9cbiAgZHJvcHBlZEludmFsaWRUaW1lOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hvIGlzIHdyaXRpbmcsIGZvciB0aGUgaW5nZXN0IHRlbmFuY3kgY2hlY2suXG4gKlxuICogYC9yZXBvcnRzL2V2ZW50c2AgcmVzb2x2ZXMgYW4gZXZlbnQncyBvcmcgZnJvbSB0aGUgcGlwZWxpbmUgcmVnaXN0cnksIHNvXG4gKiB3aXRob3V0IHRoaXMgYSB0b2tlbiBob2xkaW5nIGByZXBvcnRpbmc6aW5nZXN0YCBjb3VsZCBwb3N0IGV2ZW50cyBmb3IgQU5ZXG4gKiBwaXBlbGluZSBpZCBhbmQgaGF2ZSB0aGVtIGF0dHJpYnV0ZWQgdG8gdGhhdCBwaXBlbGluZSdzIG9yZyDigJQgb25lIG9yZ1xuICogaW5qZWN0aW5nIHJvd3MgaW50byBhbm90aGVyJ3MgcmVwb3J0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RDYWxsZXIge1xuICAvKipcbiAgICogT3JnIGlkcyB0aGlzIGNhbGxlciBtYXkgd3JpdGUgZXZlbnRzIGZvcjogaXRzIG93biwgcGx1cyBkZXNjZW5kYW50IHRlYW1zLlxuICAgKiBSZXNvbHZlZCBieSB0aGUgcm91dGUuIEFuIGV2ZW50IHdob3NlIHBpcGVsaW5lIGJlbG9uZ3MgdG8gYW55dGhpbmcgZWxzZSBpc1xuICAgKiBkcm9wcGVkLlxuICAgKi9cbiAgYWxsb3dlZE9yZ0lkczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBBIHZlcmlmaWVkIElOVEVSTkFMIHNlcnZpY2UgcHJpbmNpcGFsICh0aGUgcGx1Z2luIHNlcnZpY2UgcG9zdHMgcGx1Z2luLWJ1aWxkXG4gICAqIGV2ZW50cyBmb3IgZXZlcnkgdGVuYW50KS4gU3VjaCBjYWxsZXJzIGFyZSBleGVtcHQ6IHRoZXkgaG9sZCBhIHNpZ25lZFxuICAgKiBzZXJ2aWNlIGtleSBubyBleHRlcm5hbCBjbGllbnQgY2FuIG1pbnQsIGFuZCB0aGV5IGxlZ2l0aW1hdGVseSB3cml0ZVxuICAgKiBjcm9zcy10ZW5hbnQuIE5ldmVyIHNldCB0aGlzIGZyb20gYW55dGhpbmcgYSByZXF1ZXN0IGJvZHkgY2FuIGluZmx1ZW5jZS5cbiAgICovXG4gIGNyb3NzVGVuYW50PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPbmUgb3JnJ3MgaW5nZXN0aW9uLWhlYWx0aCByb3cgYXMgUkVBRCBiYWNrIGJ5IHRoZSBSZXBvcnRzIFVJLiBUaGVcbiAqIEFXUyBldmVudHMgTGFtYmRhIHdyaXRlcyBpdDsgdGhpcyBpcyB0aGUgc2hhcGUgdGhhdCBsZXRzIHRoZSBVSSB0ZWxsXG4gKiBcImluZ2VzdGlvbiBpcyBoZWFsdGh5LCB0aGVyZSB3ZXJlIHNpbXBseSBubyBkZXBsb3lzIGluIHRoZSByYW5nZVwiIGFwYXJ0IGZyb21cbiAqIFwid2UgaGF2ZW4ndCBoZWFyZCBmcm9tIHRoZSBpbmdlc3QgcGlwZWxpbmUgc2luY2UgWFwiLlxuICpcbiAqIGBudWxsYCBmcm9tIHtAbGluayBSZXBvcnRpbmdTZXJ2aWNlLmdldEluZ2VzdEhlYWx0aH0gbWVhbnMgdGhlIGRlcGxveW1lbnQgaGFzXG4gKiBORVZFUiByZXBvcnRlZCDigJQgbm90IFwic3RhbGVcIi4gVGhlIHR3byBtdXN0IG5vdCBiZSBjb25mbGF0ZWQ6IGEgZnJlc2ggaW5zdGFsbFxuICogKG9yIG9uZSB3aG9zZSBmb3J3YXJkZXIgd2FzIG5ldmVyIHdpcmVkIHVwKSBoYXMgbm8gaGVhcnRiZWF0IGF0IGFsbCwgYW5kXG4gKiBjYWxsaW5nIHRoYXQgXCJzdGFsZVwiIHdvdWxkIGludmVudCBhIHJlZ3Jlc3Npb24gdGhhdCBuZXZlciBoYXBwZW5lZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RIZWFsdGhTdGF0dXMge1xuICAvKiogV2hlbiB0aGUgZm9yd2FyZGVyIGxhc3QgcG9zdGVkIGEgaGVhcnRiZWF0IChpdHMgb3duIGNsb2NrLCBJU08gODYwMSkuICovXG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuICAvKiogVGltZXN0YW1wIG9mIHRoZSBuZXdlc3QgZXZlbnQgaXQgaGFkIGZvcndhcmRlZCwgb3IgbnVsbCBpZiBpdCBoYXMgc2VlbiBub25lLiAqL1xuICBsYXN0RXZlbnRBdDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIEN1bXVsYXRpdmUgZXZlbnRzIGZvcndhcmRlZCwgb3IgbnVsbCB3aGVuIHRoZSBmb3J3YXJkZXIgZG9lc24ndCByZXBvcnQgaXQuICovXG4gIGZvcndhcmRlZDogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIEN1bXVsYXRpdmUgZXZlbnRzIERST1BQRUQgKG5vbi16ZXJvIOKHkiBkYXRhIGxvc3MgdXBzdHJlYW0gb2YgdGhlIHJlcG9ydHMpLiAqL1xuICBkcm9wcGVkOiBudW1iZXIgfCBudWxsO1xufVxuXG5cbi8qKlxuICogUmVhZC1vbmx5IHJlcG9ydGluZyBzZXJ2aWNlIGZvciBwaXBlbGluZSBleGVjdXRpb24gYW5kIHBsdWdpbiBpbnZlbnRvcnkgYWdncmVnYXRpb25zLlxuICogRG9lcyBub3QgZXh0ZW5kIENydWRTZXJ2aWNlIOKAlCByZXBvcnRzIGFyZSBhZ2dyZWdhdGUgcXVlcmllcywgbm90IGVudGl0eSBDUlVELlxuICpcbiAqIEFsbCBxdWVyaWVzIGFyZSBjYWNoZWQgaW4tbWVtb3J5IHRvIGF2b2lkIHJlcGVhdGVkIGV4cGVuc2l2ZSBTUUwgYWdncmVnYXRpb25zOlxuICogLSBJbnZlbnRvcnkgcXVlcmllcyAocGx1Z2luIHN1bW1hcnkvZGlzdHJpYnV0aW9uL3ZlcnNpb25zKTogNSBtaW4gVFRMXG4gKiAtIFRpbWVzZXJpZXMgcXVlcmllcyAoZXhlY3V0aW9uL2J1aWxkIG1ldHJpY3Mgd2l0aCBkYXRlIHJhbmdlcyk6IDIgbWluIFRUTFxuICovXG5cbi8qKlxuICogSW50ZXJuYWwgcm93IHNoYXBlcyBmb3IgdGhlIERPUkEgcXVlcmllcy4gRXhwb3J0ZWQgYmVjYXVzZSAuL2RvcmEudHMgY29uc3VtZXNcbiAqIHRoZW07IG5vdCBwYXJ0IG9mIHRoZSBwYWNrYWdlJ3MgcHVibGljIHN1cmZhY2UgKHJlcG9ydGluZy1zZXJ2aWNlLnRzXG4gKiByZS1leHBvcnRzIHRoaXMgbW9kdWxlIHdob2xlc2FsZSwgd2hpY2ggaXMgYSBkZWxpYmVyYXRlIHNpbXBsaWZpY2F0aW9uIOKAlCB0aGVzZVxuICogZGVzY3JpYmUgcXVlcnkgcmVzdWx0cywgbm90IEFQSSBjb250cmFjdHMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveVJvdyB7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHN0YXR1czogJ1NVQ0NFRURFRCcgfCAnRkFJTEVEJyB8IHN0cmluZztcbiAgLyoqIERlcGxveSBleGVjdXRpb24gaWQg4oCUIHRoZSBhdHRyaWJ1dGlvbiBrZXkgZm9yIGRlZHVwIGFnYWluc3Qgb3V0Y29tZXMvaW5jaWRlbnRzLiAqL1xuICBleGVjdXRpb25faWQ6IHN0cmluZyB8IG51bGw7XG4gIGNvbXBsZXRlZF9hdDogc3RyaW5nIHwgbnVsbDtcbiAgY29tbWl0X3RzOiBzdHJpbmcgfCBudWxsO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgZGVwbG95IGNvbXBsZXRlZCBpbnNpZGUgW2Zyb20sdG9dLiBBYnNlbnQgKHVuZGVmaW5lZCkgaW4gdW5pdFxuICAgKiBmaXh0dXJlcyDih5IgdHJlYXRlZCBhcyBpbi13aW5kb3cuIGB0YC9gZmAgdG9sZXJhdGVkIChwZyBib29sZWFuIHRleHQgZm9ybSkuXG4gICAqL1xuICBpbl93aW5kb3c/OiBib29sZWFuIHwgc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIFJhdyBwb3N0LWRlcGxveSBvdXRjb21lIG1hcmtlciByb3cgKGZyb20gYGRlcGxveW1lbnRfb3V0Y29tZXNgLCBpbi13aW5kb3cpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdXRjb21lUm93IHtcbiAgZW52aXJvbm1lbnQ6IHN0cmluZyB8IG51bGw7XG4gIG91dGNvbWU6ICdmYWlsZWQnIHwgJ3Jlc3RvcmVkJyB8IHN0cmluZztcbiAgLyoqIEV4ZWN1dGlvbiB0aGUgdXNlciBtYXJrZWQg4oCUIGRlZHVwIGtleSBhZ2FpbnN0IGluY2lkZW50LWNvcnJlbGF0ZWQgZGVwbG95cy4gKi9cbiAgZXhlY3V0aW9uX2lkOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKiogUHJvZHVjdGlvbiByZXN0b3JlZC1pbmNpZGVudCBwYWlyOiByZWNvdmVyeSB0aW1lICsgdGhlIGRlcGxveSdzIGNvbXBsZXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIE10dHJQYWlyUm93IHtcbiAgcmVzdG9yZWRfYXQ6IHN0cmluZyB8IG51bGw7XG4gIGRlcGxveWVkX2F0OiBzdHJpbmcgfCBudWxsO1xuICAvKiogRXhlY3V0aW9uIGlkIOKAlCBsZXRzIGluY2lkZW50IHByZWNlZGVuY2Ugb3ZlcnJpZGUgdGhlIG1hbnVhbCBvdXRjb21lIHBlciBkZXBsb3kuICovXG4gIGV4ZWN1dGlvbl9pZDogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBSYXcgaW5jaWRlbnQgcm93IChmcm9tIGBpbmNpZGVudHNgLCBvcGVuZWQgaW4td2luZG93KS4gQ29ycmVsYXRlZCBpbiBKUyB0byB0aGVcbiAqIG1vc3QgcmVjZW50IHN1Y2Nlc3NmdWwgZGVwbG95IHRvIGBlbnZpcm9ubWVudGAgd2l0aGluIERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTXG4gKiDihpIgYW4gYXV0b21hdGVkIHBvc3QtZGVwbG95IGZhaWx1cmUgKENGUikgKyByZWFsIHJlY292ZXJ5IHRpbWUgKE1UVFIpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluY2lkZW50Um93IHtcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgb3BlbmVkX2F0OiBzdHJpbmcgfCBudWxsO1xuICByZXNvbHZlZF9hdDogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIENvdmVyYWdlIGNvdW50czogcmVnaXN0ZXJlZCBwaXBlbGluZXMgdnMgdGhvc2UgdGhhdCBhY3R1YWxseSBkZXBsb3llZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ292ZXJhZ2VSb3cge1xuICByZWdpc3RlcmVkOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsO1xuICBkZXBsb3lpbmc6IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG59XG4iXX0=
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { type AnalyticsScope } from './reporting/analytics-queries.js';
|
|
2
|
+
import type { LastDeployedCommit } from './reporting/last-deploy.js';
|
|
3
|
+
import type { ExecutionCount, TimeSeriesEntry, DurationStats, PipelineExecution, StageFailure, StageBottleneck, ActionFailure, ErrorEntry, PluginSummary, TypeComputeDistribution, VersionCount, BuildTimeSeriesEntry, BuildDuration, BuildFailure, PluginRuntimeAggregate, PluginRuntimeFilter, PluginRuntimeStats, ReportingRetentionOptions, ReportingRetentionCounts, DoraOptions, ReportingSettings, ReportingSettingsPatch, IncidentListItem, IncidentTestResult, DoraMetrics, DoraTrendPoint, BuildHealth, IncidentInput, IngestCaller, IngestEvent, IngestMetric, IngestResult, IngestHealthStatus, BucketOptions } from './reporting/types.js';
|
|
4
|
+
export type { LastDeployedCommit } from './reporting/last-deploy.js';
|
|
5
|
+
export type { BucketOptions, BuildHealth, BuildHealthStage, DoraEnvMetrics, DoraLevel, DoraMetrics, DoraOptions, DoraTrendPoint, IncidentInput, IncidentListItem, ReportingSettings, IncidentTestResult, IngestCaller, IngestEvent, IngestHealthStatus, IngestMetric, IngestResult, PluginRuntimeAggregate, PluginRuntimeFilter, PluginRuntimeStats, ReportingRetentionCounts, ReportingRetentionOptions, ReportingRetentionSettings, ReportingSettingsPatch, } from './reporting/types.js';
|
|
3
6
|
export declare class ReportingService {
|
|
4
7
|
#private;
|
|
5
8
|
/** Invalidate all cached reports for an org (call after event ingest). */
|
|
@@ -10,7 +13,14 @@ export declare class ReportingService {
|
|
|
10
13
|
* See ./reporting/ingest.ts — the caller must already hold a sysadmin
|
|
11
14
|
* tenant scope, because a batch spans whatever orgs the registry resolves to.
|
|
12
15
|
*/
|
|
13
|
-
ingestEvents(events: IngestEvent[], onMetric?: (m: IngestMetric) => void): Promise<IngestResult>;
|
|
16
|
+
ingestEvents(events: IngestEvent[], onMetric?: (m: IngestMetric) => void, caller?: IngestCaller): Promise<IngestResult>;
|
|
17
|
+
/**
|
|
18
|
+
* The commit sha of this pipeline's last successful deploy — to `environment`
|
|
19
|
+
* when given, to anywhere otherwise. The exclusive lower bound for "commits
|
|
20
|
+
* since the last deploy". Tenancy is enforced from `caller` exactly as
|
|
21
|
+
* {@link ingestEvents} does it.
|
|
22
|
+
*/
|
|
23
|
+
getLastDeployedCommit(pipelineId: string, environment?: string, caller?: IngestCaller): Promise<LastDeployedCommit>;
|
|
14
24
|
/** Execution count per pipeline with status breakdown. */
|
|
15
25
|
getExecutionCount(orgId: string, orgIds?: string[], range?: {
|
|
16
26
|
from?: string;
|
|
@@ -37,7 +47,7 @@ export declare class ReportingService {
|
|
|
37
47
|
to?: string;
|
|
38
48
|
}, limit?: number): Promise<PipelineExecution[]>;
|
|
39
49
|
/** Success rate over time for an org. */
|
|
40
|
-
getSuccessRate(orgId: string, interval: string, from: string, to: string, orgIds?: string[]): Promise<TimeSeriesEntry[]>;
|
|
50
|
+
getSuccessRate(orgId: string, interval: string, from: string, to: string, orgIds?: string[], bucket?: BucketOptions): Promise<TimeSeriesEntry[]>;
|
|
41
51
|
/** Average duration per pipeline. */
|
|
42
52
|
getAverageDuration(orgId: string, from: string, to: string, orgIds?: string[]): Promise<DurationStats[]>;
|
|
43
53
|
/** Stage failure heatmap — which stages fail most. */
|
|
@@ -91,7 +101,7 @@ export declare class ReportingService {
|
|
|
91
101
|
* SHOULD enum these per-eventSource so we catch drift at ingest rather
|
|
92
102
|
* than silently producing zero rows here. See findings N71.
|
|
93
103
|
*/
|
|
94
|
-
getBuildSuccessRate(orgId: string, interval: string, from: string, to: string, orgIds?: string[]): Promise<BuildTimeSeriesEntry[]>;
|
|
104
|
+
getBuildSuccessRate(orgId: string, interval: string, from: string, to: string, orgIds?: string[], bucket?: BucketOptions): Promise<BuildTimeSeriesEntry[]>;
|
|
95
105
|
/** Build duration per plugin. Build activity report — rollup-aware. */
|
|
96
106
|
getBuildDuration(orgId: string, from: string, to: string, orgIds?: string[]): Promise<BuildDuration[]>;
|
|
97
107
|
/** Build failures — top error messages. Build activity report — rollup-aware. */
|
|
@@ -191,5 +201,84 @@ export declare class ReportingService {
|
|
|
191
201
|
* it establishes its own sysadmin scope. See ./reporting/retention-sweep.ts.
|
|
192
202
|
*/
|
|
193
203
|
purgeExpiredReportingData(opts?: ReportingRetentionOptions): Promise<ReportingRetentionCounts>;
|
|
204
|
+
/** Per-pipeline delivery, worst first. */
|
|
205
|
+
getPipelineBreakdown(scope: AnalyticsScope, limit?: number): Promise<import("./reporting/analytics-queries.js").PipelineBreakdownRow[]>;
|
|
206
|
+
/** Failures by category, with the previous period's counts for the trend. */
|
|
207
|
+
getFailureAnalysis(scope: AnalyticsScope, previous?: {
|
|
208
|
+
from: string;
|
|
209
|
+
to: string;
|
|
210
|
+
}): Promise<{
|
|
211
|
+
categories: import("./reporting/analytics-queries.js").FailureCategoryRow[];
|
|
212
|
+
total: number;
|
|
213
|
+
actionableTotal: number;
|
|
214
|
+
}>;
|
|
215
|
+
/** Per-stage timings for one pipeline, slowest first. */
|
|
216
|
+
getStagePerformance(scope: AnalyticsScope, pipelineId: string, previous?: {
|
|
217
|
+
from: string;
|
|
218
|
+
to: string;
|
|
219
|
+
}): Promise<import("./reporting/analytics-queries.js").StagePerformanceRow[]>;
|
|
220
|
+
/** Build time by project and pipeline. Seconds, never money. */
|
|
221
|
+
getResourceConsumption(scope: AnalyticsScope, limit?: number): Promise<{
|
|
222
|
+
pipelines: import("./reporting/analytics-queries.js").ResourceRow[];
|
|
223
|
+
totalBuildSeconds: number;
|
|
224
|
+
}>;
|
|
225
|
+
/** Each commit's path across environments, and which ones stopped short. */
|
|
226
|
+
getPromotionView(scope: AnalyticsScope, productionEnv?: string, limit?: number): Promise<{
|
|
227
|
+
commits: import("./reporting/analytics-queries.js").PromotionRow[];
|
|
228
|
+
stuckCount: number;
|
|
229
|
+
}>;
|
|
230
|
+
/** Pipelines behind on a plugin, worst gap first (the DECLARED side). */
|
|
231
|
+
getOutdatedPlugins(scope: AnalyticsScope, limit?: number): Promise<{
|
|
232
|
+
rows: import("./reporting/analytics-queries.js").OutdatedPluginRow[];
|
|
233
|
+
behindPipelines: number;
|
|
234
|
+
majorBehind: number;
|
|
235
|
+
}>;
|
|
236
|
+
/** Open plugin vulnerabilities per pipeline (says declared vs deployed). */
|
|
237
|
+
getPluginVulnerabilities(scope: AnalyticsScope, limit?: number): Promise<{
|
|
238
|
+
rows: import("./reporting/analytics-queries.js").VulnerabilityRow[];
|
|
239
|
+
exposedPipelines: number;
|
|
240
|
+
criticalPipelines: number;
|
|
241
|
+
}>;
|
|
242
|
+
/** Adoption, creation source, and the deploy-tracking coverage denominator. */
|
|
243
|
+
getAdoption(scope: AnalyticsScope, timeSavedMinutes?: number | null): Promise<import("./reporting/analytics-queries.js").AdoptionSummary>;
|
|
244
|
+
/**
|
|
245
|
+
* The needs-attention findings for the period.
|
|
246
|
+
*
|
|
247
|
+
* Assembled HERE rather than in the section, because the rules need six reads that
|
|
248
|
+
* must all describe the same window: this period's breakdown, the previous one's,
|
|
249
|
+
* failure streaks, config-change times, pipelines with an open Critical, and
|
|
250
|
+
* pipelines DORA cannot see. A section that fetched them itself would be the only
|
|
251
|
+
* place in the report where the window could drift between panels.
|
|
252
|
+
*
|
|
253
|
+
* Every input except the current breakdown is OPTIONAL to the evaluator, and each
|
|
254
|
+
* one's failure is absorbed: a rule with no data to run on is skipped, which is
|
|
255
|
+
* why one unavailable read costs one finding rather than the whole section. The
|
|
256
|
+
* alternative — a section that fails because the streak query timed out — replaces
|
|
257
|
+
* six findings with none.
|
|
258
|
+
*/
|
|
259
|
+
getNeedsAttention(scope: AnalyticsScope, previous?: {
|
|
260
|
+
from: string;
|
|
261
|
+
to: string;
|
|
262
|
+
}): Promise<{
|
|
263
|
+
items: import("./reporting/needs-attention.js").AttentionItem[];
|
|
264
|
+
thresholds: import("./reporting/needs-attention.js").NeedsAttentionThresholds;
|
|
265
|
+
pipelinesEvaluated: number;
|
|
266
|
+
}>;
|
|
267
|
+
/**
|
|
268
|
+
* The org's stored needs-attention thresholds, or `{}`.
|
|
269
|
+
*
|
|
270
|
+
* Returned as a partial on purpose: `thresholdsFrom` fills the rest per field, so
|
|
271
|
+
* an org that configured one number keeps the defaults for the others instead of
|
|
272
|
+
* silently disabling four rules by setting one.
|
|
273
|
+
*/
|
|
274
|
+
private attentionThresholds;
|
|
275
|
+
/**
|
|
276
|
+
* The org's own minutes-saved-per-pipeline assumption, or null.
|
|
277
|
+
*
|
|
278
|
+
* Read here so the adoption section cannot accidentally be handed a
|
|
279
|
+
* platform-chosen default: the number only means something when the customer
|
|
280
|
+
* picked it, and `null` renders as "not estimated" rather than as zero.
|
|
281
|
+
*/
|
|
282
|
+
private timeSavedAssumption;
|
|
194
283
|
}
|
|
195
284
|
export declare const reportingService: ReportingService;
|