velocious 1.0.591 → 1.0.592

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 (46) hide show
  1. package/README.md +1 -1
  2. package/build/src/sync/conflict-strategy.d.ts.map +1 -1
  3. package/build/src/sync/conflict-strategy.js +7 -1
  4. package/build/src/sync/local-mutation-log.d.ts +10 -0
  5. package/build/src/sync/local-mutation-log.d.ts.map +1 -1
  6. package/build/src/sync/local-mutation-log.js +21 -1
  7. package/build/src/sync/sync-api-client-types.d.ts +15 -0
  8. package/build/src/sync/sync-api-client-types.d.ts.map +1 -1
  9. package/build/src/sync/sync-api-client-types.js +4 -1
  10. package/build/src/sync/sync-api-client.d.ts +91 -0
  11. package/build/src/sync/sync-api-client.d.ts.map +1 -1
  12. package/build/src/sync/sync-api-client.js +184 -1
  13. package/build/src/sync/sync-client-types.d.ts +57 -0
  14. package/build/src/sync/sync-client-types.d.ts.map +1 -1
  15. package/build/src/sync/sync-client-types.js +16 -1
  16. package/build/src/sync/sync-client.d.ts +56 -7
  17. package/build/src/sync/sync-client.d.ts.map +1 -1
  18. package/build/src/sync/sync-client.js +180 -15
  19. package/build/src/sync/sync-envelope-replay-service.d.ts +31 -2
  20. package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
  21. package/build/src/sync/sync-envelope-replay-service.js +98 -16
  22. package/build/src/sync/sync-model-change-feed-service.d.ts.map +1 -1
  23. package/build/src/sync/sync-model-change-feed-service.js +3 -4
  24. package/build/src/sync/sync-replay-persisted-data.d.ts +26 -0
  25. package/build/src/sync/sync-replay-persisted-data.d.ts.map +1 -0
  26. package/build/src/sync/sync-replay-persisted-data.js +43 -0
  27. package/build/sync/conflict-strategy.js +3 -0
  28. package/build/sync/local-mutation-log.js +24 -0
  29. package/build/sync/sync-api-client-types.js +3 -0
  30. package/build/sync/sync-api-client.js +203 -0
  31. package/build/sync/sync-client-types.js +16 -0
  32. package/build/sync/sync-client.js +198 -14
  33. package/build/sync/sync-envelope-replay-service.js +109 -12
  34. package/build/sync/sync-model-change-feed-service.js +2 -4
  35. package/build/sync/sync-replay-persisted-data.js +50 -0
  36. package/build/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +1 -1
  38. package/src/sync/conflict-strategy.js +3 -0
  39. package/src/sync/local-mutation-log.js +24 -0
  40. package/src/sync/sync-api-client-types.js +3 -0
  41. package/src/sync/sync-api-client.js +203 -0
  42. package/src/sync/sync-client-types.js +16 -0
  43. package/src/sync/sync-client.js +198 -14
  44. package/src/sync/sync-envelope-replay-service.js +109 -12
  45. package/src/sync/sync-model-change-feed-service.js +2 -4
  46. package/src/sync/sync-replay-persisted-data.js +50 -0
package/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
  * Controllers and views for HTTP endpoints
15
15
  * Frontend-model transport for creating, updating, querying, and subscribing to query-filtered lifecycle events over HTTP/WebSocket, with structured per-attribute validation error responses and one-budget WebSocket startup controls (see [docs/frontend-models.md](docs/frontend-models.md) and [docs/websocket-channels.md](docs/websocket-channels.md))
16
16
  * Client-side offline sync mutation logs and frontend-model optimistic queueing primitives (see the [shared-resource sync developer guide](docs/shared-resource-sync-guide.md) and [offline sync architecture](docs/offline-sync.md))
17
- * Declarative client sync scopes with per-scope cursors, automatic mutation tracking, realtime delivery whose per-recipient authorization hook receives the complete persisted sync envelope, and `sync`/`pull` progress reporting for "X of Y" import screens (see [docs/sync-client.md](docs/sync-client.md) and [docs/offline-sync.md](docs/offline-sync.md))
17
+ * Declarative client sync scopes with per-scope cursors, automatic mutation tracking, opt-in durable base-version conflict replay, realtime delivery whose per-recipient authorization hook receives the complete persisted sync envelope, and `sync`/`pull` progress reporting for "X of Y" import screens (see [docs/sync-client.md](docs/sync-client.md) and [docs/offline-sync.md](docs/offline-sync.md))
18
18
  * Reactive `useLiveQuery(Model.where(...))` queries that stay current from committed local model changes across local writes, pulls, and realtime (see [docs/live-queries.md](docs/live-queries.md))
19
19
  * Server-side sync envelope replay orchestration for app-owned sync receivers, including allowlisted authoritative values for conflict resolution (see [docs/sync-envelope-replay-service.md](docs/sync-envelope-replay-service.md))
20
20
  * Self-sustaining sync feeds: upstream imports triggered by the changes pull itself, with framework-owned coalescing and throttling (see [docs/sync-upstream-imports.md](docs/sync-upstream-imports.md))
@@ -1 +1 @@
1
- {"version":3,"file":"conflict-strategy.d.ts","sourceRoot":"","sources":["../../../src/sync/conflict-strategy.js"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;GAIG;AACH;;;;;;GAMG;AAbA,YAAkF,aAAa,GAArF,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAe;AAG/F,YAAkB,kBAAkB,GACpC;;;;IAA0C,UAAU,EAAzC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CACxC;;;;IAA8C,OAAO,AAArD,CACF,EADa,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAC7C;CAAA,CAAA;AAEE,YAAkB,kBAAkB,GACpC;;;;IAA2C,UAAU,AAArD,CACA,EADW,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CACxC;;;;IAA2C,QAAQ,AAAnD,CACA,EADW,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CACxC;;;;IAAgD,MAAM,EAA3C,SAAS,GAAG,UAAU,GAAG,UAAU,CAC9C;;;;IAAmB,QAAQ,EAAhB,MAAM,CACnB;CAAA,CAAA;AAKD;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CAAC,EAAC,UAAiB,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAmB,EAAE,QAA8B,EAAE,gBAA8B,EAAC,EARxK;IAAyC,UAAU,AAAnD,CACA,EADQ,kBAAkB,GAAG,IAAI,CACjC;IAAmF,aAAa,AAAhG,CACA,EADQ,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAC3E;IAA0D,QAAQ,EAA1D,OAAO,sBAAsB,EAAE,YAAY,CACnD;IAAyC,YAAY,AAArD,CACA,EADQ,kBAAkB,GAAG,IAAI,CACjC;IAAsB,QAAQ,AAA9B,CACA,EADQ,MAAM,CACd;IAAsB,gBAAgB,AAAtC,CACA,EADQ,MAAM,CACd;CAEwK,GAF9J,OAAO,CAAC,kBAAkB,CAAC,CAavC;AAED;;;;;;;GAOG;AACH,wBAAsB,uCAAuC,CAAC,EAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAC,EALxF;IAAwD,WAAW,EAA3D,OAAO,yBAAyB,EAAE,OAAO,CACjD;IAAuE,MAAM,EAArE,OAAO,yBAAyB,EAAE,sBAAsB,CAChE;IAA4C,MAAM,EAA1C,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CACrC;CAEwF,GAF9E,OAAO,CAAC,OAAO,yBAAyB,EAAE,sBAAsB,CAAC,CAQ7E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAHnC,MAAM,CAAC,MAAM,EAAE,aAAa,CAGO,GAFjC,OAAO,yBAAyB,EAAE,mBAAmB,CASjE"}
1
+ {"version":3,"file":"conflict-strategy.d.ts","sourceRoot":"","sources":["../../../src/sync/conflict-strategy.js"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;GAIG;AACH;;;;;;GAMG;AAbA,YAAkF,aAAa,GAArF,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAe;AAG/F,YAAkB,kBAAkB,GACpC;;;;IAA0C,UAAU,EAAzC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CACxC;;;;IAA8C,OAAO,AAArD,CACF,EADa,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAC7C;CAAA,CAAA;AAEE,YAAkB,kBAAkB,GACpC;;;;IAA2C,UAAU,AAArD,CACA,EADW,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CACxC;;;;IAA2C,QAAQ,AAAnD,CACA,EADW,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CACxC;;;;IAAgD,MAAM,EAA3C,SAAS,GAAG,UAAU,GAAG,UAAU,CAC9C;;;;IAAmB,QAAQ,EAAhB,MAAM,CACnB;CAAA,CAAA;AAKD;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CAAC,EAAC,UAAiB,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAmB,EAAE,QAA8B,EAAE,gBAA8B,EAAC,EARxK;IAAyC,UAAU,AAAnD,CACA,EADQ,kBAAkB,GAAG,IAAI,CACjC;IAAmF,aAAa,AAAhG,CACA,EADQ,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAC3E;IAA0D,QAAQ,EAA1D,OAAO,sBAAsB,EAAE,YAAY,CACnD;IAAyC,YAAY,AAArD,CACA,EADQ,kBAAkB,GAAG,IAAI,CACjC;IAAsB,QAAQ,AAA9B,CACA,EADQ,MAAM,CACd;IAAsB,gBAAgB,AAAtC,CACA,EADQ,MAAM,CACd;CAEwK,GAF9J,OAAO,CAAC,kBAAkB,CAAC,CAavC;AAED;;;;;;;GAOG;AACH,wBAAsB,uCAAuC,CAAC,EAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAC,EALxF;IAAwD,WAAW,EAA3D,OAAO,yBAAyB,EAAE,OAAO,CACjD;IAAuE,MAAM,EAArE,OAAO,yBAAyB,EAAE,sBAAsB,CAChE;IAA4C,MAAM,EAA1C,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CACrC;CAEwF,GAF9E,OAAO,CAAC,OAAO,yBAAyB,EAAE,sBAAsB,CAAC,CAQ7E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAHnC,MAAM,CAAC,MAAM,EAAE,aAAa,CAGO,GAFjC,OAAO,yBAAyB,EAAE,mBAAmB,CAYjE"}
@@ -61,6 +61,12 @@ export async function applySyncReplayResultToLocalMutationLog({ mutationLog, rec
61
61
  * @returns {import("./local-mutation-log.js").LocalMutationStatus} - Local mutation-log status.
62
62
  */
63
63
  export function replayResultLocalStatus(result) {
64
+ if (result.syncState === "conflict")
65
+ return "conflict";
66
+ if (result.syncState === "failed" || result.syncState === "rejected")
67
+ return "rejected";
68
+ if (result.syncState === "successful" || result.syncState === "duplicate")
69
+ return "synced";
64
70
  if (result.status === "conflict")
65
71
  return "conflict";
66
72
  if (result.status === "error" || result.status === "rejected")
@@ -212,4 +218,4 @@ function stableJsonStringify(value) {
212
218
  }
213
219
  return JSON.stringify(value);
214
220
  }
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmxpY3Qtc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9jb25mbGljdC1zdHJhdGVneS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNIOzs7O0dBSUc7QUFDSDs7Ozs7O0dBTUc7QUFDSCxZQUFZO0FBRVosTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQTtBQUV6SDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxFQUFDLFVBQVUsR0FBRyxJQUFJLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFLFFBQVEsR0FBRyxtQkFBbUIsRUFBRSxnQkFBZ0IsR0FBRyxXQUFXLEVBQUM7SUFDekssSUFBSSxhQUFhO1FBQUUsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDbEosSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxRQUFRLEdBQUcsQ0FBQyxDQUFBO0lBRXZHLE1BQU0sa0JBQWtCLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFMUQsSUFBSSxRQUFRLEtBQUssWUFBWSxJQUFJLFFBQVEsS0FBSyxnQkFBZ0I7UUFBRSxPQUFPLEVBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFDLENBQUE7SUFDcEksSUFBSSxRQUFRLEtBQUssZUFBZTtRQUFFLE9BQU8sbUJB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QTtBQUNqRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsbUJBQW1CLENBQUMsS0FBSztJQUNoQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUE7SUFDbEcsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdkMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksbUJBQW1CLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtJQUN0SyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtudWxsIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVua25vd25bXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+fSBTeW5jSnNvblZhbHVlXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NvbmZsaWN0UmVjb3JkXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFN5bmNKc29uVmFsdWU+fSBhdHRyaWJ1dGVzIC0gUmVjb3JkIGF0dHJpYnV0ZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsfSBbdmVyc2lvbl0gLSBSZWNvcmQgdmVyc2lvbiB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jQ29uZmxpY3RSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgU3luY0pzb25WYWx1ZT59IFthdHRyaWJ1dGVzXSAtIEF0dHJpYnV0ZXMgdG8gYXBwbHkgd2hlbiByZXBsYXkgbWF5IGNvbnRpbnVlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBTeW5jSnNvblZhbHVlPn0gW2NvbmZsaWN0XSAtIFN0cnVjdHVyZWQgY29uZmxpY3QgcGF5bG9hZCBmb3IgdGhlIGNsaWVudC9sb2NhbCBsb2cuXG4gKiBAcHJvcGVydHkge1wiYXBwbGllZFwiIHwgXCJjb25mbGljdFwiIHwgXCJyZWplY3RlZFwifSBzdGF0dXMgLSBDb25mbGljdCBkZWNpc2lvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdHJhdGVneSAtIFN0cmF0ZWd5IHRoYXQgcHJvZHVjZWQgdGhlIGRlY2lzaW9uLlxuICovXG4vLyBAdHMtY2hlY2tcblxuY29uc3QgQ09ORkxJQ1RfU1RSQVRFR0lFUyA9IG5ldyBTZXQoW1wib3B0aW1pc3RpY1ZlcnNpb25cIiwgXCJzZXJ2ZXJXaW5zXCIsIFwibGFzdFdyaXRlcldpbnNcIiwgXCJmaWVsZFRocmVlV2F5XCIsIFwiYXBwZW5kT25seVwiXSlcblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSByZXBsYXkgbXV0YXRpb24gYWdhaW5zdCBzZXJ2ZXIvYmFzZSBzdGF0ZSB1c2luZyBhIHN5bmMgY29uZmxpY3Qgc3RyYXRlZ3kuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7U3luY0NvbmZsaWN0UmVjb3JkIHwgbnVsbH0gW2FyZ3MuYmFzZVJlY29yZF0gLSBSZWNvcmQgc3RhdGUgb2JzZXJ2ZWQgd2hlbiB0aGUgbXV0YXRpb24gd2FzIG1hZGUuXG4gKiBAcGFyYW0geyhhcmc6IG9iamVjdCkgPT4gKFN5bmNDb25mbGljdFJlc3VsdCB8IFByb21pc2U8U3luY0NvbmZsaWN0UmVzdWx0Pil9IFthcmdzLmN1c3RvbUhhbmRsZXJdIC0gUmVzb3VyY2Utc3BlY2lmaWMgY29uZmxpY3QgaG9vay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSBhcmdzLm11dGF0aW9uIC0gUmVwbGF5ZWQgbXV0YXRpb24uXG4gKiBAcGFyYW0ge1N5bmNDb25mbGljdFJlY29yZCB8IG51bGx9IFthcmdzLnNlcnZlclJlY29yZF0gLSBDdXJyZW50IGF1dGhvcml0YXRpdmUgc2VydmVyIHJlY29yZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHJhdGVneV0gLSBDb25mbGljdCBzdHJhdGVneS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy52ZXJzaW9uQXR0cmlidXRlXSAtIEF0dHJpYnV0ZSB1c2VkIGZvciBvcHRpbWlzdGljIHZlcnNpb24gY2hlY2tzLlxuICogQHJldHVybnMge1Byb21pc2U8U3luY0NvbmZsaWN0UmVzdWx0Pn0gLSBDb25mbGljdCBkZWNpc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTeW5jQ29uZmxpY3Qoe2Jhc2VSZWNvcmQgPSBudWxsLCBjdXN0b21IYW5kbGVyLCBtdXRhdGlvbiwgc2VydmVyUmVjb3JkID0gbnVsbCwgc3RyYXRlZ3kgPSBcIm9wdGltaXN0aWNWZXJzaW9uXCIsIHZlcnNpb25BdHRyaWJ1dGUgPSBcInVwZGF0ZWRBdFwifSkge1xuICBpZiAoY3VzdG9tSGFuZGxlcikgcmV0dXJuIG5vcm1hbGl6ZUNvbmZsaWN0UmVzdWx0KGF3YWl0IGN1c3RvbUhhbmRsZXIoe2Jhc2VSZWNvcmQsIG11dGF0aW9uLCBzZXJ2ZXJSZWNvcmQsIHN0cmF0ZWd5LCB2ZXJzaW9uQXR0cmlidXRlfSksIHN0cmF0ZWd5KVxuICBpZiAoIUNPTkZMSUNUX1NUUkFURUdJRVMuaGFzKHN0cmF0ZWd5KSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHN5bmMgY29uZmxpY3Qgc3RyYXRlZ3kgJyR7c3RyYXRlZ3l9J2ApXG5cbiAgY29uc3QgbXV0YXRpb25BdHRyaWJ1dGVzID0gbXV0YXRpb25BdHRyaWJ1dGVzRm9yKG11dGF0aW9uKVxuXG4gIGlmIChzdHJhdGVneSA9PT0gXCJhcHBlbmRPbmx5XCIgfHwgc3RyYXRlZ3kgPT09IFwibGFzdFdyaXRlcldpbnNcIikgcmV0dXJuIHthdHRyaWJ1dGVzOiBtdXRhdGlvbkF0dHJpYnV0ZXMsIHN0YXR1czogXCJhcHBsaWVkXCIsIHN0cmF0ZWd5fVxuICBpZiAoc3RyYXRlZ3kgPT09IFwiZmllbGRUaHJlZVdheVwiKSByZXR1cm4gZmllbGRUaHJlZVdheVJlc3VsdCh7YmFzZVJlY29yZCwgbXV0YXRpb24sIHNlcnZlclJlY29yZCwgc3RyYXRlZ3ksIHZlcnNpb25BdHRyaWJ1dGV9KVxuICBpZiAoaGFzVmVyc2lvbkNvbmZsaWN0KHttdXRhdGlvbiwgc2VydmVyUmVjb3JkLCB2ZXJzaW9uQXR0cmlidXRlfSkpIHJldHVybiBjb25mbGljdFJlc3VsdCh7YmFzZVJlY29yZCwgbXV0YXRpb24sIHNlcnZlclJlY29yZCwgc3RyYXRlZ3ksIHZlcnNpb25BdHRyaWJ1dGV9KVxuXG4gIHJldHVybiB7YXR0cmlidXRlczogbXV0YXRpb25BdHRyaWJ1dGVzLCBzdGF0dXM6IFwiYXBwbGllZFwiLCBzdHJhdGVneX1cbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgc2VydmVyIHJlcGxheSByZXN1bHQgdG8gYSBsb2NhbCBtdXRhdGlvbi1sb2cgcmVjb3JkLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLmRlZmF1bHR9IGFyZ3MubXV0YXRpb25Mb2cgLSBMb2NhbCBtdXRhdGlvbiBsb2cuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IGFyZ3MucmVjb3JkIC0gTG9jYWwgbXV0YXRpb24tbG9nIHJlY29yZC5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgU3luY0pzb25WYWx1ZT59IGFyZ3MucmVzdWx0IC0gU2VydmVyIHJlcGxheSByZXN1bHQgcGF5bG9hZC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSAtIFVwZGF0ZWQgbG9jYWwgcmVjb3JkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlTeW5jUmVwbGF5UmVzdWx0VG9Mb2NhbE11dGF0aW9uTG9nKHttdXRhdGlvbkxvZywgcmVjb3JkLCByZXN1bHR9KSB7XG4gIHJldHVybiBhd2FpdCBtdXRhdGlvbkxvZy51cGRhdGVTdGF0dXMoe1xuICAgIGlkOiByZWNvcmQuaWQsXG4gICAgc3RhdHVzOiByZXBsYXlSZXN1bHRMb2NhbFN0YXR1cyhyZXN1bHQpLFxuICAgIHN5bmNSZXN1bHQ6IHJlc3VsdFxuICB9KVxufVxuXG4vKipcbiAqIE1hcHMgYSBzZXJ2ZXIgcmVwbGF5IHJlc3VsdCB0byBhIGxvY2FsIG11dGF0aW9uLWxvZyBzdGF0dXMuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFN5bmNKc29uVmFsdWU+fSByZXN1bHQgLSBSZXBsYXkgcmVzdWx0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25TdGF0dXN9IC0gTG9jYWwgbXV0YXRpb24tbG9nIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxheVJlc3VsdExvY2FsU3RhdHVzKHJlc3VsdCkge1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJjb25mbGljdFwiKSByZXR1cm4gXCJjb25mbGljdFwiXG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImVycm9yXCIgfHwgcmVzdWx0LnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSByZXR1cm4gXCJyZWplY3RlZFwiXG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiAmJiByZXBsYXlSZXN1bHRIYXNGYWlsZWRBcHBsaWNhdGlvbihyZXN1bHQpKSByZXR1cm4gXCJyZWplY3RlZFwiXG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiB8fCByZXN1bHQuc3RhdHVzID09PSBcImFwcGxpZWRcIiB8fCByZXN1bHQuc3RhdHVzID09PSBcImR1cGxpY2F0ZVwiKSByZXR1cm4gXCJzeW5jZWRcIlxuXG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzeW5jIHJlcGxheSByZXN1bHQgc3RhdHVzICcke1N0cmluZyhyZXN1bHQuc3RhdHVzKX0nYClcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBvdGhlcndpc2Ugc3VjY2Vzc2Z1bCByZXBsYXkgcmVzdWx0IGNvbnRhaW5zIGEgZmFpbGVkXG4gKiBmcm9udGVuZC1tb2RlbCBjb21tYW5kIG9yIGNoYW5nZS1mZWVkIHdyaXRlLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBTeW5jSnNvblZhbHVlPn0gcmVzdWx0IC0gUmVwbGF5IHJlc3VsdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIGxvY2FsIG11dGF0aW9uIG11c3Qgc3RheSB1bnN5bmNlZC5cbiAqL1xuZnVuY3Rpb24gcmVwbGF5UmVzdWx0SGFzRmFpbGVkQXBwbGljYXRpb24ocmVzdWx0KSB7XG4gIGlmIChyZXN1bHQuc2VydmVyU2VxdWVuY2UgPT09IG51bGwgfHwgcmVzdWx0LnNlcnZlckNoYW5nZUZlZWRTdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIHRydWVcbiAgaWYgKCFyZXN1bHQucmVzcG9uc2UgfHwgdHlwZW9mIHJlc3VsdC5yZXNwb25zZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHJlc3VsdC5yZXNwb25zZSkpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFN5bmNKc29uVmFsdWU+fSAqLyAocmVzdWx0LnJlc3BvbnNlKS5zdGF0dXMgPT09IFwiZXJyb3JcIlxufVxuXG4vKipcbiAqIFJ1bnMgYSBmaWVsZC1sZXZlbCB0aHJlZS13YXkgbWVyZ2UuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7U3luY0NvbmZsaWN0UmVjb3JkIHwgbnVsbH0gYXJncy5iYXNlUmVjb3JkIC0gQmFzZSByZWNvcmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gYXJncy5tdXRhdGlvbiAtIE11dGF0aW9uLlxuICogQHBhcmFtIHtTeW5jQ29uZmxpY3RSZWNvcmQgfCBudWxsfSBhcmdzLnNlcnZlclJlY29yZCAtIFNlcnZlciByZWNvcmQuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zdHJhdGVneSAtIFN0cmF0ZWd5LlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudmVyc2lvbkF0dHJpYnV0ZSAtIFZlcnNpb24gYXR0cmlidXRlLlxuICogQHJldHVybnMge1N5bmNDb25mbGljdFJlc3VsdH0gLSBDb25mbGljdCBkZWNpc2lvbi5cbiAqL1xuZnVuY3Rpb24gZmllbGRUaHJlZVdheVJlc3VsdCh7YmFzZVJlY29yZCwgbXV0YXRpb24sIHNlcnZlclJlY29yZCwgc3RyYXRlZ3ksIHZlcnNpb25BdHRyaWJ1dGV9KSB7XG4gIGlmICghYmFzZVJlY29yZCB8fCAhc2VydmVyUmVjb3JkKSByZXR1cm4ge2F0dHJpYnV0ZXM6IG11dGF0aW9uQXR0cmlidXRlc0ZvcihtdXRhdGlvbiksIHN0YXR1czogXCJhcHBsaWVkXCIsIHN0cmF0ZWd5fVxuXG4gIGNvbnN0IG11dGF0aW9uQXR0cmlidXRlcyA9IG11dGF0aW9uQXR0cmlidXRlc0ZvcihtdXRhdGlvbilcbiAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgY29uc3QgYWZmZWN0ZWRGaWVsZHMgPSBbXVxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFN5bmNKc29uVmFsdWU+fSAqL1xuICBjb25zdCBtZXJnZWRBdHRyaWJ1dGVzID0ge31cblxuICBmb3IgKGNvbnN0IFtmaWVsZCwgbG9jYWxWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobXV0YXRpb25BdHRyaWJ1dGVzKSkge1xuICAgIGNvbnN0IGJhc2VWYWx1ZSA9IGJhc2VSZWNvcmQuYXR0cmlidXRlc1tmaWVsZF1cbiAgICBjb25zdCBzZXJ2ZXJWYWx1ZSA9IHNlcnZlclJlY29yZC5hdHRyaWJ1dGVzW2ZpZWxkXVxuXG4gICAgaWYgKGpzb25WYWx1ZXNFcXVhbChzZXJ2ZXJWYWx1ZSwgYmFzZVZhbHVlKSB8fCBqc29uVmFsdWVzRXF1YWwoc2VydmVyVmFsdWUsIGxvY2FsVmFsdWUpKSB7XG4gICAgICBtZXJnZWRBdHRyaWJ1dGVzW2ZpZWxkXSA9IGxvY2FsVmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgYWZmZWN0ZWRGaWVsZHMucHVzaChmaWVsZClcbiAgICB9XG4gIH1cblxuICBpZiAoYWZmZWN0ZWRGaWVsZHMubGVuZ3RoID4gMCkgcmV0dXJuIGNvbmZsaWN0UmVzdWx0KHthZmZlY3RlZEZpZWxkcywgYmFzZVJlY29yZCwgbXV0YXRpb24sIHNlcnZlclJlY29yZCwgc3RyYXRlZ3ksIHZlcnNpb25BdHRyaWJ1dGV9KVxuXG4gIHJldHVybiB7YXR0cmlidXRlczogbWVyZ2VkQXR0cmlidXRlcywgc3RhdHVzOiBcImFwcGxpZWRcIiwgc3RyYXRlZ3l9XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgY3VycmVudCBzZXJ2ZXIgc3RhdGUgY29uZmxpY3RzIHdpdGggYSBtdXRhdGlvbiBiYXNlIHZlcnNpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSBhcmdzLm11dGF0aW9uIC0gTXV0YXRpb24uXG4gKiBAcGFyYW0ge1N5bmNDb25mbGljdFJlY29yZCB8IG51bGx9IGFyZ3Muc2VydmVyUmVjb3JkIC0gU2VydmVyIHJlY29yZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnZlcnNpb25BdHRyaWJ1dGUgLSBWZXJzaW9uIGF0dHJpYnV0ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdmVyc2lvbnMgY29uZmxpY3QuXG4gKi9cbmZ1bmN0aW9uIGhhc1ZlcnNpb25Db25mbGljdCh7bXV0YXRpb24sIHNlcnZlclJlY29yZCwgdmVyc2lvbkF0dHJpYnV0ZX0pIHtcbiAgaWYgKCFzZXJ2ZXJSZWNvcmQpIHJldHVybiBmYWxzZVxuICBpZiAobXV0YXRpb24uYmFzZVZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCBtdXRhdGlvbi5iYXNlVmVyc2lvbiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qgc2VydmVyVmVyc2lvbiA9IHNlcnZlclJlY29yZC52ZXJzaW9uID8/IHNlcnZlclJlY29yZC5hdHRyaWJ1dGVzW3ZlcnNpb25BdHRyaWJ1dGVdID8/IG51bGxcblxuICByZXR1cm4gIWpzb25WYWx1ZXNFcXVhbChzZXJ2ZXJWZXJzaW9uLCBtdXRhdGlvbi5iYXNlVmVyc2lvbilcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBzdHJ1Y3R1cmVkIGNvbmZsaWN0IHJlc3VsdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW2FyZ3MuYWZmZWN0ZWRGaWVsZHNdIC0gRXhwbGljaXQgYWZmZWN0ZWQgZmllbGRzLlxuICogQHBhcmFtIHtTeW5jQ29uZmxpY3RSZWNvcmQgfCBudWxsfSBhcmdzLmJhc2VSZWNvcmQgLSBCYXNlIHJlY29yZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSBhcmdzLm11dGF0aW9uIC0gTXV0YXRpb24uXG4gKiBAcGFyYW0ge1N5bmNDb25mbGljdFJlY29yZCB8IG51bGx9IGFyZ3Muc2VydmVyUmVjb3JkIC0gU2VydmVyIHJlY29yZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnN0cmF0ZWd5IC0gU3RyYXRlZ3kuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy52ZXJzaW9uQXR0cmlidXRlIC0gVmVyc2lvbiBhdHRyaWJ1dGUuXG4gKiBAcmV0dXJucyB7U3luY0NvbmZsaWN0UmVzdWx0fSAtIENvbmZsaWN0IHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gY29uZmxpY3RSZXN1bHQoe2FmZmVjdGVkRmllbGRzLCBiYXNlUmVjb3JkLCBtdXRhdGlvbiwgc2VydmVyUmVjb3JkLCBzdHJhdGVneSwgdmVyc2lvbkF0dHJpYnV0ZX0pIHtcbiAgY29uc3QgbXV0YXRpb25BdHRyaWJ1dGVzID0gbXV0YXRpb25BdHRyaWJ1dGVzRm9yKG11dGF0aW9uKVxuXG4gIHJldHVybiB7XG4gICAgY29uZmxpY3Q6IHtcbiAgICAgIGFmZmVjdGVkRmllbGRzOiBhZmZlY3RlZEZpZWxkcyB8fCBPYmplY3Qua2V5cyhtdXRhdGlvbkF0dHJpYnV0ZXMpLFxuICAgICAgYmFzZVJlY29yZDogYmFzZVJlY29yZCA/IGJhc2VSZWNvcmQuYXR0cmlidXRlcyA6IG51bGwsXG4gICAgICBiYXNlVmVyc2lvbjogLyoqIEB0eXBlIHtTeW5jSnNvblZhbHVlfSAqLyAobXV0YXRpb24uYmFzZVZlcnNpb24gPz8gbnVsbCksXG4gICAgICBsb2NhbE11dGF0aW9uOiB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IG11dGF0aW9uQXR0cmlidXRlcyxcbiAgICAgICAgY2xpZW50TXV0YXRpb25JZDogbXV0YXRpb24uY2xpZW50TXV0YXRpb25JZCxcbiAgICAgICAgbW9kZWw6IG11dGF0aW9uLm1vZGVsLFxuICAgICAgICBvcGVyYXRpb246IG11dGF0aW9uLm9wZXJhdGlvbixcbiAgICAgICAgcGF5bG9hZDogLyoqIEB0eXBlIHtTeW5jSnNvblZhbHVlfSAqLyAobXV0YXRpb24ucGF5bG9hZCB8fCBudWxsKVxuICAgICAgfSxcbiAgICAgIHNlcnZlck1vZGVsOiBzZXJ2ZXJSZWNvcmQgPyBzZXJ2ZXJSZWNvcmQuYXR0cmlidXRlcyA6IG51bGwsXG4gICAgICBzZXJ2ZXJWZXJzaW9uOiBzZXJ2ZXJSZWNvcmQgPyAvKiogQHR5cGUge1N5bmNKc29uVmFsdWV9ICovIChzZXJ2ZXJSZWNvcmQudmVyc2lvbiA/PyBzZXJ2ZXJSZWNvcmQuYXR0cmlidXRlc1t2ZXJzaW9uQXR0cmlidXRlXSA/PyBudWxsKSA6IG51bGwsXG4gICAgICBzdWdnZXN0ZWRSZXNvbHV0aW9uOiBzdHJhdGVneSA9PT0gXCJzZXJ2ZXJXaW5zXCIgPyBcImtlZXBfc2VydmVyXCIgOiBcIm1hbnVhbFwiLFxuICAgICAgdmVyc2lvbkF0dHJpYnV0ZVxuICAgIH0sXG4gICAgc3RhdHVzOiBcImNvbmZsaWN0XCIsXG4gICAgc3RyYXRlZ3lcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBjdXN0b20gcmVzb3VyY2UgY29uZmxpY3QgcmVzdWx0LlxuICogQHBhcmFtIHt1bmtub3dufSByZXN1bHQgLSBSYXcgcmVzdWx0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmF0ZWd5IC0gUmVxdWVzdGVkIHN0cmF0ZWd5LlxuICogQHJldHVybnMge1N5bmNDb25mbGljdFJlc3VsdH0gLSBOb3JtYWxpemVkIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQ29uZmxpY3RSZXN1bHQocmVzdWx0LCBzdHJhdGVneSkge1xuICBpZiAoIXJlc3VsdCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocmVzdWx0KSkgdGhyb3cgbmV3IEVycm9yKFwiU3luYyBjb25mbGljdCBoYW5kbGVyIG11c3QgcmV0dXJuIGFuIG9iamVjdFwiKVxuICBjb25zdCByZXN1bHRSZWNvcmQgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAocmVzdWx0KVxuICBpZiAoIVtcImFwcGxpZWRcIiwgXCJjb25mbGljdFwiLCBcInJlamVjdGVkXCJdLmluY2x1ZGVzKFN0cmluZyhyZXN1bHRSZWNvcmQuc3RhdHVzKSkpIHRocm93IG5ldyBFcnJvcihcIlN5bmMgY29uZmxpY3QgaGFuZGxlciByZXR1cm5lZCBhbiB1bmtub3duIHN0YXR1c1wiKVxuXG4gIHJldHVybiAvKiogQHR5cGUge1N5bmNDb25mbGljdFJlc3VsdH0gKi8gKHtzdHJhdGVneSwgLi4ucmVzdWx0UmVjb3JkfSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIG11dGF0aW9uIGF0dHJpYnV0ZXMgYXMgYSBKU09OIG9iamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSBtdXRhdGlvbiAtIE11dGF0aW9uLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIFN5bmNKc29uVmFsdWU+fSAtIEF0dHJpYnV0ZXMuXG4gKi9cbmZ1bmN0aW9uIG11dGF0aW9uQXR0cmlidXRlc0ZvcihtdXRhdGlvbikge1xuICBpZiAoIW11dGF0aW9uLmF0dHJpYnV0ZXMgfHwgdHlwZW9mIG11dGF0aW9uLmF0dHJpYnV0ZXMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShtdXRhdGlvbi5hdHRyaWJ1dGVzKSkgcmV0dXJuIHt9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgU3luY0pzb25WYWx1ZT59ICovIChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG11dGF0aW9uLmF0dHJpYnV0ZXMpKSlcbn1cblxuLyoqXG4gKiBDb21wYXJlcyBKU09OIHZhbHVlcyBieSBzdGFibGUgc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gbGVmdCAtIExlZnQgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHJpZ2h0IC0gUmlnaHQgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHZhbHVlcyBtYXRjaC5cbiAqL1xuZnVuY3Rpb24ganNvblZhbHVlc0VxdWFsKGxlZnQsIHJpZ2h0KSB7XG4gIHJldHVybiBzdGFibGVKc29uU3RyaW5naWZ5KGxlZnQpID09PSBzdGFibGVKc29uU3RyaW5naWZ5KHJpZ2h0KVxufVxuXG4vKipcbiAqIFN0YWJsZSBKU09OIHN0cmluZ2lmeSBoZWxwZXIuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gVmFsdWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFN0YWJsZSBKU09OLlxuICovXG5mdW5jdGlvbiBzdGFibGVKc29uU3RyaW5naWZ5KHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGBbJHt2YWx1ZS5tYXAoKGVudHJ5KSA9PiBzdGFibGVKc29uU3RyaW5naWZ5KGVudHJ5KSkuam9pbihcIixcIil9XWBcbiAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBgeyR7T2JqZWN0LmtleXModmFsdWUpLnNvcnQoKS5tYXAoKGtleSkgPT4gYCR7SlNPTi5zdHJpbmdpZnkoa2V5KX06JHtzdGFibGVKc29uU3RyaW5naWZ5KC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlba2V5XSl9YCkuam9pbihcIixcIil9fWBcbiAgfVxuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbn1cbiJdfQ==
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmxpY3Qtc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9jb25mbGljdC1zdHJhdGVneS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNIOzs7O0dBSUc7QUFDSDs7Ozs7O0dBTUc7QUFDSCxZQUFZO0FBRVosTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQTtBQUV6SDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxFQUFDLFVBQVUsR0FBRyxJQUFJLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFLFFBQVEsR0FBRyxtQkFBbUIsRUFBRSxnQkFBZ0IsR0FBRyxXQUFXLEVBQUM7SUFDekssSUFBSSxhQUFhO1FBQUUsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDbEosSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxRQUFRLEdBQUcsQ0FBQyxDQUFBO0lBRXZHLE1BQU0sa0JBQWtCLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFMUQsSUFBSSxRQUFRLEtBQUssWUFBWSxJQUFJLFFBQVEsS0FBSyxnQkFBZ0I7UUFBRSxPQUFPLEVBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFDLENBQUE7SUFDcEksSUFBSSxRQUFRLEtBQUssZUFBZTtRQUFFLE9BQU8sbUJB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QTtJQUVwSCxPQUFPLDRDQUE0QyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDdkcsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUs7SUFDbEMsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNqRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsbUJBQW1CLENBQUMsS0FBSztJQUNoQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUE7SUFDbEcsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdkMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksbUJBQW1CLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtJQUN0SyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB0eXBlZGVmIHtudWxsIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVua25vd25bXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+fSBTeW5jSnNvblZhbHVlXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NvbmZsaWN0UmVjb3JkXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFN5bmNKc29uVmFsdWU+fSBhdHRyaWJ1dGVzIC0gUmVjb3JkIGF0dHJpYnV0ZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsfSBbdmVyc2lvbl0gLSBSZWNvcmQgdmVyc2lvbiB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jQ29uZmxpY3RSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgU3luY0pzb25WYWx1ZT59IFthdHRyaWJ1dGVzXSAtIEF0dHJpYnV0ZXMgdG8gYXBwbHkgd2hlbiByZXBsYXkgbWF5IGNvbnRpbnVlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBTeW5jSnNvblZhbHVlPn0gW2NvbmZsaWN0XSAtIFN0cnVjdHVyZWQgY29uZmxpY3QgcGF5bG9hZCBmb3IgdGhlIGNsaWVudC9sb2NhbCBsb2cuXG4gKiBAcHJvcGVydHkge1wiYXBwbGllZFwiIHwgXCJjb25mbGljdFwiIHwgXCJyZWplY3RlZFwifSBzdGF0dXMgLSBDb25mbGljdCBkZWNpc2lvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdHJhdGVneSAtIFN0cmF0ZWd5IHRoYXQgcHJvZHVjZWQgdGhlIGRlY2lzaW9uLlxuICovXG4vLyBAdHMtY2hlY2tcblxuY29uc3QgQ09ORkxJQ1RfU1RSQVRFR0lFUyA9IG5ldyBTZXQoW1wib3B0aW1pc3RpY1ZlcnNpb25cIiwgXCJzZXJ2ZXJXaW5zXCIsIFwibGFzdFdyaXRlcldpbnNcIiwgXCJmaWVsZFRocmVlV2F5XCIsIFwiYXBwZW5kT25seVwiXSlcblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSByZXBsYXkgbXV0YXRpb24gYWdhaW5zdCBzZXJ2ZXIvYmFzZSBzdGF0ZSB1c2luZyBhIHN5bmMgY29uZmxpY3Qgc3RyYXRlZ3kuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7U3luY0NvbmZsaWN0UmVjb3JkIHwgbnVsbH0gW2FyZ3MuYmFzZVJlY29yZF0gLSBSZWNvcmQgc3RhdGUgb2JzZXJ2ZWQgd2hlbiB0aGUgbXV0YXRpb24gd2FzIG1hZGUuXG4gKiBAcGFyYW0geyhhcmc6IG9iamVjdCkgPT4gKFN5bmNDb25mbGljdFJlc3VsdCB8IFByb21pc2U8U3luY0NvbmZsaWN0UmVzdWx0Pil9IFthcmdzLmN1c3RvbUhhbmRsZXJdIC0gUmVzb3VyY2Utc3BlY2lmaWMgY29uZmxpY3QgaG9vay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSBhcmdzLm11dGF0aW9uIC0gUmVwbGF5ZWQgbXV0YXRpb24uXG4gKiBAcGFyYW0ge1N5bmNDb25mbGljdFJlY29yZCB8IG51bGx9IFthcmdzLnNlcnZlclJlY29yZF0gLSBDdXJyZW50IGF1dGhvcml0YXRpdmUgc2VydmVyIHJlY29yZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHJhdGVneV0gLSBDb25mbGljdCBzdHJhdGVneS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy52ZXJzaW9uQXR0cmlidXRlXSAtIEF0dHJpYnV0ZSB1c2VkIGZvciBvcHRpbWlzdGljIHZlcnNpb24gY2hlY2tzLlxuICogQHJldHVybnMge1Byb21pc2U8U3luY0NvbmZsaWN0UmVzdWx0Pn0gLSBDb25mbGljdCBkZWNpc2lvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTeW5jQ29uZmxpY3Qoe2Jhc2VSZWNvcmQgPSBudWxsLCBjdXN0b21IYW5kbGVyLCBtdXRhdGlvbiwgc2VydmVyUmVjb3JkID0gbnVsbCwgc3RyYXRlZ3kgPSBcIm9wdGltaXN0aWNWZXJzaW9uXCIsIHZlcnNpb25BdHRyaWJ1dGUgPSBcInVwZGF0ZWRBdFwifSkge1xuICBpZiAoY3VzdG9tSGFuZGxlcikgcmV0dXJuIG5vcm1hbGl6ZUNvbmZsaWN0UmVzdWx0KGF3YWl0IGN1c3RvbUhhbmRsZXIoe2Jhc2VSZWNvcmQsIG11dGF0aW9uLCBzZXJ2ZXJSZWNvcmQsIHN0cmF0ZWd5LCB2ZXJzaW9uQXR0cmlidXRlfSksIHN0cmF0ZWd5KVxuICBpZiAoIUNPTkZMSUNUX1NUUkFURUdJRVMuaGFzKHN0cmF0ZWd5KSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHN5bmMgY29uZmxpY3Qgc3RyYXRlZ3kgJyR7c3RyYXRlZ3l9J2ApXG5cbiAgY29uc3QgbXV0YXRpb25BdHRyaWJ1dGVzID0gbXV0YXRpb25BdHRyaWJ1dGVzRm9yKG11dGF0aW9uKVxuXG4gIGlmIChzdHJhdGVneSA9PT0gXCJhcHBlbmRPbmx5XCIgfHwgc3RyYXRlZ3kgPT09IFwibGFzdFdyaXRlcldpbnNcIikgcmV0dXJuIHthdHRyaWJ1dGVzOiBtdXRhdGlvbkF0dHJpYnV0ZXMsIHN0YXR1czogXCJhcHBsaWVkXCIsIHN0cmF0ZWd5fVxuICBpZiAoc3RyYXRlZ3kgPT09IFwiZmllbGRUaHJlZVdheVwiKSByZXR1cm4gZmllbGRUaHJlZVdheVJlc3VsdCh7YmFzZVJlY29yZCwgbXV0YXRpb24sIHNlcnZlclJlY29yZCwgc3RyYXRlZ3ksIHZlcnNpb25BdHRyaWJ1dGV9KVxuICBpZiAoaGFzVmVyc2lvbkNvbmZsaWN0KHttdXRhdGlvbiwgc2VydmVyUmVjb3JkLCB2ZXJzaW9uQXR0cmlidXRlfSkpIHJldHVybiBjb25mbGljdFJlc3VsdCh7YmFzZVJlY29yZCwgbXV0YXRpb24sIHNlcnZlclJlY29yZCwgc3RyYXRlZ3ksIHZlcnNpb25BdHRyaWJ1dGV9KVxuXG4gIHJldHVybiB7YXR0cmlidXRlczogbXV0YXRpb25BdHRyaWJ1dGVzLCBzdGF0dXM6IFwiYXBwbGllZFwiLCBzdHJhdGVneX1cbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgc2VydmVyIHJlcGxheSByZXN1bHQgdG8gYSBsb2NhbCBtdXRhdGlvbi1sb2cgcmVjb3JkLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLmRlZmF1bHR9IGFyZ3MubXV0YXRpb25Mb2cgLSBMb2NhbCBtdXRhdGlvbiBsb2cuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IGFyZ3MucmVjb3JkIC0gTG9jYWwgbXV0YXRpb24tbG9nIHJlY29yZC5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgU3luY0pzb25WYWx1ZT59IGFyZ3MucmVzdWx0IC0gU2VydmVyIHJlcGxheSByZXN1bHQgcGF5bG9hZC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSAtIFVwZGF0ZWQgbG9jYWwgcmVjb3JkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlTeW5jUmVwbGF5UmVzdWx0VG9Mb2NhbE11dGF0aW9uTG9nKHttdXRhdGlvbkxvZywgcmVjb3JkLCByZXN1bHR9KSB7XG4gIHJldHVybiBhd2FpdCBtdXRhdGlvbkxvZy51cGRhdGVTdGF0dXMoe1xuICAgIGlkOiByZWNvcmQuaWQsXG4gICAgc3RhdHVzOiByZXBsYXlSZXN1bHRMb2NhbFN0YXR1cyhyZXN1bHQpLFxuICAgIHN5bmNSZXN1bHQ6IHJlc3VsdFxuICB9KVxufVxuXG4vKipcbiAqIE1hcHMgYSBzZXJ2ZXIgcmVwbGF5IHJlc3VsdCB0byBhIGxvY2FsIG11dGF0aW9uLWxvZyBzdGF0dXMuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFN5bmNKc29uVmFsdWU+fSByZXN1bHQgLSBSZXBsYXkgcmVzdWx0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25TdGF0dXN9IC0gTG9jYWwgbXV0YXRpb24tbG9nIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxheVJlc3VsdExvY2FsU3RhdHVzKHJlc3VsdCkge1xuICBpZiAocmVzdWx0LnN5bmNTdGF0ZSA9PT0gXCJjb25mbGljdFwiKSByZXR1cm4gXCJjb25mbGljdFwiXG4gIGlmIChyZXN1bHQuc3luY1N0YXRlID09PSBcImZhaWxlZFwiIHx8IHJlc3VsdC5zeW5jU3RhdGUgPT09IFwicmVqZWN0ZWRcIikgcmV0dXJuIFwicmVqZWN0ZWRcIlxuICBpZiAocmVzdWx0LnN5bmNTdGF0ZSA9PT0gXCJzdWNjZXNzZnVsXCIgfHwgcmVzdWx0LnN5bmNTdGF0ZSA9PT0gXCJkdXBsaWNhdGVcIikgcmV0dXJuIFwic3luY2VkXCJcbiAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiY29uZmxpY3RcIikgcmV0dXJuIFwiY29uZmxpY3RcIlxuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJlcnJvclwiIHx8IHJlc3VsdC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIikgcmV0dXJuIFwicmVqZWN0ZWRcIlxuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgJiYgcmVwbGF5UmVzdWx0SGFzRmFpbGVkQXBwbGljYXRpb24ocmVzdWx0KSkgcmV0dXJuIFwicmVqZWN0ZWRcIlxuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgfHwgcmVzdWx0LnN0YXR1cyA9PT0gXCJhcHBsaWVkXCIgfHwgcmVzdWx0LnN0YXR1cyA9PT0gXCJkdXBsaWNhdGVcIikgcmV0dXJuIFwic3luY2VkXCJcblxuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3luYyByZXBsYXkgcmVzdWx0IHN0YXR1cyAnJHtTdHJpbmcocmVzdWx0LnN0YXR1cyl9J2ApXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gb3RoZXJ3aXNlIHN1Y2Nlc3NmdWwgcmVwbGF5IHJlc3VsdCBjb250YWlucyBhIGZhaWxlZFxuICogZnJvbnRlbmQtbW9kZWwgY29tbWFuZCBvciBjaGFuZ2UtZmVlZCB3cml0ZS5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgU3luY0pzb25WYWx1ZT59IHJlc3VsdCAtIFJlcGxheSByZXN1bHQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBsb2NhbCBtdXRhdGlvbiBtdXN0IHN0YXkgdW5zeW5jZWQuXG4gKi9cbmZ1bmN0aW9uIHJlcGxheVJlc3VsdEhhc0ZhaWxlZEFwcGxpY2F0aW9uKHJlc3VsdCkge1xuICBpZiAocmVzdWx0LnNlcnZlclNlcXVlbmNlID09PSBudWxsIHx8IHJlc3VsdC5zZXJ2ZXJDaGFuZ2VGZWVkU3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiB0cnVlXG4gIGlmICghcmVzdWx0LnJlc3BvbnNlIHx8IHR5cGVvZiByZXN1bHQucmVzcG9uc2UgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShyZXN1bHQucmVzcG9uc2UpKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBTeW5jSnNvblZhbHVlPn0gKi8gKHJlc3VsdC5yZXNwb25zZSkuc3RhdHVzID09PSBcImVycm9yXCJcbn1cblxuLyoqXG4gKiBSdW5zIGEgZmllbGQtbGV2ZWwgdGhyZWUtd2F5IG1lcmdlLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge1N5bmNDb25mbGljdFJlY29yZCB8IG51bGx9IGFyZ3MuYmFzZVJlY29yZCAtIEJhc2UgcmVjb3JkLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259IGFyZ3MubXV0YXRpb24gLSBNdXRhdGlvbi5cbiAqIEBwYXJhbSB7U3luY0NvbmZsaWN0UmVjb3JkIHwgbnVsbH0gYXJncy5zZXJ2ZXJSZWNvcmQgLSBTZXJ2ZXIgcmVjb3JkLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Muc3RyYXRlZ3kgLSBTdHJhdGVneS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnZlcnNpb25BdHRyaWJ1dGUgLSBWZXJzaW9uIGF0dHJpYnV0ZS5cbiAqIEByZXR1cm5zIHtTeW5jQ29uZmxpY3RSZXN1bHR9IC0gQ29uZmxpY3QgZGVjaXNpb24uXG4gKi9cbmZ1bmN0aW9uIGZpZWxkVGhyZWVXYXlSZXN1bHQoe2Jhc2VSZWNvcmQsIG11dGF0aW9uLCBzZXJ2ZXJSZWNvcmQsIHN0cmF0ZWd5LCB2ZXJzaW9uQXR0cmlidXRlfSkge1xuICBpZiAoIWJhc2VSZWNvcmQgfHwgIXNlcnZlclJlY29yZCkgcmV0dXJuIHthdHRyaWJ1dGVzOiBtdXRhdGlvbkF0dHJpYnV0ZXNGb3IobXV0YXRpb24pLCBzdGF0dXM6IFwiYXBwbGllZFwiLCBzdHJhdGVneX1cblxuICBjb25zdCBtdXRhdGlvbkF0dHJpYnV0ZXMgPSBtdXRhdGlvbkF0dHJpYnV0ZXNGb3IobXV0YXRpb24pXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIGNvbnN0IGFmZmVjdGVkRmllbGRzID0gW11cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBTeW5jSnNvblZhbHVlPn0gKi9cbiAgY29uc3QgbWVyZ2VkQXR0cmlidXRlcyA9IHt9XG5cbiAgZm9yIChjb25zdCBbZmllbGQsIGxvY2FsVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG11dGF0aW9uQXR0cmlidXRlcykpIHtcbiAgICBjb25zdCBiYXNlVmFsdWUgPSBiYXNlUmVjb3JkLmF0dHJpYnV0ZXNbZmllbGRdXG4gICAgY29uc3Qgc2VydmVyVmFsdWUgPSBzZXJ2ZXJSZWNvcmQuYXR0cmlidXRlc1tmaWVsZF1cblxuICAgIGlmIChqc29uVmFsdWVzRXF1YWwoc2VydmVyVmFsdWUsIGJhc2VWYWx1ZSkgfHwganNvblZhbHVlc0VxdWFsKHNlcnZlclZhbHVlLCBsb2NhbFZhbHVlKSkge1xuICAgICAgbWVyZ2VkQXR0cmlidXRlc1tmaWVsZF0gPSBsb2NhbFZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGFmZmVjdGVkRmllbGRzLnB1c2goZmllbGQpXG4gICAgfVxuICB9XG5cbiAgaWYgKGFmZmVjdGVkRmllbGRzLmxlbmd0aCA+IDApIHJldHVybiBjb25mbGljdFJlc3VsdCh7YWZmZWN0ZWRGaWVsZHMsIGJhc2VSZWNvcmQsIG11dGF0aW9uLCBzZXJ2ZXJSZWNvcmQsIHN0cmF0ZWd5LCB2ZXJzaW9uQXR0cmlidXRlfSlcblxuICByZXR1cm4ge2F0dHJpYnV0ZXM6IG1lcmdlZEF0dHJpYnV0ZXMsIHN0YXR1czogXCJhcHBsaWVkXCIsIHN0cmF0ZWd5fVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGN1cnJlbnQgc2VydmVyIHN0YXRlIGNvbmZsaWN0cyB3aXRoIGEgbXV0YXRpb24gYmFzZSB2ZXJzaW9uLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gYXJncy5tdXRhdGlvbiAtIE11dGF0aW9uLlxuICogQHBhcmFtIHtTeW5jQ29uZmxpY3RSZWNvcmQgfCBudWxsfSBhcmdzLnNlcnZlclJlY29yZCAtIFNlcnZlciByZWNvcmQuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy52ZXJzaW9uQXR0cmlidXRlIC0gVmVyc2lvbiBhdHRyaWJ1dGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHZlcnNpb25zIGNvbmZsaWN0LlxuICovXG5mdW5jdGlvbiBoYXNWZXJzaW9uQ29uZmxpY3Qoe211dGF0aW9uLCBzZXJ2ZXJSZWNvcmQsIHZlcnNpb25BdHRyaWJ1dGV9KSB7XG4gIGlmICghc2VydmVyUmVjb3JkKSByZXR1cm4gZmFsc2VcbiAgaWYgKG11dGF0aW9uLmJhc2VWZXJzaW9uID09PSB1bmRlZmluZWQgfHwgbXV0YXRpb24uYmFzZVZlcnNpb24gPT09IG51bGwpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHNlcnZlclZlcnNpb24gPSBzZXJ2ZXJSZWNvcmQudmVyc2lvbiA/PyBzZXJ2ZXJSZWNvcmQuYXR0cmlidXRlc1t2ZXJzaW9uQXR0cmlidXRlXSA/PyBudWxsXG5cbiAgcmV0dXJuICFqc29uVmFsdWVzRXF1YWwoc2VydmVyVmVyc2lvbiwgbXV0YXRpb24uYmFzZVZlcnNpb24pXG59XG5cbi8qKlxuICogQnVpbGRzIGEgc3RydWN0dXJlZCBjb25mbGljdCByZXN1bHQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzLmFmZmVjdGVkRmllbGRzXSAtIEV4cGxpY2l0IGFmZmVjdGVkIGZpZWxkcy5cbiAqIEBwYXJhbSB7U3luY0NvbmZsaWN0UmVjb3JkIHwgbnVsbH0gYXJncy5iYXNlUmVjb3JkIC0gQmFzZSByZWNvcmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gYXJncy5tdXRhdGlvbiAtIE11dGF0aW9uLlxuICogQHBhcmFtIHtTeW5jQ29uZmxpY3RSZWNvcmQgfCBudWxsfSBhcmdzLnNlcnZlclJlY29yZCAtIFNlcnZlciByZWNvcmQuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zdHJhdGVneSAtIFN0cmF0ZWd5LlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudmVyc2lvbkF0dHJpYnV0ZSAtIFZlcnNpb24gYXR0cmlidXRlLlxuICogQHJldHVybnMge1N5bmNDb25mbGljdFJlc3VsdH0gLSBDb25mbGljdCByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGNvbmZsaWN0UmVzdWx0KHthZmZlY3RlZEZpZWxkcywgYmFzZVJlY29yZCwgbXV0YXRpb24sIHNlcnZlclJlY29yZCwgc3RyYXRlZ3ksIHZlcnNpb25BdHRyaWJ1dGV9KSB7XG4gIGNvbnN0IG11dGF0aW9uQXR0cmlidXRlcyA9IG11dGF0aW9uQXR0cmlidXRlc0ZvcihtdXRhdGlvbilcblxuICByZXR1cm4ge1xuICAgIGNvbmZsaWN0OiB7XG4gICAgICBhZmZlY3RlZEZpZWxkczogYWZmZWN0ZWRGaWVsZHMgfHwgT2JqZWN0LmtleXMobXV0YXRpb25BdHRyaWJ1dGVzKSxcbiAgICAgIGJhc2VSZWNvcmQ6IGJhc2VSZWNvcmQgPyBiYXNlUmVjb3JkLmF0dHJpYnV0ZXMgOiBudWxsLFxuICAgICAgYmFzZVZlcnNpb246IC8qKiBAdHlwZSB7U3luY0pzb25WYWx1ZX0gKi8gKG11dGF0aW9uLmJhc2VWZXJzaW9uID8/IG51bGwpLFxuICAgICAgbG9jYWxNdXRhdGlvbjoge1xuICAgICAgICBhdHRyaWJ1dGVzOiBtdXRhdGlvbkF0dHJpYnV0ZXMsXG4gICAgICAgIGNsaWVudE11dGF0aW9uSWQ6IG11dGF0aW9uLmNsaWVudE11dGF0aW9uSWQsXG4gICAgICAgIG1vZGVsOiBtdXRhdGlvbi5tb2RlbCxcbiAgICAgICAgb3BlcmF0aW9uOiBtdXRhdGlvbi5vcGVyYXRpb24sXG4gICAgICAgIHBheWxvYWQ6IC8qKiBAdHlwZSB7U3luY0pzb25WYWx1ZX0gKi8gKG11dGF0aW9uLnBheWxvYWQgfHwgbnVsbClcbiAgICAgIH0sXG4gICAgICBzZXJ2ZXJNb2RlbDogc2VydmVyUmVjb3JkID8gc2VydmVyUmVjb3JkLmF0dHJpYnV0ZXMgOiBudWxsLFxuICAgICAgc2VydmVyVmVyc2lvbjogc2VydmVyUmVjb3JkID8gLyoqIEB0eXBlIHtTeW5jSnNvblZhbHVlfSAqLyAoc2VydmVyUmVjb3JkLnZlcnNpb24gPz8gc2VydmVyUmVjb3JkLmF0dHJpYnV0ZXNbdmVyc2lvbkF0dHJpYnV0ZV0gPz8gbnVsbCkgOiBudWxsLFxuICAgICAgc3VnZ2VzdGVkUmVzb2x1dGlvbjogc3RyYXRlZ3kgPT09IFwic2VydmVyV2luc1wiID8gXCJrZWVwX3NlcnZlclwiIDogXCJtYW51YWxcIixcbiAgICAgIHZlcnNpb25BdHRyaWJ1dGVcbiAgICB9LFxuICAgIHN0YXR1czogXCJjb25mbGljdFwiLFxuICAgIHN0cmF0ZWd5XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgY3VzdG9tIHJlc291cmNlIGNvbmZsaWN0IHJlc3VsdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVzdWx0IC0gUmF3IHJlc3VsdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJhdGVneSAtIFJlcXVlc3RlZCBzdHJhdGVneS5cbiAqIEByZXR1cm5zIHtTeW5jQ29uZmxpY3RSZXN1bHR9IC0gTm9ybWFsaXplZCByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbmZsaWN0UmVzdWx0KHJlc3VsdCwgc3RyYXRlZ3kpIHtcbiAgaWYgKCFyZXN1bHQgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHJlc3VsdCkpIHRocm93IG5ldyBFcnJvcihcIlN5bmMgY29uZmxpY3QgaGFuZGxlciBtdXN0IHJldHVybiBhbiBvYmplY3RcIilcbiAgY29uc3QgcmVzdWx0UmVjb3JkID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHJlc3VsdClcbiAgaWYgKCFbXCJhcHBsaWVkXCIsIFwiY29uZmxpY3RcIiwgXCJyZWplY3RlZFwiXS5pbmNsdWRlcyhTdHJpbmcocmVzdWx0UmVjb3JkLnN0YXR1cykpKSB0aHJvdyBuZXcgRXJyb3IoXCJTeW5jIGNvbmZsaWN0IGhhbmRsZXIgcmV0dXJuZWQgYW4gdW5rbm93biBzdGF0dXNcIilcblxuICByZXR1cm4gLyoqIEB0eXBlIHtTeW5jQ29uZmxpY3RSZXN1bHR9ICovICh7c3RyYXRlZ3ksIC4uLnJlc3VsdFJlY29yZH0pXG59XG5cbi8qKlxuICogUmV0dXJucyBtdXRhdGlvbiBhdHRyaWJ1dGVzIGFzIGEgSlNPTiBvYmplY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gbXV0YXRpb24gLSBNdXRhdGlvbi5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBTeW5jSnNvblZhbHVlPn0gLSBBdHRyaWJ1dGVzLlxuICovXG5mdW5jdGlvbiBtdXRhdGlvbkF0dHJpYnV0ZXNGb3IobXV0YXRpb24pIHtcbiAgaWYgKCFtdXRhdGlvbi5hdHRyaWJ1dGVzIHx8IHR5cGVvZiBtdXRhdGlvbi5hdHRyaWJ1dGVzICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobXV0YXRpb24uYXR0cmlidXRlcykpIHJldHVybiB7fVxuXG4gIHJldHVybiAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFN5bmNKc29uVmFsdWU+fSAqLyAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtdXRhdGlvbi5hdHRyaWJ1dGVzKSkpXG59XG5cbi8qKlxuICogQ29tcGFyZXMgSlNPTiB2YWx1ZXMgYnkgc3RhYmxlIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0ge3Vua25vd259IGxlZnQgLSBMZWZ0IHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSByaWdodCAtIFJpZ2h0IHZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB2YWx1ZXMgbWF0Y2guXG4gKi9cbmZ1bmN0aW9uIGpzb25WYWx1ZXNFcXVhbChsZWZ0LCByaWdodCkge1xuICByZXR1cm4gc3RhYmxlSnNvblN0cmluZ2lmeShsZWZ0KSA9PT0gc3RhYmxlSnNvblN0cmluZ2lmeShyaWdodClcbn1cblxuLyoqXG4gKiBTdGFibGUgSlNPTiBzdHJpbmdpZnkgaGVscGVyLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ30gLSBTdGFibGUgSlNPTi5cbiAqL1xuZnVuY3Rpb24gc3RhYmxlSnNvblN0cmluZ2lmeSh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBgWyR7dmFsdWUubWFwKChlbnRyeSkgPT4gc3RhYmxlSnNvblN0cmluZ2lmeShlbnRyeSkpLmpvaW4oXCIsXCIpfV1gXG4gIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gYHske09iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCkubWFwKChrZXkpID0+IGAke0pTT04uc3RyaW5naWZ5KGtleSl9OiR7c3RhYmxlSnNvblN0cmluZ2lmeSgvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpW2tleV0pfWApLmpvaW4oXCIsXCIpfX1gXG4gIH1cblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG59XG4iXX0=
@@ -177,6 +177,16 @@ export default class LocalMutationLog {
177
177
  status: LocalMutationStatus;
178
178
  syncResult?: Record<string, import("../configuration-types.js").FrontendModelSyncJsonValue>;
179
179
  }): Promise<LocalMutationLogRecord>;
180
+ /**
181
+ * Replaces the mutation payload of a still-pending record. Used when an
182
+ * acknowledged predecessor supplies the authoritative base for its successor.
183
+ * @param {{id: string, mutation: import("./device-identity.js").SyncMutation}} args - Record and replacement mutation.
184
+ * @returns {Promise<LocalMutationLogRecord>} Updated record.
185
+ */
186
+ updateMutation({ id, mutation }: {
187
+ id: string;
188
+ mutation: import("./device-identity.js").SyncMutation;
189
+ }): Promise<LocalMutationLogRecord>;
180
190
  /**
181
191
  * Prunes terminal records that are no longer needed for replay dependencies.
182
192
  * @param {object} [args] - Compaction options.
@@ -1 +1 @@
1
- {"version":3,"file":"local-mutation-log.d.ts","sourceRoot":"","sources":["../../../src/sync/local-mutation-log.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-mutation-log.d.ts","sourceRoot":"","sources":["../../../src/sync/local-mutation-log.js"],"names":[],"mappings":"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"}
@@ -134,6 +134,26 @@ export default class LocalMutationLog {
134
134
  return cloneRecord(record);
135
135
  });
136
136
  }
137
+ /**
138
+ * Replaces the mutation payload of a still-pending record. Used when an
139
+ * acknowledged predecessor supplies the authoritative base for its successor.
140
+ * @param {{id: string, mutation: import("./device-identity.js").SyncMutation}} args - Record and replacement mutation.
141
+ * @returns {Promise<LocalMutationLogRecord>} Updated record.
142
+ */
143
+ async updateMutation({ id, mutation }) {
144
+ return await withStorageKeyLock(this.storageKey, async () => {
145
+ const rawRecord = await this.storage.record(this.storageKey, id);
146
+ if (!rawRecord)
147
+ throw new Error(`No local mutation log record '${id}'`);
148
+ const record = normalizeRecord(rawRecord);
149
+ if (!PENDING_STATUSES.has(record.status))
150
+ throw new Error(`Cannot update mutation for ${record.status} local mutation '${id}'`);
151
+ record.mutation = normalizeMutation(mutation);
152
+ record.updatedAt = this.currentTimestamp();
153
+ await this.storage.updateRecord(this.storageKey, cloneRecord(record));
154
+ return cloneRecord(record);
155
+ });
156
+ }
137
157
  /**
138
158
  * Prunes terminal records that are no longer needed for replay dependencies.
139
159
  * @param {object} [args] - Compaction options.
@@ -411,4 +431,4 @@ function randomRecordId() {
411
431
  return cryptoProvider.randomUUID();
412
432
  return `local-mutation-${Date.now()}-${Math.random().toString(16).slice(2)}`;
413
433
  }
414
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbXV0YXRpb24tbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvbG9jYWwtbXV0YXRpb24tbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7O0tBR0s7QUFDTDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxZQUFZO0FBRVosT0FBTyxtQkFBbUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFBO0FBQzdELE1BQU0scUJBQXFCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3pELDRDQUE0QztBQUM1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFbkMsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWdCO0lBQ25DOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsV0FBVyxHQUFHLGNBQWMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxHQUFHLG1CQUFtQixFQUFDO1FBQzNHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFN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QUMsS0FBSyxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsS0FBSyxTQUFTLENBQUMsQ0FBQTtJQUUzSCxPQUFPLDZGQUE2RixDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBQ3JJLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxXQUFXLENBQUMsTUFBTTtJQUN6QixPQUFPLHFDQUFxQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNuRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxjQUFjO0lBQ3JCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUE7SUFFeEMsSUFBSSxjQUFjLElBQUksT0FBTyxjQUFjLENBQUMsVUFBVSxLQUFLLFVBQVU7UUFBRSxPQUFPLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUV6RyxPQUFPLGtCQUFrQixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkIHF1ZXJ5IG9wdGlvbnMuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nUmVjb3Jkc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvblN0YXR1c1tdfSBbc3RhdHVzZXNdIC0gT3B0aW9uYWwgc3RhdHVzIGZpbHRlci5cbiAqL1xuLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcm93LW9yaWVudGVkIHN0b3JhZ2UgYWRhcHRlci5cbiAqXG4gKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHN0b3JlIGVhY2ggbXV0YXRpb24gbG9nIHJlY29yZCBhcyBpdHMgb3duIHJvdy9lbnRyeS5cbiAqIE5hdGl2ZSBhcHBzIHNob3VsZCBiYWNrIHRoaXMgd2l0aCBTUUxpdGUgYW5kIGluZGV4ZXMgb24gc3RvcmFnZSBrZXksIHN0YXR1cyxcbiAqIGFuZCBzZXF1ZW5jZS4gQXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgbG9nIGFzIG9uZSBKU09OIGJsb2IuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nU3RvcmFnZVxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCByZWNvcmQ6IExvY2FsTXV0YXRpb25Mb2dSZWNvcmQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSBhcHBlbmRSZWNvcmQgLSBBcHBlbmRzIG9uZSBsb2cgcmVjb3JkLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCBpZHM6IHN0cmluZ1tdKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gZGVsZXRlUmVjb3JkcyAtIERlbGV0ZXMgbG9nIHJlY29yZHMgYnkgaWQuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcpID0+IFByb21pc2U8bnVtYmVyPiB8IG51bWJlcn0gbmV4dFNlcXVlbmNlIC0gUmV0dXJucyB0aGUgbmV4dCBsb2NhbCBzZXF1ZW5jZSBudW1iZXIuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+IFByb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZCB8IG51bGwgfCB1bmRlZmluZWQ+IHwgTG9jYWxNdXRhdGlvbkxvZ1JlY29yZCB8IG51bGwgfCB1bmRlZmluZWR9IHJlY29yZCAtIFJlYWRzIG9uZSBsb2cgcmVjb3JkIGJ5IGlkLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCBvcHRpb25zPzogTG9jYWxNdXRhdGlvbkxvZ1JlY29yZHNPcHRpb25zKSA9PiBQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT4gfCBMb2NhbE11dGF0aW9uTG9nUmVjb3JkW119IHJlY29yZHMgLSBSZWFkcyBsb2cgcmVjb3Jkcy5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgcmVjb3JkOiBMb2NhbE11dGF0aW9uTG9nUmVjb3JkKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gdXBkYXRlUmVjb3JkIC0gUmVwbGFjZXMgb25lIGxvZyByZWNvcmQuXG4gKi9cbi8qKlxuICogTG9jYWwgc3luYyBtdXRhdGlvbiBkZXBlbmRlbmN5IG1ldGFkYXRhLlxuICogQHR5cGVkZWYge29iamVjdH0gTG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGllbnRNdXRhdGlvbklkIC0gQ2xpZW50IG11dGF0aW9uIGlkIHRoaXMgbXV0YXRpb24gZGVwZW5kcyBvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlbCAtIERlcGVuZGVudCBtb2RlbC9yZXNvdXJjZSBuYW1lLlxuICovXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyBzdGF0dXMuXG4gKiBAdHlwZWRlZiB7XCJwZW5kaW5nXCIgfCBcImFwcGxpZWQtbG9jYWxseVwiIHwgXCJwZWVyLWFwcGxpZWRcIiB8IFwiY29uZmxpY3RcIiB8IFwicmVqZWN0ZWRcIiB8IFwic3luY2VkXCJ9IExvY2FsTXV0YXRpb25TdGF0dXNcbiAqICovXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nUmVjb3JkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3JlYXRlZEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSByZWNvcmQgd2FzIGNyZWF0ZWQgbG9jYWxseS5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lbXX0gZGVwZW5kZW5jaWVzIC0gT3RoZXIgbG9jYWwgbXV0YXRpb25zIHRoYXQgbXVzdCByZXBsYXkgZmlyc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBMb2NhbCBsb2cgcmVjb3JkIGlkLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259IG11dGF0aW9uIC0gRGV2aWNlIG11dGF0aW9uIHBheWxvYWQuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlNpZ25lZFN5bmNNdXRhdGlvbn0gW3NpZ25lZE11dGF0aW9uXSAtIE9yaWdpbmFsIHNpZ25lZCBtdXRhdGlvbiBlbnZlbG9wZSwgcmV0YWluZWQgZm9yIHBlZXItZm9yd2FyZGVkIG11dGF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzZXF1ZW5jZSAtIE1vbm90b25pYyBsb2NhbCBzZXF1ZW5jZS5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvblN0YXR1c30gc3RhdHVzIC0gTG9jYWwgcmVwbGF5L2FwcGx5IHN0YXR1cy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFtzeW5jUmVzdWx0XSAtIEJhY2tlbmQgcmVwbGF5L3Jlc3VsdCBtZXRhZGF0YS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cGRhdGVkQXQgLSBJU08gdGltZXN0YW1wIHdoZW4gdGhlIHJlY29yZCB3YXMgbGFzdCBjaGFuZ2VkLlxuICovXG4vLyBAdHMtY2hlY2tcblxuaW1wb3J0IHN0YWJsZUpzb25TdHJpbmdpZnkgZnJvbSBcIi4vc3RhYmxlLWpzb24uanNcIlxuXG5jb25zdCBERUZBVUxUX1NUT1JBR0VfS0VZID0gXCJ2ZWxvY2lvdXMuc3luYy5sb2NhbE11dGF0aW9uTG9nXCJcbmNvbnN0IFBFTkRJTkdfU1RBVFVTX1ZBTFVFUyA9IC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvblN0YXR1c1tdfSAqLyAoW1wicGVuZGluZ1wiLCBcImFwcGxpZWQtbG9jYWxseVwiLCBcInBlZXItYXBwbGllZFwiXSlcbmNvbnN0IFBFTkRJTkdfU1RBVFVTRVMgPSBuZXcgU2V0KFBFTkRJTkdfU1RBVFVTX1ZBTFVFUylcbmNvbnN0IE1VVEFUSU9OX1NUQVRVU0VTID0gbmV3IFNldChbLi4uUEVORElOR19TVEFUVVNFUywgXCJjb25mbGljdFwiLCBcInJlamVjdGVkXCIsIFwic3luY2VkXCJdKVxuY29uc3QgVEVSTUlOQUxfU1RBVFVTRVMgPSBuZXcgU2V0KFtcInJlamVjdGVkXCIsIFwic3luY2VkXCJdKVxuLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBQcm9taXNlPHVua25vd24+Pn0gKi9cbmNvbnN0IFNUT1JBR0VfS0VZX0xPQ0tTID0gbmV3IE1hcCgpXG5cbi8qKiBDbGllbnQtc2lkZSBhcHBlbmQtb25seSBzeW5jIG11dGF0aW9uIGxvZyB3aXRoIHBsdWdnYWJsZSBwZXJzaXN0ZW50IHN0b3JhZ2UuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2NhbE11dGF0aW9uTG9nIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBsb2NhbCBtdXRhdGlvbiBsb2cuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0geygpID0+IHN0cmluZ30gW2FyZ3MuaWRHZW5lcmF0b3JdIC0gUmVjb3JkIGlkIGdlbmVyYXRvci5cbiAgICogQHBhcmFtIHsoKSA9PiBEYXRlfSBbYXJncy5ub3ddIC0gQ2xvY2sgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2V9IGFyZ3Muc3RvcmFnZSAtIFBlcnNpc3RlbnQgc3RvcmFnZSBhZGFwdGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3RvcmFnZUtleV0gLSBTdG9yYWdlIGtleS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtpZEdlbmVyYXRvciA9IHJhbmRvbVJlY29yZElkLCBub3cgPSAoKSA9PiBuZXcgRGF0ZSgpLCBzdG9yYWdlLCBzdG9yYWdlS2V5ID0gREVGQVVMVF9TVE9SQUdFX0tFWX0pIHtcbiAgICBpZiAoIXZhbGlkU3RvcmFnZShzdG9yYWdlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9jYWxNdXRhdGlvbkxvZyByZXF1aXJlcyByb3cgc3RvcmFnZSB3aXRoIGFwcGVuZFJlY29yZC9kZWxldGVSZWNvcmRzL25leHRTZXF1ZW5jZS9yZWNvcmQvcmVjb3Jkcy91cGRhdGVSZWNvcmRcIilcbiAgICB9XG5cbiAgICB0aGlzLmlkR2VuZXJhdG9yID0gaWRHZW5lcmF0b3JcbiAgICB0aGlzLm5vdyA9IG5vd1xuICAgIHRoaXMuc3RvcmFnZSA9IHN0b3JhZ2VcbiAgICB0aGlzLnN0b3JhZ2VLZXkgPSBzdG9yYWdlS2V5XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIHBlbmRpbmcgbXV0YXRpb24gcmVjb3JkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVtdfSBbYXJncy5kZXBlbmRlbmNpZXNdIC0gTXV0YXRpb24gZGVwZW5kZW5jaWVzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gYXJncy5tdXRhdGlvbiAtIE11dGF0aW9uIHBheWxvYWQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU2lnbmVkU3luY011dGF0aW9ufSBbYXJncy5zaWduZWRNdXRhdGlvbl0gLSBPcmlnaW5hbCBzaWduZWQgbXV0YXRpb24gZW52ZWxvcGUsIHJldGFpbmVkIGZvciBwZWVyLWZvcndhcmRlZCBtdXRhdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSAtIENyZWF0ZWQgbG9nIHJlY29yZC5cbiAgICovXG4gIGFzeW5jIGFwcGVuZCh7ZGVwZW5kZW5jaWVzID0gW10sIG11dGF0aW9uLCBzaWduZWRNdXRhdGlvbn0pIHtcbiAgICBpZiAoc2lnbmVkTXV0YXRpb24gIT09IHVuZGVmaW5lZCAmJiBzdGFibGVKc29uU3RyaW5naWZ5KHNpZ25lZE11dGF0aW9uLm11dGF0aW9uKSAhPT0gc3RhYmxlSnNvblN0cmluZ2lmeShtdXRhdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNpZ25lZCBtdXRhdGlvbiBwYXlsb2FkIGRvZXMgbm90IG1hdGNoIHRoZSBtdXRhdGlvblwiKVxuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHtcbiAgICAgICAgY3JlYXRlZEF0OiB0aW1lc3RhbXAsXG4gICAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICAgaWQ6IHRoaXMuaWRHZW5lcmF0b3IoKSxcbiAgICAgICAgbXV0YXRpb24sXG4gICAgICAgIHNlcXVlbmNlOiBhd2FpdCB0aGlzLnN0b3JhZ2UubmV4dFNlcXVlbmNlKHRoaXMuc3RvcmFnZUtleSksXG4gICAgICAgIHNpZ25lZE11dGF0aW9uLFxuICAgICAgICBzdGF0dXM6IFwicGVuZGluZ1wiLFxuICAgICAgICB1cGRhdGVkQXQ6IHRpbWVzdGFtcFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLmFwcGVuZFJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGNsb25lUmVjb3JkKHJlY29yZCkpXG5cbiAgICAgIHJldHVybiBjbG9uZVJlY29yZChyZWNvcmQpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCByZWNvcmRzIG9yZGVyZWQgYnkgbG9jYWwgc2VxdWVuY2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT59IC0gTG9nIHJlY29yZHMuXG4gICAqL1xuICBhc3luYyByZWNvcmRzKCkge1xuICAgIHJldHVybiBub3JtYWxpemVSZWNvcmRMaXN0KGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmRzKHRoaXMuc3RvcmFnZUtleSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyByZWNvcmRzIHRoYXQgc3RpbGwgbmVlZCBsb2NhbC9zZXJ2ZXIgcmVjb25jaWxpYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT59IC0gUGVuZGluZyByZWNvcmRzLlxuICAgKi9cbiAgYXN5bmMgcGVuZGluZ1JlY29yZHMoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVJlY29yZExpc3QoYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZHModGhpcy5zdG9yYWdlS2V5LCB7c3RhdHVzZXM6IFBFTkRJTkdfU1RBVFVTX1ZBTFVFU30pKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSByZWNvcmQgc3RhdHVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuaWQgLSBSZWNvcmQgaWQuXG4gICAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvblN0YXR1c30gYXJncy5zdGF0dXMgLSBOZXcgc3RhdHVzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSBbYXJncy5zeW5jUmVzdWx0XSAtIFJlc3VsdCBtZXRhZGF0YS5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZD59IC0gVXBkYXRlZCByZWNvcmQuXG4gICAqL1xuICBhc3luYyB1cGRhdGVTdGF0dXMoe2lkLCBzdGF0dXMsIHN5bmNSZXN1bHR9KSB7XG4gICAgaWYgKCFNVVRBVElPTl9TVEFUVVNFUy5oYXMoc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxvY2FsIG11dGF0aW9uIHN0YXR1cyAnJHtzdGF0dXN9J2ApXG5cbiAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JhZ2VLZXlMb2NrKHRoaXMuc3RvcmFnZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3UmVjb3JkID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGlkKVxuXG4gICAgICBpZiAoIXJhd1JlY29yZCkgdGhyb3cgbmV3IEVycm9yKGBObyBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkICcke2lkfSdgKVxuXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQocmF3UmVjb3JkKVxuXG4gICAgICByZWNvcmQuc3RhdHVzID0gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzfSAqLyAoc3RhdHVzKVxuICAgICAgaWYgKHN5bmNSZXN1bHQgIT09IHVuZGVmaW5lZCkgcmVjb3JkLnN5bmNSZXN1bHQgPSBjbG9uZUpzb25PYmplY3Qoc3luY1Jlc3VsdCwgXCJzeW5jUmVzdWx0XCIpXG4gICAgICByZWNvcmQudXBkYXRlZEF0ID0gdGhpcy5jdXJyZW50VGltZXN0YW1wKClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS51cGRhdGVSZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBjbG9uZVJlY29yZChyZWNvcmQpKVxuXG4gICAgICByZXR1cm4gY2xvbmVSZWNvcmQocmVjb3JkKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUHJ1bmVzIHRlcm1pbmFsIHJlY29yZHMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3IgcmVwbGF5IGRlcGVuZGVuY2llcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIENvbXBhY3Rpb24gb3B0aW9ucy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1heFRlcm1pbmFsUmVjb3Jkc10gLSBNYXhpbXVtIHRlcm1pbmFsIHJlY29yZHMgdG8gcmV0YWluLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MudGVybWluYWxSZXRlbnRpb25Nc10gLSBNaW5pbXVtIGFnZSBiZWZvcmUgcHJ1bmluZyB0ZXJtaW5hbCByZWNvcmRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7ZGVsZXRlZFJlY29yZElkczogc3RyaW5nW119Pn0gLSBDb21wYWN0aW9uIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNvbXBhY3Qoe21heFRlcm1pbmFsUmVjb3JkcywgdGVybWluYWxSZXRlbnRpb25Nc30gPSB7fSkge1xuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy5yZWNvcmRzKClcbiAgICAgIGNvbnN0IHByb3RlY3RlZENsaWVudE11dGF0aW9uSWRzID0gbmV3IFNldChcbiAgICAgICAgcmVjb3Jkc1xuICAgICAgICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gUEVORElOR19TVEFUVVNFUy5oYXMocmVjb3JkLnN0YXR1cykgfHwgcmVjb3JkLnN0YXR1cyA9PT0gXCJjb25mbGljdFwiKVxuICAgICAgICAgIC5mbGF0TWFwKChyZWNvcmQpID0+IHJlY29yZC5kZXBlbmRlbmNpZXMubWFwKChkZXBlbmRlbmN5KSA9PiBkZXBlbmRlbmN5LmNsaWVudE11dGF0aW9uSWQpKVxuICAgICAgKVxuICAgICAgY29uc3QgdGVybWluYWxSZWNvcmRzID0gcmVjb3Jkc1xuICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+IFRFUk1JTkFMX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSlcbiAgICAgICAgLmZpbHRlcigocmVjb3JkKSA9PiAhcHJvdGVjdGVkQ2xpZW50TXV0YXRpb25JZHMuaGFzKHJlY29yZC5tdXRhdGlvbi5jbGllbnRNdXRhdGlvbklkKSlcbiAgICAgICAgLnNvcnQoY29tcGFyZVJlY29yZHNOZXdlc3RGaXJzdClcbiAgICAgIGNvbnN0IGRlbGV0ZUlkcyA9IG5ldyBTZXQoKVxuXG4gICAgICBpZiAodHlwZW9mIG1heFRlcm1pbmFsUmVjb3JkcyA9PT0gXCJudW1iZXJcIiAmJiBtYXhUZXJtaW5hbFJlY29yZHMgPj0gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiB0ZXJtaW5hbFJlY29yZHMuc2xpY2UobWF4VGVybWluYWxSZWNvcmRzKSkgZGVsZXRlSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGVybWluYWxSZXRlbnRpb25NcyA9PT0gXCJudW1iZXJcIiAmJiB0ZXJtaW5hbFJldGVudGlvbk1zID49IDApIHtcbiAgICAgICAgY29uc3QgY3V0b2ZmID0gdGhpcy5ub3coKS5nZXRUaW1lKCkgLSB0ZXJtaW5hbFJldGVudGlvbk1zXG5cbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgdGVybWluYWxSZWNvcmRzKSB7XG4gICAgICAgICAgaWYgKG5ldyBEYXRlKHJlY29yZC51cGRhdGVkQXQpLmdldFRpbWUoKSA8IGN1dG9mZikgZGVsZXRlSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVsZXRlZFJlY29yZElkcyA9IEFycmF5LmZyb20oZGVsZXRlSWRzKVxuXG4gICAgICBpZiAoZGVsZXRlZFJlY29yZElkcy5sZW5ndGggPiAwKSBhd2FpdCB0aGlzLnN0b3JhZ2UuZGVsZXRlUmVjb3Jkcyh0aGlzLnN0b3JhZ2VLZXksIGRlbGV0ZWRSZWNvcmRJZHMpXG5cbiAgICAgIHJldHVybiB7ZGVsZXRlZFJlY29yZElkc31cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgbG9nIHRpbWVzdGFtcC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBDdXJyZW50IElTTyB0aW1lc3RhbXAuXG4gICAqL1xuICBjdXJyZW50VGltZXN0YW1wKCkge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLm5vdygpXG5cbiAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkgfHwgTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgdGhyb3cgbmV3IEVycm9yKFwiTG9jYWxNdXRhdGlvbkxvZyBub3coKSBtdXN0IHJldHVybiBhIHZhbGlkIERhdGVcIilcblxuICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKClcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgc3RvcmFnZSBhZGFwdGVyIGhhcyBhbGwgcmVxdWlyZWQgcm93LXN0b3JlIG1ldGhvZHMuXG4gKiBAcGFyYW0ge3Vua25vd259IHN0b3JhZ2UgLSBTdG9yYWdlIGFkYXB0ZXIgY2FuZGlkYXRlLlxuICogQHJldHVybnMge3N0b3JhZ2UgaXMgTG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2V9IC0gV2hldGhlciBzdG9yYWdlIGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZFN0b3JhZ2Uoc3RvcmFnZSkge1xuICBpZiAoIXN0b3JhZ2UgfHwgdHlwZW9mIHN0b3JhZ2UgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHN0b3JhZ2VPYmplY3QgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAoc3RvcmFnZSlcblxuICByZXR1cm4gdHlwZW9mIHN0b3JhZ2VPYmplY3QuYXBwZW5kUmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5kZWxldGVSZWNvcmRzID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5uZXh0U2VxdWVuY2UgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0LnJlY29yZCA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QucmVjb3JkcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QudXBkYXRlUmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbn1cblxuLyoqXG4gKiBTb3J0cyByZWNvcmRzIGJ5IG5ld2VzdCB1cGRhdGUvc2VxdWVuY2UgZmlyc3QuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IGxlZnQgLSBMZWZ0IHJlY29yZC5cbiAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gcmlnaHQgLSBSaWdodCByZWNvcmQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIFNvcnQgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBjb21wYXJlUmVjb3Jkc05ld2VzdEZpcnN0KGxlZnQsIHJpZ2h0KSB7XG4gIGNvbnN0IHVwZGF0ZWRBdENvbXBhcmlzb24gPSByaWdodC51cGRhdGVkQXQubG9jYWxlQ29tcGFyZShsZWZ0LnVwZGF0ZWRBdClcblxuICBpZiAodXBkYXRlZEF0Q29tcGFyaXNvbiAhPT0gMCkgcmV0dXJuIHVwZGF0ZWRBdENvbXBhcmlzb25cblxuICByZXR1cm4gcmlnaHQuc2VxdWVuY2UgLSBsZWZ0LnNlcXVlbmNlXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhbmQgc29ydHMgYSBsaXN0IG9mIHJlY29yZHMuXG4gKiBAcGFyYW0ge3Vua25vd259IHJlY29yZHMgLSBSYXcgcmVjb3Jkcy5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkW119IC0gTm9ybWFsaXplZCByZWNvcmRzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSZWNvcmRMaXN0KHJlY29yZHMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlY29yZHMpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBsb2cgc3RvcmFnZSByZWNvcmRzIGFycmF5XCIpXG5cbiAgcmV0dXJuIHJlY29yZHNcbiAgICAubWFwKG5vcm1hbGl6ZVJlY29yZClcbiAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQuc2VxdWVuY2UgLSByaWdodC5zZXF1ZW5jZSlcbiAgICAubWFwKChyZWNvcmQpID0+IGNsb25lUmVjb3JkKHJlY29yZCkpXG59XG5cbi8qKlxuICogUnVucyBhIGNhbGxiYWNrIGFmdGVyIGVhcmxpZXIgd3JpdGVzIGZvciB0aGUgc2FtZSBzdG9yYWdlIGtleSBoYXZlIGNvbXBsZXRlZC5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcmFnZUtleSAtIFN0b3JhZ2Uga2V5IHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxUPn0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBydW4gdW5kZXIgdGhlIHN0b3JhZ2Uta2V5IGxvY2suXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxUPn0gLSBDYWxsYmFjayByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdpdGhTdG9yYWdlS2V5TG9jayhzdG9yYWdlS2V5LCBjYWxsYmFjaykge1xuICBjb25zdCBwcmV2aW91cyA9IFNUT1JBR0VfS0VZX0xPQ0tTLmdldChzdG9yYWdlS2V5KSB8fCBQcm9taXNlLnJlc29sdmUoKVxuICBsZXQgcmVsZWFzZSA9ICgpID0+IHt9XG4gIGNvbnN0IGN1cnJlbnQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geyByZWxlYXNlID0gKCkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpIH0pXG4gIGNvbnN0IGNoYWluZWQgPSBwcmV2aW91cy5jYXRjaCgoX2Vycm9yKSA9PiB7fSkudGhlbigoKSA9PiBjdXJyZW50KVxuXG4gIFNUT1JBR0VfS0VZX0xPQ0tTLnNldChzdG9yYWdlS2V5LCBjaGFpbmVkKVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgcHJldmlvdXMuY2F0Y2goKF9lcnJvcikgPT4ge30pXG5cbiAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soKVxuICB9IGZpbmFsbHkge1xuICAgIHJlbGVhc2UoKVxuICAgIGlmIChTVE9SQUdFX0tFWV9MT0NLUy5nZXQoc3RvcmFnZUtleSkgPT09IGNoYWluZWQpIFNUT1JBR0VfS0VZX0xPQ0tTLmRlbGV0ZShzdG9yYWdlS2V5KVxuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBlcnNpc3RlZCBsb2cgcmVjb3JkLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyByZWNvcmQuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gLSBOb3JtYWxpemVkIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmVjb3JkKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkIG9iamVjdFwiKVxuXG4gIGNvbnN0IHJlY29yZCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcbiAgY29uc3Qgc3RhdHVzID0gcmVxdWlyZWRTdHJpbmcocmVjb3JkLnN0YXR1cywgXCJzdGF0dXNcIilcblxuICBpZiAoIU1VVEFUSU9OX1NUQVRVU0VTLmhhcyhzdGF0dXMpKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbG9jYWwgbXV0YXRpb24gc3RhdHVzICcke3N0YXR1c30nYClcblxuICBjb25zdCBiYXNlUmVjb3JkID0ge1xuICAgIGNyZWF0ZWRBdDogcmVxdWlyZWRJc29UaW1lc3RhbXAocmVjb3JkLmNyZWF0ZWRBdCwgXCJjcmVhdGVkQXRcIiksXG4gICAgZGVwZW5kZW5jaWVzOiBub3JtYWxpemVEZXBlbmRlbmNpZXMocmVjb3JkLmRlcGVuZGVuY2llcyksXG4gICAgaWQ6IHJlcXVpcmVkU3RyaW5nKHJlY29yZC5pZCwgXCJpZFwiKSxcbiAgICBtdXRhdGlvbjogbm9ybWFsaXplTXV0YXRpb24ocmVjb3JkLm11dGF0aW9uKSxcbiAgICBzZXF1ZW5jZTogcmVxdWlyZWRQb3NpdGl2ZUludGVnZXIocmVjb3JkLnNlcXVlbmNlLCBcInNlcXVlbmNlXCIpLFxuICAgIHN0YXR1czogLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzfSAqLyAoc3RhdHVzKSxcbiAgICB1cGRhdGVkQXQ6IHJlcXVpcmVkSXNvVGltZXN0YW1wKHJlY29yZC51cGRhdGVkQXQsIFwidXBkYXRlZEF0XCIpXG4gIH1cblxuICBpZiAocmVjb3JkLnNpZ25lZE11dGF0aW9uID09PSB1bmRlZmluZWQgJiYgcmVjb3JkLnN5bmNSZXN1bHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGJhc2VSZWNvcmRcblxuICAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9ICovXG4gIGNvbnN0IG5vcm1hbGl6ZWRSZWNvcmQgPSB7Li4uYmFzZVJlY29yZH1cblxuICBpZiAocmVjb3JkLnNpZ25lZE11dGF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBub3JtYWxpemVkUmVjb3JkLnNpZ25lZE11dGF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TaWduZWRTeW5jTXV0YXRpb259ICovIChjbG9uZUpzb25PYmplY3QocmVjb3JkLnNpZ25lZE11dGF0aW9uLCBcInNpZ25lZE11dGF0aW9uXCIpKVxuICB9XG4gIGlmIChyZWNvcmQuc3luY1Jlc3VsdCAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkUmVjb3JkLnN5bmNSZXN1bHQgPSBjbG9uZUpzb25PYmplY3QocmVjb3JkLnN5bmNSZXN1bHQsIFwic3luY1Jlc3VsdFwiKVxuXG4gIHJldHVybiBub3JtYWxpemVkUmVjb3JkXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBkZXBlbmRlbmN5IG1ldGFkYXRhIGVudHJpZXMuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IGRlcGVuZGVuY2llcy5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVtdfSAtIE5vcm1hbGl6ZWQgZGVwZW5kZW5jaWVzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEZXBlbmRlbmNpZXModmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBbXVxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBkZXBlbmRlbmNpZXMgYXJyYXlcIilcblxuICByZXR1cm4gdmFsdWUubWFwKChkZXBlbmRlbmN5KSA9PiB7XG4gICAgaWYgKCFkZXBlbmRlbmN5IHx8IHR5cGVvZiBkZXBlbmRlbmN5ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGRlcGVuZGVuY3kgb2JqZWN0XCIpXG4gICAgfVxuXG4gICAgY29uc3QgZGVwZW5kZW5jeU9iamVjdCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovIChkZXBlbmRlbmN5KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWVudE11dGF0aW9uSWQ6IHJlcXVpcmVkU3RyaW5nKGRlcGVuZGVuY3lPYmplY3QuY2xpZW50TXV0YXRpb25JZCwgXCJkZXBlbmRlbmN5IGNsaWVudE11dGF0aW9uSWRcIiksXG4gICAgICBtb2RlbDogcmVxdWlyZWRTdHJpbmcoZGVwZW5kZW5jeU9iamVjdC5tb2RlbCwgXCJkZXBlbmRlbmN5IG1vZGVsXCIpXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBzeW5jIG11dGF0aW9uIHBheWxvYWQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IG11dGF0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gLSBOb3JtYWxpemVkIG11dGF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVNdXRhdGlvbih2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgc3luYyBtdXRhdGlvbiBvYmplY3RcIilcblxuICBjb25zdCBtdXRhdGlvbiA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcbiAgY29uc3Qgbm9ybWFsaXplZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSAqLyAoe1xuICAgIGFjdG9yRGV2aWNlSWQ6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLmFjdG9yRGV2aWNlSWQsIFwiYWN0b3JEZXZpY2VJZFwiKSxcbiAgICBhY3RvclVzZXJJZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uYWN0b3JVc2VySWQsIFwiYWN0b3JVc2VySWRcIiksXG4gICAgY2xpZW50TXV0YXRpb25JZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uY2xpZW50TXV0YXRpb25JZCwgXCJjbGllbnRNdXRhdGlvbklkXCIpLFxuICAgIG1vZGVsOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5tb2RlbCwgXCJtb2RlbFwiKSxcbiAgICBvY2N1cnJlZEF0OiByZXF1aXJlZElzb1RpbWVzdGFtcChtdXRhdGlvbi5vY2N1cnJlZEF0LCBcIm9jY3VycmVkQXRcIiksXG4gICAgb2ZmbGluZUdyYW50SWQ6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLm9mZmxpbmVHcmFudElkLCBcIm9mZmxpbmVHcmFudElkXCIpLFxuICAgIG9wZXJhdGlvbjogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ub3BlcmF0aW9uLCBcIm9wZXJhdGlvblwiKSxcbiAgICBwb2xpY3lIYXNoOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5wb2xpY3lIYXNoLCBcInBvbGljeUhhc2hcIilcbiAgfSlcblxuICBpZiAobXV0YXRpb24uYXR0cmlidXRlcyAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLmF0dHJpYnV0ZXMgPSBjbG9uZUpzb25PYmplY3QobXV0YXRpb24uYXR0cmlidXRlcywgXCJhdHRyaWJ1dGVzXCIpXG4gIGlmIChtdXRhdGlvbi5iYXNlVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLmJhc2VWZXJzaW9uID0gY2xvbmVCYXNlVmVyc2lvbihtdXRhdGlvbi5iYXNlVmVyc2lvbilcbiAgaWYgKG11dGF0aW9uLmNvbW1hbmQgIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5jb21tYW5kID0gcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uY29tbWFuZCwgXCJjb21tYW5kXCIpXG4gIGlmIChtdXRhdGlvbi5wYXlsb2FkICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQucGF5bG9hZCA9IGNsb25lSnNvbk9iamVjdChtdXRhdGlvbi5wYXlsb2FkLCBcInBheWxvYWRcIilcblxuICByZXR1cm4gbm9ybWFsaXplZFxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmVxdWlyZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZFN0cmluZyh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9YClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBJU08gdGltZXN0YW1wIHN0cmluZy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gSVNPIHRpbWVzdGFtcC5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRJc29UaW1lc3RhbXAodmFsdWUsIGxhYmVsKSB7XG4gIGNvbnN0IHN0cmluZ1ZhbHVlID0gcmVxdWlyZWRTdHJpbmcodmFsdWUsIGxhYmVsKVxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoc3RyaW5nVmFsdWUpXG5cbiAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkgfHwgZGF0ZS50b0lTT1N0cmluZygpICE9PSBzdHJpbmdWYWx1ZSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfSBJU08gdGltZXN0YW1wYClcblxuICByZXR1cm4gc3RyaW5nVmFsdWVcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXIgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIFBvc2l0aXZlIGludGVnZXIuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkUG9zaXRpdmVJbnRlZ2VyKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH0gcG9zaXRpdmUgaW50ZWdlcmApXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogQ2xvbmVzIGEgc3VwcG9ydGVkIGJhc2UtdmVyc2lvbiB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgYmFzZSB2ZXJzaW9uLlxuICogQHJldHVybnMge3N0cmluZyB8IG51bWJlciB8IG51bGx9IC0gTm9ybWFsaXplZCBiYXNlIHZlcnNpb24uXG4gKi9cbmZ1bmN0aW9uIGNsb25lQmFzZVZlcnNpb24odmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHJldHVybiB2YWx1ZVxuXG4gIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGJhc2VWZXJzaW9uIHN0cmluZywgbnVtYmVyLCBvciBudWxsXCIpXG59XG5cbi8qKlxuICogQ2xvbmVzIGEgSlNPTi1jb21wYXRpYmxlIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBKU09OIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZX0gLSBDbG9uZWQgSlNPTiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVKc29uVmFsdWUodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIEpTT04tY29tcGF0aWJsZSBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfWApXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZX0gKi8gKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKSlcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBKU09OLWNvbXBhdGlibGUgb2JqZWN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBKU09OIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSAtIENsb25lZCBKU09OIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVKc29uT2JqZWN0KHZhbHVlLCBsYWJlbCkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfSBvYmplY3RgKVxuXG4gIHJldHVybiAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSAqLyAoY2xvbmVKc29uVmFsdWUodmFsdWUsIGxhYmVsKSlcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkLlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSByZWNvcmQgLSBSZWNvcmQgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gLSBDbG9uZWQgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBjbG9uZVJlY29yZChyZWNvcmQpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gKi8gKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVjb3JkKSkpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgcmFuZG9tIGxvY2FsIG11dGF0aW9uIHJlY29yZCBpZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmFuZG9tIHJlY29yZCBpZC5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tUmVjb3JkSWQoKSB7XG4gIGNvbnN0IGNyeXB0b1Byb3ZpZGVyID0gZ2xvYmFsVGhpcy5jcnlwdG9cblxuICBpZiAoY3J5cHRvUHJvdmlkZXIgJiYgdHlwZW9mIGNyeXB0b1Byb3ZpZGVyLnJhbmRvbVVVSUQgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGNyeXB0b1Byb3ZpZGVyLnJhbmRvbVVVSUQoKVxuXG4gIHJldHVybiBgbG9jYWwtbXV0YXRpb24tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnNsaWNlKDIpfWBcbn1cbiJdfQ==
434
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbXV0YXRpb24tbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvbG9jYWwtbXV0YXRpb24tbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7O0tBR0s7QUFDTDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxZQUFZO0FBRVosT0FBTyxtQkFBbUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFBO0FBQzdELE1BQU0scUJBQXFCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3pELDRDQUE0QztBQUM1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFbkMsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWdCO0lBQ25DOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsV0FBVyxHQUFHLGNBQWMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxHQUFHLG1CQUFtQixFQUFDO1FBQzNHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFN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UyxXQUFXLENBQUMsTUFBTTtJQUN6QixPQUFPLHFDQUFxQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNuRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxjQUFjO0lBQ3JCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUE7SUFFeEMsSUFBSSxjQUFjLElBQUksT0FBTyxjQUFjLENBQUMsVUFBVSxLQUFLLFVBQVU7UUFBRSxPQUFPLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUV6RyxPQUFPLGtCQUFrQixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkIHF1ZXJ5IG9wdGlvbnMuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nUmVjb3Jkc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvblN0YXR1c1tdfSBbc3RhdHVzZXNdIC0gT3B0aW9uYWwgc3RhdHVzIGZpbHRlci5cbiAqL1xuLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcm93LW9yaWVudGVkIHN0b3JhZ2UgYWRhcHRlci5cbiAqXG4gKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHN0b3JlIGVhY2ggbXV0YXRpb24gbG9nIHJlY29yZCBhcyBpdHMgb3duIHJvdy9lbnRyeS5cbiAqIE5hdGl2ZSBhcHBzIHNob3VsZCBiYWNrIHRoaXMgd2l0aCBTUUxpdGUgYW5kIGluZGV4ZXMgb24gc3RvcmFnZSBrZXksIHN0YXR1cyxcbiAqIGFuZCBzZXF1ZW5jZS4gQXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgbG9nIGFzIG9uZSBKU09OIGJsb2IuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nU3RvcmFnZVxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCByZWNvcmQ6IExvY2FsTXV0YXRpb25Mb2dSZWNvcmQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSBhcHBlbmRSZWNvcmQgLSBBcHBlbmRzIG9uZSBsb2cgcmVjb3JkLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCBpZHM6IHN0cmluZ1tdKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gZGVsZXRlUmVjb3JkcyAtIERlbGV0ZXMgbG9nIHJlY29yZHMgYnkgaWQuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcpID0+IFByb21pc2U8bnVtYmVyPiB8IG51bWJlcn0gbmV4dFNlcXVlbmNlIC0gUmV0dXJucyB0aGUgbmV4dCBsb2NhbCBzZXF1ZW5jZSBudW1iZXIuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+IFByb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZCB8IG51bGwgfCB1bmRlZmluZWQ+IHwgTG9jYWxNdXRhdGlvbkxvZ1JlY29yZCB8IG51bGwgfCB1bmRlZmluZWR9IHJlY29yZCAtIFJlYWRzIG9uZSBsb2cgcmVjb3JkIGJ5IGlkLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCBvcHRpb25zPzogTG9jYWxNdXRhdGlvbkxvZ1JlY29yZHNPcHRpb25zKSA9PiBQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT4gfCBMb2NhbE11dGF0aW9uTG9nUmVjb3JkW119IHJlY29yZHMgLSBSZWFkcyBsb2cgcmVjb3Jkcy5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgcmVjb3JkOiBMb2NhbE11dGF0aW9uTG9nUmVjb3JkKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gdXBkYXRlUmVjb3JkIC0gUmVwbGFjZXMgb25lIGxvZyByZWNvcmQuXG4gKi9cbi8qKlxuICogTG9jYWwgc3luYyBtdXRhdGlvbiBkZXBlbmRlbmN5IG1ldGFkYXRhLlxuICogQHR5cGVkZWYge29iamVjdH0gTG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGllbnRNdXRhdGlvbklkIC0gQ2xpZW50IG11dGF0aW9uIGlkIHRoaXMgbXV0YXRpb24gZGVwZW5kcyBvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlbCAtIERlcGVuZGVudCBtb2RlbC9yZXNvdXJjZSBuYW1lLlxuICovXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyBzdGF0dXMuXG4gKiBAdHlwZWRlZiB7XCJwZW5kaW5nXCIgfCBcImFwcGxpZWQtbG9jYWxseVwiIHwgXCJwZWVyLWFwcGxpZWRcIiB8IFwiY29uZmxpY3RcIiB8IFwicmVqZWN0ZWRcIiB8IFwic3luY2VkXCJ9IExvY2FsTXV0YXRpb25TdGF0dXNcbiAqICovXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nUmVjb3JkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3JlYXRlZEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSByZWNvcmQgd2FzIGNyZWF0ZWQgbG9jYWxseS5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lbXX0gZGVwZW5kZW5jaWVzIC0gT3RoZXIgbG9jYWwgbXV0YXRpb25zIHRoYXQgbXVzdCByZXBsYXkgZmlyc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBMb2NhbCBsb2cgcmVjb3JkIGlkLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259IG11dGF0aW9uIC0gRGV2aWNlIG11dGF0aW9uIHBheWxvYWQuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlNpZ25lZFN5bmNNdXRhdGlvbn0gW3NpZ25lZE11dGF0aW9uXSAtIE9yaWdpbmFsIHNpZ25lZCBtdXRhdGlvbiBlbnZlbG9wZSwgcmV0YWluZWQgZm9yIHBlZXItZm9yd2FyZGVkIG11dGF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzZXF1ZW5jZSAtIE1vbm90b25pYyBsb2NhbCBzZXF1ZW5jZS5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvblN0YXR1c30gc3RhdHVzIC0gTG9jYWwgcmVwbGF5L2FwcGx5IHN0YXR1cy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFtzeW5jUmVzdWx0XSAtIEJhY2tlbmQgcmVwbGF5L3Jlc3VsdCBtZXRhZGF0YS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cGRhdGVkQXQgLSBJU08gdGltZXN0YW1wIHdoZW4gdGhlIHJlY29yZCB3YXMgbGFzdCBjaGFuZ2VkLlxuICovXG4vLyBAdHMtY2hlY2tcblxuaW1wb3J0IHN0YWJsZUpzb25TdHJpbmdpZnkgZnJvbSBcIi4vc3RhYmxlLWpzb24uanNcIlxuXG5jb25zdCBERUZBVUxUX1NUT1JBR0VfS0VZID0gXCJ2ZWxvY2lvdXMuc3luYy5sb2NhbE11dGF0aW9uTG9nXCJcbmNvbnN0IFBFTkRJTkdfU1RBVFVTX1ZBTFVFUyA9IC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvblN0YXR1c1tdfSAqLyAoW1wicGVuZGluZ1wiLCBcImFwcGxpZWQtbG9jYWxseVwiLCBcInBlZXItYXBwbGllZFwiXSlcbmNvbnN0IFBFTkRJTkdfU1RBVFVTRVMgPSBuZXcgU2V0KFBFTkRJTkdfU1RBVFVTX1ZBTFVFUylcbmNvbnN0IE1VVEFUSU9OX1NUQVRVU0VTID0gbmV3IFNldChbLi4uUEVORElOR19TVEFUVVNFUywgXCJjb25mbGljdFwiLCBcInJlamVjdGVkXCIsIFwic3luY2VkXCJdKVxuY29uc3QgVEVSTUlOQUxfU1RBVFVTRVMgPSBuZXcgU2V0KFtcInJlamVjdGVkXCIsIFwic3luY2VkXCJdKVxuLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBQcm9taXNlPHVua25vd24+Pn0gKi9cbmNvbnN0IFNUT1JBR0VfS0VZX0xPQ0tTID0gbmV3IE1hcCgpXG5cbi8qKiBDbGllbnQtc2lkZSBhcHBlbmQtb25seSBzeW5jIG11dGF0aW9uIGxvZyB3aXRoIHBsdWdnYWJsZSBwZXJzaXN0ZW50IHN0b3JhZ2UuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2NhbE11dGF0aW9uTG9nIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBsb2NhbCBtdXRhdGlvbiBsb2cuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0geygpID0+IHN0cmluZ30gW2FyZ3MuaWRHZW5lcmF0b3JdIC0gUmVjb3JkIGlkIGdlbmVyYXRvci5cbiAgICogQHBhcmFtIHsoKSA9PiBEYXRlfSBbYXJncy5ub3ddIC0gQ2xvY2sgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2V9IGFyZ3Muc3RvcmFnZSAtIFBlcnNpc3RlbnQgc3RvcmFnZSBhZGFwdGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3RvcmFnZUtleV0gLSBTdG9yYWdlIGtleS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtpZEdlbmVyYXRvciA9IHJhbmRvbVJlY29yZElkLCBub3cgPSAoKSA9PiBuZXcgRGF0ZSgpLCBzdG9yYWdlLCBzdG9yYWdlS2V5ID0gREVGQVVMVF9TVE9SQUdFX0tFWX0pIHtcbiAgICBpZiAoIXZhbGlkU3RvcmFnZShzdG9yYWdlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9jYWxNdXRhdGlvbkxvZyByZXF1aXJlcyByb3cgc3RvcmFnZSB3aXRoIGFwcGVuZFJlY29yZC9kZWxldGVSZWNvcmRzL25leHRTZXF1ZW5jZS9yZWNvcmQvcmVjb3Jkcy91cGRhdGVSZWNvcmRcIilcbiAgICB9XG5cbiAgICB0aGlzLmlkR2VuZXJhdG9yID0gaWRHZW5lcmF0b3JcbiAgICB0aGlzLm5vdyA9IG5vd1xuICAgIHRoaXMuc3RvcmFnZSA9IHN0b3JhZ2VcbiAgICB0aGlzLnN0b3JhZ2VLZXkgPSBzdG9yYWdlS2V5XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIHBlbmRpbmcgbXV0YXRpb24gcmVjb3JkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVtdfSBbYXJncy5kZXBlbmRlbmNpZXNdIC0gTXV0YXRpb24gZGVwZW5kZW5jaWVzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gYXJncy5tdXRhdGlvbiAtIE11dGF0aW9uIHBheWxvYWQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU2lnbmVkU3luY011dGF0aW9ufSBbYXJncy5zaWduZWRNdXRhdGlvbl0gLSBPcmlnaW5hbCBzaWduZWQgbXV0YXRpb24gZW52ZWxvcGUsIHJldGFpbmVkIGZvciBwZWVyLWZvcndhcmRlZCBtdXRhdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSAtIENyZWF0ZWQgbG9nIHJlY29yZC5cbiAgICovXG4gIGFzeW5jIGFwcGVuZCh7ZGVwZW5kZW5jaWVzID0gW10sIG11dGF0aW9uLCBzaWduZWRNdXRhdGlvbn0pIHtcbiAgICBpZiAoc2lnbmVkTXV0YXRpb24gIT09IHVuZGVmaW5lZCAmJiBzdGFibGVKc29uU3RyaW5naWZ5KHNpZ25lZE11dGF0aW9uLm11dGF0aW9uKSAhPT0gc3RhYmxlSnNvblN0cmluZ2lmeShtdXRhdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNpZ25lZCBtdXRhdGlvbiBwYXlsb2FkIGRvZXMgbm90IG1hdGNoIHRoZSBtdXRhdGlvblwiKVxuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHtcbiAgICAgICAgY3JlYXRlZEF0OiB0aW1lc3RhbXAsXG4gICAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICAgaWQ6IHRoaXMuaWRHZW5lcmF0b3IoKSxcbiAgICAgICAgbXV0YXRpb24sXG4gICAgICAgIHNlcXVlbmNlOiBhd2FpdCB0aGlzLnN0b3JhZ2UubmV4dFNlcXVlbmNlKHRoaXMuc3RvcmFnZUtleSksXG4gICAgICAgIHNpZ25lZE11dGF0aW9uLFxuICAgICAgICBzdGF0dXM6IFwicGVuZGluZ1wiLFxuICAgICAgICB1cGRhdGVkQXQ6IHRpbWVzdGFtcFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLmFwcGVuZFJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGNsb25lUmVjb3JkKHJlY29yZCkpXG5cbiAgICAgIHJldHVybiBjbG9uZVJlY29yZChyZWNvcmQpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCByZWNvcmRzIG9yZGVyZWQgYnkgbG9jYWwgc2VxdWVuY2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT59IC0gTG9nIHJlY29yZHMuXG4gICAqL1xuICBhc3luYyByZWNvcmRzKCkge1xuICAgIHJldHVybiBub3JtYWxpemVSZWNvcmRMaXN0KGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmRzKHRoaXMuc3RvcmFnZUtleSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyByZWNvcmRzIHRoYXQgc3RpbGwgbmVlZCBsb2NhbC9zZXJ2ZXIgcmVjb25jaWxpYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT59IC0gUGVuZGluZyByZWNvcmRzLlxuICAgKi9cbiAgYXN5bmMgcGVuZGluZ1JlY29yZHMoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVJlY29yZExpc3QoYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZHModGhpcy5zdG9yYWdlS2V5LCB7c3RhdHVzZXM6IFBFTkRJTkdfU1RBVFVTX1ZBTFVFU30pKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSByZWNvcmQgc3RhdHVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuaWQgLSBSZWNvcmQgaWQuXG4gICAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvblN0YXR1c30gYXJncy5zdGF0dXMgLSBOZXcgc3RhdHVzLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSBbYXJncy5zeW5jUmVzdWx0XSAtIFJlc3VsdCBtZXRhZGF0YS5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZD59IC0gVXBkYXRlZCByZWNvcmQuXG4gICAqL1xuICBhc3luYyB1cGRhdGVTdGF0dXMoe2lkLCBzdGF0dXMsIHN5bmNSZXN1bHR9KSB7XG4gICAgaWYgKCFNVVRBVElPTl9TVEFUVVNFUy5oYXMoc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxvY2FsIG11dGF0aW9uIHN0YXR1cyAnJHtzdGF0dXN9J2ApXG5cbiAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JhZ2VLZXlMb2NrKHRoaXMuc3RvcmFnZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3UmVjb3JkID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGlkKVxuXG4gICAgICBpZiAoIXJhd1JlY29yZCkgdGhyb3cgbmV3IEVycm9yKGBObyBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkICcke2lkfSdgKVxuXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQocmF3UmVjb3JkKVxuXG4gICAgICByZWNvcmQuc3RhdHVzID0gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzfSAqLyAoc3RhdHVzKVxuICAgICAgaWYgKHN5bmNSZXN1bHQgIT09IHVuZGVmaW5lZCkgcmVjb3JkLnN5bmNSZXN1bHQgPSBjbG9uZUpzb25PYmplY3Qoc3luY1Jlc3VsdCwgXCJzeW5jUmVzdWx0XCIpXG4gICAgICByZWNvcmQudXBkYXRlZEF0ID0gdGhpcy5jdXJyZW50VGltZXN0YW1wKClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS51cGRhdGVSZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBjbG9uZVJlY29yZChyZWNvcmQpKVxuXG4gICAgICByZXR1cm4gY2xvbmVSZWNvcmQocmVjb3JkKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIG11dGF0aW9uIHBheWxvYWQgb2YgYSBzdGlsbC1wZW5kaW5nIHJlY29yZC4gVXNlZCB3aGVuIGFuXG4gICAqIGFja25vd2xlZGdlZCBwcmVkZWNlc3NvciBzdXBwbGllcyB0aGUgYXV0aG9yaXRhdGl2ZSBiYXNlIGZvciBpdHMgc3VjY2Vzc29yLlxuICAgKiBAcGFyYW0ge3tpZDogc3RyaW5nLCBtdXRhdGlvbjogaW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufX0gYXJncyAtIFJlY29yZCBhbmQgcmVwbGFjZW1lbnQgbXV0YXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSBVcGRhdGVkIHJlY29yZC5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZU11dGF0aW9uKHtpZCwgbXV0YXRpb259KSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBpZClcblxuICAgICAgaWYgKCFyYXdSZWNvcmQpIHRocm93IG5ldyBFcnJvcihgTm8gbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZCAnJHtpZH0nYClcblxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHJhd1JlY29yZClcblxuICAgICAgaWYgKCFQRU5ESU5HX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdXBkYXRlIG11dGF0aW9uIGZvciAke3JlY29yZC5zdGF0dXN9IGxvY2FsIG11dGF0aW9uICcke2lkfSdgKVxuXG4gICAgICByZWNvcmQubXV0YXRpb24gPSBub3JtYWxpemVNdXRhdGlvbihtdXRhdGlvbilcbiAgICAgIHJlY29yZC51cGRhdGVkQXQgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnVwZGF0ZVJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGNsb25lUmVjb3JkKHJlY29yZCkpXG5cbiAgICAgIHJldHVybiBjbG9uZVJlY29yZChyZWNvcmQpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBQcnVuZXMgdGVybWluYWwgcmVjb3JkcyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkIGZvciByZXBsYXkgZGVwZW5kZW5jaWVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gQ29tcGFjdGlvbiBvcHRpb25zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4VGVybWluYWxSZWNvcmRzXSAtIE1heGltdW0gdGVybWluYWwgcmVjb3JkcyB0byByZXRhaW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy50ZXJtaW5hbFJldGVudGlvbk1zXSAtIE1pbmltdW0gYWdlIGJlZm9yZSBwcnVuaW5nIHRlcm1pbmFsIHJlY29yZHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtkZWxldGVkUmVjb3JkSWRzOiBzdHJpbmdbXX0+fSAtIENvbXBhY3Rpb24gcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY29tcGFjdCh7bWF4VGVybWluYWxSZWNvcmRzLCB0ZXJtaW5hbFJldGVudGlvbk1zfSA9IHt9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZHMgPSBhd2FpdCB0aGlzLnJlY29yZHMoKVxuICAgICAgY29uc3QgcHJvdGVjdGVkQ2xpZW50TXV0YXRpb25JZHMgPSBuZXcgU2V0KFxuICAgICAgICByZWNvcmRzXG4gICAgICAgICAgLmZpbHRlcigocmVjb3JkKSA9PiBQRU5ESU5HX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSB8fCByZWNvcmQuc3RhdHVzID09PSBcImNvbmZsaWN0XCIpXG4gICAgICAgICAgLmZsYXRNYXAoKHJlY29yZCkgPT4gcmVjb3JkLmRlcGVuZGVuY2llcy5tYXAoKGRlcGVuZGVuY3kpID0+IGRlcGVuZGVuY3kuY2xpZW50TXV0YXRpb25JZCkpXG4gICAgICApXG4gICAgICBjb25zdCB0ZXJtaW5hbFJlY29yZHMgPSByZWNvcmRzXG4gICAgICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gVEVSTUlOQUxfU1RBVFVTRVMuaGFzKHJlY29yZC5zdGF0dXMpKVxuICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+ICFwcm90ZWN0ZWRDbGllbnRNdXRhdGlvbklkcy5oYXMocmVjb3JkLm11dGF0aW9uLmNsaWVudE11dGF0aW9uSWQpKVxuICAgICAgICAuc29ydChjb21wYXJlUmVjb3Jkc05ld2VzdEZpcnN0KVxuICAgICAgY29uc3QgZGVsZXRlSWRzID0gbmV3IFNldCgpXG5cbiAgICAgIGlmICh0eXBlb2YgbWF4VGVybWluYWxSZWNvcmRzID09PSBcIm51bWJlclwiICYmIG1heFRlcm1pbmFsUmVjb3JkcyA+PSAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHRlcm1pbmFsUmVjb3Jkcy5zbGljZShtYXhUZXJtaW5hbFJlY29yZHMpKSBkZWxldGVJZHMuYWRkKHJlY29yZC5pZClcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0ZXJtaW5hbFJldGVudGlvbk1zID09PSBcIm51bWJlclwiICYmIHRlcm1pbmFsUmV0ZW50aW9uTXMgPj0gMCkge1xuICAgICAgICBjb25zdCBjdXRvZmYgPSB0aGlzLm5vdygpLmdldFRpbWUoKSAtIHRlcm1pbmFsUmV0ZW50aW9uTXNcblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiB0ZXJtaW5hbFJlY29yZHMpIHtcbiAgICAgICAgICBpZiAobmV3IERhdGUocmVjb3JkLnVwZGF0ZWRBdCkuZ2V0VGltZSgpIDwgY3V0b2ZmKSBkZWxldGVJZHMuYWRkKHJlY29yZC5pZClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWxldGVkUmVjb3JkSWRzID0gQXJyYXkuZnJvbShkZWxldGVJZHMpXG5cbiAgICAgIGlmIChkZWxldGVkUmVjb3JkSWRzLmxlbmd0aCA+IDApIGF3YWl0IHRoaXMuc3RvcmFnZS5kZWxldGVSZWNvcmRzKHRoaXMuc3RvcmFnZUtleSwgZGVsZXRlZFJlY29yZElkcylcblxuICAgICAgcmV0dXJuIHtkZWxldGVkUmVjb3JkSWRzfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBsb2cgdGltZXN0YW1wLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEN1cnJlbnQgSVNPIHRpbWVzdGFtcC5cbiAgICovXG4gIGN1cnJlbnRUaW1lc3RhbXAoKSB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMubm93KClcblxuICAgIGlmICghKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB8fCBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB0aHJvdyBuZXcgRXJyb3IoXCJMb2NhbE11dGF0aW9uTG9nIG5vdygpIG11c3QgcmV0dXJuIGEgdmFsaWQgRGF0ZVwiKVxuXG4gICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBzdG9yYWdlIGFkYXB0ZXIgaGFzIGFsbCByZXF1aXJlZCByb3ctc3RvcmUgbWV0aG9kcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gc3RvcmFnZSAtIFN0b3JhZ2UgYWRhcHRlciBjYW5kaWRhdGUuXG4gKiBAcmV0dXJucyB7c3RvcmFnZSBpcyBMb2NhbE11dGF0aW9uTG9nU3RvcmFnZX0gLSBXaGV0aGVyIHN0b3JhZ2UgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkU3RvcmFnZShzdG9yYWdlKSB7XG4gIGlmICghc3RvcmFnZSB8fCB0eXBlb2Ygc3RvcmFnZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qgc3RvcmFnZU9iamVjdCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovIChzdG9yYWdlKVxuXG4gIHJldHVybiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5hcHBlbmRSZWNvcmQgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0LmRlbGV0ZVJlY29yZHMgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0Lm5leHRTZXF1ZW5jZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QucmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5yZWNvcmRzID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC51cGRhdGVSZWNvcmQgPT09IFwiZnVuY3Rpb25cIlxufVxuXG4vKipcbiAqIFNvcnRzIHJlY29yZHMgYnkgbmV3ZXN0IHVwZGF0ZS9zZXF1ZW5jZSBmaXJzdC5cbiAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gbGVmdCAtIExlZnQgcmVjb3JkLlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSByaWdodCAtIFJpZ2h0IHJlY29yZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gU29ydCByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVSZWNvcmRzTmV3ZXN0Rmlyc3QobGVmdCwgcmlnaHQpIHtcbiAgY29uc3QgdXBkYXRlZEF0Q29tcGFyaXNvbiA9IHJpZ2h0LnVwZGF0ZWRBdC5sb2NhbGVDb21wYXJlKGxlZnQudXBkYXRlZEF0KVxuXG4gIGlmICh1cGRhdGVkQXRDb21wYXJpc29uICE9PSAwKSByZXR1cm4gdXBkYXRlZEF0Q29tcGFyaXNvblxuXG4gIHJldHVybiByaWdodC5zZXF1ZW5jZSAtIGxlZnQuc2VxdWVuY2Vcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGFuZCBzb3J0cyBhIGxpc3Qgb2YgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVjb3JkcyAtIFJhdyByZWNvcmRzLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXX0gLSBOb3JtYWxpemVkIHJlY29yZHMuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlY29yZExpc3QocmVjb3Jkcykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVjb3JkcykpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGxvZyBzdG9yYWdlIHJlY29yZHMgYXJyYXlcIilcblxuICByZXR1cm4gcmVjb3Jkc1xuICAgIC5tYXAobm9ybWFsaXplUmVjb3JkKVxuICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5zZXF1ZW5jZSAtIHJpZ2h0LnNlcXVlbmNlKVxuICAgIC5tYXAoKHJlY29yZCkgPT4gY2xvbmVSZWNvcmQocmVjb3JkKSlcbn1cblxuLyoqXG4gKiBSdW5zIGEgY2FsbGJhY2sgYWZ0ZXIgZWFybGllciB3cml0ZXMgZm9yIHRoZSBzYW1lIHN0b3JhZ2Uga2V5IGhhdmUgY29tcGxldGVkLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9yYWdlS2V5IC0gU3RvcmFnZSBrZXkgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPFQ+fSBjYWxsYmFjayAtIENhbGxiYWNrIHRvIHJ1biB1bmRlciB0aGUgc3RvcmFnZS1rZXkgbG9jay5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIENhbGxiYWNrIHJlc3VsdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2l0aFN0b3JhZ2VLZXlMb2NrKHN0b3JhZ2VLZXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gU1RPUkFHRV9LRVlfTE9DS1MuZ2V0KHN0b3JhZ2VLZXkpIHx8IFByb21pc2UucmVzb2x2ZSgpXG4gIGxldCByZWxlYXNlID0gKCkgPT4ge31cbiAgY29uc3QgY3VycmVudCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7IHJlbGVhc2UgPSAoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkgfSlcbiAgY29uc3QgY2hhaW5lZCA9IHByZXZpb3VzLmNhdGNoKChfZXJyb3IpID0+IHt9KS50aGVuKCgpID0+IGN1cnJlbnQpXG5cbiAgU1RPUkFHRV9LRVlfTE9DS1Muc2V0KHN0b3JhZ2VLZXksIGNoYWluZWQpXG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwcmV2aW91cy5jYXRjaCgoX2Vycm9yKSA9PiB7fSlcblxuICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG4gIH0gZmluYWxseSB7XG4gICAgcmVsZWFzZSgpXG4gICAgaWYgKFNUT1JBR0VfS0VZX0xPQ0tTLmdldChzdG9yYWdlS2V5KSA9PT0gY2hhaW5lZCkgU1RPUkFHRV9LRVlfTE9DS1MuZGVsZXRlKHN0b3JhZ2VLZXkpXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGVyc2lzdGVkIGxvZyByZWNvcmQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHJlY29yZC5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAtIE5vcm1hbGl6ZWQgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSZWNvcmQodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQgb2JqZWN0XCIpXG5cbiAgY29uc3QgcmVjb3JkID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuICBjb25zdCBzdGF0dXMgPSByZXF1aXJlZFN0cmluZyhyZWNvcmQuc3RhdHVzLCBcInN0YXR1c1wiKVxuXG4gIGlmICghTVVUQVRJT05fU1RBVFVTRVMuaGFzKHN0YXR1cykpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsb2NhbCBtdXRhdGlvbiBzdGF0dXMgJyR7c3RhdHVzfSdgKVxuXG4gIGNvbnN0IGJhc2VSZWNvcmQgPSB7XG4gICAgY3JlYXRlZEF0OiByZXF1aXJlZElzb1RpbWVzdGFtcChyZWNvcmQuY3JlYXRlZEF0LCBcImNyZWF0ZWRBdFwiKSxcbiAgICBkZXBlbmRlbmNpZXM6IG5vcm1hbGl6ZURlcGVuZGVuY2llcyhyZWNvcmQuZGVwZW5kZW5jaWVzKSxcbiAgICBpZDogcmVxdWlyZWRTdHJpbmcocmVjb3JkLmlkLCBcImlkXCIpLFxuICAgIG11dGF0aW9uOiBub3JtYWxpemVNdXRhdGlvbihyZWNvcmQubXV0YXRpb24pLFxuICAgIHNlcXVlbmNlOiByZXF1aXJlZFBvc2l0aXZlSW50ZWdlcihyZWNvcmQuc2VxdWVuY2UsIFwic2VxdWVuY2VcIiksXG4gICAgc3RhdHVzOiAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25TdGF0dXN9ICovIChzdGF0dXMpLFxuICAgIHVwZGF0ZWRBdDogcmVxdWlyZWRJc29UaW1lc3RhbXAocmVjb3JkLnVwZGF0ZWRBdCwgXCJ1cGRhdGVkQXRcIilcbiAgfVxuXG4gIGlmIChyZWNvcmQuc2lnbmVkTXV0YXRpb24gPT09IHVuZGVmaW5lZCAmJiByZWNvcmQuc3luY1Jlc3VsdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gYmFzZVJlY29yZFxuXG4gIC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZFJlY29yZCA9IHsuLi5iYXNlUmVjb3JkfVxuXG4gIGlmIChyZWNvcmQuc2lnbmVkTXV0YXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIG5vcm1hbGl6ZWRSZWNvcmQuc2lnbmVkTXV0YXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlNpZ25lZFN5bmNNdXRhdGlvbn0gKi8gKGNsb25lSnNvbk9iamVjdChyZWNvcmQuc2lnbmVkTXV0YXRpb24sIFwic2lnbmVkTXV0YXRpb25cIikpXG4gIH1cbiAgaWYgKHJlY29yZC5zeW5jUmVzdWx0ICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWRSZWNvcmQuc3luY1Jlc3VsdCA9IGNsb25lSnNvbk9iamVjdChyZWNvcmQuc3luY1Jlc3VsdCwgXCJzeW5jUmVzdWx0XCIpXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZWNvcmRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGRlcGVuZGVuY3kgbWV0YWRhdGEgZW50cmllcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgZGVwZW5kZW5jaWVzLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25EZXBlbmRlbmN5W119IC0gTm9ybWFsaXplZCBkZXBlbmRlbmNpZXMuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZURlcGVuZGVuY2llcyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGRlcGVuZGVuY2llcyBhcnJheVwiKVxuXG4gIHJldHVybiB2YWx1ZS5tYXAoKGRlcGVuZGVuY3kpID0+IHtcbiAgICBpZiAoIWRlcGVuZGVuY3kgfHwgdHlwZW9mIGRlcGVuZGVuY3kgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gZGVwZW5kZW5jeSBvYmplY3RcIilcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRlbmN5T2JqZWN0ID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKGRlcGVuZGVuY3kpXG5cbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50TXV0YXRpb25JZDogcmVxdWlyZWRTdHJpbmcoZGVwZW5kZW5jeU9iamVjdC5jbGllbnRNdXRhdGlvbklkLCBcImRlcGVuZGVuY3kgY2xpZW50TXV0YXRpb25JZFwiKSxcbiAgICAgIG1vZGVsOiByZXF1aXJlZFN0cmluZyhkZXBlbmRlbmN5T2JqZWN0Lm1vZGVsLCBcImRlcGVuZGVuY3kgbW9kZWxcIilcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHN5bmMgbXV0YXRpb24gcGF5bG9hZC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgbXV0YXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSAtIE5vcm1hbGl6ZWQgbXV0YXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU11dGF0aW9uKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBzeW5jIG11dGF0aW9uIG9iamVjdFwiKVxuXG4gIGNvbnN0IG11dGF0aW9uID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuICBjb25zdCBub3JtYWxpemVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259ICovICh7XG4gICAgYWN0b3JEZXZpY2VJZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uYWN0b3JEZXZpY2VJZCwgXCJhY3RvckRldmljZUlkXCIpLFxuICAgIGFjdG9yVXNlcklkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5hY3RvclVzZXJJZCwgXCJhY3RvclVzZXJJZFwiKSxcbiAgICBjbGllbnRNdXRhdGlvbklkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5jbGllbnRNdXRhdGlvbklkLCBcImNsaWVudE11dGF0aW9uSWRcIiksXG4gICAgbW9kZWw6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLm1vZGVsLCBcIm1vZGVsXCIpLFxuICAgIG9jY3VycmVkQXQ6IHJlcXVpcmVkSXNvVGltZXN0YW1wKG11dGF0aW9uLm9jY3VycmVkQXQsIFwib2NjdXJyZWRBdFwiKSxcbiAgICBvZmZsaW5lR3JhbnRJZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ub2ZmbGluZUdyYW50SWQsIFwib2ZmbGluZUdyYW50SWRcIiksXG4gICAgb3BlcmF0aW9uOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5vcGVyYXRpb24sIFwib3BlcmF0aW9uXCIpLFxuICAgIHBvbGljeUhhc2g6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLnBvbGljeUhhc2gsIFwicG9saWN5SGFzaFwiKVxuICB9KVxuXG4gIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVzICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQuYXR0cmlidXRlcyA9IGNsb25lSnNvbk9iamVjdChtdXRhdGlvbi5hdHRyaWJ1dGVzLCBcImF0dHJpYnV0ZXNcIilcbiAgaWYgKG11dGF0aW9uLmJhc2VWZXJzaW9uICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQuYmFzZVZlcnNpb24gPSBjbG9uZUJhc2VWZXJzaW9uKG11dGF0aW9uLmJhc2VWZXJzaW9uKVxuICBpZiAobXV0YXRpb24uY29tbWFuZCAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLmNvbW1hbmQgPSByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5jb21tYW5kLCBcImNvbW1hbmRcIilcbiAgaWYgKG11dGF0aW9uLnBheWxvYWQgIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5wYXlsb2FkID0gY2xvbmVKc29uT2JqZWN0KG11dGF0aW9uLnBheWxvYWQsIFwicGF5bG9hZFwiKVxuXG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbi8qKlxuICogUmVxdWlyZXMgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBSZXF1aXJlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkU3RyaW5nKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH1gKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGFuIElTTyB0aW1lc3RhbXAgc3RyaW5nLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBJU08gdGltZXN0YW1wLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZElzb1RpbWVzdGFtcCh2YWx1ZSwgbGFiZWwpIHtcbiAgY29uc3Qgc3RyaW5nVmFsdWUgPSByZXF1aXJlZFN0cmluZyh2YWx1ZSwgbGFiZWwpXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShzdHJpbmdWYWx1ZSlcblxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSB8fCBkYXRlLnRvSVNPU3RyaW5nKCkgIT09IHN0cmluZ1ZhbHVlKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9IElTTyB0aW1lc3RhbXBgKVxuXG4gIHJldHVybiBzdHJpbmdWYWx1ZVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlciB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gUG9zaXRpdmUgaW50ZWdlci5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRQb3NpdGl2ZUludGVnZXIodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgMSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfSBwb3NpdGl2ZSBpbnRlZ2VyYClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBzdXBwb3J0ZWQgYmFzZS12ZXJzaW9uIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBiYXNlIHZlcnNpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVtYmVyIHwgbnVsbH0gLSBOb3JtYWxpemVkIGJhc2UgdmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCYXNlVmVyc2lvbih2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHZhbHVlXG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gYmFzZVZlcnNpb24gc3RyaW5nLCBudW1iZXIsIG9yIG51bGxcIilcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBKU09OLWNvbXBhdGlibGUgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IEpTT04gdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlfSAtIENsb25lZCBKU09OIHZhbHVlLlxuICovXG5mdW5jdGlvbiBjbG9uZUpzb25WYWx1ZSh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgSlNPTi1jb21wYXRpYmxlIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9YClcblxuICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlfSAqLyAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIENsb25lcyBhIEpTT04tY29tcGF0aWJsZSBvYmplY3QuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IEpTT04gb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IC0gQ2xvbmVkIEpTT04gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZUpzb25PYmplY3QodmFsdWUsIGxhYmVsKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9IG9iamVjdGApXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59ICovIChjbG9uZUpzb25WYWx1ZSh2YWx1ZSwgbGFiZWwpKVxufVxuXG4vKipcbiAqIENsb25lcyBhIGxvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IHJlY29yZCAtIFJlY29yZCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAtIENsb25lZCByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVjb3JkKHJlY29yZCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAqLyAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZWNvcmQpKSlcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gbG9jYWwgbXV0YXRpb24gcmVjb3JkIGlkLlxuICogQHJldHVybnMge3N0cmluZ30gLSBSYW5kb20gcmVjb3JkIGlkLlxuICovXG5mdW5jdGlvbiByYW5kb21SZWNvcmRJZCgpIHtcbiAgY29uc3QgY3J5cHRvUHJvdmlkZXIgPSBnbG9iYWxUaGlzLmNyeXB0b1xuXG4gIGlmIChjcnlwdG9Qcm92aWRlciAmJiB0eXBlb2YgY3J5cHRvUHJvdmlkZXIucmFuZG9tVVVJRCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gY3J5cHRvUHJvdmlkZXIucmFuZG9tVVVJRCgpXG5cbiAgcmV0dXJuIGBsb2NhbC1tdXRhdGlvbi0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc2xpY2UoMil9YFxufVxuIl19
@@ -182,6 +182,18 @@ export type SyncReplayItem = {
182
182
  * - Sync id.
183
183
  */
184
184
  id: string | number;
185
+ /**
186
+ * - Structured durable conflict payload.
187
+ */
188
+ conflict?: Record<string, ReturnType<typeof JSON.parse>>;
189
+ /**
190
+ * - Rejection reason.
191
+ */
192
+ reason?: string;
193
+ /**
194
+ * - Authoritative version after successful replay.
195
+ */
196
+ serverVersion?: string | number | null;
185
197
  /**
186
198
  * - Replay state.
187
199
  */
@@ -265,6 +277,9 @@ export type SyncReplayResponse = {
265
277
  /**
266
278
  * @typedef {object} SyncReplayItem
267
279
  * @property {string | number} id - Sync id.
280
+ * @property {Record<string, ReturnType<typeof JSON.parse>>} [conflict] - Structured durable conflict payload.
281
+ * @property {string} [reason] - Rejection reason.
282
+ * @property {string | number | null} [serverVersion] - Authoritative version after successful replay.
268
283
  * @property {string} syncState - Replay state.
269
284
  */
270
285
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sync-api-client-types.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-api-client-types.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-api-client-types.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-api-client-types.js"],"names":[],"mappings":"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"}
@@ -63,6 +63,9 @@
63
63
  /**
64
64
  * @typedef {object} SyncReplayItem
65
65
  * @property {string | number} id - Sync id.
66
+ * @property {Record<string, ReturnType<typeof JSON.parse>>} [conflict] - Structured durable conflict payload.
67
+ * @property {string} [reason] - Rejection reason.
68
+ * @property {string | number | null} [serverVersion] - Authoritative version after successful replay.
66
69
  * @property {string} syncState - Replay state.
67
70
  */
68
71
  /**
@@ -72,4 +75,4 @@
72
75
  * @property {Array<SyncReplayItem>} [syncs] - Replay results.
73
76
  */
74
77
  export {};
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1hcGktY2xpZW50LXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvc3luYy1hcGktY2xpZW50LXR5cGVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVILHlHQUF5RztBQUV6Rzs7Ozs7OztHQU9HO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7O0dBSUc7QUFFSDs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQG1vZHVsZSBzeW5jLWFwaS1jbGllbnQtdHlwZXNcbiAqL1xuXG4vKiogQHR5cGVkZWYge3tpZDogc3RyaW5nIHwgbnVsbCwgc2VydmVyU2VxdWVuY2U6IG51bWJlciB8IG51bGwsIHVwZGF0ZWRBdDogc3RyaW5nfSB8IG51bGx9IFN5bmNDdXJzb3IgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jQ2hhbmdlRW52ZWxvcGVcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdW5rbm93bn0gZGF0YSAtIFN5bmMgZGF0YSBwYXlsb2FkLlxuICogQHByb3BlcnR5IHsoKSA9PiB1bmtub3dufSBpZCAtIFN5bmMgcm93IGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkgeygpID0+IHVua25vd259IHJlc291cmNlSWQgLSBSZXNvdXJjZSBpZGVudGlmaWVyLlxuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmcgfCBudWxsfSByZXNvdXJjZVR5cGUgLSBSZXNvdXJjZSB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZ30gc3luY1R5cGUgLSBTeW5jIG9wZXJhdGlvbiB0eXBlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NoYW5nZUFwcGx5UmVzdWx0XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNoYW5nZWQgLSBXaGV0aGVyIHRoZSBsb2NhbCBzdG9yZSBjaGFuZ2VkLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBbcmVzb3VyY2VUeXBlXSAtIEFwcGxpZWQgcmVzb3VyY2UgdHlwZSBvdmVycmlkZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN5bmNSZXNvdXJjZUNvbmZpZ1xuICogQHByb3BlcnR5IHsoYXJnczoge2F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcmVjb3JkOiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiwgc3luYzogU3luY0NoYW5nZUVudmVsb3BlfSkgPT4gUHJvbWlzZTxib29sZWFuIHwgdm9pZD4gfCBib29sZWFuIHwgdm9pZH0gW2FmdGVyQXBwbHldIC0gT3B0aW9uYWwgcG9zdC1zYXZlIGhvb2suXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7ZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlY29yZDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIHN5bmM6IFN5bmNDaGFuZ2VFbnZlbG9wZX0pID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IGF0dHJpYnV0ZXMgLSBBbGxvd2VkIGF0dHJpYnV0ZXMgYnVpbGRlci5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5hYmxlZCAtIFdoZXRoZXIgdGhpcyByZXNvdXJjZSBpcyBzeW5jLWVuYWJsZWQuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7ZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlc291cmNlSWQ6IHVua25vd24sIHN5bmM6IFN5bmNDaGFuZ2VFbnZlbG9wZX0pID0+IFByb21pc2U8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+IHwgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IFtmaW5kUmVjb3JkXSAtIE9wdGlvbmFsIHVwc2VydCBmaW5kZXIuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7cmVzb3VyY2VJZDogdW5rbm93biwgc3luYzogU3luY0NoYW5nZUVudmVsb3BlfSkgPT4gUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4gfCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gW2ZpbmRSZWNvcmRGb3JEZWxldGVdIC0gT3B0aW9uYWwgZGVzdHJveSBmaW5kZXIuXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBtb2RlbENsYXNzIC0gVmVsb2Npb3VzIG1vZGVsIGNsYXNzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NoYW5nZXNSZXF1ZXN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXV0aGVudGljYXRpb25Ub2tlbiAtIEF1dGggdG9rZW4uXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IFthZnRlcklkXSAtIExhc3Qgc2VlbiByb3cgaWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2FmdGVyU2VydmVyU2VxdWVuY2VdIC0gTGFzdCBzZWVuIHNlcnZlciBzZXF1ZW5jZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYWZ0ZXJVcGRhdGVkQXRdIC0gTGFzdCBzZWVuIHRpbWVzdGFtcC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsaW1pdCAtIFBhZ2Ugc2l6ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gW3VwVG9JZF0gLSBTbmFwc2hvdCB1cHBlci1ib3VuZCByb3cgaWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3VwVG9TZXJ2ZXJTZXF1ZW5jZV0gLSBTbmFwc2hvdCB1cHBlci1ib3VuZCBzZXJ2ZXIgc2VxdWVuY2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VwVG9VcGRhdGVkQXRdIC0gU25hcHNob3QgdXBwZXItYm91bmQgdGltZXN0YW1wLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NoYW5nZXNSZXNwb25zZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtlcnJvck1lc3NhZ2VdIC0gRXJyb3IgbWVzc2FnZS5cbiAqIEBwcm9wZXJ0eSB7U3luY0N1cnNvciB8IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW25leHRDdXJzb3JdIC0gTmV4dCBjdXJzb3IuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N0YXR1c10gLSBSZXNwb25zZSBzdGF0dXMuXG4gKiBAcHJvcGVydHkge0FycmF5PHVua25vd24+fSBbc3luY3NdIC0gU3luYyByb3dzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0b3RhbF0gLSBUb3RhbCBwZW5kaW5nIGNoYW5nZSBjb3VudCBmb3IgdGhlIHNjb3BlIGZyb20gdGhlIHJlcXVlc3QgY3Vyc29yIChhZGRpdGl2ZTsgYWJzZW50IG9uIG9sZGVyIHNlcnZlcnMpLlxuICogQHByb3BlcnR5IHtTeW5jQ3Vyc29yIHwgUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbdXBUb0N1cnNvcl0gLSBTbmFwc2hvdCB1cHBlci1ib3VuZCBjdXJzb3IuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jUHVsbFByb2dyZXNzXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGFnZXMgLSBBcHBsaWVkIHBhZ2UgY291bnQgc28gZmFyLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHN5bmNlZENvdW50IC0gQXBwbGllZCByb3cgY291bnQgc28gZmFyLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvdGFsIC0gVG90YWwgcGVuZGluZyBjaGFuZ2UgY291bnQgZm9yIHRoZSBwdWxsLCBzdGFibGUgYWNyb3NzIHBhZ2VzICgwIHdoZW4gbm90aGluZyB0byBzeW5jLCBudWxsLWZyZWUgb25jZSB0aGUgc2VydmVyIHJlcG9ydHMgaXQpLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NoYW5nZXNSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2hhbmdlZCAtIFdoZXRoZXIgYW55IGxvY2FsIHJlY29yZCBjaGFuZ2VkLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHBhZ2VzIC0gQXBwbGllZCBwYWdlIGNvdW50LlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBib29sZWFuPn0gcmVzb3VyY2VDaGFuZ2VkIC0gQ2hhbmdlZCBmbGFncyBieSByZXNvdXJjZSB0eXBlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBudW1iZXI+fSByZXNvdXJjZUNvdW50cyAtIEFwcGxpZWQgY291bnRzIGJ5IHJlc291cmNlIHR5cGUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3luY2VkQ291bnQgLSBBcHBsaWVkIHJvdyBjb3VudC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3RhbCAtIFRvdGFsIHBlbmRpbmcgY2hhbmdlIGNvdW50IGFjcm9zcyB0aGUgcHVsbGVkIHNjb3BlcyAodGhlIFwib2YgWVwiIGRlbm9taW5hdG9yIGZvciBhIHN5bmNlZENvdW50LW9mLXRvdGFsIHByb2dyZXNzIGJhcikuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jUmVwbGF5SXRlbVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gU3luYyBpZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzeW5jU3RhdGUgLSBSZXBsYXkgc3RhdGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jUmVwbGF5UmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXJyb3JNZXNzYWdlXSAtIEVycm9yIG1lc3NhZ2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N0YXR1c10gLSBSZXNwb25zZSBzdGF0dXMuXG4gKiBAcHJvcGVydHkge0FycmF5PFN5bmNSZXBsYXlJdGVtPn0gW3N5bmNzXSAtIFJlcGxheSByZXN1bHRzLlxuICovXG5cbmV4cG9ydCB7fVxuIl19
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1hcGktY2xpZW50LXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvc3luYy1hcGktY2xpZW50LXR5cGVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVILHlHQUF5RztBQUV6Rzs7Ozs7OztHQU9HO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQG1vZHVsZSBzeW5jLWFwaS1jbGllbnQtdHlwZXNcbiAqL1xuXG4vKiogQHR5cGVkZWYge3tpZDogc3RyaW5nIHwgbnVsbCwgc2VydmVyU2VxdWVuY2U6IG51bWJlciB8IG51bGwsIHVwZGF0ZWRBdDogc3RyaW5nfSB8IG51bGx9IFN5bmNDdXJzb3IgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jQ2hhbmdlRW52ZWxvcGVcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdW5rbm93bn0gZGF0YSAtIFN5bmMgZGF0YSBwYXlsb2FkLlxuICogQHByb3BlcnR5IHsoKSA9PiB1bmtub3dufSBpZCAtIFN5bmMgcm93IGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkgeygpID0+IHVua25vd259IHJlc291cmNlSWQgLSBSZXNvdXJjZSBpZGVudGlmaWVyLlxuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmcgfCBudWxsfSByZXNvdXJjZVR5cGUgLSBSZXNvdXJjZSB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZ30gc3luY1R5cGUgLSBTeW5jIG9wZXJhdGlvbiB0eXBlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NoYW5nZUFwcGx5UmVzdWx0XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNoYW5nZWQgLSBXaGV0aGVyIHRoZSBsb2NhbCBzdG9yZSBjaGFuZ2VkLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBbcmVzb3VyY2VUeXBlXSAtIEFwcGxpZWQgcmVzb3VyY2UgdHlwZSBvdmVycmlkZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN5bmNSZXNvdXJjZUNvbmZpZ1xuICogQHByb3BlcnR5IHsoYXJnczoge2F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcmVjb3JkOiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiwgc3luYzogU3luY0NoYW5nZUVudmVsb3BlfSkgPT4gUHJvbWlzZTxib29sZWFuIHwgdm9pZD4gfCBib29sZWFuIHwgdm9pZH0gW2FmdGVyQXBwbHldIC0gT3B0aW9uYWwgcG9zdC1zYXZlIGhvb2suXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7ZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlY29yZDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIHN5bmM6IFN5bmNDaGFuZ2VFbnZlbG9wZX0pID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IGF0dHJpYnV0ZXMgLSBBbGxvd2VkIGF0dHJpYnV0ZXMgYnVpbGRlci5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5hYmxlZCAtIFdoZXRoZXIgdGhpcyByZXNvdXJjZSBpcyBzeW5jLWVuYWJsZWQuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7ZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlc291cmNlSWQ6IHVua25vd24sIHN5bmM6IFN5bmNDaGFuZ2VFbnZlbG9wZX0pID0+IFByb21pc2U8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+IHwgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IFtmaW5kUmVjb3JkXSAtIE9wdGlvbmFsIHVwc2VydCBmaW5kZXIuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7cmVzb3VyY2VJZDogdW5rbm93biwgc3luYzogU3luY0NoYW5nZUVudmVsb3BlfSkgPT4gUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4gfCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gW2ZpbmRSZWNvcmRGb3JEZWxldGVdIC0gT3B0aW9uYWwgZGVzdHJveSBmaW5kZXIuXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBtb2RlbENsYXNzIC0gVmVsb2Npb3VzIG1vZGVsIGNsYXNzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NoYW5nZXNSZXF1ZXN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXV0aGVudGljYXRpb25Ub2tlbiAtIEF1dGggdG9rZW4uXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IFthZnRlcklkXSAtIExhc3Qgc2VlbiByb3cgaWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2FmdGVyU2VydmVyU2VxdWVuY2VdIC0gTGFzdCBzZWVuIHNlcnZlciBzZXF1ZW5jZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYWZ0ZXJVcGRhdGVkQXRdIC0gTGFzdCBzZWVuIHRpbWVzdGFtcC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsaW1pdCAtIFBhZ2Ugc2l6ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gW3VwVG9JZF0gLSBTbmFwc2hvdCB1cHBlci1ib3VuZCByb3cgaWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3VwVG9TZXJ2ZXJTZXF1ZW5jZV0gLSBTbmFwc2hvdCB1cHBlci1ib3VuZCBzZXJ2ZXIgc2VxdWVuY2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VwVG9VcGRhdGVkQXRdIC0gU25hcHNob3QgdXBwZXItYm91bmQgdGltZXN0YW1wLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NoYW5nZXNSZXNwb25zZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtlcnJvck1lc3NhZ2VdIC0gRXJyb3IgbWVzc2FnZS5cbiAqIEBwcm9wZXJ0eSB7U3luY0N1cnNvciB8IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW25leHRDdXJzb3JdIC0gTmV4dCBjdXJzb3IuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N0YXR1c10gLSBSZXNwb25zZSBzdGF0dXMuXG4gKiBAcHJvcGVydHkge0FycmF5PHVua25vd24+fSBbc3luY3NdIC0gU3luYyByb3dzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0b3RhbF0gLSBUb3RhbCBwZW5kaW5nIGNoYW5nZSBjb3VudCBmb3IgdGhlIHNjb3BlIGZyb20gdGhlIHJlcXVlc3QgY3Vyc29yIChhZGRpdGl2ZTsgYWJzZW50IG9uIG9sZGVyIHNlcnZlcnMpLlxuICogQHByb3BlcnR5IHtTeW5jQ3Vyc29yIHwgUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbdXBUb0N1cnNvcl0gLSBTbmFwc2hvdCB1cHBlci1ib3VuZCBjdXJzb3IuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jUHVsbFByb2dyZXNzXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGFnZXMgLSBBcHBsaWVkIHBhZ2UgY291bnQgc28gZmFyLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHN5bmNlZENvdW50IC0gQXBwbGllZCByb3cgY291bnQgc28gZmFyLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvdGFsIC0gVG90YWwgcGVuZGluZyBjaGFuZ2UgY291bnQgZm9yIHRoZSBwdWxsLCBzdGFibGUgYWNyb3NzIHBhZ2VzICgwIHdoZW4gbm90aGluZyB0byBzeW5jLCBudWxsLWZyZWUgb25jZSB0aGUgc2VydmVyIHJlcG9ydHMgaXQpLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NoYW5nZXNSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2hhbmdlZCAtIFdoZXRoZXIgYW55IGxvY2FsIHJlY29yZCBjaGFuZ2VkLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHBhZ2VzIC0gQXBwbGllZCBwYWdlIGNvdW50LlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBib29sZWFuPn0gcmVzb3VyY2VDaGFuZ2VkIC0gQ2hhbmdlZCBmbGFncyBieSByZXNvdXJjZSB0eXBlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBudW1iZXI+fSByZXNvdXJjZUNvdW50cyAtIEFwcGxpZWQgY291bnRzIGJ5IHJlc291cmNlIHR5cGUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3luY2VkQ291bnQgLSBBcHBsaWVkIHJvdyBjb3VudC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3RhbCAtIFRvdGFsIHBlbmRpbmcgY2hhbmdlIGNvdW50IGFjcm9zcyB0aGUgcHVsbGVkIHNjb3BlcyAodGhlIFwib2YgWVwiIGRlbm9taW5hdG9yIGZvciBhIHN5bmNlZENvdW50LW9mLXRvdGFsIHByb2dyZXNzIGJhcikuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jUmVwbGF5SXRlbVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gU3luYyBpZC5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbY29uZmxpY3RdIC0gU3RydWN0dXJlZCBkdXJhYmxlIGNvbmZsaWN0IHBheWxvYWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JlYXNvbl0gLSBSZWplY3Rpb24gcmVhc29uLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudW1iZXIgfCBudWxsfSBbc2VydmVyVmVyc2lvbl0gLSBBdXRob3JpdGF0aXZlIHZlcnNpb24gYWZ0ZXIgc3VjY2Vzc2Z1bCByZXBsYXkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3luY1N0YXRlIC0gUmVwbGF5IHN0YXRlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY1JlcGxheVJlc3BvbnNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Vycm9yTWVzc2FnZV0gLSBFcnJvciBtZXNzYWdlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzdGF0dXNdIC0gUmVzcG9uc2Ugc3RhdHVzLlxuICogQHByb3BlcnR5IHtBcnJheTxTeW5jUmVwbGF5SXRlbT59IFtzeW5jc10gLSBSZXBsYXkgcmVzdWx0cy5cbiAqL1xuXG5leHBvcnQge31cbiJdfQ==
@@ -13,6 +13,97 @@ export type SyncResourceConfig = import("./sync-api-client-types.js").SyncResour
13
13
  * persistence/auth hooks.
14
14
  */
15
15
  export default class SyncApiClient {
16
+ /**
17
+ * Appends one conflict-tracked intent to the existing durable mutation log.
18
+ * @param {object} args - Queue arguments.
19
+ * @param {string | number | null} args.baseVersion - Authoritative version observed before the local mutation.
20
+ * @param {import("./sync-client-types.js").SyncClientConflictTrackingConfig} args.conflictTracking - Durable tracking configuration.
21
+ * @param {Record<string, unknown>} args.data - Backend-safe mutation attributes.
22
+ * @param {"create" | "update" | "destroy"} args.operation - Local operation.
23
+ * @param {ReturnType<typeof JSON.parse>} args.resource - Local resource.
24
+ * @param {string} args.resourceType - Resource type.
25
+ * @param {string} args.syncType - Wire operation.
26
+ * @returns {Promise<import("./local-mutation-log.js").LocalMutationLogRecord>} Appended intent.
27
+ */
28
+ static queueConflictTrackedSync({ baseVersion, conflictTracking, data, operation, resource, resourceType, syncType }: {
29
+ baseVersion: string | number | null;
30
+ conflictTracking: import("./sync-client-types.js").SyncClientConflictTrackingConfig;
31
+ data: Record<string, unknown>;
32
+ operation: "create" | "update" | "destroy";
33
+ resource: ReturnType<typeof JSON.parse>;
34
+ resourceType: string;
35
+ syncType: string;
36
+ }): Promise<import("./local-mutation-log.js").LocalMutationLogRecord>;
37
+ /**
38
+ * Drains the existing mutation log in predecessor order. Independent records
39
+ * continue after durable conflicts/rejections; successors stay blocked.
40
+ * @param {object} args - Replay arguments.
41
+ * @param {string} args.authenticationToken - Authentication token.
42
+ * @param {number} [args.batchSize] - Batch size.
43
+ * @param {import("./sync-client-types.js").SyncClientConflictTrackingConfig} args.conflictTracking - Tracking configuration.
44
+ * @param {(payload: {authenticationToken: string, syncs: Array<Record<string, ReturnType<typeof JSON.parse>>>}) => Promise<SyncReplayResponse>} args.postReplay - Transport boundary.
45
+ * @param {(identity: string) => number} args.remoteGeneration - Current remote generation.
46
+ * @param {string} args.resourceType - Resource whose log records should drain.
47
+ * @returns {Promise<void>} Resolves when no ready intent remains.
48
+ */
49
+ static replayConflictTrackedSyncs({ authenticationToken, batchSize, conflictTracking, postReplay, remoteGeneration, resourceType }: {
50
+ authenticationToken: string;
51
+ batchSize?: number;
52
+ conflictTracking: import("./sync-client-types.js").SyncClientConflictTrackingConfig;
53
+ postReplay: (payload: {
54
+ authenticationToken: string;
55
+ syncs: Array<Record<string, ReturnType<typeof JSON.parse>>>;
56
+ }) => Promise<SyncReplayResponse>;
57
+ remoteGeneration: (identity: string) => number;
58
+ resourceType: string;
59
+ }): Promise<void>;
60
+ /**
61
+ * Builds safe transport groups from root-ready records and their successors.
62
+ * @param {{pending: Array<import("./local-mutation-log.js").LocalMutationLogRecord>, ready: Array<import("./local-mutation-log.js").LocalMutationLogRecord>}} args - Pending and root-ready records.
63
+ * @returns {Array<Array<import("./local-mutation-log.js").LocalMutationLogRecord>>} Safe transport groups.
64
+ */
65
+ static conflictReplayGroups({ pending, ready }: {
66
+ pending: Array<import("./local-mutation-log.js").LocalMutationLogRecord>;
67
+ ready: Array<import("./local-mutation-log.js").LocalMutationLogRecord>;
68
+ }): Array<Array<import("./local-mutation-log.js").LocalMutationLogRecord>>;
69
+ /**
70
+ * Checks whether two durable intents can share one transport mutation.
71
+ * @param {import("./local-mutation-log.js").LocalMutationLogRecord} left - Earlier intent.
72
+ * @param {import("./local-mutation-log.js").LocalMutationLogRecord} right - Later intent.
73
+ * @returns {boolean} Whether scalar updates can share one transport mutation.
74
+ */
75
+ static canCoalesceConflictRecords(left: import("./local-mutation-log.js").LocalMutationLogRecord, right: import("./local-mutation-log.js").LocalMutationLogRecord): boolean;
76
+ /**
77
+ * Checks whether attributes contain scalar JSON values only.
78
+ * @param {Record<string, import("../configuration-types.js").FrontendModelSyncJsonValue> | undefined} attributes - Attributes.
79
+ * @returns {boolean} Whether every value is scalar.
80
+ */
81
+ static scalarSyncAttributes(attributes: Record<string, import("../configuration-types.js").FrontendModelSyncJsonValue> | undefined): boolean;
82
+ /**
83
+ * Builds one replay envelope for a safe transport group.
84
+ * @param {Array<import("./local-mutation-log.js").LocalMutationLogRecord>} group - Transport group.
85
+ * @returns {Record<string, ReturnType<typeof JSON.parse>>} Replay envelope.
86
+ */
87
+ static conflictReplayPayload(group: Array<import("./local-mutation-log.js").LocalMutationLogRecord>): Record<string, ReturnType<typeof JSON.parse>>;
88
+ /**
89
+ * Builds a stable resource identity for ordering and remote generations.
90
+ * @param {import("./local-mutation-log.js").LocalMutationLogRecord} record - Record.
91
+ * @returns {string} Resource identity.
92
+ */
93
+ static conflictRecordIdentity(record: import("./local-mutation-log.js").LocalMutationLogRecord): string;
94
+ /**
95
+ * Rebases the direct pending successor from an authoritative acknowledgement.
96
+ * @param {object} args - Rebase args.
97
+ * @param {import("./sync-client-types.js").SyncClientConflictTrackingConfig} args.conflictTracking - Tracking config.
98
+ * @param {import("./local-mutation-log.js").LocalMutationLogRecord} args.predecessor - Acknowledged predecessor.
99
+ * @param {string | number | null} args.serverVersion - Authoritative server version.
100
+ * @returns {Promise<void>}
101
+ */
102
+ static rebaseConflictSuccessor({ conflictTracking, predecessor, serverVersion }: {
103
+ conflictTracking: import("./sync-client-types.js").SyncClientConflictTrackingConfig;
104
+ predecessor: import("./local-mutation-log.js").LocalMutationLogRecord;
105
+ serverVersion: string | number | null;
106
+ }): Promise<void>;
16
107
  /**
17
108
  * Serializes sync work with the same key so callers do not have to keep app-local locks.
18
109
  * @param {string} key - Lock key.