velocious 1.0.701 → 1.0.702

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/README.md +1 -0
  2. package/build/configuration-types.js +72 -2
  3. package/build/configuration.js +61 -3
  4. package/build/frontend-model-resource/base-resource.js +150 -2
  5. package/build/frontend-models/resource-definition.js +47 -0
  6. package/build/src/configuration-types.d.ts +166 -5
  7. package/build/src/configuration-types.d.ts.map +1 -1
  8. package/build/src/configuration-types.js +67 -3
  9. package/build/src/configuration.d.ts +11 -2
  10. package/build/src/configuration.d.ts.map +1 -1
  11. package/build/src/configuration.js +61 -4
  12. package/build/src/frontend-model-resource/base-resource.d.ts +76 -3
  13. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  14. package/build/src/frontend-model-resource/base-resource.js +127 -3
  15. package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
  16. package/build/src/frontend-models/resource-definition.js +43 -1
  17. package/build/src/sync/local-mutation-log.d.ts +6 -3
  18. package/build/src/sync/local-mutation-log.d.ts.map +1 -1
  19. package/build/src/sync/local-mutation-log.js +11 -4
  20. package/build/src/sync/peer-mutation-bundle.d.ts +26 -0
  21. package/build/src/sync/peer-mutation-bundle.d.ts.map +1 -1
  22. package/build/src/sync/peer-mutation-bundle.js +7 -1
  23. package/build/src/sync/sync-api-client.d.ts +3 -1
  24. package/build/src/sync/sync-api-client.d.ts.map +1 -1
  25. package/build/src/sync/sync-api-client.js +46 -8
  26. package/build/src/sync/sync-client-types.d.ts +24 -12
  27. package/build/src/sync/sync-client-types.d.ts.map +1 -1
  28. package/build/src/sync/sync-client-types.js +7 -5
  29. package/build/src/sync/sync-client.d.ts +101 -0
  30. package/build/src/sync/sync-client.d.ts.map +1 -1
  31. package/build/src/sync/sync-client.js +236 -24
  32. package/build/src/sync/sync-offline-session.d.ts +328 -0
  33. package/build/src/sync/sync-offline-session.d.ts.map +1 -0
  34. package/build/src/sync/sync-offline-session.js +617 -0
  35. package/build/src/sync/sync-resource-base.d.ts +26 -28
  36. package/build/src/sync/sync-resource-base.d.ts.map +1 -1
  37. package/build/src/sync/sync-resource-base.js +11 -45
  38. package/build/sync/local-mutation-log.js +10 -3
  39. package/build/sync/peer-mutation-bundle.js +6 -0
  40. package/build/sync/sync-api-client.js +53 -7
  41. package/build/sync/sync-client-types.js +6 -4
  42. package/build/sync/sync-client.js +264 -21
  43. package/build/sync/sync-offline-session.js +713 -0
  44. package/build/sync/sync-resource-base.js +10 -53
  45. package/package.json +1 -1
  46. package/src/configuration-types.js +72 -2
  47. package/src/configuration.js +61 -3
  48. package/src/frontend-model-resource/base-resource.js +150 -2
  49. package/src/frontend-models/resource-definition.js +47 -0
  50. package/src/sync/local-mutation-log.js +10 -3
  51. package/src/sync/peer-mutation-bundle.js +6 -0
  52. package/src/sync/sync-api-client.js +53 -7
  53. package/src/sync/sync-client-types.js +6 -4
  54. package/src/sync/sync-client.js +264 -21
  55. package/src/sync/sync-offline-session.js +713 -0
  56. package/src/sync/sync-resource-base.js +10 -53
@@ -157,11 +157,16 @@ export default class LocalMutationLog {
157
157
  }
158
158
  /**
159
159
  * Replaces the mutation payload of a still-pending record. Used when an
160
- * acknowledged predecessor supplies the authoritative base for its successor.
161
- * @param {{id: string, mutation: import("./device-identity.js").SyncMutation}} args - Record and replacement mutation.
160
+ * acknowledged predecessor supplies the authoritative base for its successor
161
+ * and when an offline session re-signs a pending record under a refreshed
162
+ * grant (pass the new `signedMutation` envelope together with the mutation).
163
+ * @param {{id: string, mutation: import("./device-identity.js").SyncMutation, signedMutation?: import("./device-identity.js").SignedSyncMutation}} args - Record and replacement mutation.
162
164
  * @returns {Promise<LocalMutationLogRecord>} Updated record.
163
165
  */
164
- async updateMutation({ id, mutation }) {
166
+ async updateMutation({ id, mutation, signedMutation }) {
167
+ if (signedMutation !== undefined && stableJsonStringify(signedMutation.mutation) !== stableJsonStringify(mutation)) {
168
+ throw new Error("signedMutation must match the mutation payload it signs");
169
+ }
165
170
  return await withStorageKeyLock(this.storageKey, async () => {
166
171
  const rawRecord = await this.storage.record(this.storageKey, id);
167
172
  if (!rawRecord)
@@ -170,6 +175,8 @@ export default class LocalMutationLog {
170
175
  if (!PENDING_STATUSES.has(record.status))
171
176
  throw new Error(`Cannot update mutation for ${record.status} local mutation '${id}'`);
172
177
  record.mutation = normalizeMutation(mutation);
178
+ if (signedMutation !== undefined)
179
+ record.signedMutation = /** @type {import("./device-identity.js").SignedSyncMutation} */ (JSON.parse(JSON.stringify(signedMutation)));
173
180
  record.updatedAt = this.currentTimestamp();
174
181
  await this.storage.updateRecord(this.storageKey, cloneRecord(record));
175
182
  return restoreSyncResultTypes(cloneRecord(record));
@@ -515,4 +522,4 @@ function randomRecordId() {
515
522
  return cryptoProvider.randomUUID();
516
523
  return `local-mutation-${Date.now()}-${Math.random().toString(16).slice(2)}`;
517
524
  }
518
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbXV0YXRpb24tbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvbG9jYWwtbXV0YXRpb24tbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7O0tBR0s7QUFDTDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxZQUFZO0FBRVosT0FBTyxFQUFDLHNDQUFzQyxFQUFFLG9DQUFvQyxFQUFDLE1BQU0sK0NBQStDLENBQUE7QUFDMUksT0FBTyxtQkFBbUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFBO0FBQzdELE1BQU0scUJBQXFCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3pELDRDQUE0QztBQUM1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFbkMsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWdCO0lBQ25DOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsV0FBVyxHQUFHLGNBQWMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxHQUFHLG1CQUFtQixFQUFD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RUFBRSxDQUFBO0FBQzlFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQgcXVlcnkgb3B0aW9ucy5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvY2FsTXV0YXRpb25Mb2dSZWNvcmRzT3B0aW9uc1xuICogQHByb3BlcnR5IHtMb2NhbE11dGF0aW9uU3RhdHVzW119IFtzdGF0dXNlc10gLSBPcHRpb25hbCBzdGF0dXMgZmlsdGVyLlxuICovXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyByb3ctb3JpZW50ZWQgc3RvcmFnZSBhZGFwdGVyLlxuICpcbiAqIEltcGxlbWVudGF0aW9ucyBzaG91bGQgc3RvcmUgZWFjaCBtdXRhdGlvbiBsb2cgcmVjb3JkIGFzIGl0cyBvd24gcm93L2VudHJ5LlxuICogTmF0aXZlIGFwcHMgc2hvdWxkIGJhY2sgdGhpcyB3aXRoIFNRTGl0ZSBhbmQgaW5kZXhlcyBvbiBzdG9yYWdlIGtleSwgc3RhdHVzLFxuICogYW5kIHNlcXVlbmNlLiBBdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBsb2cgYXMgb25lIEpTT04gYmxvYi5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvY2FsTXV0YXRpb25Mb2dTdG9yYWdlXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIHJlY29yZDogTG9jYWxNdXRhdGlvbkxvZ1JlY29yZCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IGFwcGVuZFJlY29yZCAtIEFwcGVuZHMgb25lIGxvZyByZWNvcmQuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIGlkczogc3RyaW5nW10pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSBkZWxldGVSZWNvcmRzIC0gRGVsZXRlcyBsb2cgcmVjb3JkcyBieSBpZC5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZykgPT4gUHJvbWlzZTxudW1iZXI+IHwgbnVtYmVyfSBuZXh0U2VxdWVuY2UgLSBSZXR1cm5zIHRoZSBuZXh0IGxvY2FsIHNlcXVlbmNlIG51bWJlci5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgaWQ6IHN0cmluZykgPT4gUHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkIHwgbnVsbCB8IHVuZGVmaW5lZD4gfCBMb2NhbE11dGF0aW9uTG9nUmVjb3JkIHwgbnVsbCB8IHVuZGVmaW5lZH0gcmVjb3JkIC0gUmVhZHMgb25lIGxvZyByZWNvcmQgYnkgaWQuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBMb2NhbE11dGF0aW9uTG9nUmVjb3Jkc09wdGlvbnMpID0+IFByb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdPiB8IExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXX0gcmVjb3JkcyAtIFJlYWRzIGxvZyByZWNvcmRzLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCByZWNvcmQ6IExvY2FsTXV0YXRpb25Mb2dSZWNvcmQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSB1cGRhdGVSZWNvcmQgLSBSZXBsYWNlcyBvbmUgbG9nIHJlY29yZC5cbiAqL1xuLyoqXG4gKiBMb2NhbCBzeW5jIG11dGF0aW9uIGRlcGVuZGVuY3kgbWV0YWRhdGEuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNsaWVudE11dGF0aW9uSWQgLSBDbGllbnQgbXV0YXRpb24gaWQgdGhpcyBtdXRhdGlvbiBkZXBlbmRzIG9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1vZGVsIC0gRGVwZW5kZW50IG1vZGVsL3Jlc291cmNlIG5hbWUuXG4gKi9cbi8qKlxuICogTG9jYWwgbXV0YXRpb24gbG9nIHN0YXR1cy5cbiAqIEB0eXBlZGVmIHtcInBlbmRpbmdcIiB8IFwiYXBwbGllZC1sb2NhbGx5XCIgfCBcInBlZXItYXBwbGllZFwiIHwgXCJjb25mbGljdFwiIHwgXCJyZWplY3RlZFwiIHwgXCJzeW5jZWRcIn0gTG9jYWxNdXRhdGlvblN0YXR1c1xuICogKi9cbi8qKlxuICogTG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvY2FsTXV0YXRpb25Mb2dSZWNvcmRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcmVhdGVkQXQgLSBJU08gdGltZXN0YW1wIHdoZW4gdGhlIHJlY29yZCB3YXMgY3JlYXRlZCBsb2NhbGx5LlxuICogQHByb3BlcnR5IHtMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVtdfSBkZXBlbmRlbmNpZXMgLSBPdGhlciBsb2NhbCBtdXRhdGlvbnMgdGhhdCBtdXN0IHJlcGxheSBmaXJzdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIExvY2FsIGxvZyByZWNvcmQgaWQuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gbXV0YXRpb24gLSBEZXZpY2UgbXV0YXRpb24gcGF5bG9hZC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU2lnbmVkU3luY011dGF0aW9ufSBbc2lnbmVkTXV0YXRpb25dIC0gT3JpZ2luYWwgc2lnbmVkIG11dGF0aW9uIGVudmVsb3BlLCByZXRhaW5lZCBmb3IgcGVlci1mb3J3YXJkZWQgbXV0YXRpb25zLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNlcXVlbmNlIC0gTW9ub3RvbmljIGxvY2FsIHNlcXVlbmNlLlxuICogQHByb3BlcnR5IHtMb2NhbE11dGF0aW9uU3RhdHVzfSBzdGF0dXMgLSBMb2NhbCByZXBsYXkvYXBwbHkgc3RhdHVzLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWU+fSBbc3luY1Jlc3VsdF0gLSBCYWNrZW5kIHJlcGxheS9yZXN1bHQgbWV0YWRhdGEuIFN0b3JlZCBhcyB0cmFuc3BvcnQgbWFya2VycyBzbyBEYXRlIChhbmQgb3RoZXIgdHlwZWQpIHZhbHVlcyBzdXJ2aXZlIHRoZSBkdXJhYmxlIEpTT04gcm91bmQgdHJpcCBhbmQgYXJlIHJlc3RvcmVkIG9uIHJlYWRiYWNrLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHVwZGF0ZWRBdCAtIElTTyB0aW1lc3RhbXAgd2hlbiB0aGUgcmVjb3JkIHdhcyBsYXN0IGNoYW5nZWQuXG4gKi9cbi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2Rlc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlLCBzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWV9IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvdHJhbnNwb3J0LXNlcmlhbGl6YXRpb24uanNcIlxuaW1wb3J0IHN0YWJsZUpzb25TdHJpbmdpZnkgZnJvbSBcIi4vc3RhYmxlLWpzb24uanNcIlxuXG5jb25zdCBERUZBVUxUX1NUT1JBR0VfS0VZID0gXCJ2ZWxvY2lvdXMuc3luYy5sb2NhbE11dGF0aW9uTG9nXCJcbmNvbnN0IFBFTkRJTkdfU1RBVFVTX1ZBTFVFUyA9IC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvblN0YXR1c1tdfSAqLyAoW1wicGVuZGluZ1wiLCBcImFwcGxpZWQtbG9jYWxseVwiLCBcInBlZXItYXBwbGllZFwiXSlcbmNvbnN0IFBFTkRJTkdfU1RBVFVTRVMgPSBuZXcgU2V0KFBFTkRJTkdfU1RBVFVTX1ZBTFVFUylcbmNvbnN0IE1VVEFUSU9OX1NUQVRVU0VTID0gbmV3IFNldChbLi4uUEVORElOR19TVEFUVVNFUywgXCJjb25mbGljdFwiLCBcInJlamVjdGVkXCIsIFwic3luY2VkXCJdKVxuY29uc3QgVEVSTUlOQUxfU1RBVFVTRVMgPSBuZXcgU2V0KFtcInJlamVjdGVkXCIsIFwic3luY2VkXCJdKVxuLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBQcm9taXNlPHVua25vd24+Pn0gKi9cbmNvbnN0IFNUT1JBR0VfS0VZX0xPQ0tTID0gbmV3IE1hcCgpXG5cbi8qKiBDbGllbnQtc2lkZSBhcHBlbmQtb25seSBzeW5jIG11dGF0aW9uIGxvZyB3aXRoIHBsdWdnYWJsZSBwZXJzaXN0ZW50IHN0b3JhZ2UuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2NhbE11dGF0aW9uTG9nIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBsb2NhbCBtdXRhdGlvbiBsb2cuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0geygpID0+IHN0cmluZ30gW2FyZ3MuaWRHZW5lcmF0b3JdIC0gUmVjb3JkIGlkIGdlbmVyYXRvci5cbiAgICogQHBhcmFtIHsoKSA9PiBEYXRlfSBbYXJncy5ub3ddIC0gQ2xvY2sgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2V9IGFyZ3Muc3RvcmFnZSAtIFBlcnNpc3RlbnQgc3RvcmFnZSBhZGFwdGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3RvcmFnZUtleV0gLSBTdG9yYWdlIGtleS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtpZEdlbmVyYXRvciA9IHJhbmRvbVJlY29yZElkLCBub3cgPSAoKSA9PiBuZXcgRGF0ZSgpLCBzdG9yYWdlLCBzdG9yYWdlS2V5ID0gREVGQVVMVF9TVE9SQUdFX0tFWX0pIHtcbiAgICBpZiAoIXZhbGlkU3RvcmFnZShzdG9yYWdlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9jYWxNdXRhdGlvbkxvZyByZXF1aXJlcyByb3cgc3RvcmFnZSB3aXRoIGFwcGVuZFJlY29yZC9kZWxldGVSZWNvcmRzL25leHRTZXF1ZW5jZS9yZWNvcmQvcmVjb3Jkcy91cGRhdGVSZWNvcmRcIilcbiAgICB9XG5cbiAgICB0aGlzLmlkR2VuZXJhdG9yID0gaWRHZW5lcmF0b3JcbiAgICB0aGlzLm5vdyA9IG5vd1xuICAgIHRoaXMuc3RvcmFnZSA9IHN0b3JhZ2VcbiAgICB0aGlzLnN0b3JhZ2VLZXkgPSBzdG9yYWdlS2V5XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxvZyB2aWV3IHdpdGggc2VxdWVuY2UsIHJlY29yZHMsIGFuZCBsb2NrcyBwYXJ0aXRpb25lZCBieSBhblxuICAgKiBpbW11dGFibGUgcGh5c2ljYWwgdGVuYW50IGlkZW50aXR5IHdoaWxlIHJldXNpbmcgdGhlIHNhbWUgcm93IHN0b3JlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFydGl0aW9uS2V5IC0gU3RhYmxlIG9wYXF1ZSBwYXJ0aXRpb24gaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nfSBQYXJ0aXRpb25lZCBsb2cuXG4gICAqL1xuICBwYXJ0aXRpb24ocGFydGl0aW9uS2V5KSB7XG4gICAgaWYgKCFwYXJ0aXRpb25LZXkpIHRocm93IG5ldyBFcnJvcihcIkxvY2FsTXV0YXRpb25Mb2cgcGFydGl0aW9uIGtleSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZ1wiKVxuXG4gICAgcmV0dXJuIG5ldyBMb2NhbE11dGF0aW9uTG9nKHtcbiAgICAgIGlkR2VuZXJhdG9yOiB0aGlzLmlkR2VuZXJhdG9yLFxuICAgICAgbm93OiB0aGlzLm5vdyxcbiAgICAgIHN0b3JhZ2U6IHRoaXMuc3RvcmFnZSxcbiAgICAgIHN0b3JhZ2VLZXk6IGAke3RoaXMuc3RvcmFnZUtleX06JHtwYXJ0aXRpb25LZXkubGVuZ3RofToke3BhcnRpdGlvbktleX1gXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGEgcGVuZGluZyBtdXRhdGlvbiByZWNvcmQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25EZXBlbmRlbmN5W119IFthcmdzLmRlcGVuZGVuY2llc10gLSBNdXRhdGlvbiBkZXBlbmRlbmNpZXMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSBhcmdzLm11dGF0aW9uIC0gTXV0YXRpb24gcGF5bG9hZC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259IFthcmdzLnNpZ25lZE11dGF0aW9uXSAtIE9yaWdpbmFsIHNpZ25lZCBtdXRhdGlvbiBlbnZlbG9wZSwgcmV0YWluZWQgZm9yIHBlZXItZm9yd2FyZGVkIG11dGF0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZD59IC0gQ3JlYXRlZCBsb2cgcmVjb3JkLlxuICAgKi9cbiAgYXN5bmMgYXBwZW5kKHtkZXBlbmRlbmNpZXMgPSBbXSwgbXV0YXRpb24sIHNpZ25lZE11dGF0aW9ufSkge1xuICAgIGlmIChzaWduZWRNdXRhdGlvbiAhPT0gdW5kZWZpbmVkICYmIHN0YWJsZUpzb25TdHJpbmdpZnkoc2lnbmVkTXV0YXRpb24ubXV0YXRpb24pICE9PSBzdGFibGVKc29uU3RyaW5naWZ5KG11dGF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2lnbmVkIG11dGF0aW9uIHBheWxvYWQgZG9lcyBub3QgbWF0Y2ggdGhlIG11dGF0aW9uXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IHRoaXMuY3VycmVudFRpbWVzdGFtcCgpXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQoe1xuICAgICAgICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCxcbiAgICAgICAgZGVwZW5kZW5jaWVzLFxuICAgICAgICBpZDogdGhpcy5pZEdlbmVyYXRvcigpLFxuICAgICAgICBtdXRhdGlvbixcbiAgICAgICAgc2VxdWVuY2U6IGF3YWl0IHRoaXMuc3RvcmFnZS5uZXh0U2VxdWVuY2UodGhpcy5zdG9yYWdlS2V5KSxcbiAgICAgICAgc2lnbmVkTXV0YXRpb24sXG4gICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgIHVwZGF0ZWRBdDogdGltZXN0YW1wXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UuYXBwZW5kUmVjb3JkKHRoaXMuc3RvcmFnZUtleSwgY2xvbmVSZWNvcmQocmVjb3JkKSlcblxuICAgICAgcmV0dXJuIGNsb25lUmVjb3JkKHJlY29yZClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHJlY29yZHMgb3JkZXJlZCBieSBsb2NhbCBzZXF1ZW5jZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdPn0gLSBMb2cgcmVjb3Jkcy5cbiAgICovXG4gIGFzeW5jIHJlY29yZHMoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVJlY29yZExpc3QoYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZHModGhpcy5zdG9yYWdlS2V5KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHJlY29yZHMgdGhhdCBzdGlsbCBuZWVkIGxvY2FsL3NlcnZlciByZWNvbmNpbGlhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdPn0gLSBQZW5kaW5nIHJlY29yZHMuXG4gICAqL1xuICBhc3luYyBwZW5kaW5nUmVjb3JkcygpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplUmVjb3JkTGlzdChhd2FpdCB0aGlzLnN0b3JhZ2UucmVjb3Jkcyh0aGlzLnN0b3JhZ2VLZXksIHtzdGF0dXNlczogUEVORElOR19TVEFUVVNfVkFMVUVTfSkpXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHJlY29yZCBzdGF0dXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5pZCAtIFJlY29yZCBpZC5cbiAgICogQHBhcmFtIHtMb2NhbE11dGF0aW9uU3RhdHVzfSBhcmdzLnN0YXR1cyAtIE5ldyBzdGF0dXMuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gW2FyZ3Muc3luY1Jlc3VsdF0gLSBSZXN1bHQgbWV0YWRhdGEgKG1heSBjYXJyeSB0cmFuc3BvcnQtcmVzdG9yZWQgdHlwZWQgdmFsdWVzKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZD59IC0gVXBkYXRlZCByZWNvcmQuXG4gICAqL1xuICBhc3luYyB1cGRhdGVTdGF0dXMoe2lkLCBzdGF0dXMsIHN5bmNSZXN1bHR9KSB7XG4gICAgaWYgKCFNVVRBVElPTl9TVEFUVVNFUy5oYXMoc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxvY2FsIG11dGF0aW9uIHN0YXR1cyAnJHtzdGF0dXN9J2ApXG5cbiAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JhZ2VLZXlMb2NrKHRoaXMuc3RvcmFnZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3UmVjb3JkID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGlkKVxuXG4gICAgICBpZiAoIXJhd1JlY29yZCkgdGhyb3cgbmV3IEVycm9yKGBObyBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkICcke2lkfSdgKVxuXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQocmF3UmVjb3JkKVxuXG4gICAgICByZWNvcmQuc3RhdHVzID0gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzfSAqLyAoc3RhdHVzKVxuICAgICAgaWYgKHN5bmNSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBFbmNvZGUgdHJhbnNwb3J0LXJlc3RvcmVkIHR5cGVkIHZhbHVlcyAoZS5nLiBEYXRlIGF0dHJpYnV0ZXMgaW4gYVxuICAgICAgICAvLyBjb25mbGljdCBzZXJ2ZXJNb2RlbCkgYXMgbWFya2VycyBiZWZvcmUgdGhlIEpTT04gY2xvbmUgc28gdGhlXG4gICAgICAgIC8vIGR1cmFibGUgcGVyc2lzdGVuY2Ugcm91bmQgdHJpcCBjYW5ub3Qgc3RyaW5naWZ5IHRoZW0uXG4gICAgICAgIHJlY29yZC5zeW5jUmVzdWx0ID0gY2xvbmVKc29uT2JqZWN0KHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZShzeW5jUmVzdWx0KSwgXCJzeW5jUmVzdWx0XCIpXG4gICAgICB9XG4gICAgICByZWNvcmQudXBkYXRlZEF0ID0gdGhpcy5jdXJyZW50VGltZXN0YW1wKClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS51cGRhdGVSZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBjbG9uZVJlY29yZChyZWNvcmQpKVxuXG4gICAgICByZXR1cm4gcmVzdG9yZVN5bmNSZXN1bHRUeXBlcyhjbG9uZVJlY29yZChyZWNvcmQpKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIG11dGF0aW9uIHBheWxvYWQgb2YgYSBzdGlsbC1wZW5kaW5nIHJlY29yZC4gVXNlZCB3aGVuIGFuXG4gICAqIGFja25vd2xlZGdlZCBwcmVkZWNlc3NvciBzdXBwbGllcyB0aGUgYXV0aG9yaXRhdGl2ZSBiYXNlIGZvciBpdHMgc3VjY2Vzc29yLlxuICAgKiBAcGFyYW0ge3tpZDogc3RyaW5nLCBtdXRhdGlvbjogaW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufX0gYXJncyAtIFJlY29yZCBhbmQgcmVwbGFjZW1lbnQgbXV0YXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSBVcGRhdGVkIHJlY29yZC5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZU11dGF0aW9uKHtpZCwgbXV0YXRpb259KSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBpZClcblxuICAgICAgaWYgKCFyYXdSZWNvcmQpIHRocm93IG5ldyBFcnJvcihgTm8gbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZCAnJHtpZH0nYClcblxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHJhd1JlY29yZClcblxuICAgICAgaWYgKCFQRU5ESU5HX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdXBkYXRlIG11dGF0aW9uIGZvciAke3JlY29yZC5zdGF0dXN9IGxvY2FsIG11dGF0aW9uICcke2lkfSdgKVxuXG4gICAgICByZWNvcmQubXV0YXRpb24gPSBub3JtYWxpemVNdXRhdGlvbihtdXRhdGlvbilcbiAgICAgIHJlY29yZC51cGRhdGVkQXQgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnVwZGF0ZVJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGNsb25lUmVjb3JkKHJlY29yZCkpXG5cbiAgICAgIHJldHVybiByZXN0b3JlU3luY1Jlc3VsdFR5cGVzKGNsb25lUmVjb3JkKHJlY29yZCkpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIGR1cmFibGUgY29uZmxpY3QgZXhwbGljaXRseS4gS2VlcGluZyB0aGUgc2VydmVyIGFja25vd2xlZGdlcyB0aGVcbiAgICogcHJlc2VydmVkIGxvY2FsIGludGVudCB3aXRob3V0IHJlcGxheWluZyBpdDsgcmV0cnlpbmcgbG9jYWwgaW50ZW50IHJlYmFzZXNcbiAgICogaXQgb250byB0aGUgY29uZmxpY3QncyBhdXRob3JpdGF0aXZlIHNlcnZlclZlcnNpb24gYW5kIHJldHVybnMgaXQgdG8gdGhlXG4gICAqIHBlbmRpbmcgcXVldWUuIFRoZSBwcmlvciBjb25mbGljdCByZXN1bHQgc3RheXMgYXR0YWNoZWQgYXMgYXVkaXQgbWV0YWRhdGEuXG4gICAqIEBwYXJhbSB7e2lkOiBzdHJpbmcsIHJlc29sdXRpb246IFwia2VlcC1zZXJ2ZXJcIiB8IFwicmV0cnktbG9jYWxcIn19IGFyZ3MgLSBSZXNvbHV0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkPn0gUmVzb2x2ZWQgcmVjb3JkLlxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZUNvbmZsaWN0KHtpZCwgcmVzb2x1dGlvbn0pIHtcbiAgICBpZiAoIVtcImtlZXAtc2VydmVyXCIsIFwicmV0cnktbG9jYWxcIl0uaW5jbHVkZXMocmVzb2x1dGlvbikpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsb2NhbCBtdXRhdGlvbiBjb25mbGljdCByZXNvbHV0aW9uICcke3Jlc29sdXRpb259J2ApXG5cbiAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JhZ2VLZXlMb2NrKHRoaXMuc3RvcmFnZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3UmVjb3JkID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGlkKVxuXG4gICAgICBpZiAoIXJhd1JlY29yZCkgdGhyb3cgbmV3IEVycm9yKGBObyBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkICcke2lkfSdgKVxuXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQocmF3UmVjb3JkKVxuXG4gICAgICBpZiAocmVjb3JkLnN0YXR1cyAhPT0gXCJjb25mbGljdFwiKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlICR7cmVjb3JkLnN0YXR1c30gbG9jYWwgbXV0YXRpb24gJyR7aWR9JyBhcyBhIGNvbmZsaWN0YClcblxuICAgICAgaWYgKHJlc29sdXRpb24gPT09IFwia2VlcC1zZXJ2ZXJcIikge1xuICAgICAgICByZWNvcmQuc3RhdHVzID0gXCJzeW5jZWRcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2VydmVyVmVyc2lvbiA9IGNvbmZsaWN0U2VydmVyVmVyc2lvbihyZWNvcmQpXG5cbiAgICAgICAgcmVjb3JkLm11dGF0aW9uID0gey4uLnJlY29yZC5tdXRhdGlvbiwgYmFzZVZlcnNpb246IHNlcnZlclZlcnNpb259XG4gICAgICAgIHJlY29yZC5zdGF0dXMgPSBcInBlbmRpbmdcIlxuICAgICAgfVxuXG4gICAgICByZWNvcmQudXBkYXRlZEF0ID0gdGhpcy5jdXJyZW50VGltZXN0YW1wKClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS51cGRhdGVSZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBjbG9uZVJlY29yZChyZWNvcmQpKVxuXG4gICAgICByZXR1cm4gcmVzdG9yZVN5bmNSZXN1bHRUeXBlcyhjbG9uZVJlY29yZChyZWNvcmQpKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUHJ1bmVzIHRlcm1pbmFsIHJlY29yZHMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3IgcmVwbGF5IGRlcGVuZGVuY2llcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIENvbXBhY3Rpb24gb3B0aW9ucy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1heFRlcm1pbmFsUmVjb3Jkc10gLSBNYXhpbXVtIHRlcm1pbmFsIHJlY29yZHMgdG8gcmV0YWluLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MudGVybWluYWxSZXRlbnRpb25Nc10gLSBNaW5pbXVtIGFnZSBiZWZvcmUgcHJ1bmluZyB0ZXJtaW5hbCByZWNvcmRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7ZGVsZXRlZFJlY29yZElkczogc3RyaW5nW119Pn0gLSBDb21wYWN0aW9uIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNvbXBhY3Qoe21heFRlcm1pbmFsUmVjb3JkcywgdGVybWluYWxSZXRlbnRpb25Nc30gPSB7fSkge1xuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy5yZWNvcmRzKClcbiAgICAgIGNvbnN0IHByb3RlY3RlZENsaWVudE11dGF0aW9uSWRzID0gbmV3IFNldChcbiAgICAgICAgcmVjb3Jkc1xuICAgICAgICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gUEVORElOR19TVEFUVVNFUy5oYXMocmVjb3JkLnN0YXR1cykgfHwgcmVjb3JkLnN0YXR1cyA9PT0gXCJjb25mbGljdFwiKVxuICAgICAgICAgIC5mbGF0TWFwKChyZWNvcmQpID0+IHJlY29yZC5kZXBlbmRlbmNpZXMubWFwKChkZXBlbmRlbmN5KSA9PiBkZXBlbmRlbmN5LmNsaWVudE11dGF0aW9uSWQpKVxuICAgICAgKVxuICAgICAgY29uc3QgdGVybWluYWxSZWNvcmRzID0gcmVjb3Jkc1xuICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+IFRFUk1JTkFMX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSlcbiAgICAgICAgLmZpbHRlcigocmVjb3JkKSA9PiAhcHJvdGVjdGVkQ2xpZW50TXV0YXRpb25JZHMuaGFzKHJlY29yZC5tdXRhdGlvbi5jbGllbnRNdXRhdGlvbklkKSlcbiAgICAgICAgLnNvcnQoY29tcGFyZVJlY29yZHNOZXdlc3RGaXJzdClcbiAgICAgIGNvbnN0IGRlbGV0ZUlkcyA9IG5ldyBTZXQoKVxuXG4gICAgICBpZiAodHlwZW9mIG1heFRlcm1pbmFsUmVjb3JkcyA9PT0gXCJudW1iZXJcIiAmJiBtYXhUZXJtaW5hbFJlY29yZHMgPj0gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiB0ZXJtaW5hbFJlY29yZHMuc2xpY2UobWF4VGVybWluYWxSZWNvcmRzKSkgZGVsZXRlSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGVybWluYWxSZXRlbnRpb25NcyA9PT0gXCJudW1iZXJcIiAmJiB0ZXJtaW5hbFJldGVudGlvbk1zID49IDApIHtcbiAgICAgICAgY29uc3QgY3V0b2ZmID0gdGhpcy5ub3coKS5nZXRUaW1lKCkgLSB0ZXJtaW5hbFJldGVudGlvbk1zXG5cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgdGVybWluYWxSZWNvcmRzKSB7XG4gICAgICAgICAgaWYgKG5ldyBEYXRlKHJlY29yZC51cGRhdGVkQXQpLmdldFRpbWUoKSA8IGN1dG9mZikgZGVsZXRlSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVsZXRlZFJlY29yZElkcyA9IEFycmF5LmZyb20oZGVsZXRlSWRzKVxuXG4gICAgICBpZiAoZGVsZXRlZFJlY29yZElkcy5sZW5ndGggPiAwKSBhd2FpdCB0aGlzLnN0b3JhZ2UuZGVsZXRlUmVjb3Jkcyh0aGlzLnN0b3JhZ2VLZXksIGRlbGV0ZWRSZWNvcmRJZHMpXG5cbiAgICAgIHJldHVybiB7ZGVsZXRlZFJlY29yZElkc31cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbG9nIHRpbWVzdGFtcC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBDdXJyZW50IElTTyB0aW1lc3RhbXAuXG4gICAqL1xuICBjdXJyZW50VGltZXN0YW1wKCkge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLm5vdygpXG5cbiAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkgfHwgTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgdGhyb3cgbmV3IEVycm9yKFwiTG9jYWxNdXRhdGlvbkxvZyBub3coKSBtdXN0IHJldHVybiBhIHZhbGlkIERhdGVcIilcblxuICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKClcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgc3RvcmFnZSBhZGFwdGVyIGhhcyBhbGwgcmVxdWlyZWQgcm93LXN0b3JlIG1ldGhvZHMuXG4gKiBAcGFyYW0ge3Vua25vd259IHN0b3JhZ2UgLSBTdG9yYWdlIGFkYXB0ZXIgY2FuZGlkYXRlLlxuICogQHJldHVybnMge3N0b3JhZ2UgaXMgTG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2V9IC0gV2hldGhlciBzdG9yYWdlIGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZFN0b3JhZ2Uoc3RvcmFnZSkge1xuICBpZiAoIXN0b3JhZ2UgfHwgdHlwZW9mIHN0b3JhZ2UgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHN0b3JhZ2VPYmplY3QgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAoc3RvcmFnZSlcblxuICByZXR1cm4gdHlwZW9mIHN0b3JhZ2VPYmplY3QuYXBwZW5kUmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5kZWxldGVSZWNvcmRzID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5uZXh0U2VxdWVuY2UgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0LnJlY29yZCA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QucmVjb3JkcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QudXBkYXRlUmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgYXV0aG9yaXRhdGl2ZSB2ZXJzaW9uIGZyb20gYSBjb25mbGljdGVkIG11dGF0aW9uLlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSByZWNvcmQgLSBDb25mbGljdGVkIHJlY29yZC5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudW1iZXIgfCBudWxsfSAtIEF1dGhvcml0YXRpdmUgdmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29uZmxpY3RTZXJ2ZXJWZXJzaW9uKHJlY29yZCkge1xuICBjb25zdCBjb25mbGljdCA9IHJlY29yZC5zeW5jUmVzdWx0Py5jb25mbGljdFxuXG4gIGlmICghY29uZmxpY3QgfHwgY29uZmxpY3QgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBjb25mbGljdCAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNvbmZsaWN0KSB8fCAhT2JqZWN0Lmhhc093bihjb25mbGljdCwgXCJzZXJ2ZXJWZXJzaW9uXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cnkgbG9jYWwgbXV0YXRpb24gJyR7cmVjb3JkLmlkfScgd2l0aG91dCBhIGNvbmZsaWN0IHNlcnZlclZlcnNpb25gKVxuICB9XG5cbiAgY29uc3QgY29uZmxpY3RNZXRhZGF0YSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovIChjb25mbGljdClcblxuICByZXR1cm4gY2xvbmVCYXNlVmVyc2lvbihjb25mbGljdE1ldGFkYXRhLnNlcnZlclZlcnNpb24pXG59XG5cbi8qKlxuICogU29ydHMgcmVjb3JkcyBieSBuZXdlc3QgdXBkYXRlL3NlcXVlbmNlIGZpcnN0LlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSBsZWZ0IC0gTGVmdCByZWNvcmQuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IHJpZ2h0IC0gUmlnaHQgcmVjb3JkLlxuICogQHJldHVybnMge251bWJlcn0gLSBTb3J0IHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZVJlY29yZHNOZXdlc3RGaXJzdChsZWZ0LCByaWdodCkge1xuICBjb25zdCB1cGRhdGVkQXRDb21wYXJpc29uID0gcmlnaHQudXBkYXRlZEF0LmxvY2FsZUNvbXBhcmUobGVmdC51cGRhdGVkQXQpXG5cbiAgaWYgKHVwZGF0ZWRBdENvbXBhcmlzb24gIT09IDApIHJldHVybiB1cGRhdGVkQXRDb21wYXJpc29uXG5cbiAgcmV0dXJuIHJpZ2h0LnNlcXVlbmNlIC0gbGVmdC5zZXF1ZW5jZVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW5kIHNvcnRzIGEgbGlzdCBvZiByZWNvcmRzLlxuICogQHBhcmFtIHt1bmtub3dufSByZWNvcmRzIC0gUmF3IHJlY29yZHMuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdfSAtIE5vcm1hbGl6ZWQgcmVjb3Jkcy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmVjb3JkTGlzdChyZWNvcmRzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZWNvcmRzKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gbG9nIHN0b3JhZ2UgcmVjb3JkcyBhcnJheVwiKVxuXG4gIHJldHVybiByZWNvcmRzXG4gICAgLm1hcChub3JtYWxpemVSZWNvcmQpXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LnNlcXVlbmNlIC0gcmlnaHQuc2VxdWVuY2UpXG4gICAgLm1hcCgocmVjb3JkKSA9PiBjbG9uZVJlY29yZChyZWNvcmQpKVxuICAgIC5tYXAocmVzdG9yZVN5bmNSZXN1bHRUeXBlcylcbn1cblxuLyoqXG4gKiBSZXN0b3JlcyB0cmFuc3BvcnQtcmVzdG9yZWQgdHlwZWQgdmFsdWVzIGluIGEgcmVjb3JkJ3Mgc3luY1Jlc3VsdCBhZnRlciB0aGVcbiAqIGZpbmFsIEpTT04gY2xvbmUsIHNvIGNhbGxlcnMgc2VlIERhdGUgKGFuZCBvdGhlciB0eXBlZCkgdmFsdWVzIG9uIGR1cmFibGVcbiAqIHJlYWRiYWNrIGluc3RlYWQgb2YgbWFya2VyLWVuY29kZWQgSVNPIHN0cmluZ3MuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IHJlY29yZCAtIENsb25lZCByZWNvcmQuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gLSBSZWNvcmQgd2l0aCByZXN0b3JlZCBzeW5jUmVzdWx0IHR5cGVzLlxuICovXG5mdW5jdGlvbiByZXN0b3JlU3luY1Jlc3VsdFR5cGVzKHJlY29yZCkge1xuICBpZiAocmVjb3JkLnN5bmNSZXN1bHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlY29yZFxuXG4gIHJldHVybiB7XG4gICAgLi4ucmVjb3JkLFxuICAgIHN5bmNSZXN1bHQ6IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gKi8gKFxuICAgICAgZGVzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUocmVjb3JkLnN5bmNSZXN1bHQpXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBhIGNhbGxiYWNrIGFmdGVyIGVhcmxpZXIgd3JpdGVzIGZvciB0aGUgc2FtZSBzdG9yYWdlIGtleSBoYXZlIGNvbXBsZXRlZC5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcmFnZUtleSAtIFN0b3JhZ2Uga2V5IHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxUPn0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBydW4gdW5kZXIgdGhlIHN0b3JhZ2Uta2V5IGxvY2suXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxUPn0gLSBDYWxsYmFjayByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdpdGhTdG9yYWdlS2V5TG9jayhzdG9yYWdlS2V5LCBjYWxsYmFjaykge1xuICBjb25zdCBwcmV2aW91cyA9IFNUT1JBR0VfS0VZX0xPQ0tTLmdldChzdG9yYWdlS2V5KSB8fCBQcm9taXNlLnJlc29sdmUoKVxuICBsZXQgcmVsZWFzZSA9ICgpID0+IHt9XG4gIGNvbnN0IGN1cnJlbnQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geyByZWxlYXNlID0gKCkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpIH0pXG4gIGNvbnN0IGNoYWluZWQgPSBwcmV2aW91cy5jYXRjaCgoX2Vycm9yKSA9PiB7fSkudGhlbigoKSA9PiBjdXJyZW50KVxuXG4gIFNUT1JBR0VfS0VZX0xPQ0tTLnNldChzdG9yYWdlS2V5LCBjaGFpbmVkKVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgcHJldmlvdXMuY2F0Y2goKF9lcnJvcikgPT4ge30pXG5cbiAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soKVxuICB9IGZpbmFsbHkge1xuICAgIHJlbGVhc2UoKVxuICAgIGlmIChTVE9SQUdFX0tFWV9MT0NLUy5nZXQoc3RvcmFnZUtleSkgPT09IGNoYWluZWQpIFNUT1JBR0VfS0VZX0xPQ0tTLmRlbGV0ZShzdG9yYWdlS2V5KVxuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBlcnNpc3RlZCBsb2cgcmVjb3JkLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyByZWNvcmQuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gLSBOb3JtYWxpemVkIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmVjb3JkKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkIG9iamVjdFwiKVxuXG4gIGNvbnN0IHJlY29yZCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcbiAgY29uc3Qgc3RhdHVzID0gcmVxdWlyZWRTdHJpbmcocmVjb3JkLnN0YXR1cywgXCJzdGF0dXNcIilcblxuICBpZiAoIU1VVEFUSU9OX1NUQVRVU0VTLmhhcyhzdGF0dXMpKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbG9jYWwgbXV0YXRpb24gc3RhdHVzICcke3N0YXR1c30nYClcblxuICBjb25zdCBiYXNlUmVjb3JkID0ge1xuICAgIGNyZWF0ZWRBdDogcmVxdWlyZWRJc29UaW1lc3RhbXAocmVjb3JkLmNyZWF0ZWRBdCwgXCJjcmVhdGVkQXRcIiksXG4gICAgZGVwZW5kZW5jaWVzOiBub3JtYWxpemVEZXBlbmRlbmNpZXMocmVjb3JkLmRlcGVuZGVuY2llcyksXG4gICAgaWQ6IHJlcXVpcmVkU3RyaW5nKHJlY29yZC5pZCwgXCJpZFwiKSxcbiAgICBtdXRhdGlvbjogbm9ybWFsaXplTXV0YXRpb24ocmVjb3JkLm11dGF0aW9uKSxcbiAgICBzZXF1ZW5jZTogcmVxdWlyZWRQb3NpdGl2ZUludGVnZXIocmVjb3JkLnNlcXVlbmNlLCBcInNlcXVlbmNlXCIpLFxuICAgIHN0YXR1czogLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzfSAqLyAoc3RhdHVzKSxcbiAgICB1cGRhdGVkQXQ6IHJlcXVpcmVkSXNvVGltZXN0YW1wKHJlY29yZC51cGRhdGVkQXQsIFwidXBkYXRlZEF0XCIpXG4gIH1cblxuICBpZiAocmVjb3JkLnNpZ25lZE11dGF0aW9uID09PSB1bmRlZmluZWQgJiYgcmVjb3JkLnN5bmNSZXN1bHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGJhc2VSZWNvcmRcblxuICAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9ICovXG4gIGNvbnN0IG5vcm1hbGl6ZWRSZWNvcmQgPSB7Li4uYmFzZVJlY29yZH1cblxuICBpZiAocmVjb3JkLnNpZ25lZE11dGF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBub3JtYWxpemVkUmVjb3JkLnNpZ25lZE11dGF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259ICovIChjbG9uZUpzb25PYmplY3QocmVjb3JkLnNpZ25lZE11dGF0aW9uLCBcInNpZ25lZE11dGF0aW9uXCIpKVxuICB9XG4gIGlmIChyZWNvcmQuc3luY1Jlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gUGVyc2lzdGVkIHN5bmNSZXN1bHQgaXMgbWFya2VyLWVuY29kZWQgc28gaXQgc3Vydml2ZXMgdGhlIEpTT04gY2xvbmU7XG4gICAgLy8gdHlwZWQgdmFsdWVzIGFyZSByZXN0b3JlZCBieSByZXN0b3JlU3luY1Jlc3VsdFR5cGVzIGF0IHRoZSByZWFkIGJvdW5kYXJ5LlxuICAgIG5vcm1hbGl6ZWRSZWNvcmQuc3luY1Jlc3VsdCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gKi8gKFxuICAgICAgY2xvbmVKc29uT2JqZWN0KHJlY29yZC5zeW5jUmVzdWx0LCBcInN5bmNSZXN1bHRcIilcbiAgICApXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZFJlY29yZFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZGVwZW5kZW5jeSBtZXRhZGF0YSBlbnRyaWVzLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBkZXBlbmRlbmNpZXMuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lbXX0gLSBOb3JtYWxpemVkIGRlcGVuZGVuY2llcy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGVwZW5kZW5jaWVzKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW11cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gZGVwZW5kZW5jaWVzIGFycmF5XCIpXG5cbiAgcmV0dXJuIHZhbHVlLm1hcCgoZGVwZW5kZW5jeSkgPT4ge1xuICAgIGlmICghZGVwZW5kZW5jeSB8fCB0eXBlb2YgZGVwZW5kZW5jeSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlcGVuZGVuY3kpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBkZXBlbmRlbmN5IG9iamVjdFwiKVxuICAgIH1cblxuICAgIGNvbnN0IGRlcGVuZGVuY3lPYmplY3QgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAoZGVwZW5kZW5jeSlcblxuICAgIHJldHVybiB7XG4gICAgICBjbGllbnRNdXRhdGlvbklkOiByZXF1aXJlZFN0cmluZyhkZXBlbmRlbmN5T2JqZWN0LmNsaWVudE11dGF0aW9uSWQsIFwiZGVwZW5kZW5jeSBjbGllbnRNdXRhdGlvbklkXCIpLFxuICAgICAgbW9kZWw6IHJlcXVpcmVkU3RyaW5nKGRlcGVuZGVuY3lPYmplY3QubW9kZWwsIFwiZGVwZW5kZW5jeSBtb2RlbFwiKVxuICAgIH1cbiAgfSlcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgc3luYyBtdXRhdGlvbiBwYXlsb2FkLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBtdXRhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259IC0gTm9ybWFsaXplZCBtdXRhdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTXV0YXRpb24odmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIHN5bmMgbXV0YXRpb24gb2JqZWN0XCIpXG5cbiAgY29uc3QgbXV0YXRpb24gPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gKi8gKHtcbiAgICBhY3RvckRldmljZUlkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5hY3RvckRldmljZUlkLCBcImFjdG9yRGV2aWNlSWRcIiksXG4gICAgYWN0b3JVc2VySWQ6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLmFjdG9yVXNlcklkLCBcImFjdG9yVXNlcklkXCIpLFxuICAgIGNsaWVudE11dGF0aW9uSWQ6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLmNsaWVudE11dGF0aW9uSWQsIFwiY2xpZW50TXV0YXRpb25JZFwiKSxcbiAgICBtb2RlbDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ubW9kZWwsIFwibW9kZWxcIiksXG4gICAgb2NjdXJyZWRBdDogcmVxdWlyZWRJc29UaW1lc3RhbXAobXV0YXRpb24ub2NjdXJyZWRBdCwgXCJvY2N1cnJlZEF0XCIpLFxuICAgIG9mZmxpbmVHcmFudElkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5vZmZsaW5lR3JhbnRJZCwgXCJvZmZsaW5lR3JhbnRJZFwiKSxcbiAgICBvcGVyYXRpb246IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLm9wZXJhdGlvbiwgXCJvcGVyYXRpb25cIiksXG4gICAgcG9saWN5SGFzaDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ucG9saWN5SGFzaCwgXCJwb2xpY3lIYXNoXCIpXG4gIH0pXG5cbiAgaWYgKG11dGF0aW9uLmF0dHJpYnV0ZXMgIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5hdHRyaWJ1dGVzID0gY2xvbmVKc29uT2JqZWN0KG11dGF0aW9uLmF0dHJpYnV0ZXMsIFwiYXR0cmlidXRlc1wiKVxuICBpZiAobXV0YXRpb24uYmFzZVZlcnNpb24gIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5iYXNlVmVyc2lvbiA9IGNsb25lQmFzZVZlcnNpb24obXV0YXRpb24uYmFzZVZlcnNpb24pXG4gIGlmIChtdXRhdGlvbi5jb21tYW5kICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQuY29tbWFuZCA9IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLmNvbW1hbmQsIFwiY29tbWFuZFwiKVxuICBpZiAobXV0YXRpb24ucGF5bG9hZCAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLnBheWxvYWQgPSBjbG9uZUpzb25PYmplY3QobXV0YXRpb24ucGF5bG9hZCwgXCJwYXlsb2FkXCIpXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJlcXVpcmVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRTdHJpbmcodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgdmFsdWUubGVuZ3RoIDwgMSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfWApXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogUmVxdWlyZXMgYW4gSVNPIHRpbWVzdGFtcCBzdHJpbmcuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIElTTyB0aW1lc3RhbXAuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkSXNvVGltZXN0YW1wKHZhbHVlLCBsYWJlbCkge1xuICBjb25zdCBzdHJpbmdWYWx1ZSA9IHJlcXVpcmVkU3RyaW5nKHZhbHVlLCBsYWJlbClcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHN0cmluZ1ZhbHVlKVxuXG4gIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpIHx8IGRhdGUudG9JU09TdHJpbmcoKSAhPT0gc3RyaW5nVmFsdWUpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH0gSVNPIHRpbWVzdGFtcGApXG5cbiAgcmV0dXJuIHN0cmluZ1ZhbHVlXG59XG5cbi8qKlxuICogUmVxdWlyZXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge251bWJlcn0gLSBQb3NpdGl2ZSBpbnRlZ2VyLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZFBvc2l0aXZlSW50ZWdlcih2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCAxKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9IHBvc2l0aXZlIGludGVnZXJgKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIENsb25lcyBhIHN1cHBvcnRlZCBiYXNlLXZlcnNpb24gdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IGJhc2UgdmVyc2lvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudW1iZXIgfCBudWxsfSAtIE5vcm1hbGl6ZWQgYmFzZSB2ZXJzaW9uLlxuICovXG5mdW5jdGlvbiBjbG9uZUJhc2VWZXJzaW9uKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gdmFsdWVcblxuICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBiYXNlVmVyc2lvbiBzdHJpbmcsIG51bWJlciwgb3IgbnVsbFwiKVxufVxuXG4vKipcbiAqIENsb25lcyBhIEpTT04tY29tcGF0aWJsZSB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgSlNPTiB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWV9IC0gQ2xvbmVkIEpTT04gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGNsb25lSnNvblZhbHVlKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBKU09OLWNvbXBhdGlibGUgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH1gKVxuXG4gIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWV9ICovIChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpXG59XG5cbi8qKlxuICogQ2xvbmVzIGEgSlNPTi1jb21wYXRpYmxlIG9iamVjdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgSlNPTiBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gLSBDbG9uZWQgSlNPTiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNsb25lSnNvbk9iamVjdCh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH0gb2JqZWN0YClcblxuICByZXR1cm4gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gKi8gKGNsb25lSnNvblZhbHVlKHZhbHVlLCBsYWJlbCkpXG59XG5cbi8qKlxuICogQ2xvbmVzIGEgbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZC5cbiAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gcmVjb3JkIC0gUmVjb3JkIHRvIGNsb25lLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IC0gQ2xvbmVkIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVSZWNvcmQocmVjb3JkKSB7XG4gIHJldHVybiAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9ICovIChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlY29yZCkpKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSBsb2NhbCBtdXRhdGlvbiByZWNvcmQgaWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJhbmRvbSByZWNvcmQgaWQuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbVJlY29yZElkKCkge1xuICBjb25zdCBjcnlwdG9Qcm92aWRlciA9IGdsb2JhbFRoaXMuY3J5cHRvXG5cbiAgaWYgKGNyeXB0b1Byb3ZpZGVyICYmIHR5cGVvZiBjcnlwdG9Qcm92aWRlci5yYW5kb21VVUlEID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjcnlwdG9Qcm92aWRlci5yYW5kb21VVUlEKClcblxuICByZXR1cm4gYGxvY2FsLW11dGF0aW9uLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zbGljZSgyKX1gXG59XG4iXX0=
525
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbXV0YXRpb24tbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvbG9jYWwtbXV0YXRpb24tbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7O0tBR0s7QUFDTDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxZQUFZO0FBRVosT0FBTyxFQUFDLHNDQUFzQyxFQUFFLG9DQUFvQyxFQUFDLE1BQU0sK0NBQStDLENBQUE7QUFDMUksT0FBTyxtQkFBbUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFBO0FBQzdELE1BQU0scUJBQXFCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3pELDRDQUE0QztBQUM1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFbkMsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWdCO0lBQ25DOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsV0FBVyxHQUFHLGNBQWMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxHQUFHLG1CQUFtQixFQUFD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LENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDbkYsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsY0FBYztJQUNyQixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFBO0lBRXhDLElBQUksY0FBYyxJQUFJLE9BQU8sY0FBYyxDQUFDLFVBQVUsS0FBSyxVQUFVO1FBQUUsT0FBTyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUE7SUFFekcsT0FBTyxrQkFBa0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7QUFDOUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZCBxdWVyeSBvcHRpb25zLlxuICogQHR5cGVkZWYge29iamVjdH0gTG9jYWxNdXRhdGlvbkxvZ1JlY29yZHNPcHRpb25zXG4gKiBAcHJvcGVydHkge0xvY2FsTXV0YXRpb25TdGF0dXNbXX0gW3N0YXR1c2VzXSAtIE9wdGlvbmFsIHN0YXR1cyBmaWx0ZXIuXG4gKi9cbi8qKlxuICogTG9jYWwgbXV0YXRpb24gbG9nIHJvdy1vcmllbnRlZCBzdG9yYWdlIGFkYXB0ZXIuXG4gKlxuICogSW1wbGVtZW50YXRpb25zIHNob3VsZCBzdG9yZSBlYWNoIG11dGF0aW9uIGxvZyByZWNvcmQgYXMgaXRzIG93biByb3cvZW50cnkuXG4gKiBOYXRpdmUgYXBwcyBzaG91bGQgYmFjayB0aGlzIHdpdGggU1FMaXRlIGFuZCBpbmRleGVzIG9uIHN0b3JhZ2Uga2V5LCBzdGF0dXMsXG4gKiBhbmQgc2VxdWVuY2UuIEF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIGxvZyBhcyBvbmUgSlNPTiBibG9iLlxuICogQHR5cGVkZWYge29iamVjdH0gTG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2VcbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgcmVjb3JkOiBMb2NhbE11dGF0aW9uTG9nUmVjb3JkKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gYXBwZW5kUmVjb3JkIC0gQXBwZW5kcyBvbmUgbG9nIHJlY29yZC5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgaWRzOiBzdHJpbmdbXSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IGRlbGV0ZVJlY29yZHMgLSBEZWxldGVzIGxvZyByZWNvcmRzIGJ5IGlkLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nKSA9PiBQcm9taXNlPG51bWJlcj4gfCBudW1iZXJ9IG5leHRTZXF1ZW5jZSAtIFJldHVybnMgdGhlIG5leHQgbG9jYWwgc2VxdWVuY2UgbnVtYmVyLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCBpZDogc3RyaW5nKSA9PiBQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQgfCBudWxsIHwgdW5kZWZpbmVkPiB8IExvY2FsTXV0YXRpb25Mb2dSZWNvcmQgfCBudWxsIHwgdW5kZWZpbmVkfSByZWNvcmQgLSBSZWFkcyBvbmUgbG9nIHJlY29yZCBieSBpZC5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgb3B0aW9ucz86IExvY2FsTXV0YXRpb25Mb2dSZWNvcmRzT3B0aW9ucykgPT4gUHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkW10+IHwgTG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdfSByZWNvcmRzIC0gUmVhZHMgbG9nIHJlY29yZHMuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIHJlY29yZDogTG9jYWxNdXRhdGlvbkxvZ1JlY29yZCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IHVwZGF0ZVJlY29yZCAtIFJlcGxhY2VzIG9uZSBsb2cgcmVjb3JkLlxuICovXG4vKipcbiAqIExvY2FsIHN5bmMgbXV0YXRpb24gZGVwZW5kZW5jeSBtZXRhZGF0YS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvY2FsTXV0YXRpb25EZXBlbmRlbmN5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2xpZW50TXV0YXRpb25JZCAtIENsaWVudCBtdXRhdGlvbiBpZCB0aGlzIG11dGF0aW9uIGRlcGVuZHMgb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZWwgLSBEZXBlbmRlbnQgbW9kZWwvcmVzb3VyY2UgbmFtZS5cbiAqL1xuLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgc3RhdHVzLlxuICogQHR5cGVkZWYge1wicGVuZGluZ1wiIHwgXCJhcHBsaWVkLWxvY2FsbHlcIiB8IFwicGVlci1hcHBsaWVkXCIgfCBcImNvbmZsaWN0XCIgfCBcInJlamVjdGVkXCIgfCBcInN5bmNlZFwifSBMb2NhbE11dGF0aW9uU3RhdHVzXG4gKiAqL1xuLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkLlxuICogQHR5cGVkZWYge29iamVjdH0gTG9jYWxNdXRhdGlvbkxvZ1JlY29yZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNyZWF0ZWRBdCAtIElTTyB0aW1lc3RhbXAgd2hlbiB0aGUgcmVjb3JkIHdhcyBjcmVhdGVkIGxvY2FsbHkuXG4gKiBAcHJvcGVydHkge0xvY2FsTXV0YXRpb25EZXBlbmRlbmN5W119IGRlcGVuZGVuY2llcyAtIE90aGVyIGxvY2FsIG11dGF0aW9ucyB0aGF0IG11c3QgcmVwbGF5IGZpcnN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gTG9jYWwgbG9nIHJlY29yZCBpZC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSBtdXRhdGlvbiAtIERldmljZSBtdXRhdGlvbiBwYXlsb2FkLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259IFtzaWduZWRNdXRhdGlvbl0gLSBPcmlnaW5hbCBzaWduZWQgbXV0YXRpb24gZW52ZWxvcGUsIHJldGFpbmVkIGZvciBwZWVyLWZvcndhcmRlZCBtdXRhdGlvbnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2VxdWVuY2UgLSBNb25vdG9uaWMgbG9jYWwgc2VxdWVuY2UuXG4gKiBAcHJvcGVydHkge0xvY2FsTXV0YXRpb25TdGF0dXN9IHN0YXR1cyAtIExvY2FsIHJlcGxheS9hcHBseSBzdGF0dXMuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZT59IFtzeW5jUmVzdWx0XSAtIEJhY2tlbmQgcmVwbGF5L3Jlc3VsdCBtZXRhZGF0YS4gU3RvcmVkIGFzIHRyYW5zcG9ydCBtYXJrZXJzIHNvIERhdGUgKGFuZCBvdGhlciB0eXBlZCkgdmFsdWVzIHN1cnZpdmUgdGhlIGR1cmFibGUgSlNPTiByb3VuZCB0cmlwIGFuZCBhcmUgcmVzdG9yZWQgb24gcmVhZGJhY2suXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXBkYXRlZEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSByZWNvcmQgd2FzIGxhc3QgY2hhbmdlZC5cbiAqL1xuLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7ZGVzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUsIHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZX0gZnJvbSBcIi4uL2Zyb250ZW5kLW1vZGVscy90cmFuc3BvcnQtc2VyaWFsaXphdGlvbi5qc1wiXG5pbXBvcnQgc3RhYmxlSnNvblN0cmluZ2lmeSBmcm9tIFwiLi9zdGFibGUtanNvbi5qc1wiXG5cbmNvbnN0IERFRkFVTFRfU1RPUkFHRV9LRVkgPSBcInZlbG9jaW91cy5zeW5jLmxvY2FsTXV0YXRpb25Mb2dcIlxuY29uc3QgUEVORElOR19TVEFUVVNfVkFMVUVTID0gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzW119ICovIChbXCJwZW5kaW5nXCIsIFwiYXBwbGllZC1sb2NhbGx5XCIsIFwicGVlci1hcHBsaWVkXCJdKVxuY29uc3QgUEVORElOR19TVEFUVVNFUyA9IG5ldyBTZXQoUEVORElOR19TVEFUVVNfVkFMVUVTKVxuY29uc3QgTVVUQVRJT05fU1RBVFVTRVMgPSBuZXcgU2V0KFsuLi5QRU5ESU5HX1NUQVRVU0VTLCBcImNvbmZsaWN0XCIsIFwicmVqZWN0ZWRcIiwgXCJzeW5jZWRcIl0pXG5jb25zdCBURVJNSU5BTF9TVEFUVVNFUyA9IG5ldyBTZXQoW1wicmVqZWN0ZWRcIiwgXCJzeW5jZWRcIl0pXG4vKiogQHR5cGUge01hcDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+fSAqL1xuY29uc3QgU1RPUkFHRV9LRVlfTE9DS1MgPSBuZXcgTWFwKClcblxuLyoqIENsaWVudC1zaWRlIGFwcGVuZC1vbmx5IHN5bmMgbXV0YXRpb24gbG9nIHdpdGggcGx1Z2dhYmxlIHBlcnNpc3RlbnQgc3RvcmFnZS4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2FsTXV0YXRpb25Mb2cge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGxvY2FsIG11dGF0aW9uIGxvZy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7KCkgPT4gc3RyaW5nfSBbYXJncy5pZEdlbmVyYXRvcl0gLSBSZWNvcmQgaWQgZ2VuZXJhdG9yLlxuICAgKiBAcGFyYW0geygpID0+IERhdGV9IFthcmdzLm5vd10gLSBDbG9jayBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nU3RvcmFnZX0gYXJncy5zdG9yYWdlIC0gUGVyc2lzdGVudCBzdG9yYWdlIGFkYXB0ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdG9yYWdlS2V5XSAtIFN0b3JhZ2Uga2V5LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2lkR2VuZXJhdG9yID0gcmFuZG9tUmVjb3JkSWQsIG5vdyA9ICgpID0+IG5ldyBEYXRlKCksIHN0b3JhZ2UsIHN0b3JhZ2VLZXkgPSBERUZBVUxUX1NUT1JBR0VfS0VZfSkge1xuICAgIGlmICghdmFsaWRTdG9yYWdlKHN0b3JhZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2NhbE11dGF0aW9uTG9nIHJlcXVpcmVzIHJvdyBzdG9yYWdlIHdpdGggYXBwZW5kUmVjb3JkL2RlbGV0ZVJlY29yZHMvbmV4dFNlcXVlbmNlL3JlY29yZC9yZWNvcmRzL3VwZGF0ZVJlY29yZFwiKVxuICAgIH1cblxuICAgIHRoaXMuaWRHZW5lcmF0b3IgPSBpZEdlbmVyYXRvclxuICAgIHRoaXMubm93ID0gbm93XG4gICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZVxuICAgIHRoaXMuc3RvcmFnZUtleSA9IHN0b3JhZ2VLZXlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbG9nIHZpZXcgd2l0aCBzZXF1ZW5jZSwgcmVjb3JkcywgYW5kIGxvY2tzIHBhcnRpdGlvbmVkIGJ5IGFuXG4gICAqIGltbXV0YWJsZSBwaHlzaWNhbCB0ZW5hbnQgaWRlbnRpdHkgd2hpbGUgcmV1c2luZyB0aGUgc2FtZSByb3cgc3RvcmUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJ0aXRpb25LZXkgLSBTdGFibGUgb3BhcXVlIHBhcnRpdGlvbiBpZGVudGl0eS5cbiAgICogQHJldHVybnMge0xvY2FsTXV0YXRpb25Mb2d9IFBhcnRpdGlvbmVkIGxvZy5cbiAgICovXG4gIHBhcnRpdGlvbihwYXJ0aXRpb25LZXkpIHtcbiAgICBpZiAoIXBhcnRpdGlvbktleSkgdGhyb3cgbmV3IEVycm9yKFwiTG9jYWxNdXRhdGlvbkxvZyBwYXJ0aXRpb24ga2V5IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpXG5cbiAgICByZXR1cm4gbmV3IExvY2FsTXV0YXRpb25Mb2coe1xuICAgICAgaWRHZW5lcmF0b3I6IHRoaXMuaWRHZW5lcmF0b3IsXG4gICAgICBub3c6IHRoaXMubm93LFxuICAgICAgc3RvcmFnZTogdGhpcy5zdG9yYWdlLFxuICAgICAgc3RvcmFnZUtleTogYCR7dGhpcy5zdG9yYWdlS2V5fToke3BhcnRpdGlvbktleS5sZW5ndGh9OiR7cGFydGl0aW9uS2V5fWBcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgYSBwZW5kaW5nIG11dGF0aW9uIHJlY29yZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lbXX0gW2FyZ3MuZGVwZW5kZW5jaWVzXSAtIE11dGF0aW9uIGRlcGVuZGVuY2llcy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259IGFyZ3MubXV0YXRpb24gLSBNdXRhdGlvbiBwYXlsb2FkLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlNpZ25lZFN5bmNNdXRhdGlvbn0gW2FyZ3Muc2lnbmVkTXV0YXRpb25dIC0gT3JpZ2luYWwgc2lnbmVkIG11dGF0aW9uIGVudmVsb3BlLCByZXRhaW5lZCBmb3IgcGVlci1mb3J3YXJkZWQgbXV0YXRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkPn0gLSBDcmVhdGVkIGxvZyByZWNvcmQuXG4gICAqL1xuICBhc3luYyBhcHBlbmQoe2RlcGVuZGVuY2llcyA9IFtdLCBtdXRhdGlvbiwgc2lnbmVkTXV0YXRpb259KSB7XG4gICAgaWYgKHNpZ25lZE11dGF0aW9uICE9PSB1bmRlZmluZWQgJiYgc3RhYmxlSnNvblN0cmluZ2lmeShzaWduZWRNdXRhdGlvbi5tdXRhdGlvbikgIT09IHN0YWJsZUpzb25TdHJpbmdpZnkobXV0YXRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaWduZWQgbXV0YXRpb24gcGF5bG9hZCBkb2VzIG5vdCBtYXRjaCB0aGUgbXV0YXRpb25cIilcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JhZ2VLZXlMb2NrKHRoaXMuc3RvcmFnZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5jdXJyZW50VGltZXN0YW1wKClcbiAgICAgIGNvbnN0IHJlY29yZCA9IG5vcm1hbGl6ZVJlY29yZCh7XG4gICAgICAgIGNyZWF0ZWRBdDogdGltZXN0YW1wLFxuICAgICAgICBkZXBlbmRlbmNpZXMsXG4gICAgICAgIGlkOiB0aGlzLmlkR2VuZXJhdG9yKCksXG4gICAgICAgIG11dGF0aW9uLFxuICAgICAgICBzZXF1ZW5jZTogYXdhaXQgdGhpcy5zdG9yYWdlLm5leHRTZXF1ZW5jZSh0aGlzLnN0b3JhZ2VLZXkpLFxuICAgICAgICBzaWduZWRNdXRhdGlvbixcbiAgICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIixcbiAgICAgICAgdXBkYXRlZEF0OiB0aW1lc3RhbXBcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5hcHBlbmRSZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBjbG9uZVJlY29yZChyZWNvcmQpKVxuXG4gICAgICByZXR1cm4gY2xvbmVSZWNvcmQocmVjb3JkKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgcmVjb3JkcyBvcmRlcmVkIGJ5IGxvY2FsIHNlcXVlbmNlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkW10+fSAtIExvZyByZWNvcmRzLlxuICAgKi9cbiAgYXN5bmMgcmVjb3JkcygpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplUmVjb3JkTGlzdChhd2FpdCB0aGlzLnN0b3JhZ2UucmVjb3Jkcyh0aGlzLnN0b3JhZ2VLZXkpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcmVjb3JkcyB0aGF0IHN0aWxsIG5lZWQgbG9jYWwvc2VydmVyIHJlY29uY2lsaWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkW10+fSAtIFBlbmRpbmcgcmVjb3Jkcy5cbiAgICovXG4gIGFzeW5jIHBlbmRpbmdSZWNvcmRzKCkge1xuICAgIHJldHVybiBub3JtYWxpemVSZWNvcmRMaXN0KGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmRzKHRoaXMuc3RvcmFnZUtleSwge3N0YXR1c2VzOiBQRU5ESU5HX1NUQVRVU19WQUxVRVN9KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgcmVjb3JkIHN0YXR1cy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmlkIC0gUmVjb3JkIGlkLlxuICAgKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25TdGF0dXN9IGFyZ3Muc3RhdHVzIC0gTmV3IHN0YXR1cy5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWU+fSBbYXJncy5zeW5jUmVzdWx0XSAtIFJlc3VsdCBtZXRhZGF0YSAobWF5IGNhcnJ5IHRyYW5zcG9ydC1yZXN0b3JlZCB0eXBlZCB2YWx1ZXMpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkPn0gLSBVcGRhdGVkIHJlY29yZC5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVN0YXR1cyh7aWQsIHN0YXR1cywgc3luY1Jlc3VsdH0pIHtcbiAgICBpZiAoIU1VVEFUSU9OX1NUQVRVU0VTLmhhcyhzdGF0dXMpKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbG9jYWwgbXV0YXRpb24gc3RhdHVzICcke3N0YXR1c30nYClcblxuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByYXdSZWNvcmQgPSBhd2FpdCB0aGlzLnN0b3JhZ2UucmVjb3JkKHRoaXMuc3RvcmFnZUtleSwgaWQpXG5cbiAgICAgIGlmICghcmF3UmVjb3JkKSB0aHJvdyBuZXcgRXJyb3IoYE5vIGxvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQgJyR7aWR9J2ApXG5cbiAgICAgIGNvbnN0IHJlY29yZCA9IG5vcm1hbGl6ZVJlY29yZChyYXdSZWNvcmQpXG5cbiAgICAgIHJlY29yZC5zdGF0dXMgPSAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25TdGF0dXN9ICovIChzdGF0dXMpXG4gICAgICBpZiAoc3luY1Jlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIEVuY29kZSB0cmFuc3BvcnQtcmVzdG9yZWQgdHlwZWQgdmFsdWVzIChlLmcuIERhdGUgYXR0cmlidXRlcyBpbiBhXG4gICAgICAgIC8vIGNvbmZsaWN0IHNlcnZlck1vZGVsKSBhcyBtYXJrZXJzIGJlZm9yZSB0aGUgSlNPTiBjbG9uZSBzbyB0aGVcbiAgICAgICAgLy8gZHVyYWJsZSBwZXJzaXN0ZW5jZSByb3VuZCB0cmlwIGNhbm5vdCBzdHJpbmdpZnkgdGhlbS5cbiAgICAgICAgcmVjb3JkLnN5bmNSZXN1bHQgPSBjbG9uZUpzb25PYmplY3Qoc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlKHN5bmNSZXN1bHQpLCBcInN5bmNSZXN1bHRcIilcbiAgICAgIH1cbiAgICAgIHJlY29yZC51cGRhdGVkQXQgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnVwZGF0ZVJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGNsb25lUmVjb3JkKHJlY29yZCkpXG5cbiAgICAgIHJldHVybiByZXN0b3JlU3luY1Jlc3VsdFR5cGVzKGNsb25lUmVjb3JkKHJlY29yZCkpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgbXV0YXRpb24gcGF5bG9hZCBvZiBhIHN0aWxsLXBlbmRpbmcgcmVjb3JkLiBVc2VkIHdoZW4gYW5cbiAgICogYWNrbm93bGVkZ2VkIHByZWRlY2Vzc29yIHN1cHBsaWVzIHRoZSBhdXRob3JpdGF0aXZlIGJhc2UgZm9yIGl0cyBzdWNjZXNzb3JcbiAgICogYW5kIHdoZW4gYW4gb2ZmbGluZSBzZXNzaW9uIHJlLXNpZ25zIGEgcGVuZGluZyByZWNvcmQgdW5kZXIgYSByZWZyZXNoZWRcbiAgICogZ3JhbnQgKHBhc3MgdGhlIG5ldyBgc2lnbmVkTXV0YXRpb25gIGVudmVsb3BlIHRvZ2V0aGVyIHdpdGggdGhlIG11dGF0aW9uKS5cbiAgICogQHBhcmFtIHt7aWQ6IHN0cmluZywgbXV0YXRpb246IGltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbiwgc2lnbmVkTXV0YXRpb24/OiBpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259fSBhcmdzIC0gUmVjb3JkIGFuZCByZXBsYWNlbWVudCBtdXRhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZD59IFVwZGF0ZWQgcmVjb3JkLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlTXV0YXRpb24oe2lkLCBtdXRhdGlvbiwgc2lnbmVkTXV0YXRpb259KSB7XG4gICAgaWYgKHNpZ25lZE11dGF0aW9uICE9PSB1bmRlZmluZWQgJiYgc3RhYmxlSnNvblN0cmluZ2lmeShzaWduZWRNdXRhdGlvbi5tdXRhdGlvbikgIT09IHN0YWJsZUpzb25TdHJpbmdpZnkobXV0YXRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzaWduZWRNdXRhdGlvbiBtdXN0IG1hdGNoIHRoZSBtdXRhdGlvbiBwYXlsb2FkIGl0IHNpZ25zXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBpZClcblxuICAgICAgaWYgKCFyYXdSZWNvcmQpIHRocm93IG5ldyBFcnJvcihgTm8gbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZCAnJHtpZH0nYClcblxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHJhd1JlY29yZClcblxuICAgICAgaWYgKCFQRU5ESU5HX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdXBkYXRlIG11dGF0aW9uIGZvciAke3JlY29yZC5zdGF0dXN9IGxvY2FsIG11dGF0aW9uICcke2lkfSdgKVxuXG4gICAgICByZWNvcmQubXV0YXRpb24gPSBub3JtYWxpemVNdXRhdGlvbihtdXRhdGlvbilcbiAgICAgIGlmIChzaWduZWRNdXRhdGlvbiAhPT0gdW5kZWZpbmVkKSByZWNvcmQuc2lnbmVkTXV0YXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlNpZ25lZFN5bmNNdXRhdGlvbn0gKi8gKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2lnbmVkTXV0YXRpb24pKSlcbiAgICAgIHJlY29yZC51cGRhdGVkQXQgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnVwZGF0ZVJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGNsb25lUmVjb3JkKHJlY29yZCkpXG5cbiAgICAgIHJldHVybiByZXN0b3JlU3luY1Jlc3VsdFR5cGVzKGNsb25lUmVjb3JkKHJlY29yZCkpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIGR1cmFibGUgY29uZmxpY3QgZXhwbGljaXRseS4gS2VlcGluZyB0aGUgc2VydmVyIGFja25vd2xlZGdlcyB0aGVcbiAgICogcHJlc2VydmVkIGxvY2FsIGludGVudCB3aXRob3V0IHJlcGxheWluZyBpdDsgcmV0cnlpbmcgbG9jYWwgaW50ZW50IHJlYmFzZXNcbiAgICogaXQgb250byB0aGUgY29uZmxpY3QncyBhdXRob3JpdGF0aXZlIHNlcnZlclZlcnNpb24gYW5kIHJldHVybnMgaXQgdG8gdGhlXG4gICAqIHBlbmRpbmcgcXVldWUuIFRoZSBwcmlvciBjb25mbGljdCByZXN1bHQgc3RheXMgYXR0YWNoZWQgYXMgYXVkaXQgbWV0YWRhdGEuXG4gICAqIEBwYXJhbSB7e2lkOiBzdHJpbmcsIHJlc29sdXRpb246IFwia2VlcC1zZXJ2ZXJcIiB8IFwicmV0cnktbG9jYWxcIn19IGFyZ3MgLSBSZXNvbHV0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkPn0gUmVzb2x2ZWQgcmVjb3JkLlxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZUNvbmZsaWN0KHtpZCwgcmVzb2x1dGlvbn0pIHtcbiAgICBpZiAoIVtcImtlZXAtc2VydmVyXCIsIFwicmV0cnktbG9jYWxcIl0uaW5jbHVkZXMocmVzb2x1dGlvbikpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsb2NhbCBtdXRhdGlvbiBjb25mbGljdCByZXNvbHV0aW9uICcke3Jlc29sdXRpb259J2ApXG5cbiAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JhZ2VLZXlMb2NrKHRoaXMuc3RvcmFnZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3UmVjb3JkID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGlkKVxuXG4gICAgICBpZiAoIXJhd1JlY29yZCkgdGhyb3cgbmV3IEVycm9yKGBObyBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkICcke2lkfSdgKVxuXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQocmF3UmVjb3JkKVxuXG4gICAgICBpZiAocmVjb3JkLnN0YXR1cyAhPT0gXCJjb25mbGljdFwiKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlICR7cmVjb3JkLnN0YXR1c30gbG9jYWwgbXV0YXRpb24gJyR7aWR9JyBhcyBhIGNvbmZsaWN0YClcblxuICAgICAgaWYgKHJlc29sdXRpb24gPT09IFwia2VlcC1zZXJ2ZXJcIikge1xuICAgICAgICByZWNvcmQuc3RhdHVzID0gXCJzeW5jZWRcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2VydmVyVmVyc2lvbiA9IGNvbmZsaWN0U2VydmVyVmVyc2lvbihyZWNvcmQpXG5cbiAgICAgICAgcmVjb3JkLm11dGF0aW9uID0gey4uLnJlY29yZC5tdXRhdGlvbiwgYmFzZVZlcnNpb246IHNlcnZlclZlcnNpb259XG4gICAgICAgIHJlY29yZC5zdGF0dXMgPSBcInBlbmRpbmdcIlxuICAgICAgfVxuXG4gICAgICByZWNvcmQudXBkYXRlZEF0ID0gdGhpcy5jdXJyZW50VGltZXN0YW1wKClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS51cGRhdGVSZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBjbG9uZVJlY29yZChyZWNvcmQpKVxuXG4gICAgICByZXR1cm4gcmVzdG9yZVN5bmNSZXN1bHRUeXBlcyhjbG9uZVJlY29yZChyZWNvcmQpKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUHJ1bmVzIHRlcm1pbmFsIHJlY29yZHMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3IgcmVwbGF5IGRlcGVuZGVuY2llcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIENvbXBhY3Rpb24gb3B0aW9ucy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1heFRlcm1pbmFsUmVjb3Jkc10gLSBNYXhpbXVtIHRlcm1pbmFsIHJlY29yZHMgdG8gcmV0YWluLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MudGVybWluYWxSZXRlbnRpb25Nc10gLSBNaW5pbXVtIGFnZSBiZWZvcmUgcHJ1bmluZyB0ZXJtaW5hbCByZWNvcmRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7ZGVsZXRlZFJlY29yZElkczogc3RyaW5nW119Pn0gLSBDb21wYWN0aW9uIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNvbXBhY3Qoe21heFRlcm1pbmFsUmVjb3JkcywgdGVybWluYWxSZXRlbnRpb25Nc30gPSB7fSkge1xuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy5yZWNvcmRzKClcbiAgICAgIGNvbnN0IHByb3RlY3RlZENsaWVudE11dGF0aW9uSWRzID0gbmV3IFNldChcbiAgICAgICAgcmVjb3Jkc1xuICAgICAgICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gUEVORElOR19TVEFUVVNFUy5oYXMocmVjb3JkLnN0YXR1cykgfHwgcmVjb3JkLnN0YXR1cyA9PT0gXCJjb25mbGljdFwiKVxuICAgICAgICAgIC5mbGF0TWFwKChyZWNvcmQpID0+IHJlY29yZC5kZXBlbmRlbmNpZXMubWFwKChkZXBlbmRlbmN5KSA9PiBkZXBlbmRlbmN5LmNsaWVudE11dGF0aW9uSWQpKVxuICAgICAgKVxuICAgICAgY29uc3QgdGVybWluYWxSZWNvcmRzID0gcmVjb3Jkc1xuICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+IFRFUk1JTkFMX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSlcbiAgICAgICAgLmZpbHRlcigocmVjb3JkKSA9PiAhcHJvdGVjdGVkQ2xpZW50TXV0YXRpb25JZHMuaGFzKHJlY29yZC5tdXRhdGlvbi5jbGllbnRNdXRhdGlvbklkKSlcbiAgICAgICAgLnNvcnQoY29tcGFyZVJlY29yZHNOZXdlc3RGaXJzdClcbiAgICAgIGNvbnN0IGRlbGV0ZUlkcyA9IG5ldyBTZXQoKVxuXG4gICAgICBpZiAodHlwZW9mIG1heFRlcm1pbmFsUmVjb3JkcyA9PT0gXCJudW1iZXJcIiAmJiBtYXhUZXJtaW5hbFJlY29yZHMgPj0gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiB0ZXJtaW5hbFJlY29yZHMuc2xpY2UobWF4VGVybWluYWxSZWNvcmRzKSkgZGVsZXRlSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGVybWluYWxSZXRlbnRpb25NcyA9PT0gXCJudW1iZXJcIiAmJiB0ZXJtaW5hbFJldGVudGlvbk1zID49IDApIHtcbiAgICAgICAgY29uc3QgY3V0b2ZmID0gdGhpcy5ub3coKS5nZXRUaW1lKCkgLSB0ZXJtaW5hbFJldGVudGlvbk1zXG5cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgdGVybWluYWxSZWNvcmRzKSB7XG4gICAgICAgICAgaWYgKG5ldyBEYXRlKHJlY29yZC51cGRhdGVkQXQpLmdldFRpbWUoKSA8IGN1dG9mZikgZGVsZXRlSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVsZXRlZFJlY29yZElkcyA9IEFycmF5LmZyb20oZGVsZXRlSWRzKVxuXG4gICAgICBpZiAoZGVsZXRlZFJlY29yZElkcy5sZW5ndGggPiAwKSBhd2FpdCB0aGlzLnN0b3JhZ2UuZGVsZXRlUmVjb3Jkcyh0aGlzLnN0b3JhZ2VLZXksIGRlbGV0ZWRSZWNvcmRJZHMpXG5cbiAgICAgIHJldHVybiB7ZGVsZXRlZFJlY29yZElkc31cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbG9nIHRpbWVzdGFtcC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBDdXJyZW50IElTTyB0aW1lc3RhbXAuXG4gICAqL1xuICBjdXJyZW50VGltZXN0YW1wKCkge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLm5vdygpXG5cbiAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkgfHwgTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgdGhyb3cgbmV3IEVycm9yKFwiTG9jYWxNdXRhdGlvbkxvZyBub3coKSBtdXN0IHJldHVybiBhIHZhbGlkIERhdGVcIilcblxuICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKClcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgc3RvcmFnZSBhZGFwdGVyIGhhcyBhbGwgcmVxdWlyZWQgcm93LXN0b3JlIG1ldGhvZHMuXG4gKiBAcGFyYW0ge3Vua25vd259IHN0b3JhZ2UgLSBTdG9yYWdlIGFkYXB0ZXIgY2FuZGlkYXRlLlxuICogQHJldHVybnMge3N0b3JhZ2UgaXMgTG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2V9IC0gV2hldGhlciBzdG9yYWdlIGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZFN0b3JhZ2Uoc3RvcmFnZSkge1xuICBpZiAoIXN0b3JhZ2UgfHwgdHlwZW9mIHN0b3JhZ2UgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHN0b3JhZ2VPYmplY3QgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAoc3RvcmFnZSlcblxuICByZXR1cm4gdHlwZW9mIHN0b3JhZ2VPYmplY3QuYXBwZW5kUmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5kZWxldGVSZWNvcmRzID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5uZXh0U2VxdWVuY2UgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0LnJlY29yZCA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QucmVjb3JkcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QudXBkYXRlUmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgYXV0aG9yaXRhdGl2ZSB2ZXJzaW9uIGZyb20gYSBjb25mbGljdGVkIG11dGF0aW9uLlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSByZWNvcmQgLSBDb25mbGljdGVkIHJlY29yZC5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudW1iZXIgfCBudWxsfSAtIEF1dGhvcml0YXRpdmUgdmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29uZmxpY3RTZXJ2ZXJWZXJzaW9uKHJlY29yZCkge1xuICBjb25zdCBjb25mbGljdCA9IHJlY29yZC5zeW5jUmVzdWx0Py5jb25mbGljdFxuXG4gIGlmICghY29uZmxpY3QgfHwgY29uZmxpY3QgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiBjb25mbGljdCAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNvbmZsaWN0KSB8fCAhT2JqZWN0Lmhhc093bihjb25mbGljdCwgXCJzZXJ2ZXJWZXJzaW9uXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cnkgbG9jYWwgbXV0YXRpb24gJyR7cmVjb3JkLmlkfScgd2l0aG91dCBhIGNvbmZsaWN0IHNlcnZlclZlcnNpb25gKVxuICB9XG5cbiAgY29uc3QgY29uZmxpY3RNZXRhZGF0YSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovIChjb25mbGljdClcblxuICByZXR1cm4gY2xvbmVCYXNlVmVyc2lvbihjb25mbGljdE1ldGFkYXRhLnNlcnZlclZlcnNpb24pXG59XG5cbi8qKlxuICogU29ydHMgcmVjb3JkcyBieSBuZXdlc3QgdXBkYXRlL3NlcXVlbmNlIGZpcnN0LlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSBsZWZ0IC0gTGVmdCByZWNvcmQuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IHJpZ2h0IC0gUmlnaHQgcmVjb3JkLlxuICogQHJldHVybnMge251bWJlcn0gLSBTb3J0IHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZVJlY29yZHNOZXdlc3RGaXJzdChsZWZ0LCByaWdodCkge1xuICBjb25zdCB1cGRhdGVkQXRDb21wYXJpc29uID0gcmlnaHQudXBkYXRlZEF0LmxvY2FsZUNvbXBhcmUobGVmdC51cGRhdGVkQXQpXG5cbiAgaWYgKHVwZGF0ZWRBdENvbXBhcmlzb24gIT09IDApIHJldHVybiB1cGRhdGVkQXRDb21wYXJpc29uXG5cbiAgcmV0dXJuIHJpZ2h0LnNlcXVlbmNlIC0gbGVmdC5zZXF1ZW5jZVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW5kIHNvcnRzIGEgbGlzdCBvZiByZWNvcmRzLlxuICogQHBhcmFtIHt1bmtub3dufSByZWNvcmRzIC0gUmF3IHJlY29yZHMuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdfSAtIE5vcm1hbGl6ZWQgcmVjb3Jkcy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmVjb3JkTGlzdChyZWNvcmRzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZWNvcmRzKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gbG9nIHN0b3JhZ2UgcmVjb3JkcyBhcnJheVwiKVxuXG4gIHJldHVybiByZWNvcmRzXG4gICAgLm1hcChub3JtYWxpemVSZWNvcmQpXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LnNlcXVlbmNlIC0gcmlnaHQuc2VxdWVuY2UpXG4gICAgLm1hcCgocmVjb3JkKSA9PiBjbG9uZVJlY29yZChyZWNvcmQpKVxuICAgIC5tYXAocmVzdG9yZVN5bmNSZXN1bHRUeXBlcylcbn1cblxuLyoqXG4gKiBSZXN0b3JlcyB0cmFuc3BvcnQtcmVzdG9yZWQgdHlwZWQgdmFsdWVzIGluIGEgcmVjb3JkJ3Mgc3luY1Jlc3VsdCBhZnRlciB0aGVcbiAqIGZpbmFsIEpTT04gY2xvbmUsIHNvIGNhbGxlcnMgc2VlIERhdGUgKGFuZCBvdGhlciB0eXBlZCkgdmFsdWVzIG9uIGR1cmFibGVcbiAqIHJlYWRiYWNrIGluc3RlYWQgb2YgbWFya2VyLWVuY29kZWQgSVNPIHN0cmluZ3MuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IHJlY29yZCAtIENsb25lZCByZWNvcmQuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gLSBSZWNvcmQgd2l0aCByZXN0b3JlZCBzeW5jUmVzdWx0IHR5cGVzLlxuICovXG5mdW5jdGlvbiByZXN0b3JlU3luY1Jlc3VsdFR5cGVzKHJlY29yZCkge1xuICBpZiAocmVjb3JkLnN5bmNSZXN1bHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlY29yZFxuXG4gIHJldHVybiB7XG4gICAgLi4ucmVjb3JkLFxuICAgIHN5bmNSZXN1bHQ6IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gKi8gKFxuICAgICAgZGVzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUocmVjb3JkLnN5bmNSZXN1bHQpXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBhIGNhbGxiYWNrIGFmdGVyIGVhcmxpZXIgd3JpdGVzIGZvciB0aGUgc2FtZSBzdG9yYWdlIGtleSBoYXZlIGNvbXBsZXRlZC5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcmFnZUtleSAtIFN0b3JhZ2Uga2V5IHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxUPn0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBydW4gdW5kZXIgdGhlIHN0b3JhZ2Uta2V5IGxvY2suXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxUPn0gLSBDYWxsYmFjayByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdpdGhTdG9yYWdlS2V5TG9jayhzdG9yYWdlS2V5LCBjYWxsYmFjaykge1xuICBjb25zdCBwcmV2aW91cyA9IFNUT1JBR0VfS0VZX0xPQ0tTLmdldChzdG9yYWdlS2V5KSB8fCBQcm9taXNlLnJlc29sdmUoKVxuICBsZXQgcmVsZWFzZSA9ICgpID0+IHt9XG4gIGNvbnN0IGN1cnJlbnQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geyByZWxlYXNlID0gKCkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpIH0pXG4gIGNvbnN0IGNoYWluZWQgPSBwcmV2aW91cy5jYXRjaCgoX2Vycm9yKSA9PiB7fSkudGhlbigoKSA9PiBjdXJyZW50KVxuXG4gIFNUT1JBR0VfS0VZX0xPQ0tTLnNldChzdG9yYWdlS2V5LCBjaGFpbmVkKVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgcHJldmlvdXMuY2F0Y2goKF9lcnJvcikgPT4ge30pXG5cbiAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soKVxuICB9IGZpbmFsbHkge1xuICAgIHJlbGVhc2UoKVxuICAgIGlmIChTVE9SQUdFX0tFWV9MT0NLUy5nZXQoc3RvcmFnZUtleSkgPT09IGNoYWluZWQpIFNUT1JBR0VfS0VZX0xPQ0tTLmRlbGV0ZShzdG9yYWdlS2V5KVxuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBlcnNpc3RlZCBsb2cgcmVjb3JkLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyByZWNvcmQuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gLSBOb3JtYWxpemVkIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmVjb3JkKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkIG9iamVjdFwiKVxuXG4gIGNvbnN0IHJlY29yZCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcbiAgY29uc3Qgc3RhdHVzID0gcmVxdWlyZWRTdHJpbmcocmVjb3JkLnN0YXR1cywgXCJzdGF0dXNcIilcblxuICBpZiAoIU1VVEFUSU9OX1NUQVRVU0VTLmhhcyhzdGF0dXMpKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbG9jYWwgbXV0YXRpb24gc3RhdHVzICcke3N0YXR1c30nYClcblxuICBjb25zdCBiYXNlUmVjb3JkID0ge1xuICAgIGNyZWF0ZWRBdDogcmVxdWlyZWRJc29UaW1lc3RhbXAocmVjb3JkLmNyZWF0ZWRBdCwgXCJjcmVhdGVkQXRcIiksXG4gICAgZGVwZW5kZW5jaWVzOiBub3JtYWxpemVEZXBlbmRlbmNpZXMocmVjb3JkLmRlcGVuZGVuY2llcyksXG4gICAgaWQ6IHJlcXVpcmVkU3RyaW5nKHJlY29yZC5pZCwgXCJpZFwiKSxcbiAgICBtdXRhdGlvbjogbm9ybWFsaXplTXV0YXRpb24ocmVjb3JkLm11dGF0aW9uKSxcbiAgICBzZXF1ZW5jZTogcmVxdWlyZWRQb3NpdGl2ZUludGVnZXIocmVjb3JkLnNlcXVlbmNlLCBcInNlcXVlbmNlXCIpLFxuICAgIHN0YXR1czogLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzfSAqLyAoc3RhdHVzKSxcbiAgICB1cGRhdGVkQXQ6IHJlcXVpcmVkSXNvVGltZXN0YW1wKHJlY29yZC51cGRhdGVkQXQsIFwidXBkYXRlZEF0XCIpXG4gIH1cblxuICBpZiAocmVjb3JkLnNpZ25lZE11dGF0aW9uID09PSB1bmRlZmluZWQgJiYgcmVjb3JkLnN5bmNSZXN1bHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGJhc2VSZWNvcmRcblxuICAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9ICovXG4gIGNvbnN0IG5vcm1hbGl6ZWRSZWNvcmQgPSB7Li4uYmFzZVJlY29yZH1cblxuICBpZiAocmVjb3JkLnNpZ25lZE11dGF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBub3JtYWxpemVkUmVjb3JkLnNpZ25lZE11dGF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259ICovIChjbG9uZUpzb25PYmplY3QocmVjb3JkLnNpZ25lZE11dGF0aW9uLCBcInNpZ25lZE11dGF0aW9uXCIpKVxuICB9XG4gIGlmIChyZWNvcmQuc3luY1Jlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gUGVyc2lzdGVkIHN5bmNSZXN1bHQgaXMgbWFya2VyLWVuY29kZWQgc28gaXQgc3Vydml2ZXMgdGhlIEpTT04gY2xvbmU7XG4gICAgLy8gdHlwZWQgdmFsdWVzIGFyZSByZXN0b3JlZCBieSByZXN0b3JlU3luY1Jlc3VsdFR5cGVzIGF0IHRoZSByZWFkIGJvdW5kYXJ5LlxuICAgIG5vcm1hbGl6ZWRSZWNvcmQuc3luY1Jlc3VsdCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gKi8gKFxuICAgICAgY2xvbmVKc29uT2JqZWN0KHJlY29yZC5zeW5jUmVzdWx0LCBcInN5bmNSZXN1bHRcIilcbiAgICApXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZFJlY29yZFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZGVwZW5kZW5jeSBtZXRhZGF0YSBlbnRyaWVzLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBkZXBlbmRlbmNpZXMuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lbXX0gLSBOb3JtYWxpemVkIGRlcGVuZGVuY2llcy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGVwZW5kZW5jaWVzKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW11cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gZGVwZW5kZW5jaWVzIGFycmF5XCIpXG5cbiAgcmV0dXJuIHZhbHVlLm1hcCgoZGVwZW5kZW5jeSkgPT4ge1xuICAgIGlmICghZGVwZW5kZW5jeSB8fCB0eXBlb2YgZGVwZW5kZW5jeSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlcGVuZGVuY3kpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBkZXBlbmRlbmN5IG9iamVjdFwiKVxuICAgIH1cblxuICAgIGNvbnN0IGRlcGVuZGVuY3lPYmplY3QgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAoZGVwZW5kZW5jeSlcblxuICAgIHJldHVybiB7XG4gICAgICBjbGllbnRNdXRhdGlvbklkOiByZXF1aXJlZFN0cmluZyhkZXBlbmRlbmN5T2JqZWN0LmNsaWVudE11dGF0aW9uSWQsIFwiZGVwZW5kZW5jeSBjbGllbnRNdXRhdGlvbklkXCIpLFxuICAgICAgbW9kZWw6IHJlcXVpcmVkU3RyaW5nKGRlcGVuZGVuY3lPYmplY3QubW9kZWwsIFwiZGVwZW5kZW5jeSBtb2RlbFwiKVxuICAgIH1cbiAgfSlcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgc3luYyBtdXRhdGlvbiBwYXlsb2FkLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBtdXRhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259IC0gTm9ybWFsaXplZCBtdXRhdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTXV0YXRpb24odmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIHN5bmMgbXV0YXRpb24gb2JqZWN0XCIpXG5cbiAgY29uc3QgbXV0YXRpb24gPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gKi8gKHtcbiAgICBhY3RvckRldmljZUlkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5hY3RvckRldmljZUlkLCBcImFjdG9yRGV2aWNlSWRcIiksXG4gICAgYWN0b3JVc2VySWQ6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLmFjdG9yVXNlcklkLCBcImFjdG9yVXNlcklkXCIpLFxuICAgIGNsaWVudE11dGF0aW9uSWQ6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLmNsaWVudE11dGF0aW9uSWQsIFwiY2xpZW50TXV0YXRpb25JZFwiKSxcbiAgICBtb2RlbDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ubW9kZWwsIFwibW9kZWxcIiksXG4gICAgb2NjdXJyZWRBdDogcmVxdWlyZWRJc29UaW1lc3RhbXAobXV0YXRpb24ub2NjdXJyZWRBdCwgXCJvY2N1cnJlZEF0XCIpLFxuICAgIG9mZmxpbmVHcmFudElkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5vZmZsaW5lR3JhbnRJZCwgXCJvZmZsaW5lR3JhbnRJZFwiKSxcbiAgICBvcGVyYXRpb246IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLm9wZXJhdGlvbiwgXCJvcGVyYXRpb25cIiksXG4gICAgcG9saWN5SGFzaDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ucG9saWN5SGFzaCwgXCJwb2xpY3lIYXNoXCIpXG4gIH0pXG5cbiAgaWYgKG11dGF0aW9uLmF0dHJpYnV0ZXMgIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5hdHRyaWJ1dGVzID0gY2xvbmVKc29uT2JqZWN0KG11dGF0aW9uLmF0dHJpYnV0ZXMsIFwiYXR0cmlidXRlc1wiKVxuICBpZiAobXV0YXRpb24uYmFzZVZlcnNpb24gIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5iYXNlVmVyc2lvbiA9IGNsb25lQmFzZVZlcnNpb24obXV0YXRpb24uYmFzZVZlcnNpb24pXG4gIGlmIChtdXRhdGlvbi5jb21tYW5kICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQuY29tbWFuZCA9IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLmNvbW1hbmQsIFwiY29tbWFuZFwiKVxuICBpZiAobXV0YXRpb24ucGF5bG9hZCAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLnBheWxvYWQgPSBjbG9uZUpzb25PYmplY3QobXV0YXRpb24ucGF5bG9hZCwgXCJwYXlsb2FkXCIpXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJlcXVpcmVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRTdHJpbmcodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgdmFsdWUubGVuZ3RoIDwgMSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfWApXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogUmVxdWlyZXMgYW4gSVNPIHRpbWVzdGFtcCBzdHJpbmcuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIElTTyB0aW1lc3RhbXAuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkSXNvVGltZXN0YW1wKHZhbHVlLCBsYWJlbCkge1xuICBjb25zdCBzdHJpbmdWYWx1ZSA9IHJlcXVpcmVkU3RyaW5nKHZhbHVlLCBsYWJlbClcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHN0cmluZ1ZhbHVlKVxuXG4gIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpIHx8IGRhdGUudG9JU09TdHJpbmcoKSAhPT0gc3RyaW5nVmFsdWUpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH0gSVNPIHRpbWVzdGFtcGApXG5cbiAgcmV0dXJuIHN0cmluZ1ZhbHVlXG59XG5cbi8qKlxuICogUmVxdWlyZXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge251bWJlcn0gLSBQb3NpdGl2ZSBpbnRlZ2VyLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZFBvc2l0aXZlSW50ZWdlcih2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCAxKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9IHBvc2l0aXZlIGludGVnZXJgKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIENsb25lcyBhIHN1cHBvcnRlZCBiYXNlLXZlcnNpb24gdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IGJhc2UgdmVyc2lvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBudW1iZXIgfCBudWxsfSAtIE5vcm1hbGl6ZWQgYmFzZSB2ZXJzaW9uLlxuICovXG5mdW5jdGlvbiBjbG9uZUJhc2VWZXJzaW9uKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gdmFsdWVcblxuICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBiYXNlVmVyc2lvbiBzdHJpbmcsIG51bWJlciwgb3IgbnVsbFwiKVxufVxuXG4vKipcbiAqIENsb25lcyBhIEpTT04tY29tcGF0aWJsZSB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgSlNPTiB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWV9IC0gQ2xvbmVkIEpTT04gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGNsb25lSnNvblZhbHVlKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBKU09OLWNvbXBhdGlibGUgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH1gKVxuXG4gIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWV9ICovIChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpXG59XG5cbi8qKlxuICogQ2xvbmVzIGEgSlNPTi1jb21wYXRpYmxlIG9iamVjdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgSlNPTiBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gLSBDbG9uZWQgSlNPTiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNsb25lSnNvbk9iamVjdCh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH0gb2JqZWN0YClcblxuICByZXR1cm4gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gKi8gKGNsb25lSnNvblZhbHVlKHZhbHVlLCBsYWJlbCkpXG59XG5cbi8qKlxuICogQ2xvbmVzIGEgbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZC5cbiAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gcmVjb3JkIC0gUmVjb3JkIHRvIGNsb25lLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IC0gQ2xvbmVkIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVSZWNvcmQocmVjb3JkKSB7XG4gIHJldHVybiAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9ICovIChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlY29yZCkpKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSBsb2NhbCBtdXRhdGlvbiByZWNvcmQgaWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJhbmRvbSByZWNvcmQgaWQuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbVJlY29yZElkKCkge1xuICBjb25zdCBjcnlwdG9Qcm92aWRlciA9IGdsb2JhbFRoaXMuY3J5cHRvXG5cbiAgaWYgKGNyeXB0b1Byb3ZpZGVyICYmIHR5cGVvZiBjcnlwdG9Qcm92aWRlci5yYW5kb21VVUlEID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjcnlwdG9Qcm92aWRlci5yYW5kb21VVUlEKClcblxuICByZXR1cm4gYGxvY2FsLW11dGF0aW9uLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zbGljZSgyKX1gXG59XG4iXX0=
@@ -12,6 +12,32 @@ export type PeerMutationBundle = {
12
12
  */
13
13
  mutations: PeerMutationBundleEntry[];
14
14
  };
15
+ export type PeerMutationBundleImportResult = {
16
+ /**
17
+ * - Entries appended to the local log.
18
+ */
19
+ imported: Array<{
20
+ clientMutationId: string;
21
+ idempotencyKey: string;
22
+ localRecordId: string;
23
+ }>;
24
+ /**
25
+ * - Entries that failed verification.
26
+ */
27
+ rejected: Array<{
28
+ errorMessage: string;
29
+ index: number;
30
+ }>;
31
+ /**
32
+ * - Entries already present by idempotency key.
33
+ */
34
+ skipped: Array<{
35
+ clientMutationId: string;
36
+ idempotencyKey: string;
37
+ localRecordId: string;
38
+ reason: "duplicate";
39
+ }>;
40
+ };
15
41
  export type PeerMutationBundleEntry = {
16
42
  /**
17
43
  * - Exporting device's local mutation record id.
@@ -1 +1 @@
1
- {"version":3,"file":"peer-mutation-bundle.d.ts","sourceRoot":"","sources":["../../../src/sync/peer-mutation-bundle.js"],"names":[],"mappings":"AAMG,YAAkB,kBAAkB,GACpC;;;;IAAmB,UAAU,EAAlB,MAAM,CACjB;;;;IAAqD,MAAM,EAAhD,wCAAwC,CACnD;;;;IAAsC,SAAS,EAApC,uBAAuB,EAAE,CACtC;CAAA,CAAA;AAGE,YAAkB,uBAAuB,GACzC;;;;IAAoB,aAAa,AAAjC,CACA,EADW,MAAM,CACjB;;;;IAAoB,aAAa,AAAjC,CACA,EADW,MAAM,CACjB;;;;IAA8D,cAAc,EAAjE,OAAO,sBAAsB,EAAE,kBAAkB,CAC9D;CAAA,CAAA;AAID;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAAC,EAAC,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAsB,EAAE,QAAQ,EAAC,EAPhI;IAA+D,iBAAiB,EAAxE,OAAO,sBAAsB,EAAE,iBAAiB,CACxD;IAA4D,gBAAgB,EAApE,OAAO,sBAAsB,EAAE,cAAc,CACrD;IAAwD,WAAW,EAA3D,OAAO,yBAAyB,EAAE,OAAO,CACjD;IAA0B,GAAG,AAA7B,CACA,EADQ,MAAM,IAAI,CAClB;IAAuE,QAAQ,AAA/E,CACA,EADQ,OAAO,yBAAyB,EAAE,mBAAmB,EAAE,CAC/D;CAEgI,GAFtH,OAAO,CAAC,kBAAkB,CAAC,CA6BvC;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAAC,EAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,GAAgB,EAAC,EANrG;IAA4D,gBAAgB,EAApE,OAAO,sBAAsB,EAAE,cAAc,CACrD;IAAiC,MAAM,EAA/B,kBAAkB,CAC1B;IAAwD,WAAW,EAA3D,OAAO,yBAAyB,EAAE,OAAO,CACjD;IAAoB,GAAG,AAAvB,CACA,EADQ,IAAI,CACZ;CAEqG,GAF3F,OAAO,CAAC;IAAC,QAAQ,EAAE;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAAC,QAAQ,EAAE;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAAC,OAAO,EAAE;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAC,EAAE,CAAA;CAAC,CAAC,CAsC1Q"}
1
+ {"version":3,"file":"peer-mutation-bundle.d.ts","sourceRoot":"","sources":["../../../src/sync/peer-mutation-bundle.js"],"names":[],"mappings":"AAMG,YAAkB,kBAAkB,GACpC;;;;IAAmB,UAAU,EAAlB,MAAM,CACjB;;;;IAAqD,MAAM,EAAhD,wCAAwC,CACnD;;;;IAAsC,SAAS,EAApC,uBAAuB,EAAE,CACtC;CAAA,CAAA;AAGE,YAAkB,8BAA8B,GAChD;;;;IAA6F,QAAQ,EAA1F,KAAK,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAC,CAAC,CAC3F;;;;IAAyD,QAAQ,EAAtD,KAAK,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC,CACvD;;;;IAAkH,OAAO,EAA9G,KAAK,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAC,CAAC,CAClH;CAAA,CAAA;AAEE,YAAkB,uBAAuB,GACzC;;;;IAAoB,aAAa,AAAjC,CACA,EADW,MAAM,CACjB;;;;IAAoB,aAAa,AAAjC,CACA,EADW,MAAM,CACjB;;;;IAA8D,cAAc,EAAjE,OAAO,sBAAsB,EAAE,kBAAkB,CAC9D;CAAA,CAAA;AAID;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAAC,EAAC,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAsB,EAAE,QAAQ,EAAC,EAPhI;IAA+D,iBAAiB,EAAxE,OAAO,sBAAsB,EAAE,iBAAiB,CACxD;IAA4D,gBAAgB,EAApE,OAAO,sBAAsB,EAAE,cAAc,CACrD;IAAwD,WAAW,EAA3D,OAAO,yBAAyB,EAAE,OAAO,CACjD;IAA0B,GAAG,AAA7B,CACA,EADQ,MAAM,IAAI,CAClB;IAAuE,QAAQ,AAA/E,CACA,EADQ,OAAO,yBAAyB,EAAE,mBAAmB,EAAE,CAC/D;CAEgI,GAFtH,OAAO,CAAC,kBAAkB,CAAC,CA6BvC;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAAC,EAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,GAAgB,EAAC,EANrG;IAA4D,gBAAgB,EAApE,OAAO,sBAAsB,EAAE,cAAc,CACrD;IAAiC,MAAM,EAA/B,kBAAkB,CAC1B;IAAwD,WAAW,EAA3D,OAAO,yBAAyB,EAAE,OAAO,CACjD;IAAoB,GAAG,AAAvB,CACA,EADQ,IAAI,CACZ;CAEqG,GAF3F,OAAO,CAAC;IAAC,QAAQ,EAAE;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAAC,QAAQ,EAAE;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAAC,OAAO,EAAE;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAC,EAAE,CAAA;CAAC,CAAC,CAsC1Q"}
@@ -9,6 +9,12 @@ import { createSignedMutation, mutationIdempotencyKey, verifySignedMutation } fr
9
9
  */
10
10
  /**
11
11
  * One peer mutation bundle entry.
12
+ * @typedef {object} PeerMutationBundleImportResult
13
+ * @property {Array<{clientMutationId: string, idempotencyKey: string, localRecordId: string}>} imported - Entries appended to the local log.
14
+ * @property {Array<{errorMessage: string, index: number}>} rejected - Entries that failed verification.
15
+ * @property {Array<{clientMutationId: string, idempotencyKey: string, localRecordId: string, reason: "duplicate"}>} skipped - Entries already present by idempotency key.
16
+ */
17
+ /**
12
18
  * @typedef {object} PeerMutationBundleEntry
13
19
  * @property {string} [localRecordId] - Exporting device's local mutation record id.
14
20
  * @property {number} [localSequence] - Exporting device's local mutation sequence.
@@ -214,4 +220,4 @@ function errorMessage(error) {
214
220
  return error.message;
215
221
  return String(error);
216
222
  }
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlci1tdXRhdGlvbi1idW5kbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9wZWVyLW11dGF0aW9uLWJ1bmRsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFFdkc7Ozs7OztHQU1HO0FBQ0g7Ozs7OztHQU1HO0FBQ0gsTUFBTSwyQkFBMkIsR0FBRyx3Q0FBd0MsQ0FBQTtBQUM1RSxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUE7QUFFL0U7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSx3QkFBd0IsQ0FBQyxFQUFDLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUM7SUFDakksTUFBTSxnQkFBZ0IsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMxRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMxQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkQsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDeEQsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFB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SSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxLQUFLLG1CQUFtQixDQUFDLENBQUE7SUFFbEosT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSztJQUMvQixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBRXJILE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQzNCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxZQUFZLENBQUMsS0FBSztJQUN6QixJQUFJLEtBQUssWUFBWSxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFBO0lBRWhELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtjcmVhdGVTaWduZWRNdXRhdGlvbiwgbXV0YXRpb25JZGVtcG90ZW5jeUtleSwgdmVyaWZ5U2lnbmVkTXV0YXRpb259IGZyb20gXCIuL2RldmljZS1pZGVudGl0eS5qc1wiXG5cbi8qKlxuICogUGVlciBtdXRhdGlvbiBidW5kbGUgZXhwb3J0ZWQgYnkgYSBkZXZpY2UgZm9yIG9mZmxpbmUvUDJQIHRyYW5zZmVyLlxuICogQHR5cGVkZWYge29iamVjdH0gUGVlck11dGF0aW9uQnVuZGxlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXhwb3J0ZWRBdCAtIElTTyB0aW1lc3RhbXAgd2hlbiB0aGUgYnVuZGxlIHdhcyBleHBvcnRlZC5cbiAqIEBwcm9wZXJ0eSB7XCJ2ZWxvY2lvdXMuc3luYy5wZWVyLW11dGF0aW9uLWJ1bmRsZS52MVwifSBmb3JtYXQgLSBCdW5kbGUgZm9ybWF0IGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge1BlZXJNdXRhdGlvbkJ1bmRsZUVudHJ5W119IG11dGF0aW9ucyAtIFNpZ25lZCBtdXRhdGlvbnMgaW4gbG9jYWwgc2VxdWVuY2Ugb3JkZXIuXG4gKi9cbi8qKlxuICogT25lIHBlZXIgbXV0YXRpb24gYnVuZGxlIGVudHJ5LlxuICogQHR5cGVkZWYge29iamVjdH0gUGVlck11dGF0aW9uQnVuZGxlRW50cnlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbG9jYWxSZWNvcmRJZF0gLSBFeHBvcnRpbmcgZGV2aWNlJ3MgbG9jYWwgbXV0YXRpb24gcmVjb3JkIGlkLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtsb2NhbFNlcXVlbmNlXSAtIEV4cG9ydGluZyBkZXZpY2UncyBsb2NhbCBtdXRhdGlvbiBzZXF1ZW5jZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU2lnbmVkU3luY011dGF0aW9ufSBzaWduZWRNdXRhdGlvbiAtIERldmljZS1zaWduZWQgbXV0YXRpb24gZW52ZWxvcGUuXG4gKi9cbmNvbnN0IFBFRVJfTVVUQVRJT05fQlVORExFX0ZPUk1BVCA9IFwidmVsb2Npb3VzLnN5bmMucGVlci1tdXRhdGlvbi1idW5kbGUudjFcIlxuY29uc3QgRVhQT1JUQUJMRV9TVEFUVVNFUyA9IG5ldyBTZXQoW1wicGVuZGluZ1wiLCBcImFwcGxpZWQtbG9jYWxseVwiLCBcImNvbmZsaWN0XCJdKVxuXG4vKipcbiAqIEV4cG9ydHMgbG9jYWwgbm9uLXRlcm1pbmFsIG11dGF0aW9ucyBhcyBhIHNpZ25lZCBwZWVyLXRyYW5zZmVyIGJ1bmRsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5EZXZpY2VDZXJ0aWZpY2F0ZX0gYXJncy5kZXZpY2VDZXJ0aWZpY2F0ZSAtIERldmljZSBjZXJ0aWZpY2F0ZSBmb3Igc2lnbmluZyByZWNvcmRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jSnNvbldlYktleX0gYXJncy5kZXZpY2VQcml2YXRlS2V5IC0gRGV2aWNlIHByaXZhdGUga2V5IGZvciBzaWduaW5nIHJlY29yZHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLmRlZmF1bHR9IGFyZ3MubXV0YXRpb25Mb2cgLSBMb2NhbCBtdXRhdGlvbiBsb2cuXG4gKiBAcGFyYW0geygpID0+IERhdGV9IFthcmdzLm5vd10gLSBFeHBvcnQgY2xvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25TdGF0dXNbXX0gW2FyZ3Muc3RhdHVzZXNdIC0gU3RhdHVzZXMgdG8gZXhwb3J0LlxuICogQHJldHVybnMge1Byb21pc2U8UGVlck11dGF0aW9uQnVuZGxlPn0gLSBTaWduZWQgcGVlciBtdXRhdGlvbiBidW5kbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBvcnRQZWVyTXV0YXRpb25CdW5kbGUoe2RldmljZUNlcnRpZmljYXRlLCBkZXZpY2VQcml2YXRlS2V5LCBtdXRhdGlvbkxvZywgbm93ID0gKCkgPT4gbmV3IERhdGUoKSwgc3RhdHVzZXN9KSB7XG4gIGNvbnN0IHNlbGVjdGVkU3RhdHVzZXMgPSBub3JtYWxpemVFeHBvcnRTdGF0dXNlcyhzdGF0dXNlcylcbiAgY29uc3QgdGltZXN0YW1wID0gaXNvVGltZXN0YW1wKG5vdygpLCBcImV4cG9ydGVkQXRcIilcbiAgY29uc3QgcmVjb3JkcyA9IChhd2FpdCBtdXRhdGlvbkxvZy5yZWNvcmRzKCkpXG4gICAgLmZpbHRlcigocmVjb3JkKSA9PiBzZWxlY3RlZFN0YXR1c2VzLmhhcyhyZWNvcmQuc3RhdHVzKSlcbiAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQuc2VxdWVuY2UgLSByaWdodC5zZXF1ZW5jZSlcbiAgY29uc3QgbXV0YXRpb25zID0gW11cblxuICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgbXV0YXRpb25zLnB1c2goe1xuICAgICAgbG9jYWxSZWNvcmRJZDogcmVjb3JkLmlkLFxuICAgICAgbG9jYWxTZXF1ZW5jZTogcmVjb3JkLnNlcXVlbmNlLFxuICAgICAgc2lnbmVkTXV0YXRpb246IHJlY29yZC5zaWduZWRNdXRhdGlvblxuICAgICAgICA/IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU2lnbmVkU3luY011dGF0aW9ufSAqLyAocmVjb3JkLnNpZ25lZE11dGF0aW9uKVxuICAgICAgICA6IGF3YWl0IGNyZWF0ZVNpZ25lZE11dGF0aW9uKHtcbiAgICAgICAgICBkZXZpY2VDZXJ0aWZpY2F0ZSxcbiAgICAgICAgICBkZXZpY2VQcml2YXRlS2V5LFxuICAgICAgICAgIG11dGF0aW9uOiByZWNvcmQubXV0YXRpb25cbiAgICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRlZEF0OiB0aW1lc3RhbXAsXG4gICAgZm9ybWF0OiBQRUVSX01VVEFUSU9OX0JVTkRMRV9GT1JNQVQsXG4gICAgbXV0YXRpb25zXG4gIH1cbn1cblxuLyoqXG4gKiBJbXBvcnRzIHZlcmlmaWVkIHBlZXIgbXV0YXRpb25zIGludG8gdGhlIGxvY2FsIG11dGF0aW9uIGxvZy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jSnNvbldlYktleX0gYXJncy5iYWNrZW5kUHVibGljS2V5IC0gQmFja2VuZCBwdWJsaWMga2V5IGZvciB2ZXJpZnlpbmcgcGVlciBjZXJ0aWZpY2F0ZXMuXG4gKiBAcGFyYW0ge1BlZXJNdXRhdGlvbkJ1bmRsZX0gYXJncy5idW5kbGUgLSBQZWVyIGJ1bmRsZSB0byBpbXBvcnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLmRlZmF1bHR9IGFyZ3MubXV0YXRpb25Mb2cgLSBMb2NhbCBtdXRhdGlvbiBsb2cuXG4gKiBAcGFyYW0ge0RhdGV9IFthcmdzLm5vd10gLSBWZXJpZmljYXRpb24gdGltZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHtpbXBvcnRlZDoge2NsaWVudE11dGF0aW9uSWQ6IHN0cmluZywgaWRlbXBvdGVuY3lLZXk6IHN0cmluZywgbG9jYWxSZWNvcmRJZDogc3RyaW5nfVtdLCByZWplY3RlZDoge2Vycm9yTWVzc2FnZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfVtdLCBza2lwcGVkOiB7Y2xpZW50TXV0YXRpb25JZDogc3RyaW5nLCBpZGVtcG90ZW5jeUtleTogc3RyaW5nLCBsb2NhbFJlY29yZElkOiBzdHJpbmcsIHJlYXNvbjogXCJkdXBsaWNhdGVcIn1bXX0+fSAtIEltcG9ydCByZXN1bHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbXBvcnRQZWVyTXV0YXRpb25CdW5kbGUoe2JhY2tlbmRQdWJsaWNLZXksIGJ1bmRsZSwgbXV0YXRpb25Mb2csIG5vdyA9IG5ldyBEYXRlKCl9KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRCdW5kbGUgPSBub3JtYWxpemVQZWVyTXV0YXRpb25CdW5kbGUoYnVuZGxlKVxuICBjb25zdCBleGlzdGluZ1JlY29yZHMgPSBhd2FpdCBtdXRhdGlvbkxvZy5yZWNvcmRzKClcbiAgY29uc3QgZXhpc3RpbmdCeUlkZW1wb3RlbmN5S2V5ID0gbmV3IE1hcChleGlzdGluZ1JlY29yZHMubWFwKChyZWNvcmQpID0+IFttdXRhdGlvbklkZW1wb3RlbmN5S2V5KHttdXRhdGlvbjogcmVjb3JkLm11dGF0aW9ufSksIHJlY29yZF0pKVxuICAvKiogQHR5cGUge3tjbGllbnRNdXRhdGlvbklkOiBzdHJpbmcsIGlkZW1wb3RlbmN5S2V5OiBzdHJpbmcsIGxvY2FsUmVjb3JkSWQ6IHN0cmluZ31bXX0gKi9cbiAgY29uc3QgaW1wb3J0ZWQgPSBbXVxuICAvKiogQHR5cGUge3tlcnJvck1lc3NhZ2U6IHN0cmluZywgaW5kZXg6IG51bWJlcn1bXX0gKi9cbiAgY29uc3QgcmVqZWN0ZWQgPSBbXVxuICAvKiogQHR5cGUge3tjbGllbnRNdXRhdGlvbklkOiBzdHJpbmcsIGlkZW1wb3RlbmN5S2V5OiBzdHJpbmcsIGxvY2FsUmVjb3JkSWQ6IHN0cmluZywgcmVhc29uOiBcImR1cGxpY2F0ZVwifVtdfSAqL1xuICBjb25zdCBza2lwcGVkID0gW11cblxuICBmb3IgKGNvbnN0IFtpbmRleCwgZW50cnldIG9mIG5vcm1hbGl6ZWRCdW5kbGUubXV0YXRpb25zLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IG11dGF0aW9uID0gYXdhaXQgdmVyaWZpZWRCdW5kbGVNdXRhdGlvbih7YmFja2VuZFB1YmxpY0tleSwgZW50cnksIGluZGV4LCBub3csIHJlamVjdGVkfSlcblxuICAgIGlmICghbXV0YXRpb24pIGNvbnRpbnVlXG5cbiAgICBjb25zdCBpZGVtcG90ZW5jeUtleSA9IG11dGF0aW9uSWRlbXBvdGVuY3lLZXkoZW50cnkuc2lnbmVkTXV0YXRpb24pXG4gICAgY29uc3QgZHVwbGljYXRlUmVjb3JkID0gZXhpc3RpbmdCeUlkZW1wb3RlbmN5S2V5LmdldChpZGVtcG90ZW5jeUtleSlcblxuICAgIGlmIChkdXBsaWNhdGVSZWNvcmQpIHtcbiAgICAgIHNraXBwZWQucHVzaCh7XG4gICAgICAgIGNsaWVudE11dGF0aW9uSWQ6IG11dGF0aW9uLmNsaWVudE11dGF0aW9uSWQsXG4gICAgICAgIGlkZW1wb3RlbmN5S2V5LFxuICAgICAgICBsb2NhbFJlY29yZElkOiBkdXBsaWNhdGVSZWNvcmQuaWQsXG4gICAgICAgIHJlYXNvbjogLyoqIEB0eXBlIHtcImR1cGxpY2F0ZVwifSAqLyAoXCJkdXBsaWNhdGVcIilcbiAgICAgIH0pXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IG11dGF0aW9uTG9nLmFwcGVuZCh7bXV0YXRpb24sIHNpZ25lZE11dGF0aW9uOiBlbnRyeS5zaWduZWRNdXRhdGlvbn0pXG4gICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IG11dGF0aW9uTG9nLnVwZGF0ZVN0YXR1cyh7aWQ6IHJlY29yZC5pZCwgc3RhdHVzOiBcInBlZXItYXBwbGllZFwifSlcbiAgICBleGlzdGluZ0J5SWRlbXBvdGVuY3lLZXkuc2V0KGlkZW1wb3RlbmN5S2V5LCB1cGRhdGVkKVxuICAgIGltcG9ydGVkLnB1c2goe2NsaWVudE11dGF0aW9uSWQ6IG11dGF0aW9uLmNsaWVudE11dGF0aW9uSWQsIGlkZW1wb3RlbmN5S2V5LCBsb2NhbFJlY29yZElkOiB1cGRhdGVkLmlkfSlcbiAgfVxuXG4gIHJldHVybiB7aW1wb3J0ZWQsIHJlamVjdGVkLCBza2lwcGVkfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIGEgYnVuZGxlIG11dGF0aW9uIGFuZCByZWNvcmRzIG5vcm1hbCBwZXItZW50cnkgdmVyaWZpY2F0aW9uIHJlamVjdGlvbnMuXG4gKiBTdG9yYWdlIHdyaXRlcyBpbnRlbnRpb25hbGx5IGhhcHBlbiBvdXRzaWRlIHRoaXMgaGVscGVyIHNvIHN0b3JhZ2UgZmFpbHVyZXMgZXNjYXBlIGltcG9ydC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jSnNvbldlYktleX0gYXJncy5iYWNrZW5kUHVibGljS2V5IC0gQmFja2VuZCBwdWJsaWMga2V5LlxuICogQHBhcmFtIHtQZWVyTXV0YXRpb25CdW5kbGVFbnRyeX0gYXJncy5lbnRyeSAtIEJ1bmRsZSBlbnRyeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLmluZGV4IC0gRW50cnkgaW5kZXguXG4gKiBAcGFyYW0ge0RhdGV9IGFyZ3Mubm93IC0gVmVyaWZpY2F0aW9uIHRpbWUuXG4gKiBAcGFyYW0ge3tlcnJvck1lc3NhZ2U6IHN0cmluZywgaW5kZXg6IG51bWJlcn1bXX0gYXJncy5yZWplY3RlZCAtIFJlamVjdGlvbiBhY2N1bXVsYXRvci5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbiB8IG51bGw+fSAtIFZlcmlmaWVkIG11dGF0aW9uLCBvciBudWxsIHdoZW4gcmVqZWN0ZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmaWVkQnVuZGxlTXV0YXRpb24oe2JhY2tlbmRQdWJsaWNLZXksIGVudHJ5LCBpbmRleCwgbm93LCByZWplY3RlZH0pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdmVyaWZ5U2lnbmVkTXV0YXRpb24oe2JhY2tlbmRQdWJsaWNLZXksIG5vdywgc2lnbmVkTXV0YXRpb246IGVudHJ5LnNpZ25lZE11dGF0aW9ufSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3RlZC5wdXNoKHtlcnJvck1lc3NhZ2U6IGVycm9yTWVzc2FnZShlcnJvciksIGluZGV4fSlcblxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGV4cG9ydCBzdGF0dXMgZmlsdGVycy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9sb2NhbC1tdXRhdGlvbi1sb2cuanNcIikuTG9jYWxNdXRhdGlvblN0YXR1c1tdIHwgdW5kZWZpbmVkfSBzdGF0dXNlcyAtIE9wdGlvbmFsIHN0YXR1c2VzLlxuICogQHJldHVybnMge1NldDxpbXBvcnQoXCIuL2xvY2FsLW11dGF0aW9uLWxvZy5qc1wiKS5Mb2NhbE11dGF0aW9uU3RhdHVzPn0gLSBTdGF0dXMgc2V0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVFeHBvcnRTdGF0dXNlcyhzdGF0dXNlcykge1xuICBpZiAoc3RhdHVzZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC8qKiBAdHlwZSB7U2V0PGltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25TdGF0dXM+fSAqLyAobmV3IFNldChFWFBPUlRBQkxFX1NUQVRVU0VTKSlcbiAgaWYgKCFBcnJheS5pc0FycmF5KHN0YXR1c2VzKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcGVlciBtdXRhdGlvbiBleHBvcnQgc3RhdHVzZXMgYXJyYXlcIilcblxuICBjb25zdCBub3JtYWxpemVkID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzZXMpIHtcbiAgICBpZiAoIUVYUE9SVEFCTEVfU1RBVFVTRVMuaGFzKHN0YXR1cykpIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcGVlciBtdXRhdGlvbiBleHBvcnQgc3RhdHVzICcke1N0cmluZyhzdGF0dXMpfSdgKVxuICAgIG5vcm1hbGl6ZWQuYWRkKHN0YXR1cylcbiAgfVxuXG4gIHJldHVybiAvKiogQHR5cGUge1NldDxpbXBvcnQoXCIuL2xvY2FsLW11dGF0aW9uLWxvZy5qc1wiKS5Mb2NhbE11dGF0aW9uU3RhdHVzPn0gKi8gKG5vcm1hbGl6ZWQpXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBlZXIgbXV0YXRpb24gYnVuZGxlLlxuICogQHBhcmFtIHtQZWVyTXV0YXRpb25CdW5kbGV9IGJ1bmRsZSAtIEJ1bmRsZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtQZWVyTXV0YXRpb25CdW5kbGV9IC0gTm9ybWFsaXplZCBidW5kbGUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBlZXJNdXRhdGlvbkJ1bmRsZShidW5kbGUpIHtcbiAgaWYgKCFidW5kbGUgfHwgdHlwZW9mIGJ1bmRsZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJ1bmRsZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHBlZXIgbXV0YXRpb24gYnVuZGxlIG9iamVjdFwiKVxuICBpZiAoYnVuZGxlLmZvcm1hdCAhPT0gUEVFUl9NVVRBVElPTl9CVU5ETEVfRk9STUFUKSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHBlZXIgbXV0YXRpb24gYnVuZGxlIGZvcm1hdCAnJHtTdHJpbmcoYnVuZGxlLmZvcm1hdCl9J2ApXG4gIGlzb1RpbWVzdGFtcChuZXcgRGF0ZShyZXF1aXJlZFN0cmluZyhidW5kbGUuZXhwb3J0ZWRBdCwgXCJleHBvcnRlZEF0XCIpKSwgXCJleHBvcnRlZEF0XCIpXG4gIGlmICghQXJyYXkuaXNBcnJheShidW5kbGUubXV0YXRpb25zKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcGVlciBtdXRhdGlvbiBidW5kbGUgbXV0YXRpb25zIGFycmF5XCIpXG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRlZEF0OiBidW5kbGUuZXhwb3J0ZWRBdCxcbiAgICBmb3JtYXQ6IGJ1bmRsZS5mb3JtYXQsXG4gICAgbXV0YXRpb25zOiBidW5kbGUubXV0YXRpb25zLm1hcCgoZW50cnksIGluZGV4KSA9PiBub3JtYWxpemVQZWVyTXV0YXRpb25CdW5kbGVFbnRyeShlbnRyeSwgaW5kZXgpKVxuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBvbmUgcGVlciBtdXRhdGlvbiBidW5kbGUgZW50cnkuXG4gKiBAcGFyYW0ge1BlZXJNdXRhdGlvbkJ1bmRsZUVudHJ5fSBlbnRyeSAtIEJ1bmRsZSBlbnRyeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIEVudHJ5IGluZGV4LlxuICogQHJldHVybnMge1BlZXJNdXRhdGlvbkJ1bmRsZUVudHJ5fSAtIE5vcm1hbGl6ZWQgZW50cnkuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBlZXJNdXRhdGlvbkJ1bmRsZUVudHJ5KGVudHJ5LCBpbmRleCkge1xuICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGVudHJ5KSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwZWVyIG11dGF0aW9uIGJ1bmRsZSBlbnRyeSAke2luZGV4fSBvYmplY3RgKVxuICBpZiAoIWVudHJ5LnNpZ25lZE11dGF0aW9uIHx8IHR5cGVvZiBlbnRyeS5zaWduZWRNdXRhdGlvbiAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGVudHJ5LnNpZ25lZE11dGF0aW9uKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwZWVyIG11dGF0aW9uIGJ1bmRsZSBlbnRyeSAke2luZGV4fSBzaWduZWRNdXRhdGlvbiBvYmplY3RgKVxuXG4gIC8qKiBAdHlwZSB7UGVlck11dGF0aW9uQnVuZGxlRW50cnl9ICovXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgc2lnbmVkTXV0YXRpb246IGVudHJ5LnNpZ25lZE11dGF0aW9uXG4gIH1cblxuICBpZiAoZW50cnkubG9jYWxSZWNvcmRJZCAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLmxvY2FsUmVjb3JkSWQgPSByZXF1aXJlZFN0cmluZyhlbnRyeS5sb2NhbFJlY29yZElkLCBgZW50cnkgJHtpbmRleH0gbG9jYWxSZWNvcmRJZGApXG4gIGlmIChlbnRyeS5sb2NhbFNlcXVlbmNlICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQubG9jYWxTZXF1ZW5jZSA9IHBvc2l0aXZlSW50ZWdlcihlbnRyeS5sb2NhbFNlcXVlbmNlLCBgZW50cnkgJHtpbmRleH0gbG9jYWxTZXF1ZW5jZWApXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIG5vbi1lbXB0eSBzdHJpbmcuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gVmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBMYWJlbC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU3RyaW5nLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZFN0cmluZyh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHBlZXIgbXV0YXRpb24gYnVuZGxlICR7bGFiZWx9YClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXIuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gVmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBMYWJlbC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gSW50ZWdlci5cbiAqL1xuZnVuY3Rpb24gcG9zaXRpdmVJbnRlZ2VyKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcGVlciBtdXRhdGlvbiBidW5kbGUgJHtsYWJlbH0gcG9zaXRpdmUgaW50ZWdlcmApXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBJU08gdGltZXN0YW1wIGZyb20gYSB2YWxpZCBEYXRlLlxuICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gRGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIExhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBJU08gdGltZXN0YW1wLlxuICovXG5mdW5jdGlvbiBpc29UaW1lc3RhbXAoZGF0ZSwgbGFiZWwpIHtcbiAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHx8IE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwZWVyIG11dGF0aW9uIGJ1bmRsZSAke2xhYmVsfWApXG5cbiAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBzYWZlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3Vua25vd259IGVycm9yIC0gRXJyb3IuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIE1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGVycm9yTWVzc2FnZShlcnJvcikge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGVycm9yLm1lc3NhZ2VcblxuICByZXR1cm4gU3RyaW5nKGVycm9yKVxufVxuIl19
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlci1tdXRhdGlvbi1idW5kbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9wZWVyLW11dGF0aW9uLWJ1bmRsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFFdkc7Ozs7OztHQU1HO0FBQ0g7Ozs7OztHQU1HO0FBQ0g7Ozs7O0dBS0c7QUFDSCxNQUFNLDJCQUEyQixHQUFHLHdDQUF3QyxDQUFBO0FBQzVFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtBQUUvRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHdCQUF3QixDQUFDLEVBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBQztJQUNqSSxNQUFNLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzFELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUNuRCxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN2RCxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN4RCxNQUFNLFNBQVMs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LEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEtBQUssbUJBQW1CLENBQUMsQ0FBQTtJQUVsSixPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLO0lBQy9CLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLEtBQUssRUFBRSxDQUFDLENBQUE7SUFFckgsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDM0IsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxLQUFLO0lBQ3pCLElBQUksS0FBSyxZQUFZLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUE7SUFFaEQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2NyZWF0ZVNpZ25lZE11dGF0aW9uLCBtdXRhdGlvbklkZW1wb3RlbmN5S2V5LCB2ZXJpZnlTaWduZWRNdXRhdGlvbn0gZnJvbSBcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCJcblxuLyoqXG4gKiBQZWVyIG11dGF0aW9uIGJ1bmRsZSBleHBvcnRlZCBieSBhIGRldmljZSBmb3Igb2ZmbGluZS9QMlAgdHJhbnNmZXIuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQZWVyTXV0YXRpb25CdW5kbGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBleHBvcnRlZEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSBidW5kbGUgd2FzIGV4cG9ydGVkLlxuICogQHByb3BlcnR5IHtcInZlbG9jaW91cy5zeW5jLnBlZXItbXV0YXRpb24tYnVuZGxlLnYxXCJ9IGZvcm1hdCAtIEJ1bmRsZSBmb3JtYXQgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7UGVlck11dGF0aW9uQnVuZGxlRW50cnlbXX0gbXV0YXRpb25zIC0gU2lnbmVkIG11dGF0aW9ucyBpbiBsb2NhbCBzZXF1ZW5jZSBvcmRlci5cbiAqL1xuLyoqXG4gKiBPbmUgcGVlciBtdXRhdGlvbiBidW5kbGUgZW50cnkuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQZWVyTXV0YXRpb25CdW5kbGVJbXBvcnRSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8e2NsaWVudE11dGF0aW9uSWQ6IHN0cmluZywgaWRlbXBvdGVuY3lLZXk6IHN0cmluZywgbG9jYWxSZWNvcmRJZDogc3RyaW5nfT59IGltcG9ydGVkIC0gRW50cmllcyBhcHBlbmRlZCB0byB0aGUgbG9jYWwgbG9nLlxuICogQHByb3BlcnR5IHtBcnJheTx7ZXJyb3JNZXNzYWdlOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9Pn0gcmVqZWN0ZWQgLSBFbnRyaWVzIHRoYXQgZmFpbGVkIHZlcmlmaWNhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8e2NsaWVudE11dGF0aW9uSWQ6IHN0cmluZywgaWRlbXBvdGVuY3lLZXk6IHN0cmluZywgbG9jYWxSZWNvcmRJZDogc3RyaW5nLCByZWFzb246IFwiZHVwbGljYXRlXCJ9Pn0gc2tpcHBlZCAtIEVudHJpZXMgYWxyZWFkeSBwcmVzZW50IGJ5IGlkZW1wb3RlbmN5IGtleS5cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQZWVyTXV0YXRpb25CdW5kbGVFbnRyeVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsb2NhbFJlY29yZElkXSAtIEV4cG9ydGluZyBkZXZpY2UncyBsb2NhbCBtdXRhdGlvbiByZWNvcmQgaWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2xvY2FsU2VxdWVuY2VdIC0gRXhwb3J0aW5nIGRldmljZSdzIGxvY2FsIG11dGF0aW9uIHNlcXVlbmNlLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259IHNpZ25lZE11dGF0aW9uIC0gRGV2aWNlLXNpZ25lZCBtdXRhdGlvbiBlbnZlbG9wZS5cbiAqL1xuY29uc3QgUEVFUl9NVVRBVElPTl9CVU5ETEVfRk9STUFUID0gXCJ2ZWxvY2lvdXMuc3luYy5wZWVyLW11dGF0aW9uLWJ1bmRsZS52MVwiXG5jb25zdCBFWFBPUlRBQkxFX1NUQVRVU0VTID0gbmV3IFNldChbXCJwZW5kaW5nXCIsIFwiYXBwbGllZC1sb2NhbGx5XCIsIFwiY29uZmxpY3RcIl0pXG5cbi8qKlxuICogRXhwb3J0cyBsb2NhbCBub24tdGVybWluYWwgbXV0YXRpb25zIGFzIGEgc2lnbmVkIHBlZXItdHJhbnNmZXIgYnVuZGxlLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLkRldmljZUNlcnRpZmljYXRlfSBhcmdzLmRldmljZUNlcnRpZmljYXRlIC0gRGV2aWNlIGNlcnRpZmljYXRlIGZvciBzaWduaW5nIHJlY29yZHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNKc29uV2ViS2V5fSBhcmdzLmRldmljZVByaXZhdGVLZXkgLSBEZXZpY2UgcHJpdmF0ZSBrZXkgZm9yIHNpZ25pbmcgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9sb2NhbC1tdXRhdGlvbi1sb2cuanNcIikuZGVmYXVsdH0gYXJncy5tdXRhdGlvbkxvZyAtIExvY2FsIG11dGF0aW9uIGxvZy5cbiAqIEBwYXJhbSB7KCkgPT4gRGF0ZX0gW2FyZ3Mubm93XSAtIEV4cG9ydCBjbG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9sb2NhbC1tdXRhdGlvbi1sb2cuanNcIikuTG9jYWxNdXRhdGlvblN0YXR1c1tdfSBbYXJncy5zdGF0dXNlc10gLSBTdGF0dXNlcyB0byBleHBvcnQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxQZWVyTXV0YXRpb25CdW5kbGU+fSAtIFNpZ25lZCBwZWVyIG11dGF0aW9uIGJ1bmRsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cG9ydFBlZXJNdXRhdGlvbkJ1bmRsZSh7ZGV2aWNlQ2VydGlmaWNhdGUsIGRldmljZVByaXZhdGVLZXksIG11dGF0aW9uTG9nLCBub3cgPSAoKSA9PiBuZXcgRGF0ZSgpLCBzdGF0dXNlc30pIHtcbiAgY29uc3Qgc2VsZWN0ZWRTdGF0dXNlcyA9IG5vcm1hbGl6ZUV4cG9ydFN0YXR1c2VzKHN0YXR1c2VzKVxuICBjb25zdCB0aW1lc3RhbXAgPSBpc29UaW1lc3RhbXAobm93KCksIFwiZXhwb3J0ZWRBdFwiKVxuICBjb25zdCByZWNvcmRzID0gKGF3YWl0IG11dGF0aW9uTG9nLnJlY29yZHMoKSlcbiAgICAuZmlsdGVyKChyZWNvcmQpID0+IHNlbGVjdGVkU3RhdHVzZXMuaGFzKHJlY29yZC5zdGF0dXMpKVxuICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5zZXF1ZW5jZSAtIHJpZ2h0LnNlcXVlbmNlKVxuICBjb25zdCBtdXRhdGlvbnMgPSBbXVxuXG4gIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICBtdXRhdGlvbnMucHVzaCh7XG4gICAgICBsb2NhbFJlY29yZElkOiByZWNvcmQuaWQsXG4gICAgICBsb2NhbFNlcXVlbmNlOiByZWNvcmQuc2VxdWVuY2UsXG4gICAgICBzaWduZWRNdXRhdGlvbjogcmVjb3JkLnNpZ25lZE11dGF0aW9uXG4gICAgICAgID8gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259ICovIChyZWNvcmQuc2lnbmVkTXV0YXRpb24pXG4gICAgICAgIDogYXdhaXQgY3JlYXRlU2lnbmVkTXV0YXRpb24oe1xuICAgICAgICAgIGRldmljZUNlcnRpZmljYXRlLFxuICAgICAgICAgIGRldmljZVByaXZhdGVLZXksXG4gICAgICAgICAgbXV0YXRpb246IHJlY29yZC5tdXRhdGlvblxuICAgICAgICB9KVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydGVkQXQ6IHRpbWVzdGFtcCxcbiAgICBmb3JtYXQ6IFBFRVJfTVVUQVRJT05fQlVORExFX0ZPUk1BVCxcbiAgICBtdXRhdGlvbnNcbiAgfVxufVxuXG4vKipcbiAqIEltcG9ydHMgdmVyaWZpZWQgcGVlciBtdXRhdGlvbnMgaW50byB0aGUgbG9jYWwgbXV0YXRpb24gbG9nLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNKc29uV2ViS2V5fSBhcmdzLmJhY2tlbmRQdWJsaWNLZXkgLSBCYWNrZW5kIHB1YmxpYyBrZXkgZm9yIHZlcmlmeWluZyBwZWVyIGNlcnRpZmljYXRlcy5cbiAqIEBwYXJhbSB7UGVlck11dGF0aW9uQnVuZGxlfSBhcmdzLmJ1bmRsZSAtIFBlZXIgYnVuZGxlIHRvIGltcG9ydC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9sb2NhbC1tdXRhdGlvbi1sb2cuanNcIikuZGVmYXVsdH0gYXJncy5tdXRhdGlvbkxvZyAtIExvY2FsIG11dGF0aW9uIGxvZy5cbiAqIEBwYXJhbSB7RGF0ZX0gW2FyZ3Mubm93XSAtIFZlcmlmaWNhdGlvbiB0aW1lLlxuICogQHJldHVybnMge1Byb21pc2U8e2ltcG9ydGVkOiB7Y2xpZW50TXV0YXRpb25JZDogc3RyaW5nLCBpZGVtcG90ZW5jeUtleTogc3RyaW5nLCBsb2NhbFJlY29yZElkOiBzdHJpbmd9W10sIHJlamVjdGVkOiB7ZXJyb3JNZXNzYWdlOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9W10sIHNraXBwZWQ6IHtjbGllbnRNdXRhdGlvbklkOiBzdHJpbmcsIGlkZW1wb3RlbmN5S2V5OiBzdHJpbmcsIGxvY2FsUmVjb3JkSWQ6IHN0cmluZywgcmVhc29uOiBcImR1cGxpY2F0ZVwifVtdfT59IC0gSW1wb3J0IHJlc3VsdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydFBlZXJNdXRhdGlvbkJ1bmRsZSh7YmFja2VuZFB1YmxpY0tleSwgYnVuZGxlLCBtdXRhdGlvbkxvZywgbm93ID0gbmV3IERhdGUoKX0pIHtcbiAgY29uc3Qgbm9ybWFsaXplZEJ1bmRsZSA9IG5vcm1hbGl6ZVBlZXJNdXRhdGlvbkJ1bmRsZShidW5kbGUpXG4gIGNvbnN0IGV4aXN0aW5nUmVjb3JkcyA9IGF3YWl0IG11dGF0aW9uTG9nLnJlY29yZHMoKVxuICBjb25zdCBleGlzdGluZ0J5SWRlbXBvdGVuY3lLZXkgPSBuZXcgTWFwKGV4aXN0aW5nUmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gW211dGF0aW9uSWRlbXBvdGVuY3lLZXkoe211dGF0aW9uOiByZWNvcmQubXV0YXRpb259KSwgcmVjb3JkXSkpXG4gIC8qKiBAdHlwZSB7e2NsaWVudE11dGF0aW9uSWQ6IHN0cmluZywgaWRlbXBvdGVuY3lLZXk6IHN0cmluZywgbG9jYWxSZWNvcmRJZDogc3RyaW5nfVtdfSAqL1xuICBjb25zdCBpbXBvcnRlZCA9IFtdXG4gIC8qKiBAdHlwZSB7e2Vycm9yTWVzc2FnZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCByZWplY3RlZCA9IFtdXG4gIC8qKiBAdHlwZSB7e2NsaWVudE11dGF0aW9uSWQ6IHN0cmluZywgaWRlbXBvdGVuY3lLZXk6IHN0cmluZywgbG9jYWxSZWNvcmRJZDogc3RyaW5nLCByZWFzb246IFwiZHVwbGljYXRlXCJ9W119ICovXG4gIGNvbnN0IHNraXBwZWQgPSBbXVxuXG4gIGZvciAoY29uc3QgW2luZGV4LCBlbnRyeV0gb2Ygbm9ybWFsaXplZEJ1bmRsZS5tdXRhdGlvbnMuZW50cmllcygpKSB7XG4gICAgY29uc3QgbXV0YXRpb24gPSBhd2FpdCB2ZXJpZmllZEJ1bmRsZU11dGF0aW9uKHtiYWNrZW5kUHVibGljS2V5LCBlbnRyeSwgaW5kZXgsIG5vdywgcmVqZWN0ZWR9KVxuXG4gICAgaWYgKCFtdXRhdGlvbikgY29udGludWVcblxuICAgIGNvbnN0IGlkZW1wb3RlbmN5S2V5ID0gbXV0YXRpb25JZGVtcG90ZW5jeUtleShlbnRyeS5zaWduZWRNdXRhdGlvbilcbiAgICBjb25zdCBkdXBsaWNhdGVSZWNvcmQgPSBleGlzdGluZ0J5SWRlbXBvdGVuY3lLZXkuZ2V0KGlkZW1wb3RlbmN5S2V5KVxuXG4gICAgaWYgKGR1cGxpY2F0ZVJlY29yZCkge1xuICAgICAgc2tpcHBlZC5wdXNoKHtcbiAgICAgICAgY2xpZW50TXV0YXRpb25JZDogbXV0YXRpb24uY2xpZW50TXV0YXRpb25JZCxcbiAgICAgICAgaWRlbXBvdGVuY3lLZXksXG4gICAgICAgIGxvY2FsUmVjb3JkSWQ6IGR1cGxpY2F0ZVJlY29yZC5pZCxcbiAgICAgICAgcmVhc29uOiAvKiogQHR5cGUge1wiZHVwbGljYXRlXCJ9ICovIChcImR1cGxpY2F0ZVwiKVxuICAgICAgfSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgbXV0YXRpb25Mb2cuYXBwZW5kKHttdXRhdGlvbiwgc2lnbmVkTXV0YXRpb246IGVudHJ5LnNpZ25lZE11dGF0aW9ufSlcbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgbXV0YXRpb25Mb2cudXBkYXRlU3RhdHVzKHtpZDogcmVjb3JkLmlkLCBzdGF0dXM6IFwicGVlci1hcHBsaWVkXCJ9KVxuICAgIGV4aXN0aW5nQnlJZGVtcG90ZW5jeUtleS5zZXQoaWRlbXBvdGVuY3lLZXksIHVwZGF0ZWQpXG4gICAgaW1wb3J0ZWQucHVzaCh7Y2xpZW50TXV0YXRpb25JZDogbXV0YXRpb24uY2xpZW50TXV0YXRpb25JZCwgaWRlbXBvdGVuY3lLZXksIGxvY2FsUmVjb3JkSWQ6IHVwZGF0ZWQuaWR9KVxuICB9XG5cbiAgcmV0dXJuIHtpbXBvcnRlZCwgcmVqZWN0ZWQsIHNraXBwZWR9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgYSBidW5kbGUgbXV0YXRpb24gYW5kIHJlY29yZHMgbm9ybWFsIHBlci1lbnRyeSB2ZXJpZmljYXRpb24gcmVqZWN0aW9ucy5cbiAqIFN0b3JhZ2Ugd3JpdGVzIGludGVudGlvbmFsbHkgaGFwcGVuIG91dHNpZGUgdGhpcyBoZWxwZXIgc28gc3RvcmFnZSBmYWlsdXJlcyBlc2NhcGUgaW1wb3J0LlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNKc29uV2ViS2V5fSBhcmdzLmJhY2tlbmRQdWJsaWNLZXkgLSBCYWNrZW5kIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0ge1BlZXJNdXRhdGlvbkJ1bmRsZUVudHJ5fSBhcmdzLmVudHJ5IC0gQnVuZGxlIGVudHJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuaW5kZXggLSBFbnRyeSBpbmRleC5cbiAqIEBwYXJhbSB7RGF0ZX0gYXJncy5ub3cgLSBWZXJpZmljYXRpb24gdGltZS5cbiAqIEBwYXJhbSB7e2Vycm9yTWVzc2FnZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfVtdfSBhcmdzLnJlamVjdGVkIC0gUmVqZWN0aW9uIGFjY3VtdWxhdG9yLlxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9uIHwgbnVsbD59IC0gVmVyaWZpZWQgbXV0YXRpb24sIG9yIG51bGwgd2hlbiByZWplY3RlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdmVyaWZpZWRCdW5kbGVNdXRhdGlvbih7YmFja2VuZFB1YmxpY0tleSwgZW50cnksIGluZGV4LCBub3csIHJlamVjdGVkfSkge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB2ZXJpZnlTaWduZWRNdXRhdGlvbih7YmFja2VuZFB1YmxpY0tleSwgbm93LCBzaWduZWRNdXRhdGlvbjogZW50cnkuc2lnbmVkTXV0YXRpb259KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdGVkLnB1c2goe2Vycm9yTWVzc2FnZTogZXJyb3JNZXNzYWdlKGVycm9yKSwgaW5kZXh9KVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZXhwb3J0IHN0YXR1cyBmaWx0ZXJzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2xvY2FsLW11dGF0aW9uLWxvZy5qc1wiKS5Mb2NhbE11dGF0aW9uU3RhdHVzW10gfCB1bmRlZmluZWR9IHN0YXR1c2VzIC0gT3B0aW9uYWwgc3RhdHVzZXMuXG4gKiBAcmV0dXJucyB7U2V0PGltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25TdGF0dXM+fSAtIFN0YXR1cyBzZXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV4cG9ydFN0YXR1c2VzKHN0YXR1c2VzKSB7XG4gIGlmIChzdGF0dXNlcyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLyoqIEB0eXBlIHtTZXQ8aW1wb3J0KFwiLi9sb2NhbC1tdXRhdGlvbi1sb2cuanNcIikuTG9jYWxNdXRhdGlvblN0YXR1cz59ICovIChuZXcgU2V0KEVYUE9SVEFCTEVfU1RBVFVTRVMpKVxuICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdHVzZXMpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBwZWVyIG11dGF0aW9uIGV4cG9ydCBzdGF0dXNlcyBhcnJheVwiKVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNlcykge1xuICAgIGlmICghRVhQT1JUQUJMRV9TVEFUVVNFUy5oYXMoc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBwZWVyIG11dGF0aW9uIGV4cG9ydCBzdGF0dXMgJyR7U3RyaW5nKHN0YXR1cyl9J2ApXG4gICAgbm9ybWFsaXplZC5hZGQoc3RhdHVzKVxuICB9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7U2V0PGltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25TdGF0dXM+fSAqLyAobm9ybWFsaXplZClcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGVlciBtdXRhdGlvbiBidW5kbGUuXG4gKiBAcGFyYW0ge1BlZXJNdXRhdGlvbkJ1bmRsZX0gYnVuZGxlIC0gQnVuZGxlIHZhbHVlLlxuICogQHJldHVybnMge1BlZXJNdXRhdGlvbkJ1bmRsZX0gLSBOb3JtYWxpemVkIGJ1bmRsZS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGVlck11dGF0aW9uQnVuZGxlKGJ1bmRsZSkge1xuICBpZiAoIWJ1bmRsZSB8fCB0eXBlb2YgYnVuZGxlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYnVuZGxlKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcGVlciBtdXRhdGlvbiBidW5kbGUgb2JqZWN0XCIpXG4gIGlmIChidW5kbGUuZm9ybWF0ICE9PSBQRUVSX01VVEFUSU9OX0JVTkRMRV9GT1JNQVQpIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcGVlciBtdXRhdGlvbiBidW5kbGUgZm9ybWF0ICcke1N0cmluZyhidW5kbGUuZm9ybWF0KX0nYClcbiAgaXNvVGltZXN0YW1wKG5ldyBEYXRlKHJlcXVpcmVkU3RyaW5nKGJ1bmRsZS5leHBvcnRlZEF0LCBcImV4cG9ydGVkQXRcIikpLCBcImV4cG9ydGVkQXRcIilcbiAgaWYgKCFBcnJheS5pc0FycmF5KGJ1bmRsZS5tdXRhdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBwZWVyIG11dGF0aW9uIGJ1bmRsZSBtdXRhdGlvbnMgYXJyYXlcIilcblxuICByZXR1cm4ge1xuICAgIGV4cG9ydGVkQXQ6IGJ1bmRsZS5leHBvcnRlZEF0LFxuICAgIGZvcm1hdDogYnVuZGxlLmZvcm1hdCxcbiAgICBtdXRhdGlvbnM6IGJ1bmRsZS5tdXRhdGlvbnMubWFwKChlbnRyeSwgaW5kZXgpID0+IG5vcm1hbGl6ZVBlZXJNdXRhdGlvbkJ1bmRsZUVudHJ5KGVudHJ5LCBpbmRleCkpXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIG9uZSBwZWVyIG11dGF0aW9uIGJ1bmRsZSBlbnRyeS5cbiAqIEBwYXJhbSB7UGVlck11dGF0aW9uQnVuZGxlRW50cnl9IGVudHJ5IC0gQnVuZGxlIGVudHJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gRW50cnkgaW5kZXguXG4gKiBAcmV0dXJucyB7UGVlck11dGF0aW9uQnVuZGxlRW50cnl9IC0gTm9ybWFsaXplZCBlbnRyeS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGVlck11dGF0aW9uQnVuZGxlRW50cnkoZW50cnksIGluZGV4KSB7XG4gIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZW50cnkpKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHBlZXIgbXV0YXRpb24gYnVuZGxlIGVudHJ5ICR7aW5kZXh9IG9iamVjdGApXG4gIGlmICghZW50cnkuc2lnbmVkTXV0YXRpb24gfHwgdHlwZW9mIGVudHJ5LnNpZ25lZE11dGF0aW9uICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZW50cnkuc2lnbmVkTXV0YXRpb24pKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHBlZXIgbXV0YXRpb24gYnVuZGxlIGVudHJ5ICR7aW5kZXh9IHNpZ25lZE11dGF0aW9uIG9iamVjdGApXG5cbiAgLyoqIEB0eXBlIHtQZWVyTXV0YXRpb25CdW5kbGVFbnRyeX0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICBzaWduZWRNdXRhdGlvbjogZW50cnkuc2lnbmVkTXV0YXRpb25cbiAgfVxuXG4gIGlmIChlbnRyeS5sb2NhbFJlY29yZElkICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQubG9jYWxSZWNvcmRJZCA9IHJlcXVpcmVkU3RyaW5nKGVudHJ5LmxvY2FsUmVjb3JkSWQsIGBlbnRyeSAke2luZGV4fSBsb2NhbFJlY29yZElkYClcbiAgaWYgKGVudHJ5LmxvY2FsU2VxdWVuY2UgIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5sb2NhbFNlcXVlbmNlID0gcG9zaXRpdmVJbnRlZ2VyKGVudHJ5LmxvY2FsU2VxdWVuY2UsIGBlbnRyeSAke2luZGV4fSBsb2NhbFNlcXVlbmNlYClcblxuICByZXR1cm4gbm9ybWFsaXplZFxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgbm9uLWVtcHR5IHN0cmluZy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBWYWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIExhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBTdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkU3RyaW5nKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcGVlciBtdXRhdGlvbiBidW5kbGUgJHtsYWJlbH1gKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlci5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBWYWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIExhYmVsLlxuICogQHJldHVybnMge251bWJlcn0gLSBJbnRlZ2VyLlxuICovXG5mdW5jdGlvbiBwb3NpdGl2ZUludGVnZXIodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgMSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwZWVyIG11dGF0aW9uIGJ1bmRsZSAke2xhYmVsfSBwb3NpdGl2ZSBpbnRlZ2VyYClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIElTTyB0aW1lc3RhbXAgZnJvbSBhIHZhbGlkIERhdGUuXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBEYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gTGFiZWwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIElTTyB0aW1lc3RhbXAuXG4gKi9cbmZ1bmN0aW9uIGlzb1RpbWVzdGFtcChkYXRlLCBsYWJlbCkge1xuICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkgfHwgTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBlZXIgbXV0YXRpb24gYnVuZGxlICR7bGFiZWx9YClcblxuICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHNhZmUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBFcnJvci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gZXJyb3JNZXNzYWdlKGVycm9yKSB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gZXJyb3IubWVzc2FnZVxuXG4gIHJldHVybiBTdHJpbmcoZXJyb3IpXG59XG4iXX0=
@@ -19,16 +19,18 @@ export default class SyncApiClient {
19
19
  * @param {string | number | null} args.baseVersion - Authoritative version observed before the local mutation.
20
20
  * @param {import("./sync-client-types.js").SyncClientConflictTrackingConfig} args.conflictTracking - Durable tracking configuration.
21
21
  * @param {Record<string, unknown>} args.data - Backend-safe mutation attributes.
22
+ * @param {import("./sync-offline-session.js").default} [args.offlineSession] - Active long-offline session: the mutation identity (actor ids, grant id, policy hash) is supplied by the session and the appended record carries the device-signed envelope.
22
23
  * @param {"create" | "update" | "destroy"} args.operation - Local operation.
23
24
  * @param {ReturnType<typeof JSON.parse>} args.resource - Local resource.
24
25
  * @param {string} args.resourceType - Resource type.
25
26
  * @param {string} args.syncType - Wire operation.
26
27
  * @returns {Promise<import("./local-mutation-log.js").LocalMutationLogRecord>} Appended intent.
27
28
  */
28
- static queueConflictTrackedSync({ baseVersion, conflictTracking, data, operation, resource, resourceType, syncType }: {
29
+ static queueConflictTrackedSync({ baseVersion, conflictTracking, data, offlineSession, operation, resource, resourceType, syncType }: {
29
30
  baseVersion: string | number | null;
30
31
  conflictTracking: import("./sync-client-types.js").SyncClientConflictTrackingConfig;
31
32
  data: Record<string, unknown>;
33
+ offlineSession?: import("./sync-offline-session.js").default;
32
34
  operation: "create" | "update" | "destroy";
33
35
  resource: ReturnType<typeof JSON.parse>;
34
36
  resourceType: string;
@@ -1 +1 @@
1
- {"version":3,"file":"sync-api-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-api-client.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-api-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-api-client.js"],"names":[],"mappings":"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"}