@payloadcms/db-mongodb 1.5.2 → 1.7.0

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/dist/count.js +2 -2
  2. package/dist/create.d.ts.map +1 -1
  3. package/dist/create.js +5 -7
  4. package/dist/createGlobal.d.ts.map +1 -1
  5. package/dist/createGlobal.js +3 -5
  6. package/dist/createGlobalVersion.d.ts.map +1 -1
  7. package/dist/createGlobalVersion.js +10 -6
  8. package/dist/createVersion.js +10 -6
  9. package/dist/deleteMany.js +2 -2
  10. package/dist/deleteOne.d.ts.map +1 -1
  11. package/dist/deleteOne.js +5 -8
  12. package/dist/deleteVersions.js +2 -2
  13. package/dist/find.d.ts.map +1 -1
  14. package/dist/find.js +9 -5
  15. package/dist/findGlobal.d.ts.map +1 -1
  16. package/dist/findGlobal.js +6 -4
  17. package/dist/findGlobalVersions.d.ts.map +1 -1
  18. package/dist/findGlobalVersions.js +9 -5
  19. package/dist/findOne.d.ts.map +1 -1
  20. package/dist/findOne.js +6 -8
  21. package/dist/findVersions.d.ts.map +1 -1
  22. package/dist/findVersions.js +9 -5
  23. package/dist/index.d.ts +42 -3
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +6 -2
  26. package/dist/init.d.ts.map +1 -1
  27. package/dist/init.js +11 -7
  28. package/dist/models/buildCollectionSchema.d.ts +2 -2
  29. package/dist/models/buildCollectionSchema.d.ts.map +1 -1
  30. package/dist/models/buildCollectionSchema.js +7 -6
  31. package/dist/models/buildGlobalModel.d.ts +2 -2
  32. package/dist/models/buildGlobalModel.d.ts.map +1 -1
  33. package/dist/models/buildGlobalModel.js +10 -6
  34. package/dist/models/buildSchema.d.ts +2 -2
  35. package/dist/models/buildSchema.d.ts.map +1 -1
  36. package/dist/models/buildSchema.js +72 -62
  37. package/dist/queryDrafts.d.ts.map +1 -1
  38. package/dist/queryDrafts.js +9 -3
  39. package/dist/transactions/commitTransaction.d.ts.map +1 -1
  40. package/dist/transactions/commitTransaction.js +2 -1
  41. package/dist/transactions/rollbackTransaction.d.ts.map +1 -1
  42. package/dist/transactions/rollbackTransaction.js +14 -8
  43. package/dist/updateGlobal.d.ts.map +1 -1
  44. package/dist/updateGlobal.js +3 -5
  45. package/dist/updateGlobalVersion.d.ts.map +1 -1
  46. package/dist/updateGlobalVersion.js +12 -8
  47. package/dist/updateOne.d.ts.map +1 -1
  48. package/dist/updateOne.js +4 -6
  49. package/dist/updateVersion.d.ts.map +1 -1
  50. package/dist/updateVersion.js +12 -8
  51. package/dist/utilities/sanitizeInternalFields.d.ts.map +1 -1
  52. package/dist/utilities/sanitizeInternalFields.js +7 -4
  53. package/dist/withSession.d.ts +3 -2
  54. package/dist/withSession.d.ts.map +1 -1
  55. package/dist/withSession.js +7 -3
  56. package/package.json +3 -3
@@ -28,10 +28,10 @@ const formatBaseSchema = (field, buildSchemaOptions)=>{
28
28
  const localizeSchema = (entity, schema, localization)=>{
29
29
  if ((0, _types.fieldIsLocalized)(entity) && localization && Array.isArray(localization.locales)) {
30
30
  return {
31
- type: localization.localeCodes.reduce((localeSchema, locale)=>({
32
- ...localeSchema,
33
- [locale]: schema
34
- }), {
31
+ type: localization.localeCodes.reduce((localeSchema, locale)=>{
32
+ localeSchema[locale] = schema;
33
+ return localeSchema;
34
+ }, {
35
35
  _id: false
36
36
  }),
37
37
  localized: true
@@ -39,7 +39,7 @@ const localizeSchema = (entity, schema, localization)=>{
39
39
  }
40
40
  return schema;
41
41
  };
42
- const buildSchema = (config, configFields, buildSchemaOptions = {})=>{
42
+ const buildSchema = (adapter, configFields, buildSchemaOptions = {})=>{
43
43
  const { allowIDField, options } = buildSchemaOptions;
44
44
  let fields = {};
45
45
  let schemaFields = configFields;
@@ -57,60 +57,66 @@ const buildSchema = (config, configFields, buildSchemaOptions = {})=>{
57
57
  if (!(0, _types.fieldIsPresentationalOnly)(field)) {
58
58
  const addFieldSchema = fieldToSchemaMap[field.type];
59
59
  if (addFieldSchema) {
60
- addFieldSchema(field, schema, config, buildSchemaOptions);
60
+ addFieldSchema(field, schema, adapter, buildSchemaOptions);
61
61
  }
62
62
  }
63
63
  });
64
64
  return schema;
65
65
  };
66
66
  const fieldToSchemaMap = {
67
- array: (field, schema, config, buildSchemaOptions)=>{
67
+ array: (field, schema, adapter, buildSchemaOptions)=>{
68
68
  const baseSchema = {
69
69
  ...formatBaseSchema(field, buildSchemaOptions),
70
70
  type: [
71
- buildSchema(config, field.fields, {
71
+ buildSchema(adapter, field.fields, {
72
72
  allowIDField: true,
73
73
  disableUnique: buildSchemaOptions.disableUnique,
74
74
  draftsEnabled: buildSchemaOptions.draftsEnabled,
75
75
  options: {
76
+ minimize: false,
77
+ ...buildSchemaOptions.options || {},
76
78
  _id: false,
77
79
  id: false,
78
- minimize: false
80
+ timestamps: false
79
81
  }
80
82
  })
81
83
  ],
82
84
  default: undefined
83
85
  };
84
86
  schema.add({
85
- [field.name]: localizeSchema(field, baseSchema, config.localization)
87
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
86
88
  });
87
89
  },
88
- blocks: (field, schema, config, buildSchemaOptions)=>{
90
+ blocks: (field, schema, adapter, buildSchemaOptions)=>{
89
91
  const fieldSchema = {
90
92
  type: [
91
93
  new _mongoose.Schema({}, {
92
94
  _id: false,
93
- discriminatorKey: 'blockType'
95
+ discriminatorKey: 'blockType',
96
+ ...buildSchemaOptions.options || {},
97
+ timestamps: false
94
98
  })
95
99
  ],
96
100
  default: undefined
97
101
  };
98
102
  schema.add({
99
- [field.name]: localizeSchema(field, fieldSchema, config.localization)
103
+ [field.name]: localizeSchema(field, fieldSchema, adapter.payload.config.localization)
100
104
  });
101
105
  field.blocks.forEach((blockItem)=>{
102
106
  const blockSchema = new _mongoose.Schema({}, {
107
+ ...buildSchemaOptions.options || {},
103
108
  _id: false,
104
- id: false
109
+ id: false,
110
+ timestamps: false
105
111
  });
106
112
  blockItem.fields.forEach((blockField)=>{
107
113
  const addFieldSchema = fieldToSchemaMap[blockField.type];
108
114
  if (addFieldSchema) {
109
- addFieldSchema(blockField, blockSchema, config, buildSchemaOptions);
115
+ addFieldSchema(blockField, blockSchema, adapter, buildSchemaOptions);
110
116
  }
111
117
  });
112
- if (field.localized && config.localization) {
113
- config.localization.localeCodes.forEach((localeCode)=>{
118
+ if (field.localized && adapter.payload.config.localization) {
119
+ adapter.payload.config.localization.localeCodes.forEach((localeCode)=>{
114
120
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
115
121
  // @ts-expect-error Possible incorrect typing in mongoose types, this works
116
122
  schema.path(`${field.name}.${localeCode}`).discriminator(blockItem.slug, blockSchema);
@@ -122,81 +128,83 @@ const fieldToSchemaMap = {
122
128
  }
123
129
  });
124
130
  },
125
- checkbox: (field, schema, config, buildSchemaOptions)=>{
131
+ checkbox: (field, schema, adapter, buildSchemaOptions)=>{
126
132
  const baseSchema = {
127
133
  ...formatBaseSchema(field, buildSchemaOptions),
128
134
  type: Boolean
129
135
  };
130
136
  schema.add({
131
- [field.name]: localizeSchema(field, baseSchema, config.localization)
137
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
132
138
  });
133
139
  },
134
- code: (field, schema, config, buildSchemaOptions)=>{
140
+ code: (field, schema, adapter, buildSchemaOptions)=>{
135
141
  const baseSchema = {
136
142
  ...formatBaseSchema(field, buildSchemaOptions),
137
143
  type: String
138
144
  };
139
145
  schema.add({
140
- [field.name]: localizeSchema(field, baseSchema, config.localization)
146
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
141
147
  });
142
148
  },
143
- collapsible: (field, schema, config, buildSchemaOptions)=>{
149
+ collapsible: (field, schema, adapter, buildSchemaOptions)=>{
144
150
  field.fields.forEach((subField)=>{
145
151
  const addFieldSchema = fieldToSchemaMap[subField.type];
146
152
  if (addFieldSchema) {
147
- addFieldSchema(subField, schema, config, buildSchemaOptions);
153
+ addFieldSchema(subField, schema, adapter, buildSchemaOptions);
148
154
  }
149
155
  });
150
156
  },
151
- date: (field, schema, config, buildSchemaOptions)=>{
157
+ date: (field, schema, adapter, buildSchemaOptions)=>{
152
158
  const baseSchema = {
153
159
  ...formatBaseSchema(field, buildSchemaOptions),
154
160
  type: Date
155
161
  };
156
162
  schema.add({
157
- [field.name]: localizeSchema(field, baseSchema, config.localization)
163
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
158
164
  });
159
165
  },
160
- email: (field, schema, config, buildSchemaOptions)=>{
166
+ email: (field, schema, adapter, buildSchemaOptions)=>{
161
167
  const baseSchema = {
162
168
  ...formatBaseSchema(field, buildSchemaOptions),
163
169
  type: String
164
170
  };
165
171
  schema.add({
166
- [field.name]: localizeSchema(field, baseSchema, config.localization)
172
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
167
173
  });
168
174
  },
169
- group: (field, schema, config, buildSchemaOptions)=>{
175
+ group: (field, schema, adapter, buildSchemaOptions)=>{
170
176
  const formattedBaseSchema = formatBaseSchema(field, buildSchemaOptions);
171
177
  // carry indexSortableFields through to versions if drafts enabled
172
178
  const indexSortableFields = buildSchemaOptions.indexSortableFields && field.name === 'version' && buildSchemaOptions.draftsEnabled;
173
179
  const baseSchema = {
174
180
  ...formattedBaseSchema,
175
- type: buildSchema(config, field.fields, {
181
+ type: buildSchema(adapter, field.fields, {
176
182
  disableUnique: buildSchemaOptions.disableUnique,
177
183
  draftsEnabled: buildSchemaOptions.draftsEnabled,
178
184
  indexSortableFields,
179
185
  options: {
186
+ minimize: false,
187
+ ...buildSchemaOptions.options || {},
180
188
  _id: false,
181
189
  id: false,
182
- minimize: false
190
+ timestamps: false
183
191
  }
184
192
  })
185
193
  };
186
194
  schema.add({
187
- [field.name]: localizeSchema(field, baseSchema, config.localization)
195
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
188
196
  });
189
197
  },
190
- json: (field, schema, config, buildSchemaOptions)=>{
198
+ json: (field, schema, adapter, buildSchemaOptions)=>{
191
199
  const baseSchema = {
192
200
  ...formatBaseSchema(field, buildSchemaOptions),
193
201
  type: _mongoose.Schema.Types.Mixed
194
202
  };
195
203
  schema.add({
196
- [field.name]: localizeSchema(field, baseSchema, config.localization)
204
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
197
205
  });
198
206
  },
199
- number: (field, schema, config, buildSchemaOptions)=>{
207
+ number: (field, schema, adapter, buildSchemaOptions)=>{
200
208
  const baseSchema = {
201
209
  ...formatBaseSchema(field, buildSchemaOptions),
202
210
  type: field.hasMany ? [
@@ -204,10 +212,10 @@ const fieldToSchemaMap = {
204
212
  ] : Number
205
213
  };
206
214
  schema.add({
207
- [field.name]: localizeSchema(field, baseSchema, config.localization)
215
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
208
216
  });
209
217
  },
210
- point: (field, schema, config, buildSchemaOptions)=>{
218
+ point: (field, schema, adapter, buildSchemaOptions)=>{
211
219
  const baseSchema = {
212
220
  type: {
213
221
  type: String,
@@ -227,7 +235,7 @@ const fieldToSchemaMap = {
227
235
  baseSchema.coordinates.sparse = true;
228
236
  }
229
237
  schema.add({
230
- [field.name]: localizeSchema(field, baseSchema, config.localization)
238
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
231
239
  });
232
240
  if (field.index === true || field.index === undefined) {
233
241
  const indexOptions = {};
@@ -235,8 +243,8 @@ const fieldToSchemaMap = {
235
243
  indexOptions.sparse = true;
236
244
  indexOptions.unique = true;
237
245
  }
238
- if (field.localized && config.localization) {
239
- config.localization.locales.forEach((locale)=>{
246
+ if (field.localized && adapter.payload.config.localization) {
247
+ adapter.payload.config.localization.locales.forEach((locale)=>{
240
248
  schema.index({
241
249
  [`${field.name}.${locale.code}`]: '2dsphere'
242
250
  }, indexOptions);
@@ -248,7 +256,7 @@ const fieldToSchemaMap = {
248
256
  }
249
257
  }
250
258
  },
251
- radio: (field, schema, config, buildSchemaOptions)=>{
259
+ radio: (field, schema, adapter, buildSchemaOptions)=>{
252
260
  const baseSchema = {
253
261
  ...formatBaseSchema(field, buildSchemaOptions),
254
262
  type: String,
@@ -258,15 +266,15 @@ const fieldToSchemaMap = {
258
266
  })
259
267
  };
260
268
  schema.add({
261
- [field.name]: localizeSchema(field, baseSchema, config.localization)
269
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
262
270
  });
263
271
  },
264
- relationship: (field, schema, config, buildSchemaOptions)=>{
272
+ relationship: (field, schema, adapter, buildSchemaOptions)=>{
265
273
  const hasManyRelations = Array.isArray(field.relationTo);
266
274
  let schemaToReturn = {};
267
- if (field.localized && config.localization) {
275
+ if (field.localized && adapter.payload.config.localization) {
268
276
  schemaToReturn = {
269
- type: config.localization.localeCodes.reduce((locales, locale)=>{
277
+ type: adapter.payload.config.localization.localeCodes.reduce((locales, locale)=>{
270
278
  let localeSchema = {};
271
279
  if (hasManyRelations) {
272
280
  localeSchema = {
@@ -342,24 +350,24 @@ const fieldToSchemaMap = {
342
350
  [field.name]: schemaToReturn
343
351
  });
344
352
  },
345
- richText: (field, schema, config, buildSchemaOptions)=>{
353
+ richText: (field, schema, adapter, buildSchemaOptions)=>{
346
354
  const baseSchema = {
347
355
  ...formatBaseSchema(field, buildSchemaOptions),
348
356
  type: _mongoose.Schema.Types.Mixed
349
357
  };
350
358
  schema.add({
351
- [field.name]: localizeSchema(field, baseSchema, config.localization)
359
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
352
360
  });
353
361
  },
354
- row: (field, schema, config, buildSchemaOptions)=>{
362
+ row: (field, schema, adapter, buildSchemaOptions)=>{
355
363
  field.fields.forEach((subField)=>{
356
364
  const addFieldSchema = fieldToSchemaMap[subField.type];
357
365
  if (addFieldSchema) {
358
- addFieldSchema(subField, schema, config, buildSchemaOptions);
366
+ addFieldSchema(subField, schema, adapter, buildSchemaOptions);
359
367
  }
360
368
  });
361
369
  },
362
- select: (field, schema, config, buildSchemaOptions)=>{
370
+ select: (field, schema, adapter, buildSchemaOptions)=>{
363
371
  const baseSchema = {
364
372
  ...formatBaseSchema(field, buildSchemaOptions),
365
373
  type: String,
@@ -374,37 +382,39 @@ const fieldToSchemaMap = {
374
382
  schema.add({
375
383
  [field.name]: localizeSchema(field, field.hasMany ? [
376
384
  baseSchema
377
- ] : baseSchema, config.localization)
385
+ ] : baseSchema, adapter.payload.config.localization)
378
386
  });
379
387
  },
380
- tabs: (field, schema, config, buildSchemaOptions)=>{
388
+ tabs: (field, schema, adapter, buildSchemaOptions)=>{
381
389
  field.tabs.forEach((tab)=>{
382
390
  if ((0, _types.tabHasName)(tab)) {
383
391
  const baseSchema = {
384
- type: buildSchema(config, tab.fields, {
392
+ type: buildSchema(adapter, tab.fields, {
385
393
  disableUnique: buildSchemaOptions.disableUnique,
386
394
  draftsEnabled: buildSchemaOptions.draftsEnabled,
387
395
  options: {
396
+ minimize: false,
397
+ ...buildSchemaOptions.options || {},
388
398
  _id: false,
389
399
  id: false,
390
- minimize: false
400
+ timestamps: false
391
401
  }
392
402
  })
393
403
  };
394
404
  schema.add({
395
- [tab.name]: localizeSchema(tab, baseSchema, config.localization)
405
+ [tab.name]: localizeSchema(tab, baseSchema, adapter.payload.config.localization)
396
406
  });
397
407
  } else {
398
408
  tab.fields.forEach((subField)=>{
399
409
  const addFieldSchema = fieldToSchemaMap[subField.type];
400
410
  if (addFieldSchema) {
401
- addFieldSchema(subField, schema, config, buildSchemaOptions);
411
+ addFieldSchema(subField, schema, adapter, buildSchemaOptions);
402
412
  }
403
413
  });
404
414
  }
405
415
  });
406
416
  },
407
- text: (field, schema, config, buildSchemaOptions)=>{
417
+ text: (field, schema, adapter, buildSchemaOptions)=>{
408
418
  const baseSchema = {
409
419
  ...formatBaseSchema(field, buildSchemaOptions),
410
420
  type: field.hasMany ? [
@@ -412,29 +422,29 @@ const fieldToSchemaMap = {
412
422
  ] : String
413
423
  };
414
424
  schema.add({
415
- [field.name]: localizeSchema(field, baseSchema, config.localization)
425
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
416
426
  });
417
427
  },
418
- textarea: (field, schema, config, buildSchemaOptions)=>{
428
+ textarea: (field, schema, adapter, buildSchemaOptions)=>{
419
429
  const baseSchema = {
420
430
  ...formatBaseSchema(field, buildSchemaOptions),
421
431
  type: String
422
432
  };
423
433
  schema.add({
424
- [field.name]: localizeSchema(field, baseSchema, config.localization)
434
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
425
435
  });
426
436
  },
427
- upload: (field, schema, config, buildSchemaOptions)=>{
437
+ upload: (field, schema, adapter, buildSchemaOptions)=>{
428
438
  const baseSchema = {
429
439
  ...formatBaseSchema(field, buildSchemaOptions),
430
440
  type: _mongoose.Schema.Types.Mixed,
431
441
  ref: field.relationTo
432
442
  };
433
443
  schema.add({
434
- [field.name]: localizeSchema(field, baseSchema, config.localization)
444
+ [field.name]: localizeSchema(field, baseSchema, adapter.payload.config.localization)
435
445
  });
436
446
  }
437
447
  };
438
448
  const _default = buildSchema;
439
449
 
440
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvYnVpbGRTY2hlbWEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG5pbXBvcnQgdHlwZSB7IEluZGV4T3B0aW9ucywgU2NoZW1hT3B0aW9ucywgU2NoZW1hVHlwZU9wdGlvbnMgfSBmcm9tICdtb25nb29zZSdcbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29uZmlnLCBTYW5pdGl6ZWRMb2NhbGl6YXRpb25Db25maWcgfSBmcm9tICdwYXlsb2FkL2NvbmZpZydcbmltcG9ydCB0eXBlIHtcbiAgQXJyYXlGaWVsZCxcbiAgQmxvY2ssXG4gIEJsb2NrRmllbGQsXG4gIENoZWNrYm94RmllbGQsXG4gIENvZGVGaWVsZCxcbiAgQ29sbGFwc2libGVGaWVsZCxcbiAgRGF0ZUZpZWxkLFxuICBFbWFpbEZpZWxkLFxuICBGaWVsZCxcbiAgRmllbGRBZmZlY3RpbmdEYXRhLFxuICBHcm91cEZpZWxkLFxuICBKU09ORmllbGQsXG4gIE5vblByZXNlbnRhdGlvbmFsRmllbGQsXG4gIE51bWJlckZpZWxkLFxuICBQb2ludEZpZWxkLFxuICBSYWRpb0ZpZWxkLFxuICBSZWxhdGlvbnNoaXBGaWVsZCxcbiAgUmljaFRleHRGaWVsZCxcbiAgUm93RmllbGQsXG4gIFNlbGVjdEZpZWxkLFxuICBUYWIsXG4gIFRhYnNGaWVsZCxcbiAgVGV4dEZpZWxkLFxuICBUZXh0YXJlYUZpZWxkLFxuICBVcGxvYWRGaWVsZCxcbn0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSAnbW9uZ29vc2UnXG5pbXBvcnQge1xuICBmaWVsZEFmZmVjdHNEYXRhLFxuICBmaWVsZElzTG9jYWxpemVkLFxuICBmaWVsZElzUHJlc2VudGF0aW9uYWxPbmx5LFxuICB0YWJIYXNOYW1lLFxufSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSBCdWlsZFNjaGVtYU9wdGlvbnMgPSB7XG4gIGFsbG93SURGaWVsZD86IGJvb2xlYW5cbiAgZGlzYWJsZVVuaXF1ZT86IGJvb2xlYW5cbiAgZHJhZnRzRW5hYmxlZD86IGJvb2xlYW5cbiAgaW5kZXhTb3J0YWJsZUZpZWxkcz86IGJvb2xlYW5cbiAgb3B0aW9ucz86IFNjaGVtYU9wdGlvbnNcbn1cblxudHlwZSBGaWVsZFNjaGVtYUdlbmVyYXRvciA9IChcbiAgZmllbGQ6IEZpZWxkLFxuICBzY2hlbWE6IFNjaGVtYSxcbiAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWcsXG4gIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuKSA9PiB2b2lkXG5cbmNvbnN0IGZvcm1hdEJhc2VTY2hlbWEgPSAoZmllbGQ6IEZpZWxkQWZmZWN0aW5nRGF0YSwgYnVpbGRTY2hlbWFPcHRpb25zOiBCdWlsZFNjaGVtYU9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBkaXNhYmxlVW5pcXVlLCBkcmFmdHNFbmFibGVkLCBpbmRleFNvcnRhYmxlRmllbGRzIH0gPSBidWlsZFNjaGVtYU9wdGlvbnNcbiAgY29uc3Qgc2NoZW1hOiBTY2hlbWFUeXBlT3B0aW9uczx1bmtub3duPiA9IHtcbiAgICBpbmRleDogZmllbGQuaW5kZXggfHwgKCFkaXNhYmxlVW5pcXVlICYmIGZpZWxkLnVuaXF1ZSkgfHwgaW5kZXhTb3J0YWJsZUZpZWxkcyB8fCBmYWxzZSxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgdW5pcXVlOiAoIWRpc2FibGVVbmlxdWUgJiYgZmllbGQudW5pcXVlKSB8fCBmYWxzZSxcbiAgfVxuXG4gIGlmIChcbiAgICBzY2hlbWEudW5pcXVlICYmXG4gICAgKGZpZWxkLmxvY2FsaXplZCB8fFxuICAgICAgZHJhZnRzRW5hYmxlZCB8fFxuICAgICAgKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmXG4gICAgICAgIGZpZWxkLnR5cGUgIT09ICdncm91cCcgJiZcbiAgICAgICAgZmllbGQudHlwZSAhPT0gJ3RhYicgJiZcbiAgICAgICAgZmllbGQucmVxdWlyZWQgIT09IHRydWUpKVxuICApIHtcbiAgICBzY2hlbWEuc3BhcnNlID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGZpZWxkLmhpZGRlbikge1xuICAgIHNjaGVtYS5oaWRkZW4gPSB0cnVlXG4gIH1cblxuICByZXR1cm4gc2NoZW1hXG59XG5cbmNvbnN0IGxvY2FsaXplU2NoZW1hID0gKFxuICBlbnRpdHk6IE5vblByZXNlbnRhdGlvbmFsRmllbGQgfCBUYWIsXG4gIHNjaGVtYSxcbiAgbG9jYWxpemF0aW9uOiBTYW5pdGl6ZWRMb2NhbGl6YXRpb25Db25maWcgfCBmYWxzZSxcbikgPT4ge1xuICBpZiAoZmllbGRJc0xvY2FsaXplZChlbnRpdHkpICYmIGxvY2FsaXphdGlvbiAmJiBBcnJheS5pc0FycmF5KGxvY2FsaXphdGlvbi5sb2NhbGVzKSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBsb2NhbGl6YXRpb24ubG9jYWxlQ29kZXMucmVkdWNlKFxuICAgICAgICAobG9jYWxlU2NoZW1hLCBsb2NhbGUpID0+ICh7XG4gICAgICAgICAgLi4ubG9jYWxlU2NoZW1hLFxuICAgICAgICAgIFtsb2NhbGVdOiBzY2hlbWEsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgX2lkOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgICBsb2NhbGl6ZWQ6IHRydWUsXG4gICAgfVxuICB9XG4gIHJldHVybiBzY2hlbWFcbn1cblxuY29uc3QgYnVpbGRTY2hlbWEgPSAoXG4gIGNvbmZpZzogU2FuaXRpemVkQ29uZmlnLFxuICBjb25maWdGaWVsZHM6IEZpZWxkW10sXG4gIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zID0ge30sXG4pOiBTY2hlbWEgPT4ge1xuICBjb25zdCB7IGFsbG93SURGaWVsZCwgb3B0aW9ucyB9ID0gYnVpbGRTY2hlbWFPcHRpb25zXG4gIGxldCBmaWVsZHMgPSB7fVxuXG4gIGxldCBzY2hlbWFGaWVsZHMgPSBjb25maWdGaWVsZHNcblxuICBpZiAoIWFsbG93SURGaWVsZCkge1xuICAgIGNvbnN0IGlkRmllbGQgPSBzY2hlbWFGaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpXG4gICAgaWYgKGlkRmllbGQpIHtcbiAgICAgIGZpZWxkcyA9IHtcbiAgICAgICAgX2lkOiBpZEZpZWxkLnR5cGUgPT09ICdudW1iZXInID8gTnVtYmVyIDogU3RyaW5nLFxuICAgICAgfVxuICAgICAgc2NoZW1hRmllbGRzID0gc2NoZW1hRmllbGRzLmZpbHRlcihcbiAgICAgICAgKGZpZWxkKSA9PiAhKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjaGVtYSA9IG5ldyBTY2hlbWEoZmllbGRzLCBvcHRpb25zKVxuXG4gIHNjaGVtYUZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgIGlmICghZmllbGRJc1ByZXNlbnRhdGlvbmFsT25seShmaWVsZCkpIHtcbiAgICAgIGNvbnN0IGFkZEZpZWxkU2NoZW1hOiBGaWVsZFNjaGVtYUdlbmVyYXRvciA9IGZpZWxkVG9TY2hlbWFNYXBbZmllbGQudHlwZV1cblxuICAgICAgaWYgKGFkZEZpZWxkU2NoZW1hKSB7XG4gICAgICAgIGFkZEZpZWxkU2NoZW1hKGZpZWxkLCBzY2hlbWEsIGNvbmZpZywgYnVpbGRTY2hlbWFPcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gc2NoZW1hXG59XG5cbmNvbnN0IGZpZWxkVG9TY2hlbWFNYXA6IFJlY29yZDxzdHJpbmcsIEZpZWxkU2NoZW1hR2VuZXJhdG9yPiA9IHtcbiAgYXJyYXk6IChcbiAgICBmaWVsZDogQXJyYXlGaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKSA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHtcbiAgICAgIC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksXG4gICAgICB0eXBlOiBbXG4gICAgICAgIGJ1aWxkU2NoZW1hKGNvbmZpZywgZmllbGQuZmllbGRzLCB7XG4gICAgICAgICAgYWxsb3dJREZpZWxkOiB0cnVlLFxuICAgICAgICAgIGRpc2FibGVVbmlxdWU6IGJ1aWxkU2NoZW1hT3B0aW9ucy5kaXNhYmxlVW5pcXVlLFxuICAgICAgICAgIGRyYWZ0c0VuYWJsZWQ6IGJ1aWxkU2NoZW1hT3B0aW9ucy5kcmFmdHNFbmFibGVkLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIF9pZDogZmFsc2UsXG4gICAgICAgICAgICBpZDogZmFsc2UsXG4gICAgICAgICAgICBtaW5pbWl6ZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYShmaWVsZCwgYmFzZVNjaGVtYSwgY29uZmlnLmxvY2FsaXphdGlvbiksXG4gICAgfSlcbiAgfSxcbiAgYmxvY2tzOiAoXG4gICAgZmllbGQ6IEJsb2NrRmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWcsXG4gICAgYnVpbGRTY2hlbWFPcHRpb25zOiBCdWlsZFNjaGVtYU9wdGlvbnMsXG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGZpZWxkU2NoZW1hID0ge1xuICAgICAgdHlwZTogW25ldyBTY2hlbWEoe30sIHsgX2lkOiBmYWxzZSwgZGlzY3JpbWluYXRvcktleTogJ2Jsb2NrVHlwZScgfSldLFxuICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYShmaWVsZCwgZmllbGRTY2hlbWEsIGNvbmZpZy5sb2NhbGl6YXRpb24pLFxuICAgIH0pXG5cbiAgICBmaWVsZC5ibG9ja3MuZm9yRWFjaCgoYmxvY2tJdGVtOiBCbG9jaykgPT4ge1xuICAgICAgY29uc3QgYmxvY2tTY2hlbWEgPSBuZXcgU2NoZW1hKHt9LCB7IF9pZDogZmFsc2UsIGlkOiBmYWxzZSB9KVxuXG4gICAgICBibG9ja0l0ZW0uZmllbGRzLmZvckVhY2goKGJsb2NrRmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgYWRkRmllbGRTY2hlbWE6IEZpZWxkU2NoZW1hR2VuZXJhdG9yID0gZmllbGRUb1NjaGVtYU1hcFtibG9ja0ZpZWxkLnR5cGVdXG4gICAgICAgIGlmIChhZGRGaWVsZFNjaGVtYSkge1xuICAgICAgICAgIGFkZEZpZWxkU2NoZW1hKGJsb2NrRmllbGQsIGJsb2NrU2NoZW1hLCBjb25maWcsIGJ1aWxkU2NoZW1hT3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBjb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgIGNvbmZpZy5sb2NhbGl6YXRpb24ubG9jYWxlQ29kZXMuZm9yRWFjaCgobG9jYWxlQ29kZSkgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFBvc3NpYmxlIGluY29ycmVjdCB0eXBpbmcgaW4gbW9uZ29vc2UgdHlwZXMsIHRoaXMgd29ya3NcbiAgICAgICAgICBzY2hlbWEucGF0aChgJHtmaWVsZC5uYW1lfS4ke2xvY2FsZUNvZGV9YCkuZGlzY3JpbWluYXRvcihibG9ja0l0ZW0uc2x1ZywgYmxvY2tTY2hlbWEpXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUG9zc2libGUgaW5jb3JyZWN0IHR5cGluZyBpbiBtb25nb29zZSB0eXBlcywgdGhpcyB3b3Jrc1xuICAgICAgICBzY2hlbWEucGF0aChmaWVsZC5uYW1lKS5kaXNjcmltaW5hdG9yKGJsb2NrSXRlbS5zbHVnLCBibG9ja1NjaGVtYSlcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuICBjaGVja2JveDogKFxuICAgIGZpZWxkOiBDaGVja2JveEZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGNvbmZpZzogU2FuaXRpemVkQ29uZmlnLFxuICAgIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBiYXNlU2NoZW1hID0geyAuLi5mb3JtYXRCYXNlU2NoZW1hKGZpZWxkLCBidWlsZFNjaGVtYU9wdGlvbnMpLCB0eXBlOiBCb29sZWFuIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYShmaWVsZCwgYmFzZVNjaGVtYSwgY29uZmlnLmxvY2FsaXphdGlvbiksXG4gICAgfSlcbiAgfSxcbiAgY29kZTogKFxuICAgIGZpZWxkOiBDb2RlRmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWcsXG4gICAgYnVpbGRTY2hlbWFPcHRpb25zOiBCdWlsZFNjaGVtYU9wdGlvbnMsXG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSB7IC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksIHR5cGU6IFN0cmluZyB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGNvbmZpZy5sb2NhbGl6YXRpb24pLFxuICAgIH0pXG4gIH0sXG4gIGNvbGxhcHNpYmxlOiAoXG4gICAgZmllbGQ6IENvbGxhcHNpYmxlRmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWcsXG4gICAgYnVpbGRTY2hlbWFPcHRpb25zOiBCdWlsZFNjaGVtYU9wdGlvbnMsXG4gICk6IHZvaWQgPT4ge1xuICAgIGZpZWxkLmZpZWxkcy5mb3JFYWNoKChzdWJGaWVsZDogRmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGFkZEZpZWxkU2NoZW1hOiBGaWVsZFNjaGVtYUdlbmVyYXRvciA9IGZpZWxkVG9TY2hlbWFNYXBbc3ViRmllbGQudHlwZV1cblxuICAgICAgaWYgKGFkZEZpZWxkU2NoZW1hKSB7XG4gICAgICAgIGFkZEZpZWxkU2NoZW1hKHN1YkZpZWxkLCBzY2hlbWEsIGNvbmZpZywgYnVpbGRTY2hlbWFPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIGRhdGU6IChcbiAgICBmaWVsZDogRGF0ZUZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGNvbmZpZzogU2FuaXRpemVkQ29uZmlnLFxuICAgIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBiYXNlU2NoZW1hID0geyAuLi5mb3JtYXRCYXNlU2NoZW1hKGZpZWxkLCBidWlsZFNjaGVtYU9wdGlvbnMpLCB0eXBlOiBEYXRlIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYShmaWVsZCwgYmFzZVNjaGVtYSwgY29uZmlnLmxvY2FsaXphdGlvbiksXG4gICAgfSlcbiAgfSxcbiAgZW1haWw6IChcbiAgICBmaWVsZDogRW1haWxGaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHsgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSwgdHlwZTogU3RyaW5nIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYShmaWVsZCwgYmFzZVNjaGVtYSwgY29uZmlnLmxvY2FsaXphdGlvbiksXG4gICAgfSlcbiAgfSxcbiAgZ3JvdXA6IChcbiAgICBmaWVsZDogR3JvdXBGaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgZm9ybWF0dGVkQmFzZVNjaGVtYSA9IGZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucylcblxuICAgIC8vIGNhcnJ5IGluZGV4U29ydGFibGVGaWVsZHMgdGhyb3VnaCB0byB2ZXJzaW9ucyBpZiBkcmFmdHMgZW5hYmxlZFxuICAgIGNvbnN0IGluZGV4U29ydGFibGVGaWVsZHMgPVxuICAgICAgYnVpbGRTY2hlbWFPcHRpb25zLmluZGV4U29ydGFibGVGaWVsZHMgJiZcbiAgICAgIGZpZWxkLm5hbWUgPT09ICd2ZXJzaW9uJyAmJlxuICAgICAgYnVpbGRTY2hlbWFPcHRpb25zLmRyYWZ0c0VuYWJsZWRcblxuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSB7XG4gICAgICAuLi5mb3JtYXR0ZWRCYXNlU2NoZW1hLFxuICAgICAgdHlwZTogYnVpbGRTY2hlbWEoY29uZmlnLCBmaWVsZC5maWVsZHMsIHtcbiAgICAgICAgZGlzYWJsZVVuaXF1ZTogYnVpbGRTY2hlbWFPcHRpb25zLmRpc2FibGVVbmlxdWUsXG4gICAgICAgIGRyYWZ0c0VuYWJsZWQ6IGJ1aWxkU2NoZW1hT3B0aW9ucy5kcmFmdHNFbmFibGVkLFxuICAgICAgICBpbmRleFNvcnRhYmxlRmllbGRzLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgX2lkOiBmYWxzZSxcbiAgICAgICAgICBpZDogZmFsc2UsXG4gICAgICAgICAgbWluaW1pemU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfVxuXG4gICAgc2NoZW1hLmFkZCh7XG4gICAgICBbZmllbGQubmFtZV06IGxvY2FsaXplU2NoZW1hKGZpZWxkLCBiYXNlU2NoZW1hLCBjb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxuICBqc29uOiAoXG4gICAgZmllbGQ6IEpTT05GaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHsgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSwgdHlwZTogU2NoZW1hLlR5cGVzLk1peGVkIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYShmaWVsZCwgYmFzZVNjaGVtYSwgY29uZmlnLmxvY2FsaXphdGlvbiksXG4gICAgfSlcbiAgfSxcbiAgbnVtYmVyOiAoXG4gICAgZmllbGQ6IE51bWJlckZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGNvbmZpZzogU2FuaXRpemVkQ29uZmlnLFxuICAgIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBiYXNlU2NoZW1hID0ge1xuICAgICAgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSxcbiAgICAgIHR5cGU6IGZpZWxkLmhhc01hbnkgPyBbTnVtYmVyXSA6IE51bWJlcixcbiAgICB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGNvbmZpZy5sb2NhbGl6YXRpb24pLFxuICAgIH0pXG4gIH0sXG4gIHBvaW50OiAoXG4gICAgZmllbGQ6IFBvaW50RmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWcsXG4gICAgYnVpbGRTY2hlbWFPcHRpb25zOiBCdWlsZFNjaGVtYU9wdGlvbnMsXG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGJhc2VTY2hlbWE6IFNjaGVtYVR5cGVPcHRpb25zPHVua25vd24+ID0ge1xuICAgICAgdHlwZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGVudW06IFsnUG9pbnQnXSxcbiAgICAgIH0sXG4gICAgICBjb29yZGluYXRlczoge1xuICAgICAgICB0eXBlOiBbTnVtYmVyXSxcbiAgICAgICAgZGVmYXVsdDogZmllbGQuZGVmYXVsdFZhbHVlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9XG4gICAgaWYgKGJ1aWxkU2NoZW1hT3B0aW9ucy5kaXNhYmxlVW5pcXVlICYmIGZpZWxkLnVuaXF1ZSAmJiBmaWVsZC5sb2NhbGl6ZWQpIHtcbiAgICAgIGJhc2VTY2hlbWEuY29vcmRpbmF0ZXMuc3BhcnNlID0gdHJ1ZVxuICAgIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYShmaWVsZCwgYmFzZVNjaGVtYSwgY29uZmlnLmxvY2FsaXphdGlvbiksXG4gICAgfSlcblxuICAgIGlmIChmaWVsZC5pbmRleCA9PT0gdHJ1ZSB8fCBmaWVsZC5pbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBpbmRleE9wdGlvbnM6IEluZGV4T3B0aW9ucyA9IHt9XG4gICAgICBpZiAoIWJ1aWxkU2NoZW1hT3B0aW9ucy5kaXNhYmxlVW5pcXVlICYmIGZpZWxkLnVuaXF1ZSkge1xuICAgICAgICBpbmRleE9wdGlvbnMuc3BhcnNlID0gdHJ1ZVxuICAgICAgICBpbmRleE9wdGlvbnMudW5pcXVlID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBjb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgIGNvbmZpZy5sb2NhbGl6YXRpb24ubG9jYWxlcy5mb3JFYWNoKChsb2NhbGUpID0+IHtcbiAgICAgICAgICBzY2hlbWEuaW5kZXgoeyBbYCR7ZmllbGQubmFtZX0uJHtsb2NhbGUuY29kZX1gXTogJzJkc3BoZXJlJyB9LCBpbmRleE9wdGlvbnMpXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWEuaW5kZXgoeyBbZmllbGQubmFtZV06ICcyZHNwaGVyZScgfSwgaW5kZXhPcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmFkaW86IChcbiAgICBmaWVsZDogUmFkaW9GaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHtcbiAgICAgIC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBlbnVtOiBmaWVsZC5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JykgcmV0dXJuIG9wdGlvbi52YWx1ZVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9KSxcbiAgICB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGNvbmZpZy5sb2NhbGl6YXRpb24pLFxuICAgIH0pXG4gIH0sXG4gIHJlbGF0aW9uc2hpcDogKFxuICAgIGZpZWxkOiBSZWxhdGlvbnNoaXBGaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKSA9PiB7XG4gICAgY29uc3QgaGFzTWFueVJlbGF0aW9ucyA9IEFycmF5LmlzQXJyYXkoZmllbGQucmVsYXRpb25UbylcbiAgICBsZXQgc2NoZW1hVG9SZXR1cm46IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fVxuXG4gICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBjb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICBzY2hlbWFUb1JldHVybiA9IHtcbiAgICAgICAgdHlwZTogY29uZmlnLmxvY2FsaXphdGlvbi5sb2NhbGVDb2Rlcy5yZWR1Y2UoKGxvY2FsZXMsIGxvY2FsZSkgPT4ge1xuICAgICAgICAgIGxldCBsb2NhbGVTY2hlbWE6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fVxuXG4gICAgICAgICAgaWYgKGhhc01hbnlSZWxhdGlvbnMpIHtcbiAgICAgICAgICAgIGxvY2FsZVNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSxcbiAgICAgICAgICAgICAgX2lkOiBmYWxzZSxcbiAgICAgICAgICAgICAgdHlwZTogU2NoZW1hLlR5cGVzLk1peGVkLFxuICAgICAgICAgICAgICByZWxhdGlvblRvOiB7IHR5cGU6IFN0cmluZywgZW51bTogZmllbGQucmVsYXRpb25UbyB9LFxuICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYS5UeXBlcy5NaXhlZCxcbiAgICAgICAgICAgICAgICByZWZQYXRoOiBgJHtmaWVsZC5uYW1lfS4ke2xvY2FsZX0ucmVsYXRpb25Ub2AsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvY2FsZVNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSxcbiAgICAgICAgICAgICAgdHlwZTogU2NoZW1hLlR5cGVzLk1peGVkLFxuICAgICAgICAgICAgICByZWY6IGZpZWxkLnJlbGF0aW9uVG8sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmxvY2FsZXMsXG4gICAgICAgICAgICBbbG9jYWxlXTogZmllbGQuaGFzTWFueSA/IHsgdHlwZTogW2xvY2FsZVNjaGVtYV0sIGRlZmF1bHQ6IHVuZGVmaW5lZCB9IDogbG9jYWxlU2NoZW1hLFxuICAgICAgICAgIH1cbiAgICAgICAgfSwge30pLFxuICAgICAgICBsb2NhbGl6ZWQ6IHRydWUsXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoYXNNYW55UmVsYXRpb25zKSB7XG4gICAgICBzY2hlbWFUb1JldHVybiA9IHtcbiAgICAgICAgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSxcbiAgICAgICAgX2lkOiBmYWxzZSxcbiAgICAgICAgdHlwZTogU2NoZW1hLlR5cGVzLk1peGVkLFxuICAgICAgICByZWxhdGlvblRvOiB7IHR5cGU6IFN0cmluZywgZW51bTogZmllbGQucmVsYXRpb25UbyB9LFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHR5cGU6IFNjaGVtYS5UeXBlcy5NaXhlZCxcbiAgICAgICAgICByZWZQYXRoOiBgJHtmaWVsZC5uYW1lfS5yZWxhdGlvblRvYCxcbiAgICAgICAgfSxcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgc2NoZW1hVG9SZXR1cm4gPSB7XG4gICAgICAgICAgdHlwZTogW3NjaGVtYVRvUmV0dXJuXSxcbiAgICAgICAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZW1hVG9SZXR1cm4gPSB7XG4gICAgICAgIC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksXG4gICAgICAgIHR5cGU6IFNjaGVtYS5UeXBlcy5NaXhlZCxcbiAgICAgICAgcmVmOiBmaWVsZC5yZWxhdGlvblRvLFxuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICBzY2hlbWFUb1JldHVybiA9IHtcbiAgICAgICAgICB0eXBlOiBbc2NoZW1hVG9SZXR1cm5dLFxuICAgICAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBzY2hlbWFUb1JldHVybixcbiAgICB9KVxuICB9LFxuICByaWNoVGV4dDogKFxuICAgIGZpZWxkOiBSaWNoVGV4dEZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGNvbmZpZzogU2FuaXRpemVkQ29uZmlnLFxuICAgIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBiYXNlU2NoZW1hID0geyAuLi5mb3JtYXRCYXNlU2NoZW1hKGZpZWxkLCBidWlsZFNjaGVtYU9wdGlvbnMpLCB0eXBlOiBTY2hlbWEuVHlwZXMuTWl4ZWQgfVxuXG4gICAgc2NoZW1hLmFkZCh7XG4gICAgICBbZmllbGQubmFtZV06IGxvY2FsaXplU2NoZW1hKGZpZWxkLCBiYXNlU2NoZW1hLCBjb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxuICByb3c6IChcbiAgICBmaWVsZDogUm93RmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWcsXG4gICAgYnVpbGRTY2hlbWFPcHRpb25zOiBCdWlsZFNjaGVtYU9wdGlvbnMsXG4gICk6IHZvaWQgPT4ge1xuICAgIGZpZWxkLmZpZWxkcy5mb3JFYWNoKChzdWJGaWVsZDogRmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGFkZEZpZWxkU2NoZW1hOiBGaWVsZFNjaGVtYUdlbmVyYXRvciA9IGZpZWxkVG9TY2hlbWFNYXBbc3ViRmllbGQudHlwZV1cblxuICAgICAgaWYgKGFkZEZpZWxkU2NoZW1hKSB7XG4gICAgICAgIGFkZEZpZWxkU2NoZW1hKHN1YkZpZWxkLCBzY2hlbWEsIGNvbmZpZywgYnVpbGRTY2hlbWFPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIHNlbGVjdDogKFxuICAgIGZpZWxkOiBTZWxlY3RGaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHtcbiAgICAgIC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBlbnVtOiBmaWVsZC5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JykgcmV0dXJuIG9wdGlvbi52YWx1ZVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9KSxcbiAgICB9XG5cbiAgICBpZiAoYnVpbGRTY2hlbWFPcHRpb25zLmRyYWZ0c0VuYWJsZWQgfHwgIWZpZWxkLnJlcXVpcmVkKSB7XG4gICAgICBiYXNlU2NoZW1hLmVudW0ucHVzaChudWxsKVxuICAgIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYShcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGZpZWxkLmhhc01hbnkgPyBbYmFzZVNjaGVtYV0gOiBiYXNlU2NoZW1hLFxuICAgICAgICBjb25maWcubG9jYWxpemF0aW9uLFxuICAgICAgKSxcbiAgICB9KVxuICB9LFxuICB0YWJzOiAoXG4gICAgZmllbGQ6IFRhYnNGaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgZmllbGQudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgIGlmICh0YWJIYXNOYW1lKHRhYikpIHtcbiAgICAgICAgY29uc3QgYmFzZVNjaGVtYSA9IHtcbiAgICAgICAgICB0eXBlOiBidWlsZFNjaGVtYShjb25maWcsIHRhYi5maWVsZHMsIHtcbiAgICAgICAgICAgIGRpc2FibGVVbmlxdWU6IGJ1aWxkU2NoZW1hT3B0aW9ucy5kaXNhYmxlVW5pcXVlLFxuICAgICAgICAgICAgZHJhZnRzRW5hYmxlZDogYnVpbGRTY2hlbWFPcHRpb25zLmRyYWZ0c0VuYWJsZWQsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIF9pZDogZmFsc2UsXG4gICAgICAgICAgICAgIGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgbWluaW1pemU6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfVxuXG4gICAgICAgIHNjaGVtYS5hZGQoe1xuICAgICAgICAgIFt0YWIubmFtZV06IGxvY2FsaXplU2NoZW1hKHRhYiwgYmFzZVNjaGVtYSwgY29uZmlnLmxvY2FsaXphdGlvbiksXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWIuZmllbGRzLmZvckVhY2goKHN1YkZpZWxkOiBGaWVsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFkZEZpZWxkU2NoZW1hOiBGaWVsZFNjaGVtYUdlbmVyYXRvciA9IGZpZWxkVG9TY2hlbWFNYXBbc3ViRmllbGQudHlwZV1cblxuICAgICAgICAgIGlmIChhZGRGaWVsZFNjaGVtYSkge1xuICAgICAgICAgICAgYWRkRmllbGRTY2hlbWEoc3ViRmllbGQsIHNjaGVtYSwgY29uZmlnLCBidWlsZFNjaGVtYU9wdGlvbnMpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIHRleHQ6IChcbiAgICBmaWVsZDogVGV4dEZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGNvbmZpZzogU2FuaXRpemVkQ29uZmlnLFxuICAgIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBiYXNlU2NoZW1hID0ge1xuICAgICAgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSxcbiAgICAgIHR5cGU6IGZpZWxkLmhhc01hbnkgPyBbU3RyaW5nXSA6IFN0cmluZyxcbiAgICB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGNvbmZpZy5sb2NhbGl6YXRpb24pLFxuICAgIH0pXG4gIH0sXG4gIHRleHRhcmVhOiAoXG4gICAgZmllbGQ6IFRleHRhcmVhRmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWcsXG4gICAgYnVpbGRTY2hlbWFPcHRpb25zOiBCdWlsZFNjaGVtYU9wdGlvbnMsXG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSB7IC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksIHR5cGU6IFN0cmluZyB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGNvbmZpZy5sb2NhbGl6YXRpb24pLFxuICAgIH0pXG4gIH0sXG4gIHVwbG9hZDogKFxuICAgIGZpZWxkOiBVcGxvYWRGaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHtcbiAgICAgIC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksXG4gICAgICB0eXBlOiBTY2hlbWEuVHlwZXMuTWl4ZWQsXG4gICAgICByZWY6IGZpZWxkLnJlbGF0aW9uVG8sXG4gICAgfVxuXG4gICAgc2NoZW1hLmFkZCh7XG4gICAgICBbZmllbGQubmFtZV06IGxvY2FsaXplU2NoZW1hKGZpZWxkLCBiYXNlU2NoZW1hLCBjb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxufVxuXG5leHBvcnQgZGVmYXVsdCBidWlsZFNjaGVtYVxuIl0sIm5hbWVzIjpbImZvcm1hdEJhc2VTY2hlbWEiLCJmaWVsZCIsImJ1aWxkU2NoZW1hT3B0aW9ucyIsImRpc2FibGVVbmlxdWUiLCJkcmFmdHNFbmFibGVkIiwiaW5kZXhTb3J0YWJsZUZpZWxkcyIsInNjaGVtYSIsImluZGV4IiwidW5pcXVlIiwicmVxdWlyZWQiLCJsb2NhbGl6ZWQiLCJmaWVsZEFmZmVjdHNEYXRhIiwidHlwZSIsInNwYXJzZSIsImhpZGRlbiIsImxvY2FsaXplU2NoZW1hIiwiZW50aXR5IiwibG9jYWxpemF0aW9uIiwiZmllbGRJc0xvY2FsaXplZCIsIkFycmF5IiwiaXNBcnJheSIsImxvY2FsZXMiLCJsb2NhbGVDb2RlcyIsInJlZHVjZSIsImxvY2FsZVNjaGVtYSIsImxvY2FsZSIsIl9pZCIsImJ1aWxkU2NoZW1hIiwiY29uZmlnIiwiY29uZmlnRmllbGRzIiwiYWxsb3dJREZpZWxkIiwib3B0aW9ucyIsImZpZWxkcyIsInNjaGVtYUZpZWxkcyIsImlkRmllbGQiLCJmaW5kIiwibmFtZSIsIk51bWJlciIsIlN0cmluZyIsImZpbHRlciIsIlNjaGVtYSIsImZvckVhY2giLCJmaWVsZElzUHJlc2VudGF0aW9uYWxPbmx5IiwiYWRkRmllbGRTY2hlbWEiLCJmaWVsZFRvU2NoZW1hTWFwIiwiYXJyYXkiLCJiYXNlU2NoZW1hIiwiaWQiLCJtaW5pbWl6ZSIsImRlZmF1bHQiLCJ1bmRlZmluZWQiLCJhZGQiLCJibG9ja3MiLCJmaWVsZFNjaGVtYSIsImRpc2NyaW1pbmF0b3JLZXkiLCJibG9ja0l0ZW0iLCJibG9ja1NjaGVtYSIsImJsb2NrRmllbGQiLCJsb2NhbGVDb2RlIiwicGF0aCIsImRpc2NyaW1pbmF0b3IiLCJzbHVnIiwiY2hlY2tib3giLCJCb29sZWFuIiwiY29kZSIsImNvbGxhcHNpYmxlIiwic3ViRmllbGQiLCJkYXRlIiwiRGF0ZSIsImVtYWlsIiwiZ3JvdXAiLCJmb3JtYXR0ZWRCYXNlU2NoZW1hIiwianNvbiIsIlR5cGVzIiwiTWl4ZWQiLCJudW1iZXIiLCJoYXNNYW55IiwicG9pbnQiLCJlbnVtIiwiY29vcmRpbmF0ZXMiLCJkZWZhdWx0VmFsdWUiLCJpbmRleE9wdGlvbnMiLCJyYWRpbyIsIm1hcCIsIm9wdGlvbiIsInZhbHVlIiwicmVsYXRpb25zaGlwIiwiaGFzTWFueVJlbGF0aW9ucyIsInJlbGF0aW9uVG8iLCJzY2hlbWFUb1JldHVybiIsInJlZlBhdGgiLCJyZWYiLCJyaWNoVGV4dCIsInJvdyIsInNlbGVjdCIsInB1c2giLCJ0YWJzIiwidGFiIiwidGFiSGFzTmFtZSIsInRleHQiLCJ0ZXh0YXJlYSIsInVwbG9hZCJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsiLCJtYXBwaW5ncyI6IkFBQUEsb0RBQW9ELEdBQ3BELHlDQUF5QyxHQUN6QywwREFBMEQsR0FDMUQsdUNBQXVDOzs7OytCQW1sQnZDOzs7ZUFBQTs7OzBCQXBqQnVCO3VCQU1oQjtBQWlCUCxNQUFNQSxtQkFBbUIsQ0FBQ0MsT0FBMkJDO0lBQ25ELE1BQU0sRUFBRUMsYUFBYSxFQUFFQyxhQUFhLEVBQUVDLG1CQUFtQixFQUFFLEdBQUdIO0lBQzlELE1BQU1JLFNBQXFDO1FBQ3pDQyxPQUFPTixNQUFNTSxLQUFLLElBQUssQ0FBQ0osaUJBQWlCRixNQUFNTyxNQUFNLElBQUtILHVCQUF1QjtRQUNqRkksVUFBVTtRQUNWRCxRQUFRLEFBQUMsQ0FBQ0wsaUJBQWlCRixNQUFN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
450
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvYnVpbGRTY2hlbWEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG5pbXBvcnQgdHlwZSB7IEluZGV4T3B0aW9ucywgU2NoZW1hT3B0aW9ucywgU2NoZW1hVHlwZU9wdGlvbnMgfSBmcm9tICdtb25nb29zZSdcbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29uZmlnLCBTYW5pdGl6ZWRMb2NhbGl6YXRpb25Db25maWcgfSBmcm9tICdwYXlsb2FkL2NvbmZpZydcbmltcG9ydCB0eXBlIHtcbiAgQXJyYXlGaWVsZCxcbiAgQmxvY2ssXG4gIEJsb2NrRmllbGQsXG4gIENoZWNrYm94RmllbGQsXG4gIENvZGVGaWVsZCxcbiAgQ29sbGFwc2libGVGaWVsZCxcbiAgRGF0ZUZpZWxkLFxuICBFbWFpbEZpZWxkLFxuICBGaWVsZCxcbiAgRmllbGRBZmZlY3RpbmdEYXRhLFxuICBHcm91cEZpZWxkLFxuICBKU09ORmllbGQsXG4gIE5vblByZXNlbnRhdGlvbmFsRmllbGQsXG4gIE51bWJlckZpZWxkLFxuICBQb2ludEZpZWxkLFxuICBSYWRpb0ZpZWxkLFxuICBSZWxhdGlvbnNoaXBGaWVsZCxcbiAgUmljaFRleHRGaWVsZCxcbiAgUm93RmllbGQsXG4gIFNlbGVjdEZpZWxkLFxuICBUYWIsXG4gIFRhYnNGaWVsZCxcbiAgVGV4dEZpZWxkLFxuICBUZXh0YXJlYUZpZWxkLFxuICBVcGxvYWRGaWVsZCxcbn0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSAnbW9uZ29vc2UnXG5pbXBvcnQge1xuICBmaWVsZEFmZmVjdHNEYXRhLFxuICBmaWVsZElzTG9jYWxpemVkLFxuICBmaWVsZElzUHJlc2VudGF0aW9uYWxPbmx5LFxuICB0YWJIYXNOYW1lLFxufSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgdHlwZSB7IE1vbmdvb3NlQWRhcHRlciB9IGZyb20gJy4uJ1xuXG5leHBvcnQgdHlwZSBCdWlsZFNjaGVtYU9wdGlvbnMgPSB7XG4gIGFsbG93SURGaWVsZD86IGJvb2xlYW5cbiAgZGlzYWJsZVVuaXF1ZT86IGJvb2xlYW5cbiAgZHJhZnRzRW5hYmxlZD86IGJvb2xlYW5cbiAgaW5kZXhTb3J0YWJsZUZpZWxkcz86IGJvb2xlYW5cbiAgb3B0aW9ucz86IFNjaGVtYU9wdGlvbnNcbn1cblxudHlwZSBGaWVsZFNjaGVtYUdlbmVyYXRvciA9IChcbiAgZmllbGQ6IEZpZWxkLFxuICBzY2hlbWE6IFNjaGVtYSxcbiAgYWRhcHRlcjogTW9uZ29vc2VBZGFwdGVyLFxuICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbikgPT4gdm9pZFxuXG5jb25zdCBmb3JtYXRCYXNlU2NoZW1hID0gKGZpZWxkOiBGaWVsZEFmZmVjdGluZ0RhdGEsIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zKSA9PiB7XG4gIGNvbnN0IHsgZGlzYWJsZVVuaXF1ZSwgZHJhZnRzRW5hYmxlZCwgaW5kZXhTb3J0YWJsZUZpZWxkcyB9ID0gYnVpbGRTY2hlbWFPcHRpb25zXG4gIGNvbnN0IHNjaGVtYTogU2NoZW1hVHlwZU9wdGlvbnM8dW5rbm93bj4gPSB7XG4gICAgaW5kZXg6IGZpZWxkLmluZGV4IHx8ICghZGlzYWJsZVVuaXF1ZSAmJiBmaWVsZC51bmlxdWUpIHx8IGluZGV4U29ydGFibGVGaWVsZHMgfHwgZmFsc2UsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIHVuaXF1ZTogKCFkaXNhYmxlVW5pcXVlICYmIGZpZWxkLnVuaXF1ZSkgfHwgZmFsc2UsXG4gIH1cblxuICBpZiAoXG4gICAgc2NoZW1hLnVuaXF1ZSAmJlxuICAgIChmaWVsZC5sb2NhbGl6ZWQgfHxcbiAgICAgIGRyYWZ0c0VuYWJsZWQgfHxcbiAgICAgIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJlxuICAgICAgICBmaWVsZC50eXBlICE9PSAnZ3JvdXAnICYmXG4gICAgICAgIGZpZWxkLnR5cGUgIT09ICd0YWInICYmXG4gICAgICAgIGZpZWxkLnJlcXVpcmVkICE9PSB0cnVlKSlcbiAgKSB7XG4gICAgc2NoZW1hLnNwYXJzZSA9IHRydWVcbiAgfVxuXG4gIGlmIChmaWVsZC5oaWRkZW4pIHtcbiAgICBzY2hlbWEuaGlkZGVuID0gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5jb25zdCBsb2NhbGl6ZVNjaGVtYSA9IChcbiAgZW50aXR5OiBOb25QcmVzZW50YXRpb25hbEZpZWxkIHwgVGFiLFxuICBzY2hlbWEsXG4gIGxvY2FsaXphdGlvbjogU2FuaXRpemVkTG9jYWxpemF0aW9uQ29uZmlnIHwgZmFsc2UsXG4pID0+IHtcbiAgaWYgKGZpZWxkSXNMb2NhbGl6ZWQoZW50aXR5KSAmJiBsb2NhbGl6YXRpb24gJiYgQXJyYXkuaXNBcnJheShsb2NhbGl6YXRpb24ubG9jYWxlcykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogbG9jYWxpemF0aW9uLmxvY2FsZUNvZGVzLnJlZHVjZShcbiAgICAgICAgKGxvY2FsZVNjaGVtYSwgbG9jYWxlKSA9PiB7XG4gICAgICAgICAgbG9jYWxlU2NoZW1hW2xvY2FsZV0gPSBzY2hlbWFcbiAgICAgICAgICByZXR1cm4gbG9jYWxlU2NoZW1hXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBfaWQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgKSxcbiAgICAgIGxvY2FsaXplZDogdHJ1ZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5jb25zdCBidWlsZFNjaGVtYSA9IChcbiAgYWRhcHRlcjogTW9uZ29vc2VBZGFwdGVyLFxuICBjb25maWdGaWVsZHM6IEZpZWxkW10sXG4gIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zID0ge30sXG4pOiBTY2hlbWEgPT4ge1xuICBjb25zdCB7IGFsbG93SURGaWVsZCwgb3B0aW9ucyB9ID0gYnVpbGRTY2hlbWFPcHRpb25zXG4gIGxldCBmaWVsZHMgPSB7fVxuXG4gIGxldCBzY2hlbWFGaWVsZHMgPSBjb25maWdGaWVsZHNcblxuICBpZiAoIWFsbG93SURGaWVsZCkge1xuICAgIGNvbnN0IGlkRmllbGQgPSBzY2hlbWFGaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpXG4gICAgaWYgKGlkRmllbGQpIHtcbiAgICAgIGZpZWxkcyA9IHtcbiAgICAgICAgX2lkOiBpZEZpZWxkLnR5cGUgPT09ICdudW1iZXInID8gTnVtYmVyIDogU3RyaW5nLFxuICAgICAgfVxuICAgICAgc2NoZW1hRmllbGRzID0gc2NoZW1hRmllbGRzLmZpbHRlcihcbiAgICAgICAgKGZpZWxkKSA9PiAhKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjaGVtYSA9IG5ldyBTY2hlbWEoZmllbGRzLCBvcHRpb25zKVxuXG4gIHNjaGVtYUZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgIGlmICghZmllbGRJc1ByZXNlbnRhdGlvbmFsT25seShmaWVsZCkpIHtcbiAgICAgIGNvbnN0IGFkZEZpZWxkU2NoZW1hOiBGaWVsZFNjaGVtYUdlbmVyYXRvciA9IGZpZWxkVG9TY2hlbWFNYXBbZmllbGQudHlwZV1cblxuICAgICAgaWYgKGFkZEZpZWxkU2NoZW1hKSB7XG4gICAgICAgIGFkZEZpZWxkU2NoZW1hKGZpZWxkLCBzY2hlbWEsIGFkYXB0ZXIsIGJ1aWxkU2NoZW1hT3B0aW9ucylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5jb25zdCBmaWVsZFRvU2NoZW1hTWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZFNjaGVtYUdlbmVyYXRvcj4gPSB7XG4gIGFycmF5OiAoXG4gICAgZmllbGQ6IEFycmF5RmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgYWRhcHRlcjogTW9uZ29vc2VBZGFwdGVyLFxuICAgIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuICApID0+IHtcbiAgICBjb25zdCBiYXNlU2NoZW1hID0ge1xuICAgICAgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSxcbiAgICAgIHR5cGU6IFtcbiAgICAgICAgYnVpbGRTY2hlbWEoYWRhcHRlciwgZmllbGQuZmllbGRzLCB7XG4gICAgICAgICAgYWxsb3dJREZpZWxkOiB0cnVlLFxuICAgICAgICAgIGRpc2FibGVVbmlxdWU6IGJ1aWxkU2NoZW1hT3B0aW9ucy5kaXNhYmxlVW5pcXVlLFxuICAgICAgICAgIGRyYWZ0c0VuYWJsZWQ6IGJ1aWxkU2NoZW1hT3B0aW9ucy5kcmFmdHNFbmFibGVkLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIG1pbmltaXplOiBmYWxzZSxcbiAgICAgICAgICAgIC4uLihidWlsZFNjaGVtYU9wdGlvbnMub3B0aW9ucyB8fCB7fSksXG4gICAgICAgICAgICBfaWQ6IGZhbHNlLFxuICAgICAgICAgICAgaWQ6IGZhbHNlLFxuICAgICAgICAgICAgdGltZXN0YW1wczogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYShmaWVsZCwgYmFzZVNjaGVtYSwgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pLFxuICAgIH0pXG4gIH0sXG4gIGJsb2NrczogKFxuICAgIGZpZWxkOiBCbG9ja0ZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGFkYXB0ZXI6IE1vbmdvb3NlQWRhcHRlcixcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgZmllbGRTY2hlbWEgPSB7XG4gICAgICB0eXBlOiBbXG4gICAgICAgIG5ldyBTY2hlbWEoXG4gICAgICAgICAge30sXG4gICAgICAgICAge1xuICAgICAgICAgICAgX2lkOiBmYWxzZSxcbiAgICAgICAgICAgIGRpc2NyaW1pbmF0b3JLZXk6ICdibG9ja1R5cGUnLFxuICAgICAgICAgICAgLi4uKGJ1aWxkU2NoZW1hT3B0aW9ucy5vcHRpb25zIHx8IHt9KSxcbiAgICAgICAgICAgIHRpbWVzdGFtcHM6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYShmaWVsZCwgZmllbGRTY2hlbWEsIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuXG4gICAgZmllbGQuYmxvY2tzLmZvckVhY2goKGJsb2NrSXRlbTogQmxvY2spID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrU2NoZW1hID0gbmV3IFNjaGVtYShcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICAuLi4oYnVpbGRTY2hlbWFPcHRpb25zLm9wdGlvbnMgfHwge30pLFxuICAgICAgICAgIF9pZDogZmFsc2UsXG4gICAgICAgICAgaWQ6IGZhbHNlLFxuICAgICAgICAgIHRpbWVzdGFtcHM6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBibG9ja0l0ZW0uZmllbGRzLmZvckVhY2goKGJsb2NrRmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgYWRkRmllbGRTY2hlbWE6IEZpZWxkU2NoZW1hR2VuZXJhdG9yID0gZmllbGRUb1NjaGVtYU1hcFtibG9ja0ZpZWxkLnR5cGVdXG4gICAgICAgIGlmIChhZGRGaWVsZFNjaGVtYSkge1xuICAgICAgICAgIGFkZEZpZWxkU2NoZW1hKGJsb2NrRmllbGQsIGJsb2NrU2NoZW1hLCBhZGFwdGVyLCBidWlsZFNjaGVtYU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24ubG9jYWxlQ29kZXMuZm9yRWFjaCgobG9jYWxlQ29kZSkgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFBvc3NpYmxlIGluY29ycmVjdCB0eXBpbmcgaW4gbW9uZ29vc2UgdHlwZXMsIHRoaXMgd29ya3NcbiAgICAgICAgICBzY2hlbWEucGF0aChgJHtmaWVsZC5uYW1lfS4ke2xvY2FsZUNvZGV9YCkuZGlzY3JpbWluYXRvcihibG9ja0l0ZW0uc2x1ZywgYmxvY2tTY2hlbWEpXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUG9zc2libGUgaW5jb3JyZWN0IHR5cGluZyBpbiBtb25nb29zZSB0eXBlcywgdGhpcyB3b3Jrc1xuICAgICAgICBzY2hlbWEucGF0aChmaWVsZC5uYW1lKS5kaXNjcmltaW5hdG9yKGJsb2NrSXRlbS5zbHVnLCBibG9ja1NjaGVtYSlcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuICBjaGVja2JveDogKFxuICAgIGZpZWxkOiBDaGVja2JveEZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGFkYXB0ZXI6IE1vbmdvb3NlQWRhcHRlcixcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHsgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSwgdHlwZTogQm9vbGVhbiB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxuICBjb2RlOiAoXG4gICAgZmllbGQ6IENvZGVGaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBhZGFwdGVyOiBNb25nb29zZUFkYXB0ZXIsXG4gICAgYnVpbGRTY2hlbWFPcHRpb25zOiBCdWlsZFNjaGVtYU9wdGlvbnMsXG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSB7IC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksIHR5cGU6IFN0cmluZyB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxuICBjb2xsYXBzaWJsZTogKFxuICAgIGZpZWxkOiBDb2xsYXBzaWJsZUZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGFkYXB0ZXI6IE1vbmdvb3NlQWRhcHRlcixcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgZmllbGQuZmllbGRzLmZvckVhY2goKHN1YkZpZWxkOiBGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgYWRkRmllbGRTY2hlbWE6IEZpZWxkU2NoZW1hR2VuZXJhdG9yID0gZmllbGRUb1NjaGVtYU1hcFtzdWJGaWVsZC50eXBlXVxuXG4gICAgICBpZiAoYWRkRmllbGRTY2hlbWEpIHtcbiAgICAgICAgYWRkRmllbGRTY2hlbWEoc3ViRmllbGQsIHNjaGVtYSwgYWRhcHRlciwgYnVpbGRTY2hlbWFPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIGRhdGU6IChcbiAgICBmaWVsZDogRGF0ZUZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGFkYXB0ZXI6IE1vbmdvb3NlQWRhcHRlcixcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHsgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSwgdHlwZTogRGF0ZSB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxuICBlbWFpbDogKFxuICAgIGZpZWxkOiBFbWFpbEZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGFkYXB0ZXI6IE1vbmdvb3NlQWRhcHRlcixcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHsgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSwgdHlwZTogU3RyaW5nIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYShmaWVsZCwgYmFzZVNjaGVtYSwgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pLFxuICAgIH0pXG4gIH0sXG4gIGdyb3VwOiAoXG4gICAgZmllbGQ6IEdyb3VwRmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgYWRhcHRlcjogTW9uZ29vc2VBZGFwdGVyLFxuICAgIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBmb3JtYXR0ZWRCYXNlU2NoZW1hID0gZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKVxuXG4gICAgLy8gY2FycnkgaW5kZXhTb3J0YWJsZUZpZWxkcyB0aHJvdWdoIHRvIHZlcnNpb25zIGlmIGRyYWZ0cyBlbmFibGVkXG4gICAgY29uc3QgaW5kZXhTb3J0YWJsZUZpZWxkcyA9XG4gICAgICBidWlsZFNjaGVtYU9wdGlvbnMuaW5kZXhTb3J0YWJsZUZpZWxkcyAmJlxuICAgICAgZmllbGQubmFtZSA9PT0gJ3ZlcnNpb24nICYmXG4gICAgICBidWlsZFNjaGVtYU9wdGlvbnMuZHJhZnRzRW5hYmxlZFxuXG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHtcbiAgICAgIC4uLmZvcm1hdHRlZEJhc2VTY2hlbWEsXG4gICAgICB0eXBlOiBidWlsZFNjaGVtYShhZGFwdGVyLCBmaWVsZC5maWVsZHMsIHtcbiAgICAgICAgZGlzYWJsZVVuaXF1ZTogYnVpbGRTY2hlbWFPcHRpb25zLmRpc2FibGVVbmlxdWUsXG4gICAgICAgIGRyYWZ0c0VuYWJsZWQ6IGJ1aWxkU2NoZW1hT3B0aW9ucy5kcmFmdHNFbmFibGVkLFxuICAgICAgICBpbmRleFNvcnRhYmxlRmllbGRzLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgbWluaW1pemU6IGZhbHNlLFxuICAgICAgICAgIC4uLihidWlsZFNjaGVtYU9wdGlvbnMub3B0aW9ucyB8fCB7fSksXG4gICAgICAgICAgX2lkOiBmYWxzZSxcbiAgICAgICAgICBpZDogZmFsc2UsXG4gICAgICAgICAgdGltZXN0YW1wczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxuICBqc29uOiAoXG4gICAgZmllbGQ6IEpTT05GaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBhZGFwdGVyOiBNb25nb29zZUFkYXB0ZXIsXG4gICAgYnVpbGRTY2hlbWFPcHRpb25zOiBCdWlsZFNjaGVtYU9wdGlvbnMsXG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSB7IC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksIHR5cGU6IFNjaGVtYS5UeXBlcy5NaXhlZCB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxuICBudW1iZXI6IChcbiAgICBmaWVsZDogTnVtYmVyRmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgYWRhcHRlcjogTW9uZ29vc2VBZGFwdGVyLFxuICAgIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBiYXNlU2NoZW1hID0ge1xuICAgICAgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSxcbiAgICAgIHR5cGU6IGZpZWxkLmhhc01hbnkgPyBbTnVtYmVyXSA6IE51bWJlcixcbiAgICB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxuICBwb2ludDogKFxuICAgIGZpZWxkOiBQb2ludEZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGFkYXB0ZXI6IE1vbmdvb3NlQWRhcHRlcixcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYTogU2NoZW1hVHlwZU9wdGlvbnM8dW5rbm93bj4gPSB7XG4gICAgICB0eXBlOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgZW51bTogWydQb2ludCddLFxuICAgICAgfSxcbiAgICAgIGNvb3JkaW5hdGVzOiB7XG4gICAgICAgIHR5cGU6IFtOdW1iZXJdLFxuICAgICAgICBkZWZhdWx0OiBmaWVsZC5kZWZhdWx0VmFsdWUgfHwgdW5kZWZpbmVkLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICB9LFxuICAgIH1cbiAgICBpZiAoYnVpbGRTY2hlbWFPcHRpb25zLmRpc2FibGVVbmlxdWUgJiYgZmllbGQudW5pcXVlICYmIGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgYmFzZVNjaGVtYS5jb29yZGluYXRlcy5zcGFyc2UgPSB0cnVlXG4gICAgfVxuXG4gICAgc2NoZW1hLmFkZCh7XG4gICAgICBbZmllbGQubmFtZV06IGxvY2FsaXplU2NoZW1hKGZpZWxkLCBiYXNlU2NoZW1hLCBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbiksXG4gICAgfSlcblxuICAgIGlmIChmaWVsZC5pbmRleCA9PT0gdHJ1ZSB8fCBmaWVsZC5pbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBpbmRleE9wdGlvbnM6IEluZGV4T3B0aW9ucyA9IHt9XG4gICAgICBpZiAoIWJ1aWxkU2NoZW1hT3B0aW9ucy5kaXNhYmxlVW5pcXVlICYmIGZpZWxkLnVuaXF1ZSkge1xuICAgICAgICBpbmRleE9wdGlvbnMuc3BhcnNlID0gdHJ1ZVxuICAgICAgICBpbmRleE9wdGlvbnMudW5pcXVlID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbi5sb2NhbGVzLmZvckVhY2goKGxvY2FsZSkgPT4ge1xuICAgICAgICAgIHNjaGVtYS5pbmRleCh7IFtgJHtmaWVsZC5uYW1lfS4ke2xvY2FsZS5jb2RlfWBdOiAnMmRzcGhlcmUnIH0sIGluZGV4T3B0aW9ucylcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYS5pbmRleCh7IFtmaWVsZC5uYW1lXTogJzJkc3BoZXJlJyB9LCBpbmRleE9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuICB9LFxuICByYWRpbzogKFxuICAgIGZpZWxkOiBSYWRpb0ZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGFkYXB0ZXI6IE1vbmdvb3NlQWRhcHRlcixcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHtcbiAgICAgIC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBlbnVtOiBmaWVsZC5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JykgcmV0dXJuIG9wdGlvbi52YWx1ZVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9KSxcbiAgICB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxuICByZWxhdGlvbnNoaXA6IChcbiAgICBmaWVsZDogUmVsYXRpb25zaGlwRmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgYWRhcHRlcjogTW9uZ29vc2VBZGFwdGVyLFxuICAgIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuICApID0+IHtcbiAgICBjb25zdCBoYXNNYW55UmVsYXRpb25zID0gQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKVxuICAgIGxldCBzY2hlbWFUb1JldHVybjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9XG5cbiAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICBzY2hlbWFUb1JldHVybiA9IHtcbiAgICAgICAgdHlwZTogYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24ubG9jYWxlQ29kZXMucmVkdWNlKChsb2NhbGVzLCBsb2NhbGUpID0+IHtcbiAgICAgICAgICBsZXQgbG9jYWxlU2NoZW1hOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cblxuICAgICAgICAgIGlmIChoYXNNYW55UmVsYXRpb25zKSB7XG4gICAgICAgICAgICBsb2NhbGVTY2hlbWEgPSB7XG4gICAgICAgICAgICAgIC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksXG4gICAgICAgICAgICAgIF9pZDogZmFsc2UsXG4gICAgICAgICAgICAgIHR5cGU6IFNjaGVtYS5UeXBlcy5NaXhlZCxcbiAgICAgICAgICAgICAgcmVsYXRpb25UbzogeyB0eXBlOiBTdHJpbmcsIGVudW06IGZpZWxkLnJlbGF0aW9uVG8gfSxcbiAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWEuVHlwZXMuTWl4ZWQsXG4gICAgICAgICAgICAgICAgcmVmUGF0aDogYCR7ZmllbGQubmFtZX0uJHtsb2NhbGV9LnJlbGF0aW9uVG9gLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2NhbGVTY2hlbWEgPSB7XG4gICAgICAgICAgICAgIC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksXG4gICAgICAgICAgICAgIHR5cGU6IFNjaGVtYS5UeXBlcy5NaXhlZCxcbiAgICAgICAgICAgICAgcmVmOiBmaWVsZC5yZWxhdGlvblRvLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5sb2NhbGVzLFxuICAgICAgICAgICAgW2xvY2FsZV06IGZpZWxkLmhhc01hbnkgPyB7IHR5cGU6IFtsb2NhbGVTY2hlbWFdLCBkZWZhdWx0OiB1bmRlZmluZWQgfSA6IGxvY2FsZVNjaGVtYSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHt9KSxcbiAgICAgICAgbG9jYWxpemVkOiB0cnVlLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGFzTWFueVJlbGF0aW9ucykge1xuICAgICAgc2NoZW1hVG9SZXR1cm4gPSB7XG4gICAgICAgIC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksXG4gICAgICAgIF9pZDogZmFsc2UsXG4gICAgICAgIHR5cGU6IFNjaGVtYS5UeXBlcy5NaXhlZCxcbiAgICAgICAgcmVsYXRpb25UbzogeyB0eXBlOiBTdHJpbmcsIGVudW06IGZpZWxkLnJlbGF0aW9uVG8gfSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICB0eXBlOiBTY2hlbWEuVHlwZXMuTWl4ZWQsXG4gICAgICAgICAgcmVmUGF0aDogYCR7ZmllbGQubmFtZX0ucmVsYXRpb25Ub2AsXG4gICAgICAgIH0sXG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgIHNjaGVtYVRvUmV0dXJuID0ge1xuICAgICAgICAgIHR5cGU6IFtzY2hlbWFUb1JldHVybl0sXG4gICAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVtYVRvUmV0dXJuID0ge1xuICAgICAgICAuLi5mb3JtYXRCYXNlU2NoZW1hKGZpZWxkLCBidWlsZFNjaGVtYU9wdGlvbnMpLFxuICAgICAgICB0eXBlOiBTY2hlbWEuVHlwZXMuTWl4ZWQsXG4gICAgICAgIHJlZjogZmllbGQucmVsYXRpb25UbyxcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgc2NoZW1hVG9SZXR1cm4gPSB7XG4gICAgICAgICAgdHlwZTogW3NjaGVtYVRvUmV0dXJuXSxcbiAgICAgICAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogc2NoZW1hVG9SZXR1cm4sXG4gICAgfSlcbiAgfSxcbiAgcmljaFRleHQ6IChcbiAgICBmaWVsZDogUmljaFRleHRGaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBhZGFwdGVyOiBNb25nb29zZUFkYXB0ZXIsXG4gICAgYnVpbGRTY2hlbWFPcHRpb25zOiBCdWlsZFNjaGVtYU9wdGlvbnMsXG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSB7IC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksIHR5cGU6IFNjaGVtYS5UeXBlcy5NaXhlZCB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxuICByb3c6IChcbiAgICBmaWVsZDogUm93RmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgYWRhcHRlcjogTW9uZ29vc2VBZGFwdGVyLFxuICAgIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuICApOiB2b2lkID0+IHtcbiAgICBmaWVsZC5maWVsZHMuZm9yRWFjaCgoc3ViRmllbGQ6IEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBhZGRGaWVsZFNjaGVtYTogRmllbGRTY2hlbWFHZW5lcmF0b3IgPSBmaWVsZFRvU2NoZW1hTWFwW3N1YkZpZWxkLnR5cGVdXG5cbiAgICAgIGlmIChhZGRGaWVsZFNjaGVtYSkge1xuICAgICAgICBhZGRGaWVsZFNjaGVtYShzdWJGaWVsZCwgc2NoZW1hLCBhZGFwdGVyLCBidWlsZFNjaGVtYU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgc2VsZWN0OiAoXG4gICAgZmllbGQ6IFNlbGVjdEZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGFkYXB0ZXI6IE1vbmdvb3NlQWRhcHRlcixcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHtcbiAgICAgIC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBlbnVtOiBmaWVsZC5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JykgcmV0dXJuIG9wdGlvbi52YWx1ZVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9KSxcbiAgICB9XG5cbiAgICBpZiAoYnVpbGRTY2hlbWFPcHRpb25zLmRyYWZ0c0VuYWJsZWQgfHwgIWZpZWxkLnJlcXVpcmVkKSB7XG4gICAgICBiYXNlU2NoZW1hLmVudW0ucHVzaChudWxsKVxuICAgIH1cblxuICAgIHNjaGVtYS5hZGQoe1xuICAgICAgW2ZpZWxkLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYShcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGZpZWxkLmhhc01hbnkgPyBbYmFzZVNjaGVtYV0gOiBiYXNlU2NoZW1hLFxuICAgICAgICBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbixcbiAgICAgICksXG4gICAgfSlcbiAgfSxcbiAgdGFiczogKFxuICAgIGZpZWxkOiBUYWJzRmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgYWRhcHRlcjogTW9uZ29vc2VBZGFwdGVyLFxuICAgIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuICApOiB2b2lkID0+IHtcbiAgICBmaWVsZC50YWJzLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgaWYgKHRhYkhhc05hbWUodGFiKSkge1xuICAgICAgICBjb25zdCBiYXNlU2NoZW1hID0ge1xuICAgICAgICAgIHR5cGU6IGJ1aWxkU2NoZW1hKGFkYXB0ZXIsIHRhYi5maWVsZHMsIHtcbiAgICAgICAgICAgIGRpc2FibGVVbmlxdWU6IGJ1aWxkU2NoZW1hT3B0aW9ucy5kaXNhYmxlVW5pcXVlLFxuICAgICAgICAgICAgZHJhZnRzRW5hYmxlZDogYnVpbGRTY2hlbWFPcHRpb25zLmRyYWZ0c0VuYWJsZWQsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIG1pbmltaXplOiBmYWxzZSxcbiAgICAgICAgICAgICAgLi4uKGJ1aWxkU2NoZW1hT3B0aW9ucy5vcHRpb25zIHx8IHt9KSxcbiAgICAgICAgICAgICAgX2lkOiBmYWxzZSxcbiAgICAgICAgICAgICAgaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB0aW1lc3RhbXBzOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cblxuICAgICAgICBzY2hlbWEuYWRkKHtcbiAgICAgICAgICBbdGFiLm5hbWVdOiBsb2NhbGl6ZVNjaGVtYSh0YWIsIGJhc2VTY2hlbWEsIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhYi5maWVsZHMuZm9yRWFjaCgoc3ViRmllbGQ6IEZpZWxkKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWRkRmllbGRTY2hlbWE6IEZpZWxkU2NoZW1hR2VuZXJhdG9yID0gZmllbGRUb1NjaGVtYU1hcFtzdWJGaWVsZC50eXBlXVxuXG4gICAgICAgICAgaWYgKGFkZEZpZWxkU2NoZW1hKSB7XG4gICAgICAgICAgICBhZGRGaWVsZFNjaGVtYShzdWJGaWVsZCwgc2NoZW1hLCBhZGFwdGVyLCBidWlsZFNjaGVtYU9wdGlvbnMpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIHRleHQ6IChcbiAgICBmaWVsZDogVGV4dEZpZWxkLFxuICAgIHNjaGVtYTogU2NoZW1hLFxuICAgIGFkYXB0ZXI6IE1vbmdvb3NlQWRhcHRlcixcbiAgICBidWlsZFNjaGVtYU9wdGlvbnM6IEJ1aWxkU2NoZW1hT3B0aW9ucyxcbiAgKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IHtcbiAgICAgIC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksXG4gICAgICB0eXBlOiBmaWVsZC5oYXNNYW55ID8gW1N0cmluZ10gOiBTdHJpbmcsXG4gICAgfVxuXG4gICAgc2NoZW1hLmFkZCh7XG4gICAgICBbZmllbGQubmFtZV06IGxvY2FsaXplU2NoZW1hKGZpZWxkLCBiYXNlU2NoZW1hLCBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbiksXG4gICAgfSlcbiAgfSxcbiAgdGV4dGFyZWE6IChcbiAgICBmaWVsZDogVGV4dGFyZWFGaWVsZCxcbiAgICBzY2hlbWE6IFNjaGVtYSxcbiAgICBhZGFwdGVyOiBNb25nb29zZUFkYXB0ZXIsXG4gICAgYnVpbGRTY2hlbWFPcHRpb25zOiBCdWlsZFNjaGVtYU9wdGlvbnMsXG4gICk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGJhc2VTY2hlbWEgPSB7IC4uLmZvcm1hdEJhc2VTY2hlbWEoZmllbGQsIGJ1aWxkU2NoZW1hT3B0aW9ucyksIHR5cGU6IFN0cmluZyB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxuICB1cGxvYWQ6IChcbiAgICBmaWVsZDogVXBsb2FkRmllbGQsXG4gICAgc2NoZW1hOiBTY2hlbWEsXG4gICAgYWRhcHRlcjogTW9uZ29vc2VBZGFwdGVyLFxuICAgIGJ1aWxkU2NoZW1hT3B0aW9uczogQnVpbGRTY2hlbWFPcHRpb25zLFxuICApOiB2b2lkID0+IHtcbiAgICBjb25zdCBiYXNlU2NoZW1hID0ge1xuICAgICAgLi4uZm9ybWF0QmFzZVNjaGVtYShmaWVsZCwgYnVpbGRTY2hlbWFPcHRpb25zKSxcbiAgICAgIHR5cGU6IFNjaGVtYS5UeXBlcy5NaXhlZCxcbiAgICAgIHJlZjogZmllbGQucmVsYXRpb25UbyxcbiAgICB9XG5cbiAgICBzY2hlbWEuYWRkKHtcbiAgICAgIFtmaWVsZC5uYW1lXTogbG9jYWxpemVTY2hlbWEoZmllbGQsIGJhc2VTY2hlbWEsIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSxcbiAgICB9KVxuICB9LFxufVxuXG5leHBvcnQgZGVmYXVsdCBidWlsZFNjaGVtYVxuIl0sIm5hbWVzIjpbImZvcm1hdEJhc2VTY2hlbWEiLCJmaWVsZCIsImJ1aWxkU2NoZW1hT3B0aW9ucyIsImRpc2FibGVVbmlxdWUiLCJkcmFmdHNFbmFibGVkIiwiaW5kZXhTb3J0YWJsZUZpZWxkcyIsInNjaGVtYSIsImluZGV4IiwidW5pcXVlIiwicmVxdWlyZWQiLCJsb2NhbGl6ZWQiLCJmaWVsZEFmZmVjdHNEYXRhIiwidHlwZSIsInNwYXJzZSIsImhpZGRlbiIsImxvY2FsaXplU2NoZW1hIiwiZW50aXR5IiwibG9jYWxpemF0aW9uIiwiZmllbGRJc0xvY2FsaXplZCIsIkFycmF5IiwiaXNBcnJheSIsImxvY2FsZXMiLCJsb2NhbGVDb2RlcyIsInJlZHVjZSIsImxvY2FsZVNjaGVtYSIsImxvY2FsZSIsIl9pZCIsImJ1aWxkU2NoZW1hIiwiYWRhcHRlciIsImNvbmZpZ0ZpZWxkcyIsImFsbG93SURGaWVsZCIsIm9wdGlvbnMiLCJmaWVsZHMiLCJzY2hlbWFGaWVsZHMiLCJpZEZpZWxkIiwiZmluZCIsIm5hbWUiLCJOdW1iZXIiLCJTdHJpbmciLCJmaWx0ZXIiLCJTY2hlbWEiLCJmb3JFYWNoIiwiZmllbGRJc1ByZXNlbnRhdGlvbmFsT25seSIsImFkZEZpZWxkU2NoZW1hIiwiZmllbGRUb1NjaGVtYU1hcCIsImFycmF5IiwiYmFzZVNjaGVtYSIsIm1pbmltaXplIiwiaWQiLCJ0aW1lc3RhbXBzIiwiZGVmYXVsdCIsInVuZGVmaW5lZCIsImFkZCIsInBheWxvYWQiLCJjb25maWciLCJibG9ja3MiLCJmaWVsZFNjaGVtYSIsImRpc2NyaW1pbmF0b3JLZXkiLCJibG9ja0l0ZW0iLCJibG9ja1NjaGVtYSIsImJsb2NrRmllbGQiLCJsb2NhbGVDb2RlIiwicGF0aCIsImRpc2NyaW1pbmF0b3IiLCJzbHVnIiwiY2hlY2tib3giLCJCb29sZWFuIiwiY29kZSIsImNvbGxhcHNpYmxlIiwic3ViRmllbGQiLCJkYXRlIiwiRGF0ZSIsImVtYWlsIiwiZ3JvdXAiLCJmb3JtYXR0ZWRCYXNlU2NoZW1hIiwianNvbiIsIlR5cGVzIiwiTWl4ZWQiLCJudW1iZXIiLCJoYXNNYW55IiwicG9pbnQiLCJlbnVtIiwiY29vcmRpbmF0ZXMiLCJkZWZhdWx0VmFsdWUiLCJpbmRleE9wdGlvbnMiLCJyYWRpbyIsIm1hcCIsIm9wdGlvbiIsInZhbHVlIiwicmVsYXRpb25zaGlwIiwiaGFzTWFueVJlbGF0aW9ucyIsInJlbGF0aW9uVG8iLCJzY2hlbWFUb1JldHVybiIsInJlZlBhdGgiLCJyZWYiLCJyaWNoVGV4dCIsInJvdyIsInNlbGVjdCIsInB1c2giLCJ0YWJzIiwidGFiIiwidGFiSGFzTmFtZSIsInRleHQiLCJ0ZXh0YXJlYSIsInVwbG9hZCJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwibWFwcGluZ3MiOiJBQUFBLG9EQUFvRCxHQUNwRCx5Q0FBeUMsR0FDekMsMERBQTBELEdBQzFELHVDQUF1Qzs7OzsrQkE2bUJ2Qzs7O2VBQUE7OzswQkE5a0J1Qjt1QkFNaEI7QUFtQlAsTUFBTUEsbUJBQW1CLENBQUNDLE9BQTJCQztJQUNuRCxNQUFNLEVBQUVDLGFBQWEs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
@@ -1 +1 @@
1
- {"version":3,"file":"queryDrafts.d.ts","sourceRoot":"","sources":["../src/queryDrafts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAWnD,eAAO,MAAM,WAAW,EAAE,WA0FzB,CAAA"}
1
+ {"version":3,"file":"queryDrafts.d.ts","sourceRoot":"","sources":["../src/queryDrafts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAWnD,eAAO,MAAM,WAAW,EAAE,WAgGzB,CAAA"}
@@ -20,7 +20,7 @@ function _interop_require_default(obj) {
20
20
  const queryDrafts = async function queryDrafts({ collection, limit, locale, page, pagination, req = {}, sort: sortArg, where }) {
21
21
  const VersionModel = this.versions[collection];
22
22
  const collectionConfig = this.payload.collections[collection].config;
23
- const options = (0, _withSession.withSession)(this, req.transactionID);
23
+ const options = await (0, _withSession.withSession)(this, req);
24
24
  let hasNearConstraint;
25
25
  let sort;
26
26
  if (where) {
@@ -58,6 +58,12 @@ const queryDrafts = async function queryDrafts({ collection, limit, locale, page
58
58
  sort,
59
59
  useEstimatedCount
60
60
  };
61
+ if (locale && locale !== 'all' && locale !== '*') {
62
+ paginationOptions.collation = {
63
+ locale,
64
+ strength: 1
65
+ };
66
+ }
61
67
  if (!useEstimatedCount && Object.keys(versionQuery).length === 0 && this.disableIndexHints !== true) {
62
68
  // Improve the performance of the countDocuments query which is used if useEstimatedCount is set to false by adding
63
69
  // a hint. By default, if no hint is provided, MongoDB does not use an indexed field to count the returned documents,
@@ -77,7 +83,7 @@ const queryDrafts = async function queryDrafts({ collection, limit, locale, page
77
83
  paginationOptions.options.limit = limit;
78
84
  }
79
85
  const result = await VersionModel.paginate(versionQuery, paginationOptions);
80
- const docs = JSON.parse(JSON.stringify(result.docs));
86
+ const docs = this.jsonParse ? JSON.parse(JSON.stringify(result.docs)) : result.docs;
81
87
  return {
82
88
  ...result,
83
89
  docs: docs.map((doc)=>{
@@ -94,4 +100,4 @@ const queryDrafts = async function queryDrafts({ collection, limit, locale, page
94
100
  };
95
101
  };
96
102
 
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9xdWVyeURyYWZ0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhZ2luYXRlT3B0aW9ucyB9IGZyb20gJ21vbmdvb3NlJ1xuaW1wb3J0IHR5cGUgeyBRdWVyeURyYWZ0cyB9IGZyb20gJ3BheWxvYWQvZGF0YWJhc2UnXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRSZXF1ZXN0IH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHsgY29tYmluZVF1ZXJpZXMsIGZsYXR0ZW5XaGVyZVRvT3BlcmF0b3JzIH0gZnJvbSAncGF5bG9hZC9kYXRhYmFzZSdcblxuaW1wb3J0IHR5cGUgeyBNb25nb29zZUFkYXB0ZXIgfSBmcm9tICcuJ1xuXG5pbXBvcnQgeyBidWlsZFNvcnRQYXJhbSB9IGZyb20gJy4vcXVlcmllcy9idWlsZFNvcnRQYXJhbSdcbmltcG9ydCBzYW5pdGl6ZUludGVybmFsRmllbGRzIGZyb20gJy4vdXRpbGl0aWVzL3Nhbml0aXplSW50ZXJuYWxGaWVsZHMnXG5pbXBvcnQgeyB3aXRoU2Vzc2lvbiB9IGZyb20gJy4vd2l0aFNlc3Npb24nXG5cbmV4cG9ydCBjb25zdCBxdWVyeURyYWZ0czogUXVlcnlEcmFmdHMgPSBhc3luYyBmdW5jdGlvbiBxdWVyeURyYWZ0cyhcbiAgdGhpczogTW9uZ29vc2VBZGFwdGVyLFxuICB7IGNvbGxlY3Rpb24sIGxpbWl0LCBsb2NhbGUsIHBhZ2UsIHBhZ2luYXRpb24sIHJlcSA9IHt9IGFzIFBheWxvYWRSZXF1ZXN0LCBzb3J0OiBzb3J0QXJnLCB3aGVyZSB9LFxuKSB7XG4gIGNvbnN0IFZlcnNpb25Nb2RlbCA9IHRoaXMudmVyc2lvbnNbY29sbGVjdGlvbl1cbiAgY29uc3QgY29sbGVjdGlvbkNvbmZpZyA9IHRoaXMucGF5bG9hZC5jb2xsZWN0aW9uc1tjb2xsZWN0aW9uXS5jb25maWdcbiAgY29uc3Qgb3B0aW9ucyA9IHdpdGhTZXNzaW9uKHRoaXMsIHJlcS50cmFuc2FjdGlvbklEKVxuXG4gIGxldCBoYXNOZWFyQ29uc3RyYWludFxuICBsZXQgc29ydFxuXG4gIGlmICh3aGVyZSkge1xuICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gZmxhdHRlbldoZXJlVG9PcGVyYXRvcnMod2hlcmUpXG4gICAgaGFzTmVhckNvbnN0cmFpbnQgPSBjb25zdHJhaW50cy5zb21lKChwcm9wKSA9PiBPYmplY3Qua2V5cyhwcm9wKS5zb21lKChrZXkpID0+IGtleSA9PT0gJ25lYXInKSlcbiAgfVxuXG4gIGlmICghaGFzTmVhckNvbnN0cmFpbnQpIHtcbiAgICBzb3J0ID0gYnVpbGRTb3J0UGFyYW0oe1xuICAgICAgY29uZmlnOiB0aGlzLnBheWxvYWQuY29uZmlnLFxuICAgICAgZmllbGRzOiBjb2xsZWN0aW9uQ29uZmlnLmZpZWxkcyxcbiAgICAgIGxvY2FsZSxcbiAgICAgIHNvcnQ6IHNvcnRBcmcgfHwgY29sbGVjdGlvbkNvbmZpZy5kZWZhdWx0U29ydCxcbiAgICAgIHRpbWVzdGFtcHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGNvbWJpbmVkV2hlcmUgPSBjb21iaW5lUXVlcmllcyh7IGxhdGVzdDogeyBlcXVhbHM6IHRydWUgfSB9LCB3aGVyZSlcblxuICBjb25zdCB2ZXJzaW9uUXVlcnkgPSBhd2FpdCBWZXJzaW9uTW9kZWwuYnVpbGRRdWVyeSh7XG4gICAgbG9jYWxlLFxuICAgIHBheWxvYWQ6IHRoaXMucGF5bG9hZCxcbiAgICB3aGVyZTogY29tYmluZWRXaGVyZSxcbiAgfSlcblxuICAvLyB1c2VFc3RpbWF0ZWRDb3VudCBpcyBmYXN0ZXIsIGJ1dCBub3QgYWNjdXJhdGUsIGFzIGl0IGlnbm9yZXMgYW55IGZpbHRlcnMuIEl0IGlzIHRodXMgc2V0IHRvIHRydWUgaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnMuXG4gIGNvbnN0IHVzZUVzdGltYXRlZENvdW50ID1cbiAgICBoYXNOZWFyQ29uc3RyYWludCB8fCAhdmVyc2lvblF1ZXJ5IHx8IE9iamVjdC5rZXlzKHZlcnNpb25RdWVyeSkubGVuZ3RoID09PSAwXG4gIGNvbnN0IHBhZ2luYXRpb25PcHRpb25zOiBQYWdpbmF0ZU9wdGlvbnMgPSB7XG4gICAgZm9yY2VDb3VudEZuOiBoYXNOZWFyQ29uc3RyYWludCxcbiAgICBsZWFuOiB0cnVlLFxuICAgIGxlYW5XaXRoSWQ6IHRydWUsXG4gICAgb3B0aW9ucyxcbiAgICBwYWdlLFxuICAgIHBhZ2luYXRpb24sXG4gICAgc29ydCxcbiAgICB1c2VFc3RpbWF0ZWRDb3VudCxcbiAgfVxuXG4gIGlmIChcbiAgICAhdXNlRXN0aW1hdGVkQ291bnQgJiZcbiAgICBPYmplY3Qua2V5cyh2ZXJzaW9uUXVlcnkpLmxlbmd0aCA9PT0gMCAmJlxuICAgIHRoaXMuZGlzYWJsZUluZGV4SGludHMgIT09IHRydWVcbiAgKSB7XG4gICAgLy8gSW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGNvdW50RG9jdW1lbnRzIHF1ZXJ5IHdoaWNoIGlzIHVzZWQgaWYgdXNlRXN0aW1hdGVkQ291bnQgaXMgc2V0IHRvIGZhbHNlIGJ5IGFkZGluZ1xuICAgIC8vIGEgaGludC4gQnkgZGVmYXVsdCwgaWYgbm8gaGludCBpcyBwcm92aWRlZCwgTW9uZ29EQiBkb2VzIG5vdCB1c2UgYW4gaW5kZXhlZCBmaWVsZCB0byBjb3VudCB0aGUgcmV0dXJuZWQgZG9jdW1lbnRzLFxuICAgIC8vIHdoaWNoIG1ha2VzIHF1ZXJpZXMgdmVyeSBzbG93LiBUaGlzIG9ubHkgaGFwcGVucyB3aGVuIG5vIHF1ZXJ5IChmaWx0ZXIpIGlzIHByb3ZpZGVkLiBJZiBvbmUgaXMgcHJvdmlkZWQsIGl0IHVzZXNcbiAgICAvLyB0aGUgY29ycmVjdCBpbmRleGVkIGZpZWxkXG4gICAgcGFnaW5hdGlvbk9wdGlvbnMudXNlQ3VzdG9tQ291bnRGbiA9ICgpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgIFZlcnNpb25Nb2RlbC5jb3VudERvY3VtZW50cyh2ZXJzaW9uUXVlcnksIHtcbiAgICAgICAgICBoaW50OiB7IF9pZDogMSB9LFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBpZiAobGltaXQgPiAwKSB7XG4gICAgcGFnaW5hdGlvbk9wdGlvbnMubGltaXQgPSBsaW1pdFxuICAgIC8vIGxpbWl0IG11c3QgYWxzbyBiZSBzZXQgaGVyZSwgaXQncyBpZ25vcmVkIHdoZW4gcGFnaW5hdGlvbiBpcyBmYWxzZVxuICAgIHBhZ2luYXRpb25PcHRpb25zLm9wdGlvbnMubGltaXQgPSBsaW1pdFxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgVmVyc2lvbk1vZGVsLnBhZ2luYXRlKHZlcnNpb25RdWVyeSwgcGFnaW5hdGlvbk9wdGlvbnMpXG4gIGNvbnN0IGRvY3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc3VsdC5kb2NzKSlcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc3VsdCxcbiAgICBkb2NzOiBkb2NzLm1hcCgoZG9jKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIGRvYyA9IHtcbiAgICAgICAgX2lkOiBkb2MucGFyZW50LFxuICAgICAgICBpZDogZG9jLnBhcmVudCxcbiAgICAgICAgLi4uZG9jLnZlcnNpb24sXG4gICAgICAgIGNyZWF0ZWRBdDogZG9jLmNyZWF0ZWRBdCxcbiAgICAgICAgdXBkYXRlZEF0OiBkb2MudXBkYXRlZEF0LFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2FuaXRpemVJbnRlcm5hbEZpZWxkcyhkb2MpXG4gICAgfSksXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJxdWVyeURyYWZ0cyIsImNvbGxlY3Rpb24iLCJsaW1pdCIsImxvY2FsZSIsInBhZ2UiLCJwYWdpbmF0aW9uIiwicmVxIiwic29ydCIsInNvcnRBcmciLCJ3aGVyZSIsIlZlcnNpb25Nb2RlbCIsInZlcnNpb25zIiwiY29sbGVjdGlvbkNvbmZpZyIsInBheWxvYWQiLCJjb2xsZWN0aW9ucyIsImNvbmZpZyIsIm9wdGlvbnMiLCJ3aXRoU2Vzc2lvbiIsInRyYW5zYWN0aW9uSUQiLCJoYXNOZWFyQ29uc3RyYWludCIsImNvbnN0cmFpbnRzIiwiZmxhdHRlbldoZXJlVG9PcGVyYXRvcnMiLCJzb21lIiwicHJvcCIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJidWlsZFNvcnRQYXJhbSIsImZpZWxkcyIsImRlZmF1bHRTb3J0IiwidGltZXN0YW1wcyIsImNvbWJpbmVkV2hlcmUiLCJjb21iaW5lUXVlcmllcyIsImxhdGVzdCIsImVxdWFscyIsInZlcnNpb25RdWVyeSIsImJ1aWxkUXVlcnkiLCJ1c2VFc3RpbWF0ZWRDb3VudCIsImxlbmd0aCIsInBhZ2luYXRpb25PcHRpb25zIiwiZm9yY2VDb3VudEZuIiwibGVhbiIsImxlYW5XaXRoSWQiLCJkaXNhYmxlSW5kZXhIaW50cyIsInVzZUN1c3RvbUNvdW50Rm4iLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvdW50RG9jdW1lbnRzIiwiaGludCIsIl9pZCIsInJlc3VsdCIsInBhZ2luYXRlIiwiZG9jcyIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsIm1hcCIsImRvYyIsInBhcmVudCIsImlkIiwidmVyc2lvbiIsImNyZWF0ZWRBdCIsInVwZGF0ZWRBdCIsInNhbml0aXplSW50ZXJuYWxGaWVsZHMiXSwicmFuZ2VNYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsiLCJtYXBwaW5ncyI6Ijs7OzsrQkFZYUE7OztlQUFBQTs7OzBCQVIyQztnQ0FJekI7K0VBQ0k7NkJBQ1A7Ozs7OztBQUVyQixNQUFNQSxjQUEyQixlQUFlQSxZQUVyRCxFQUFFQyxVQUFVLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsTUFBTSxDQUFDLENBQW1CLEVBQUVDLE1BQU1DLE9BQU8sRUFBRUMsS0FBSyxFQUFF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
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9xdWVyeURyYWZ0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhZ2luYXRlT3B0aW9ucyB9IGZyb20gJ21vbmdvb3NlJ1xuaW1wb3J0IHR5cGUgeyBRdWVyeURyYWZ0cyB9IGZyb20gJ3BheWxvYWQvZGF0YWJhc2UnXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRSZXF1ZXN0IH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHsgY29tYmluZVF1ZXJpZXMsIGZsYXR0ZW5XaGVyZVRvT3BlcmF0b3JzIH0gZnJvbSAncGF5bG9hZC9kYXRhYmFzZSdcblxuaW1wb3J0IHR5cGUgeyBNb25nb29zZUFkYXB0ZXIgfSBmcm9tICcuJ1xuXG5pbXBvcnQgeyBidWlsZFNvcnRQYXJhbSB9IGZyb20gJy4vcXVlcmllcy9idWlsZFNvcnRQYXJhbSdcbmltcG9ydCBzYW5pdGl6ZUludGVybmFsRmllbGRzIGZyb20gJy4vdXRpbGl0aWVzL3Nhbml0aXplSW50ZXJuYWxGaWVsZHMnXG5pbXBvcnQgeyB3aXRoU2Vzc2lvbiB9IGZyb20gJy4vd2l0aFNlc3Npb24nXG5cbmV4cG9ydCBjb25zdCBxdWVyeURyYWZ0czogUXVlcnlEcmFmdHMgPSBhc3luYyBmdW5jdGlvbiBxdWVyeURyYWZ0cyhcbiAgdGhpczogTW9uZ29vc2VBZGFwdGVyLFxuICB7IGNvbGxlY3Rpb24sIGxpbWl0LCBsb2NhbGUsIHBhZ2UsIHBhZ2luYXRpb24sIHJlcSA9IHt9IGFzIFBheWxvYWRSZXF1ZXN0LCBzb3J0OiBzb3J0QXJnLCB3aGVyZSB9LFxuKSB7XG4gIGNvbnN0IFZlcnNpb25Nb2RlbCA9IHRoaXMudmVyc2lvbnNbY29sbGVjdGlvbl1cbiAgY29uc3QgY29sbGVjdGlvbkNvbmZpZyA9IHRoaXMucGF5bG9hZC5jb2xsZWN0aW9uc1tjb2xsZWN0aW9uXS5jb25maWdcbiAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHdpdGhTZXNzaW9uKHRoaXMsIHJlcSlcblxuICBsZXQgaGFzTmVhckNvbnN0cmFpbnRcbiAgbGV0IHNvcnRcblxuICBpZiAod2hlcmUpIHtcbiAgICBjb25zdCBjb25zdHJhaW50cyA9IGZsYXR0ZW5XaGVyZVRvT3BlcmF0b3JzKHdoZXJlKVxuICAgIGhhc05lYXJDb25zdHJhaW50ID0gY29uc3RyYWludHMuc29tZSgocHJvcCkgPT4gT2JqZWN0LmtleXMocHJvcCkuc29tZSgoa2V5KSA9PiBrZXkgPT09ICduZWFyJykpXG4gIH1cblxuICBpZiAoIWhhc05lYXJDb25zdHJhaW50KSB7XG4gICAgc29ydCA9IGJ1aWxkU29ydFBhcmFtKHtcbiAgICAgIGNvbmZpZzogdGhpcy5wYXlsb2FkLmNvbmZpZyxcbiAgICAgIGZpZWxkczogY29sbGVjdGlvbkNvbmZpZy5maWVsZHMsXG4gICAgICBsb2NhbGUsXG4gICAgICBzb3J0OiBzb3J0QXJnIHx8IGNvbGxlY3Rpb25Db25maWcuZGVmYXVsdFNvcnQsXG4gICAgICB0aW1lc3RhbXBzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjb21iaW5lZFdoZXJlID0gY29tYmluZVF1ZXJpZXMoeyBsYXRlc3Q6IHsgZXF1YWxzOiB0cnVlIH0gfSwgd2hlcmUpXG5cbiAgY29uc3QgdmVyc2lvblF1ZXJ5ID0gYXdhaXQgVmVyc2lvbk1vZGVsLmJ1aWxkUXVlcnkoe1xuICAgIGxvY2FsZSxcbiAgICBwYXlsb2FkOiB0aGlzLnBheWxvYWQsXG4gICAgd2hlcmU6IGNvbWJpbmVkV2hlcmUsXG4gIH0pXG5cbiAgLy8gdXNlRXN0aW1hdGVkQ291bnQgaXMgZmFzdGVyLCBidXQgbm90IGFjY3VyYXRlLCBhcyBpdCBpZ25vcmVzIGFueSBmaWx0ZXJzLiBJdCBpcyB0aHVzIHNldCB0byB0cnVlIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzLlxuICBjb25zdCB1c2VFc3RpbWF0ZWRDb3VudCA9XG4gICAgaGFzTmVhckNvbnN0cmFpbnQgfHwgIXZlcnNpb25RdWVyeSB8fCBPYmplY3Qua2V5cyh2ZXJzaW9uUXVlcnkpLmxlbmd0aCA9PT0gMFxuICBjb25zdCBwYWdpbmF0aW9uT3B0aW9uczogUGFnaW5hdGVPcHRpb25zID0ge1xuICAgIGZvcmNlQ291bnRGbjogaGFzTmVhckNvbnN0cmFpbnQsXG4gICAgbGVhbjogdHJ1ZSxcbiAgICBsZWFuV2l0aElkOiB0cnVlLFxuICAgIG9wdGlvbnMsXG4gICAgcGFnZSxcbiAgICBwYWdpbmF0aW9uLFxuICAgIHNvcnQsXG4gICAgdXNlRXN0aW1hdGVkQ291bnQsXG4gIH1cblxuICBpZiAobG9jYWxlICYmIGxvY2FsZSAhPT0gJ2FsbCcgJiYgbG9jYWxlICE9PSAnKicpIHtcbiAgICBwYWdpbmF0aW9uT3B0aW9ucy5jb2xsYXRpb24gPSB7IGxvY2FsZSwgc3RyZW5ndGg6IDEgfVxuICB9XG5cbiAgaWYgKFxuICAgICF1c2VFc3RpbWF0ZWRDb3VudCAmJlxuICAgIE9iamVjdC5rZXlzKHZlcnNpb25RdWVyeSkubGVuZ3RoID09PSAwICYmXG4gICAgdGhpcy5kaXNhYmxlSW5kZXhIaW50cyAhPT0gdHJ1ZVxuICApIHtcbiAgICAvLyBJbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY291bnREb2N1bWVudHMgcXVlcnkgd2hpY2ggaXMgdXNlZCBpZiB1c2VFc3RpbWF0ZWRDb3VudCBpcyBzZXQgdG8gZmFsc2UgYnkgYWRkaW5nXG4gICAgLy8gYSBoaW50LiBCeSBkZWZhdWx0LCBpZiBubyBoaW50IGlzIHByb3ZpZGVkLCBNb25nb0RCIGRvZXMgbm90IHVzZSBhbiBpbmRleGVkIGZpZWxkIHRvIGNvdW50IHRoZSByZXR1cm5lZCBkb2N1bWVudHMsXG4gICAgLy8gd2hpY2ggbWFrZXMgcXVlcmllcyB2ZXJ5IHNsb3cuIFRoaXMgb25seSBoYXBwZW5zIHdoZW4gbm8gcXVlcnkgKGZpbHRlcikgaXMgcHJvdmlkZWQuIElmIG9uZSBpcyBwcm92aWRlZCwgaXQgdXNlc1xuICAgIC8vIHRoZSBjb3JyZWN0IGluZGV4ZWQgZmllbGRcbiAgICBwYWdpbmF0aW9uT3B0aW9ucy51c2VDdXN0b21Db3VudEZuID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgVmVyc2lvbk1vZGVsLmNvdW50RG9jdW1lbnRzKHZlcnNpb25RdWVyeSwge1xuICAgICAgICAgIGhpbnQ6IHsgX2lkOiAxIH0sXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGlmIChsaW1pdCA+IDApIHtcbiAgICBwYWdpbmF0aW9uT3B0aW9ucy5saW1pdCA9IGxpbWl0XG4gICAgLy8gbGltaXQgbXVzdCBhbHNvIGJlIHNldCBoZXJlLCBpdCdzIGlnbm9yZWQgd2hlbiBwYWdpbmF0aW9uIGlzIGZhbHNlXG4gICAgcGFnaW5hdGlvbk9wdGlvbnMub3B0aW9ucy5saW1pdCA9IGxpbWl0XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBWZXJzaW9uTW9kZWwucGFnaW5hdGUodmVyc2lvblF1ZXJ5LCBwYWdpbmF0aW9uT3B0aW9ucylcblxuICBjb25zdCBkb2NzID0gdGhpcy5qc29uUGFyc2UgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc3VsdC5kb2NzKSkgOiByZXN1bHQuZG9jc1xuXG4gIHJldHVybiB7XG4gICAgLi4ucmVzdWx0LFxuICAgIGRvY3M6IGRvY3MubWFwKChkb2MpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXG4gICAgICBkb2MgPSB7XG4gICAgICAgIF9pZDogZG9jLnBhcmVudCxcbiAgICAgICAgaWQ6IGRvYy5wYXJlbnQsXG4gICAgICAgIC4uLmRvYy52ZXJzaW9uLFxuICAgICAgICBjcmVhdGVkQXQ6IGRvYy5jcmVhdGVkQXQsXG4gICAgICAgIHVwZGF0ZWRBdDogZG9jLnVwZGF0ZWRBdCxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNhbml0aXplSW50ZXJuYWxGaWVsZHMoZG9jKVxuICAgIH0pLFxuICB9XG59XG4iXSwibmFtZXMiOlsicXVlcnlEcmFmdHMiLCJjb2xsZWN0aW9uIiwibGltaXQiLCJsb2NhbGUiLCJwYWdlIiwicGFnaW5hdGlvbiIsInJlcSIsInNvcnQiLCJzb3J0QXJnIiwid2hlcmUiLCJWZXJzaW9uTW9kZWwiLCJ2ZXJzaW9ucyIsImNvbGxlY3Rpb25Db25maWciLCJwYXlsb2FkIiwiY29sbGVjdGlvbnMiLCJjb25maWciLCJvcHRpb25zIiwid2l0aFNlc3Npb24iLCJoYXNOZWFyQ29uc3RyYWludCIsImNvbnN0cmFpbnRzIiwiZmxhdHRlbldoZXJlVG9PcGVyYXRvcnMiLCJzb21lIiwicHJvcCIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJidWlsZFNvcnRQYXJhbSIsImZpZWxkcyIsImRlZmF1bHRTb3J0IiwidGltZXN0YW1wcyIsImNvbWJpbmVkV2hlcmUiLCJjb21iaW5lUXVlcmllcyIsImxhdGVzdCIsImVxdWFscyIsInZlcnNpb25RdWVyeSIsImJ1aWxkUXVlcnkiLCJ1c2VFc3RpbWF0ZWRDb3VudCIsImxlbmd0aCIsInBhZ2luYXRpb25PcHRpb25zIiwiZm9yY2VDb3VudEZuIiwibGVhbiIsImxlYW5XaXRoSWQiLCJjb2xsYXRpb24iLCJzdHJlbmd0aCIsImRpc2FibGVJbmRleEhpbnRzIiwidXNlQ3VzdG9tQ291bnRGbiIsIlByb21pc2UiLCJyZXNvbHZlIiwiY291bnREb2N1bWVudHMiLCJoaW50IiwiX2lkIiwicmVzdWx0IiwicGFnaW5hdGUiLCJkb2NzIiwianNvblBhcnNlIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwibWFwIiwiZG9jIiwicGFyZW50IiwiaWQiLCJ2ZXJzaW9uIiwiY3JlYXRlZEF0IiwidXBkYXRlZEF0Iiwic2FuaXRpemVJbnRlcm5hbEZpZWxkcyJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyIsIm1hcHBpbmdzIjoiOzs7OytCQVlhQTs7O2VBQUFB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
@@ -1 +1 @@
1
- {"version":3,"file":"commitTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/commitTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,eAAO,MAAM,iBAAiB,EAAE,iBAY/B,CAAA"}
1
+ {"version":3,"file":"commitTransaction.d.ts","sourceRoot":"","sources":["../../src/transactions/commitTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,eAAO,MAAM,iBAAiB,EAAE,iBAc/B,CAAA"}