@pipeline-builder/pipeline-data 4.3.3 → 4.3.5
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/crud-service.d.ts +7 -0
- package/lib/api/crud-service.js +14 -3
- package/lib/api/pipeline-step-resolution.d.ts +111 -0
- package/lib/api/pipeline-step-resolution.js +163 -0
- package/lib/api/plugin-consumption-policy.d.ts +8 -2
- package/lib/api/plugin-consumption-policy.js +20 -3
- package/lib/api/plugin-resolution.d.ts +26 -9
- package/lib/api/plugin-resolution.js +51 -33
- package/lib/api/reporting/analytics-queries.d.ts +6 -4
- package/lib/api/reporting/analytics-queries.js +11 -11
- package/lib/api/reporting/deploy-rollup.d.ts +2 -0
- package/lib/api/reporting/deploy-rollup.js +5 -1
- package/lib/api/reporting/failure-classifier.d.ts +2 -6
- package/lib/api/reporting/failure-classifier.js +22 -1
- package/lib/api/reporting/ingest.js +73 -16
- package/lib/api/reporting/plugin-exposure.d.ts +261 -15
- package/lib/api/reporting/plugin-exposure.js +423 -38
- package/lib/api/reporting/stakeholder/compose.d.ts +1 -1
- package/lib/api/reporting/stakeholder/compose.js +30 -1
- package/lib/api/reporting/stakeholder/store.d.ts +16 -2
- package/lib/api/reporting/stakeholder/store.js +17 -6
- package/lib/api/reporting/types.d.ts +80 -1
- package/lib/api/reporting/types.js +1 -1
- package/lib/api/reporting-service.d.ts +11 -4
- package/lib/api/reporting-service.js +106 -43
- package/lib/api/soft-delete-sweep.d.ts +8 -18
- package/lib/api/soft-delete-sweep.js +35 -5
- package/lib/api/version-references.d.ts +80 -0
- package/lib/api/version-references.js +135 -0
- package/lib/core/query-filters.d.ts +3 -3
- package/lib/core/query-filters.js +1 -1
- package/lib/database/drizzle-schema.d.ts +1238 -143
- package/lib/database/drizzle-schema.js +6 -3
- package/lib/database/index.d.ts +1 -1
- package/lib/database/index.js +2 -2
- package/lib/database/schema/ecosystem.d.ts +53 -0
- package/lib/database/schema/ecosystem.js +14 -3
- package/lib/database/schema/pipeline.d.ts +38 -0
- package/lib/database/schema/pipeline.js +20 -2
- package/lib/database/schema/plugin.d.ts +265 -0
- package/lib/database/schema/plugin.js +34 -3
- package/lib/database/schema/reporting-analytics.d.ts +786 -4
- package/lib/database/schema/reporting-analytics.js +111 -5
- package/lib/index.d.ts +5 -3
- package/lib/index.js +5 -3
- package/lib/testing/exports.json +24 -0
- package/package.json +4 -3
|
@@ -1150,6 +1150,44 @@ export declare const pipelineEvent: import("drizzle-orm/pg-core").PgTableWithCol
|
|
|
1150
1150
|
}, {}, {
|
|
1151
1151
|
length: 30;
|
|
1152
1152
|
}>;
|
|
1153
|
+
sourceEventId: import("drizzle-orm/pg-core").PgColumn<{
|
|
1154
|
+
name: "source_event_id";
|
|
1155
|
+
tableName: "pipeline_events";
|
|
1156
|
+
dataType: "string";
|
|
1157
|
+
columnType: "PgVarchar";
|
|
1158
|
+
data: string;
|
|
1159
|
+
driverParam: string;
|
|
1160
|
+
notNull: false;
|
|
1161
|
+
hasDefault: false;
|
|
1162
|
+
isPrimaryKey: false;
|
|
1163
|
+
isAutoincrement: false;
|
|
1164
|
+
hasRuntimeDefault: false;
|
|
1165
|
+
enumValues: [string, ...string[]];
|
|
1166
|
+
baseColumn: never;
|
|
1167
|
+
identity: undefined;
|
|
1168
|
+
generated: undefined;
|
|
1169
|
+
}, {}, {
|
|
1170
|
+
length: 128;
|
|
1171
|
+
}>;
|
|
1172
|
+
ingestKeyId: import("drizzle-orm/pg-core").PgColumn<{
|
|
1173
|
+
name: "ingest_key_id";
|
|
1174
|
+
tableName: "pipeline_events";
|
|
1175
|
+
dataType: "string";
|
|
1176
|
+
columnType: "PgVarchar";
|
|
1177
|
+
data: string;
|
|
1178
|
+
driverParam: string;
|
|
1179
|
+
notNull: false;
|
|
1180
|
+
hasDefault: false;
|
|
1181
|
+
isPrimaryKey: false;
|
|
1182
|
+
isAutoincrement: false;
|
|
1183
|
+
hasRuntimeDefault: false;
|
|
1184
|
+
enumValues: [string, ...string[]];
|
|
1185
|
+
baseColumn: never;
|
|
1186
|
+
identity: undefined;
|
|
1187
|
+
generated: undefined;
|
|
1188
|
+
}, {}, {
|
|
1189
|
+
length: 255;
|
|
1190
|
+
}>;
|
|
1153
1191
|
detail: import("drizzle-orm/pg-core").PgColumn<{
|
|
1154
1192
|
name: "detail";
|
|
1155
1193
|
tableName: "pipeline_events";
|
|
@@ -209,6 +209,16 @@ export const pipelineEvent = pgTable('pipeline_events', {
|
|
|
209
209
|
* and the AI summary is shown the category, never the raw error.
|
|
210
210
|
*/
|
|
211
211
|
failureCategory: varchar('failure_category', { length: 30 }),
|
|
212
|
+
/**
|
|
213
|
+
* Provenance. `sourceEventId` is the EventBridge event id the forwarder
|
|
214
|
+
* received this state change as (NULL for plugin-build events) — the
|
|
215
|
+
* strongest dedup key there is, and the thread an audit row or a DORA
|
|
216
|
+
* deploy follows back to the exact AWS event. `ingestKeyId` is the access-key
|
|
217
|
+
* id of the `reporting:ingest` credential that wrote the row: a key ID, never
|
|
218
|
+
* the secret, so a forged or misrouted row names the credential behind it.
|
|
219
|
+
*/
|
|
220
|
+
sourceEventId: varchar('source_event_id', { length: 128 }),
|
|
221
|
+
ingestKeyId: varchar('ingest_key_id', { length: 255 }),
|
|
212
222
|
detail: jsonb('detail').$type(),
|
|
213
223
|
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
214
224
|
}, (table) => ({
|
|
@@ -238,6 +248,14 @@ export const pipelineEvent = pgTable('pipeline_events', {
|
|
|
238
248
|
dedupIdx: uniqueIndex('event_dedup_idx')
|
|
239
249
|
.on(sql `coalesce(${table.pipelineId}::text, '')`, table.executionId, table.eventType, table.status, sql `coalesce(${table.stageName}, '')`, sql `coalesce(${table.actionName}, '')`)
|
|
240
250
|
.where(sql `execution_id IS NOT NULL`),
|
|
251
|
+
// Strongest dedup key when the producer has one: an EventBridge event id is
|
|
252
|
+
// unique per AWS state change, so an SQS redelivery or DLQ redrive of the same
|
|
253
|
+
// event collapses here even without an execution_id. Partial — plugin-build
|
|
254
|
+
// events carry none. A second ON CONFLICT DO NOTHING arbiter for ingestEvents.
|
|
255
|
+
// Created by postgres-init.sql.
|
|
256
|
+
sourceEventIdx: uniqueIndex('event_source_event_idx')
|
|
257
|
+
.on(table.sourceEventId)
|
|
258
|
+
.where(sql `source_event_id IS NOT NULL`),
|
|
241
259
|
// DORA deploy-scoped reads: only PIPELINE-level executions tagged with a
|
|
242
260
|
// deploy environment. `event_type` is in the index because the events Lambda
|
|
243
261
|
// tags EVERY event of a deployed pipeline (STAGE/ACTION too), while the DORA
|
|
@@ -437,7 +455,7 @@ export const doraSettings = pgTable('dora_settings', {
|
|
|
437
455
|
*
|
|
438
456
|
* On the report policy rather than on the platform org, because platform's organization
|
|
439
457
|
* has no timezone concept to extend and inventing one there would give the same setting
|
|
440
|
-
* two owners. An admin sets it once (`
|
|
458
|
+
* two owners. An admin sets it once (`org_settings:write`, the same gate as the rest of the
|
|
441
459
|
* policy) and every lead's new report starts correct instead of starting in UTC and
|
|
442
460
|
* being noticed a week later, when a Monday report has put Sunday evening's deploys in
|
|
443
461
|
* the wrong week.
|
|
@@ -449,4 +467,4 @@ export const doraSettings = pgTable('dora_settings', {
|
|
|
449
467
|
reportDefaultWeekStart: varchar('report_default_week_start', { length: 10 }),
|
|
450
468
|
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
|
451
469
|
});
|
|
452
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2Uvc2NoZW1hL3BpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUNMLGFBQWEsR0FFZCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQTJCbkk7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFO0lBQzNDLGNBQWM7SUFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUUzQyxrQ0FBa0M7SUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFFWixlQUFlO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9B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QUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3pFLHNCQUFzQixFQUFFLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUM1RSxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRTtDQUNsRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHtcbiAgU1lTVEVNX09SR19JRCwgdHlwZSBDcml0aWNhbGl0eSwgdHlwZSBFbnRpdHlMYWJlbHMsIHR5cGUgRW50aXR5TGluaywgdHlwZSBMaWZlY3ljbGUsIHR5cGUgTWV0YURhdGFUeXBlLFxuICB0eXBlIE93bmVyVHlwZSwgdHlwZSBWaXNpYmlsaXR5LFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBiaWdpbnQsIGJvb2xlYW4sIGludGVnZXIsIHZhcmNoYXIsIHBnVGFibGUsIHRleHQsIHRpbWVzdGFtcCwgdXVpZCwganNvbmIsIGluZGV4LCB1bmlxdWVJbmRleCB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQaXBlbGluZUNyZWF0aW9uU291cmNlIH0gZnJvbSAnLi9yZXBvcnRpbmctYW5hbHl0aWNzLmpzJztcblxuLyoqXG4gKiBQaXBlbGluZSBidWlsZGVyIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBzdG9yZWQgaW4gZGF0YWJhc2UuXG4gKiBNaXJyb3JzIHRoZSBjYW5vbmljYWwgQnVpbGRlclByb3BzIGZyb20gcGlwZWxpbmUtY29yZSAoSlNPTi1zZXJpYWxpemFibGUgZm9ybSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVCdWlsZGVyQ29uZmlnIHtcbiAgcmVhZG9ubHkgcHJvamVjdDogc3RyaW5nO1xuICByZWFkb25seSBvcmdhbml6YXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBnbG9iYWw/OiBNZXRhRGF0YVR5cGU7XG4gIHJlYWRvbmx5IHN5bnRoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgZGVmYXVsdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgcm9sZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSBzdGFnZXM/OiBQaXBlbGluZVN0YWdlQ29uZmlnW107XG59XG5cbi8qKlxuICogU3RhZ2UgY29uZmlndXJhdGlvbiBzdG9yZWQgaW4gZGF0YWJhc2UgKEpTT04tc2VyaWFsaXphYmxlKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWdlQ29uZmlnIHtcbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuICByZWFkb25seSBzdGVwczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuLyoqXG4gKiBUYWJsZSBmb3Igc3RvcmluZyBwaXBlbGluZSBpbnN0YW5jZXMgYW5kIHRoZWlyIGZ1bGwgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBGZWF0dXJlcyAqIC0gRnVsbCBCdWlsZGVyUHJvcHMgc2VyaWFsaXphdGlvbiBmb3IgcmVjb25zdHJ1Y3Rpb25cbiAqIC0gT3JnYW5pemF0aW9uLWxldmVsIGlzb2xhdGlvblxuICogLSBQaXBlbGluZSBzdGF0dXMgdHJhY2tpbmdcbiAqIC0gRXhlY3V0aW9uIGhpc3RvcnkgdHJhY2tpbmdcbiAqIC0gRmxleGlibGUgdGFnZ2luZyBzeXN0ZW1cbiAqXG4gKiBAdGFibGUgcGlwZWxpbmVzXG4gKi9cbmV4cG9ydCBjb25zdCBwaXBlbGluZSA9IHBnVGFibGUoJ3BpcGVsaW5lcycsIHtcbiAgLy8gUHJpbWFyeSBrZXlcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcblxuICAvLyBPcmdhbml6YXRpb24gYW5kIGFjY2VzcyBjb250cm9sXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIEF1ZGl0IGZpZWxkc1xuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQnk6IHRleHQoJ3VwZGF0ZWRfYnknKVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIENvcmUgcGlwZWxpbmUgaW5mb3JtYXRpb25cbiAgcHJvamVjdDogdmFyY2hhcigncHJvamVjdCcsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAubm90TnVsbCgpLFxuICBvcmdhbml6YXRpb246IHZhcmNoYXIoJ29yZ2FuaXphdGlvbicsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAubm90TnVsbCgpLFxuICBwaXBlbGluZU5hbWU6IHZhcmNoYXIoJ3BpcGVsaW5lX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBkZXNjcmlwdGlvbjogdGV4dCgnZGVzY3JpcHRpb24nKSxcbiAga2V5d29yZHM6IGpzb25iKCdrZXl3b3JkcycpXG4gICAgLiR0eXBlPHN0cmluZ1tdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBQaXBlbGluZSBjb25maWd1cmF0aW9uXG4gIHByb3BzOiBqc29uYigncHJvcHMnKVxuICAgIC4kdHlwZTxQaXBlbGluZUJ1aWxkZXJDb25maWc+KClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8qKlxuICAgKiBIb3cgdGhpcyBwaXBlbGluZSBjYW1lIHRvIGV4aXN0IOKAlCBzZXQgYnkgd2hpY2hldmVyIGNyZWF0ZSBwYXRoIG1hZGUgaXRcbiAgICogKGBtYW51YWxgLCBgdGVtcGxhdGVgLCBgYWlgLCBgYnVsa2AsIGBjZGtgKS4gU3RhbXBlZCBhdCBjcmVhdGlvbiByYXRoZXIgdGhhblxuICAgKiBpbmZlcnJlZCBsYXRlciwgYmVjYXVzZSBub3RoaW5nIGluIGEgc3RvcmVkIGNvbmZpZyBzYXlzIGhvdyBpdCB3YXMgYXV0aG9yZWQsXG4gICAqIGFuZCB0aGUgYWRvcHRpb24gc2VjdGlvbidzIHdob2xlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGdvbGRlbiBwYXRocyBhcmVcbiAgICogYmVpbmcgdXNlZDogYW4gb3JnIHdob3NlIHBpcGVsaW5lcyBhcmUgYWxsIGhhbmQtYnVpbHQgaGFzIGEgZGlmZmVyZW50IHN0b3J5XG4gICAqIGZyb20gb25lIHRlbXBsYXRpbmcgdGhlbS5cbiAgICovXG4gIGNyZWF0aW9uU291cmNlOiB2YXJjaGFyKCdjcmVhdGlvbl9zb3VyY2UnLCB7IGxlbmd0aDogMjAgfSlcbiAgICAuJHR5cGU8UGlwZWxpbmVDcmVhdGlvblNvdXJjZT4oKSxcblxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgbWV0YWRhdGEgKG93bmVyc2hpcCAvIGxpZmVjeWNsZSAvIGNsYXNzaWZpY2F0aW9uKS5cbiAgLy8gb3duZXJJZCBkZWZhdWx0cyB0byB0aGUgY3JlYXRpbmcgdXNlciAoc2V0IGF0IGluc2VydCksIHNvIGV2ZXJ5IHBpcGVsaW5lIGhhc1xuICAvLyBhbiBvd25lciBmb3IgXCJteSBzZXJ2aWNlc1wiIHZpZXdzOyBvd25lclR5cGUgZGlzdGluZ3Vpc2hlcyB1c2VyIHZzIHRlYW0uXG4gIG93bmVySWQ6IHRleHQoJ293bmVyX2lkJyksXG4gIG93bmVyVHlwZTogdmFyY2hhcignb3duZXJfdHlwZScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxPd25lclR5cGU+KCksXG4gIGxpZmVjeWNsZTogdmFyY2hhcignbGlmZWN5Y2xlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPExpZmVjeWNsZT4oKVxuICAgIC5kZWZhdWx0KCdwcm9kdWN0aW9uJyBhcyBMaWZlY3ljbGUpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JpdGljYWxpdHk6IHZhcmNoYXIoJ2NyaXRpY2FsaXR5JywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPENyaXRpY2FsaXR5PigpLFxuICBsYWJlbHM6IGpzb25iKCdsYWJlbHMnKVxuICAgIC4kdHlwZTxFbnRpdHlMYWJlbHM+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBsaW5rczoganNvbmIoJ2xpbmtzJylcbiAgICAuJHR5cGU8RW50aXR5TGlua1tdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBY2Nlc3MgYW5kIHZpc2liaWxpdHkg4oCUIHRoZSBzaGFyZWQgdGhyZWUtcnVuZyBsYWRkZXIgKHNlZSBhcGktY29yZSdzXG4gIC8vIGBWaXNpYmlsaXR5YCk6IGBwcml2YXRlYCBpcyBhdXRob3Itb25seSAoYGNyZWF0ZWRfYnlgKSwgYG9yZ2AgaXMgdGhlIHdob2xlXG4gIC8vIG93bmluZyBvcmcsIGBwdWJsaWNgIHJlYWNoZXMgdGhlIG9yZydzIHRlYW1zIGFuZCDigJQgZnJvbSB0aGUgc3lzdGVtIG9yZyDigJRcbiAgLy8gZXZlcnkgb3JnLiBDb25zdHJhaW5lZCBhdCB0aGUgU1FMIGxheWVyIHRvbyB2aWEgYSBDSEVDSyBpbiBwb3N0Z3Jlcy1pbml0LnNxbFxuICAvLyBzbyBhIHR5cG8gY2FuJ3Qgc25lYWsgcGFzdCB0aGUgYXBwbGljYXRpb24gbGF5ZXIuXG4gIHZpc2liaWxpdHk6IHZhcmNoYXIoJ3Zpc2liaWxpdHknLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8VmlzaWJpbGl0eT4oKVxuICAgIC5kZWZhdWx0KCdwcml2YXRlJylcbiAgICAubm90TnVsbCgpLFxuICBpc0RlZmF1bHQ6IGJvb2xlYW4oJ2lzX2RlZmF1bHQnKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKVxuICAgIC5kZWZhdWx0KHRydWUpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZWxldGlvbiB0cmFja2luZyAoc29mdCBkZWxldGUpXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXBcbiAgLy8gKGBXSEVSRSBkZWxldGVkX2F0IElTIE5PVCBOVUxMIEFORCBwdXJnZV9hZnRlciA8IG5vd2ApIHdpdGhvdXQgc2Nhbm5pbmcgbGl2ZSByb3dzLlxuICBwdXJnZUlkeDogaW5kZXgoJ3BpcGVsaW5lX3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIC8vIE1pcnJvcnMgdGhlIGluZGV4ZXMgcG9zdGdyZXMtaW5pdC5zcWwgY3JlYXRlcywgbmFtZSBmb3IgbmFtZSAodGhlIFNRTCBmaWxlIGlzXG4gIC8vIHdoYXQgZGVwbG95czsgc2NoZW1hLXJlZmxlY3Rpb24udGVzdC50cyBrZWVwcyB0aGUgdHdvIGluIGxvY2stc3RlcCkuXG4gIG9yZ0lkSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19vcmdfaWQnKS5vbih0YWJsZS5vcmdJZCkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBwcm9qZWN0SWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19wcm9qZWN0Jykub24odGFibGUucHJvamVjdCkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBvcmdhbml6YXRpb25JZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX29yZ2FuaXphdGlvbicpLm9uKHRhYmxlLm9yZ2FuaXphdGlvbikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBwcm9qZWN0T3JnSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19wcm9qZWN0X29yZycpLm9uKHRhYmxlLnByb2plY3QsIHRhYmxlLm9yZ2FuaXphdGlvbikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICB2aXNpYmlsaXR5SWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc192aXNpYmlsaXR5Jykub24odGFibGUudmlzaWJpbGl0eSkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBpc0RlZmF1bHRJZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX2lzX2RlZmF1bHQnKVxuICAgIC5vbih0YWJsZS5wcm9qZWN0LCB0YWJsZS5vcmdhbml6YXRpb24sIHRhYmxlLmlzRGVmYXVsdCkud2hlcmUoc3FsYGlzX2RlZmF1bHQgPSB0cnVlIEFORCBkZWxldGVkX2F0IElTIE5VTExgKSxcbiAgYWN0aXZlSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19pc19hY3RpdmUnKS5vbih0YWJsZS5pc0FjdGl2ZSkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBvcmdDcmVhdGVkSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19vcmdfY3JlYXRlZCcpLm9uKHRhYmxlLm9yZ0lkLCBzcWxgJHt0YWJsZS5jcmVhdGVkQXR9IERFU0NgKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG5cbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIGluZGV4ZXM6IFwibXkgc2VydmljZXNcIiAob3duZXIpICsgbGlmZWN5Y2xlIGZpbHRlci5cbiAgb3duZXJJZHg6IGluZGV4KCdwaXBlbGluZV9vd25lcl9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUub3duZXJJZCksXG4gIGxpZmVjeWNsZUlkeDogaW5kZXgoJ3BpcGVsaW5lX2xpZmVjeWNsZV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUubGlmZWN5Y2xlKSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIGZpbHRlcmVkIHF1ZXJpZXMgKG9yZ0lkICsgdmlzaWJpbGl0eSArIGlzQWN0aXZlKVxuICBvcmdWaXNpYmlsaXR5QWN0aXZlSWR4OiBpbmRleCgncGlwZWxpbmVfb3JnX3Zpc2liaWxpdHlfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS52aXNpYmlsaXR5LCB0YWJsZS5pc0FjdGl2ZSksXG4gIC8vIERyaXZlcyB0aGUgXCJteSBwcml2YXRlIGRyYWZ0c1wiIGxlZyBvZiB0aGUgdmlzaWJpbGl0eSBwcmVkaWNhdGUuXG4gIGNyZWF0ZWRCeUlkeDogaW5kZXgoJ3BpcGVsaW5lX2NyZWF0ZWRfYnlfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmNyZWF0ZWRCeSksXG5cbiAgLy8gVW5pcXVlIGNvbnN0cmFpbnQgb24gcHJvamVjdCArIG9yZ2FuaXphdGlvbiArIG9yZ0lkXG4gIHByb2plY3RPcmdVbmlxdWU6IHVuaXF1ZUluZGV4KCdwaXBlbGluZV9wcm9qZWN0X29yZ191bmlxdWUnKVxuICAgIC5vbih0YWJsZS5wcm9qZWN0LCB0YWJsZS5vcmdhbml6YXRpb24sIHRhYmxlLm9yZ0lkKSxcbn0pKTtcblxuLyoqXG4gKiBQaXBlbGluZSBkZXBsb3ltZW50IHJlZ2lzdHJ5LlxuICogTWFwcyBkZXBsb3llZCBDb2RlUGlwZWxpbmUgQVJOcyBiYWNrIHRvIHBpcGVsaW5lIHJlY29yZHMgYW5kIG9yZyBJRHMuXG4gKiBQb3B1bGF0ZWQgYnkgdGhlIGRlcGxveSBjb21tYW5kIGFmdGVyIHN1Y2Nlc3NmdWwgQ0RLIGRlcGxveS5cbiAqIFVzZWQgYnkgdGhlIHBpcGVsaW5lLWV2ZW50cyBMYW1iZGEgdG8gcmVzb2x2ZSBFdmVudEJyaWRnZSBldmVudHMgdG8gb3JnLXNjb3BlZCByZWNvcmRzLlxuICpcbiAqIEB0YWJsZSBwaXBlbGluZV9yZWdpc3RyeVxuICovXG5leHBvcnQgY29uc3QgcGlwZWxpbmVSZWdpc3RyeSA9IHBnVGFibGUoJ3BpcGVsaW5lX3JlZ2lzdHJ5Jywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICAvLyBUaGUgcGxhdGZvcm0ncyBwaXBlbGluZSByZWNvcmQgaWQg4oCUIGEgU1RBQkxFIHV1aWQgY3JlYXRlZCB3aXRoIHRoZSBwaXBlbGluZVxuICAvLyByZWNvcmQsIGtub3duIGF0IENESyBzeW50aCwgYW5kIGFwcGxpZWQgdG8gdGhlIGxpdmUgQ29kZVBpcGVsaW5lIGFzIHRoZVxuICAvLyBgcGIucGlwZWxpbmUtaWRgIHRhZy4gVGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgdGhhdCB0YWcgYW5kIHJlcG9ydHNcbiAgLy8gYWdhaW5zdCB0aGlzIGlkLCBzbyBpdCBJUyB0aGUgZXZlbnQgam9pbiBrZXkgKHJlcGxhY2luZyB0aGUgbWFza2VkIEFSTiDigJRcbiAgLy8gaXQgY2FycmllcyBubyBBV1MgYWNjb3VudC9yZWdpb24sIHNvIG5vIG1hc2tpbmcgaXMgbmVlZGVkKS4gVW5pcXVlOiBvbmVcbiAgLy8gcmVnaXN0cnkgcm93IHBlciBwaXBlbGluZSArIHRoZSB1cHNlcnQga2V5IGZvciAocmUpcmVnaXN0cmF0aW9uLlxuICBwaXBlbGluZUlkOiB1dWlkKCdwaXBlbGluZV9pZCcpLm5vdE51bGwoKS51bmlxdWUoKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBwaXBlbGluZU5hbWU6IHZhcmNoYXIoJ3BpcGVsaW5lX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgcmVnaW9uOiB2YXJjaGFyKCdyZWdpb24nLCB7IGxlbmd0aDogMzAgfSksXG4gIHByb2plY3Q6IHZhcmNoYXIoJ3Byb2plY3QnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBvcmdhbml6YXRpb246IHZhcmNoYXIoJ29yZ2FuaXphdGlvbicsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGxhc3REZXBsb3llZDogdGltZXN0YW1wKCdsYXN0X2RlcGxveWVkJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHN0YWNrTmFtZTogdmFyY2hhcignc3RhY2tfbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdJZElkeDogaW5kZXgoJ3JlZ2lzdHJ5X29yZ19pZF9pZHgnKS5vbih0YWJsZS5vcmdJZCksXG4gIG9yZ1JlZ2lvbklkeDogaW5kZXgoJ3JlZ2lzdHJ5X29yZ19yZWdpb25faWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnJlZ2lvbiksXG4gIC8vIE9uZSByZWdpc3RyeSByb3cgcGVyIHBpcGVsaW5lICh0aGUgcmVnaXN0cmF0aW9uIHVwc2VydCdzIGNvbmZsaWN0IHRhcmdldCkuXG4gIHBpcGVsaW5lSWRVbmlxdWU6IHVuaXF1ZUluZGV4KCdyZWdpc3RyeV9waXBlbGluZV9pZF9pZHgnKS5vbih0YWJsZS5waXBlbGluZUlkKSxcbn0pKTtcblxuLyoqXG4gKiBFdmVudCBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBpcGVsaW5lX2V2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgRXZlbnRTb3VyY2UgPSAnY29kZXBpcGVsaW5lJyB8ICdjb2RlYnVpbGQnIHwgJ3BsdWdpbi1idWlsZCc7XG5cbi8qKlxuICogRXZlbnQgdHlwZSBncmFudWxhcml0eSBsZXZlbHMgZm9yIHBpcGVsaW5lX2V2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgRXZlbnRUeXBlID0gJ1BJUEVMSU5FJyB8ICdTVEFHRScgfCAnQUNUSU9OJyB8ICdCVUlMRCc7XG5cbi8qKlxuICogUGlwZWxpbmUgZXhlY3V0aW9uIGFuZCBidWlsZCBldmVudHMuXG4gKiBDYXB0dXJlcyBDb2RlUGlwZWxpbmUvQ29kZUJ1aWxkIHN0YXRlIGNoYW5nZXMgZnJvbSBFdmVudEJyaWRnZVxuICogYW5kIHBsdWdpbiBEb2NrZXIgYnVpbGQgb3V0Y29tZXMgZnJvbSBCdWxsTVEuXG4gKiBBbGwgZXZlbnRzIGFyZSBvcmctc2NvcGVkIGZvciBtdWx0aS10ZW5hbnQgcmVwb3J0aW5nLlxuICpcbiAqIEB0YWJsZSBwaXBlbGluZV9ldmVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IHBpcGVsaW5lRXZlbnQgPSBwZ1RhYmxlKCdwaXBlbGluZV9ldmVudHMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIHBpcGVsaW5lSWQ6IHV1aWQoJ3BpcGVsaW5lX2lkJyksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgZXZlbnRTb3VyY2U6IHZhcmNoYXIoJ2V2ZW50X3NvdXJjZScsIHsgbGVuZ3RoOiA1MCB9KS4kdHlwZTxFdmVudFNvdXJjZT4oKS5ub3ROdWxsKCksXG4gIGV2ZW50VHlwZTogdmFyY2hhcignZXZlbnRfdHlwZScsIHsgbGVuZ3RoOiA1MCB9KS4kdHlwZTxFdmVudFR5cGU+KCkubm90TnVsbCgpLFxuICBzdGF0dXM6IHZhcmNoYXIoJ3N0YXR1cycsIHsgbGVuZ3RoOiAyMCB9KS5ub3ROdWxsKCksXG4gIGV4ZWN1dGlvbklkOiB2YXJjaGFyKCdleGVjdXRpb25faWQnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBzdGFnZU5hbWU6IHZhcmNoYXIoJ3N0YWdlX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBhY3Rpb25OYW1lOiB2YXJjaGFyKCdhY3Rpb25fbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGVycm9yTWVzc2FnZTogdGV4dCgnZXJyb3JfbWVzc2FnZScpLFxuICBzdGFydGVkQXQ6IHRpbWVzdGFtcCgnc3RhcnRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjb21wbGV0ZWRBdDogdGltZXN0YW1wKCdjb21wbGV0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZHVyYXRpb25NczogaW50ZWdlcignZHVyYXRpb25fbXMnKSxcbiAgLy8gRE9SQSBkZXBsb3ktYXR0cmlidXRpb24gKGFsbCBudWxsYWJsZTsgcG9wdWxhdGVkIGF0IGluZ2VzdCB3aGVuIHRoZSBzb3VyY2VcbiAgLy8gZXZlbnQgY2FycmllcyB0aGVtIOKAlCBsZWdhY3kvQ0ktb25seSBldmVudHMgbGVhdmUgdGhlbSBOVUxMKS4gYGVudmlyb25tZW50YFxuICAvLyBpcyB0aGUgZGVwbG95IHRhcmdldCAoZS5nLiBcInByb2R1Y3Rpb25cIik7IGl0cyBwcmVzZW5jZSBtYXJrcyBhbiBleGVjdXRpb25cbiAgLy8gYXMgYSByZWFsIGRlcGxveW1lbnQsIGxldHRpbmcgRE9SQSBzY29wZSBwYXN0IGdlbmVyaWMgcGlwZWxpbmUgcnVucy5cbiAgLy8gYGNvbW1pdFNoYWAvYGNvbW1pdFJlZmAgY2FwdHVyZSB0aGUgc291cmNlIHJldmlzaW9uIGZvciBsZWFkLXRpbWUgd29yay5cbiAgY29tbWl0U2hhOiB2YXJjaGFyKCdjb21taXRfc2hhJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgY29tbWl0UmVmOiB2YXJjaGFyKCdjb21taXRfcmVmJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgLy8gRE9SQSB0cnVlLWxlYWQtdGltZSBhdHRyaWJ1dGlvbi4gVGhlIGZvcndhcmRlciByZXNvbHZlcyB0aGUgc291cmNlXG4gIC8vIGNvbW1pdCByYW5nZSBpbi1hY2NvdW50IGFuZCByZXBvcnRzIHRoZSBPTERFU1QgdW5zaGlwcGVkIGNvbW1pdCdzIHRpbWVzdGFtcFxuICAvLyArIGhvdyBtYW55IGNvbW1pdHMgc2hpcHBlZC4gQm90aCBudWxsYWJsZSDigJQgZXZlbnRzIHdob3NlIHNvdXJjZSB0eXBlL3Rva2VuXG4gIC8vIGNhbid0IGJlIHJlc29sdmVkIGxlYXZlIHRoZW0gTlVMTCBhbmQgbGVhZCB0aW1lIHJlcG9ydHMgYHVua25vd25gLlxuICBjb21taXRUaW1lc3RhbXA6IHRpbWVzdGFtcCgnY29tbWl0X3RpbWVzdGFtcCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjb21taXRDb3VudDogaW50ZWdlcignY29tbWl0X2NvdW50JyksXG4gIC8vIFBlci1wbHVnaW4gcnVudGltZSB0ZWxlbWV0cnk6IHRoZSBwbHVnaW4gYW4gQUNUSU9OL0JVSUxEIGV2ZW50IHJhbixcbiAgLy8gam9pbmVkIGF0IGluZ2VzdCBmcm9tIGBwaXBlbGluZV9zdGVwX21hbmlmZXN0c2Agb24gKHBpcGVsaW5lX2lkLFxuICAvLyBzdGFnZV9uYW1lLCBhY3Rpb25fbmFtZSkuIGBwbHVnaW5QdWJsaXNoZXJgIGlzIE5VTEwgZm9yIGFuIG93bi1vcmcgcGx1Z2luO1xuICAvLyBhbGwgdGhyZWUgYXJlIE5VTEwgZm9yIG5vbi1wbHVnaW4gYWN0aW9ucyBhbmQgdW5yZWNvcmRlZCBzeW50aHMuXG4gIHBsdWdpblB1Ymxpc2hlcjogdmFyY2hhcigncGx1Z2luX3B1Ymxpc2hlcicsIHsgbGVuZ3RoOiAzOSB9KSxcbiAgLy8gVGhlIHB1Ymxpc2hlcidzIElEIChhIGhhbmRsZSBjYW4gY2hhbmdlIG9uIGEgY2xhaW0gb3IgcHJvZmlsZSBjaGFuZ2U7IHRoZVxuICAvLyBsaXN0aW5nIHN0YXRzIGpvaW4gb24gdGhpcywgbmV2ZXIgb24gdGhlIGhhbmRsZSkuIE5VTEwgbGlrZSBwbHVnaW5QdWJsaXNoZXIuXG4gIHBsdWdpblB1Ymxpc2hlcklkOiB1dWlkKCdwbHVnaW5fcHVibGlzaGVyX2lkJyksXG4gIHBsdWdpbk5hbWU6IHZhcmNoYXIoJ3BsdWdpbl9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgcGx1Z2luVmVyc2lvbjogdmFyY2hhcigncGx1Z2luX3ZlcnNpb24nLCB7IGxlbmd0aDogNTAgfSksXG4gIC8qKlxuICAgKiBXaGF0IEtJTkQgb2YgdGhpbmcgYnJva2UsIGZvciBhIGZhaWxlZCBhY3Rpb24uIEFzc2lnbmVkIGF0IGluZ2VzdCBieSB0aGVcbiAgICogZmFpbHVyZSBjbGFzc2lmaWVyLCBub3QgZGVyaXZlZCBhdCByZWFkIHRpbWU6IHRoZSBlcnJvciB0ZXh0IGlzIHNjcnViYmVkIGFuZFxuICAgKiBldmVudHVhbGx5IHN3ZXB0LCBzbyBhIGNhdGVnb3J5IGNvbXB1dGVkIGxhdGVyIHdvdWxkIGhhdmUgbm90aGluZyB0byByZWFkIOKAlFxuICAgKiBhbmQgdGhlIEFJIHN1bW1hcnkgaXMgc2hvd24gdGhlIGNhdGVnb3J5LCBuZXZlciB0aGUgcmF3IGVycm9yLlxuICAgKi9cbiAgZmFpbHVyZUNhdGVnb3J5OiB2YXJjaGFyKCdmYWlsdXJlX2NhdGVnb3J5JywgeyBsZW5ndGg6IDMwIH0pLFxuICBkZXRhaWw6IGpzb25iKCdkZXRhaWwnKS4kdHlwZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBwaXBlbGluZUlkSWR4OiBpbmRleCgnZXZlbnRfcGlwZWxpbmVfaWRfaWR4Jykub24odGFibGUucGlwZWxpbmVJZCksXG4gIG9yZ0lkSWR4OiBpbmRleCgnZXZlbnRfb3JnX2lkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkKSxcbiAgZXZlbnRUeXBlSWR4OiBpbmRleCgnZXZlbnRfdHlwZV9pZHgnKS5vbih0YWJsZS5ldmVudFR5cGUpLFxuICBzdGF0dXNJZHg6IGluZGV4KCdldmVudF9zdGF0dXNfaWR4Jykub24odGFibGUuc3RhdHVzKSxcbiAgZXhlY3V0aW9uSWRJZHg6IGluZGV4KCdldmVudF9leGVjdXRpb25faWRfaWR4Jykub24odGFibGUuZXhlY3V0aW9uSWQpLFxuICBjcmVhdGVkQXRJZHg6IGluZGV4KCdldmVudF9jcmVhdGVkX2F0X2lkeCcpLm9uKHRhYmxlLmNyZWF0ZWRBdCksXG4gIG9yZ1R5cGVDcmVhdGVkSWR4OiBpbmRleCgnZXZlbnRfb3JnX3R5cGVfY3JlYXRlZF9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuZXZlbnRUeXBlLCB0YWJsZS5jcmVhdGVkQXQpLFxuICBvcmdTb3VyY2VTdGF0dXNJZHg6IGluZGV4KCdldmVudF9vcmdfc291cmNlX3N0YXR1c19pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuZXZlbnRTb3VyY2UsIHRhYmxlLnN0YXR1cyksXG4gIC8vIElkZW1wb3RlbmN5OiBFdmVudEJyaWRnZSDihpIgU1FTIGlzIGF0LWxlYXN0LW9uY2UsIHNvIHRoZSBzYW1lIHN0YXRlLWNoYW5nZVxuICAvLyBjYW4gYmUgZGVsaXZlcmVkIHR3aWNlLiBUaGlzIHBhcnRpYWwgdW5pcXVlIGluZGV4IGRlZHVwcyByZS1kZWxpdmVyaWVzXG4gIC8vIChwYWlyZWQgd2l0aCBgb25Db25mbGljdERvTm90aGluZ2AgaW4gcmVwb3J0aW5nLXNlcnZpY2UuaW5nZXN0RXZlbnRzKS5cbiAgLy8gUGFydGlhbCAoZXhlY3V0aW9uX2lkIElTIE5PVCBOVUxMKSBiZWNhdXNlIHRoYXQncyB0aGUgbmF0dXJhbCBwZXItZXZlbnRcbiAgLy8ga2V5OyBldmVudHMgd2l0aG91dCBhbiBleGVjdXRpb25JZCAocmFyZSkgYXJlbid0IGRlZHVwZWQsIHdoaWNoIGlzIHNhZmUuXG4gIC8vIEluY2x1ZGVzIHBpcGVsaW5lX2lkIHNvIGEgKHRoZW9yZXRpY2FsKSBleGVjdXRpb24taWQgcmV1c2UgYWNyb3NzIHBpcGVsaW5lc1xuICAvLyBjYW4ndCBjb2xsaWRlICh0aGUgQVJOIGlzIG5vdCBwYXJ0IG9mIHRoZSByb3cpLlxuICAvL1xuICAvLyBDT0FMRVNDRSB0aGUgbnVsbGFibGUgcGFydHMgdG8gc2VudGluZWxzIChleHByZXNzaW9uIGluZGV4KTogUElQRUxJTkUvU1RBR0UvXG4gIC8vIEJVSUxEIGV2ZW50cyBsZWF2ZSBzdGFnZV9uYW1lL2FjdGlvbl9uYW1lIE5VTEwgKHBsdWdpbi1idWlsZCBhbHNvIHBpcGVsaW5lX2lkXG4gIC8vIE5VTEwpLCBhbmQgUG9zdGdyZXMgdHJlYXRzIE5VTExzIGFzIERJU1RJTkNUIGluIGEgdW5pcXVlIGluZGV4IOKAlCBzbyB0aGUgcGxhaW5cbiAgLy8gY29sdW1uIGluZGV4IG5ldmVyIG1hdGNoZXMgZm9yIHRob3NlIHR5cGVzIGFuZCBvbkNvbmZsaWN0RG9Ob3RoaW5nIGNhbid0IGRlZHVwXG4gIC8vIHRoZWlyIGF0LWxlYXN0LW9uY2UgcmUtZGVsaXZlcmllcy4gQ29sbGFwc2luZyBOVUxM4oaSJycgbWFrZXMgZXF1YWwgZXZlbnRzIGVxdWFsLlxuICAvLyAoZHJpenpsZSdzIHVuaXF1ZUluZGV4IGNhbid0IGV4cHJlc3MgTlVMTFMgTk9UIERJU1RJTkNUIG9uIGEgcGFydGlhbCBpbmRleCwgc29cbiAgLy8gd2UgdXNlIHRoZSBlcXVpdmFsZW50IGV4cHJlc3Npb24gaW5kZXguKSBDcmVhdGVkIGJ5IHBvc3RncmVzLWluaXQuc3FsLlxuICBkZWR1cElkeDogdW5pcXVlSW5kZXgoJ2V2ZW50X2RlZHVwX2lkeCcpXG4gICAgLm9uKFxuICAgICAgc3FsYGNvYWxlc2NlKCR7dGFibGUucGlwZWxpbmVJZH06OnRleHQsICcnKWAsXG4gICAgICB0YWJsZS5leGVjdXRpb25JZCxcbiAgICAgIHRhYmxlLmV2ZW50VHlwZSxcbiAgICAgIHRhYmxlLnN0YXR1cyxcbiAgICAgIHNxbGBjb2FsZXNjZSgke3RhYmxlLnN0YWdlTmFtZX0sICcnKWAsXG4gICAgICBzcWxgY29hbGVzY2UoJHt0YWJsZS5hY3Rpb25OYW1lfSwgJycpYCxcbiAgICApXG4gICAgLndoZXJlKHNxbGBleGVjdXRpb25faWQgSVMgTk9UIE5VTExgKSxcbiAgLy8gRE9SQSBkZXBsb3ktc2NvcGVkIHJlYWRzOiBvbmx5IFBJUEVMSU5FLWxldmVsIGV4ZWN1dGlvbnMgdGFnZ2VkIHdpdGggYVxuICAvLyBkZXBsb3kgZW52aXJvbm1lbnQuIGBldmVudF90eXBlYCBpcyBpbiB0aGUgaW5kZXggYmVjYXVzZSB0aGUgZXZlbnRzIExhbWJkYVxuICAvLyB0YWdzIEVWRVJZIGV2ZW50IG9mIGEgZGVwbG95ZWQgcGlwZWxpbmUgKFNUQUdFL0FDVElPTiB0b28pLCB3aGlsZSB0aGUgRE9SQVxuICAvLyBzY2FuIHdhbnRzIG9ubHkgYGV2ZW50X3R5cGU9J1BJUEVMSU5FJ2Ag4oCUIGluY2x1ZGluZyBpdCByZXN0b3JlcyBzZWxlY3Rpdml0eS5cbiAgLy8gUGFydGlhbCAoZW52aXJvbm1lbnQgSVMgTk9UIE5VTEwpIGtlZXBzIGl0IHNtYWxsIOKAlCBsZWdhY3kvQ0ktb25seSBldmVudHNcbiAgLy8gYXJlbid0IGluZGV4ZWQuIFRoZSBkZWZhdWx0IHJ1bi1iYXNlZCBET1JBIHBhdGggKG5vIGVudmlyb25tZW50KSBjYW4ndCB1c2VcbiAgLy8gdGhpcyBwYXJ0aWFsIGluZGV4OyBpdCByZWxpZXMgb24gZXZlbnRfcGlwZWxpbmVfdHlwZV9zdGFydGVkX2lkeCBiZWxvdy5cbiAgLy8gQ3JlYXRlZCBieSBwb3N0Z3Jlcy1pbml0LnNxbC5cbiAgZW52VHlwZVN0YXJ0ZWRJZHg6IGluZGV4KCdldmVudF9lbnZfdHlwZV9zdGFydGVkX2lkeCcpXG4gICAgLm9uKHRhYmxlLmVudmlyb25tZW50LCB0YWJsZS5ldmVudFR5cGUsIHRhYmxlLnN0YXJ0ZWRBdClcbiAgICAud2hlcmUoc3FsYGVudmlyb25tZW50IElTIE5PVCBOVUxMYCksXG4gIC8vIHN0YXJ0ZWRfYXQgcmFuZ2Ugc2NhbnM6IGV2ZXJ5IENhdGVnb3J5LTEgcmVwb3J0IGFuZCB0aGUgZGVmYXVsdCBydW4tYmFzZWRcbiAgLy8gRE9SQSBwYXRoIGZpbHRlcnMgYGV2ZW50X3R5cGU9J1BJUEVMSU5FJyBBTkQgc3RhcnRlZF9hdCBCRVRXRUVOIOKApmAgam9pbmVkIG9uXG4gIC8vIHBpcGVsaW5lX2lkLCBidXQgdGhlIG90aGVyIGV2ZW50IGNvbXBvc2l0ZSBpbmRleCBpcyBvbiBjcmVhdGVkX2F0LCBub3RcbiAgLy8gc3RhcnRlZF9hdCDigJQgc28gdGhlIHJhbmdlIHNjYW4gaGFkIG5vIGlkZWFsIGluZGV4LiBUaGlzIGNvbXBvc2l0ZSBzZXJ2ZXMgdGhlXG4gIC8vIGpvaW4tZHJpdmVuIHNjYW4gYnkgcGlwZWxpbmVfaWQuIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIHBpcGVsaW5lVHlwZVN0YXJ0ZWRJZHg6IGluZGV4KCdldmVudF9waXBlbGluZV90eXBlX3N0YXJ0ZWRfaWR4JylcbiAgICAub24odGFibGUucGlwZWxpbmVJZCwgdGFibGUuZXZlbnRUeXBlLCB0YWJsZS5zdGFydGVkQXQpLFxuICAvLyBET1JBIGRlcGxveS1iYXNpcyBzY2FuOiBkZXBsb3ltZW50IGZyZXF1ZW5jeSAvIGRlcGxveS10aW1lIENGUiAvXG4gIC8vIGxlYWQgdGltZSBhbGwgZ3JvdXAgZGVwbG95LXN0YWdlIGV2ZW50cyBieSBlbnZpcm9ubWVudCBvdmVyIGEgY29tcGxldGVkX2F0XG4gIC8vIHdpbmRvdy4gVGhpcyBjb21wb3NpdGUgc2VydmVzIHRoYXQgZ3JvdXBlZCBvcmctc2NvcGVkIHNjYW4gZGlyZWN0bHkuXG4gIC8vIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIG9yZ0VudkNvbXBsZXRlZElkeDogaW5kZXgoJ2V2ZW50X29yZ19lbnZfY29tcGxldGVkX2lkeCcpXG4gICAgLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5lbnZpcm9ubWVudCwgdGFibGUuY29tcGxldGVkQXQpLFxuICAvLyBET1JBIGxlYWQgdGltZTogdGhlIGBleGVjX2NvbW1pdHNgIENURSBwcm9iZXMgY29tbWl0LWNhcnJ5aW5nIGV2ZW50cyBieVxuICAvLyBleGVjdXRpb25faWQgYW5kIHRha2VzIE1JTihjb21taXRfdGltZXN0YW1wKS4gUGFydGlhbCArIGV4ZWN1dGlvbl9pZC1sZWFkaW5nIHNvXG4gIC8vIHRoZSBJTi1saXN0IHByb2JlIGlzIGFuIGluZGV4IHNjYW4gYW5kIHRoZSBNSU4gY29tZXMgZnJvbSB0aGUgaW5kZXguIEEgYmFyZVxuICAvLyBpbmRleCBvbiBjb21taXRfdGltZXN0YW1wIHdvdWxkIG5vdCBzZXJ2ZSBpdCDigJQgbm90aGluZyBmaWx0ZXJzIG9uIGEgcmFuZ2UuXG4gIC8vIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIGV4ZWNDb21taXRUc0lkeDogaW5kZXgoJ2V2ZW50X2V4ZWNfY29tbWl0X3RzX2lkeCcpXG4gICAgLm9uKHRhYmxlLmV4ZWN1dGlvbklkLCB0YWJsZS5jb21taXRUaW1lc3RhbXApXG4gICAgLndoZXJlKHNxbGBjb21taXRfdGltZXN0YW1wIElTIE5PVCBOVUxMYCksXG4gIC8vIFBlci1wbHVnaW4gcnVudGltZSByZXBvcnRpbmcgKHN1Y2Nlc3MgcmF0ZSAvIGR1cmF0aW9uIHBlciBwbHVnaW4gdmVyc2lvbikuXG4gIC8vIFBhcnRpYWw6IHRoZSBidWxrIG9mIG5vbi1wbHVnaW4gZXZlbnRzIGlzIG5ldmVyIGluZGV4ZWQuXG4gIHBsdWdpbklkeDogaW5kZXgoJ2V2ZW50X3BsdWdpbl9pZHgnKVxuICAgIC5vbih0YWJsZS5wbHVnaW5QdWJsaXNoZXIsIHRhYmxlLnBsdWdpbk5hbWUsIHRhYmxlLnBsdWdpblZlcnNpb24sIHRhYmxlLmNvbXBsZXRlZEF0KVxuICAgIC53aGVyZShzcWxgcGx1Z2luX25hbWUgSVMgTk9UIE5VTExgKSxcbiAgLy8gTGlzdGluZyBhZG9wdGlvbiAvIHN1Y2Nlc3MgcmF0ZSAocGx1Z2luIHN0YXRzIHN3ZWVwKSwga2V5ZWQgb24gdGhlIHB1Ymxpc2hlciBpZC5cbiAgcGx1Z2luUHVibGlzaGVySWRJZHg6IGluZGV4KCdldmVudF9wbHVnaW5fcHVibGlzaGVyX2lkX2lkeCcpXG4gICAgLm9uKHRhYmxlLnBsdWdpblB1Ymxpc2hlcklkLCB0YWJsZS5wbHVnaW5OYW1lLCB0YWJsZS5jb21wbGV0ZWRBdClcbiAgICAud2hlcmUoc3FsYHBsdWdpbl9wdWJsaXNoZXJfaWQgSVMgTk9UIE5VTExgKSxcbn0pKTtcblxuLyoqXG4gKiBNYW51YWwgcG9zdC1kZXBsb3kgb3V0Y29tZSBtYXJrZXJzLiBBIHVzZXIgbWFya3MgYSBkZXBsb3ltZW50XG4gKiBgZmFpbGVkYCAocHJvZHVjdGlvbiBpbmNpZGVudCBsaW5rZWQgdG8gYSBkZXBsb3kpIG9yIGByZXN0b3JlZGAgKHJlY292ZXJlZCkuXG4gKiBUaGVzZSBmZWVkIHRoZSBET1JBIHBvc3QtZGVwbG95IENoYW5nZSBGYWlsdXJlIFJhdGUgY29tcG9uZW50IGFuZCB0aGUgcmVhbFxuICogTVRUUiAocmVzdG9yZWQg4oiSIGRlcGxveWVkKS4gQ29ycmVsYXRlZCB0byBhIGRlcGxveSBleGVjdXRpb24gYnkgYGV4ZWN1dGlvbklkYC5cbiAqXG4gKiBAdGFibGUgZGVwbG95bWVudF9vdXRjb21lc1xuICovXG5leHBvcnQgY29uc3QgZGVwbG95bWVudE91dGNvbWUgPSBwZ1RhYmxlKCdkZXBsb3ltZW50X291dGNvbWVzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBleGVjdXRpb25JZDogdmFyY2hhcignZXhlY3V0aW9uX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgb3V0Y29tZTogdmFyY2hhcignb3V0Y29tZScsIHsgbGVuZ3RoOiAyMCB9KS4kdHlwZTwnZmFpbGVkJyB8ICdyZXN0b3JlZCc+KCkubm90TnVsbCgpLFxuICBhdDogdGltZXN0YW1wKCdhdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdFbnZJZHg6IGluZGV4KCdkZXBsb3ltZW50X291dGNvbWVzX29yZ19lbnZfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmVudmlyb25tZW50KSxcbiAgZXhlY3V0aW9uSWR4OiBpbmRleCgnZGVwbG95bWVudF9vdXRjb21lc19leGVjdXRpb25faWR4Jykub24odGFibGUuZXhlY3V0aW9uSWQpLFxuICAvLyBJZGVtcG90ZW50IHJlLW1hcmtpbmc6IG9uZSByb3cgcGVyIChleGVjdXRpb24sIG91dGNvbWUpLiBSZS1wb3N0aW5nIHRoZSBzYW1lXG4gIC8vIG91dGNvbWUgZm9yIGEgZGVwbG95IGlzIGEgbm8tb3AvcmVmcmVzaCAob25Db25mbGljdERvVXBkYXRlIHRoZSBgYXRgKSwgc28gYVxuICAvLyBmYWlsZWTihpJyZXN0b3JlZCBwYWlyIGlzIHR3byByb3dzIHdoaWxlIGEgZHVwbGljYXRlIFBPU1QgZG9lc24ndCBkb3VibGUtY291bnQuXG4gIGV4ZWN1dGlvbk91dGNvbWVVbmlxdWU6IHVuaXF1ZUluZGV4KCdkZXBsb3ltZW50X291dGNvbWVzX2V4ZWN1dGlvbl9vdXRjb21lX3VuaXF1ZScpXG4gICAgLm9uKHRhYmxlLmV4ZWN1dGlvbklkLCB0YWJsZS5vdXRjb21lKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItb3JnIGluZ2VzdGlvbiBoZWFsdGguIFRoZSBBV1MgZXZlbnRzIExhbWJkYSBwZXJpb2RpY2FsbHkgcG9zdHNcbiAqIGZvcndhcmRlZC9kcm9wcGVkIGNvdW50ZXJzICsgdGhlIGxhc3QgZXZlbnQgdGltZXN0YW1wIHNvIHRoZSBSZXBvcnRzIFVJIGNhblxuICogc2hvdyB3aGV0aGVyIGV2ZW50cyBhcmUgZmxvd2luZyAvIHN0YWxlIC8gZHJvcHBpbmcuIE9uZSByb3cgcGVyIG9yZy5cbiAqXG4gKiBAdGFibGUgaW5nZXN0X2hlYWx0aFxuICovXG5leHBvcnQgY29uc3QgaW5nZXN0SGVhbHRoID0gcGdUYWJsZSgnaW5nZXN0X2hlYWx0aCcsIHtcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkucHJpbWFyeUtleSgpLFxuICBsYXN0RXZlbnRBdDogdGltZXN0YW1wKCdsYXN0X2V2ZW50X2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGZvcndhcmRlZDogYmlnaW50KCdmb3J3YXJkZWQnLCB7IG1vZGU6ICdudW1iZXInIH0pLFxuICBkcm9wcGVkOiBiaWdpbnQoJ2Ryb3BwZWQnLCB7IG1vZGU6ICdudW1iZXInIH0pLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59KTtcblxuLyoqXG4gKiBQcm9kdWN0aW9uIGluY2lkZW50cyBpbmdlc3RlZCBmcm9tIHRoZSBvcmcncyBpbmNpZGVudCB0b29saW5nLiBUaGVcbiAqIHVzZXIgcG9pbnRzIHRoZWlyIEFsZXJ0bWFuYWdlciAvIFBhZ2VyRHV0eSAvIERhdGFkb2cgd2ViaG9vayBhdFxuICogYFBPU1QgL2FwaS9yZXBvcnRzL2luY2lkZW50c2AgKG1hY2hpbmUgYHJlcG9ydGluZzppbmdlc3RgIHNjb3BlKS4gRWFjaCBpbmNpZGVudFxuICogY2FycmllcyBpdHMgZXh0ZXJuYWwgaWQsIHRoZSBhZmZlY3RlZCBgZW52aXJvbm1lbnRgLCB3aGVuIGl0IG9wZW5lZCwgYW5kIHdoZW5cbiAqIGl0IHdhcyByZXNvbHZlZCAobnVsbGFibGUg4oCUIGEgbGF0ZXIgcmVzb2x2ZSB1cGRhdGVzIGl0KS4gRE9SQSBjb3JyZWxhdGVzIGVhY2hcbiAqIGluY2lkZW50IHRvIHRoZSBtb3N0IHJlY2VudCBzdWNjZXNzZnVsIGRlcGxveSB0byBgZW52aXJvbm1lbnRgIHdpdGhpblxuICogYERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTYCwgdHVybmluZyBpdCBpbnRvIGFuIGF1dG9tYXRlZCBwb3N0LWRlcGxveSBmYWlsdXJlXG4gKiAoQ2hhbmdlIEZhaWx1cmUgUmF0ZSkgYW5kIGEgcmVhbCByZWNvdmVyeSB0aW1lIChgcmVzb2x2ZWRfYXQg4oiSIG9wZW5lZF9hdGAgTVRUUikuXG4gKiBgaW5jaWRlbnRfaWRgIGlzIFVOSVFVRSBwZXIgb3JnIHNvIGEgcmVzb2x2ZSByZS1wb3N0IGlzIGFuIGlkZW1wb3RlbnQgdXBzZXJ0LlxuICpcbiAqIEB0YWJsZSBpbmNpZGVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IGluY2lkZW50ID0gcGdUYWJsZSgnaW5jaWRlbnRzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICAvLyBFeHRlcm5hbCBpbmNpZGVudCBpZCBmcm9tIHRoZSBzb3VyY2Ugc3lzdGVtIChQYWdlckR1dHkvRGF0YWRvZy9BbGVydG1hbmFnZXIpLlxuICAvLyBVbmlxdWUgUEVSIE9SRyAoc2VlIGluY2lkZW50T3JnVW5pcXVlKSDigJQgdGhlIGlkZW1wb3RlbmN5ICsgdXBzZXJ0IGtleS5cbiAgaW5jaWRlbnRJZDogdmFyY2hhcignaW5jaWRlbnRfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICAvLyBBZmZlY3RlZCBkZXBsb3kgZW52aXJvbm1lbnQgKGUuZy4gXCJwcm9kdWN0aW9uXCIpLiBDb3JyZWxhdGVkIHRvIGEgZGVwbG95IGVudi5cbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIG9wZW5lZEF0OiB0aW1lc3RhbXAoJ29wZW5lZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLm5vdE51bGwoKSxcbiAgLy8gTlVMTCB3aGlsZSB0aGUgaW5jaWRlbnQgaXMgb3BlbjsgYSBsYXRlciByZXNvbHZlIHdlYmhvb2sgc2V0cyBpdCAoaWRlbXBvdGVudFxuICAvLyB1cHNlcnQpLiBgcmVzb2x2ZWRfYXQg4oiSIG9wZW5lZF9hdGAgaXMgdGhlIHJlYWwgTVRUUiBmb3IgdGhlIGNvcnJlbGF0ZWQgZGVwbG95LlxuICByZXNvbHZlZEF0OiB0aW1lc3RhbXAoJ3Jlc29sdmVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHNldmVyaXR5OiB2YXJjaGFyKCdzZXZlcml0eScsIHsgbGVuZ3RoOiA1MCB9KS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gQ29ycmVsYXRpb24gc2NhbjogbW9zdC1yZWNlbnQtZGVwbG95LWJlZm9yZS1vcGVuIGxvb2t1cHMgZ3JvdXAgYnkgKG9yZywgZW52KVxuICAvLyBhbmQgcmFuZ2Ugb24gb3BlbmVkX2F0LlxuICBvcmdFbnZPcGVuZWRJZHg6IGluZGV4KCdpbmNpZGVudHNfb3JnX2Vudl9vcGVuZWRfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmVudmlyb25tZW50LCB0YWJsZS5vcGVuZWRBdCksXG4gIC8vIElkZW1wb3RlbnQgdXBzZXJ0IC8gZGVkdXA6IG9uZSByb3cgcGVyIChvcmcsIGluY2lkZW50X2lkKS4gQSByZXNvbHZlIHJlLXBvc3RcbiAgLy8gdXBkYXRlcyByZXNvbHZlZF9hdCBpbnN0ZWFkIG9mIGluc2VydGluZyBhIGR1cGxpY2F0ZS5cbiAgb3JnSW5jaWRlbnRVbmlxdWU6IHVuaXF1ZUluZGV4KCdpbmNpZGVudHNfb3JnX2luY2lkZW50X3VuaXF1ZScpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5pbmNpZGVudElkKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItb3JnIERPUkEgY29tcHV0YXRpb24gKyByZXRlbnRpb24gb3ZlcnJpZGVzLiBPbmUgcm93IHBlciBvcmcgKG9yZ19pZCBQSykuXG4gKiBgaW5jaWRlbnRXaW5kb3dIb3Vyc2Agb3ZlcnJpZGVzIHRoZSBnbG9iYWwgYERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTYFxuICogdXNlZCB0byBjb3JyZWxhdGUgYW4gaW5nZXN0ZWQgaW5jaWRlbnQgdG8gdGhlIG1vc3QgcmVjZW50IHN1Y2Nlc3NmdWwgZGVwbG95LlxuICogYGV2ZW50UmV0ZW50aW9uRGF5c2AgLyBgZG9yYVJldGVudGlvbkRheXNgIG92ZXJyaWRlIHRoZSBnbG9iYWwgcmVwb3J0aW5nXG4gKiByZXRlbnRpb24gd2luZG93cyBmb3IgdGhlIHNwbGl0IHN3ZWVwIOKAlCBzdGFuZGFyZCBldmVudHMgKGBlbnZpcm9ubWVudCBJUyBOVUxMYClcbiAqIHZzIERPUkEgc291cmNlIChkZXBsb3kgc3RhZ2VzICsgYGRlcGxveW1lbnRfb3V0Y29tZXNgICsgYGluY2lkZW50c2ApLiBBbnkgTlVMTCAvXG4gKiBhYnNlbnQgdmFsdWUgZmFsbHMgYmFjayB0byBpdHMgZW52IGRlZmF1bHQuIFNldCBzZWxmLXNlcnZlIGJ5IGFuIG9yZyBhZG1pbiB2aWFcbiAqIGBQVVQgL2FwaS9yZXBvcnRzL3NldHRpbmdzL2luY2lkZW50c2AuIFRoaXMgdGFibGUgaXMgaXRzZWxmIG5ldmVyIHB1cmdlZC5cbiAqXG4gKiBAdGFibGUgZG9yYV9zZXR0aW5nc1xuICovXG5leHBvcnQgY29uc3QgZG9yYVNldHRpbmdzID0gcGdUYWJsZSgnZG9yYV9zZXR0aW5ncycsIHtcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkucHJpbWFyeUtleSgpLFxuICBpbmNpZGVudFdpbmRvd0hvdXJzOiBpbnRlZ2VyKCdpbmNpZGVudF93aW5kb3dfaG91cnMnKSxcbiAgLy8gUmV0ZW50aW9uIG92ZXJyaWRlcyAoZGF5cykuIE5VTEwg4oeSIHVzZSB0aGUgZ2xvYmFsIGVudiBkZWZhdWx0XG4gIC8vIChSRVBPUlRJTkdfRVZFTlRfUkVURU5USU9OX0RBWVMgLyBSRVBPUlRJTkdfRE9SQV9SRVRFTlRJT05fREFZUykuXG4gIGV2ZW50UmV0ZW50aW9uRGF5czogaW50ZWdlcignZXZlbnRfcmV0ZW50aW9uX2RheXMnKSxcbiAgZG9yYVJldGVudGlvbkRheXM6IGludGVnZXIoJ2RvcmFfcmV0ZW50aW9uX2RheXMnKSxcbiAgLyoqXG4gICAqIFN0YWtlaG9sZGVyLXJlcG9ydCBQT0xJQ1kg4oCUIGFkbWluLW93bmVkLCBkZWxpYmVyYXRlbHkgTk9UIG9uXG4gICAqIGByZXBvcnRfZGVmaW5pdGlvbnNgLiBBIGxlYWQgY29tcG9zZXMgdGhlIHJlcG9ydDsgd2hvIG1heSByZWNlaXZlIGl0IGlzIHRoZVxuICAgKiBvcmcncyBjYWxsLCBzbyBhIGxlYWQgY2Fubm90IHdpZGVuIHRoZWlyIG93biByZXBvcnQncyBhdWRpZW5jZS5cbiAgICpcbiAgICogU2hhcmluZyBzdGFydHMgT0ZGOiBtaW50aW5nIGEgcHVibGljIGxpbmsgdHVybnMgaW50ZXJuYWwgZGVsaXZlcnkgbnVtYmVyc1xuICAgKiBpbnRvIGEgVVJMIGFueW9uZSBob2xkaW5nIGl0IGNhbiByZWFkLCB3aGljaCBpcyBhIGRlY2lzaW9uIGFuIGFkbWluIG1ha2VzXG4gICAqIG9uY2UgZm9yIHRoZSBvcmcsIG5vdCBhIGNoZWNrYm94IG9uIGV2ZXJ5IHJlcG9ydC5cbiAgICovXG4gIHJlcG9ydEV4dGVybmFsU2hhcmluZzogYm9vbGVhbigncmVwb3J0X2V4dGVybmFsX3NoYXJpbmcnKS5kZWZhdWx0KGZhbHNlKS5ub3ROdWxsKCksXG4gIC8qKiBBbGxvd2VkIHJlY2lwaWVudCBkb21haW5zLiBOVUxMIOKHkiBvcmcgbWVtYmVycyBvbmx5LCBubyBleHRlcm5hbCBhZGRyZXNzZXMuICovXG4gIHJlcG9ydFJlY2lwaWVudERvbWFpbnM6IGpzb25iKCdyZXBvcnRfcmVjaXBpZW50X2RvbWFpbnMnKS4kdHlwZTxzdHJpbmdbXT4oKSxcbiAgLyoqIEFuIGV4dGVybmFsIGFkZHJlc3MgbmVlZHMgYW4gYWRtaW4ncyBhcHByb3ZhbCBiZWZvcmUgYW55dGhpbmcgaXMgZGVsaXZlcmVkLiAqL1xuICByZXBvcnRSZXF1aXJlQXBwcm92YWw6IGJvb2xlYW4oJ3JlcG9ydF9yZXF1aXJlX2FwcHJvdmFsJykuZGVmYXVsdCh0cnVlKS5ub3ROdWxsKCksXG4gIC8vIGByZXBvcnRfc25hcHNob3RfcmV0ZW50aW9uX2RheXNgIHdhcyBERUxFVEVEIGhlcmUuIEl0IHByb21pc2VkIGEgcGVyLW9yZyBvdmVycmlkZSBmb3JcbiAgLy8gaG93IGxvbmcgYSBwdWJsaXNoZWQgcmVwb3J0J3Mgc25hcHNob3QgaXMga2VwdCwgYW5kIGl0IHdhcyBVTlJFQUNIQUJMRSBpbiBib3RoXG4gIC8vIGRpcmVjdGlvbnM6IG5vIHJvdXRlIGV2ZXIgd3JvdGUgaXQgYW5kIG5vIHN3ZWVwIGV2ZXIgcmVhZCBpdCwgc28gYW4gYWRtaW4gY291bGQgbm90XG4gIC8vIHNldCBpdCBhbmQgaXQgd291bGQgbm90IGhhdmUgbWF0dGVyZWQgaWYgdGhleSBoYWQuIFNuYXBzaG90IGxpZmV0aW1lIGNvbWVzIGZyb20gdGhlXG4gIC8vIHJ1bidzIG93biBgcHVyZ2VfYWZ0ZXJgIChyZXBvcnRpbmctcmV0ZW50aW9uLnRzKSwgYW5kIHRoZSBwZXItb3JnIGRpbWVuc2lvbiBpcyB0aGVcbiAgLy8gVElFUiBwbHVzIHRoZSByZXRlbnRpb24gLyBET1JBLWhpc3RvcnkgcGFja3MuXG4gIC8qKlxuICAgKiBPcHRpb25hbCwgT0ZGIGJ5IGRlZmF1bHQ6IG1pbnV0ZXMgdGhlIG9yZyByZWNrb25zIGl0IHNhdmVzIHBlciBwaXBlbGluZVxuICAgKiBjcmVhdGVkLCBmb3IgdGhlIGFkb3B0aW9uIHNlY3Rpb24uIE9mZiBieSBkZWZhdWx0IGJlY2F1c2UgYVxuICAgKiBwbGF0Zm9ybS1zdXBwbGllZCBudW1iZXIgaGVyZSB3b3VsZCBiZSB0aGUgcGxhdGZvcm0gbWFya2luZyBpdHMgb3duIGhvbWV3b3JrO1xuICAgKiBpdCBvbmx5IG1lYW5zIGFueXRoaW5nIHdoZW4gdGhlIGN1c3RvbWVyIGNob3NlIGl0LlxuICAgKi9cbiAgdGltZVNhdmVkTWludXRlc1BlclBpcGVsaW5lOiBpbnRlZ2VyKCd0aW1lX3NhdmVkX21pbnV0ZXNfcGVyX3BpcGVsaW5lJyksXG4gIC8qKlxuICAgKiBUaGUgb3JnJ3MgbmVlZHMtYXR0ZW50aW9uIHRocmVzaG9sZHMsIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRzIFBFUiBGSUVMRC5cbiAgICpcbiAgICogT25lIGpzb25iIHJhdGhlciB0aGFuIGZpdmUgY29sdW1uczogdGhlIHNldCBpcyBjbG9zZWQgYW5kIHNtYWxsLCBpdCBpcyByZWFkIGFzIGFcbiAgICogdW5pdCBieSBleGFjdGx5IG9uZSBldmFsdWF0b3IsIGFuZCBhbiBvcmcgdGhhdCBzZXRzIG9uZSB0aHJlc2hvbGQgbXVzdCBrZWVwIHRoZVxuICAgKiBkZWZhdWx0cyBmb3IgdGhlIG90aGVyIGZvdXIg4oCUIHdoaWNoIGEgcGFydGlhbCBvYmplY3QgZXhwcmVzc2VzIGRpcmVjdGx5IGFuZCBmaXZlXG4gICAqIG51bGxhYmxlIGNvbHVtbnMgd291bGQgb25seSBpbXBseS5cbiAgICpcbiAgICogQ29uZmlndXJhYmxlIGF0IGFsbCBiZWNhdXNlIDkwJSBzdWNjZXNzIGlzIGEgY3Jpc2lzIGZvciBhIGRlcGxveSBwaXBlbGluZSBhbmRcbiAgICogdW5yZW1hcmthYmxlIGZvciBhIGZsYWt5IGludGVncmF0aW9uIHN1aXRlIHNvbWVib2R5IGlzIGFscmVhZHkgcmV3cml0aW5nOyBhXG4gICAqIHBsYXRmb3JtLWltcG9zZWQgbnVtYmVyIHdvdWxkIGJlIHdyb25nIGZvciBvbmUgb2YgdGhlbSBieSBjb25zdHJ1Y3Rpb24uXG4gICAqL1xuICByZXBvcnRBdHRlbnRpb25UaHJlc2hvbGRzOiBqc29uYigncmVwb3J0X2F0dGVudGlvbl90aHJlc2hvbGRzJykuJHR5cGU8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKSxcbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBvcmcgc3BlbnQgaXRzIE9ORSBmcmVlIHdhdGVybWFya2VkIHJlcG9ydCBwcmV2aWV3LlxuICAgKlxuICAgKiBPbmNlLCBldmVyLCBhbmQgbmV2ZXIgcmVzZXQg4oCUIG5vdCBwZXIgbW9udGgsIG5vdCBwZXIgdXNlci4gVGhlIHByZXZpZXcgZXhpc3RzIHNvIGFcbiAgICogbGVhZCBjYW4gc2VlIHRoZWlyIG93biBudW1iZXJzIGluIHRoZSBmb3JtYXQgYmVmb3JlIGFza2luZyBhbnlvbmUgdG8gcGF5IGZvciBpdCxcbiAgICogd2hpY2ggdGFrZXMgZXhhY3RseSBvbmUgcmVwb3J0OyBhIHJlbmV3YWJsZSBwcmV2aWV3IGlzIGp1c3QgdGhlIHByb2R1Y3QgZm9yIGZyZWUuXG4gICAqIFN0b3JlZCBhcyB0aGUgSU5TVEFOVCByYXRoZXIgdGhhbiBhIGJvb2xlYW4gc28gc3VwcG9ydCBjYW4gYW5zd2VyIFwid2hlbiBkaWQgdGhleVxuICAgKiB0cnkgaXRcIiB3aXRob3V0IGEgc2VwYXJhdGUgYXVkaXQgbG9va3VwLlxuICAgKi9cbiAgcmVwb3J0UHJldmlld1VzZWRBdDogdGltZXN0YW1wKCdyZXBvcnRfcHJldmlld191c2VkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIC8qKlxuICAgKiBUaGUgYG9jY3VycmVkQXRgIG9mIHRoZSBsYXN0IEFQUExJRUQgU3Rha2Vob2xkZXIgUmVwb3J0cyBlbnRpdGxlbWVudCBwdXNoLlxuICAgKlxuICAgKiBBIHdhdGVybWFyaywgc28gYW4gb3V0LW9mLW9yZGVyIHB1c2ggY2Fubm90IHJlc3VtZSBhbiBhY2NvdW50IHdob3NlIGFkZC1vbiBsYXBzZWQ6XG4gICAqIGJpbGxpbmcncyBsZWdzIGFyZSBiZXN0LWVmZm9ydCBhbmQgcmV0cmllZCwgc28gXCJsYXBzZWQgYXQgMTA6MDBcIiBhbmQgXCJyZW5ld2VkIGF0XG4gICAqIDEwOjA1XCIgY2FuIGFycml2ZSBpbiBlaXRoZXIgb3JkZXIsIGFuZCBhcHBseWluZyB0aGUgb2xkZXIgb25lIGxhc3Qgd291bGQgbGVhdmUgYVxuICAgKiBsYXBzZWQgYWNjb3VudCBwcm9kdWNpbmcgcmVwb3J0cyAob3IgYSBwYXlpbmcgb25lIHBhdXNlZCkuXG4gICAqL1xuICByZXBvcnRFbnRpdGxlbWVudFN5bmNlZEF0OiB0aW1lc3RhbXAoJ3JlcG9ydF9lbnRpdGxlbWVudF9zeW5jZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgLyoqXG4gICAqIFRoZSBvcmcncyBERUZBVUxUIHJlcG9ydCB0aW1lem9uZSBhbmQgd2VlayBzdGFydCwgd2hpY2ggYSBuZXcgcmVwb3J0IGlzIGNyZWF0ZWQgd2l0aC5cbiAgICpcbiAgICogT24gdGhlIHJlcG9ydCBwb2xpY3kgcmF0aGVyIHRoYW4gb24gdGhlIHBsYXRmb3JtIG9yZywgYmVjYXVzZSBwbGF0Zm9ybSdzIG9yZ2FuaXphdGlvblxuICAgKiBoYXMgbm8gdGltZXpvbmUgY29uY2VwdCB0byBleHRlbmQgYW5kIGludmVudGluZyBvbmUgdGhlcmUgd291bGQgZ2l2ZSB0aGUgc2FtZSBzZXR0aW5nXG4gICAqIHR3byBvd25lcnMuIEFuIGFkbWluIHNldHMgaXQgb25jZSAoYG9yZzpzZXR0aW5nc2AsIHRoZSBzYW1lIGdhdGUgYXMgdGhlIHJlc3Qgb2YgdGhlXG4gICAqIHBvbGljeSkgYW5kIGV2ZXJ5IGxlYWQncyBuZXcgcmVwb3J0IHN0YXJ0cyBjb3JyZWN0IGluc3RlYWQgb2Ygc3RhcnRpbmcgaW4gVVRDIGFuZFxuICAgKiBiZWluZyBub3RpY2VkIGEgd2VlayBsYXRlciwgd2hlbiBhIE1vbmRheSByZXBvcnQgaGFzIHB1dCBTdW5kYXkgZXZlbmluZydzIGRlcGxveXMgaW5cbiAgICogdGhlIHdyb25nIHdlZWsuXG4gICAqXG4gICAqIE5VTEwg4oeSIHRoZSBkZXBsb3ltZW50IGRlZmF1bHQuIFBlci1yZXBvcnQgdmFsdWVzIGFsd2F5cyB3aW46IGEgZGlzdHJpYnV0ZWQgdGVhbSBjYW5cbiAgICogaGF2ZSBvbmUgcmVwb3J0IGN1dCBpbiBDaGljYWdvIGFuZCBhbm90aGVyIGluIEJlcmxpbi5cbiAgICovXG4gIHJlcG9ydERlZmF1bHRUaW1lem9uZTogdmFyY2hhcigncmVwb3J0X2RlZmF1bHRfdGltZXpvbmUnLCB7IGxlbmd0aDogNjQgfSksXG4gIHJlcG9ydERlZmF1bHRXZWVrU3RhcnQ6IHZhcmNoYXIoJ3JlcG9ydF9kZWZhdWx0X3dlZWtfc3RhcnQnLCB7IGxlbmd0aDogMTAgfSksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0pO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgdHlwZXMgcmVwcmVzZW50aW5nIGRhdGFiYXNlIHJvd3NcbiAqL1xuZXhwb3J0IHR5cGUgUGlwZWxpbmUgPSB0eXBlb2YgcGlwZWxpbmUuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVJbnNlcnQgPSB0eXBlb2YgcGlwZWxpbmUuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBQaXBlbGluZVJlZ2lzdHJ5ID0gdHlwZW9mIHBpcGVsaW5lUmVnaXN0cnkuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVSZWdpc3RyeUluc2VydCA9IHR5cGVvZiBwaXBlbGluZVJlZ2lzdHJ5LiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgUGlwZWxpbmVFdmVudCA9IHR5cGVvZiBwaXBlbGluZUV2ZW50LiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIFBpcGVsaW5lRXZlbnRJbnNlcnQgPSB0eXBlb2YgcGlwZWxpbmVFdmVudC4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIERlcGxveW1lbnRPdXRjb21lID0gdHlwZW9mIGRlcGxveW1lbnRPdXRjb21lLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIERlcGxveW1lbnRPdXRjb21lSW5zZXJ0ID0gdHlwZW9mIGRlcGxveW1lbnRPdXRjb21lLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgSW5nZXN0SGVhbHRoID0gdHlwZW9mIGluZ2VzdEhlYWx0aC4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBJbmdlc3RIZWFsdGhJbnNlcnQgPSB0eXBlb2YgaW5nZXN0SGVhbHRoLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgSW5jaWRlbnQgPSB0eXBlb2YgaW5jaWRlbnQuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgSW5jaWRlbnRJbnNlcnQgPSB0eXBlb2YgaW5jaWRlbnQuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBEb3JhU2V0dGluZ3MgPSB0eXBlb2YgZG9yYVNldHRpbmdzLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIERvcmFTZXR0aW5nc0luc2VydCA9IHR5cGVvZiBkb3JhU2V0dGluZ3MuJGluZmVySW5zZXJ0O1xuXG4vKipcbiAqIEhlbHBlciB0eXBlcyBmb3Igd29ya2luZyB3aXRoIHBhcnRpYWwgdXBkYXRlc1xuICovXG5leHBvcnQgdHlwZSBQaXBlbGluZVVwZGF0ZSA9IFBhcnRpYWw8T21pdDxQaXBlbGluZUluc2VydCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ2NyZWF0ZWRCeSc+PjtcbiJdfQ==
|
|
470
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2Uvc2NoZW1hL3BpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUNMLGFBQWEsR0FFZCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQTJCbkk7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFO0lBQzNDLGNBQWM7SUFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUUzQyxrQ0FBa0M7SUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFFWixlQUFlO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9B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QUMsaUNBQWlDLENBQUM7SUFDdkU7Ozs7Ozs7Ozs7O09BV0c7SUFDSCx5QkFBeUIsRUFBRSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxLQUFLLEVBQTBCO0lBQy9GOzs7Ozs7OztPQVFHO0lBQ0gsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2hGOzs7Ozs7O09BT0c7SUFDSCx5QkFBeUIsRUFBRSxTQUFTLENBQUMsOEJBQThCLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDNUY7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gscUJBQXFCLEVBQUUsT0FBTyxDQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3pFLHNCQUFzQixFQUFFLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUM1RSxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRTtDQUNsRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHtcbiAgU1lTVEVNX09SR19JRCwgdHlwZSBDcml0aWNhbGl0eSwgdHlwZSBFbnRpdHlMYWJlbHMsIHR5cGUgRW50aXR5TGluaywgdHlwZSBMaWZlY3ljbGUsIHR5cGUgTWV0YURhdGFUeXBlLFxuICB0eXBlIE93bmVyVHlwZSwgdHlwZSBWaXNpYmlsaXR5LFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBiaWdpbnQsIGJvb2xlYW4sIGludGVnZXIsIHZhcmNoYXIsIHBnVGFibGUsIHRleHQsIHRpbWVzdGFtcCwgdXVpZCwganNvbmIsIGluZGV4LCB1bmlxdWVJbmRleCB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQaXBlbGluZUNyZWF0aW9uU291cmNlIH0gZnJvbSAnLi9yZXBvcnRpbmctYW5hbHl0aWNzLmpzJztcblxuLyoqXG4gKiBQaXBlbGluZSBidWlsZGVyIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBzdG9yZWQgaW4gZGF0YWJhc2UuXG4gKiBNaXJyb3JzIHRoZSBjYW5vbmljYWwgQnVpbGRlclByb3BzIGZyb20gcGlwZWxpbmUtY29yZSAoSlNPTi1zZXJpYWxpemFibGUgZm9ybSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVCdWlsZGVyQ29uZmlnIHtcbiAgcmVhZG9ubHkgcHJvamVjdDogc3RyaW5nO1xuICByZWFkb25seSBvcmdhbml6YXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBnbG9iYWw/OiBNZXRhRGF0YVR5cGU7XG4gIHJlYWRvbmx5IHN5bnRoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgZGVmYXVsdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgcm9sZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSBzdGFnZXM/OiBQaXBlbGluZVN0YWdlQ29uZmlnW107XG59XG5cbi8qKlxuICogU3RhZ2UgY29uZmlndXJhdGlvbiBzdG9yZWQgaW4gZGF0YWJhc2UgKEpTT04tc2VyaWFsaXphYmxlKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWdlQ29uZmlnIHtcbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuICByZWFkb25seSBzdGVwczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuLyoqXG4gKiBUYWJsZSBmb3Igc3RvcmluZyBwaXBlbGluZSBpbnN0YW5jZXMgYW5kIHRoZWlyIGZ1bGwgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBGZWF0dXJlcyAqIC0gRnVsbCBCdWlsZGVyUHJvcHMgc2VyaWFsaXphdGlvbiBmb3IgcmVjb25zdHJ1Y3Rpb25cbiAqIC0gT3JnYW5pemF0aW9uLWxldmVsIGlzb2xhdGlvblxuICogLSBQaXBlbGluZSBzdGF0dXMgdHJhY2tpbmdcbiAqIC0gRXhlY3V0aW9uIGhpc3RvcnkgdHJhY2tpbmdcbiAqIC0gRmxleGlibGUgdGFnZ2luZyBzeXN0ZW1cbiAqXG4gKiBAdGFibGUgcGlwZWxpbmVzXG4gKi9cbmV4cG9ydCBjb25zdCBwaXBlbGluZSA9IHBnVGFibGUoJ3BpcGVsaW5lcycsIHtcbiAgLy8gUHJpbWFyeSBrZXlcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcblxuICAvLyBPcmdhbml6YXRpb24gYW5kIGFjY2VzcyBjb250cm9sXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIEF1ZGl0IGZpZWxkc1xuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQnk6IHRleHQoJ3VwZGF0ZWRfYnknKVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIENvcmUgcGlwZWxpbmUgaW5mb3JtYXRpb25cbiAgcHJvamVjdDogdmFyY2hhcigncHJvamVjdCcsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAubm90TnVsbCgpLFxuICBvcmdhbml6YXRpb246IHZhcmNoYXIoJ29yZ2FuaXphdGlvbicsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAubm90TnVsbCgpLFxuICBwaXBlbGluZU5hbWU6IHZhcmNoYXIoJ3BpcGVsaW5lX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBkZXNjcmlwdGlvbjogdGV4dCgnZGVzY3JpcHRpb24nKSxcbiAga2V5d29yZHM6IGpzb25iKCdrZXl3b3JkcycpXG4gICAgLiR0eXBlPHN0cmluZ1tdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBQaXBlbGluZSBjb25maWd1cmF0aW9uXG4gIHByb3BzOiBqc29uYigncHJvcHMnKVxuICAgIC4kdHlwZTxQaXBlbGluZUJ1aWxkZXJDb25maWc+KClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8qKlxuICAgKiBIb3cgdGhpcyBwaXBlbGluZSBjYW1lIHRvIGV4aXN0IOKAlCBzZXQgYnkgd2hpY2hldmVyIGNyZWF0ZSBwYXRoIG1hZGUgaXRcbiAgICogKGBtYW51YWxgLCBgdGVtcGxhdGVgLCBgYWlgLCBgYnVsa2AsIGBjZGtgKS4gU3RhbXBlZCBhdCBjcmVhdGlvbiByYXRoZXIgdGhhblxuICAgKiBpbmZlcnJlZCBsYXRlciwgYmVjYXVzZSBub3RoaW5nIGluIGEgc3RvcmVkIGNvbmZpZyBzYXlzIGhvdyBpdCB3YXMgYXV0aG9yZWQsXG4gICAqIGFuZCB0aGUgYWRvcHRpb24gc2VjdGlvbidzIHdob2xlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGdvbGRlbiBwYXRocyBhcmVcbiAgICogYmVpbmcgdXNlZDogYW4gb3JnIHdob3NlIHBpcGVsaW5lcyBhcmUgYWxsIGhhbmQtYnVpbHQgaGFzIGEgZGlmZmVyZW50IHN0b3J5XG4gICAqIGZyb20gb25lIHRlbXBsYXRpbmcgdGhlbS5cbiAgICovXG4gIGNyZWF0aW9uU291cmNlOiB2YXJjaGFyKCdjcmVhdGlvbl9zb3VyY2UnLCB7IGxlbmd0aDogMjAgfSlcbiAgICAuJHR5cGU8UGlwZWxpbmVDcmVhdGlvblNvdXJjZT4oKSxcblxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgbWV0YWRhdGEgKG93bmVyc2hpcCAvIGxpZmVjeWNsZSAvIGNsYXNzaWZpY2F0aW9uKS5cbiAgLy8gb3duZXJJZCBkZWZhdWx0cyB0byB0aGUgY3JlYXRpbmcgdXNlciAoc2V0IGF0IGluc2VydCksIHNvIGV2ZXJ5IHBpcGVsaW5lIGhhc1xuICAvLyBhbiBvd25lciBmb3IgXCJteSBzZXJ2aWNlc1wiIHZpZXdzOyBvd25lclR5cGUgZGlzdGluZ3Vpc2hlcyB1c2VyIHZzIHRlYW0uXG4gIG93bmVySWQ6IHRleHQoJ293bmVyX2lkJyksXG4gIG93bmVyVHlwZTogdmFyY2hhcignb3duZXJfdHlwZScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxPd25lclR5cGU+KCksXG4gIGxpZmVjeWNsZTogdmFyY2hhcignbGlmZWN5Y2xlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPExpZmVjeWNsZT4oKVxuICAgIC5kZWZhdWx0KCdwcm9kdWN0aW9uJyBhcyBMaWZlY3ljbGUpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JpdGljYWxpdHk6IHZhcmNoYXIoJ2NyaXRpY2FsaXR5JywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPENyaXRpY2FsaXR5PigpLFxuICBsYWJlbHM6IGpzb25iKCdsYWJlbHMnKVxuICAgIC4kdHlwZTxFbnRpdHlMYWJlbHM+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBsaW5rczoganNvbmIoJ2xpbmtzJylcbiAgICAuJHR5cGU8RW50aXR5TGlua1tdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBY2Nlc3MgYW5kIHZpc2liaWxpdHkg4oCUIHRoZSBzaGFyZWQgdGhyZWUtcnVuZyBsYWRkZXIgKHNlZSBhcGktY29yZSdzXG4gIC8vIGBWaXNpYmlsaXR5YCk6IGBwcml2YXRlYCBpcyBhdXRob3Itb25seSAoYGNyZWF0ZWRfYnlgKSwgYG9yZ2AgaXMgdGhlIHdob2xlXG4gIC8vIG93bmluZyBvcmcsIGBwdWJsaWNgIHJlYWNoZXMgdGhlIG9yZydzIHRlYW1zIGFuZCDigJQgZnJvbSB0aGUgc3lzdGVtIG9yZyDigJRcbiAgLy8gZXZlcnkgb3JnLiBDb25zdHJhaW5lZCBhdCB0aGUgU1FMIGxheWVyIHRvbyB2aWEgYSBDSEVDSyBpbiBwb3N0Z3Jlcy1pbml0LnNxbFxuICAvLyBzbyBhIHR5cG8gY2FuJ3Qgc25lYWsgcGFzdCB0aGUgYXBwbGljYXRpb24gbGF5ZXIuXG4gIHZpc2liaWxpdHk6IHZhcmNoYXIoJ3Zpc2liaWxpdHknLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8VmlzaWJpbGl0eT4oKVxuICAgIC5kZWZhdWx0KCdwcml2YXRlJylcbiAgICAubm90TnVsbCgpLFxuICBpc0RlZmF1bHQ6IGJvb2xlYW4oJ2lzX2RlZmF1bHQnKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKVxuICAgIC5kZWZhdWx0KHRydWUpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZWxldGlvbiB0cmFja2luZyAoc29mdCBkZWxldGUpXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXBcbiAgLy8gKGBXSEVSRSBkZWxldGVkX2F0IElTIE5PVCBOVUxMIEFORCBwdXJnZV9hZnRlciA8IG5vd2ApIHdpdGhvdXQgc2Nhbm5pbmcgbGl2ZSByb3dzLlxuICBwdXJnZUlkeDogaW5kZXgoJ3BpcGVsaW5lX3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIC8vIE1pcnJvcnMgdGhlIGluZGV4ZXMgcG9zdGdyZXMtaW5pdC5zcWwgY3JlYXRlcywgbmFtZSBmb3IgbmFtZSAodGhlIFNRTCBmaWxlIGlzXG4gIC8vIHdoYXQgZGVwbG95czsgc2NoZW1hLXJlZmxlY3Rpb24udGVzdC50cyBrZWVwcyB0aGUgdHdvIGluIGxvY2stc3RlcCkuXG4gIG9yZ0lkSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19vcmdfaWQnKS5vbih0YWJsZS5vcmdJZCkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBwcm9qZWN0SWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19wcm9qZWN0Jykub24odGFibGUucHJvamVjdCkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBvcmdhbml6YXRpb25JZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX29yZ2FuaXphdGlvbicpLm9uKHRhYmxlLm9yZ2FuaXphdGlvbikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBwcm9qZWN0T3JnSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19wcm9qZWN0X29yZycpLm9uKHRhYmxlLnByb2plY3QsIHRhYmxlLm9yZ2FuaXphdGlvbikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICB2aXNpYmlsaXR5SWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc192aXNpYmlsaXR5Jykub24odGFibGUudmlzaWJpbGl0eSkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBpc0RlZmF1bHRJZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX2lzX2RlZmF1bHQnKVxuICAgIC5vbih0YWJsZS5wcm9qZWN0LCB0YWJsZS5vcmdhbml6YXRpb24sIHRhYmxlLmlzRGVmYXVsdCkud2hlcmUoc3FsYGlzX2RlZmF1bHQgPSB0cnVlIEFORCBkZWxldGVkX2F0IElTIE5VTExgKSxcbiAgYWN0aXZlSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19pc19hY3RpdmUnKS5vbih0YWJsZS5pc0FjdGl2ZSkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBvcmdDcmVhdGVkSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19vcmdfY3JlYXRlZCcpLm9uKHRhYmxlLm9yZ0lkLCBzcWxgJHt0YWJsZS5jcmVhdGVkQXR9IERFU0NgKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG5cbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIGluZGV4ZXM6IFwibXkgc2VydmljZXNcIiAob3duZXIpICsgbGlmZWN5Y2xlIGZpbHRlci5cbiAgb3duZXJJZHg6IGluZGV4KCdwaXBlbGluZV9vd25lcl9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUub3duZXJJZCksXG4gIGxpZmVjeWNsZUlkeDogaW5kZXgoJ3BpcGVsaW5lX2xpZmVjeWNsZV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUubGlmZWN5Y2xlKSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIGZpbHRlcmVkIHF1ZXJpZXMgKG9yZ0lkICsgdmlzaWJpbGl0eSArIGlzQWN0aXZlKVxuICBvcmdWaXNpYmlsaXR5QWN0aXZlSWR4OiBpbmRleCgncGlwZWxpbmVfb3JnX3Zpc2liaWxpdHlfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS52aXNpYmlsaXR5LCB0YWJsZS5pc0FjdGl2ZSksXG4gIC8vIERyaXZlcyB0aGUgXCJteSBwcml2YXRlIGRyYWZ0c1wiIGxlZyBvZiB0aGUgdmlzaWJpbGl0eSBwcmVkaWNhdGUuXG4gIGNyZWF0ZWRCeUlkeDogaW5kZXgoJ3BpcGVsaW5lX2NyZWF0ZWRfYnlfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmNyZWF0ZWRCeSksXG5cbiAgLy8gVW5pcXVlIGNvbnN0cmFpbnQgb24gcHJvamVjdCArIG9yZ2FuaXphdGlvbiArIG9yZ0lkXG4gIHByb2plY3RPcmdVbmlxdWU6IHVuaXF1ZUluZGV4KCdwaXBlbGluZV9wcm9qZWN0X29yZ191bmlxdWUnKVxuICAgIC5vbih0YWJsZS5wcm9qZWN0LCB0YWJsZS5vcmdhbml6YXRpb24sIHRhYmxlLm9yZ0lkKSxcbn0pKTtcblxuLyoqXG4gKiBQaXBlbGluZSBkZXBsb3ltZW50IHJlZ2lzdHJ5LlxuICogTWFwcyBkZXBsb3llZCBDb2RlUGlwZWxpbmUgQVJOcyBiYWNrIHRvIHBpcGVsaW5lIHJlY29yZHMgYW5kIG9yZyBJRHMuXG4gKiBQb3B1bGF0ZWQgYnkgdGhlIGRlcGxveSBjb21tYW5kIGFmdGVyIHN1Y2Nlc3NmdWwgQ0RLIGRlcGxveS5cbiAqIFVzZWQgYnkgdGhlIHBpcGVsaW5lLWV2ZW50cyBMYW1iZGEgdG8gcmVzb2x2ZSBFdmVudEJyaWRnZSBldmVudHMgdG8gb3JnLXNjb3BlZCByZWNvcmRzLlxuICpcbiAqIEB0YWJsZSBwaXBlbGluZV9yZWdpc3RyeVxuICovXG5leHBvcnQgY29uc3QgcGlwZWxpbmVSZWdpc3RyeSA9IHBnVGFibGUoJ3BpcGVsaW5lX3JlZ2lzdHJ5Jywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICAvLyBUaGUgcGxhdGZvcm0ncyBwaXBlbGluZSByZWNvcmQgaWQg4oCUIGEgU1RBQkxFIHV1aWQgY3JlYXRlZCB3aXRoIHRoZSBwaXBlbGluZVxuICAvLyByZWNvcmQsIGtub3duIGF0IENESyBzeW50aCwgYW5kIGFwcGxpZWQgdG8gdGhlIGxpdmUgQ29kZVBpcGVsaW5lIGFzIHRoZVxuICAvLyBgcGIucGlwZWxpbmUtaWRgIHRhZy4gVGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgdGhhdCB0YWcgYW5kIHJlcG9ydHNcbiAgLy8gYWdhaW5zdCB0aGlzIGlkLCBzbyBpdCBJUyB0aGUgZXZlbnQgam9pbiBrZXkgKHJlcGxhY2luZyB0aGUgbWFza2VkIEFSTiDigJRcbiAgLy8gaXQgY2FycmllcyBubyBBV1MgYWNjb3VudC9yZWdpb24sIHNvIG5vIG1hc2tpbmcgaXMgbmVlZGVkKS4gVW5pcXVlOiBvbmVcbiAgLy8gcmVnaXN0cnkgcm93IHBlciBwaXBlbGluZSArIHRoZSB1cHNlcnQga2V5IGZvciAocmUpcmVnaXN0cmF0aW9uLlxuICBwaXBlbGluZUlkOiB1dWlkKCdwaXBlbGluZV9pZCcpLm5vdE51bGwoKS51bmlxdWUoKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBwaXBlbGluZU5hbWU6IHZhcmNoYXIoJ3BpcGVsaW5lX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgcmVnaW9uOiB2YXJjaGFyKCdyZWdpb24nLCB7IGxlbmd0aDogMzAgfSksXG4gIHByb2plY3Q6IHZhcmNoYXIoJ3Byb2plY3QnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBvcmdhbml6YXRpb246IHZhcmNoYXIoJ29yZ2FuaXphdGlvbicsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGxhc3REZXBsb3llZDogdGltZXN0YW1wKCdsYXN0X2RlcGxveWVkJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHN0YWNrTmFtZTogdmFyY2hhcignc3RhY2tfbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdJZElkeDogaW5kZXgoJ3JlZ2lzdHJ5X29yZ19pZF9pZHgnKS5vbih0YWJsZS5vcmdJZCksXG4gIG9yZ1JlZ2lvbklkeDogaW5kZXgoJ3JlZ2lzdHJ5X29yZ19yZWdpb25faWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnJlZ2lvbiksXG4gIC8vIE9uZSByZWdpc3RyeSByb3cgcGVyIHBpcGVsaW5lICh0aGUgcmVnaXN0cmF0aW9uIHVwc2VydCdzIGNvbmZsaWN0IHRhcmdldCkuXG4gIHBpcGVsaW5lSWRVbmlxdWU6IHVuaXF1ZUluZGV4KCdyZWdpc3RyeV9waXBlbGluZV9pZF9pZHgnKS5vbih0YWJsZS5waXBlbGluZUlkKSxcbn0pKTtcblxuLyoqXG4gKiBFdmVudCBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBpcGVsaW5lX2V2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgRXZlbnRTb3VyY2UgPSAnY29kZXBpcGVsaW5lJyB8ICdjb2RlYnVpbGQnIHwgJ3BsdWdpbi1idWlsZCc7XG5cbi8qKlxuICogRXZlbnQgdHlwZSBncmFudWxhcml0eSBsZXZlbHMgZm9yIHBpcGVsaW5lX2V2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgRXZlbnRUeXBlID0gJ1BJUEVMSU5FJyB8ICdTVEFHRScgfCAnQUNUSU9OJyB8ICdCVUlMRCc7XG5cbi8qKlxuICogUGlwZWxpbmUgZXhlY3V0aW9uIGFuZCBidWlsZCBldmVudHMuXG4gKiBDYXB0dXJlcyBDb2RlUGlwZWxpbmUvQ29kZUJ1aWxkIHN0YXRlIGNoYW5nZXMgZnJvbSBFdmVudEJyaWRnZVxuICogYW5kIHBsdWdpbiBEb2NrZXIgYnVpbGQgb3V0Y29tZXMgZnJvbSBCdWxsTVEuXG4gKiBBbGwgZXZlbnRzIGFyZSBvcmctc2NvcGVkIGZvciBtdWx0aS10ZW5hbnQgcmVwb3J0aW5nLlxuICpcbiAqIEB0YWJsZSBwaXBlbGluZV9ldmVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IHBpcGVsaW5lRXZlbnQgPSBwZ1RhYmxlKCdwaXBlbGluZV9ldmVudHMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIHBpcGVsaW5lSWQ6IHV1aWQoJ3BpcGVsaW5lX2lkJyksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgZXZlbnRTb3VyY2U6IHZhcmNoYXIoJ2V2ZW50X3NvdXJjZScsIHsgbGVuZ3RoOiA1MCB9KS4kdHlwZTxFdmVudFNvdXJjZT4oKS5ub3ROdWxsKCksXG4gIGV2ZW50VHlwZTogdmFyY2hhcignZXZlbnRfdHlwZScsIHsgbGVuZ3RoOiA1MCB9KS4kdHlwZTxFdmVudFR5cGU+KCkubm90TnVsbCgpLFxuICBzdGF0dXM6IHZhcmNoYXIoJ3N0YXR1cycsIHsgbGVuZ3RoOiAyMCB9KS5ub3ROdWxsKCksXG4gIGV4ZWN1dGlvbklkOiB2YXJjaGFyKCdleGVjdXRpb25faWQnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBzdGFnZU5hbWU6IHZhcmNoYXIoJ3N0YWdlX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBhY3Rpb25OYW1lOiB2YXJjaGFyKCdhY3Rpb25fbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGVycm9yTWVzc2FnZTogdGV4dCgnZXJyb3JfbWVzc2FnZScpLFxuICBzdGFydGVkQXQ6IHRpbWVzdGFtcCgnc3RhcnRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjb21wbGV0ZWRBdDogdGltZXN0YW1wKCdjb21wbGV0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZHVyYXRpb25NczogaW50ZWdlcignZHVyYXRpb25fbXMnKSxcbiAgLy8gRE9SQSBkZXBsb3ktYXR0cmlidXRpb24gKGFsbCBudWxsYWJsZTsgcG9wdWxhdGVkIGF0IGluZ2VzdCB3aGVuIHRoZSBzb3VyY2VcbiAgLy8gZXZlbnQgY2FycmllcyB0aGVtIOKAlCBsZWdhY3kvQ0ktb25seSBldmVudHMgbGVhdmUgdGhlbSBOVUxMKS4gYGVudmlyb25tZW50YFxuICAvLyBpcyB0aGUgZGVwbG95IHRhcmdldCAoZS5nLiBcInByb2R1Y3Rpb25cIik7IGl0cyBwcmVzZW5jZSBtYXJrcyBhbiBleGVjdXRpb25cbiAgLy8gYXMgYSByZWFsIGRlcGxveW1lbnQsIGxldHRpbmcgRE9SQSBzY29wZSBwYXN0IGdlbmVyaWMgcGlwZWxpbmUgcnVucy5cbiAgLy8gYGNvbW1pdFNoYWAvYGNvbW1pdFJlZmAgY2FwdHVyZSB0aGUgc291cmNlIHJldmlzaW9uIGZvciBsZWFkLXRpbWUgd29yay5cbiAgY29tbWl0U2hhOiB2YXJjaGFyKCdjb21taXRfc2hhJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgY29tbWl0UmVmOiB2YXJjaGFyKCdjb21taXRfcmVmJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgLy8gRE9SQSB0cnVlLWxlYWQtdGltZSBhdHRyaWJ1dGlvbi4gVGhlIGZvcndhcmRlciByZXNvbHZlcyB0aGUgc291cmNlXG4gIC8vIGNvbW1pdCByYW5nZSBpbi1hY2NvdW50IGFuZCByZXBvcnRzIHRoZSBPTERFU1QgdW5zaGlwcGVkIGNvbW1pdCdzIHRpbWVzdGFtcFxuICAvLyArIGhvdyBtYW55IGNvbW1pdHMgc2hpcHBlZC4gQm90aCBudWxsYWJsZSDigJQgZXZlbnRzIHdob3NlIHNvdXJjZSB0eXBlL3Rva2VuXG4gIC8vIGNhbid0IGJlIHJlc29sdmVkIGxlYXZlIHRoZW0gTlVMTCBhbmQgbGVhZCB0aW1lIHJlcG9ydHMgYHVua25vd25gLlxuICBjb21taXRUaW1lc3RhbXA6IHRpbWVzdGFtcCgnY29tbWl0X3RpbWVzdGFtcCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjb21taXRDb3VudDogaW50ZWdlcignY29tbWl0X2NvdW50JyksXG4gIC8vIFBlci1wbHVnaW4gcnVudGltZSB0ZWxlbWV0cnk6IHRoZSBwbHVnaW4gYW4gQUNUSU9OL0JVSUxEIGV2ZW50IHJhbixcbiAgLy8gam9pbmVkIGF0IGluZ2VzdCBmcm9tIGBwaXBlbGluZV9zdGVwX21hbmlmZXN0c2Agb24gKHBpcGVsaW5lX2lkLFxuICAvLyBzdGFnZV9uYW1lLCBhY3Rpb25fbmFtZSkuIGBwbHVnaW5QdWJsaXNoZXJgIGlzIE5VTEwgZm9yIGFuIG93bi1vcmcgcGx1Z2luO1xuICAvLyBhbGwgdGhyZWUgYXJlIE5VTEwgZm9yIG5vbi1wbHVnaW4gYWN0aW9ucyBhbmQgdW5yZWNvcmRlZCBzeW50aHMuXG4gIHBsdWdpblB1Ymxpc2hlcjogdmFyY2hhcigncGx1Z2luX3B1Ymxpc2hlcicsIHsgbGVuZ3RoOiAzOSB9KSxcbiAgLy8gVGhlIHB1Ymxpc2hlcidzIElEIChhIGhhbmRsZSBjYW4gY2hhbmdlIG9uIGEgY2xhaW0gb3IgcHJvZmlsZSBjaGFuZ2U7IHRoZVxuICAvLyBsaXN0aW5nIHN0YXRzIGpvaW4gb24gdGhpcywgbmV2ZXIgb24gdGhlIGhhbmRsZSkuIE5VTEwgbGlrZSBwbHVnaW5QdWJsaXNoZXIuXG4gIHBsdWdpblB1Ymxpc2hlcklkOiB1dWlkKCdwbHVnaW5fcHVibGlzaGVyX2lkJyksXG4gIHBsdWdpbk5hbWU6IHZhcmNoYXIoJ3BsdWdpbl9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgcGx1Z2luVmVyc2lvbjogdmFyY2hhcigncGx1Z2luX3ZlcnNpb24nLCB7IGxlbmd0aDogNTAgfSksXG4gIC8qKlxuICAgKiBXaGF0IEtJTkQgb2YgdGhpbmcgYnJva2UsIGZvciBhIGZhaWxlZCBhY3Rpb24uIEFzc2lnbmVkIGF0IGluZ2VzdCBieSB0aGVcbiAgICogZmFpbHVyZSBjbGFzc2lmaWVyLCBub3QgZGVyaXZlZCBhdCByZWFkIHRpbWU6IHRoZSBlcnJvciB0ZXh0IGlzIHNjcnViYmVkIGFuZFxuICAgKiBldmVudHVhbGx5IHN3ZXB0LCBzbyBhIGNhdGVnb3J5IGNvbXB1dGVkIGxhdGVyIHdvdWxkIGhhdmUgbm90aGluZyB0byByZWFkIOKAlFxuICAgKiBhbmQgdGhlIEFJIHN1bW1hcnkgaXMgc2hvd24gdGhlIGNhdGVnb3J5LCBuZXZlciB0aGUgcmF3IGVycm9yLlxuICAgKi9cbiAgZmFpbHVyZUNhdGVnb3J5OiB2YXJjaGFyKCdmYWlsdXJlX2NhdGVnb3J5JywgeyBsZW5ndGg6IDMwIH0pLFxuICAvKipcbiAgICogUHJvdmVuYW5jZS4gYHNvdXJjZUV2ZW50SWRgIGlzIHRoZSBFdmVudEJyaWRnZSBldmVudCBpZCB0aGUgZm9yd2FyZGVyXG4gICAqIHJlY2VpdmVkIHRoaXMgc3RhdGUgY2hhbmdlIGFzIChOVUxMIGZvciBwbHVnaW4tYnVpbGQgZXZlbnRzKSDigJQgdGhlXG4gICAqIHN0cm9uZ2VzdCBkZWR1cCBrZXkgdGhlcmUgaXMsIGFuZCB0aGUgdGhyZWFkIGFuIGF1ZGl0IHJvdyBvciBhIERPUkFcbiAgICogZGVwbG95IGZvbGxvd3MgYmFjayB0byB0aGUgZXhhY3QgQVdTIGV2ZW50LiBgaW5nZXN0S2V5SWRgIGlzIHRoZSBhY2Nlc3Mta2V5XG4gICAqIGlkIG9mIHRoZSBgcmVwb3J0aW5nOmluZ2VzdGAgY3JlZGVudGlhbCB0aGF0IHdyb3RlIHRoZSByb3c6IGEga2V5IElELCBuZXZlclxuICAgKiB0aGUgc2VjcmV0LCBzbyBhIGZvcmdlZCBvciBtaXNyb3V0ZWQgcm93IG5hbWVzIHRoZSBjcmVkZW50aWFsIGJlaGluZCBpdC5cbiAgICovXG4gIHNvdXJjZUV2ZW50SWQ6IHZhcmNoYXIoJ3NvdXJjZV9ldmVudF9pZCcsIHsgbGVuZ3RoOiAxMjggfSksXG4gIGluZ2VzdEtleUlkOiB2YXJjaGFyKCdpbmdlc3Rfa2V5X2lkJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgZGV0YWlsOiBqc29uYignZGV0YWlsJykuJHR5cGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgcGlwZWxpbmVJZElkeDogaW5kZXgoJ2V2ZW50X3BpcGVsaW5lX2lkX2lkeCcpLm9uKHRhYmxlLnBpcGVsaW5lSWQpLFxuICBvcmdJZElkeDogaW5kZXgoJ2V2ZW50X29yZ19pZF9pZHgnKS5vbih0YWJsZS5vcmdJZCksXG4gIGV2ZW50VHlwZUlkeDogaW5kZXgoJ2V2ZW50X3R5cGVfaWR4Jykub24odGFibGUuZXZlbnRUeXBlKSxcbiAgc3RhdHVzSWR4OiBpbmRleCgnZXZlbnRfc3RhdHVzX2lkeCcpLm9uKHRhYmxlLnN0YXR1cyksXG4gIGV4ZWN1dGlvbklkSWR4OiBpbmRleCgnZXZlbnRfZXhlY3V0aW9uX2lkX2lkeCcpLm9uKHRhYmxlLmV4ZWN1dGlvbklkKSxcbiAgY3JlYXRlZEF0SWR4OiBpbmRleCgnZXZlbnRfY3JlYXRlZF9hdF9pZHgnKS5vbih0YWJsZS5jcmVhdGVkQXQpLFxuICBvcmdUeXBlQ3JlYXRlZElkeDogaW5kZXgoJ2V2ZW50X29yZ190eXBlX2NyZWF0ZWRfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmV2ZW50VHlwZSwgdGFibGUuY3JlYXRlZEF0KSxcbiAgb3JnU291cmNlU3RhdHVzSWR4OiBpbmRleCgnZXZlbnRfb3JnX3NvdXJjZV9zdGF0dXNfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmV2ZW50U291cmNlLCB0YWJsZS5zdGF0dXMpLFxuICAvLyBJZGVtcG90ZW5jeTogRXZlbnRCcmlkZ2Ug4oaSIFNRUyBpcyBhdC1sZWFzdC1vbmNlLCBzbyB0aGUgc2FtZSBzdGF0ZS1jaGFuZ2VcbiAgLy8gY2FuIGJlIGRlbGl2ZXJlZCB0d2ljZS4gVGhpcyBwYXJ0aWFsIHVuaXF1ZSBpbmRleCBkZWR1cHMgcmUtZGVsaXZlcmllc1xuICAvLyAocGFpcmVkIHdpdGggYG9uQ29uZmxpY3REb05vdGhpbmdgIGluIHJlcG9ydGluZy1zZXJ2aWNlLmluZ2VzdEV2ZW50cykuXG4gIC8vIFBhcnRpYWwgKGV4ZWN1dGlvbl9pZCBJUyBOT1QgTlVMTCkgYmVjYXVzZSB0aGF0J3MgdGhlIG5hdHVyYWwgcGVyLWV2ZW50XG4gIC8vIGtleTsgZXZlbnRzIHdpdGhvdXQgYW4gZXhlY3V0aW9uSWQgKHJhcmUpIGFyZW4ndCBkZWR1cGVkLCB3aGljaCBpcyBzYWZlLlxuICAvLyBJbmNsdWRlcyBwaXBlbGluZV9pZCBzbyBhICh0aGVvcmV0aWNhbCkgZXhlY3V0aW9uLWlkIHJldXNlIGFjcm9zcyBwaXBlbGluZXNcbiAgLy8gY2FuJ3QgY29sbGlkZSAodGhlIEFSTiBpcyBub3QgcGFydCBvZiB0aGUgcm93KS5cbiAgLy9cbiAgLy8gQ09BTEVTQ0UgdGhlIG51bGxhYmxlIHBhcnRzIHRvIHNlbnRpbmVscyAoZXhwcmVzc2lvbiBpbmRleCk6IFBJUEVMSU5FL1NUQUdFL1xuICAvLyBCVUlMRCBldmVudHMgbGVhdmUgc3RhZ2VfbmFtZS9hY3Rpb25fbmFtZSBOVUxMIChwbHVnaW4tYnVpbGQgYWxzbyBwaXBlbGluZV9pZFxuICAvLyBOVUxMKSwgYW5kIFBvc3RncmVzIHRyZWF0cyBOVUxMcyBhcyBESVNUSU5DVCBpbiBhIHVuaXF1ZSBpbmRleCDigJQgc28gdGhlIHBsYWluXG4gIC8vIGNvbHVtbiBpbmRleCBuZXZlciBtYXRjaGVzIGZvciB0aG9zZSB0eXBlcyBhbmQgb25Db25mbGljdERvTm90aGluZyBjYW4ndCBkZWR1cFxuICAvLyB0aGVpciBhdC1sZWFzdC1vbmNlIHJlLWRlbGl2ZXJpZXMuIENvbGxhcHNpbmcgTlVMTOKGkicnIG1ha2VzIGVxdWFsIGV2ZW50cyBlcXVhbC5cbiAgLy8gKGRyaXp6bGUncyB1bmlxdWVJbmRleCBjYW4ndCBleHByZXNzIE5VTExTIE5PVCBESVNUSU5DVCBvbiBhIHBhcnRpYWwgaW5kZXgsIHNvXG4gIC8vIHdlIHVzZSB0aGUgZXF1aXZhbGVudCBleHByZXNzaW9uIGluZGV4LikgQ3JlYXRlZCBieSBwb3N0Z3Jlcy1pbml0LnNxbC5cbiAgZGVkdXBJZHg6IHVuaXF1ZUluZGV4KCdldmVudF9kZWR1cF9pZHgnKVxuICAgIC5vbihcbiAgICAgIHNxbGBjb2FsZXNjZSgke3RhYmxlLnBpcGVsaW5lSWR9Ojp0ZXh0LCAnJylgLFxuICAgICAgdGFibGUuZXhlY3V0aW9uSWQsXG4gICAgICB0YWJsZS5ldmVudFR5cGUsXG4gICAgICB0YWJsZS5zdGF0dXMsXG4gICAgICBzcWxgY29hbGVzY2UoJHt0YWJsZS5zdGFnZU5hbWV9LCAnJylgLFxuICAgICAgc3FsYGNvYWxlc2NlKCR7dGFibGUuYWN0aW9uTmFtZX0sICcnKWAsXG4gICAgKVxuICAgIC53aGVyZShzcWxgZXhlY3V0aW9uX2lkIElTIE5PVCBOVUxMYCksXG4gIC8vIFN0cm9uZ2VzdCBkZWR1cCBrZXkgd2hlbiB0aGUgcHJvZHVjZXIgaGFzIG9uZTogYW4gRXZlbnRCcmlkZ2UgZXZlbnQgaWQgaXNcbiAgLy8gdW5pcXVlIHBlciBBV1Mgc3RhdGUgY2hhbmdlLCBzbyBhbiBTUVMgcmVkZWxpdmVyeSBvciBETFEgcmVkcml2ZSBvZiB0aGUgc2FtZVxuICAvLyBldmVudCBjb2xsYXBzZXMgaGVyZSBldmVuIHdpdGhvdXQgYW4gZXhlY3V0aW9uX2lkLiBQYXJ0aWFsIOKAlCBwbHVnaW4tYnVpbGRcbiAgLy8gZXZlbnRzIGNhcnJ5IG5vbmUuIEEgc2Vjb25kIE9OIENPTkZMSUNUIERPIE5PVEhJTkcgYXJiaXRlciBmb3IgaW5nZXN0RXZlbnRzLlxuICAvLyBDcmVhdGVkIGJ5IHBvc3RncmVzLWluaXQuc3FsLlxuICBzb3VyY2VFdmVudElkeDogdW5pcXVlSW5kZXgoJ2V2ZW50X3NvdXJjZV9ldmVudF9pZHgnKVxuICAgIC5vbih0YWJsZS5zb3VyY2VFdmVudElkKVxuICAgIC53aGVyZShzcWxgc291cmNlX2V2ZW50X2lkIElTIE5PVCBOVUxMYCksXG4gIC8vIERPUkEgZGVwbG95LXNjb3BlZCByZWFkczogb25seSBQSVBFTElORS1sZXZlbCBleGVjdXRpb25zIHRhZ2dlZCB3aXRoIGFcbiAgLy8gZGVwbG95IGVudmlyb25tZW50LiBgZXZlbnRfdHlwZWAgaXMgaW4gdGhlIGluZGV4IGJlY2F1c2UgdGhlIGV2ZW50cyBMYW1iZGFcbiAgLy8gdGFncyBFVkVSWSBldmVudCBvZiBhIGRlcGxveWVkIHBpcGVsaW5lIChTVEFHRS9BQ1RJT04gdG9vKSwgd2hpbGUgdGhlIERPUkFcbiAgLy8gc2NhbiB3YW50cyBvbmx5IGBldmVudF90eXBlPSdQSVBFTElORSdgIOKAlCBpbmNsdWRpbmcgaXQgcmVzdG9yZXMgc2VsZWN0aXZpdHkuXG4gIC8vIFBhcnRpYWwgKGVudmlyb25tZW50IElTIE5PVCBOVUxMKSBrZWVwcyBpdCBzbWFsbCDigJQgbGVnYWN5L0NJLW9ubHkgZXZlbnRzXG4gIC8vIGFyZW4ndCBpbmRleGVkLiBUaGUgZGVmYXVsdCBydW4tYmFzZWQgRE9SQSBwYXRoIChubyBlbnZpcm9ubWVudCkgY2FuJ3QgdXNlXG4gIC8vIHRoaXMgcGFydGlhbCBpbmRleDsgaXQgcmVsaWVzIG9uIGV2ZW50X3BpcGVsaW5lX3R5cGVfc3RhcnRlZF9pZHggYmVsb3cuXG4gIC8vIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIGVudlR5cGVTdGFydGVkSWR4OiBpbmRleCgnZXZlbnRfZW52X3R5cGVfc3RhcnRlZF9pZHgnKVxuICAgIC5vbih0YWJsZS5lbnZpcm9ubWVudCwgdGFibGUuZXZlbnRUeXBlLCB0YWJsZS5zdGFydGVkQXQpXG4gICAgLndoZXJlKHNxbGBlbnZpcm9ubWVudCBJUyBOT1QgTlVMTGApLFxuICAvLyBzdGFydGVkX2F0IHJhbmdlIHNjYW5zOiBldmVyeSBDYXRlZ29yeS0xIHJlcG9ydCBhbmQgdGhlIGRlZmF1bHQgcnVuLWJhc2VkXG4gIC8vIERPUkEgcGF0aCBmaWx0ZXJzIGBldmVudF90eXBlPSdQSVBFTElORScgQU5EIHN0YXJ0ZWRfYXQgQkVUV0VFTiDigKZgIGpvaW5lZCBvblxuICAvLyBwaXBlbGluZV9pZCwgYnV0IHRoZSBvdGhlciBldmVudCBjb21wb3NpdGUgaW5kZXggaXMgb24gY3JlYXRlZF9hdCwgbm90XG4gIC8vIHN0YXJ0ZWRfYXQg4oCUIHNvIHRoZSByYW5nZSBzY2FuIGhhZCBubyBpZGVhbCBpbmRleC4gVGhpcyBjb21wb3NpdGUgc2VydmVzIHRoZVxuICAvLyBqb2luLWRyaXZlbiBzY2FuIGJ5IHBpcGVsaW5lX2lkLiBDcmVhdGVkIGJ5IHBvc3RncmVzLWluaXQuc3FsLlxuICBwaXBlbGluZVR5cGVTdGFydGVkSWR4OiBpbmRleCgnZXZlbnRfcGlwZWxpbmVfdHlwZV9zdGFydGVkX2lkeCcpXG4gICAgLm9uKHRhYmxlLnBpcGVsaW5lSWQsIHRhYmxlLmV2ZW50VHlwZSwgdGFibGUuc3RhcnRlZEF0KSxcbiAgLy8gRE9SQSBkZXBsb3ktYmFzaXMgc2NhbjogZGVwbG95bWVudCBmcmVxdWVuY3kgLyBkZXBsb3ktdGltZSBDRlIgL1xuICAvLyBsZWFkIHRpbWUgYWxsIGdyb3VwIGRlcGxveS1zdGFnZSBldmVudHMgYnkgZW52aXJvbm1lbnQgb3ZlciBhIGNvbXBsZXRlZF9hdFxuICAvLyB3aW5kb3cuIFRoaXMgY29tcG9zaXRlIHNlcnZlcyB0aGF0IGdyb3VwZWQgb3JnLXNjb3BlZCBzY2FuIGRpcmVjdGx5LlxuICAvLyBDcmVhdGVkIGJ5IHBvc3RncmVzLWluaXQuc3FsLlxuICBvcmdFbnZDb21wbGV0ZWRJZHg6IGluZGV4KCdldmVudF9vcmdfZW52X2NvbXBsZXRlZF9pZHgnKVxuICAgIC5vbih0YWJsZS5vcmdJZCwgdGFibGUuZW52aXJvbm1lbnQsIHRhYmxlLmNvbXBsZXRlZEF0KSxcbiAgLy8gRE9SQSBsZWFkIHRpbWU6IHRoZSBgZXhlY19jb21taXRzYCBDVEUgcHJvYmVzIGNvbW1pdC1jYXJyeWluZyBldmVudHMgYnlcbiAgLy8gZXhlY3V0aW9uX2lkIGFuZCB0YWtlcyBNSU4oY29tbWl0X3RpbWVzdGFtcCkuIFBhcnRpYWwgKyBleGVjdXRpb25faWQtbGVhZGluZyBzb1xuICAvLyB0aGUgSU4tbGlzdCBwcm9iZSBpcyBhbiBpbmRleCBzY2FuIGFuZCB0aGUgTUlOIGNvbWVzIGZyb20gdGhlIGluZGV4LiBBIGJhcmVcbiAgLy8gaW5kZXggb24gY29tbWl0X3RpbWVzdGFtcCB3b3VsZCBub3Qgc2VydmUgaXQg4oCUIG5vdGhpbmcgZmlsdGVycyBvbiBhIHJhbmdlLlxuICAvLyBDcmVhdGVkIGJ5IHBvc3RncmVzLWluaXQuc3FsLlxuICBleGVjQ29tbWl0VHNJZHg6IGluZGV4KCdldmVudF9leGVjX2NvbW1pdF90c19pZHgnKVxuICAgIC5vbih0YWJsZS5leGVjdXRpb25JZCwgdGFibGUuY29tbWl0VGltZXN0YW1wKVxuICAgIC53aGVyZShzcWxgY29tbWl0X3RpbWVzdGFtcCBJUyBOT1QgTlVMTGApLFxuICAvLyBQZXItcGx1Z2luIHJ1bnRpbWUgcmVwb3J0aW5nIChzdWNjZXNzIHJhdGUgLyBkdXJhdGlvbiBwZXIgcGx1Z2luIHZlcnNpb24pLlxuICAvLyBQYXJ0aWFsOiB0aGUgYnVsayBvZiBub24tcGx1Z2luIGV2ZW50cyBpcyBuZXZlciBpbmRleGVkLlxuICBwbHVnaW5JZHg6IGluZGV4KCdldmVudF9wbHVnaW5faWR4JylcbiAgICAub24odGFibGUucGx1Z2luUHVibGlzaGVyLCB0YWJsZS5wbHVnaW5OYW1lLCB0YWJsZS5wbHVnaW5WZXJzaW9uLCB0YWJsZS5jb21wbGV0ZWRBdClcbiAgICAud2hlcmUoc3FsYHBsdWdpbl9uYW1lIElTIE5PVCBOVUxMYCksXG4gIC8vIExpc3RpbmcgYWRvcHRpb24gLyBzdWNjZXNzIHJhdGUgKHBsdWdpbiBzdGF0cyBzd2VlcCksIGtleWVkIG9uIHRoZSBwdWJsaXNoZXIgaWQuXG4gIHBsdWdpblB1Ymxpc2hlcklkSWR4OiBpbmRleCgnZXZlbnRfcGx1Z2luX3B1Ymxpc2hlcl9pZF9pZHgnKVxuICAgIC5vbih0YWJsZS5wbHVnaW5QdWJsaXNoZXJJZCwgdGFibGUucGx1Z2luTmFtZSwgdGFibGUuY29tcGxldGVkQXQpXG4gICAgLndoZXJlKHNxbGBwbHVnaW5fcHVibGlzaGVyX2lkIElTIE5PVCBOVUxMYCksXG59KSk7XG5cbi8qKlxuICogTWFudWFsIHBvc3QtZGVwbG95IG91dGNvbWUgbWFya2Vycy4gQSB1c2VyIG1hcmtzIGEgZGVwbG95bWVudFxuICogYGZhaWxlZGAgKHByb2R1Y3Rpb24gaW5jaWRlbnQgbGlua2VkIHRvIGEgZGVwbG95KSBvciBgcmVzdG9yZWRgIChyZWNvdmVyZWQpLlxuICogVGhlc2UgZmVlZCB0aGUgRE9SQSBwb3N0LWRlcGxveSBDaGFuZ2UgRmFpbHVyZSBSYXRlIGNvbXBvbmVudCBhbmQgdGhlIHJlYWxcbiAqIE1UVFIgKHJlc3RvcmVkIOKIkiBkZXBsb3llZCkuIENvcnJlbGF0ZWQgdG8gYSBkZXBsb3kgZXhlY3V0aW9uIGJ5IGBleGVjdXRpb25JZGAuXG4gKlxuICogQHRhYmxlIGRlcGxveW1lbnRfb3V0Y29tZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlcGxveW1lbnRPdXRjb21lID0gcGdUYWJsZSgnZGVwbG95bWVudF9vdXRjb21lcycsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgZXhlY3V0aW9uSWQ6IHZhcmNoYXIoJ2V4ZWN1dGlvbl9pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIGVudmlyb25tZW50OiB2YXJjaGFyKCdlbnZpcm9ubWVudCcsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIG91dGNvbWU6IHZhcmNoYXIoJ291dGNvbWUnLCB7IGxlbmd0aDogMjAgfSkuJHR5cGU8J2ZhaWxlZCcgfCAncmVzdG9yZWQnPigpLm5vdE51bGwoKSxcbiAgYXQ6IHRpbWVzdGFtcCgnYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgb3JnRW52SWR4OiBpbmRleCgnZGVwbG95bWVudF9vdXRjb21lc19vcmdfZW52X2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5lbnZpcm9ubWVudCksXG4gIGV4ZWN1dGlvbklkeDogaW5kZXgoJ2RlcGxveW1lbnRfb3V0Y29tZXNfZXhlY3V0aW9uX2lkeCcpLm9uKHRhYmxlLmV4ZWN1dGlvbklkKSxcbiAgLy8gSWRlbXBvdGVudCByZS1tYXJraW5nOiBvbmUgcm93IHBlciAoZXhlY3V0aW9uLCBvdXRjb21lKS4gUmUtcG9zdGluZyB0aGUgc2FtZVxuICAvLyBvdXRjb21lIGZvciBhIGRlcGxveSBpcyBhIG5vLW9wL3JlZnJlc2ggKG9uQ29uZmxpY3REb1VwZGF0ZSB0aGUgYGF0YCksIHNvIGFcbiAgLy8gZmFpbGVk4oaScmVzdG9yZWQgcGFpciBpcyB0d28gcm93cyB3aGlsZSBhIGR1cGxpY2F0ZSBQT1NUIGRvZXNuJ3QgZG91YmxlLWNvdW50LlxuICBleGVjdXRpb25PdXRjb21lVW5pcXVlOiB1bmlxdWVJbmRleCgnZGVwbG95bWVudF9vdXRjb21lc19leGVjdXRpb25fb3V0Y29tZV91bmlxdWUnKVxuICAgIC5vbih0YWJsZS5leGVjdXRpb25JZCwgdGFibGUub3V0Y29tZSksXG59KSk7XG5cbi8qKlxuICogUGVyLW9yZyBpbmdlc3Rpb24gaGVhbHRoLiBUaGUgQVdTIGV2ZW50cyBMYW1iZGEgcGVyaW9kaWNhbGx5IHBvc3RzXG4gKiBmb3J3YXJkZWQvZHJvcHBlZCBjb3VudGVycyArIHRoZSBsYXN0IGV2ZW50IHRpbWVzdGFtcCBzbyB0aGUgUmVwb3J0cyBVSSBjYW5cbiAqIHNob3cgd2hldGhlciBldmVudHMgYXJlIGZsb3dpbmcgLyBzdGFsZSAvIGRyb3BwaW5nLiBPbmUgcm93IHBlciBvcmcuXG4gKlxuICogQHRhYmxlIGluZ2VzdF9oZWFsdGhcbiAqL1xuZXhwb3J0IGNvbnN0IGluZ2VzdEhlYWx0aCA9IHBnVGFibGUoJ2luZ2VzdF9oZWFsdGgnLCB7XG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLnByaW1hcnlLZXkoKSxcbiAgbGFzdEV2ZW50QXQ6IHRpbWVzdGFtcCgnbGFzdF9ldmVudF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBmb3J3YXJkZWQ6IGJpZ2ludCgnZm9yd2FyZGVkJywgeyBtb2RlOiAnbnVtYmVyJyB9KSxcbiAgZHJvcHBlZDogYmlnaW50KCdkcm9wcGVkJywgeyBtb2RlOiAnbnVtYmVyJyB9KSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSk7XG5cbi8qKlxuICogUHJvZHVjdGlvbiBpbmNpZGVudHMgaW5nZXN0ZWQgZnJvbSB0aGUgb3JnJ3MgaW5jaWRlbnQgdG9vbGluZy4gVGhlXG4gKiB1c2VyIHBvaW50cyB0aGVpciBBbGVydG1hbmFnZXIgLyBQYWdlckR1dHkgLyBEYXRhZG9nIHdlYmhvb2sgYXRcbiAqIGBQT1NUIC9hcGkvcmVwb3J0cy9pbmNpZGVudHNgIChtYWNoaW5lIGByZXBvcnRpbmc6aW5nZXN0YCBzY29wZSkuIEVhY2ggaW5jaWRlbnRcbiAqIGNhcnJpZXMgaXRzIGV4dGVybmFsIGlkLCB0aGUgYWZmZWN0ZWQgYGVudmlyb25tZW50YCwgd2hlbiBpdCBvcGVuZWQsIGFuZCB3aGVuXG4gKiBpdCB3YXMgcmVzb2x2ZWQgKG51bGxhYmxlIOKAlCBhIGxhdGVyIHJlc29sdmUgdXBkYXRlcyBpdCkuIERPUkEgY29ycmVsYXRlcyBlYWNoXG4gKiBpbmNpZGVudCB0byB0aGUgbW9zdCByZWNlbnQgc3VjY2Vzc2Z1bCBkZXBsb3kgdG8gYGVudmlyb25tZW50YCB3aXRoaW5cbiAqIGBET1JBX0lOQ0lERU5UX1dJTkRPV19IT1VSU2AsIHR1cm5pbmcgaXQgaW50byBhbiBhdXRvbWF0ZWQgcG9zdC1kZXBsb3kgZmFpbHVyZVxuICogKENoYW5nZSBGYWlsdXJlIFJhdGUpIGFuZCBhIHJlYWwgcmVjb3ZlcnkgdGltZSAoYHJlc29sdmVkX2F0IOKIkiBvcGVuZWRfYXRgIE1UVFIpLlxuICogYGluY2lkZW50X2lkYCBpcyBVTklRVUUgcGVyIG9yZyBzbyBhIHJlc29sdmUgcmUtcG9zdCBpcyBhbiBpZGVtcG90ZW50IHVwc2VydC5cbiAqXG4gKiBAdGFibGUgaW5jaWRlbnRzXG4gKi9cbmV4cG9ydCBjb25zdCBpbmNpZGVudCA9IHBnVGFibGUoJ2luY2lkZW50cycsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgLy8gRXh0ZXJuYWwgaW5jaWRlbnQgaWQgZnJvbSB0aGUgc291cmNlIHN5c3RlbSAoUGFnZXJEdXR5L0RhdGFkb2cvQWxlcnRtYW5hZ2VyKS5cbiAgLy8gVW5pcXVlIFBFUiBPUkcgKHNlZSBpbmNpZGVudE9yZ1VuaXF1ZSkg4oCUIHRoZSBpZGVtcG90ZW5jeSArIHVwc2VydCBrZXkuXG4gIGluY2lkZW50SWQ6IHZhcmNoYXIoJ2luY2lkZW50X2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgLy8gQWZmZWN0ZWQgZGVwbG95IGVudmlyb25tZW50IChlLmcuIFwicHJvZHVjdGlvblwiKS4gQ29ycmVsYXRlZCB0byBhIGRlcGxveSBlbnYuXG4gIGVudmlyb25tZW50OiB2YXJjaGFyKCdlbnZpcm9ubWVudCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBvcGVuZWRBdDogdGltZXN0YW1wKCdvcGVuZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5ub3ROdWxsKCksXG4gIC8vIE5VTEwgd2hpbGUgdGhlIGluY2lkZW50IGlzIG9wZW47IGEgbGF0ZXIgcmVzb2x2ZSB3ZWJob29rIHNldHMgaXQgKGlkZW1wb3RlbnRcbiAgLy8gdXBzZXJ0KS4gYHJlc29sdmVkX2F0IOKIkiBvcGVuZWRfYXRgIGlzIHRoZSByZWFsIE1UVFIgZm9yIHRoZSBjb3JyZWxhdGVkIGRlcGxveS5cbiAgcmVzb2x2ZWRBdDogdGltZXN0YW1wKCdyZXNvbHZlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBzZXZlcml0eTogdmFyY2hhcignc2V2ZXJpdHknLCB7IGxlbmd0aDogNTAgfSkubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIC8vIENvcnJlbGF0aW9uIHNjYW46IG1vc3QtcmVjZW50LWRlcGxveS1iZWZvcmUtb3BlbiBsb29rdXBzIGdyb3VwIGJ5IChvcmcsIGVudilcbiAgLy8gYW5kIHJhbmdlIG9uIG9wZW5lZF9hdC5cbiAgb3JnRW52T3BlbmVkSWR4OiBpbmRleCgnaW5jaWRlbnRzX29yZ19lbnZfb3BlbmVkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5lbnZpcm9ubWVudCwgdGFibGUub3BlbmVkQXQpLFxuICAvLyBJZGVtcG90ZW50IHVwc2VydCAvIGRlZHVwOiBvbmUgcm93IHBlciAob3JnLCBpbmNpZGVudF9pZCkuIEEgcmVzb2x2ZSByZS1wb3N0XG4gIC8vIHVwZGF0ZXMgcmVzb2x2ZWRfYXQgaW5zdGVhZCBvZiBpbnNlcnRpbmcgYSBkdXBsaWNhdGUuXG4gIG9yZ0luY2lkZW50VW5pcXVlOiB1bmlxdWVJbmRleCgnaW5jaWRlbnRzX29yZ19pbmNpZGVudF91bmlxdWUnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuaW5jaWRlbnRJZCksXG59KSk7XG5cbi8qKlxuICogUGVyLW9yZyBET1JBIGNvbXB1dGF0aW9uICsgcmV0ZW50aW9uIG92ZXJyaWRlcy4gT25lIHJvdyBwZXIgb3JnIChvcmdfaWQgUEspLlxuICogYGluY2lkZW50V2luZG93SG91cnNgIG92ZXJyaWRlcyB0aGUgZ2xvYmFsIGBET1JBX0lOQ0lERU5UX1dJTkRPV19IT1VSU2BcbiAqIHVzZWQgdG8gY29ycmVsYXRlIGFuIGluZ2VzdGVkIGluY2lkZW50IHRvIHRoZSBtb3N0IHJlY2VudCBzdWNjZXNzZnVsIGRlcGxveS5cbiAqIGBldmVudFJldGVudGlvbkRheXNgIC8gYGRvcmFSZXRlbnRpb25EYXlzYCBvdmVycmlkZSB0aGUgZ2xvYmFsIHJlcG9ydGluZ1xuICogcmV0ZW50aW9uIHdpbmRvd3MgZm9yIHRoZSBzcGxpdCBzd2VlcCDigJQgc3RhbmRhcmQgZXZlbnRzIChgZW52aXJvbm1lbnQgSVMgTlVMTGApXG4gKiB2cyBET1JBIHNvdXJjZSAoZGVwbG95IHN0YWdlcyArIGBkZXBsb3ltZW50X291dGNvbWVzYCArIGBpbmNpZGVudHNgKS4gQW55IE5VTEwgL1xuICogYWJzZW50IHZhbHVlIGZhbGxzIGJhY2sgdG8gaXRzIGVudiBkZWZhdWx0LiBTZXQgc2VsZi1zZXJ2ZSBieSBhbiBvcmcgYWRtaW4gdmlhXG4gKiBgUFVUIC9hcGkvcmVwb3J0cy9zZXR0aW5ncy9pbmNpZGVudHNgLiBUaGlzIHRhYmxlIGlzIGl0c2VsZiBuZXZlciBwdXJnZWQuXG4gKlxuICogQHRhYmxlIGRvcmFfc2V0dGluZ3NcbiAqL1xuZXhwb3J0IGNvbnN0IGRvcmFTZXR0aW5ncyA9IHBnVGFibGUoJ2RvcmFfc2V0dGluZ3MnLCB7XG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLnByaW1hcnlLZXkoKSxcbiAgaW5jaWRlbnRXaW5kb3dIb3VyczogaW50ZWdlcignaW5jaWRlbnRfd2luZG93X2hvdXJzJyksXG4gIC8vIFJldGVudGlvbiBvdmVycmlkZXMgKGRheXMpLiBOVUxMIOKHkiB1c2UgdGhlIGdsb2JhbCBlbnYgZGVmYXVsdFxuICAvLyAoUkVQT1JUSU5HX0VWRU5UX1JFVEVOVElPTl9EQVlTIC8gUkVQT1JUSU5HX0RPUkFfUkVURU5USU9OX0RBWVMpLlxuICBldmVudFJldGVudGlvbkRheXM6IGludGVnZXIoJ2V2ZW50X3JldGVudGlvbl9kYXlzJyksXG4gIGRvcmFSZXRlbnRpb25EYXlzOiBpbnRlZ2VyKCdkb3JhX3JldGVudGlvbl9kYXlzJyksXG4gIC8qKlxuICAgKiBTdGFrZWhvbGRlci1yZXBvcnQgUE9MSUNZIOKAlCBhZG1pbi1vd25lZCwgZGVsaWJlcmF0ZWx5IE5PVCBvblxuICAgKiBgcmVwb3J0X2RlZmluaXRpb25zYC4gQSBsZWFkIGNvbXBvc2VzIHRoZSByZXBvcnQ7IHdobyBtYXkgcmVjZWl2ZSBpdCBpcyB0aGVcbiAgICogb3JnJ3MgY2FsbCwgc28gYSBsZWFkIGNhbm5vdCB3aWRlbiB0aGVpciBvd24gcmVwb3J0J3MgYXVkaWVuY2UuXG4gICAqXG4gICAqIFNoYXJpbmcgc3RhcnRzIE9GRjogbWludGluZyBhIHB1YmxpYyBsaW5rIHR1cm5zIGludGVybmFsIGRlbGl2ZXJ5IG51bWJlcnNcbiAgICogaW50byBhIFVSTCBhbnlvbmUgaG9sZGluZyBpdCBjYW4gcmVhZCwgd2hpY2ggaXMgYSBkZWNpc2lvbiBhbiBhZG1pbiBtYWtlc1xuICAgKiBvbmNlIGZvciB0aGUgb3JnLCBub3QgYSBjaGVja2JveCBvbiBldmVyeSByZXBvcnQuXG4gICAqL1xuICByZXBvcnRFeHRlcm5hbFNoYXJpbmc6IGJvb2xlYW4oJ3JlcG9ydF9leHRlcm5hbF9zaGFyaW5nJykuZGVmYXVsdChmYWxzZSkubm90TnVsbCgpLFxuICAvKiogQWxsb3dlZCByZWNpcGllbnQgZG9tYWlucy4gTlVMTCDih5Igb3JnIG1lbWJlcnMgb25seSwgbm8gZXh0ZXJuYWwgYWRkcmVzc2VzLiAqL1xuICByZXBvcnRSZWNpcGllbnREb21haW5zOiBqc29uYigncmVwb3J0X3JlY2lwaWVudF9kb21haW5zJykuJHR5cGU8c3RyaW5nW10+KCksXG4gIC8qKiBBbiBleHRlcm5hbCBhZGRyZXNzIG5lZWRzIGFuIGFkbWluJ3MgYXBwcm92YWwgYmVmb3JlIGFueXRoaW5nIGlzIGRlbGl2ZXJlZC4gKi9cbiAgcmVwb3J0UmVxdWlyZUFwcHJvdmFsOiBib29sZWFuKCdyZXBvcnRfcmVxdWlyZV9hcHByb3ZhbCcpLmRlZmF1bHQodHJ1ZSkubm90TnVsbCgpLFxuICAvLyBgcmVwb3J0X3NuYXBzaG90X3JldGVudGlvbl9kYXlzYCB3YXMgREVMRVRFRCBoZXJlLiBJdCBwcm9taXNlZCBhIHBlci1vcmcgb3ZlcnJpZGUgZm9yXG4gIC8vIGhvdyBsb25nIGEgcHVibGlzaGVkIHJlcG9ydCdzIHNuYXBzaG90IGlzIGtlcHQsIGFuZCBpdCB3YXMgVU5SRUFDSEFCTEUgaW4gYm90aFxuICAvLyBkaXJlY3Rpb25zOiBubyByb3V0ZSBldmVyIHdyb3RlIGl0IGFuZCBubyBzd2VlcCBldmVyIHJlYWQgaXQsIHNvIGFuIGFkbWluIGNvdWxkIG5vdFxuICAvLyBzZXQgaXQgYW5kIGl0IHdvdWxkIG5vdCBoYXZlIG1hdHRlcmVkIGlmIHRoZXkgaGFkLiBTbmFwc2hvdCBsaWZldGltZSBjb21lcyBmcm9tIHRoZVxuICAvLyBydW4ncyBvd24gYHB1cmdlX2FmdGVyYCAocmVwb3J0aW5nLXJldGVudGlvbi50cyksIGFuZCB0aGUgcGVyLW9yZyBkaW1lbnNpb24gaXMgdGhlXG4gIC8vIFRJRVIgcGx1cyB0aGUgcmV0ZW50aW9uIC8gRE9SQS1oaXN0b3J5IHBhY2tzLlxuICAvKipcbiAgICogT3B0aW9uYWwsIE9GRiBieSBkZWZhdWx0OiBtaW51dGVzIHRoZSBvcmcgcmVja29ucyBpdCBzYXZlcyBwZXIgcGlwZWxpbmVcbiAgICogY3JlYXRlZCwgZm9yIHRoZSBhZG9wdGlvbiBzZWN0aW9uLiBPZmYgYnkgZGVmYXVsdCBiZWNhdXNlIGFcbiAgICogcGxhdGZvcm0tc3VwcGxpZWQgbnVtYmVyIGhlcmUgd291bGQgYmUgdGhlIHBsYXRmb3JtIG1hcmtpbmcgaXRzIG93biBob21ld29yaztcbiAgICogaXQgb25seSBtZWFucyBhbnl0aGluZyB3aGVuIHRoZSBjdXN0b21lciBjaG9zZSBpdC5cbiAgICovXG4gIHRpbWVTYXZlZE1pbnV0ZXNQZXJQaXBlbGluZTogaW50ZWdlcigndGltZV9zYXZlZF9taW51dGVzX3Blcl9waXBlbGluZScpLFxuICAvKipcbiAgICogVGhlIG9yZydzIG5lZWRzLWF0dGVudGlvbiB0aHJlc2hvbGRzLCBvdmVycmlkaW5nIHRoZSBkZWZhdWx0cyBQRVIgRklFTEQuXG4gICAqXG4gICAqIE9uZSBqc29uYiByYXRoZXIgdGhhbiBmaXZlIGNvbHVtbnM6IHRoZSBzZXQgaXMgY2xvc2VkIGFuZCBzbWFsbCwgaXQgaXMgcmVhZCBhcyBhXG4gICAqIHVuaXQgYnkgZXhhY3RseSBvbmUgZXZhbHVhdG9yLCBhbmQgYW4gb3JnIHRoYXQgc2V0cyBvbmUgdGhyZXNob2xkIG11c3Qga2VlcCB0aGVcbiAgICogZGVmYXVsdHMgZm9yIHRoZSBvdGhlciBmb3VyIOKAlCB3aGljaCBhIHBhcnRpYWwgb2JqZWN0IGV4cHJlc3NlcyBkaXJlY3RseSBhbmQgZml2ZVxuICAgKiBudWxsYWJsZSBjb2x1bW5zIHdvdWxkIG9ubHkgaW1wbHkuXG4gICAqXG4gICAqIENvbmZpZ3VyYWJsZSBhdCBhbGwgYmVjYXVzZSA5MCUgc3VjY2VzcyBpcyBhIGNyaXNpcyBmb3IgYSBkZXBsb3kgcGlwZWxpbmUgYW5kXG4gICAqIHVucmVtYXJrYWJsZSBmb3IgYSBmbGFreSBpbnRlZ3JhdGlvbiBzdWl0ZSBzb21lYm9keSBpcyBhbHJlYWR5IHJld3JpdGluZzsgYVxuICAgKiBwbGF0Zm9ybS1pbXBvc2VkIG51bWJlciB3b3VsZCBiZSB3cm9uZyBmb3Igb25lIG9mIHRoZW0gYnkgY29uc3RydWN0aW9uLlxuICAgKi9cbiAgcmVwb3J0QXR0ZW50aW9uVGhyZXNob2xkczoganNvbmIoJ3JlcG9ydF9hdHRlbnRpb25fdGhyZXNob2xkcycpLiR0eXBlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+KCksXG4gIC8qKlxuICAgKiBXaGVuIHRoaXMgb3JnIHNwZW50IGl0cyBPTkUgZnJlZSB3YXRlcm1hcmtlZCByZXBvcnQgcHJldmlldy5cbiAgICpcbiAgICogT25jZSwgZXZlciwgYW5kIG5ldmVyIHJlc2V0IOKAlCBub3QgcGVyIG1vbnRoLCBub3QgcGVyIHVzZXIuIFRoZSBwcmV2aWV3IGV4aXN0cyBzbyBhXG4gICAqIGxlYWQgY2FuIHNlZSB0aGVpciBvd24gbnVtYmVycyBpbiB0aGUgZm9ybWF0IGJlZm9yZSBhc2tpbmcgYW55b25lIHRvIHBheSBmb3IgaXQsXG4gICAqIHdoaWNoIHRha2VzIGV4YWN0bHkgb25lIHJlcG9ydDsgYSByZW5ld2FibGUgcHJldmlldyBpcyBqdXN0IHRoZSBwcm9kdWN0IGZvciBmcmVlLlxuICAgKiBTdG9yZWQgYXMgdGhlIElOU1RBTlQgcmF0aGVyIHRoYW4gYSBib29sZWFuIHNvIHN1cHBvcnQgY2FuIGFuc3dlciBcIndoZW4gZGlkIHRoZXlcbiAgICogdHJ5IGl0XCIgd2l0aG91dCBhIHNlcGFyYXRlIGF1ZGl0IGxvb2t1cC5cbiAgICovXG4gIHJlcG9ydFByZXZpZXdVc2VkQXQ6IHRpbWVzdGFtcCgncmVwb3J0X3ByZXZpZXdfdXNlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICAvKipcbiAgICogVGhlIGBvY2N1cnJlZEF0YCBvZiB0aGUgbGFzdCBBUFBMSUVEIFN0YWtlaG9sZGVyIFJlcG9ydHMgZW50aXRsZW1lbnQgcHVzaC5cbiAgICpcbiAgICogQSB3YXRlcm1hcmssIHNvIGFuIG91dC1vZi1vcmRlciBwdXNoIGNhbm5vdCByZXN1bWUgYW4gYWNjb3VudCB3aG9zZSBhZGQtb24gbGFwc2VkOlxuICAgKiBiaWxsaW5nJ3MgbGVncyBhcmUgYmVzdC1lZmZvcnQgYW5kIHJldHJpZWQsIHNvIFwibGFwc2VkIGF0IDEwOjAwXCIgYW5kIFwicmVuZXdlZCBhdFxuICAgKiAxMDowNVwiIGNhbiBhcnJpdmUgaW4gZWl0aGVyIG9yZGVyLCBhbmQgYXBwbHlpbmcgdGhlIG9sZGVyIG9uZSBsYXN0IHdvdWxkIGxlYXZlIGFcbiAgICogbGFwc2VkIGFjY291bnQgcHJvZHVjaW5nIHJlcG9ydHMgKG9yIGEgcGF5aW5nIG9uZSBwYXVzZWQpLlxuICAgKi9cbiAgcmVwb3J0RW50aXRsZW1lbnRTeW5jZWRBdDogdGltZXN0YW1wKCdyZXBvcnRfZW50aXRsZW1lbnRfc3luY2VkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIC8qKlxuICAgKiBUaGUgb3JnJ3MgREVGQVVMVCByZXBvcnQgdGltZXpvbmUgYW5kIHdlZWsgc3RhcnQsIHdoaWNoIGEgbmV3IHJlcG9ydCBpcyBjcmVhdGVkIHdpdGguXG4gICAqXG4gICAqIE9uIHRoZSByZXBvcnQgcG9saWN5IHJhdGhlciB0aGFuIG9uIHRoZSBwbGF0Zm9ybSBvcmcsIGJlY2F1c2UgcGxhdGZvcm0ncyBvcmdhbml6YXRpb25cbiAgICogaGFzIG5vIHRpbWV6b25lIGNvbmNlcHQgdG8gZXh0ZW5kIGFuZCBpbnZlbnRpbmcgb25lIHRoZXJlIHdvdWxkIGdpdmUgdGhlIHNhbWUgc2V0dGluZ1xuICAgKiB0d28gb3duZXJzLiBBbiBhZG1pbiBzZXRzIGl0IG9uY2UgKGBvcmdfc2V0dGluZ3M6d3JpdGVgLCB0aGUgc2FtZSBnYXRlIGFzIHRoZSByZXN0IG9mIHRoZVxuICAgKiBwb2xpY3kpIGFuZCBldmVyeSBsZWFkJ3MgbmV3IHJlcG9ydCBzdGFydHMgY29ycmVjdCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIGluIFVUQyBhbmRcbiAgICogYmVpbmcgbm90aWNlZCBhIHdlZWsgbGF0ZXIsIHdoZW4gYSBNb25kYXkgcmVwb3J0IGhhcyBwdXQgU3VuZGF5IGV2ZW5pbmcncyBkZXBsb3lzIGluXG4gICAqIHRoZSB3cm9uZyB3ZWVrLlxuICAgKlxuICAgKiBOVUxMIOKHkiB0aGUgZGVwbG95bWVudCBkZWZhdWx0LiBQZXItcmVwb3J0IHZhbHVlcyBhbHdheXMgd2luOiBhIGRpc3RyaWJ1dGVkIHRlYW0gY2FuXG4gICAqIGhhdmUgb25lIHJlcG9ydCBjdXQgaW4gQ2hpY2FnbyBhbmQgYW5vdGhlciBpbiBCZXJsaW4uXG4gICAqL1xuICByZXBvcnREZWZhdWx0VGltZXpvbmU6IHZhcmNoYXIoJ3JlcG9ydF9kZWZhdWx0X3RpbWV6b25lJywgeyBsZW5ndGg6IDY0IH0pLFxuICByZXBvcnREZWZhdWx0V2Vla1N0YXJ0OiB2YXJjaGFyKCdyZXBvcnRfZGVmYXVsdF93ZWVrX3N0YXJ0JywgeyBsZW5ndGg6IDEwIH0pLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59KTtcblxuLyoqXG4gKiBUeXBlU2NyaXB0IHR5cGVzIHJlcHJlc2VudGluZyBkYXRhYmFzZSByb3dzXG4gKi9cbmV4cG9ydCB0eXBlIFBpcGVsaW5lID0gdHlwZW9mIHBpcGVsaW5lLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIFBpcGVsaW5lSW5zZXJ0ID0gdHlwZW9mIHBpcGVsaW5lLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgUGlwZWxpbmVSZWdpc3RyeSA9IHR5cGVvZiBwaXBlbGluZVJlZ2lzdHJ5LiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIFBpcGVsaW5lUmVnaXN0cnlJbnNlcnQgPSB0eXBlb2YgcGlwZWxpbmVSZWdpc3RyeS4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIFBpcGVsaW5lRXZlbnQgPSB0eXBlb2YgcGlwZWxpbmVFdmVudC4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBQaXBlbGluZUV2ZW50SW5zZXJ0ID0gdHlwZW9mIHBpcGVsaW5lRXZlbnQuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBEZXBsb3ltZW50T3V0Y29tZSA9IHR5cGVvZiBkZXBsb3ltZW50T3V0Y29tZS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBEZXBsb3ltZW50T3V0Y29tZUluc2VydCA9IHR5cGVvZiBkZXBsb3ltZW50T3V0Y29tZS4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIEluZ2VzdEhlYWx0aCA9IHR5cGVvZiBpbmdlc3RIZWFsdGguJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgSW5nZXN0SGVhbHRoSW5zZXJ0ID0gdHlwZW9mIGluZ2VzdEhlYWx0aC4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIEluY2lkZW50ID0gdHlwZW9mIGluY2lkZW50LiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIEluY2lkZW50SW5zZXJ0ID0gdHlwZW9mIGluY2lkZW50LiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgRG9yYVNldHRpbmdzID0gdHlwZW9mIGRvcmFTZXR0aW5ncy4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBEb3JhU2V0dGluZ3NJbnNlcnQgPSB0eXBlb2YgZG9yYVNldHRpbmdzLiRpbmZlckluc2VydDtcblxuLyoqXG4gKiBIZWxwZXIgdHlwZXMgZm9yIHdvcmtpbmcgd2l0aCBwYXJ0aWFsIHVwZGF0ZXNcbiAqL1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVVcGRhdGUgPSBQYXJ0aWFsPE9taXQ8UGlwZWxpbmVJbnNlcnQsICdpZCcgfCAnY3JlYXRlZEF0JyB8ICdjcmVhdGVkQnknPj47XG4iXX0=
|
|
@@ -1456,6 +1456,271 @@ export declare const plugin: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
1456
1456
|
};
|
|
1457
1457
|
dialect: 'pg';
|
|
1458
1458
|
}>;
|
|
1459
|
+
/**
|
|
1460
|
+
* What a kept setup image needs to become a version exactly as its build would
|
|
1461
|
+
* have made it: the plugin record the upload produced, the uploader and their
|
|
1462
|
+
* visibility-ladder authority, and the publish request the upload asked for.
|
|
1463
|
+
* Opaque to the database (the plugin service owns the shape).
|
|
1464
|
+
*/
|
|
1465
|
+
export type KeptSetupImageBuild = Record<string, unknown>;
|
|
1466
|
+
/**
|
|
1467
|
+
* Gate-refused images from the SETUP catalog load, kept signed in the registry
|
|
1468
|
+
* for promotion instead of discarded (docs/plugin-publishing.md "Scan gates").
|
|
1469
|
+
* Written by the build worker for a system-org upload marked `setupLoad`;
|
|
1470
|
+
* promoted (re-gated, then saved through the build's own success path) or
|
|
1471
|
+
* discarded after `PLUGIN_KEPT_SETUP_IMAGE_TTL_DAYS`. System org only — listed
|
|
1472
|
+
* in the org cascade for its schema-reflection guard, but the cascade never
|
|
1473
|
+
* deletes the system org, so it never matches a row.
|
|
1474
|
+
*
|
|
1475
|
+
* @table plugin_kept_setup_images
|
|
1476
|
+
*/
|
|
1477
|
+
export declare const pluginKeptSetupImage: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
1478
|
+
name: "plugin_kept_setup_images";
|
|
1479
|
+
schema: undefined;
|
|
1480
|
+
columns: {
|
|
1481
|
+
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
1482
|
+
name: "id";
|
|
1483
|
+
tableName: "plugin_kept_setup_images";
|
|
1484
|
+
dataType: "string";
|
|
1485
|
+
columnType: "PgUUID";
|
|
1486
|
+
data: string;
|
|
1487
|
+
driverParam: string;
|
|
1488
|
+
notNull: true;
|
|
1489
|
+
hasDefault: true;
|
|
1490
|
+
isPrimaryKey: true;
|
|
1491
|
+
isAutoincrement: false;
|
|
1492
|
+
hasRuntimeDefault: false;
|
|
1493
|
+
enumValues: undefined;
|
|
1494
|
+
baseColumn: never;
|
|
1495
|
+
identity: undefined;
|
|
1496
|
+
generated: undefined;
|
|
1497
|
+
}, {}, {}>;
|
|
1498
|
+
orgId: import("drizzle-orm/pg-core").PgColumn<{
|
|
1499
|
+
name: "org_id";
|
|
1500
|
+
tableName: "plugin_kept_setup_images";
|
|
1501
|
+
dataType: "string";
|
|
1502
|
+
columnType: "PgVarchar";
|
|
1503
|
+
data: string;
|
|
1504
|
+
driverParam: string;
|
|
1505
|
+
notNull: true;
|
|
1506
|
+
hasDefault: false;
|
|
1507
|
+
isPrimaryKey: false;
|
|
1508
|
+
isAutoincrement: false;
|
|
1509
|
+
hasRuntimeDefault: false;
|
|
1510
|
+
enumValues: [string, ...string[]];
|
|
1511
|
+
baseColumn: never;
|
|
1512
|
+
identity: undefined;
|
|
1513
|
+
generated: undefined;
|
|
1514
|
+
}, {}, {
|
|
1515
|
+
length: 255;
|
|
1516
|
+
}>;
|
|
1517
|
+
pluginName: import("drizzle-orm/pg-core").PgColumn<{
|
|
1518
|
+
name: "plugin_name";
|
|
1519
|
+
tableName: "plugin_kept_setup_images";
|
|
1520
|
+
dataType: "string";
|
|
1521
|
+
columnType: "PgVarchar";
|
|
1522
|
+
data: string;
|
|
1523
|
+
driverParam: string;
|
|
1524
|
+
notNull: true;
|
|
1525
|
+
hasDefault: false;
|
|
1526
|
+
isPrimaryKey: false;
|
|
1527
|
+
isAutoincrement: false;
|
|
1528
|
+
hasRuntimeDefault: false;
|
|
1529
|
+
enumValues: [string, ...string[]];
|
|
1530
|
+
baseColumn: never;
|
|
1531
|
+
identity: undefined;
|
|
1532
|
+
generated: undefined;
|
|
1533
|
+
}, {}, {
|
|
1534
|
+
length: 255;
|
|
1535
|
+
}>;
|
|
1536
|
+
pluginVersion: import("drizzle-orm/pg-core").PgColumn<{
|
|
1537
|
+
name: "plugin_version";
|
|
1538
|
+
tableName: "plugin_kept_setup_images";
|
|
1539
|
+
dataType: "string";
|
|
1540
|
+
columnType: "PgVarchar";
|
|
1541
|
+
data: string;
|
|
1542
|
+
driverParam: string;
|
|
1543
|
+
notNull: true;
|
|
1544
|
+
hasDefault: false;
|
|
1545
|
+
isPrimaryKey: false;
|
|
1546
|
+
isAutoincrement: false;
|
|
1547
|
+
hasRuntimeDefault: false;
|
|
1548
|
+
enumValues: [string, ...string[]];
|
|
1549
|
+
baseColumn: never;
|
|
1550
|
+
identity: undefined;
|
|
1551
|
+
generated: undefined;
|
|
1552
|
+
}, {}, {
|
|
1553
|
+
length: 50;
|
|
1554
|
+
}>;
|
|
1555
|
+
imageDigest: import("drizzle-orm/pg-core").PgColumn<{
|
|
1556
|
+
name: "image_digest";
|
|
1557
|
+
tableName: "plugin_kept_setup_images";
|
|
1558
|
+
dataType: "string";
|
|
1559
|
+
columnType: "PgVarchar";
|
|
1560
|
+
data: string;
|
|
1561
|
+
driverParam: string;
|
|
1562
|
+
notNull: true;
|
|
1563
|
+
hasDefault: false;
|
|
1564
|
+
isPrimaryKey: false;
|
|
1565
|
+
isAutoincrement: false;
|
|
1566
|
+
hasRuntimeDefault: false;
|
|
1567
|
+
enumValues: [string, ...string[]];
|
|
1568
|
+
baseColumn: never;
|
|
1569
|
+
identity: undefined;
|
|
1570
|
+
generated: undefined;
|
|
1571
|
+
}, {}, {
|
|
1572
|
+
length: 71;
|
|
1573
|
+
}>;
|
|
1574
|
+
imageSource: import("drizzle-orm/pg-core").PgColumn<{
|
|
1575
|
+
name: "image_source";
|
|
1576
|
+
tableName: "plugin_kept_setup_images";
|
|
1577
|
+
dataType: "string";
|
|
1578
|
+
columnType: "PgVarchar";
|
|
1579
|
+
data: ImageSource;
|
|
1580
|
+
driverParam: string;
|
|
1581
|
+
notNull: true;
|
|
1582
|
+
hasDefault: false;
|
|
1583
|
+
isPrimaryKey: false;
|
|
1584
|
+
isAutoincrement: false;
|
|
1585
|
+
hasRuntimeDefault: false;
|
|
1586
|
+
enumValues: [string, ...string[]];
|
|
1587
|
+
baseColumn: never;
|
|
1588
|
+
identity: undefined;
|
|
1589
|
+
generated: undefined;
|
|
1590
|
+
}, {}, {
|
|
1591
|
+
length: 10;
|
|
1592
|
+
$type: ImageSource;
|
|
1593
|
+
}>;
|
|
1594
|
+
refusalCode: import("drizzle-orm/pg-core").PgColumn<{
|
|
1595
|
+
name: "refusal_code";
|
|
1596
|
+
tableName: "plugin_kept_setup_images";
|
|
1597
|
+
dataType: "string";
|
|
1598
|
+
columnType: "PgVarchar";
|
|
1599
|
+
data: string;
|
|
1600
|
+
driverParam: string;
|
|
1601
|
+
notNull: true;
|
|
1602
|
+
hasDefault: false;
|
|
1603
|
+
isPrimaryKey: false;
|
|
1604
|
+
isAutoincrement: false;
|
|
1605
|
+
hasRuntimeDefault: false;
|
|
1606
|
+
enumValues: [string, ...string[]];
|
|
1607
|
+
baseColumn: never;
|
|
1608
|
+
identity: undefined;
|
|
1609
|
+
generated: undefined;
|
|
1610
|
+
}, {}, {
|
|
1611
|
+
length: 64;
|
|
1612
|
+
}>;
|
|
1613
|
+
refusalMessage: import("drizzle-orm/pg-core").PgColumn<{
|
|
1614
|
+
name: "refusal_message";
|
|
1615
|
+
tableName: "plugin_kept_setup_images";
|
|
1616
|
+
dataType: "string";
|
|
1617
|
+
columnType: "PgText";
|
|
1618
|
+
data: string;
|
|
1619
|
+
driverParam: string;
|
|
1620
|
+
notNull: true;
|
|
1621
|
+
hasDefault: false;
|
|
1622
|
+
isPrimaryKey: false;
|
|
1623
|
+
isAutoincrement: false;
|
|
1624
|
+
hasRuntimeDefault: false;
|
|
1625
|
+
enumValues: [string, ...string[]];
|
|
1626
|
+
baseColumn: never;
|
|
1627
|
+
identity: undefined;
|
|
1628
|
+
generated: undefined;
|
|
1629
|
+
}, {}, {}>;
|
|
1630
|
+
refusalFindings: import("drizzle-orm/pg-core").PgColumn<{
|
|
1631
|
+
name: "refusal_findings";
|
|
1632
|
+
tableName: "plugin_kept_setup_images";
|
|
1633
|
+
dataType: "json";
|
|
1634
|
+
columnType: "PgJsonb";
|
|
1635
|
+
data: unknown[];
|
|
1636
|
+
driverParam: unknown;
|
|
1637
|
+
notNull: true;
|
|
1638
|
+
hasDefault: true;
|
|
1639
|
+
isPrimaryKey: false;
|
|
1640
|
+
isAutoincrement: false;
|
|
1641
|
+
hasRuntimeDefault: false;
|
|
1642
|
+
enumValues: undefined;
|
|
1643
|
+
baseColumn: never;
|
|
1644
|
+
identity: undefined;
|
|
1645
|
+
generated: undefined;
|
|
1646
|
+
}, {}, {
|
|
1647
|
+
$type: unknown[];
|
|
1648
|
+
}>;
|
|
1649
|
+
build: import("drizzle-orm/pg-core").PgColumn<{
|
|
1650
|
+
name: "build";
|
|
1651
|
+
tableName: "plugin_kept_setup_images";
|
|
1652
|
+
dataType: "json";
|
|
1653
|
+
columnType: "PgJsonb";
|
|
1654
|
+
data: KeptSetupImageBuild;
|
|
1655
|
+
driverParam: unknown;
|
|
1656
|
+
notNull: true;
|
|
1657
|
+
hasDefault: false;
|
|
1658
|
+
isPrimaryKey: false;
|
|
1659
|
+
isAutoincrement: false;
|
|
1660
|
+
hasRuntimeDefault: false;
|
|
1661
|
+
enumValues: undefined;
|
|
1662
|
+
baseColumn: never;
|
|
1663
|
+
identity: undefined;
|
|
1664
|
+
generated: undefined;
|
|
1665
|
+
}, {}, {
|
|
1666
|
+
$type: KeptSetupImageBuild;
|
|
1667
|
+
}>;
|
|
1668
|
+
keptBy: import("drizzle-orm/pg-core").PgColumn<{
|
|
1669
|
+
name: "kept_by";
|
|
1670
|
+
tableName: "plugin_kept_setup_images";
|
|
1671
|
+
dataType: "string";
|
|
1672
|
+
columnType: "PgText";
|
|
1673
|
+
data: string;
|
|
1674
|
+
driverParam: string;
|
|
1675
|
+
notNull: true;
|
|
1676
|
+
hasDefault: false;
|
|
1677
|
+
isPrimaryKey: false;
|
|
1678
|
+
isAutoincrement: false;
|
|
1679
|
+
hasRuntimeDefault: false;
|
|
1680
|
+
enumValues: [string, ...string[]];
|
|
1681
|
+
baseColumn: never;
|
|
1682
|
+
identity: undefined;
|
|
1683
|
+
generated: undefined;
|
|
1684
|
+
}, {}, {}>;
|
|
1685
|
+
keptAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
1686
|
+
name: "kept_at";
|
|
1687
|
+
tableName: "plugin_kept_setup_images";
|
|
1688
|
+
dataType: "date";
|
|
1689
|
+
columnType: "PgTimestamp";
|
|
1690
|
+
data: Date;
|
|
1691
|
+
driverParam: string;
|
|
1692
|
+
notNull: true;
|
|
1693
|
+
hasDefault: true;
|
|
1694
|
+
isPrimaryKey: false;
|
|
1695
|
+
isAutoincrement: false;
|
|
1696
|
+
hasRuntimeDefault: false;
|
|
1697
|
+
enumValues: undefined;
|
|
1698
|
+
baseColumn: never;
|
|
1699
|
+
identity: undefined;
|
|
1700
|
+
generated: undefined;
|
|
1701
|
+
}, {}, {}>;
|
|
1702
|
+
expiresAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
1703
|
+
name: "expires_at";
|
|
1704
|
+
tableName: "plugin_kept_setup_images";
|
|
1705
|
+
dataType: "date";
|
|
1706
|
+
columnType: "PgTimestamp";
|
|
1707
|
+
data: Date;
|
|
1708
|
+
driverParam: string;
|
|
1709
|
+
notNull: true;
|
|
1710
|
+
hasDefault: false;
|
|
1711
|
+
isPrimaryKey: false;
|
|
1712
|
+
isAutoincrement: false;
|
|
1713
|
+
hasRuntimeDefault: false;
|
|
1714
|
+
enumValues: undefined;
|
|
1715
|
+
baseColumn: never;
|
|
1716
|
+
identity: undefined;
|
|
1717
|
+
generated: undefined;
|
|
1718
|
+
}, {}, {}>;
|
|
1719
|
+
};
|
|
1720
|
+
dialect: 'pg';
|
|
1721
|
+
}>;
|
|
1722
|
+
export type PluginKeptSetupImage = typeof pluginKeptSetupImage.$inferSelect;
|
|
1723
|
+
export type PluginKeptSetupImageInsert = typeof pluginKeptSetupImage.$inferInsert;
|
|
1459
1724
|
/**
|
|
1460
1725
|
* TypeScript types representing database rows
|
|
1461
1726
|
*/
|