@pipeline-builder/pipeline-data 4.3.2 → 4.3.4

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.
Files changed (56) hide show
  1. package/lib/api/crud-service.d.ts +7 -0
  2. package/lib/api/crud-service.js +14 -3
  3. package/lib/api/ecosystem-privacy.d.ts +25 -0
  4. package/lib/api/ecosystem-privacy.js +58 -0
  5. package/lib/api/pipeline-step-resolution.d.ts +111 -0
  6. package/lib/api/pipeline-step-resolution.js +163 -0
  7. package/lib/api/plugin-consumption-policy.d.ts +8 -2
  8. package/lib/api/plugin-consumption-policy.js +20 -3
  9. package/lib/api/plugin-resolution.d.ts +26 -9
  10. package/lib/api/plugin-resolution.js +51 -33
  11. package/lib/api/public-directory.js +1 -1
  12. package/lib/api/reporting/analytics-queries.d.ts +6 -4
  13. package/lib/api/reporting/analytics-queries.js +15 -14
  14. package/lib/api/reporting/deploy-rollup.d.ts +2 -0
  15. package/lib/api/reporting/deploy-rollup.js +5 -1
  16. package/lib/api/reporting/failure-classifier.d.ts +2 -6
  17. package/lib/api/reporting/failure-classifier.js +22 -1
  18. package/lib/api/reporting/ingest.js +73 -16
  19. package/lib/api/reporting/plugin-exposure.d.ts +261 -15
  20. package/lib/api/reporting/plugin-exposure.js +423 -38
  21. package/lib/api/reporting/stakeholder/compose.d.ts +1 -1
  22. package/lib/api/reporting/stakeholder/compose.js +30 -1
  23. package/lib/api/reporting/stakeholder/store.d.ts +16 -2
  24. package/lib/api/reporting/stakeholder/store.js +17 -6
  25. package/lib/api/reporting/types.d.ts +80 -1
  26. package/lib/api/reporting/types.js +1 -1
  27. package/lib/api/reporting-service.d.ts +11 -4
  28. package/lib/api/reporting-service.js +106 -43
  29. package/lib/api/soft-delete-sweep.d.ts +8 -18
  30. package/lib/api/soft-delete-sweep.js +35 -5
  31. package/lib/api/support-cases.d.ts +380 -0
  32. package/lib/api/support-cases.js +671 -0
  33. package/lib/api/version-references.d.ts +80 -0
  34. package/lib/api/version-references.js +135 -0
  35. package/lib/core/query-filters.d.ts +3 -3
  36. package/lib/core/query-filters.js +1 -1
  37. package/lib/database/drizzle-schema.d.ts +4858 -2759
  38. package/lib/database/drizzle-schema.js +13 -3
  39. package/lib/database/index.d.ts +1 -1
  40. package/lib/database/index.js +2 -2
  41. package/lib/database/schema/ecosystem.d.ts +53 -0
  42. package/lib/database/schema/ecosystem.js +14 -3
  43. package/lib/database/schema/pipeline.d.ts +38 -0
  44. package/lib/database/schema/pipeline.js +20 -2
  45. package/lib/database/schema/plugin.d.ts +265 -0
  46. package/lib/database/schema/plugin.js +34 -3
  47. package/lib/database/schema/reporting-analytics.d.ts +786 -4
  48. package/lib/database/schema/reporting-analytics.js +111 -5
  49. package/lib/database/schema/support.d.ts +1093 -0
  50. package/lib/database/schema/support.js +323 -0
  51. package/lib/database/tenancy.d.ts +7 -5
  52. package/lib/database/tenancy.js +1 -1
  53. package/lib/index.d.ts +7 -3
  54. package/lib/index.js +11 -3
  55. package/lib/testing/exports.json +57 -0
  56. 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 (`org:settings`, the same gate as the rest of the
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
  */