velocious 1.0.562 → 1.0.564

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 (245) hide show
  1. package/README.md +5 -1
  2. package/build/background-jobs/cron-expression.js +12 -13
  3. package/build/background-jobs/main.js +6 -6
  4. package/build/background-jobs/runner-graceful-shutdown.js +2 -3
  5. package/build/background-jobs/scheduler.js +3 -3
  6. package/build/background-jobs/worker.js +8 -9
  7. package/build/beacon/client.js +3 -4
  8. package/build/configuration-types.js +1 -0
  9. package/build/configuration.js +44 -3
  10. package/build/database/drivers/sqlite/web-persistence.js +2 -5
  11. package/build/database/pool/async-tracked-multi-connection.js +65 -15
  12. package/build/database/pool/base.js +23 -7
  13. package/build/database/query/index.js +21 -22
  14. package/build/database/query/model-class-query.js +5 -6
  15. package/build/database/record/attachments/normalize-input.js +9 -10
  16. package/build/database/record/attachments/store.js +2 -2
  17. package/build/database/record/auditing.js +7 -8
  18. package/build/database/record/index.js +4 -5
  19. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +1 -2
  20. package/build/frontend-model-controller.js +49 -56
  21. package/build/frontend-models/base.js +17 -19
  22. package/build/frontend-models/outgoing-event-buffer.js +3 -4
  23. package/build/frontend-models/query.js +40 -44
  24. package/build/frontend-models/resource-definition.js +7 -8
  25. package/build/frontend-models/transport-serialization.js +10 -12
  26. package/build/frontend-models/websocket-channel.js +12 -13
  27. package/build/http-server/client/websocket-session.js +7 -8
  28. package/build/http-server/client-delivery-queue.js +167 -0
  29. package/build/http-server/server-client.js +9 -0
  30. package/build/http-server/websocket-event-log-store.js +4 -6
  31. package/build/http-server/websocket-events-host.js +42 -12
  32. package/build/http-server/worker-handler/in-process.js +53 -14
  33. package/build/http-server/worker-handler/index.js +88 -18
  34. package/build/http-server/worker-handler/worker-thread.js +2 -2
  35. package/build/plugins/sqljs-wasm-route.js +3 -5
  36. package/build/src/background-jobs/cron-expression.d.ts +0 -12
  37. package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
  38. package/build/src/background-jobs/cron-expression.js +13 -13
  39. package/build/src/background-jobs/main.d.ts.map +1 -1
  40. package/build/src/background-jobs/main.js +7 -7
  41. package/build/src/background-jobs/runner-graceful-shutdown.d.ts +0 -6
  42. package/build/src/background-jobs/runner-graceful-shutdown.d.ts.map +1 -1
  43. package/build/src/background-jobs/runner-graceful-shutdown.js +3 -3
  44. package/build/src/background-jobs/scheduler.d.ts +0 -3
  45. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  46. package/build/src/background-jobs/scheduler.js +4 -4
  47. package/build/src/background-jobs/worker.d.ts +0 -8
  48. package/build/src/background-jobs/worker.d.ts.map +1 -1
  49. package/build/src/background-jobs/worker.js +9 -9
  50. package/build/src/beacon/client.d.ts +0 -4
  51. package/build/src/beacon/client.d.ts.map +1 -1
  52. package/build/src/beacon/client.js +4 -4
  53. package/build/src/configuration-types.d.ts +8 -0
  54. package/build/src/configuration-types.d.ts.map +1 -1
  55. package/build/src/configuration-types.js +2 -1
  56. package/build/src/configuration.d.ts +34 -1
  57. package/build/src/configuration.d.ts.map +1 -1
  58. package/build/src/configuration.js +40 -4
  59. package/build/src/database/drivers/sqlite/web-persistence.d.ts +0 -14
  60. package/build/src/database/drivers/sqlite/web-persistence.d.ts.map +1 -1
  61. package/build/src/database/drivers/sqlite/web-persistence.js +3 -3
  62. package/build/src/database/pool/async-tracked-multi-connection.d.ts +29 -1
  63. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  64. package/build/src/database/pool/async-tracked-multi-connection.js +57 -15
  65. package/build/src/database/pool/base.d.ts +53 -4
  66. package/build/src/database/pool/base.d.ts.map +1 -1
  67. package/build/src/database/pool/base.js +23 -6
  68. package/build/src/database/query/index.d.ts +18 -39
  69. package/build/src/database/query/index.d.ts.map +1 -1
  70. package/build/src/database/query/index.js +22 -22
  71. package/build/src/database/query/model-class-query.d.ts +0 -5
  72. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  73. package/build/src/database/query/model-class-query.js +6 -6
  74. package/build/src/database/record/attachments/normalize-input.d.ts +0 -9
  75. package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
  76. package/build/src/database/record/attachments/normalize-input.js +10 -10
  77. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  78. package/build/src/database/record/attachments/store.js +2 -2
  79. package/build/src/database/record/auditing.d.ts +17 -24
  80. package/build/src/database/record/auditing.d.ts.map +1 -1
  81. package/build/src/database/record/auditing.js +8 -8
  82. package/build/src/database/record/index.d.ts +4 -4
  83. package/build/src/database/record/index.d.ts.map +1 -1
  84. package/build/src/database/record/index.js +5 -5
  85. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +0 -39
  86. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  87. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +2 -2
  88. package/build/src/frontend-model-controller.d.ts +1 -1
  89. package/build/src/frontend-model-controller.d.ts.map +1 -1
  90. package/build/src/frontend-model-controller.js +50 -50
  91. package/build/src/frontend-models/base.d.ts.map +1 -1
  92. package/build/src/frontend-models/base.js +18 -18
  93. package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
  94. package/build/src/frontend-models/outgoing-event-buffer.js +3 -3
  95. package/build/src/frontend-models/query.d.ts +56 -37
  96. package/build/src/frontend-models/query.d.ts.map +1 -1
  97. package/build/src/frontend-models/query.js +39 -39
  98. package/build/src/frontend-models/resource-definition.d.ts +0 -7
  99. package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
  100. package/build/src/frontend-models/resource-definition.js +8 -8
  101. package/build/src/frontend-models/transport-serialization.d.ts +0 -10
  102. package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
  103. package/build/src/frontend-models/transport-serialization.js +11 -11
  104. package/build/src/frontend-models/websocket-channel.d.ts +0 -12
  105. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  106. package/build/src/frontend-models/websocket-channel.js +13 -13
  107. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  108. package/build/src/http-server/client/websocket-session.js +8 -8
  109. package/build/src/http-server/client-delivery-queue.d.ts +121 -0
  110. package/build/src/http-server/client-delivery-queue.d.ts.map +1 -0
  111. package/build/src/http-server/client-delivery-queue.js +152 -0
  112. package/build/src/http-server/server-client.d.ts +6 -0
  113. package/build/src/http-server/server-client.d.ts.map +1 -1
  114. package/build/src/http-server/server-client.js +10 -1
  115. package/build/src/http-server/websocket-event-log-store.d.ts +0 -14
  116. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
  117. package/build/src/http-server/websocket-event-log-store.js +5 -5
  118. package/build/src/http-server/websocket-events-host.d.ts +15 -4
  119. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  120. package/build/src/http-server/websocket-events-host.js +39 -13
  121. package/build/src/http-server/worker-handler/in-process.d.ts +19 -1
  122. package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
  123. package/build/src/http-server/worker-handler/in-process.js +50 -14
  124. package/build/src/http-server/worker-handler/index.d.ts +36 -4
  125. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  126. package/build/src/http-server/worker-handler/index.js +82 -18
  127. package/build/src/http-server/worker-handler/worker-thread.js +3 -3
  128. package/build/src/plugins/sqljs-wasm-route.d.ts.map +1 -1
  129. package/build/src/plugins/sqljs-wasm-route.js +4 -4
  130. package/build/src/sync/conflict-strategy.d.ts +0 -15
  131. package/build/src/sync/conflict-strategy.d.ts.map +1 -1
  132. package/build/src/sync/conflict-strategy.js +3 -3
  133. package/build/src/sync/device-identity.d.ts +0 -45
  134. package/build/src/sync/device-identity.d.ts.map +1 -1
  135. package/build/src/sync/device-identity.js +4 -4
  136. package/build/src/sync/local-mutation-log.d.ts +0 -41
  137. package/build/src/sync/local-mutation-log.d.ts.map +1 -1
  138. package/build/src/sync/local-mutation-log.js +9 -9
  139. package/build/src/sync/offline-grant.d.ts +0 -26
  140. package/build/src/sync/offline-grant.d.ts.map +1 -1
  141. package/build/src/sync/offline-grant.js +4 -4
  142. package/build/src/sync/peer-mutation-bundle.d.ts +0 -14
  143. package/build/src/sync/peer-mutation-bundle.d.ts.map +1 -1
  144. package/build/src/sync/peer-mutation-bundle.js +3 -3
  145. package/build/src/sync/server-change-feed.d.ts.map +1 -1
  146. package/build/src/sync/server-change-feed.js +33 -33
  147. package/build/src/sync/sync-api-client.d.ts +0 -9
  148. package/build/src/sync/sync-api-client.d.ts.map +1 -1
  149. package/build/src/sync/sync-api-client.js +2 -2
  150. package/build/src/sync/sync-envelope-replay-service.d.ts +38 -21
  151. package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
  152. package/build/src/sync/sync-envelope-replay-service.js +18 -18
  153. package/build/src/sync/sync-resource-base.d.ts +0 -7
  154. package/build/src/sync/sync-resource-base.d.ts.map +1 -1
  155. package/build/src/sync/sync-resource-base.js +2 -2
  156. package/build/src/sync/sync-scope-store.d.ts +0 -9
  157. package/build/src/sync/sync-scope-store.d.ts.map +1 -1
  158. package/build/src/sync/sync-scope-store.js +10 -10
  159. package/build/src/testing/test-filter-parser.d.ts +0 -10
  160. package/build/src/testing/test-filter-parser.d.ts.map +1 -1
  161. package/build/src/testing/test-filter-parser.js +11 -11
  162. package/build/src/testing/test-runner.d.ts +25 -91
  163. package/build/src/testing/test-runner.d.ts.map +1 -1
  164. package/build/src/testing/test-runner.js +113 -98
  165. package/build/src/testing/test.d.ts +8 -0
  166. package/build/src/testing/test.d.ts.map +1 -1
  167. package/build/src/testing/test.js +9 -9
  168. package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
  169. package/build/src/utils/backtrace-cleaner.js +9 -9
  170. package/build/src/utils/model-scope.d.ts +0 -8
  171. package/build/src/utils/model-scope.d.ts.map +1 -1
  172. package/build/src/utils/model-scope.js +3 -3
  173. package/build/src/utils/ransack.d.ts +52 -19
  174. package/build/src/utils/ransack.d.ts.map +1 -1
  175. package/build/src/utils/ransack.js +26 -26
  176. package/build/sync/conflict-strategy.js +3 -6
  177. package/build/sync/device-identity.js +4 -9
  178. package/build/sync/local-mutation-log.js +9 -14
  179. package/build/sync/offline-grant.js +4 -7
  180. package/build/sync/peer-mutation-bundle.js +2 -4
  181. package/build/sync/server-change-feed.js +32 -34
  182. package/build/sync/sync-api-client.js +1 -2
  183. package/build/sync/sync-envelope-replay-service.js +17 -19
  184. package/build/sync/sync-resource-base.js +1 -2
  185. package/build/sync/sync-scope-store.js +9 -10
  186. package/build/testing/test-filter-parser.js +10 -11
  187. package/build/testing/test-runner.js +116 -108
  188. package/build/testing/test.js +8 -9
  189. package/build/tsconfig.tsbuildinfo +1 -1
  190. package/build/utils/backtrace-cleaner.js +8 -9
  191. package/build/utils/model-scope.js +3 -4
  192. package/build/utils/ransack.js +27 -34
  193. package/package.json +3 -1
  194. package/scripts/eslint-rules/typedefs-first.js +67 -0
  195. package/scripts/prewarm-chromedriver.js +26 -0
  196. package/src/background-jobs/cron-expression.js +12 -13
  197. package/src/background-jobs/main.js +6 -6
  198. package/src/background-jobs/runner-graceful-shutdown.js +2 -3
  199. package/src/background-jobs/scheduler.js +3 -3
  200. package/src/background-jobs/worker.js +8 -9
  201. package/src/beacon/client.js +3 -4
  202. package/src/configuration-types.js +1 -0
  203. package/src/configuration.js +44 -3
  204. package/src/database/drivers/sqlite/web-persistence.js +2 -5
  205. package/src/database/pool/async-tracked-multi-connection.js +65 -15
  206. package/src/database/pool/base.js +23 -7
  207. package/src/database/query/index.js +21 -22
  208. package/src/database/query/model-class-query.js +5 -6
  209. package/src/database/record/attachments/normalize-input.js +9 -10
  210. package/src/database/record/attachments/store.js +2 -2
  211. package/src/database/record/auditing.js +7 -8
  212. package/src/database/record/index.js +4 -5
  213. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +1 -2
  214. package/src/frontend-model-controller.js +49 -56
  215. package/src/frontend-models/base.js +17 -19
  216. package/src/frontend-models/outgoing-event-buffer.js +3 -4
  217. package/src/frontend-models/query.js +40 -44
  218. package/src/frontend-models/resource-definition.js +7 -8
  219. package/src/frontend-models/transport-serialization.js +10 -12
  220. package/src/frontend-models/websocket-channel.js +12 -13
  221. package/src/http-server/client/websocket-session.js +7 -8
  222. package/src/http-server/client-delivery-queue.js +167 -0
  223. package/src/http-server/server-client.js +9 -0
  224. package/src/http-server/websocket-event-log-store.js +4 -6
  225. package/src/http-server/websocket-events-host.js +42 -12
  226. package/src/http-server/worker-handler/in-process.js +53 -14
  227. package/src/http-server/worker-handler/index.js +88 -18
  228. package/src/http-server/worker-handler/worker-thread.js +2 -2
  229. package/src/plugins/sqljs-wasm-route.js +3 -5
  230. package/src/sync/conflict-strategy.js +3 -6
  231. package/src/sync/device-identity.js +4 -9
  232. package/src/sync/local-mutation-log.js +9 -14
  233. package/src/sync/offline-grant.js +4 -7
  234. package/src/sync/peer-mutation-bundle.js +2 -4
  235. package/src/sync/server-change-feed.js +32 -34
  236. package/src/sync/sync-api-client.js +1 -2
  237. package/src/sync/sync-envelope-replay-service.js +17 -19
  238. package/src/sync/sync-resource-base.js +1 -2
  239. package/src/sync/sync-scope-store.js +9 -10
  240. package/src/testing/test-filter-parser.js +10 -11
  241. package/src/testing/test-runner.js +116 -108
  242. package/src/testing/test.js +8 -9
  243. package/src/utils/backtrace-cleaner.js +8 -9
  244. package/src/utils/model-scope.js +3 -4
  245. package/src/utils/ransack.js +27 -34
@@ -1,11 +1,3 @@
1
- // @ts-check
2
- const DEFAULT_STORAGE_KEY = "velocious.sync.localMutationLog";
3
- const PENDING_STATUS_VALUES = /** @type {LocalMutationStatus[]} */ (["pending", "applied-locally", "peer-applied"]);
4
- const PENDING_STATUSES = new Set(PENDING_STATUS_VALUES);
5
- const MUTATION_STATUSES = new Set([...PENDING_STATUSES, "conflict", "rejected", "synced"]);
6
- const TERMINAL_STATUSES = new Set(["rejected", "synced"]);
7
- /** @type {Map<string, Promise<unknown>>} */
8
- const STORAGE_KEY_LOCKS = new Map();
9
1
  /**
10
2
  * Local mutation log record query options.
11
3
  * @typedef {object} LocalMutationLogRecordsOptions
@@ -47,6 +39,14 @@ const STORAGE_KEY_LOCKS = new Map();
47
39
  * @property {Record<string, import("../configuration-types.js").FrontendModelSyncJsonValue>} [syncResult] - Backend replay/result metadata.
48
40
  * @property {string} updatedAt - ISO timestamp when the record was last changed.
49
41
  */
42
+ // @ts-check
43
+ const DEFAULT_STORAGE_KEY = "velocious.sync.localMutationLog";
44
+ const PENDING_STATUS_VALUES = /** @type {LocalMutationStatus[]} */ (["pending", "applied-locally", "peer-applied"]);
45
+ const PENDING_STATUSES = new Set(PENDING_STATUS_VALUES);
46
+ const MUTATION_STATUSES = new Set([...PENDING_STATUSES, "conflict", "rejected", "synced"]);
47
+ const TERMINAL_STATUSES = new Set(["rejected", "synced"]);
48
+ /** @type {Map<string, Promise<unknown>>} */
49
+ const STORAGE_KEY_LOCKS = new Map();
50
50
  /** Client-side append-only sync mutation log with pluggable persistent storage. */
51
51
  export default class LocalMutationLog {
52
52
  /**
@@ -400,4 +400,4 @@ function randomRecordId() {
400
400
  return cryptoProvider.randomUUID();
401
401
  return `local-mutation-${Date.now()}-${Math.random().toString(16).slice(2)}`;
402
402
  }
403
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbXV0YXRpb24tbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvbG9jYWwtbXV0YXRpb24tbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixNQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFBO0FBQzdELE1BQU0scUJBQXFCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3pELDRDQUE0QztBQUM1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFbkM7Ozs7R0FJRztBQUVIOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFFSDs7Ozs7R0FLRztBQUVIOzs7S0FHSztBQUVMOzs7Ozs7Ozs7OztHQVdHO0FBRUgsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWdCO0lBQ25DOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsV0FBVyxHQUFHLGNBQWMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxHQUFHLG1CQUFtQixFQUFDO1FBQzNHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLGdIQUFnSCxDQUFDLENBQUE7UUFD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QU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmNvbnN0IERFRkFVTFRfU1RPUkFHRV9LRVkgPSBcInZlbG9jaW91cy5zeW5jLmxvY2FsTXV0YXRpb25Mb2dcIlxuY29uc3QgUEVORElOR19TVEFUVVNfVkFMVUVTID0gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzW119ICovIChbXCJwZW5kaW5nXCIsIFwiYXBwbGllZC1sb2NhbGx5XCIsIFwicGVlci1hcHBsaWVkXCJdKVxuY29uc3QgUEVORElOR19TVEFUVVNFUyA9IG5ldyBTZXQoUEVORElOR19TVEFUVVNfVkFMVUVTKVxuY29uc3QgTVVUQVRJT05fU1RBVFVTRVMgPSBuZXcgU2V0KFsuLi5QRU5ESU5HX1NUQVRVU0VTLCBcImNvbmZsaWN0XCIsIFwicmVqZWN0ZWRcIiwgXCJzeW5jZWRcIl0pXG5jb25zdCBURVJNSU5BTF9TVEFUVVNFUyA9IG5ldyBTZXQoW1wicmVqZWN0ZWRcIiwgXCJzeW5jZWRcIl0pXG4vKiogQHR5cGUge01hcDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+fSAqL1xuY29uc3QgU1RPUkFHRV9LRVlfTE9DS1MgPSBuZXcgTWFwKClcblxuLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkIHF1ZXJ5IG9wdGlvbnMuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nUmVjb3Jkc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvblN0YXR1c1tdfSBbc3RhdHVzZXNdIC0gT3B0aW9uYWwgc3RhdHVzIGZpbHRlci5cbiAqL1xuXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyByb3ctb3JpZW50ZWQgc3RvcmFnZSBhZGFwdGVyLlxuICpcbiAqIEltcGxlbWVudGF0aW9ucyBzaG91bGQgc3RvcmUgZWFjaCBtdXRhdGlvbiBsb2cgcmVjb3JkIGFzIGl0cyBvd24gcm93L2VudHJ5LlxuICogTmF0aXZlIGFwcHMgc2hvdWxkIGJhY2sgdGhpcyB3aXRoIFNRTGl0ZSBhbmQgaW5kZXhlcyBvbiBzdG9yYWdlIGtleSwgc3RhdHVzLFxuICogYW5kIHNlcXVlbmNlLiBBdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBsb2cgYXMgb25lIEpTT04gYmxvYi5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvY2FsTXV0YXRpb25Mb2dTdG9yYWdlXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIHJlY29yZDogTG9jYWxNdXRhdGlvbkxvZ1JlY29yZCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IGFwcGVuZFJlY29yZCAtIEFwcGVuZHMgb25lIGxvZyByZWNvcmQuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIGlkczogc3RyaW5nW10pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSBkZWxldGVSZWNvcmRzIC0gRGVsZXRlcyBsb2cgcmVjb3JkcyBieSBpZC5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZykgPT4gUHJvbWlzZTxudW1iZXI+IHwgbnVtYmVyfSBuZXh0U2VxdWVuY2UgLSBSZXR1cm5zIHRoZSBuZXh0IGxvY2FsIHNlcXVlbmNlIG51bWJlci5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgaWQ6IHN0cmluZykgPT4gUHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkIHwgbnVsbCB8IHVuZGVmaW5lZD4gfCBMb2NhbE11dGF0aW9uTG9nUmVjb3JkIHwgbnVsbCB8IHVuZGVmaW5lZH0gcmVjb3JkIC0gUmVhZHMgb25lIGxvZyByZWNvcmQgYnkgaWQuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBMb2NhbE11dGF0aW9uTG9nUmVjb3Jkc09wdGlvbnMpID0+IFByb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdPiB8IExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXX0gcmVjb3JkcyAtIFJlYWRzIGxvZyByZWNvcmRzLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCByZWNvcmQ6IExvY2FsTXV0YXRpb25Mb2dSZWNvcmQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSB1cGRhdGVSZWNvcmQgLSBSZXBsYWNlcyBvbmUgbG9nIHJlY29yZC5cbiAqL1xuXG4vKipcbiAqIExvY2FsIHN5bmMgbXV0YXRpb24gZGVwZW5kZW5jeSBtZXRhZGF0YS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvY2FsTXV0YXRpb25EZXBlbmRlbmN5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2xpZW50TXV0YXRpb25JZCAtIENsaWVudCBtdXRhdGlvbiBpZCB0aGlzIG11dGF0aW9uIGRlcGVuZHMgb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZWwgLSBEZXBlbmRlbnQgbW9kZWwvcmVzb3VyY2UgbmFtZS5cbiAqL1xuXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyBzdGF0dXMuXG4gKiBAdHlwZWRlZiB7XCJwZW5kaW5nXCIgfCBcImFwcGxpZWQtbG9jYWxseVwiIHwgXCJwZWVyLWFwcGxpZWRcIiB8IFwiY29uZmxpY3RcIiB8IFwicmVqZWN0ZWRcIiB8IFwic3luY2VkXCJ9IExvY2FsTXV0YXRpb25TdGF0dXNcbiAqICovXG5cbi8qKlxuICogTG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvY2FsTXV0YXRpb25Mb2dSZWNvcmRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcmVhdGVkQXQgLSBJU08gdGltZXN0YW1wIHdoZW4gdGhlIHJlY29yZCB3YXMgY3JlYXRlZCBsb2NhbGx5LlxuICogQHByb3BlcnR5IHtMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVtdfSBkZXBlbmRlbmNpZXMgLSBPdGhlciBsb2NhbCBtdXRhdGlvbnMgdGhhdCBtdXN0IHJlcGxheSBmaXJzdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIExvY2FsIGxvZyByZWNvcmQgaWQuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gbXV0YXRpb24gLSBEZXZpY2UgbXV0YXRpb24gcGF5bG9hZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzZXF1ZW5jZSAtIE1vbm90b25pYyBsb2NhbCBzZXF1ZW5jZS5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvblN0YXR1c30gc3RhdHVzIC0gTG9jYWwgcmVwbGF5L2FwcGx5IHN0YXR1cy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFtzeW5jUmVzdWx0XSAtIEJhY2tlbmQgcmVwbGF5L3Jlc3VsdCBtZXRhZGF0YS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cGRhdGVkQXQgLSBJU08gdGltZXN0YW1wIHdoZW4gdGhlIHJlY29yZCB3YXMgbGFzdCBjaGFuZ2VkLlxuICovXG5cbi8qKiBDbGllbnQtc2lkZSBhcHBlbmQtb25seSBzeW5jIG11dGF0aW9uIGxvZyB3aXRoIHBsdWdnYWJsZSBwZXJzaXN0ZW50IHN0b3JhZ2UuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2NhbE11dGF0aW9uTG9nIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBsb2NhbCBtdXRhdGlvbiBsb2cuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0geygpID0+IHN0cmluZ30gW2FyZ3MuaWRHZW5lcmF0b3JdIC0gUmVjb3JkIGlkIGdlbmVyYXRvci5cbiAgICogQHBhcmFtIHsoKSA9PiBEYXRlfSBbYXJncy5ub3ddIC0gQ2xvY2sgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1N0b3JhZ2V9IGFyZ3Muc3RvcmFnZSAtIFBlcnNpc3RlbnQgc3RvcmFnZSBhZGFwdGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3RvcmFnZUtleV0gLSBTdG9yYWdlIGtleS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtpZEdlbmVyYXRvciA9IHJhbmRvbVJlY29yZElkLCBub3cgPSAoKSA9PiBuZXcgRGF0ZSgpLCBzdG9yYWdlLCBzdG9yYWdlS2V5ID0gREVGQVVMVF9TVE9SQUdFX0tFWX0pIHtcbiAgICBpZiAoIXZhbGlkU3RvcmFnZShzdG9yYWdlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9jYWxNdXRhdGlvbkxvZyByZXF1aXJlcyByb3cgc3RvcmFnZSB3aXRoIGFwcGVuZFJlY29yZC9kZWxldGVSZWNvcmRzL25leHRTZXF1ZW5jZS9yZWNvcmQvcmVjb3Jkcy91cGRhdGVSZWNvcmRcIilcbiAgICB9XG5cbiAgICB0aGlzLmlkR2VuZXJhdG9yID0gaWRHZW5lcmF0b3JcbiAgICB0aGlzLm5vdyA9IG5vd1xuICAgIHRoaXMuc3RvcmFnZSA9IHN0b3JhZ2VcbiAgICB0aGlzLnN0b3JhZ2VLZXkgPSBzdG9yYWdlS2V5XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIHBlbmRpbmcgbXV0YXRpb24gcmVjb3JkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVtdfSBbYXJncy5kZXBlbmRlbmNpZXNdIC0gTXV0YXRpb24gZGVwZW5kZW5jaWVzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gYXJncy5tdXRhdGlvbiAtIE11dGF0aW9uIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSAtIENyZWF0ZWQgbG9nIHJlY29yZC5cbiAgICovXG4gIGFzeW5jIGFwcGVuZCh7ZGVwZW5kZW5jaWVzID0gW10sIG11dGF0aW9ufSkge1xuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHtcbiAgICAgICAgY3JlYXRlZEF0OiB0aW1lc3RhbXAsXG4gICAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICAgaWQ6IHRoaXMuaWRHZW5lcmF0b3IoKSxcbiAgICAgICAgbXV0YXRpb24sXG4gICAgICAgIHNlcXVlbmNlOiBhd2FpdCB0aGlzLnN0b3JhZ2UubmV4dFNlcXVlbmNlKHRoaXMuc3RvcmFnZUtleSksXG4gICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgIHVwZGF0ZWRBdDogdGltZXN0YW1wXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UuYXBwZW5kUmVjb3JkKHRoaXMuc3RvcmFnZUtleSwgY2xvbmVSZWNvcmQocmVjb3JkKSlcblxuICAgICAgcmV0dXJuIGNsb25lUmVjb3JkKHJlY29yZClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHJlY29yZHMgb3JkZXJlZCBieSBsb2NhbCBzZXF1ZW5jZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdPn0gLSBMb2cgcmVjb3Jkcy5cbiAgICovXG4gIGFzeW5jIHJlY29yZHMoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVJlY29yZExpc3QoYXdhaXQgdGhpcy5zdG9yYWdlLnJlY29yZHModGhpcy5zdG9yYWdlS2V5KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHJlY29yZHMgdGhhdCBzdGlsbCBuZWVkIGxvY2FsL3NlcnZlciByZWNvbmNpbGlhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdPn0gLSBQZW5kaW5nIHJlY29yZHMuXG4gICAqL1xuICBhc3luYyBwZW5kaW5nUmVjb3JkcygpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplUmVjb3JkTGlzdChhd2FpdCB0aGlzLnN0b3JhZ2UucmVjb3Jkcyh0aGlzLnN0b3JhZ2VLZXksIHtzdGF0dXNlczogUEVORElOR19TVEFUVVNfVkFMVUVTfSkpXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHJlY29yZCBzdGF0dXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5pZCAtIFJlY29yZCBpZC5cbiAgICogQHBhcmFtIHtMb2NhbE11dGF0aW9uU3RhdHVzfSBhcmdzLnN0YXR1cyAtIE5ldyBzdGF0dXMuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFthcmdzLnN5bmNSZXN1bHRdIC0gUmVzdWx0IG1ldGFkYXRhLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkPn0gLSBVcGRhdGVkIHJlY29yZC5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVN0YXR1cyh7aWQsIHN0YXR1cywgc3luY1Jlc3VsdH0pIHtcbiAgICBpZiAoIU1VVEFUSU9OX1NUQVRVU0VTLmhhcyhzdGF0dXMpKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbG9jYWwgbXV0YXRpb24gc3RhdHVzICcke3N0YXR1c30nYClcblxuICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmFnZUtleUxvY2sodGhpcy5zdG9yYWdlS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByYXdSZWNvcmQgPSBhd2FpdCB0aGlzLnN0b3JhZ2UucmVjb3JkKHRoaXMuc3RvcmFnZUtleSwgaWQpXG5cbiAgICAgIGlmICghcmF3UmVjb3JkKSB0aHJvdyBuZXcgRXJyb3IoYE5vIGxvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQgJyR7aWR9J2ApXG5cbiAgICAgIGNvbnN0IHJlY29yZCA9IG5vcm1hbGl6ZVJlY29yZChyYXdSZWNvcmQpXG5cbiAgICAgIHJlY29yZC5zdGF0dXMgPSAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25TdGF0dXN9ICovIChzdGF0dXMpXG4gICAgICBpZiAoc3luY1Jlc3VsdCAhPT0gdW5kZWZpbmVkKSByZWNvcmQuc3luY1Jlc3VsdCA9IGNsb25lSnNvbk9iamVjdChzeW5jUmVzdWx0LCBcInN5bmNSZXN1bHRcIilcbiAgICAgIHJlY29yZC51cGRhdGVkQXQgPSB0aGlzLmN1cnJlbnRUaW1lc3RhbXAoKVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnVwZGF0ZVJlY29yZCh0aGlzLnN0b3JhZ2VLZXksIGNsb25lUmVjb3JkKHJlY29yZCkpXG5cbiAgICAgIHJldHVybiBjbG9uZVJlY29yZChyZWNvcmQpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBQcnVuZXMgdGVybWluYWwgcmVjb3JkcyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkIGZvciByZXBsYXkgZGVwZW5kZW5jaWVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gQ29tcGFjdGlvbiBvcHRpb25zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4VGVybWluYWxSZWNvcmRzXSAtIE1heGltdW0gdGVybWluYWwgcmVjb3JkcyB0byByZXRhaW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy50ZXJtaW5hbFJldGVudGlvbk1zXSAtIE1pbmltdW0gYWdlIGJlZm9yZSBwcnVuaW5nIHRlcm1pbmFsIHJlY29yZHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtkZWxldGVkUmVjb3JkSWRzOiBzdHJpbmdbXX0+fSAtIENvbXBhY3Rpb24gcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY29tcGFjdCh7bWF4VGVybWluYWxSZWNvcmRzLCB0ZXJtaW5hbFJldGVudGlvbk1zfSA9IHt9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZHMgPSBhd2FpdCB0aGlzLnJlY29yZHMoKVxuICAgICAgY29uc3QgcHJvdGVjdGVkQ2xpZW50TXV0YXRpb25JZHMgPSBuZXcgU2V0KFxuICAgICAgICByZWNvcmRzXG4gICAgICAgICAgLmZpbHRlcigocmVjb3JkKSA9PiBQRU5ESU5HX1NUQVRVU0VTLmhhcyhyZWNvcmQuc3RhdHVzKSB8fCByZWNvcmQuc3RhdHVzID09PSBcImNvbmZsaWN0XCIpXG4gICAgICAgICAgLmZsYXRNYXAoKHJlY29yZCkgPT4gcmVjb3JkLmRlcGVuZGVuY2llcy5tYXAoKGRlcGVuZGVuY3kpID0+IGRlcGVuZGVuY3kuY2xpZW50TXV0YXRpb25JZCkpXG4gICAgICApXG4gICAgICBjb25zdCB0ZXJtaW5hbFJlY29yZHMgPSByZWNvcmRzXG4gICAgICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gVEVSTUlOQUxfU1RBVFVTRVMuaGFzKHJlY29yZC5zdGF0dXMpKVxuICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+ICFwcm90ZWN0ZWRDbGllbnRNdXRhdGlvbklkcy5oYXMocmVjb3JkLm11dGF0aW9uLmNsaWVudE11dGF0aW9uSWQpKVxuICAgICAgICAuc29ydChjb21wYXJlUmVjb3Jkc05ld2VzdEZpcnN0KVxuICAgICAgY29uc3QgZGVsZXRlSWRzID0gbmV3IFNldCgpXG5cbiAgICAgIGlmICh0eXBlb2YgbWF4VGVybWluYWxSZWNvcmRzID09PSBcIm51bWJlclwiICYmIG1heFRlcm1pbmFsUmVjb3JkcyA+PSAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHRlcm1pbmFsUmVjb3Jkcy5zbGljZShtYXhUZXJtaW5hbFJlY29yZHMpKSBkZWxldGVJZHMuYWRkKHJlY29yZC5pZClcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0ZXJtaW5hbFJldGVudGlvbk1zID09PSBcIm51bWJlclwiICYmIHRlcm1pbmFsUmV0ZW50aW9uTXMgPj0gMCkge1xuICAgICAgICBjb25zdCBjdXRvZmYgPSB0aGlzLm5vdygpLmdldFRpbWUoKSAtIHRlcm1pbmFsUmV0ZW50aW9uTXNcblxuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiB0ZXJtaW5hbFJlY29yZHMpIHtcbiAgICAgICAgICBpZiAobmV3IERhdGUocmVjb3JkLnVwZGF0ZWRBdCkuZ2V0VGltZSgpIDwgY3V0b2ZmKSBkZWxldGVJZHMuYWRkKHJlY29yZC5pZClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWxldGVkUmVjb3JkSWRzID0gQXJyYXkuZnJvbShkZWxldGVJZHMpXG5cbiAgICAgIGlmIChkZWxldGVkUmVjb3JkSWRzLmxlbmd0aCA+IDApIGF3YWl0IHRoaXMuc3RvcmFnZS5kZWxldGVSZWNvcmRzKHRoaXMuc3RvcmFnZUtleSwgZGVsZXRlZFJlY29yZElkcylcblxuICAgICAgcmV0dXJuIHtkZWxldGVkUmVjb3JkSWRzfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBsb2cgdGltZXN0YW1wLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEN1cnJlbnQgSVNPIHRpbWVzdGFtcC5cbiAgICovXG4gIGN1cnJlbnRUaW1lc3RhbXAoKSB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMubm93KClcblxuICAgIGlmICghKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB8fCBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB0aHJvdyBuZXcgRXJyb3IoXCJMb2NhbE11dGF0aW9uTG9nIG5vdygpIG11c3QgcmV0dXJuIGEgdmFsaWQgRGF0ZVwiKVxuXG4gICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBzdG9yYWdlIGFkYXB0ZXIgaGFzIGFsbCByZXF1aXJlZCByb3ctc3RvcmUgbWV0aG9kcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gc3RvcmFnZSAtIFN0b3JhZ2UgYWRhcHRlciBjYW5kaWRhdGUuXG4gKiBAcmV0dXJucyB7c3RvcmFnZSBpcyBMb2NhbE11dGF0aW9uTG9nU3RvcmFnZX0gLSBXaGV0aGVyIHN0b3JhZ2UgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkU3RvcmFnZShzdG9yYWdlKSB7XG4gIGlmICghc3RvcmFnZSB8fCB0eXBlb2Ygc3RvcmFnZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qgc3RvcmFnZU9iamVjdCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovIChzdG9yYWdlKVxuXG4gIHJldHVybiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5hcHBlbmRSZWNvcmQgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0LmRlbGV0ZVJlY29yZHMgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0Lm5leHRTZXF1ZW5jZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QucmVjb3JkID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5yZWNvcmRzID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC51cGRhdGVSZWNvcmQgPT09IFwiZnVuY3Rpb25cIlxufVxuXG4vKipcbiAqIFNvcnRzIHJlY29yZHMgYnkgbmV3ZXN0IHVwZGF0ZS9zZXF1ZW5jZSBmaXJzdC5cbiAqIEBwYXJhbSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gbGVmdCAtIExlZnQgcmVjb3JkLlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSByaWdodCAtIFJpZ2h0IHJlY29yZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gU29ydCByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVSZWNvcmRzTmV3ZXN0Rmlyc3QobGVmdCwgcmlnaHQpIHtcbiAgY29uc3QgdXBkYXRlZEF0Q29tcGFyaXNvbiA9IHJpZ2h0LnVwZGF0ZWRBdC5sb2NhbGVDb21wYXJlKGxlZnQudXBkYXRlZEF0KVxuXG4gIGlmICh1cGRhdGVkQXRDb21wYXJpc29uICE9PSAwKSByZXR1cm4gdXBkYXRlZEF0Q29tcGFyaXNvblxuXG4gIHJldHVybiByaWdodC5zZXF1ZW5jZSAtIGxlZnQuc2VxdWVuY2Vcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGFuZCBzb3J0cyBhIGxpc3Qgb2YgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVjb3JkcyAtIFJhdyByZWNvcmRzLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXX0gLSBOb3JtYWxpemVkIHJlY29yZHMuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlY29yZExpc3QocmVjb3Jkcykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVjb3JkcykpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGxvZyBzdG9yYWdlIHJlY29yZHMgYXJyYXlcIilcblxuICByZXR1cm4gcmVjb3Jkc1xuICAgIC5tYXAobm9ybWFsaXplUmVjb3JkKVxuICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5zZXF1ZW5jZSAtIHJpZ2h0LnNlcXVlbmNlKVxuICAgIC5tYXAoKHJlY29yZCkgPT4gY2xvbmVSZWNvcmQocmVjb3JkKSlcbn1cblxuLyoqXG4gKiBSdW5zIGEgY2FsbGJhY2sgYWZ0ZXIgZWFybGllciB3cml0ZXMgZm9yIHRoZSBzYW1lIHN0b3JhZ2Uga2V5IGhhdmUgY29tcGxldGVkLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9yYWdlS2V5IC0gU3RvcmFnZSBrZXkgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPFQ+fSBjYWxsYmFjayAtIENhbGxiYWNrIHRvIHJ1biB1bmRlciB0aGUgc3RvcmFnZS1rZXkgbG9jay5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIENhbGxiYWNrIHJlc3VsdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2l0aFN0b3JhZ2VLZXlMb2NrKHN0b3JhZ2VLZXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gU1RPUkFHRV9LRVlfTE9DS1MuZ2V0KHN0b3JhZ2VLZXkpIHx8IFByb21pc2UucmVzb2x2ZSgpXG4gIGxldCByZWxlYXNlID0gKCkgPT4ge31cbiAgY29uc3QgY3VycmVudCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7IHJlbGVhc2UgPSAoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkgfSlcbiAgY29uc3QgY2hhaW5lZCA9IHByZXZpb3VzLmNhdGNoKChfZXJyb3IpID0+IHt9KS50aGVuKCgpID0+IGN1cnJlbnQpXG5cbiAgU1RPUkFHRV9LRVlfTE9DS1Muc2V0KHN0b3JhZ2VLZXksIGNoYWluZWQpXG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwcmV2aW91cy5jYXRjaCgoX2Vycm9yKSA9PiB7fSlcblxuICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG4gIH0gZmluYWxseSB7XG4gICAgcmVsZWFzZSgpXG4gICAgaWYgKFNUT1JBR0VfS0VZX0xPQ0tTLmdldChzdG9yYWdlS2V5KSA9PT0gY2hhaW5lZCkgU1RPUkFHRV9LRVlfTE9DS1MuZGVsZXRlKHN0b3JhZ2VLZXkpXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGVyc2lzdGVkIGxvZyByZWNvcmQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHJlY29yZC5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAtIE5vcm1hbGl6ZWQgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSZWNvcmQodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQgb2JqZWN0XCIpXG5cbiAgY29uc3QgcmVjb3JkID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuICBjb25zdCBzdGF0dXMgPSByZXF1aXJlZFN0cmluZyhyZWNvcmQuc3RhdHVzLCBcInN0YXR1c1wiKVxuXG4gIGlmICghTVVUQVRJT05fU1RBVFVTRVMuaGFzKHN0YXR1cykpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsb2NhbCBtdXRhdGlvbiBzdGF0dXMgJyR7c3RhdHVzfSdgKVxuXG4gIGNvbnN0IGJhc2VSZWNvcmQgPSB7XG4gICAgY3JlYXRlZEF0OiByZXF1aXJlZElzb1RpbWVzdGFtcChyZWNvcmQuY3JlYXRlZEF0LCBcImNyZWF0ZWRBdFwiKSxcbiAgICBkZXBlbmRlbmNpZXM6IG5vcm1hbGl6ZURlcGVuZGVuY2llcyhyZWNvcmQuZGVwZW5kZW5jaWVzKSxcbiAgICBpZDogcmVxdWlyZWRTdHJpbmcocmVjb3JkLmlkLCBcImlkXCIpLFxuICAgIG11dGF0aW9uOiBub3JtYWxpemVNdXRhdGlvbihyZWNvcmQubXV0YXRpb24pLFxuICAgIHNlcXVlbmNlOiByZXF1aXJlZFBvc2l0aXZlSW50ZWdlcihyZWNvcmQuc2VxdWVuY2UsIFwic2VxdWVuY2VcIiksXG4gICAgc3RhdHVzOiAvKiogQHR5cGUge0xvY2FsTXV0YXRpb25TdGF0dXN9ICovIChzdGF0dXMpLFxuICAgIHVwZGF0ZWRBdDogcmVxdWlyZWRJc29UaW1lc3RhbXAocmVjb3JkLnVwZGF0ZWRBdCwgXCJ1cGRhdGVkQXRcIilcbiAgfVxuXG4gIGlmIChyZWNvcmQuc3luY1Jlc3VsdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gYmFzZVJlY29yZFxuXG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVJlY29yZCxcbiAgICBzeW5jUmVzdWx0OiBjbG9uZUpzb25PYmplY3QocmVjb3JkLnN5bmNSZXN1bHQsIFwic3luY1Jlc3VsdFwiKVxuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBkZXBlbmRlbmN5IG1ldGFkYXRhIGVudHJpZXMuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IGRlcGVuZGVuY2llcy5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uRGVwZW5kZW5jeVtdfSAtIE5vcm1hbGl6ZWQgZGVwZW5kZW5jaWVzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEZXBlbmRlbmNpZXModmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBbXVxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiBkZXBlbmRlbmNpZXMgYXJyYXlcIilcblxuICByZXR1cm4gdmFsdWUubWFwKChkZXBlbmRlbmN5KSA9PiB7XG4gICAgaWYgKCFkZXBlbmRlbmN5IHx8IHR5cGVvZiBkZXBlbmRlbmN5ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGRlcGVuZGVuY3kgb2JqZWN0XCIpXG4gICAgfVxuXG4gICAgY29uc3QgZGVwZW5kZW5jeU9iamVjdCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovIChkZXBlbmRlbmN5KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWVudE11dGF0aW9uSWQ6IHJlcXVpcmVkU3RyaW5nKGRlcGVuZGVuY3lPYmplY3QuY2xpZW50TXV0YXRpb25JZCwgXCJkZXBlbmRlbmN5IGNsaWVudE11dGF0aW9uSWRcIiksXG4gICAgICBtb2RlbDogcmVxdWlyZWRTdHJpbmcoZGVwZW5kZW5jeU9iamVjdC5tb2RlbCwgXCJkZXBlbmRlbmN5IG1vZGVsXCIpXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBzeW5jIG11dGF0aW9uIHBheWxvYWQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IG11dGF0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbn0gLSBOb3JtYWxpemVkIG11dGF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVNdXRhdGlvbih2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgc3luYyBtdXRhdGlvbiBvYmplY3RcIilcblxuICBjb25zdCBtdXRhdGlvbiA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcbiAgY29uc3Qgbm9ybWFsaXplZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSAqLyAoe1xuICAgIGFjdG9yRGV2aWNlSWQ6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLmFjdG9yRGV2aWNlSWQsIFwiYWN0b3JEZXZpY2VJZFwiKSxcbiAgICBhY3RvclVzZXJJZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uYWN0b3JVc2VySWQsIFwiYWN0b3JVc2VySWRcIiksXG4gICAgY2xpZW50TXV0YXRpb25JZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uY2xpZW50TXV0YXRpb25JZCwgXCJjbGllbnRNdXRhdGlvbklkXCIpLFxuICAgIG1vZGVsOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5tb2RlbCwgXCJtb2RlbFwiKSxcbiAgICBvY2N1cnJlZEF0OiByZXF1aXJlZElzb1RpbWVzdGFtcChtdXRhdGlvbi5vY2N1cnJlZEF0LCBcIm9jY3VycmVkQXRcIiksXG4gICAgb2ZmbGluZUdyYW50SWQ6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLm9mZmxpbmVHcmFudElkLCBcIm9mZmxpbmVHcmFudElkXCIpLFxuICAgIG9wZXJhdGlvbjogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ub3BlcmF0aW9uLCBcIm9wZXJhdGlvblwiKSxcbiAgICBwb2xpY3lIYXNoOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5wb2xpY3lIYXNoLCBcInBvbGljeUhhc2hcIilcbiAgfSlcblxuICBpZiAobXV0YXRpb24uYXR0cmlidXRlcyAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLmF0dHJpYnV0ZXMgPSBjbG9uZUpzb25PYmplY3QobXV0YXRpb24uYXR0cmlidXRlcywgXCJhdHRyaWJ1dGVzXCIpXG4gIGlmIChtdXRhdGlvbi5iYXNlVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLmJhc2VWZXJzaW9uID0gY2xvbmVCYXNlVmVyc2lvbihtdXRhdGlvbi5iYXNlVmVyc2lvbilcbiAgaWYgKG11dGF0aW9uLmNvbW1hbmQgIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5jb21tYW5kID0gcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uY29tbWFuZCwgXCJjb21tYW5kXCIpXG4gIGlmIChtdXRhdGlvbi5wYXlsb2FkICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQucGF5bG9hZCA9IGNsb25lSnNvbk9iamVjdChtdXRhdGlvbi5wYXlsb2FkLCBcInBheWxvYWRcIilcblxuICByZXR1cm4gbm9ybWFsaXplZFxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmVxdWlyZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZFN0cmluZyh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9YClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBJU08gdGltZXN0YW1wIHN0cmluZy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gSVNPIHRpbWVzdGFtcC5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRJc29UaW1lc3RhbXAodmFsdWUsIGxhYmVsKSB7XG4gIGNvbnN0IHN0cmluZ1ZhbHVlID0gcmVxdWlyZWRTdHJpbmcodmFsdWUsIGxhYmVsKVxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoc3RyaW5nVmFsdWUpXG5cbiAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkgfHwgZGF0ZS50b0lTT1N0cmluZygpICE9PSBzdHJpbmdWYWx1ZSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfSBJU08gdGltZXN0YW1wYClcblxuICByZXR1cm4gc3RyaW5nVmFsdWVcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXIgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIFBvc2l0aXZlIGludGVnZXIuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkUG9zaXRpdmVJbnRlZ2VyKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH0gcG9zaXRpdmUgaW50ZWdlcmApXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogQ2xvbmVzIGEgc3VwcG9ydGVkIGJhc2UtdmVyc2lvbiB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgYmFzZSB2ZXJzaW9uLlxuICogQHJldHVybnMge3N0cmluZyB8IG51bWJlciB8IG51bGx9IC0gTm9ybWFsaXplZCBiYXNlIHZlcnNpb24uXG4gKi9cbmZ1bmN0aW9uIGNsb25lQmFzZVZlcnNpb24odmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHJldHVybiB2YWx1ZVxuXG4gIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGJhc2VWZXJzaW9uIHN0cmluZywgbnVtYmVyLCBvciBudWxsXCIpXG59XG5cbi8qKlxuICogQ2xvbmVzIGEgSlNPTi1jb21wYXRpYmxlIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBKU09OIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZX0gLSBDbG9uZWQgSlNPTiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVKc29uVmFsdWUodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIEpTT04tY29tcGF0aWJsZSBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfWApXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZX0gKi8gKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKSlcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBKU09OLWNvbXBhdGlibGUgb2JqZWN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBKU09OIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSAtIENsb25lZCBKU09OIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVKc29uT2JqZWN0KHZhbHVlLCBsYWJlbCkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfSBvYmplY3RgKVxuXG4gIHJldHVybiAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSAqLyAoY2xvbmVKc29uVmFsdWUodmFsdWUsIGxhYmVsKSlcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBsb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkLlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSByZWNvcmQgLSBSZWNvcmQgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gLSBDbG9uZWQgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBjbG9uZVJlY29yZChyZWNvcmQpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZH0gKi8gKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVjb3JkKSkpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgcmFuZG9tIGxvY2FsIG11dGF0aW9uIHJlY29yZCBpZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmFuZG9tIHJlY29yZCBpZC5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tUmVjb3JkSWQoKSB7XG4gIGNvbnN0IGNyeXB0b1Byb3ZpZGVyID0gZ2xvYmFsVGhpcy5jcnlwdG9cblxuICBpZiAoY3J5cHRvUHJvdmlkZXIgJiYgdHlwZW9mIGNyeXB0b1Byb3ZpZGVyLnJhbmRvbVVVSUQgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGNyeXB0b1Byb3ZpZGVyLnJhbmRvbVVVSUQoKVxuXG4gIHJldHVybiBgbG9jYWwtbXV0YXRpb24tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnNsaWNlKDIpfWBcbn1cbiJdfQ==
403
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbXV0YXRpb24tbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvbG9jYWwtbXV0YXRpb24tbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7O0tBR0s7QUFDTDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFlBQVk7QUFFWixNQUFNLG1CQUFtQixHQUFHLGlDQUFpQyxDQUFBO0FBQzdELE1BQU0scUJBQXFCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFBO0FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3pELDRDQUE0QztBQUM1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFFbkMsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWdCO0lBQ25DOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsV0FBVyxHQUFHLGNBQWMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxHQUFHLG1CQUFtQixFQUFDO1FBQzNHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLGdIQUFnSCxDQUFDLENBQUE7UUFDbkksQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQzlCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUE7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBQyxZQUFZLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBQztRQUN4QyxPQUFPLE1BQU0sa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN6QyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUM7Z0JBQzdCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixZQUFZO2dCQUNaLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN0QixRQUFRO2dCQUNSLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQzFELE1BQU0sRUFBRSxTQUFTO2dCQUNqQixTQUFTLEVBQUUsU0FBUzthQUNyQixDQUFDLENBQUE7WUFFRixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFFckUsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDNUIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWCxPQUFPLG1CQUFtQixDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDekUsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjO1FBQ2xCLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUMsUUFBUSxFQUFFLHFCQUFxQixFQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVHLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFDO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUVoRyxPQUFPLE1BQU0sa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFFaEUsSUFBSSxDQUFDLFNBQVM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUV2RSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUE7WUFFekMsTUFBTSxDQUFDLE1BQU0sR0FBRyxrQ0FBa0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzNELElBQUksVUFBVSxLQUFLLFNBQVM7Z0JBQUUsTUFBTSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFBO1lBQzNGLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7WUFDMUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1lBRXJFLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBQyxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBQyxHQUFHLEVBQUU7UUFDMUQsT0FBTyxNQUFNLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDMUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDcEMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLEdBQUcsQ0FDeEMsT0FBTztpQkFDSixNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUM7aUJBQ3ZGLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQzdGLENBQUE7WUFDRCxNQUFNLGVBQWUsR0FBRyxPQUFPO2lCQUM1QixNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3hELE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2lCQUNyRixJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQTtZQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1lBRTNCLElBQUksT0FBTyxrQkFBa0IsS0FBSyxRQUFRLElBQUksa0JBQWtCLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLEtBQUssTUFBTSxNQUFNLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztvQkFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUMxRixDQUFDO1lBRUQsSUFBSSxPQUFPLG1CQUFtQixLQUFLLFFBQVEsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDeEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLG1CQUFtQixDQUFBO2dCQUV6RCxLQUFLLE1BQU0sTUFBTSxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNyQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxNQUFNO3dCQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO2dCQUM3RSxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUU5QyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUFFLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO1lBRXBHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxDQUFBO1FBQzNCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQjtRQUNkLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUV2QixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUE7UUFFL0gsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDM0IsQ0FBQztDQUNGO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsWUFBWSxDQUFDLE9BQU87SUFDM0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFekQsTUFBTSxhQUFhLEdBQUcsc0NBQXNDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUV0RSxPQUFPLE9BQU8sYUFBYSxDQUFDLFlBQVksS0FBSyxVQUFVO1dBQ2xELE9BQU8sYUFBYSxDQUFDLGFBQWEsS0FBSyxVQUFVO1dBQ2pELE9BQU8sYUFBYSxDQUFDLFlBQVksS0FBSyxVQUFVO1dBQ2hELE9BQU8sYUFBYSxDQUFDLE1BQU0sS0FBSyxVQUFVO1dBQzFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sS0FBSyxVQUFVO1dBQzNDLE9BQU8sYUFBYSxDQUFDLFlBQVksS0FBSyxVQUFVLENBQUE7QUFDdkQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsS0FBSztJQUM1QyxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUV6RSxJQUFJLG1CQUFtQixLQUFLLENBQUM7UUFBRSxPQUFPLG1CQUFtQixDQUFBO0lBRXpELE9BQU8sS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxPQUFPO0lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQTtJQUVqRyxPQUFPLE9BQU87U0FDWCxHQUFHLENBQUMsZUFBZSxDQUFDO1NBQ3BCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUNyRCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3pDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxLQUFLLFVBQVUsa0JBQWtCLENBQUMsVUFBVSxFQUFFLFFBQVE7SUFDcEQsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUN2RSxJQUFJLE9BQU8sR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUE7SUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNoRixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFbEUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUUxQyxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFBO1FBRXBDLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQTtJQUN6QixDQUFDO1lBQVMsQ0FBQztRQUNULE9BQU8sRUFBRSxDQUFBO1FBQ1QsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssT0FBTztZQUFFLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN6RixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxLQUFLO0lBQzVCLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO0lBRTdILE1BQU0sTUFBTSxHQUFHLHNDQUFzQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0QsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFFdEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO0lBRWhHLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQztRQUM5RCxZQUFZLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUN4RCxFQUFFLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO1FBQ25DLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzVDLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQztRQUM5RCxNQUFNLEVBQUUsa0NBQWtDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDbkQsU0FBUyxFQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDO0tBQy9ELENBQUE7SUFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssU0FBUztRQUFFLE9BQU8sVUFBVSxDQUFBO0lBRXRELE9BQU87UUFDTCxHQUFHLFVBQVU7UUFDYixVQUFVLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDO0tBQzdELENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMscUJBQXFCLENBQUMsS0FBSztJQUNsQyxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFBO0lBRXhGLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1FBQzlCLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMvRSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUE7UUFDOUQsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsc0NBQXNDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUU1RSxPQUFPO1lBQ0wsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLDZCQUE2QixDQUFDO1lBQ2xHLEtBQUssRUFBRSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDO1NBQ2xFLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxLQUFLO0lBQzlCLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO0lBRXZILE1BQU0sUUFBUSxHQUFHLHNDQUFzQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDL0QsTUFBTSxVQUFVLEdBQUcsMERBQTBELENBQUMsQ0FBQztRQUM3RSxhQUFhLEVBQUUsY0FBYyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDO1FBQ3RFLFdBQVcsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUM7UUFDaEUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQztRQUMvRSxLQUFLLEVBQUUsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO1FBQzlDLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQztRQUNuRSxjQUFjLEVBQUUsY0FBYyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUM7UUFDekUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQztRQUMxRCxVQUFVLEVBQUUsY0FBYyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDO0tBQzlELENBQUMsQ0FBQTtJQUVGLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTO1FBQUUsVUFBVSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUNqSCxJQUFJLFFBQVEsQ0FBQyxXQUFXLEtBQUssU0FBUztRQUFFLFVBQVUsQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3ZHLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxTQUFTO1FBQUUsVUFBVSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNwRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEtBQUssU0FBUztRQUFFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFFckcsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUs7SUFDbEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUV0RyxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEtBQUs7SUFDeEMsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNoRCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUVsQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLFdBQVc7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixLQUFLLGdCQUFnQixDQUFDLENBQUE7SUFFekksT0FBTyxXQUFXLENBQUE7QUFDcEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsS0FBSztJQUMzQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixLQUFLLG1CQUFtQixDQUFDLENBQUE7SUFFNUksT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBSztJQUM3QixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUUxRixNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUE7QUFDaEYsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUs7SUFDbEMsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVU7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBRTNILE9BQU8sNkVBQTZFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzFILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsZUFBZSxDQUFDLEtBQUssRUFBRSxLQUFLO0lBQ25DLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsS0FBSyxTQUFTLENBQUMsQ0FBQTtJQUUzSCxPQUFPLDZGQUE2RixDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBQ3JJLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxXQUFXLENBQUMsTUFBTTtJQUN6QixPQUFPLHFDQUFxQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNuRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxjQUFjO0lBQ3JCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUE7SUFFeEMsSUFBSSxjQUFjLElBQUksT0FBTyxjQUFjLENBQUMsVUFBVSxLQUFLLFVBQVU7UUFBRSxPQUFPLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUV6RyxPQUFPLGtCQUFrQixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcmVjb3JkIHF1ZXJ5IG9wdGlvbnMuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nUmVjb3Jkc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvblN0YXR1c1tdfSBbc3RhdHVzZXNdIC0gT3B0aW9uYWwgc3RhdHVzIGZpbHRlci5cbiAqL1xuLyoqXG4gKiBMb2NhbCBtdXRhdGlvbiBsb2cgcm93LW9yaWVudGVkIHN0b3JhZ2UgYWRhcHRlci5cbiAqXG4gKiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHN0b3JlIGVhY2ggbXV0YXRpb24gbG9nIHJlY29yZCBhcyBpdHMgb3duIHJvdy9lbnRyeS5cbiAqIE5hdGl2ZSBhcHBzIHNob3VsZCBiYWNrIHRoaXMgd2l0aCBTUUxpdGUgYW5kIGluZGV4ZXMgb24gc3RvcmFnZSBrZXksIHN0YXR1cyxcbiAqIGFuZCBzZXF1ZW5jZS4gQXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgbG9nIGFzIG9uZSBKU09OIGJsb2IuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nU3RvcmFnZVxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCByZWNvcmQ6IExvY2FsTXV0YXRpb25Mb2dSZWNvcmQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSBhcHBlbmRSZWNvcmQgLSBBcHBlbmRzIG9uZSBsb2cgcmVjb3JkLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCBpZHM6IHN0cmluZ1tdKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gZGVsZXRlUmVjb3JkcyAtIERlbGV0ZXMgbG9nIHJlY29yZHMgYnkgaWQuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcpID0+IFByb21pc2U8bnVtYmVyPiB8IG51bWJlcn0gbmV4dFNlcXVlbmNlIC0gUmV0dXJucyB0aGUgbmV4dCBsb2NhbCBzZXF1ZW5jZSBudW1iZXIuXG4gKiBAcHJvcGVydHkgeyhzdG9yYWdlS2V5OiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+IFByb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZCB8IG51bGwgfCB1bmRlZmluZWQ+IHwgTG9jYWxNdXRhdGlvbkxvZ1JlY29yZCB8IG51bGwgfCB1bmRlZmluZWR9IHJlY29yZCAtIFJlYWRzIG9uZSBsb2cgcmVjb3JkIGJ5IGlkLlxuICogQHByb3BlcnR5IHsoc3RvcmFnZUtleTogc3RyaW5nLCBvcHRpb25zPzogTG9jYWxNdXRhdGlvbkxvZ1JlY29yZHNPcHRpb25zKSA9PiBQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmRbXT4gfCBMb2NhbE11dGF0aW9uTG9nUmVjb3JkW119IHJlY29yZHMgLSBSZWFkcyBsb2cgcmVjb3Jkcy5cbiAqIEBwcm9wZXJ0eSB7KHN0b3JhZ2VLZXk6IHN0cmluZywgcmVjb3JkOiBMb2NhbE11dGF0aW9uTG9nUmVjb3JkKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gdXBkYXRlUmVjb3JkIC0gUmVwbGFjZXMgb25lIGxvZyByZWNvcmQuXG4gKi9cbi8qKlxuICogTG9jYWwgc3luYyBtdXRhdGlvbiBkZXBlbmRlbmN5IG1ldGFkYXRhLlxuICogQHR5cGVkZWYge29iamVjdH0gTG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGllbnRNdXRhdGlvbklkIC0gQ2xpZW50IG11dGF0aW9uIGlkIHRoaXMgbXV0YXRpb24gZGVwZW5kcyBvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlbCAtIERlcGVuZGVudCBtb2RlbC9yZXNvdXJjZSBuYW1lLlxuICovXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyBzdGF0dXMuXG4gKiBAdHlwZWRlZiB7XCJwZW5kaW5nXCIgfCBcImFwcGxpZWQtbG9jYWxseVwiIHwgXCJwZWVyLWFwcGxpZWRcIiB8IFwiY29uZmxpY3RcIiB8IFwicmVqZWN0ZWRcIiB8IFwic3luY2VkXCJ9IExvY2FsTXV0YXRpb25TdGF0dXNcbiAqICovXG4vKipcbiAqIExvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2NhbE11dGF0aW9uTG9nUmVjb3JkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3JlYXRlZEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSByZWNvcmQgd2FzIGNyZWF0ZWQgbG9jYWxseS5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxNdXRhdGlvbkRlcGVuZGVuY3lbXX0gZGVwZW5kZW5jaWVzIC0gT3RoZXIgbG9jYWwgbXV0YXRpb25zIHRoYXQgbXVzdCByZXBsYXkgZmlyc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBMb2NhbCBsb2cgcmVjb3JkIGlkLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259IG11dGF0aW9uIC0gRGV2aWNlIG11dGF0aW9uIHBheWxvYWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2VxdWVuY2UgLSBNb25vdG9uaWMgbG9jYWwgc2VxdWVuY2UuXG4gKiBAcHJvcGVydHkge0xvY2FsTXV0YXRpb25TdGF0dXN9IHN0YXR1cyAtIExvY2FsIHJlcGxheS9hcHBseSBzdGF0dXMuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSBbc3luY1Jlc3VsdF0gLSBCYWNrZW5kIHJlcGxheS9yZXN1bHQgbWV0YWRhdGEuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXBkYXRlZEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSByZWNvcmQgd2FzIGxhc3QgY2hhbmdlZC5cbiAqL1xuLy8gQHRzLWNoZWNrXG5cbmNvbnN0IERFRkFVTFRfU1RPUkFHRV9LRVkgPSBcInZlbG9jaW91cy5zeW5jLmxvY2FsTXV0YXRpb25Mb2dcIlxuY29uc3QgUEVORElOR19TVEFUVVNfVkFMVUVTID0gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uU3RhdHVzW119ICovIChbXCJwZW5kaW5nXCIsIFwiYXBwbGllZC1sb2NhbGx5XCIsIFwicGVlci1hcHBsaWVkXCJdKVxuY29uc3QgUEVORElOR19TVEFUVVNFUyA9IG5ldyBTZXQoUEVORElOR19TVEFUVVNfVkFMVUVTKVxuY29uc3QgTVVUQVRJT05fU1RBVFVTRVMgPSBuZXcgU2V0KFsuLi5QRU5ESU5HX1NUQVRVU0VTLCBcImNvbmZsaWN0XCIsIFwicmVqZWN0ZWRcIiwgXCJzeW5jZWRcIl0pXG5jb25zdCBURVJNSU5BTF9TVEFUVVNFUyA9IG5ldyBTZXQoW1wicmVqZWN0ZWRcIiwgXCJzeW5jZWRcIl0pXG4vKiogQHR5cGUge01hcDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+fSAqL1xuY29uc3QgU1RPUkFHRV9LRVlfTE9DS1MgPSBuZXcgTWFwKClcblxuLyoqIENsaWVudC1zaWRlIGFwcGVuZC1vbmx5IHN5bmMgbXV0YXRpb24gbG9nIHdpdGggcGx1Z2dhYmxlIHBlcnNpc3RlbnQgc3RvcmFnZS4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2FsTXV0YXRpb25Mb2cge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGxvY2FsIG11dGF0aW9uIGxvZy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7KCkgPT4gc3RyaW5nfSBbYXJncy5pZEdlbmVyYXRvcl0gLSBSZWNvcmQgaWQgZ2VuZXJhdG9yLlxuICAgKiBAcGFyYW0geygpID0+IERhdGV9IFthcmdzLm5vd10gLSBDbG9jayBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nU3RvcmFnZX0gYXJncy5zdG9yYWdlIC0gUGVyc2lzdGVudCBzdG9yYWdlIGFkYXB0ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdG9yYWdlS2V5XSAtIFN0b3JhZ2Uga2V5LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2lkR2VuZXJhdG9yID0gcmFuZG9tUmVjb3JkSWQsIG5vdyA9ICgpID0+IG5ldyBEYXRlKCksIHN0b3JhZ2UsIHN0b3JhZ2VLZXkgPSBERUZBVUxUX1NUT1JBR0VfS0VZfSkge1xuICAgIGlmICghdmFsaWRTdG9yYWdlKHN0b3JhZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2NhbE11dGF0aW9uTG9nIHJlcXVpcmVzIHJvdyBzdG9yYWdlIHdpdGggYXBwZW5kUmVjb3JkL2RlbGV0ZVJlY29yZHMvbmV4dFNlcXVlbmNlL3JlY29yZC9yZWNvcmRzL3VwZGF0ZVJlY29yZFwiKVxuICAgIH1cblxuICAgIHRoaXMuaWRHZW5lcmF0b3IgPSBpZEdlbmVyYXRvclxuICAgIHRoaXMubm93ID0gbm93XG4gICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZVxuICAgIHRoaXMuc3RvcmFnZUtleSA9IHN0b3JhZ2VLZXlcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGEgcGVuZGluZyBtdXRhdGlvbiByZWNvcmQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25EZXBlbmRlbmN5W119IFthcmdzLmRlcGVuZGVuY2llc10gLSBNdXRhdGlvbiBkZXBlbmRlbmNpZXMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSBhcmdzLm11dGF0aW9uIC0gTXV0YXRpb24gcGF5bG9hZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYWxNdXRhdGlvbkxvZ1JlY29yZD59IC0gQ3JlYXRlZCBsb2cgcmVjb3JkLlxuICAgKi9cbiAgYXN5bmMgYXBwZW5kKHtkZXBlbmRlbmNpZXMgPSBbXSwgbXV0YXRpb259KSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IHRoaXMuY3VycmVudFRpbWVzdGFtcCgpXG4gICAgICBjb25zdCByZWNvcmQgPSBub3JtYWxpemVSZWNvcmQoe1xuICAgICAgICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCxcbiAgICAgICAgZGVwZW5kZW5jaWVzLFxuICAgICAgICBpZDogdGhpcy5pZEdlbmVyYXRvcigpLFxuICAgICAgICBtdXRhdGlvbixcbiAgICAgICAgc2VxdWVuY2U6IGF3YWl0IHRoaXMuc3RvcmFnZS5uZXh0U2VxdWVuY2UodGhpcy5zdG9yYWdlS2V5KSxcbiAgICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIixcbiAgICAgICAgdXBkYXRlZEF0OiB0aW1lc3RhbXBcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5hcHBlbmRSZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBjbG9uZVJlY29yZChyZWNvcmQpKVxuXG4gICAgICByZXR1cm4gY2xvbmVSZWNvcmQocmVjb3JkKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgcmVjb3JkcyBvcmRlcmVkIGJ5IGxvY2FsIHNlcXVlbmNlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkW10+fSAtIExvZyByZWNvcmRzLlxuICAgKi9cbiAgYXN5bmMgcmVjb3JkcygpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplUmVjb3JkTGlzdChhd2FpdCB0aGlzLnN0b3JhZ2UucmVjb3Jkcyh0aGlzLnN0b3JhZ2VLZXkpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcmVjb3JkcyB0aGF0IHN0aWxsIG5lZWQgbG9jYWwvc2VydmVyIHJlY29uY2lsaWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2NhbE11dGF0aW9uTG9nUmVjb3JkW10+fSAtIFBlbmRpbmcgcmVjb3Jkcy5cbiAgICovXG4gIGFzeW5jIHBlbmRpbmdSZWNvcmRzKCkge1xuICAgIHJldHVybiBub3JtYWxpemVSZWNvcmRMaXN0KGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmRzKHRoaXMuc3RvcmFnZUtleSwge3N0YXR1c2VzOiBQRU5ESU5HX1NUQVRVU19WQUxVRVN9KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgcmVjb3JkIHN0YXR1cy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmlkIC0gUmVjb3JkIGlkLlxuICAgKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25TdGF0dXN9IGFyZ3Muc3RhdHVzIC0gTmV3IHN0YXR1cy5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gW2FyZ3Muc3luY1Jlc3VsdF0gLSBSZXN1bHQgbWV0YWRhdGEuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2FsTXV0YXRpb25Mb2dSZWNvcmQ+fSAtIFVwZGF0ZWQgcmVjb3JkLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlU3RhdHVzKHtpZCwgc3RhdHVzLCBzeW5jUmVzdWx0fSkge1xuICAgIGlmICghTVVUQVRJT05fU1RBVFVTRVMuaGFzKHN0YXR1cykpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBsb2NhbCBtdXRhdGlvbiBzdGF0dXMgJyR7c3RhdHVzfSdgKVxuXG4gICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yYWdlS2V5TG9jayh0aGlzLnN0b3JhZ2VLZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJhd1JlY29yZCA9IGF3YWl0IHRoaXMuc3RvcmFnZS5yZWNvcmQodGhpcy5zdG9yYWdlS2V5LCBpZClcblxuICAgICAgaWYgKCFyYXdSZWNvcmQpIHRocm93IG5ldyBFcnJvcihgTm8gbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZCAnJHtpZH0nYClcblxuICAgICAgY29uc3QgcmVjb3JkID0gbm9ybWFsaXplUmVjb3JkKHJhd1JlY29yZClcblxuICAgICAgcmVjb3JkLnN0YXR1cyA9IC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvblN0YXR1c30gKi8gKHN0YXR1cylcbiAgICAgIGlmIChzeW5jUmVzdWx0ICE9PSB1bmRlZmluZWQpIHJlY29yZC5zeW5jUmVzdWx0ID0gY2xvbmVKc29uT2JqZWN0KHN5bmNSZXN1bHQsIFwic3luY1Jlc3VsdFwiKVxuICAgICAgcmVjb3JkLnVwZGF0ZWRBdCA9IHRoaXMuY3VycmVudFRpbWVzdGFtcCgpXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UudXBkYXRlUmVjb3JkKHRoaXMuc3RvcmFnZUtleSwgY2xvbmVSZWNvcmQocmVjb3JkKSlcblxuICAgICAgcmV0dXJuIGNsb25lUmVjb3JkKHJlY29yZClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFBydW5lcyB0ZXJtaW5hbCByZWNvcmRzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQgZm9yIHJlcGxheSBkZXBlbmRlbmNpZXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc10gLSBDb21wYWN0aW9uIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhUZXJtaW5hbFJlY29yZHNdIC0gTWF4aW11bSB0ZXJtaW5hbCByZWNvcmRzIHRvIHJldGFpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLnRlcm1pbmFsUmV0ZW50aW9uTXNdIC0gTWluaW11bSBhZ2UgYmVmb3JlIHBydW5pbmcgdGVybWluYWwgcmVjb3Jkcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8e2RlbGV0ZWRSZWNvcmRJZHM6IHN0cmluZ1tdfT59IC0gQ29tcGFjdGlvbiByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjb21wYWN0KHttYXhUZXJtaW5hbFJlY29yZHMsIHRlcm1pbmFsUmV0ZW50aW9uTXN9ID0ge30pIHtcbiAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JhZ2VLZXlMb2NrKHRoaXMuc3RvcmFnZUtleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkcyA9IGF3YWl0IHRoaXMucmVjb3JkcygpXG4gICAgICBjb25zdCBwcm90ZWN0ZWRDbGllbnRNdXRhdGlvbklkcyA9IG5ldyBTZXQoXG4gICAgICAgIHJlY29yZHNcbiAgICAgICAgICAuZmlsdGVyKChyZWNvcmQpID0+IFBFTkRJTkdfU1RBVFVTRVMuaGFzKHJlY29yZC5zdGF0dXMpIHx8IHJlY29yZC5zdGF0dXMgPT09IFwiY29uZmxpY3RcIilcbiAgICAgICAgICAuZmxhdE1hcCgocmVjb3JkKSA9PiByZWNvcmQuZGVwZW5kZW5jaWVzLm1hcCgoZGVwZW5kZW5jeSkgPT4gZGVwZW5kZW5jeS5jbGllbnRNdXRhdGlvbklkKSlcbiAgICAgIClcbiAgICAgIGNvbnN0IHRlcm1pbmFsUmVjb3JkcyA9IHJlY29yZHNcbiAgICAgICAgLmZpbHRlcigocmVjb3JkKSA9PiBURVJNSU5BTF9TVEFUVVNFUy5oYXMocmVjb3JkLnN0YXR1cykpXG4gICAgICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gIXByb3RlY3RlZENsaWVudE11dGF0aW9uSWRzLmhhcyhyZWNvcmQubXV0YXRpb24uY2xpZW50TXV0YXRpb25JZCkpXG4gICAgICAgIC5zb3J0KGNvbXBhcmVSZWNvcmRzTmV3ZXN0Rmlyc3QpXG4gICAgICBjb25zdCBkZWxldGVJZHMgPSBuZXcgU2V0KClcblxuICAgICAgaWYgKHR5cGVvZiBtYXhUZXJtaW5hbFJlY29yZHMgPT09IFwibnVtYmVyXCIgJiYgbWF4VGVybWluYWxSZWNvcmRzID49IDApIHtcbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgdGVybWluYWxSZWNvcmRzLnNsaWNlKG1heFRlcm1pbmFsUmVjb3JkcykpIGRlbGV0ZUlkcy5hZGQocmVjb3JkLmlkKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRlcm1pbmFsUmV0ZW50aW9uTXMgPT09IFwibnVtYmVyXCIgJiYgdGVybWluYWxSZXRlbnRpb25NcyA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGN1dG9mZiA9IHRoaXMubm93KCkuZ2V0VGltZSgpIC0gdGVybWluYWxSZXRlbnRpb25Nc1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHRlcm1pbmFsUmVjb3Jkcykge1xuICAgICAgICAgIGlmIChuZXcgRGF0ZShyZWNvcmQudXBkYXRlZEF0KS5nZXRUaW1lKCkgPCBjdXRvZmYpIGRlbGV0ZUlkcy5hZGQocmVjb3JkLmlkKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlbGV0ZWRSZWNvcmRJZHMgPSBBcnJheS5mcm9tKGRlbGV0ZUlkcylcblxuICAgICAgaWYgKGRlbGV0ZWRSZWNvcmRJZHMubGVuZ3RoID4gMCkgYXdhaXQgdGhpcy5zdG9yYWdlLmRlbGV0ZVJlY29yZHModGhpcy5zdG9yYWdlS2V5LCBkZWxldGVkUmVjb3JkSWRzKVxuXG4gICAgICByZXR1cm4ge2RlbGV0ZWRSZWNvcmRJZHN9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGxvZyB0aW1lc3RhbXAuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gQ3VycmVudCBJU08gdGltZXN0YW1wLlxuICAgKi9cbiAgY3VycmVudFRpbWVzdGFtcCgpIHtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5ub3coKVxuXG4gICAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHx8IE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHRocm93IG5ldyBFcnJvcihcIkxvY2FsTXV0YXRpb25Mb2cgbm93KCkgbXVzdCByZXR1cm4gYSB2YWxpZCBEYXRlXCIpXG5cbiAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpXG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHN0b3JhZ2UgYWRhcHRlciBoYXMgYWxsIHJlcXVpcmVkIHJvdy1zdG9yZSBtZXRob2RzLlxuICogQHBhcmFtIHt1bmtub3dufSBzdG9yYWdlIC0gU3RvcmFnZSBhZGFwdGVyIGNhbmRpZGF0ZS5cbiAqIEByZXR1cm5zIHtzdG9yYWdlIGlzIExvY2FsTXV0YXRpb25Mb2dTdG9yYWdlfSAtIFdoZXRoZXIgc3RvcmFnZSBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gdmFsaWRTdG9yYWdlKHN0b3JhZ2UpIHtcbiAgaWYgKCFzdG9yYWdlIHx8IHR5cGVvZiBzdG9yYWdlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBzdG9yYWdlT2JqZWN0ID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHN0b3JhZ2UpXG5cbiAgcmV0dXJuIHR5cGVvZiBzdG9yYWdlT2JqZWN0LmFwcGVuZFJlY29yZCA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QuZGVsZXRlUmVjb3JkcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgJiYgdHlwZW9mIHN0b3JhZ2VPYmplY3QubmV4dFNlcXVlbmNlID09PSBcImZ1bmN0aW9uXCJcbiAgICAmJiB0eXBlb2Ygc3RvcmFnZU9iamVjdC5yZWNvcmQgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0LnJlY29yZHMgPT09IFwiZnVuY3Rpb25cIlxuICAgICYmIHR5cGVvZiBzdG9yYWdlT2JqZWN0LnVwZGF0ZVJlY29yZCA9PT0gXCJmdW5jdGlvblwiXG59XG5cbi8qKlxuICogU29ydHMgcmVjb3JkcyBieSBuZXdlc3QgdXBkYXRlL3NlcXVlbmNlIGZpcnN0LlxuICogQHBhcmFtIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSBsZWZ0IC0gTGVmdCByZWNvcmQuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IHJpZ2h0IC0gUmlnaHQgcmVjb3JkLlxuICogQHJldHVybnMge251bWJlcn0gLSBTb3J0IHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZVJlY29yZHNOZXdlc3RGaXJzdChsZWZ0LCByaWdodCkge1xuICBjb25zdCB1cGRhdGVkQXRDb21wYXJpc29uID0gcmlnaHQudXBkYXRlZEF0LmxvY2FsZUNvbXBhcmUobGVmdC51cGRhdGVkQXQpXG5cbiAgaWYgKHVwZGF0ZWRBdENvbXBhcmlzb24gIT09IDApIHJldHVybiB1cGRhdGVkQXRDb21wYXJpc29uXG5cbiAgcmV0dXJuIHJpZ2h0LnNlcXVlbmNlIC0gbGVmdC5zZXF1ZW5jZVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW5kIHNvcnRzIGEgbGlzdCBvZiByZWNvcmRzLlxuICogQHBhcmFtIHt1bmtub3dufSByZWNvcmRzIC0gUmF3IHJlY29yZHMuXG4gKiBAcmV0dXJucyB7TG9jYWxNdXRhdGlvbkxvZ1JlY29yZFtdfSAtIE5vcm1hbGl6ZWQgcmVjb3Jkcy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmVjb3JkTGlzdChyZWNvcmRzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZWNvcmRzKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gbG9nIHN0b3JhZ2UgcmVjb3JkcyBhcnJheVwiKVxuXG4gIHJldHVybiByZWNvcmRzXG4gICAgLm1hcChub3JtYWxpemVSZWNvcmQpXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LnNlcXVlbmNlIC0gcmlnaHQuc2VxdWVuY2UpXG4gICAgLm1hcCgocmVjb3JkKSA9PiBjbG9uZVJlY29yZChyZWNvcmQpKVxufVxuXG4vKipcbiAqIFJ1bnMgYSBjYWxsYmFjayBhZnRlciBlYXJsaWVyIHdyaXRlcyBmb3IgdGhlIHNhbWUgc3RvcmFnZSBrZXkgaGF2ZSBjb21wbGV0ZWQuXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtzdHJpbmd9IHN0b3JhZ2VLZXkgLSBTdG9yYWdlIGtleSB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0geygpID0+IFByb21pc2U8VD59IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gcnVuIHVuZGVyIHRoZSBzdG9yYWdlLWtleSBsb2NrLlxuICogQHJldHVybnMge1Byb21pc2U8VD59IC0gQ2FsbGJhY2sgcmVzdWx0LlxuICovXG5hc3luYyBmdW5jdGlvbiB3aXRoU3RvcmFnZUtleUxvY2soc3RvcmFnZUtleSwgY2FsbGJhY2spIHtcbiAgY29uc3QgcHJldmlvdXMgPSBTVE9SQUdFX0tFWV9MT0NLUy5nZXQoc3RvcmFnZUtleSkgfHwgUHJvbWlzZS5yZXNvbHZlKClcbiAgbGV0IHJlbGVhc2UgPSAoKSA9PiB7fVxuICBjb25zdCBjdXJyZW50ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsgcmVsZWFzZSA9ICgpID0+IHJlc29sdmUodW5kZWZpbmVkKSB9KVxuICBjb25zdCBjaGFpbmVkID0gcHJldmlvdXMuY2F0Y2goKF9lcnJvcikgPT4ge30pLnRoZW4oKCkgPT4gY3VycmVudClcblxuICBTVE9SQUdFX0tFWV9MT0NLUy5zZXQoc3RvcmFnZUtleSwgY2hhaW5lZClcblxuICB0cnkge1xuICAgIGF3YWl0IHByZXZpb3VzLmNhdGNoKChfZXJyb3IpID0+IHt9KVxuXG4gICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKClcbiAgfSBmaW5hbGx5IHtcbiAgICByZWxlYXNlKClcbiAgICBpZiAoU1RPUkFHRV9LRVlfTE9DS1MuZ2V0KHN0b3JhZ2VLZXkpID09PSBjaGFpbmVkKSBTVE9SQUdFX0tFWV9MT0NLUy5kZWxldGUoc3RvcmFnZUtleSlcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBwZXJzaXN0ZWQgbG9nIHJlY29yZC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgcmVjb3JkLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IC0gTm9ybWFsaXplZCByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlY29yZCh2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gbG9nIHJlY29yZCBvYmplY3RcIilcblxuICBjb25zdCByZWNvcmQgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG4gIGNvbnN0IHN0YXR1cyA9IHJlcXVpcmVkU3RyaW5nKHJlY29yZC5zdGF0dXMsIFwic3RhdHVzXCIpXG5cbiAgaWYgKCFNVVRBVElPTl9TVEFUVVNFUy5oYXMoc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxvY2FsIG11dGF0aW9uIHN0YXR1cyAnJHtzdGF0dXN9J2ApXG5cbiAgY29uc3QgYmFzZVJlY29yZCA9IHtcbiAgICBjcmVhdGVkQXQ6IHJlcXVpcmVkSXNvVGltZXN0YW1wKHJlY29yZC5jcmVhdGVkQXQsIFwiY3JlYXRlZEF0XCIpLFxuICAgIGRlcGVuZGVuY2llczogbm9ybWFsaXplRGVwZW5kZW5jaWVzKHJlY29yZC5kZXBlbmRlbmNpZXMpLFxuICAgIGlkOiByZXF1aXJlZFN0cmluZyhyZWNvcmQuaWQsIFwiaWRcIiksXG4gICAgbXV0YXRpb246IG5vcm1hbGl6ZU11dGF0aW9uKHJlY29yZC5tdXRhdGlvbiksXG4gICAgc2VxdWVuY2U6IHJlcXVpcmVkUG9zaXRpdmVJbnRlZ2VyKHJlY29yZC5zZXF1ZW5jZSwgXCJzZXF1ZW5jZVwiKSxcbiAgICBzdGF0dXM6IC8qKiBAdHlwZSB7TG9jYWxNdXRhdGlvblN0YXR1c30gKi8gKHN0YXR1cyksXG4gICAgdXBkYXRlZEF0OiByZXF1aXJlZElzb1RpbWVzdGFtcChyZWNvcmQudXBkYXRlZEF0LCBcInVwZGF0ZWRBdFwiKVxuICB9XG5cbiAgaWYgKHJlY29yZC5zeW5jUmVzdWx0ID09PSB1bmRlZmluZWQpIHJldHVybiBiYXNlUmVjb3JkXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlUmVjb3JkLFxuICAgIHN5bmNSZXN1bHQ6IGNsb25lSnNvbk9iamVjdChyZWNvcmQuc3luY1Jlc3VsdCwgXCJzeW5jUmVzdWx0XCIpXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGRlcGVuZGVuY3kgbWV0YWRhdGEgZW50cmllcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgZGVwZW5kZW5jaWVzLlxuICogQHJldHVybnMge0xvY2FsTXV0YXRpb25EZXBlbmRlbmN5W119IC0gTm9ybWFsaXplZCBkZXBlbmRlbmNpZXMuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZURlcGVuZGVuY2llcyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGxvY2FsIG11dGF0aW9uIGRlcGVuZGVuY2llcyBhcnJheVwiKVxuXG4gIHJldHVybiB2YWx1ZS5tYXAoKGRlcGVuZGVuY3kpID0+IHtcbiAgICBpZiAoIWRlcGVuZGVuY3kgfHwgdHlwZW9mIGRlcGVuZGVuY3kgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gZGVwZW5kZW5jeSBvYmplY3RcIilcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRlbmN5T2JqZWN0ID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKGRlcGVuZGVuY3kpXG5cbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50TXV0YXRpb25JZDogcmVxdWlyZWRTdHJpbmcoZGVwZW5kZW5jeU9iamVjdC5jbGllbnRNdXRhdGlvbklkLCBcImRlcGVuZGVuY3kgY2xpZW50TXV0YXRpb25JZFwiKSxcbiAgICAgIG1vZGVsOiByZXF1aXJlZFN0cmluZyhkZXBlbmRlbmN5T2JqZWN0Lm1vZGVsLCBcImRlcGVuZGVuY3kgbW9kZWxcIilcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHN5bmMgbXV0YXRpb24gcGF5bG9hZC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgbXV0YXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9ufSAtIE5vcm1hbGl6ZWQgbXV0YXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU11dGF0aW9uKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBsb2NhbCBzeW5jIG11dGF0aW9uIG9iamVjdFwiKVxuXG4gIGNvbnN0IG11dGF0aW9uID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuICBjb25zdCBub3JtYWxpemVkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jTXV0YXRpb259ICovICh7XG4gICAgYWN0b3JEZXZpY2VJZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24uYWN0b3JEZXZpY2VJZCwgXCJhY3RvckRldmljZUlkXCIpLFxuICAgIGFjdG9yVXNlcklkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5hY3RvclVzZXJJZCwgXCJhY3RvclVzZXJJZFwiKSxcbiAgICBjbGllbnRNdXRhdGlvbklkOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5jbGllbnRNdXRhdGlvbklkLCBcImNsaWVudE11dGF0aW9uSWRcIiksXG4gICAgbW9kZWw6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLm1vZGVsLCBcIm1vZGVsXCIpLFxuICAgIG9jY3VycmVkQXQ6IHJlcXVpcmVkSXNvVGltZXN0YW1wKG11dGF0aW9uLm9jY3VycmVkQXQsIFwib2NjdXJyZWRBdFwiKSxcbiAgICBvZmZsaW5lR3JhbnRJZDogcmVxdWlyZWRTdHJpbmcobXV0YXRpb24ub2ZmbGluZUdyYW50SWQsIFwib2ZmbGluZUdyYW50SWRcIiksXG4gICAgb3BlcmF0aW9uOiByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5vcGVyYXRpb24sIFwib3BlcmF0aW9uXCIpLFxuICAgIHBvbGljeUhhc2g6IHJlcXVpcmVkU3RyaW5nKG11dGF0aW9uLnBvbGljeUhhc2gsIFwicG9saWN5SGFzaFwiKVxuICB9KVxuXG4gIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVzICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQuYXR0cmlidXRlcyA9IGNsb25lSnNvbk9iamVjdChtdXRhdGlvbi5hdHRyaWJ1dGVzLCBcImF0dHJpYnV0ZXNcIilcbiAgaWYgKG11dGF0aW9uLmJhc2VWZXJzaW9uICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQuYmFzZVZlcnNpb24gPSBjbG9uZUJhc2VWZXJzaW9uKG11dGF0aW9uLmJhc2VWZXJzaW9uKVxuICBpZiAobXV0YXRpb24uY29tbWFuZCAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLmNvbW1hbmQgPSByZXF1aXJlZFN0cmluZyhtdXRhdGlvbi5jb21tYW5kLCBcImNvbW1hbmRcIilcbiAgaWYgKG11dGF0aW9uLnBheWxvYWQgIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5wYXlsb2FkID0gY2xvbmVKc29uT2JqZWN0KG11dGF0aW9uLnBheWxvYWQsIFwicGF5bG9hZFwiKVxuXG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbi8qKlxuICogUmVxdWlyZXMgYSBub24tZW1wdHkgc3RyaW5nIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBSZXF1aXJlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkU3RyaW5nKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gJHtsYWJlbH1gKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGFuIElTTyB0aW1lc3RhbXAgc3RyaW5nLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBJU08gdGltZXN0YW1wLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZElzb1RpbWVzdGFtcCh2YWx1ZSwgbGFiZWwpIHtcbiAgY29uc3Qgc3RyaW5nVmFsdWUgPSByZXF1aXJlZFN0cmluZyh2YWx1ZSwgbGFiZWwpXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShzdHJpbmdWYWx1ZSlcblxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSB8fCBkYXRlLnRvSVNPU3RyaW5nKCkgIT09IHN0cmluZ1ZhbHVlKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9IElTTyB0aW1lc3RhbXBgKVxuXG4gIHJldHVybiBzdHJpbmdWYWx1ZVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlciB2YWx1ZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSYXcgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gUG9zaXRpdmUgaW50ZWdlci5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRQb3NpdGl2ZUludGVnZXIodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgMSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsb2NhbCBtdXRhdGlvbiAke2xhYmVsfSBwb3NpdGl2ZSBpbnRlZ2VyYClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBzdXBwb3J0ZWQgYmFzZS12ZXJzaW9uIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJhdyBiYXNlIHZlcnNpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVtYmVyIHwgbnVsbH0gLSBOb3JtYWxpemVkIGJhc2UgdmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCYXNlVmVyc2lvbih2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHZhbHVlXG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbG9jYWwgbXV0YXRpb24gYmFzZVZlcnNpb24gc3RyaW5nLCBudW1iZXIsIG9yIG51bGxcIilcbn1cblxuLyoqXG4gKiBDbG9uZXMgYSBKU09OLWNvbXBhdGlibGUgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IEpTT04gdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlfSAtIENsb25lZCBKU09OIHZhbHVlLlxuICovXG5mdW5jdGlvbiBjbG9uZUpzb25WYWx1ZSh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgSlNPTi1jb21wYXRpYmxlIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9YClcblxuICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlfSAqLyAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIENsb25lcyBhIEpTT04tY29tcGF0aWJsZSBvYmplY3QuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmF3IEpTT04gb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRmllbGQgbGFiZWwuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IC0gQ2xvbmVkIEpTT04gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZUpzb25PYmplY3QodmFsdWUsIGxhYmVsKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGxvY2FsIG11dGF0aW9uICR7bGFiZWx9IG9iamVjdGApXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59ICovIChjbG9uZUpzb25WYWx1ZSh2YWx1ZSwgbGFiZWwpKVxufVxuXG4vKipcbiAqIENsb25lcyBhIGxvY2FsIG11dGF0aW9uIGxvZyByZWNvcmQuXG4gKiBAcGFyYW0ge0xvY2FsTXV0YXRpb25Mb2dSZWNvcmR9IHJlY29yZCAtIFJlY29yZCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAtIENsb25lZCByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVjb3JkKHJlY29yZCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtMb2NhbE11dGF0aW9uTG9nUmVjb3JkfSAqLyAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZWNvcmQpKSlcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gbG9jYWwgbXV0YXRpb24gcmVjb3JkIGlkLlxuICogQHJldHVybnMge3N0cmluZ30gLSBSYW5kb20gcmVjb3JkIGlkLlxuICovXG5mdW5jdGlvbiByYW5kb21SZWNvcmRJZCgpIHtcbiAgY29uc3QgY3J5cHRvUHJvdmlkZXIgPSBnbG9iYWxUaGlzLmNyeXB0b1xuXG4gIGlmIChjcnlwdG9Qcm92aWRlciAmJiB0eXBlb2YgY3J5cHRvUHJvdmlkZXIucmFuZG9tVVVJRCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gY3J5cHRvUHJvdmlkZXIucmFuZG9tVVVJRCgpXG5cbiAgcmV0dXJuIGBsb2NhbC1tdXRhdGlvbi0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc2xpY2UoMil9YFxufVxuIl19
@@ -1,29 +1,3 @@
1
- /**
2
- * Signed offline grant envelope.
3
- * @typedef {object} SignedOfflineGrant
4
- * @property {"HS256"} algorithm - Signature algorithm.
5
- * @property {OfflineGrant} grant - Signed grant payload.
6
- * @property {string} keyId - Signing key id.
7
- * @property {string} signature - Hex HMAC signature with a hmac-sha256 prefix.
8
- */
9
- /**
10
- * Backend-issued offline grant payload.
11
- * @typedef {object} OfflineGrant
12
- * @property {string} deviceId - Device id allowed to use the grant.
13
- * @property {string} expiresAt - ISO timestamp after which replay must reject the grant.
14
- * @property {string} grantId - Stable grant id.
15
- * @property {string} issuedAt - ISO timestamp when the backend issued the grant.
16
- * @property {Record<string, import("../configuration-types.js").FrontendModelSyncJsonValue>} resources - Sync manifest/materialized resource metadata.
17
- * @property {Record<string, import("../configuration-types.js").FrontendModelSyncJsonValue>} scopes - Materialized grant scopes.
18
- * @property {string} userId - Actor user id allowed to use the grant.
19
- */
20
- /**
21
- * Offline grant signing key.
22
- * @typedef {object} OfflineGrantSigningKey
23
- * @property {boolean} [current] - Whether this is the active key for new grants.
24
- * @property {string} id - Public key id included in signed grant envelopes.
25
- * @property {string} secret - Private HMAC secret. Never expose this to clients.
26
- */
27
1
  /**
28
2
  * Creates a signed offline grant envelope.
29
3
  * @param {object} args - Arguments.
@@ -1 +1 @@
1
- {"version":3,"file":"offline-grant.d.ts","sourceRoot":"","sources":["../../../src/sync/offline-grant.js"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH;;;;;;;;;;GAUG;AAEH;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,0DAJG;IAA2B,KAAK,EAAxB,YAAY;IACiB,UAAU,EAAvC,sBAAsB;CAC9B,GAAU,OAAO,CAAC,kBAAkB,CAAC,CAiBvC;AAED;;;;;;;GAOG;AACH,sEALG;IAAoB,GAAG;IACU,WAAW,EAApC,kBAAkB;IACa,WAAW,EAA1C,sBAAsB,EAAE;CAChC,GAAU,OAAO,CAAC,YAAY,CAAC,CA4BjC;AAED;;;;;;;;;;;;GAYG;AACH,+HAVG;IAAqB,QAAQ,EAArB,MAAM;IACoB,OAAO,GAAjC,MAAM,GAAG,SAAS;IACQ,UAAU,GAApC,MAAM,GAAG,SAAS;IACP,GAAG,EAAd,IAAI;IACiF,SAAS,EAA9F,MAAM,CAAC,MAAM,EAAE,OAAO,2BAA2B,EAAE,0BAA0B,CAAC;IACO,MAAM,EAA3F,MAAM,CAAC,MAAM,EAAE,OAAO,2BAA2B,EAAE,0BAA0B,CAAC;IACjD,UAAU,EAAvC,sBAAsB;IACT,MAAM,EAAnB,MAAM;CACd,GAAU,OAAO,CAAC,kBAAkB,CAAC,CAoBvC;AAqDD;;;;GAIG;AACH,4DAHW,sBAAsB,GACpB,sBAAsB,CAUlC;AAED;;;;GAIG;AACH,2DAHW,sBAAsB,EAAE,GACtB,sBAAsB,CAUlC;;;;;;;;eAtMa,OAAO;;;;WACP,YAAY;;;;WACZ,MAAM;;;;eACN,MAAM;;;;;;;;;cAMN,MAAM;;;;eACN,MAAM;;;;aACN,MAAM;;;;cACN,MAAM;;;;eACN,MAAM,CAAC,MAAM,EAAE,OAAO,2BAA2B,EAAE,0BAA0B,CAAC;;;;YAC9E,MAAM,CAAC,MAAM,EAAE,OAAO,2BAA2B,EAAE,0BAA0B,CAAC;;;;YAC9E,MAAM;;;;;;;;;;;;;QAON,MAAM;;;;YACN,MAAM"}
1
+ {"version":3,"file":"offline-grant.d.ts","sourceRoot":"","sources":["../../../src/sync/offline-grant.js"],"names":[],"mappings":"AA+BA;;;;;;GAMG;AACH,0DAJG;IAA2B,KAAK,EAAxB,YAAY;IACiB,UAAU,EAAvC,sBAAsB;CAC9B,GAAU,OAAO,CAAC,kBAAkB,CAAC,CAiBvC;AAED;;;;;;;GAOG;AACH,sEALG;IAAoB,GAAG;IACU,WAAW,EAApC,kBAAkB;IACa,WAAW,EAA1C,sBAAsB,EAAE;CAChC,GAAU,OAAO,CAAC,YAAY,CAAC,CA4BjC;AAED;;;;;;;;;;;;GAYG;AACH,+HAVG;IAAqB,QAAQ,EAArB,MAAM;IACoB,OAAO,GAAjC,MAAM,GAAG,SAAS;IACQ,UAAU,GAApC,MAAM,GAAG,SAAS;IACP,GAAG,EAAd,IAAI;IACiF,SAAS,EAA9F,MAAM,CAAC,MAAM,EAAE,OAAO,2BAA2B,EAAE,0BAA0B,CAAC;IACO,MAAM,EAA3F,MAAM,CAAC,MAAM,EAAE,OAAO,2BAA2B,EAAE,0BAA0B,CAAC;IACjD,UAAU,EAAvC,sBAAsB;IACT,MAAM,EAAnB,MAAM;CACd,GAAU,OAAO,CAAC,kBAAkB,CAAC,CAoBvC;AAqDD;;;;GAIG;AACH,4DAHW,sBAAsB,GACpB,sBAAsB,CAUlC;AAED;;;;GAIG;AACH,2DAHW,sBAAsB,EAAE,GACtB,sBAAsB,CAUlC;;;;;;;;eAxMa,OAAO;;;;WACP,YAAY;;;;WACZ,MAAM;;;;eACN,MAAM;;;;;;;;;cAKN,MAAM;;;;eACN,MAAM;;;;aACN,MAAM;;;;cACN,MAAM;;;;eACN,MAAM,CAAC,MAAM,EAAE,OAAO,2BAA2B,EAAE,0BAA0B,CAAC;;;;YAC9E,MAAM,CAAC,MAAM,EAAE,OAAO,2BAA2B,EAAE,0BAA0B,CAAC;;;;YAC9E,MAAM;;;;;;;;;;;;;QAMN,MAAM;;;;YACN,MAAM"}
@@ -1,6 +1,3 @@
1
- // @ts-check
2
- const OFFLINE_GRANT_SIGNATURE_ALGORITHM = "HS256";
3
- const OFFLINE_GRANT_SIGNATURE_PREFIX = "hmac-sha256-";
4
1
  /**
5
2
  * Signed offline grant envelope.
6
3
  * @typedef {object} SignedOfflineGrant
@@ -27,6 +24,9 @@ const OFFLINE_GRANT_SIGNATURE_PREFIX = "hmac-sha256-";
27
24
  * @property {string} id - Public key id included in signed grant envelopes.
28
25
  * @property {string} secret - Private HMAC secret. Never expose this to clients.
29
26
  */
27
+ // @ts-check
28
+ const OFFLINE_GRANT_SIGNATURE_ALGORITHM = "HS256";
29
+ const OFFLINE_GRANT_SIGNATURE_PREFIX = "hmac-sha256-";
30
30
  /**
31
31
  * Creates a signed offline grant envelope.
32
32
  * @param {object} args - Arguments.
@@ -289,4 +289,4 @@ function deterministicJson({ label, value }) {
289
289
  }
290
290
  throw new Error(`Offline grant ${label} must be deterministic JSON`);
291
291
  }
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZmbGluZS1ncmFudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zeW5jL29mZmxpbmUtZ3JhbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE1BQU0saUNBQWlDLEdBQUcsT0FBTyxDQUFBO0FBQ2pELE1BQU0sOEJBQThCLEdBQUcsY0FBYyxDQUFBO0FBRXJEOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUM7SUFDMUQsTUFBTSxlQUFlLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEQsTUFBTSxvQkFBb0IsR0FBRywrQkFBK0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN4RSxNQUFNLGNBQWMsR0FBRywwQkFBMEIsQ0FBQztRQUNoRCxTQUFTLEVBQUUsaUNBQWlDO1FBQzVDLEtBQUssRUFBRSxlQUFlO1FBQ3RCLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO0tBQy9CLENBQUMsQ0FBQTtJQUVGLE9BQU87UUFDTCxTQUFTLEVBQUUsaUNBQWlDO1FBQzVDLEtBQUssRUFBRSxlQUFlO1FBQ3RCLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO1FBQzlCLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixDQUFDLE1BQU0sRUFBQyxDQUFDO0tBQy9GLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsRUFBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFDO0lBQ25GLE1BQU0scUJBQXFCLEdBQUcsMkJBQTJCLENBQUMsV0FB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QUFJLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkcsQ0FBQztJQUVELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1Riw2RkFBNkY7UUFDN0YsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO1FBRXJCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzVDLE1BQU0sVUFBVSxHQUFHLHNDQUFzQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7WUFFdEUsSUFBSSxVQUFVLEtBQUssU0FBUztnQkFBRSxTQUFRO1lBQ3RDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxFQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssSUFBSSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUNwRixDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUE7SUFDbkIsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssNkJBQTZCLENBQUMsQ0FBQTtBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmNvbnN0IE9GRkxJTkVfR1JBTlRfU0lHTkFUVVJFX0FMR09SSVRITSA9IFwiSFMyNTZcIlxuY29uc3QgT0ZGTElORV9HUkFOVF9TSUdOQVRVUkVfUFJFRklYID0gXCJobWFjLXNoYTI1Ni1cIlxuXG4vKipcbiAqIFNpZ25lZCBvZmZsaW5lIGdyYW50IGVudmVsb3BlLlxuICogQHR5cGVkZWYge29iamVjdH0gU2lnbmVkT2ZmbGluZUdyYW50XG4gKiBAcHJvcGVydHkge1wiSFMyNTZcIn0gYWxnb3JpdGhtIC0gU2lnbmF0dXJlIGFsZ29yaXRobS5cbiAqIEBwcm9wZXJ0eSB7T2ZmbGluZUdyYW50fSBncmFudCAtIFNpZ25lZCBncmFudCBwYXlsb2FkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleUlkIC0gU2lnbmluZyBrZXkgaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2lnbmF0dXJlIC0gSGV4IEhNQUMgc2lnbmF0dXJlIHdpdGggYSBobWFjLXNoYTI1NiBwcmVmaXguXG4gKi9cblxuLyoqXG4gKiBCYWNrZW5kLWlzc3VlZCBvZmZsaW5lIGdyYW50IHBheWxvYWQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBPZmZsaW5lR3JhbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZXZpY2VJZCAtIERldmljZSBpZCBhbGxvd2VkIHRvIHVzZSB0aGUgZ3JhbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXhwaXJlc0F0IC0gSVNPIHRpbWVzdGFtcCBhZnRlciB3aGljaCByZXBsYXkgbXVzdCByZWplY3QgdGhlIGdyYW50LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGdyYW50SWQgLSBTdGFibGUgZ3JhbnQgaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaXNzdWVkQXQgLSBJU08gdGltZXN0YW1wIHdoZW4gdGhlIGJhY2tlbmQgaXNzdWVkIHRoZSBncmFudC5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IHJlc291cmNlcyAtIFN5bmMgbWFuaWZlc3QvbWF0ZXJpYWxpemVkIHJlc291cmNlIG1ldGFkYXRhLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gc2NvcGVzIC0gTWF0ZXJpYWxpemVkIGdyYW50IHNjb3Blcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1c2VySWQgLSBBY3RvciB1c2VyIGlkIGFsbG93ZWQgdG8gdXNlIHRoZSBncmFudC5cbiAqL1xuXG4vKipcbiAqIE9mZmxpbmUgZ3JhbnQgc2lnbmluZyBrZXkuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBPZmZsaW5lR3JhbnRTaWduaW5nS2V5XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjdXJyZW50XSAtIFdoZXRoZXIgdGhpcyBpcyB0aGUgYWN0aXZlIGtleSBmb3IgbmV3IGdyYW50cy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFB1YmxpYyBrZXkgaWQgaW5jbHVkZWQgaW4gc2lnbmVkIGdyYW50IGVudmVsb3Blcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZWNyZXQgLSBQcml2YXRlIEhNQUMgc2VjcmV0LiBOZXZlciBleHBvc2UgdGhpcyB0byBjbGllbnRzLlxuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHNpZ25lZCBvZmZsaW5lIGdyYW50IGVudmVsb3BlLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge09mZmxpbmVHcmFudH0gYXJncy5ncmFudCAtIEdyYW50IHBheWxvYWQuXG4gKiBAcGFyYW0ge09mZmxpbmVHcmFudFNpZ25pbmdLZXl9IGFyZ3Muc2lnbmluZ0tleSAtIEN1cnJlbnQgc2lnbmluZyBrZXkuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduZWRPZmZsaW5lR3JhbnQ+fSAtIFNpZ25lZCBncmFudCBlbnZlbG9wZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU9mZmxpbmVHcmFudCh7Z3JhbnQsIHNpZ25pbmdLZXl9KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRHcmFudCA9IG5vcm1hbGl6ZU9mZmxpbmVHcmFudChncmFudClcbiAgY29uc3Qgbm9ybWFsaXplZFNpZ25pbmdLZXkgPSBub3JtYWxpemVPZmZsaW5lR3JhbnRTaWduaW5nS2V5KHNpZ25pbmdLZXkpXG4gIGNvbnN0IHNpZ25hdHVyZUlucHV0ID0gb2ZmbGluZUdyYW50U2lnbmF0dXJlSW5wdXQoe1xuICAgIGFsZ29yaXRobTogT0ZGTElORV9HUkFOVF9TSUdOQVRVUkVfQUxHT1JJVEhNLFxuICAgIGdyYW50OiBub3JtYWxpemVkR3JhbnQsXG4gICAga2V5SWQ6IG5vcm1hbGl6ZWRTaWduaW5nS2V5LmlkXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBhbGdvcml0aG06IE9GRkxJTkVfR1JBTlRfU0lHTkFUVVJFX0FMR09SSVRITSxcbiAgICBncmFudDogbm9ybWFsaXplZEdyYW50LFxuICAgIGtleUlkOiBub3JtYWxpemVkU2lnbmluZ0tleS5pZCxcbiAgICBzaWduYXR1cmU6IGF3YWl0IGhtYWNTaGEyNTZIZXgoe21lc3NhZ2U6IHNpZ25hdHVyZUlucHV0LCBzZWNyZXQ6IG5vcm1hbGl6ZWRTaWduaW5nS2V5LnNlY3JldH0pXG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyBhIHNpZ25lZCBvZmZsaW5lIGdyYW50IGFuZCByZXR1cm5zIHRoZSB0cnVzdGVkIGdyYW50IHBheWxvYWQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7RGF0ZX0gW2FyZ3Mubm93XSAtIFZlcmlmaWNhdGlvbiB0aW1lLiBEZWZhdWx0cyB0byBjdXJyZW50IHRpbWUuXG4gKiBAcGFyYW0ge1NpZ25lZE9mZmxpbmVHcmFudH0gYXJncy5zaWduZWRHcmFudCAtIFNpZ25lZCBncmFudCBlbnZlbG9wZS5cbiAqIEBwYXJhbSB7T2ZmbGluZUdyYW50U2lnbmluZ0tleVtdfSBhcmdzLnNpZ25pbmdLZXlzIC0gQ2FuZGlkYXRlIHZlcmlmaWNhdGlvbiBrZXlzLlxuICogQHJldHVybnMge1Byb21pc2U8T2ZmbGluZUdyYW50Pn0gLSBWZXJpZmllZCBncmFudCBwYXlsb2FkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5T2ZmbGluZUdyYW50KHtub3cgPSBuZXcgRGF0ZSgpLCBzaWduZWRHcmFudCwgc2lnbmluZ0tleXN9KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTaWduZWRHcmFudCA9IG5vcm1hbGl6ZVNpZ25lZE9mZmxpbmVHcmFudChzaWduZWRHcmFudClcblxuICBpZiAobm9ybWFsaXplZFNpZ25lZEdyYW50LmFsZ29yaXRobSAhPT0gT0ZGTElORV9HUkFOVF9TSUdOQVRVUkVfQUxHT1JJVEhNKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBvZmZsaW5lIGdyYW50IHNpZ25hdHVyZSBhbGdvcml0aG0gJyR7bm9ybWFsaXplZFNpZ25lZEdyYW50LmFsZ29yaXRobX0nYClcbiAgfVxuXG4gIGNvbnN0IHNpZ25pbmdLZXkgPSBzaWduaW5nS2V5c1xuICAgIC5tYXAoKGtleSkgPT4gbm9ybWFsaXplT2ZmbGluZUdyYW50U2lnbmluZ0tleShrZXkpKVxuICAgIC5maW5kKChrZXkpID0+IGtleS5pZCA9PT0gbm9ybWFsaXplZFNpZ25lZEdyYW50LmtleUlkKVxuXG4gIGlmICghc2lnbmluZ0tleSkgdGhyb3cgbmV3IEVycm9yKGBObyBvZmZsaW5lIGdyYW50IHNpZ25pbmcga2V5IGZvciBrZXkgaWQgJyR7bm9ybWFsaXplZFNpZ25lZEdyYW50LmtleUlkfSdgKVxuXG4gIGNvbnN0IGV4cGVjdGVkU2lnbmF0dXJlID0gYXdhaXQgaG1hY1NoYTI1NkhleCh7XG4gICAgbWVzc2FnZTogb2ZmbGluZUdyYW50U2lnbmF0dXJlSW5wdXQobm9ybWFsaXplZFNpZ25lZEdyYW50KSxcbiAgICBzZWNyZXQ6IHNpZ25pbmdLZXkuc2VjcmV0XG4gIH0pXG5cbiAgaWYgKGV4cGVjdGVkU2lnbmF0dXJlICE9PSBub3JtYWxpemVkU2lnbmVkR3JhbnQuc2lnbmF0dXJlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT2ZmbGluZSBncmFudCBzaWduYXR1cmUgZGlkIG5vdCBtYXRjaFwiKVxuICB9XG5cbiAgaWYgKE51bWJlci5pc05hTihub3cuZ2V0VGltZSgpKSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBvZmZsaW5lIGdyYW50IHZlcmlmaWNhdGlvbiB0aW1lXCIpXG4gIGlmIChuZXcgRGF0ZShub3JtYWxpemVkU2lnbmVkR3JhbnQuZ3JhbnQuZXhwaXJlc0F0KS5nZXRUaW1lKCkgPD0gbm93LmdldFRpbWUoKSkgdGhyb3cgbmV3IEVycm9yKFwiT2ZmbGluZSBncmFudCBleHBpcmVkXCIpXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRTaWduZWRHcmFudC5ncmFudFxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHNpZ25lZCBncmFudCBmcm9tIGJvb3RzdHJhcCByZXF1ZXN0IGlucHV0cy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGV2aWNlSWQgLSBEZXZpY2UgaWQuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gW2FyZ3MuZ3JhbnRJZF0gLSBPcHRpb25hbCBkZXRlcm1pbmlzdGljIGdyYW50IGlkIGZvciB0ZXN0cy9jdXN0b20gY2FsbGVycy5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBbYXJncy5ncmFudFR0bE1zXSAtIEdyYW50IFRUTCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0ge0RhdGV9IGFyZ3Mubm93IC0gSXNzdWUgdGltZS5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IGFyZ3MucmVzb3VyY2VzIC0gUmVzb3VyY2Ugc3luYyBtYW5pZmVzdC5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IGFyZ3Muc2NvcGVzIC0gR3JhbnQgc2NvcGVzLlxuICogQHBhcmFtIHtPZmZsaW5lR3JhbnRTaWduaW5nS2V5fSBhcmdzLnNpZ25pbmdLZXkgLSBDdXJyZW50IHNpZ25pbmcga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudXNlcklkIC0gQWN0b3IgdXNlciBpZC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFNpZ25lZE9mZmxpbmVHcmFudD59IC0gU2lnbmVkIGdyYW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlT2ZmbGluZUdyYW50RnJvbUJvb3RzdHJhcCh7ZGV2aWNlSWQsIGdyYW50SWQsIGdyYW50VHRsTXMsIG5vdywgcmVzb3VyY2VzLCBzY29wZXMsIHNpZ25pbmdLZXksIHVzZXJJZH0pIHtcbiAgY29uc3QgaXNzdWVkQXQgPSBpc29EYXRlU3RyaW5nKG5vdywgXCJpc3N1ZWRBdFwiKVxuICBjb25zdCB0dGxNcyA9IGdyYW50VHRsTXMgPT09IHVuZGVmaW5lZCA/IDI0ICogNjAgKiA2MCAqIDEwMDAgOiBncmFudFR0bE1zXG5cbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHR0bE1zKSB8fCB0dGxNcyA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJPZmZsaW5lIGdyYW50IFRUTCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXCIpXG5cbiAgcmV0dXJuIGF3YWl0IGNyZWF0ZU9mZmxpbmVHcmFudCh7XG4gICAgZ3JhbnQ6IHtcbiAgICAgIGRldmljZUlkLFxuICAgICAgZXhwaXJlc0F0OiBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgdHRsTXMpLnRvSVNPU3RyaW5nKCksXG4gICAgICBncmFudElkOiBncmFudElkIHx8IHJhbmRvbUdyYW50SWQoKSxcbiAgICAgIGlzc3VlZEF0LFxuICAgICAgcmVzb3VyY2VzLFxuICAgICAgc2NvcGVzLFxuICAgICAgdXNlcklkXG4gICAgfSxcbiAgICBzaWduaW5nS2V5XG4gIH0pXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBzaWduZWQgZ3JhbnQgc2lnbmF0dXJlIGlucHV0LlxuICogQHBhcmFtIHt7YWxnb3JpdGhtOiBcIkhTMjU2XCIsIGdyYW50OiBPZmZsaW5lR3JhbnQsIGtleUlkOiBzdHJpbmd9fSBzaWduZWRHcmFudCAtIEdyYW50IHNpZ25hdHVyZSBmaWVsZHMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFN0YWJsZSBzaWduYXR1cmUgaW5wdXQuXG4gKi9cbmZ1bmN0aW9uIG9mZmxpbmVHcmFudFNpZ25hdHVyZUlucHV0KHNpZ25lZEdyYW50KSB7XG4gIHJldHVybiBzdGFibGVKc29uU3RyaW5naWZ5KHtcbiAgICBhbGdvcml0aG06IHNpZ25lZEdyYW50LmFsZ29yaXRobSxcbiAgICBncmFudDogc2lnbmVkR3JhbnQuZ3JhbnQsXG4gICAga2V5SWQ6IHNpZ25lZEdyYW50LmtleUlkXG4gIH0pXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHNpZ25lZCBvZmZsaW5lIGdyYW50IGVudmVsb3BlLlxuICogQHBhcmFtIHtTaWduZWRPZmZsaW5lR3JhbnR9IHNpZ25lZEdyYW50IC0gU2lnbmVkIGdyYW50LlxuICogQHJldHVybnMge1NpZ25lZE9mZmxpbmVHcmFudH0gLSBOb3JtYWxpemVkIHNpZ25lZCBncmFudC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplU2lnbmVkT2ZmbGluZUdyYW50KHNpZ25lZEdyYW50KSB7XG4gIGlmICghc2lnbmVkR3JhbnQgfHwgdHlwZW9mIHNpZ25lZEdyYW50ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc2lnbmVkR3JhbnQpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzaWduZWQgb2ZmbGluZSBncmFudCBvYmplY3RcIilcbiAgaWYgKHNpZ25lZEdyYW50LmFsZ29yaXRobSAhPT0gT0ZGTElORV9HUkFOVF9TSUdOQVRVUkVfQUxHT1JJVEhNKSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIG9mZmxpbmUgZ3JhbnQgc2lnbmF0dXJlIGFsZ29yaXRobSAnJHtTdHJpbmcoc2lnbmVkR3JhbnQuYWxnb3JpdGhtKX0nYClcbiAgaWYgKHR5cGVvZiBzaWduZWRHcmFudC5rZXlJZCAhPT0gXCJzdHJpbmdcIiB8fCBzaWduZWRHcmFudC5rZXlJZC5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBvZmZsaW5lIGdyYW50IGtleSBpZFwiKVxuICBpZiAodHlwZW9mIHNpZ25lZEdyYW50LnNpZ25hdHVyZSAhPT0gXCJzdHJpbmdcIiB8fCAhc2lnbmVkR3JhbnQuc2lnbmF0dXJlLm1hdGNoKC9eaG1hYy1zaGEyNTYtW2EtZjAtOV17NjR9JC8pKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBvZmZsaW5lIGdyYW50IHNpZ25hdHVyZVwiKVxuXG4gIHJldHVybiB7XG4gICAgYWxnb3JpdGhtOiBzaWduZWRHcmFudC5hbGdvcml0aG0sXG4gICAgZ3JhbnQ6IG5vcm1hbGl6ZU9mZmxpbmVHcmFudChzaWduZWRHcmFudC5ncmFudCksXG4gICAga2V5SWQ6IHNpZ25lZEdyYW50LmtleUlkLFxuICAgIHNpZ25hdHVyZTogc2lnbmVkR3JhbnQuc2lnbmF0dXJlXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGFuIG9mZmxpbmUgZ3JhbnQgcGF5bG9hZC5cbiAqIEBwYXJhbSB7T2ZmbGluZUdyYW50fSBncmFudCAtIEdyYW50IHBheWxvYWQuXG4gKiBAcmV0dXJucyB7T2ZmbGluZUdyYW50fSAtIE5vcm1hbGl6ZWQgZ3JhbnQgcGF5bG9hZC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplT2ZmbGluZUdyYW50KGdyYW50KSB7XG4gIGlmICghZ3JhbnQgfHwgdHlwZW9mIGdyYW50ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZ3JhbnQpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBvZmZsaW5lIGdyYW50IG9iamVjdFwiKVxuXG4gIHJldHVybiB7XG4gICAgZGV2aWNlSWQ6IHJlcXVpcmVkU3RyaW5nKGdyYW50LmRldmljZUlkLCBcImRldmljZUlkXCIpLFxuICAgIGV4cGlyZXNBdDogaXNvRGF0ZVN0cmluZyhuZXcgRGF0ZShyZXF1aXJlZFN0cmluZyhncmFudC5leHBpcmVzQXQsIFwiZXhwaXJlc0F0XCIpKSwgXCJleHBpcmVzQXRcIiksXG4gICAgZ3JhbnRJZDogcmVxdWlyZWRTdHJpbmcoZ3JhbnQuZ3JhbnRJZCwgXCJncmFudElkXCIpLFxuICAgIGlzc3VlZEF0OiBpc29EYXRlU3RyaW5nKG5ldyBEYXRlKHJlcXVpcmVkU3RyaW5nKGdyYW50Lmlzc3VlZEF0LCBcImlzc3VlZEF0XCIpKSwgXCJpc3N1ZWRBdFwiKSxcbiAgICByZXNvdXJjZXM6IGRldGVybWluaXN0aWNKc29uT2JqZWN0KHtsYWJlbDogXCJyZXNvdXJjZXNcIiwgdmFsdWU6IGdyYW50LnJlc291cmNlc30pLFxuICAgIHNjb3BlczogZGV0ZXJtaW5pc3RpY0pzb25PYmplY3Qoe2xhYmVsOiBcInNjb3Blc1wiLCB2YWx1ZTogZ3JhbnQuc2NvcGVzfSksXG4gICAgdXNlcklkOiByZXF1aXJlZFN0cmluZyhncmFudC51c2VySWQsIFwidXNlcklkXCIpXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGFuIG9mZmxpbmUgZ3JhbnQgc2lnbmluZyBrZXkuXG4gKiBAcGFyYW0ge09mZmxpbmVHcmFudFNpZ25pbmdLZXl9IHNpZ25pbmdLZXkgLSBTaWduaW5nIGtleS5cbiAqIEByZXR1cm5zIHtPZmZsaW5lR3JhbnRTaWduaW5nS2V5fSAtIE5vcm1hbGl6ZWQgc2lnbmluZyBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPZmZsaW5lR3JhbnRTaWduaW5nS2V5KHNpZ25pbmdLZXkpIHtcbiAgaWYgKCFzaWduaW5nS2V5IHx8IHR5cGVvZiBzaWduaW5nS2V5ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc2lnbmluZ0tleSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG9mZmxpbmUgZ3JhbnQgc2lnbmluZyBrZXkgb2JqZWN0XCIpXG5cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiBzaWduaW5nS2V5LmN1cnJlbnQgPT09IHRydWUsXG4gICAgaWQ6IHJlcXVpcmVkU3RyaW5nKHNpZ25pbmdLZXkuaWQsIFwic2lnbmluZ0tleS5pZFwiKSxcbiAgICBzZWNyZXQ6IHJlcXVpcmVkU3RyaW5nKHNpZ25pbmdLZXkuc2VjcmV0LCBcInNpZ25pbmdLZXkuc2VjcmV0XCIpXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGtleSB1c2VkIHRvIHNpZ24gbmV3IGdyYW50cy5cbiAqIEBwYXJhbSB7T2ZmbGluZUdyYW50U2lnbmluZ0tleVtdfSBzaWduaW5nS2V5cyAtIENvbmZpZ3VyZWQgc2lnbmluZyBrZXlzLlxuICogQHJldHVybnMge09mZmxpbmVHcmFudFNpZ25pbmdLZXl9IC0gQ3VycmVudCBzaWduaW5nIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRPZmZsaW5lR3JhbnRTaWduaW5nS2V5KHNpZ25pbmdLZXlzKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRLZXlzID0gc2lnbmluZ0tleXMubWFwKChrZXkpID0+IG5vcm1hbGl6ZU9mZmxpbmVHcmFudFNpZ25pbmdLZXkoa2V5KSlcbiAgY29uc3QgY3VycmVudEtleXMgPSBub3JtYWxpemVkS2V5cy5maWx0ZXIoKGtleSkgPT4ga2V5LmN1cnJlbnQgPT09IHRydWUpXG5cbiAgaWYgKG5vcm1hbGl6ZWRLZXlzLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcihcIkF0IGxlYXN0IG9uZSBvZmZsaW5lIGdyYW50IHNpZ25pbmcga2V5IGlzIHJlcXVpcmVkXCIpXG4gIGlmIChjdXJyZW50S2V5cy5sZW5ndGggPiAxKSB0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IG9uZSBvZmZsaW5lIGdyYW50IHNpZ25pbmcga2V5IGNhbiBiZSBjdXJyZW50XCIpXG5cbiAgcmV0dXJuIGN1cnJlbnRLZXlzWzBdIHx8IG5vcm1hbGl6ZWRLZXlzWzBdXG59XG5cbi8qKlxuICogU2lnbnMgYSBtZXNzYWdlIHVzaW5nIEhNQUMtU0hBMjU2IGFuZCByZXR1cm5zIGEgcHJlZml4ZWQgaGV4IHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSAtIE1lc3NhZ2UgdG8gc2lnbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnNlY3JldCAtIEhNQUMgc2VjcmV0LlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBQcmVmaXhlZCBoZXggc2lnbmF0dXJlLlxuICovXG5hc3luYyBmdW5jdGlvbiBobWFjU2hhMjU2SGV4KHttZXNzYWdlLCBzZWNyZXR9KSB7XG4gIGNvbnN0IGNyeXB0b1Byb3ZpZGVyID0gZ2xvYmFsVGhpcy5jcnlwdG9cblxuICBpZiAoIWNyeXB0b1Byb3ZpZGVyPy5zdWJ0bGUpIHRocm93IG5ldyBFcnJvcihcIldlYkNyeXB0byBzdWJ0bGUgQVBJIGlzIHJlcXVpcmVkIGZvciBvZmZsaW5lIGdyYW50IHNpZ25pbmdcIilcblxuICBjb25zdCBrZXkgPSBhd2FpdCBjcnlwdG9Qcm92aWRlci5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgIFwicmF3XCIsXG4gICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHNlY3JldCksXG4gICAge2hhc2g6IFwiU0hBLTI1NlwiLCBuYW1lOiBcIkhNQUNcIn0sXG4gICAgZmFsc2UsXG4gICAgW1wic2lnblwiXVxuICApXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IGNyeXB0b1Byb3ZpZGVyLnN1YnRsZS5zaWduKFwiSE1BQ1wiLCBrZXksIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShtZXNzYWdlKSlcblxuICByZXR1cm4gYCR7T0ZGTElORV9HUkFOVF9TSUdOQVRVUkVfUFJFRklYfSR7aGV4KG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSkpfWBcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBieXRlcyB0byBsb3dlci1jYXNlIGhleC5cbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXMgLSBCeXRlcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gSGV4IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gaGV4KGJ5dGVzKSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKS5tYXAoKGJ5dGUpID0+IGJ5dGUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKSkuam9pbihcIlwiKVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgbm9uLWVtcHR5IHN0cmluZyBmaWVsZC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBWYWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gRmllbGQgbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU3RyaW5nIHZhbHVlLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZFN0cmluZyh2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgb2ZmbGluZSBncmFudCAke25hbWV9YClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgRGF0ZSB0byBhbiBJU08gdGltZXN0YW1wLlxuICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gRGF0ZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBJU08gdGltZXN0YW1wLlxuICovXG5mdW5jdGlvbiBpc29EYXRlU3RyaW5nKGRhdGUsIGxhYmVsKSB7XG4gIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb2ZmbGluZSBncmFudCAke2xhYmVsfWApXG5cbiAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGZhbGxiYWNrIHJhbmRvbSBncmFudCBpZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gR3JhbnQgaWQuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUdyYW50SWQoKSB7XG4gIHJldHVybiBnbG9iYWxUaGlzLmNyeXB0bz8ucmFuZG9tVVVJRCA/IGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbVVVSUQoKSA6IGBncmFudC0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc2xpY2UoMil9YFxufVxuXG4vKipcbiAqIFN0YWJsZSBKU09OIHN0cmluZ2lmaWVyIHdpdGggc29ydGVkIG9iamVjdCBrZXlzLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ30gLSBKU09OIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gc3RhYmxlSnNvblN0cmluZ2lmeSh2YWx1ZSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGV0ZXJtaW5pc3RpY0pzb24oe2xhYmVsOiBcInJvb3RcIiwgdmFsdWV9KSlcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgdmFsdWUgYXMgYSBKU09OIG9iamVjdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubGFiZWwgLSBEaWFnbm9zdGljIGxhYmVsLlxuICogQHBhcmFtIHt1bmtub3dufSBhcmdzLnZhbHVlIC0gVmFsdWUuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IC0gSlNPTiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluaXN0aWNKc29uT2JqZWN0KHtsYWJlbCwgdmFsdWV9KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBkZXRlcm1pbmlzdGljSnNvbih7bGFiZWwsIHZhbHVlfSlcblxuICBpZiAoIW5vcm1hbGl6ZWQgfHwgdHlwZW9mIG5vcm1hbGl6ZWQgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShub3JtYWxpemVkKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBvZmZsaW5lIGdyYW50ICR7bGFiZWx9IG9iamVjdGApXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59ICovIChub3JtYWxpemVkKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZGV0ZXJtaW5pc3RpYyBKU09OIHdpdGggc29ydGVkIG9iamVjdCBrZXlzLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5sYWJlbCAtIERpYWdub3N0aWMgbGFiZWwuXG4gKiBAcGFyYW0ge3Vua25vd259IGFyZ3MudmFsdWUgLSBWYWx1ZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlfSAtIE5vcm1hbGl6ZWQgSlNPTiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5pc3RpY0pzb24oe2xhYmVsLCB2YWx1ZX0pIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIHZhbHVlXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCgoZW50cnksIGluZGV4KSA9PiBkZXRlcm1pbmlzdGljSnNvbih7bGFiZWw6IGAke2xhYmVsfS8ke2luZGV4fWAsIHZhbHVlOiBlbnRyeX0pKVxuICB9XG5cbiAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gKi9cbiAgICBjb25zdCBub3JtYWxpemVkID0ge31cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCkpIHtcbiAgICAgIGNvbnN0IGNoaWxkVmFsdWUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpW2tleV1cblxuICAgICAgaWYgKGNoaWxkVmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWVcbiAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IGRldGVybWluaXN0aWNKc29uKHtsYWJlbDogYCR7bGFiZWx9LyR7a2V5fWAsIHZhbHVlOiBjaGlsZFZhbHVlfSlcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBPZmZsaW5lIGdyYW50ICR7bGFiZWx9IG11c3QgYmUgZGV0ZXJtaW5pc3RpYyBKU09OYClcbn1cbiJdfQ==
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZmbGluZS1ncmFudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zeW5jL29mZmxpbmUtZ3JhbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNIOzs7Ozs7Ozs7O0dBVUc7QUFDSDs7Ozs7O0dBTUc7QUFDSCxZQUFZO0FBRVosTUFBTSxpQ0FBaUMsR0FBRyxPQUFPLENBQUE7QUFDakQsTUFBTSw4QkFBOEIsR0FBRyxjQUFjLENBQUE7QUFFckQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUM7SUFDMUQsTUFBTSxlQUFlLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEQsTUFBTSxvQkFBb0IsR0FBRywrQkFBK0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN4RSxNQUFNLGNBQWMsR0FBRywwQkFBMEIsQ0FBQztRQUNoRCxTQUFTLEVBQUUsaUNBQWlDO1FBQzVDLEtBQUssRUFBRSxlQUFlO1FBQ3RCLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO0tBQy9CLENBQUMsQ0FBQTtJQUVGLE9BQU87UUFDTCxTQUFTLEVBQUUsaUNBQWlDO1FBQzVDLEtBQUssRUFBRSxlQUFlO1FBQ3RCLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO1FBQzlCLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixDQUFDLE1BQU0sRUFBQyxDQUFDO0tBQy9GLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsRUFBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFDO0lBQ25GLE1BQU0scUJBQXFCLEdBQUcsMkJBQTJCLENBQUMsV0FB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QUFJLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkcsQ0FBQztJQUVELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1Riw2RkFBNkY7UUFDN0YsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO1FBRXJCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzVDLE1BQU0sVUFBVSxHQUFHLHNDQUFzQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7WUFFdEUsSUFBSSxVQUFVLEtBQUssU0FBUztnQkFBRSxTQUFRO1lBQ3RDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxFQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssSUFBSSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUNwRixDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUE7SUFDbkIsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssNkJBQTZCLENBQUMsQ0FBQTtBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaWduZWQgb2ZmbGluZSBncmFudCBlbnZlbG9wZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNpZ25lZE9mZmxpbmVHcmFudFxuICogQHByb3BlcnR5IHtcIkhTMjU2XCJ9IGFsZ29yaXRobSAtIFNpZ25hdHVyZSBhbGdvcml0aG0uXG4gKiBAcHJvcGVydHkge09mZmxpbmVHcmFudH0gZ3JhbnQgLSBTaWduZWQgZ3JhbnQgcGF5bG9hZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlJZCAtIFNpZ25pbmcga2V5IGlkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNpZ25hdHVyZSAtIEhleCBITUFDIHNpZ25hdHVyZSB3aXRoIGEgaG1hYy1zaGEyNTYgcHJlZml4LlxuICovXG4vKipcbiAqIEJhY2tlbmQtaXNzdWVkIG9mZmxpbmUgZ3JhbnQgcGF5bG9hZC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IE9mZmxpbmVHcmFudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRldmljZUlkIC0gRGV2aWNlIGlkIGFsbG93ZWQgdG8gdXNlIHRoZSBncmFudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBleHBpcmVzQXQgLSBJU08gdGltZXN0YW1wIGFmdGVyIHdoaWNoIHJlcGxheSBtdXN0IHJlamVjdCB0aGUgZ3JhbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZ3JhbnRJZCAtIFN0YWJsZSBncmFudCBpZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpc3N1ZWRBdCAtIElTTyB0aW1lc3RhbXAgd2hlbiB0aGUgYmFja2VuZCBpc3N1ZWQgdGhlIGdyYW50LlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gcmVzb3VyY2VzIC0gU3luYyBtYW5pZmVzdC9tYXRlcmlhbGl6ZWQgcmVzb3VyY2UgbWV0YWRhdGEuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSBzY29wZXMgLSBNYXRlcmlhbGl6ZWQgZ3JhbnQgc2NvcGVzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHVzZXJJZCAtIEFjdG9yIHVzZXIgaWQgYWxsb3dlZCB0byB1c2UgdGhlIGdyYW50LlxuICovXG4vKipcbiAqIE9mZmxpbmUgZ3JhbnQgc2lnbmluZyBrZXkuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBPZmZsaW5lR3JhbnRTaWduaW5nS2V5XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjdXJyZW50XSAtIFdoZXRoZXIgdGhpcyBpcyB0aGUgYWN0aXZlIGtleSBmb3IgbmV3IGdyYW50cy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFB1YmxpYyBrZXkgaWQgaW5jbHVkZWQgaW4gc2lnbmVkIGdyYW50IGVudmVsb3Blcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZWNyZXQgLSBQcml2YXRlIEhNQUMgc2VjcmV0LiBOZXZlciBleHBvc2UgdGhpcyB0byBjbGllbnRzLlxuICovXG4vLyBAdHMtY2hlY2tcblxuY29uc3QgT0ZGTElORV9HUkFOVF9TSUdOQVRVUkVfQUxHT1JJVEhNID0gXCJIUzI1NlwiXG5jb25zdCBPRkZMSU5FX0dSQU5UX1NJR05BVFVSRV9QUkVGSVggPSBcImhtYWMtc2hhMjU2LVwiXG5cbi8qKlxuICogQ3JlYXRlcyBhIHNpZ25lZCBvZmZsaW5lIGdyYW50IGVudmVsb3BlLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge09mZmxpbmVHcmFudH0gYXJncy5ncmFudCAtIEdyYW50IHBheWxvYWQuXG4gKiBAcGFyYW0ge09mZmxpbmVHcmFudFNpZ25pbmdLZXl9IGFyZ3Muc2lnbmluZ0tleSAtIEN1cnJlbnQgc2lnbmluZyBrZXkuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduZWRPZmZsaW5lR3JhbnQ+fSAtIFNpZ25lZCBncmFudCBlbnZlbG9wZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU9mZmxpbmVHcmFudCh7Z3JhbnQsIHNpZ25pbmdLZXl9KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRHcmFudCA9IG5vcm1hbGl6ZU9mZmxpbmVHcmFudChncmFudClcbiAgY29uc3Qgbm9ybWFsaXplZFNpZ25pbmdLZXkgPSBub3JtYWxpemVPZmZsaW5lR3JhbnRTaWduaW5nS2V5KHNpZ25pbmdLZXkpXG4gIGNvbnN0IHNpZ25hdHVyZUlucHV0ID0gb2ZmbGluZUdyYW50U2lnbmF0dXJlSW5wdXQoe1xuICAgIGFsZ29yaXRobTogT0ZGTElORV9HUkFOVF9TSUdOQVRVUkVfQUxHT1JJVEhNLFxuICAgIGdyYW50OiBub3JtYWxpemVkR3JhbnQsXG4gICAga2V5SWQ6IG5vcm1hbGl6ZWRTaWduaW5nS2V5LmlkXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBhbGdvcml0aG06IE9GRkxJTkVfR1JBTlRfU0lHTkFUVVJFX0FMR09SSVRITSxcbiAgICBncmFudDogbm9ybWFsaXplZEdyYW50LFxuICAgIGtleUlkOiBub3JtYWxpemVkU2lnbmluZ0tleS5pZCxcbiAgICBzaWduYXR1cmU6IGF3YWl0IGhtYWNTaGEyNTZIZXgoe21lc3NhZ2U6IHNpZ25hdHVyZUlucHV0LCBzZWNyZXQ6IG5vcm1hbGl6ZWRTaWduaW5nS2V5LnNlY3JldH0pXG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyBhIHNpZ25lZCBvZmZsaW5lIGdyYW50IGFuZCByZXR1cm5zIHRoZSB0cnVzdGVkIGdyYW50IHBheWxvYWQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7RGF0ZX0gW2FyZ3Mubm93XSAtIFZlcmlmaWNhdGlvbiB0aW1lLiBEZWZhdWx0cyB0byBjdXJyZW50IHRpbWUuXG4gKiBAcGFyYW0ge1NpZ25lZE9mZmxpbmVHcmFudH0gYXJncy5zaWduZWRHcmFudCAtIFNpZ25lZCBncmFudCBlbnZlbG9wZS5cbiAqIEBwYXJhbSB7T2ZmbGluZUdyYW50U2lnbmluZ0tleVtdfSBhcmdzLnNpZ25pbmdLZXlzIC0gQ2FuZGlkYXRlIHZlcmlmaWNhdGlvbiBrZXlzLlxuICogQHJldHVybnMge1Byb21pc2U8T2ZmbGluZUdyYW50Pn0gLSBWZXJpZmllZCBncmFudCBwYXlsb2FkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5T2ZmbGluZUdyYW50KHtub3cgPSBuZXcgRGF0ZSgpLCBzaWduZWRHcmFudCwgc2lnbmluZ0tleXN9KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTaWduZWRHcmFudCA9IG5vcm1hbGl6ZVNpZ25lZE9mZmxpbmVHcmFudChzaWduZWRHcmFudClcblxuICBpZiAobm9ybWFsaXplZFNpZ25lZEdyYW50LmFsZ29yaXRobSAhPT0gT0ZGTElORV9HUkFOVF9TSUdOQVRVUkVfQUxHT1JJVEhNKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBvZmZsaW5lIGdyYW50IHNpZ25hdHVyZSBhbGdvcml0aG0gJyR7bm9ybWFsaXplZFNpZ25lZEdyYW50LmFsZ29yaXRobX0nYClcbiAgfVxuXG4gIGNvbnN0IHNpZ25pbmdLZXkgPSBzaWduaW5nS2V5c1xuICAgIC5tYXAoKGtleSkgPT4gbm9ybWFsaXplT2ZmbGluZUdyYW50U2lnbmluZ0tleShrZXkpKVxuICAgIC5maW5kKChrZXkpID0+IGtleS5pZCA9PT0gbm9ybWFsaXplZFNpZ25lZEdyYW50LmtleUlkKVxuXG4gIGlmICghc2lnbmluZ0tleSkgdGhyb3cgbmV3IEVycm9yKGBObyBvZmZsaW5lIGdyYW50IHNpZ25pbmcga2V5IGZvciBrZXkgaWQgJyR7bm9ybWFsaXplZFNpZ25lZEdyYW50LmtleUlkfSdgKVxuXG4gIGNvbnN0IGV4cGVjdGVkU2lnbmF0dXJlID0gYXdhaXQgaG1hY1NoYTI1NkhleCh7XG4gICAgbWVzc2FnZTogb2ZmbGluZUdyYW50U2lnbmF0dXJlSW5wdXQobm9ybWFsaXplZFNpZ25lZEdyYW50KSxcbiAgICBzZWNyZXQ6IHNpZ25pbmdLZXkuc2VjcmV0XG4gIH0pXG5cbiAgaWYgKGV4cGVjdGVkU2lnbmF0dXJlICE9PSBub3JtYWxpemVkU2lnbmVkR3JhbnQuc2lnbmF0dXJlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT2ZmbGluZSBncmFudCBzaWduYXR1cmUgZGlkIG5vdCBtYXRjaFwiKVxuICB9XG5cbiAgaWYgKE51bWJlci5pc05hTihub3cuZ2V0VGltZSgpKSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBvZmZsaW5lIGdyYW50IHZlcmlmaWNhdGlvbiB0aW1lXCIpXG4gIGlmIChuZXcgRGF0ZShub3JtYWxpemVkU2lnbmVkR3JhbnQuZ3JhbnQuZXhwaXJlc0F0KS5nZXRUaW1lKCkgPD0gbm93LmdldFRpbWUoKSkgdGhyb3cgbmV3IEVycm9yKFwiT2ZmbGluZSBncmFudCBleHBpcmVkXCIpXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRTaWduZWRHcmFudC5ncmFudFxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHNpZ25lZCBncmFudCBmcm9tIGJvb3RzdHJhcCByZXF1ZXN0IGlucHV0cy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGV2aWNlSWQgLSBEZXZpY2UgaWQuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gW2FyZ3MuZ3JhbnRJZF0gLSBPcHRpb25hbCBkZXRlcm1pbmlzdGljIGdyYW50IGlkIGZvciB0ZXN0cy9jdXN0b20gY2FsbGVycy5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBbYXJncy5ncmFudFR0bE1zXSAtIEdyYW50IFRUTCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0ge0RhdGV9IGFyZ3Mubm93IC0gSXNzdWUgdGltZS5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IGFyZ3MucmVzb3VyY2VzIC0gUmVzb3VyY2Ugc3luYyBtYW5pZmVzdC5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IGFyZ3Muc2NvcGVzIC0gR3JhbnQgc2NvcGVzLlxuICogQHBhcmFtIHtPZmZsaW5lR3JhbnRTaWduaW5nS2V5fSBhcmdzLnNpZ25pbmdLZXkgLSBDdXJyZW50IHNpZ25pbmcga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudXNlcklkIC0gQWN0b3IgdXNlciBpZC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFNpZ25lZE9mZmxpbmVHcmFudD59IC0gU2lnbmVkIGdyYW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlT2ZmbGluZUdyYW50RnJvbUJvb3RzdHJhcCh7ZGV2aWNlSWQsIGdyYW50SWQsIGdyYW50VHRsTXMsIG5vdywgcmVzb3VyY2VzLCBzY29wZXMsIHNpZ25pbmdLZXksIHVzZXJJZH0pIHtcbiAgY29uc3QgaXNzdWVkQXQgPSBpc29EYXRlU3RyaW5nKG5vdywgXCJpc3N1ZWRBdFwiKVxuICBjb25zdCB0dGxNcyA9IGdyYW50VHRsTXMgPT09IHVuZGVmaW5lZCA/IDI0ICogNjAgKiA2MCAqIDEwMDAgOiBncmFudFR0bE1zXG5cbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHR0bE1zKSB8fCB0dGxNcyA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJPZmZsaW5lIGdyYW50IFRUTCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXCIpXG5cbiAgcmV0dXJuIGF3YWl0IGNyZWF0ZU9mZmxpbmVHcmFudCh7XG4gICAgZ3JhbnQ6IHtcbiAgICAgIGRldmljZUlkLFxuICAgICAgZXhwaXJlc0F0OiBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgdHRsTXMpLnRvSVNPU3RyaW5nKCksXG4gICAgICBncmFudElkOiBncmFudElkIHx8IHJhbmRvbUdyYW50SWQoKSxcbiAgICAgIGlzc3VlZEF0LFxuICAgICAgcmVzb3VyY2VzLFxuICAgICAgc2NvcGVzLFxuICAgICAgdXNlcklkXG4gICAgfSxcbiAgICBzaWduaW5nS2V5XG4gIH0pXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBzaWduZWQgZ3JhbnQgc2lnbmF0dXJlIGlucHV0LlxuICogQHBhcmFtIHt7YWxnb3JpdGhtOiBcIkhTMjU2XCIsIGdyYW50OiBPZmZsaW5lR3JhbnQsIGtleUlkOiBzdHJpbmd9fSBzaWduZWRHcmFudCAtIEdyYW50IHNpZ25hdHVyZSBmaWVsZHMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFN0YWJsZSBzaWduYXR1cmUgaW5wdXQuXG4gKi9cbmZ1bmN0aW9uIG9mZmxpbmVHcmFudFNpZ25hdHVyZUlucHV0KHNpZ25lZEdyYW50KSB7XG4gIHJldHVybiBzdGFibGVKc29uU3RyaW5naWZ5KHtcbiAgICBhbGdvcml0aG06IHNpZ25lZEdyYW50LmFsZ29yaXRobSxcbiAgICBncmFudDogc2lnbmVkR3JhbnQuZ3JhbnQsXG4gICAga2V5SWQ6IHNpZ25lZEdyYW50LmtleUlkXG4gIH0pXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHNpZ25lZCBvZmZsaW5lIGdyYW50IGVudmVsb3BlLlxuICogQHBhcmFtIHtTaWduZWRPZmZsaW5lR3JhbnR9IHNpZ25lZEdyYW50IC0gU2lnbmVkIGdyYW50LlxuICogQHJldHVybnMge1NpZ25lZE9mZmxpbmVHcmFudH0gLSBOb3JtYWxpemVkIHNpZ25lZCBncmFudC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplU2lnbmVkT2ZmbGluZUdyYW50KHNpZ25lZEdyYW50KSB7XG4gIGlmICghc2lnbmVkR3JhbnQgfHwgdHlwZW9mIHNpZ25lZEdyYW50ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc2lnbmVkR3JhbnQpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzaWduZWQgb2ZmbGluZSBncmFudCBvYmplY3RcIilcbiAgaWYgKHNpZ25lZEdyYW50LmFsZ29yaXRobSAhPT0gT0ZGTElORV9HUkFOVF9TSUdOQVRVUkVfQUxHT1JJVEhNKSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIG9mZmxpbmUgZ3JhbnQgc2lnbmF0dXJlIGFsZ29yaXRobSAnJHtTdHJpbmcoc2lnbmVkR3JhbnQuYWxnb3JpdGhtKX0nYClcbiAgaWYgKHR5cGVvZiBzaWduZWRHcmFudC5rZXlJZCAhPT0gXCJzdHJpbmdcIiB8fCBzaWduZWRHcmFudC5rZXlJZC5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBvZmZsaW5lIGdyYW50IGtleSBpZFwiKVxuICBpZiAodHlwZW9mIHNpZ25lZEdyYW50LnNpZ25hdHVyZSAhPT0gXCJzdHJpbmdcIiB8fCAhc2lnbmVkR3JhbnQuc2lnbmF0dXJlLm1hdGNoKC9eaG1hYy1zaGEyNTYtW2EtZjAtOV17NjR9JC8pKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBvZmZsaW5lIGdyYW50IHNpZ25hdHVyZVwiKVxuXG4gIHJldHVybiB7XG4gICAgYWxnb3JpdGhtOiBzaWduZWRHcmFudC5hbGdvcml0aG0sXG4gICAgZ3JhbnQ6IG5vcm1hbGl6ZU9mZmxpbmVHcmFudChzaWduZWRHcmFudC5ncmFudCksXG4gICAga2V5SWQ6IHNpZ25lZEdyYW50LmtleUlkLFxuICAgIHNpZ25hdHVyZTogc2lnbmVkR3JhbnQuc2lnbmF0dXJlXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGFuIG9mZmxpbmUgZ3JhbnQgcGF5bG9hZC5cbiAqIEBwYXJhbSB7T2ZmbGluZUdyYW50fSBncmFudCAtIEdyYW50IHBheWxvYWQuXG4gKiBAcmV0dXJucyB7T2ZmbGluZUdyYW50fSAtIE5vcm1hbGl6ZWQgZ3JhbnQgcGF5bG9hZC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplT2ZmbGluZUdyYW50KGdyYW50KSB7XG4gIGlmICghZ3JhbnQgfHwgdHlwZW9mIGdyYW50ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZ3JhbnQpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBvZmZsaW5lIGdyYW50IG9iamVjdFwiKVxuXG4gIHJldHVybiB7XG4gICAgZGV2aWNlSWQ6IHJlcXVpcmVkU3RyaW5nKGdyYW50LmRldmljZUlkLCBcImRldmljZUlkXCIpLFxuICAgIGV4cGlyZXNBdDogaXNvRGF0ZVN0cmluZyhuZXcgRGF0ZShyZXF1aXJlZFN0cmluZyhncmFudC5leHBpcmVzQXQsIFwiZXhwaXJlc0F0XCIpKSwgXCJleHBpcmVzQXRcIiksXG4gICAgZ3JhbnRJZDogcmVxdWlyZWRTdHJpbmcoZ3JhbnQuZ3JhbnRJZCwgXCJncmFudElkXCIpLFxuICAgIGlzc3VlZEF0OiBpc29EYXRlU3RyaW5nKG5ldyBEYXRlKHJlcXVpcmVkU3RyaW5nKGdyYW50Lmlzc3VlZEF0LCBcImlzc3VlZEF0XCIpKSwgXCJpc3N1ZWRBdFwiKSxcbiAgICByZXNvdXJjZXM6IGRldGVybWluaXN0aWNKc29uT2JqZWN0KHtsYWJlbDogXCJyZXNvdXJjZXNcIiwgdmFsdWU6IGdyYW50LnJlc291cmNlc30pLFxuICAgIHNjb3BlczogZGV0ZXJtaW5pc3RpY0pzb25PYmplY3Qoe2xhYmVsOiBcInNjb3Blc1wiLCB2YWx1ZTogZ3JhbnQuc2NvcGVzfSksXG4gICAgdXNlcklkOiByZXF1aXJlZFN0cmluZyhncmFudC51c2VySWQsIFwidXNlcklkXCIpXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGFuIG9mZmxpbmUgZ3JhbnQgc2lnbmluZyBrZXkuXG4gKiBAcGFyYW0ge09mZmxpbmVHcmFudFNpZ25pbmdLZXl9IHNpZ25pbmdLZXkgLSBTaWduaW5nIGtleS5cbiAqIEByZXR1cm5zIHtPZmZsaW5lR3JhbnRTaWduaW5nS2V5fSAtIE5vcm1hbGl6ZWQgc2lnbmluZyBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPZmZsaW5lR3JhbnRTaWduaW5nS2V5KHNpZ25pbmdLZXkpIHtcbiAgaWYgKCFzaWduaW5nS2V5IHx8IHR5cGVvZiBzaWduaW5nS2V5ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc2lnbmluZ0tleSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG9mZmxpbmUgZ3JhbnQgc2lnbmluZyBrZXkgb2JqZWN0XCIpXG5cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiBzaWduaW5nS2V5LmN1cnJlbnQgPT09IHRydWUsXG4gICAgaWQ6IHJlcXVpcmVkU3RyaW5nKHNpZ25pbmdLZXkuaWQsIFwic2lnbmluZ0tleS5pZFwiKSxcbiAgICBzZWNyZXQ6IHJlcXVpcmVkU3RyaW5nKHNpZ25pbmdLZXkuc2VjcmV0LCBcInNpZ25pbmdLZXkuc2VjcmV0XCIpXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGtleSB1c2VkIHRvIHNpZ24gbmV3IGdyYW50cy5cbiAqIEBwYXJhbSB7T2ZmbGluZUdyYW50U2lnbmluZ0tleVtdfSBzaWduaW5nS2V5cyAtIENvbmZpZ3VyZWQgc2lnbmluZyBrZXlzLlxuICogQHJldHVybnMge09mZmxpbmVHcmFudFNpZ25pbmdLZXl9IC0gQ3VycmVudCBzaWduaW5nIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRPZmZsaW5lR3JhbnRTaWduaW5nS2V5KHNpZ25pbmdLZXlzKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRLZXlzID0gc2lnbmluZ0tleXMubWFwKChrZXkpID0+IG5vcm1hbGl6ZU9mZmxpbmVHcmFudFNpZ25pbmdLZXkoa2V5KSlcbiAgY29uc3QgY3VycmVudEtleXMgPSBub3JtYWxpemVkS2V5cy5maWx0ZXIoKGtleSkgPT4ga2V5LmN1cnJlbnQgPT09IHRydWUpXG5cbiAgaWYgKG5vcm1hbGl6ZWRLZXlzLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcihcIkF0IGxlYXN0IG9uZSBvZmZsaW5lIGdyYW50IHNpZ25pbmcga2V5IGlzIHJlcXVpcmVkXCIpXG4gIGlmIChjdXJyZW50S2V5cy5sZW5ndGggPiAxKSB0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IG9uZSBvZmZsaW5lIGdyYW50IHNpZ25pbmcga2V5IGNhbiBiZSBjdXJyZW50XCIpXG5cbiAgcmV0dXJuIGN1cnJlbnRLZXlzWzBdIHx8IG5vcm1hbGl6ZWRLZXlzWzBdXG59XG5cbi8qKlxuICogU2lnbnMgYSBtZXNzYWdlIHVzaW5nIEhNQUMtU0hBMjU2IGFuZCByZXR1cm5zIGEgcHJlZml4ZWQgaGV4IHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSAtIE1lc3NhZ2UgdG8gc2lnbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnNlY3JldCAtIEhNQUMgc2VjcmV0LlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBQcmVmaXhlZCBoZXggc2lnbmF0dXJlLlxuICovXG5hc3luYyBmdW5jdGlvbiBobWFjU2hhMjU2SGV4KHttZXNzYWdlLCBzZWNyZXR9KSB7XG4gIGNvbnN0IGNyeXB0b1Byb3ZpZGVyID0gZ2xvYmFsVGhpcy5jcnlwdG9cblxuICBpZiAoIWNyeXB0b1Byb3ZpZGVyPy5zdWJ0bGUpIHRocm93IG5ldyBFcnJvcihcIldlYkNyeXB0byBzdWJ0bGUgQVBJIGlzIHJlcXVpcmVkIGZvciBvZmZsaW5lIGdyYW50IHNpZ25pbmdcIilcblxuICBjb25zdCBrZXkgPSBhd2FpdCBjcnlwdG9Qcm92aWRlci5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgIFwicmF3XCIsXG4gICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHNlY3JldCksXG4gICAge2hhc2g6IFwiU0hBLTI1NlwiLCBuYW1lOiBcIkhNQUNcIn0sXG4gICAgZmFsc2UsXG4gICAgW1wic2lnblwiXVxuICApXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IGNyeXB0b1Byb3ZpZGVyLnN1YnRsZS5zaWduKFwiSE1BQ1wiLCBrZXksIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShtZXNzYWdlKSlcblxuICByZXR1cm4gYCR7T0ZGTElORV9HUkFOVF9TSUdOQVRVUkVfUFJFRklYfSR7aGV4KG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSkpfWBcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBieXRlcyB0byBsb3dlci1jYXNlIGhleC5cbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXMgLSBCeXRlcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gSGV4IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gaGV4KGJ5dGVzKSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKS5tYXAoKGJ5dGUpID0+IGJ5dGUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKSkuam9pbihcIlwiKVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgbm9uLWVtcHR5IHN0cmluZyBmaWVsZC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBWYWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gRmllbGQgbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU3RyaW5nIHZhbHVlLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZFN0cmluZyh2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgb2ZmbGluZSBncmFudCAke25hbWV9YClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgRGF0ZSB0byBhbiBJU08gdGltZXN0YW1wLlxuICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gRGF0ZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBJU08gdGltZXN0YW1wLlxuICovXG5mdW5jdGlvbiBpc29EYXRlU3RyaW5nKGRhdGUsIGxhYmVsKSB7XG4gIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb2ZmbGluZSBncmFudCAke2xhYmVsfWApXG5cbiAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGZhbGxiYWNrIHJhbmRvbSBncmFudCBpZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gR3JhbnQgaWQuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUdyYW50SWQoKSB7XG4gIHJldHVybiBnbG9iYWxUaGlzLmNyeXB0bz8ucmFuZG9tVVVJRCA/IGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbVVVSUQoKSA6IGBncmFudC0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc2xpY2UoMil9YFxufVxuXG4vKipcbiAqIFN0YWJsZSBKU09OIHN0cmluZ2lmaWVyIHdpdGggc29ydGVkIG9iamVjdCBrZXlzLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ30gLSBKU09OIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gc3RhYmxlSnNvblN0cmluZ2lmeSh2YWx1ZSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGV0ZXJtaW5pc3RpY0pzb24oe2xhYmVsOiBcInJvb3RcIiwgdmFsdWV9KSlcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgdmFsdWUgYXMgYSBKU09OIG9iamVjdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubGFiZWwgLSBEaWFnbm9zdGljIGxhYmVsLlxuICogQHBhcmFtIHt1bmtub3dufSBhcmdzLnZhbHVlIC0gVmFsdWUuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IC0gSlNPTiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluaXN0aWNKc29uT2JqZWN0KHtsYWJlbCwgdmFsdWV9KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBkZXRlcm1pbmlzdGljSnNvbih7bGFiZWwsIHZhbHVlfSlcblxuICBpZiAoIW5vcm1hbGl6ZWQgfHwgdHlwZW9mIG5vcm1hbGl6ZWQgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShub3JtYWxpemVkKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBvZmZsaW5lIGdyYW50ICR7bGFiZWx9IG9iamVjdGApXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59ICovIChub3JtYWxpemVkKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZGV0ZXJtaW5pc3RpYyBKU09OIHdpdGggc29ydGVkIG9iamVjdCBrZXlzLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5sYWJlbCAtIERpYWdub3N0aWMgbGFiZWwuXG4gKiBAcGFyYW0ge3Vua25vd259IGFyZ3MudmFsdWUgLSBWYWx1ZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlfSAtIE5vcm1hbGl6ZWQgSlNPTiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5pc3RpY0pzb24oe2xhYmVsLCB2YWx1ZX0pIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIHZhbHVlXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcCgoZW50cnksIGluZGV4KSA9PiBkZXRlcm1pbmlzdGljSnNvbih7bGFiZWw6IGAke2xhYmVsfS8ke2luZGV4fWAsIHZhbHVlOiBlbnRyeX0pKVxuICB9XG5cbiAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gKi9cbiAgICBjb25zdCBub3JtYWxpemVkID0ge31cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCkpIHtcbiAgICAgIGNvbnN0IGNoaWxkVmFsdWUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpW2tleV1cblxuICAgICAgaWYgKGNoaWxkVmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWVcbiAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IGRldGVybWluaXN0aWNKc29uKHtsYWJlbDogYCR7bGFiZWx9LyR7a2V5fWAsIHZhbHVlOiBjaGlsZFZhbHVlfSlcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBPZmZsaW5lIGdyYW50ICR7bGFiZWx9IG11c3QgYmUgZGV0ZXJtaW5pc3RpYyBKU09OYClcbn1cbiJdfQ==
@@ -1,17 +1,3 @@
1
- /**
2
- * Peer mutation bundle exported by a device for offline/P2P transfer.
3
- * @typedef {object} PeerMutationBundle
4
- * @property {string} exportedAt - ISO timestamp when the bundle was exported.
5
- * @property {"velocious.sync.peer-mutation-bundle.v1"} format - Bundle format identifier.
6
- * @property {PeerMutationBundleEntry[]} mutations - Signed mutations in local sequence order.
7
- */
8
- /**
9
- * One peer mutation bundle entry.
10
- * @typedef {object} PeerMutationBundleEntry
11
- * @property {string} [localRecordId] - Exporting device's local mutation record id.
12
- * @property {number} [localSequence] - Exporting device's local mutation sequence.
13
- * @property {import("./device-identity.js").SignedSyncMutation} signedMutation - Device-signed mutation envelope.
14
- */
15
1
  /**
16
2
  * Exports local non-terminal mutations as a signed peer-transfer bundle.
17
3
  * @param {object} args - Arguments.
@@ -1 +1 @@
1
- {"version":3,"file":"peer-mutation-bundle.d.ts","sourceRoot":"","sources":["../../../src/sync/peer-mutation-bundle.js"],"names":[],"mappings":"AAOA;;;;;;GAMG;AAEH;;;;;;GAMG;AAEH;;;;;;;;;GASG;AACH,8GAPG;IAA+D,iBAAiB,EAAxE,OAAO,sBAAsB,EAAE,iBAAiB;IACI,gBAAgB,EAApE,OAAO,sBAAsB,EAAE,cAAc;IACG,WAAW,EAA3D,OAAO,yBAAyB,EAAE,OAAO;IACvB,GAAG,UAAf,IAAI;IACqD,QAAQ;CAC/E,GAAU,OAAO,CAAC,kBAAkB,CAAC,CA2BvC;AAED;;;;;;;;GAQG;AACH,yFANG;IAA4D,gBAAgB,EAApE,OAAO,sBAAsB,EAAE,cAAc;IACpB,MAAM,EAA/B,kBAAkB;IAC8B,WAAW,EAA3D,OAAO,yBAAyB,EAAE,OAAO;IAC7B,GAAG;CACvB,GAAU,OAAO,CAAC;IAAC,QAAQ,EAAE;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAAC,QAAQ,EAAE;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAAC,OAAO,EAAE;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAC,EAAE,CAAA;CAAC,CAAC,CAsC1Q;;;;;;;;gBA/Fa,MAAM;;;;YACN,wCAAwC;;;;eACxC,uBAAuB,EAAE;;;;;;;;;;;;;;;;;oBAQzB,OAAO,sBAAsB,EAAE,kBAAkB"}
1
+ {"version":3,"file":"peer-mutation-bundle.d.ts","sourceRoot":"","sources":["../../../src/sync/peer-mutation-bundle.js"],"names":[],"mappings":"AAqBA;;;;;;;;;GASG;AACH,8GAPG;IAA+D,iBAAiB,EAAxE,OAAO,sBAAsB,EAAE,iBAAiB;IACI,gBAAgB,EAApE,OAAO,sBAAsB,EAAE,cAAc;IACG,WAAW,EAA3D,OAAO,yBAAyB,EAAE,OAAO;IACvB,GAAG,UAAf,IAAI;IACqD,QAAQ;CAC/E,GAAU,OAAO,CAAC,kBAAkB,CAAC,CA2BvC;AAED;;;;;;;;GAQG;AACH,yFANG;IAA4D,gBAAgB,EAApE,OAAO,sBAAsB,EAAE,cAAc;IACpB,MAAM,EAA/B,kBAAkB;IAC8B,WAAW,EAA3D,OAAO,yBAAyB,EAAE,OAAO;IAC7B,GAAG;CACvB,GAAU,OAAO,CAAC;IAAC,QAAQ,EAAE;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAAC,QAAQ,EAAE;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAAC,OAAO,EAAE;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAC,EAAE,CAAA;CAAC,CAAC,CAsC1Q;;;;;;;;gBAhGa,MAAM;;;;YACN,wCAAwC;;;;eACxC,uBAAuB,EAAE;;;;;;;;;;;;;;;;;oBAOzB,OAAO,sBAAsB,EAAE,kBAAkB"}
@@ -1,7 +1,5 @@
1
1
  // @ts-check
2
2
  import { createSignedMutation, mutationIdempotencyKey, verifySignedMutation } from "./device-identity.js";
3
- const PEER_MUTATION_BUNDLE_FORMAT = "velocious.sync.peer-mutation-bundle.v1";
4
- const EXPORTABLE_STATUSES = new Set(["pending", "applied-locally", "conflict"]);
5
3
  /**
6
4
  * Peer mutation bundle exported by a device for offline/P2P transfer.
7
5
  * @typedef {object} PeerMutationBundle
@@ -16,6 +14,8 @@ const EXPORTABLE_STATUSES = new Set(["pending", "applied-locally", "conflict"]);
16
14
  * @property {number} [localSequence] - Exporting device's local mutation sequence.
17
15
  * @property {import("./device-identity.js").SignedSyncMutation} signedMutation - Device-signed mutation envelope.
18
16
  */
17
+ const PEER_MUTATION_BUNDLE_FORMAT = "velocious.sync.peer-mutation-bundle.v1";
18
+ const EXPORTABLE_STATUSES = new Set(["pending", "applied-locally", "conflict"]);
19
19
  /**
20
20
  * Exports local non-terminal mutations as a signed peer-transfer bundle.
21
21
  * @param {object} args - Arguments.
@@ -212,4 +212,4 @@ function errorMessage(error) {
212
212
  return error.message;
213
213
  return String(error);
214
214
  }
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlci1tdXRhdGlvbi1idW5kbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9wZWVyLW11dGF0aW9uLWJ1bmRsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFFdkcsTUFBTSwyQkFBMkIsR0FBRyx3Q0FBd0MsQ0FBQTtBQUM1RSxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUE7QUFFL0U7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSx3QkFBd0IsQ0FBQyxFQUFDLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUM7SUFDakksTUFBTSxnQkFBZ0IsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMxRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMxQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkQsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDeEQsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFB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T0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSztJQUMvQixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBRXJILE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQzNCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxZQUFZLENBQUMsS0FBSztJQUN6QixJQUFJLEtBQUssWUFBWSxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFBO0lBRWhELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtjcmVhdGVTaWduZWRNdXRhdGlvbiwgbXV0YXRpb25JZGVtcG90ZW5jeUtleSwgdmVyaWZ5U2lnbmVkTXV0YXRpb259IGZyb20gXCIuL2RldmljZS1pZGVudGl0eS5qc1wiXG5cbmNvbnN0IFBFRVJfTVVUQVRJT05fQlVORExFX0ZPUk1BVCA9IFwidmVsb2Npb3VzLnN5bmMucGVlci1tdXRhdGlvbi1idW5kbGUudjFcIlxuY29uc3QgRVhQT1JUQUJMRV9TVEFUVVNFUyA9IG5ldyBTZXQoW1wicGVuZGluZ1wiLCBcImFwcGxpZWQtbG9jYWxseVwiLCBcImNvbmZsaWN0XCJdKVxuXG4vKipcbiAqIFBlZXIgbXV0YXRpb24gYnVuZGxlIGV4cG9ydGVkIGJ5IGEgZGV2aWNlIGZvciBvZmZsaW5lL1AyUCB0cmFuc2Zlci5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBlZXJNdXRhdGlvbkJ1bmRsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4cG9ydGVkQXQgLSBJU08gdGltZXN0YW1wIHdoZW4gdGhlIGJ1bmRsZSB3YXMgZXhwb3J0ZWQuXG4gKiBAcHJvcGVydHkge1widmVsb2Npb3VzLnN5bmMucGVlci1tdXRhdGlvbi1idW5kbGUudjFcIn0gZm9ybWF0IC0gQnVuZGxlIGZvcm1hdCBpZGVudGlmaWVyLlxuICogQHByb3BlcnR5IHtQZWVyTXV0YXRpb25CdW5kbGVFbnRyeVtdfSBtdXRhdGlvbnMgLSBTaWduZWQgbXV0YXRpb25zIGluIGxvY2FsIHNlcXVlbmNlIG9yZGVyLlxuICovXG5cbi8qKlxuICogT25lIHBlZXIgbXV0YXRpb24gYnVuZGxlIGVudHJ5LlxuICogQHR5cGVkZWYge29iamVjdH0gUGVlck11dGF0aW9uQnVuZGxlRW50cnlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbG9jYWxSZWNvcmRJZF0gLSBFeHBvcnRpbmcgZGV2aWNlJ3MgbG9jYWwgbXV0YXRpb24gcmVjb3JkIGlkLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtsb2NhbFNlcXVlbmNlXSAtIEV4cG9ydGluZyBkZXZpY2UncyBsb2NhbCBtdXRhdGlvbiBzZXF1ZW5jZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU2lnbmVkU3luY011dGF0aW9ufSBzaWduZWRNdXRhdGlvbiAtIERldmljZS1zaWduZWQgbXV0YXRpb24gZW52ZWxvcGUuXG4gKi9cblxuLyoqXG4gKiBFeHBvcnRzIGxvY2FsIG5vbi10ZXJtaW5hbCBtdXRhdGlvbnMgYXMgYSBzaWduZWQgcGVlci10cmFuc2ZlciBidW5kbGUuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuRGV2aWNlQ2VydGlmaWNhdGV9IGFyZ3MuZGV2aWNlQ2VydGlmaWNhdGUgLSBEZXZpY2UgY2VydGlmaWNhdGUgZm9yIHNpZ25pbmcgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY0pzb25XZWJLZXl9IGFyZ3MuZGV2aWNlUHJpdmF0ZUtleSAtIERldmljZSBwcml2YXRlIGtleSBmb3Igc2lnbmluZyByZWNvcmRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2xvY2FsLW11dGF0aW9uLWxvZy5qc1wiKS5kZWZhdWx0fSBhcmdzLm11dGF0aW9uTG9nIC0gTG9jYWwgbXV0YXRpb24gbG9nLlxuICogQHBhcmFtIHsoKSA9PiBEYXRlfSBbYXJncy5ub3ddIC0gRXhwb3J0IGNsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2xvY2FsLW11dGF0aW9uLWxvZy5qc1wiKS5Mb2NhbE11dGF0aW9uU3RhdHVzW119IFthcmdzLnN0YXR1c2VzXSAtIFN0YXR1c2VzIHRvIGV4cG9ydC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFBlZXJNdXRhdGlvbkJ1bmRsZT59IC0gU2lnbmVkIHBlZXIgbXV0YXRpb24gYnVuZGxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwb3J0UGVlck11dGF0aW9uQnVuZGxlKHtkZXZpY2VDZXJ0aWZpY2F0ZSwgZGV2aWNlUHJpdmF0ZUtleSwgbXV0YXRpb25Mb2csIG5vdyA9ICgpID0+IG5ldyBEYXRlKCksIHN0YXR1c2VzfSkge1xuICBjb25zdCBzZWxlY3RlZFN0YXR1c2VzID0gbm9ybWFsaXplRXhwb3J0U3RhdHVzZXMoc3RhdHVzZXMpXG4gIGNvbnN0IHRpbWVzdGFtcCA9IGlzb1RpbWVzdGFtcChub3coKSwgXCJleHBvcnRlZEF0XCIpXG4gIGNvbnN0IHJlY29yZHMgPSAoYXdhaXQgbXV0YXRpb25Mb2cucmVjb3JkcygpKVxuICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gc2VsZWN0ZWRTdGF0dXNlcy5oYXMocmVjb3JkLnN0YXR1cykpXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LnNlcXVlbmNlIC0gcmlnaHQuc2VxdWVuY2UpXG4gIGNvbnN0IG11dGF0aW9ucyA9IFtdXG5cbiAgZm9yIChjb25zdCByZWNvcmQgb2YgcmVjb3Jkcykge1xuICAgIG11dGF0aW9ucy5wdXNoKHtcbiAgICAgIGxvY2FsUmVjb3JkSWQ6IHJlY29yZC5pZCxcbiAgICAgIGxvY2FsU2VxdWVuY2U6IHJlY29yZC5zZXF1ZW5jZSxcbiAgICAgIHNpZ25lZE11dGF0aW9uOiBhd2FpdCBjcmVhdGVTaWduZWRNdXRhdGlvbih7XG4gICAgICAgIGRldmljZUNlcnRpZmljYXRlLFxuICAgICAgICBkZXZpY2VQcml2YXRlS2V5LFxuICAgICAgICBtdXRhdGlvbjogcmVjb3JkLm11dGF0aW9uXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydGVkQXQ6IHRpbWVzdGFtcCxcbiAgICBmb3JtYXQ6IFBFRVJfTVVUQVRJT05fQlVORExFX0ZPUk1BVCxcbiAgICBtdXRhdGlvbnNcbiAgfVxufVxuXG4vKipcbiAqIEltcG9ydHMgdmVyaWZpZWQgcGVlciBtdXRhdGlvbnMgaW50byB0aGUgbG9jYWwgbXV0YXRpb24gbG9nLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNKc29uV2ViS2V5fSBhcmdzLmJhY2tlbmRQdWJsaWNLZXkgLSBCYWNrZW5kIHB1YmxpYyBrZXkgZm9yIHZlcmlmeWluZyBwZWVyIGNlcnRpZmljYXRlcy5cbiAqIEBwYXJhbSB7UGVlck11dGF0aW9uQnVuZGxlfSBhcmdzLmJ1bmRsZSAtIFBlZXIgYnVuZGxlIHRvIGltcG9ydC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9sb2NhbC1tdXRhdGlvbi1sb2cuanNcIikuZGVmYXVsdH0gYXJncy5tdXRhdGlvbkxvZyAtIExvY2FsIG11dGF0aW9uIGxvZy5cbiAqIEBwYXJhbSB7RGF0ZX0gW2FyZ3Mubm93XSAtIFZlcmlmaWNhdGlvbiB0aW1lLlxuICogQHJldHVybnMge1Byb21pc2U8e2ltcG9ydGVkOiB7Y2xpZW50TXV0YXRpb25JZDogc3RyaW5nLCBpZGVtcG90ZW5jeUtleTogc3RyaW5nLCBsb2NhbFJlY29yZElkOiBzdHJpbmd9W10sIHJlamVjdGVkOiB7ZXJyb3JNZXNzYWdlOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9W10sIHNraXBwZWQ6IHtjbGllbnRNdXRhdGlvbklkOiBzdHJpbmcsIGlkZW1wb3RlbmN5S2V5OiBzdHJpbmcsIGxvY2FsUmVjb3JkSWQ6IHN0cmluZywgcmVhc29uOiBcImR1cGxpY2F0ZVwifVtdfT59IC0gSW1wb3J0IHJlc3VsdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydFBlZXJNdXRhdGlvbkJ1bmRsZSh7YmFja2VuZFB1YmxpY0tleSwgYnVuZGxlLCBtdXRhdGlvbkxvZywgbm93ID0gbmV3IERhdGUoKX0pIHtcbiAgY29uc3Qgbm9ybWFsaXplZEJ1bmRsZSA9IG5vcm1hbGl6ZVBlZXJNdXRhdGlvbkJ1bmRsZShidW5kbGUpXG4gIGNvbnN0IGV4aXN0aW5nUmVjb3JkcyA9IGF3YWl0IG11dGF0aW9uTG9nLnJlY29yZHMoKVxuICBjb25zdCBleGlzdGluZ0J5SWRlbXBvdGVuY3lLZXkgPSBuZXcgTWFwKGV4aXN0aW5nUmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gW211dGF0aW9uSWRlbXBvdGVuY3lLZXkoe211dGF0aW9uOiByZWNvcmQubXV0YXRpb259KSwgcmVjb3JkXSkpXG4gIC8qKiBAdHlwZSB7e2NsaWVudE11dGF0aW9uSWQ6IHN0cmluZywgaWRlbXBvdGVuY3lLZXk6IHN0cmluZywgbG9jYWxSZWNvcmRJZDogc3RyaW5nfVtdfSAqL1xuICBjb25zdCBpbXBvcnRlZCA9IFtdXG4gIC8qKiBAdHlwZSB7e2Vycm9yTWVzc2FnZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfVtdfSAqL1xuICBjb25zdCByZWplY3RlZCA9IFtdXG4gIC8qKiBAdHlwZSB7e2NsaWVudE11dGF0aW9uSWQ6IHN0cmluZywgaWRlbXBvdGVuY3lLZXk6IHN0cmluZywgbG9jYWxSZWNvcmRJZDogc3RyaW5nLCByZWFzb246IFwiZHVwbGljYXRlXCJ9W119ICovXG4gIGNvbnN0IHNraXBwZWQgPSBbXVxuXG4gIGZvciAoY29uc3QgW2luZGV4LCBlbnRyeV0gb2Ygbm9ybWFsaXplZEJ1bmRsZS5tdXRhdGlvbnMuZW50cmllcygpKSB7XG4gICAgY29uc3QgbXV0YXRpb24gPSBhd2FpdCB2ZXJpZmllZEJ1bmRsZU11dGF0aW9uKHtiYWNrZW5kUHVibGljS2V5LCBlbnRyeSwgaW5kZXgsIG5vdywgcmVqZWN0ZWR9KVxuXG4gICAgaWYgKCFtdXRhdGlvbikgY29udGludWVcblxuICAgIGNvbnN0IGlkZW1wb3RlbmN5S2V5ID0gbXV0YXRpb25JZGVtcG90ZW5jeUtleShlbnRyeS5zaWduZWRNdXRhdGlvbilcbiAgICBjb25zdCBkdXBsaWNhdGVSZWNvcmQgPSBleGlzdGluZ0J5SWRlbXBvdGVuY3lLZXkuZ2V0KGlkZW1wb3RlbmN5S2V5KVxuXG4gICAgaWYgKGR1cGxpY2F0ZVJlY29yZCkge1xuICAgICAgc2tpcHBlZC5wdXNoKHtcbiAgICAgICAgY2xpZW50TXV0YXRpb25JZDogbXV0YXRpb24uY2xpZW50TXV0YXRpb25JZCxcbiAgICAgICAgaWRlbXBvdGVuY3lLZXksXG4gICAgICAgIGxvY2FsUmVjb3JkSWQ6IGR1cGxpY2F0ZVJlY29yZC5pZCxcbiAgICAgICAgcmVhc29uOiAvKiogQHR5cGUge1wiZHVwbGljYXRlXCJ9ICovIChcImR1cGxpY2F0ZVwiKVxuICAgICAgfSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgbXV0YXRpb25Mb2cuYXBwZW5kKHttdXRhdGlvbn0pXG4gICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IG11dGF0aW9uTG9nLnVwZGF0ZVN0YXR1cyh7aWQ6IHJlY29yZC5pZCwgc3RhdHVzOiBcInBlZXItYXBwbGllZFwifSlcbiAgICBleGlzdGluZ0J5SWRlbXBvdGVuY3lLZXkuc2V0KGlkZW1wb3RlbmN5S2V5LCB1cGRhdGVkKVxuICAgIGltcG9ydGVkLnB1c2goe2NsaWVudE11dGF0aW9uSWQ6IG11dGF0aW9uLmNsaWVudE11dGF0aW9uSWQsIGlkZW1wb3RlbmN5S2V5LCBsb2NhbFJlY29yZElkOiB1cGRhdGVkLmlkfSlcbiAgfVxuXG4gIHJldHVybiB7aW1wb3J0ZWQsIHJlamVjdGVkLCBza2lwcGVkfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIGEgYnVuZGxlIG11dGF0aW9uIGFuZCByZWNvcmRzIG5vcm1hbCBwZXItZW50cnkgdmVyaWZpY2F0aW9uIHJlamVjdGlvbnMuXG4gKiBTdG9yYWdlIHdyaXRlcyBpbnRlbnRpb25hbGx5IGhhcHBlbiBvdXRzaWRlIHRoaXMgaGVscGVyIHNvIHN0b3JhZ2UgZmFpbHVyZXMgZXNjYXBlIGltcG9ydC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jSnNvbldlYktleX0gYXJncy5iYWNrZW5kUHVibGljS2V5IC0gQmFja2VuZCBwdWJsaWMga2V5LlxuICogQHBhcmFtIHtQZWVyTXV0YXRpb25CdW5kbGVFbnRyeX0gYXJncy5lbnRyeSAtIEJ1bmRsZSBlbnRyeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLmluZGV4IC0gRW50cnkgaW5kZXguXG4gKiBAcGFyYW0ge0RhdGV9IGFyZ3Mubm93IC0gVmVyaWZpY2F0aW9uIHRpbWUuXG4gKiBAcGFyYW0ge3tlcnJvck1lc3NhZ2U6IHN0cmluZywgaW5kZXg6IG51bWJlcn1bXX0gYXJncy5yZWplY3RlZCAtIFJlamVjdGlvbiBhY2N1bXVsYXRvci5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNNdXRhdGlvbiB8IG51bGw+fSAtIFZlcmlmaWVkIG11dGF0aW9uLCBvciBudWxsIHdoZW4gcmVqZWN0ZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmaWVkQnVuZGxlTXV0YXRpb24oe2JhY2tlbmRQdWJsaWNLZXksIGVudHJ5LCBpbmRleCwgbm93LCByZWplY3RlZH0pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdmVyaWZ5U2lnbmVkTXV0YXRpb24oe2JhY2tlbmRQdWJsaWNLZXksIG5vdywgc2lnbmVkTXV0YXRpb246IGVudHJ5LnNpZ25lZE11dGF0aW9ufSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3RlZC5wdXNoKHtlcnJvck1lc3NhZ2U6IGVycm9yTWVzc2FnZShlcnJvciksIGluZGV4fSlcblxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGV4cG9ydCBzdGF0dXMgZmlsdGVycy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9sb2NhbC1tdXRhdGlvbi1sb2cuanNcIikuTG9jYWxNdXRhdGlvblN0YXR1c1tdIHwgdW5kZWZpbmVkfSBzdGF0dXNlcyAtIE9wdGlvbmFsIHN0YXR1c2VzLlxuICogQHJldHVybnMge1NldDxpbXBvcnQoXCIuL2xvY2FsLW11dGF0aW9uLWxvZy5qc1wiKS5Mb2NhbE11dGF0aW9uU3RhdHVzPn0gLSBTdGF0dXMgc2V0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVFeHBvcnRTdGF0dXNlcyhzdGF0dXNlcykge1xuICBpZiAoc3RhdHVzZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC8qKiBAdHlwZSB7U2V0PGltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25TdGF0dXM+fSAqLyAobmV3IFNldChFWFBPUlRBQkxFX1NUQVRVU0VTKSlcbiAgaWYgKCFBcnJheS5pc0FycmF5KHN0YXR1c2VzKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcGVlciBtdXRhdGlvbiBleHBvcnQgc3RhdHVzZXMgYXJyYXlcIilcblxuICBjb25zdCBub3JtYWxpemVkID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzZXMpIHtcbiAgICBpZiAoIUVYUE9SVEFCTEVfU1RBVFVTRVMuaGFzKHN0YXR1cykpIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcGVlciBtdXRhdGlvbiBleHBvcnQgc3RhdHVzICcke1N0cmluZyhzdGF0dXMpfSdgKVxuICAgIG5vcm1hbGl6ZWQuYWRkKHN0YXR1cylcbiAgfVxuXG4gIHJldHVybiAvKiogQHR5cGUge1NldDxpbXBvcnQoXCIuL2xvY2FsLW11dGF0aW9uLWxvZy5qc1wiKS5Mb2NhbE11dGF0aW9uU3RhdHVzPn0gKi8gKG5vcm1hbGl6ZWQpXG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBlZXIgbXV0YXRpb24gYnVuZGxlLlxuICogQHBhcmFtIHtQZWVyTXV0YXRpb25CdW5kbGV9IGJ1bmRsZSAtIEJ1bmRsZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtQZWVyTXV0YXRpb25CdW5kbGV9IC0gTm9ybWFsaXplZCBidW5kbGUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBlZXJNdXRhdGlvbkJ1bmRsZShidW5kbGUpIHtcbiAgaWYgKCFidW5kbGUgfHwgdHlwZW9mIGJ1bmRsZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJ1bmRsZSkpIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHBlZXIgbXV0YXRpb24gYnVuZGxlIG9iamVjdFwiKVxuICBpZiAoYnVuZGxlLmZvcm1hdCAhPT0gUEVFUl9NVVRBVElPTl9CVU5ETEVfRk9STUFUKSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHBlZXIgbXV0YXRpb24gYnVuZGxlIGZvcm1hdCAnJHtTdHJpbmcoYnVuZGxlLmZvcm1hdCl9J2ApXG4gIGlzb1RpbWVzdGFtcChuZXcgRGF0ZShyZXF1aXJlZFN0cmluZyhidW5kbGUuZXhwb3J0ZWRBdCwgXCJleHBvcnRlZEF0XCIpKSwgXCJleHBvcnRlZEF0XCIpXG4gIGlmICghQXJyYXkuaXNBcnJheShidW5kbGUubXV0YXRpb25zKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcGVlciBtdXRhdGlvbiBidW5kbGUgbXV0YXRpb25zIGFycmF5XCIpXG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRlZEF0OiBidW5kbGUuZXhwb3J0ZWRBdCxcbiAgICBmb3JtYXQ6IGJ1bmRsZS5mb3JtYXQsXG4gICAgbXV0YXRpb25zOiBidW5kbGUubXV0YXRpb25zLm1hcCgoZW50cnksIGluZGV4KSA9PiBub3JtYWxpemVQZWVyTXV0YXRpb25CdW5kbGVFbnRyeShlbnRyeSwgaW5kZXgpKVxuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBvbmUgcGVlciBtdXRhdGlvbiBidW5kbGUgZW50cnkuXG4gKiBAcGFyYW0ge1BlZXJNdXRhdGlvbkJ1bmRsZUVudHJ5fSBlbnRyeSAtIEJ1bmRsZSBlbnRyeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIEVudHJ5IGluZGV4LlxuICogQHJldHVybnMge1BlZXJNdXRhdGlvbkJ1bmRsZUVudHJ5fSAtIE5vcm1hbGl6ZWQgZW50cnkuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBlZXJNdXRhdGlvbkJ1bmRsZUVudHJ5KGVudHJ5LCBpbmRleCkge1xuICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGVudHJ5KSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwZWVyIG11dGF0aW9uIGJ1bmRsZSBlbnRyeSAke2luZGV4fSBvYmplY3RgKVxuICBpZiAoIWVudHJ5LnNpZ25lZE11dGF0aW9uIHx8IHR5cGVvZiBlbnRyeS5zaWduZWRNdXRhdGlvbiAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGVudHJ5LnNpZ25lZE11dGF0aW9uKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwZWVyIG11dGF0aW9uIGJ1bmRsZSBlbnRyeSAke2luZGV4fSBzaWduZWRNdXRhdGlvbiBvYmplY3RgKVxuXG4gIC8qKiBAdHlwZSB7UGVlck11dGF0aW9uQnVuZGxlRW50cnl9ICovXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgc2lnbmVkTXV0YXRpb246IGVudHJ5LnNpZ25lZE11dGF0aW9uXG4gIH1cblxuICBpZiAoZW50cnkubG9jYWxSZWNvcmRJZCAhPT0gdW5kZWZpbmVkKSBub3JtYWxpemVkLmxvY2FsUmVjb3JkSWQgPSByZXF1aXJlZFN0cmluZyhlbnRyeS5sb2NhbFJlY29yZElkLCBgZW50cnkgJHtpbmRleH0gbG9jYWxSZWNvcmRJZGApXG4gIGlmIChlbnRyeS5sb2NhbFNlcXVlbmNlICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQubG9jYWxTZXF1ZW5jZSA9IHBvc2l0aXZlSW50ZWdlcihlbnRyeS5sb2NhbFNlcXVlbmNlLCBgZW50cnkgJHtpbmRleH0gbG9jYWxTZXF1ZW5jZWApXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIG5vbi1lbXB0eSBzdHJpbmcuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gVmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBMYWJlbC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU3RyaW5nLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZFN0cmluZyh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHBlZXIgbXV0YXRpb24gYnVuZGxlICR7bGFiZWx9YClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXIuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gVmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBMYWJlbC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gSW50ZWdlci5cbiAqL1xuZnVuY3Rpb24gcG9zaXRpdmVJbnRlZ2VyKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcGVlciBtdXRhdGlvbiBidW5kbGUgJHtsYWJlbH0gcG9zaXRpdmUgaW50ZWdlcmApXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBJU08gdGltZXN0YW1wIGZyb20gYSB2YWxpZCBEYXRlLlxuICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gRGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIExhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBJU08gdGltZXN0YW1wLlxuICovXG5mdW5jdGlvbiBpc29UaW1lc3RhbXAoZGF0ZSwgbGFiZWwpIHtcbiAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHx8IE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwZWVyIG11dGF0aW9uIGJ1bmRsZSAke2xhYmVsfWApXG5cbiAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBzYWZlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3Vua25vd259IGVycm9yIC0gRXJyb3IuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIE1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGVycm9yTWVzc2FnZShlcnJvcikge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGVycm9yLm1lc3NhZ2VcblxuICByZXR1cm4gU3RyaW5nKGVycm9yKVxufVxuIl19
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlci1tdXRhdGlvbi1idW5kbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9wZWVyLW11dGF0aW9uLWJ1bmRsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFFdkc7Ozs7OztHQU1HO0FBQ0g7Ozs7OztHQU1HO0FBQ0gsTUFBTSwyQkFBMkIsR0FBRyx3Q0FBd0MsQ0FBQTtBQUM1RSxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUE7QUFFL0U7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSx3QkFBd0IsQ0FBQyxFQUFDLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUM7SUFDakksTUFBTSxnQkFBZ0IsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMxRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMxQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkQsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDeEQsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFB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T0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSztJQUMvQixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBRXJILE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQzNCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxZQUFZLENBQUMsS0FBSztJQUN6QixJQUFJLEtBQUssWUFBWSxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFBO0lBRWhELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtjcmVhdGVTaWduZWRNdXRhdGlvbiwgbXV0YXRpb25JZGVtcG90ZW5jeUtleSwgdmVyaWZ5U2lnbmVkTXV0YXRpb259IGZyb20gXCIuL2RldmljZS1pZGVudGl0eS5qc1wiXG5cbi8qKlxuICogUGVlciBtdXRhdGlvbiBidW5kbGUgZXhwb3J0ZWQgYnkgYSBkZXZpY2UgZm9yIG9mZmxpbmUvUDJQIHRyYW5zZmVyLlxuICogQHR5cGVkZWYge29iamVjdH0gUGVlck11dGF0aW9uQnVuZGxlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXhwb3J0ZWRBdCAtIElTTyB0aW1lc3RhbXAgd2hlbiB0aGUgYnVuZGxlIHdhcyBleHBvcnRlZC5cbiAqIEBwcm9wZXJ0eSB7XCJ2ZWxvY2lvdXMuc3luYy5wZWVyLW11dGF0aW9uLWJ1bmRsZS52MVwifSBmb3JtYXQgLSBCdW5kbGUgZm9ybWF0IGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge1BlZXJNdXRhdGlvbkJ1bmRsZUVudHJ5W119IG11dGF0aW9ucyAtIFNpZ25lZCBtdXRhdGlvbnMgaW4gbG9jYWwgc2VxdWVuY2Ugb3JkZXIuXG4gKi9cbi8qKlxuICogT25lIHBlZXIgbXV0YXRpb24gYnVuZGxlIGVudHJ5LlxuICogQHR5cGVkZWYge29iamVjdH0gUGVlck11dGF0aW9uQnVuZGxlRW50cnlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbG9jYWxSZWNvcmRJZF0gLSBFeHBvcnRpbmcgZGV2aWNlJ3MgbG9jYWwgbXV0YXRpb24gcmVjb3JkIGlkLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtsb2NhbFNlcXVlbmNlXSAtIEV4cG9ydGluZyBkZXZpY2UncyBsb2NhbCBtdXRhdGlvbiBzZXF1ZW5jZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU2lnbmVkU3luY011dGF0aW9ufSBzaWduZWRNdXRhdGlvbiAtIERldmljZS1zaWduZWQgbXV0YXRpb24gZW52ZWxvcGUuXG4gKi9cbmNvbnN0IFBFRVJfTVVUQVRJT05fQlVORExFX0ZPUk1BVCA9IFwidmVsb2Npb3VzLnN5bmMucGVlci1tdXRhdGlvbi1idW5kbGUudjFcIlxuY29uc3QgRVhQT1JUQUJMRV9TVEFUVVNFUyA9IG5ldyBTZXQoW1wicGVuZGluZ1wiLCBcImFwcGxpZWQtbG9jYWxseVwiLCBcImNvbmZsaWN0XCJdKVxuXG4vKipcbiAqIEV4cG9ydHMgbG9jYWwgbm9uLXRlcm1pbmFsIG11dGF0aW9ucyBhcyBhIHNpZ25lZCBwZWVyLXRyYW5zZmVyIGJ1bmRsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5EZXZpY2VDZXJ0aWZpY2F0ZX0gYXJncy5kZXZpY2VDZXJ0aWZpY2F0ZSAtIERldmljZSBjZXJ0aWZpY2F0ZSBmb3Igc2lnbmluZyByZWNvcmRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jSnNvbldlYktleX0gYXJncy5kZXZpY2VQcml2YXRlS2V5IC0gRGV2aWNlIHByaXZhdGUga2V5IGZvciBzaWduaW5nIHJlY29yZHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLmRlZmF1bHR9IGFyZ3MubXV0YXRpb25Mb2cgLSBMb2NhbCBtdXRhdGlvbiBsb2cuXG4gKiBAcGFyYW0geygpID0+IERhdGV9IFthcmdzLm5vd10gLSBFeHBvcnQgY2xvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25TdGF0dXNbXX0gW2FyZ3Muc3RhdHVzZXNdIC0gU3RhdHVzZXMgdG8gZXhwb3J0LlxuICogQHJldHVybnMge1Byb21pc2U8UGVlck11dGF0aW9uQnVuZGxlPn0gLSBTaWduZWQgcGVlciBtdXRhdGlvbiBidW5kbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBvcnRQZWVyTXV0YXRpb25CdW5kbGUoe2RldmljZUNlcnRpZmljYXRlLCBkZXZpY2VQcml2YXRlS2V5LCBtdXRhdGlvbkxvZywgbm93ID0gKCkgPT4gbmV3IERhdGUoKSwgc3RhdHVzZXN9KSB7XG4gIGNvbnN0IHNlbGVjdGVkU3RhdHVzZXMgPSBub3JtYWxpemVFeHBvcnRTdGF0dXNlcyhzdGF0dXNlcylcbiAgY29uc3QgdGltZXN0YW1wID0gaXNvVGltZXN0YW1wKG5vdygpLCBcImV4cG9ydGVkQXRcIilcbiAgY29uc3QgcmVjb3JkcyA9IChhd2FpdCBtdXRhdGlvbkxvZy5yZWNvcmRzKCkpXG4gICAgLmZpbHRlcigocmVjb3JkKSA9PiBzZWxlY3RlZFN0YXR1c2VzLmhhcyhyZWNvcmQuc3RhdHVzKSlcbiAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQuc2VxdWVuY2UgLSByaWdodC5zZXF1ZW5jZSlcbiAgY29uc3QgbXV0YXRpb25zID0gW11cblxuICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgbXV0YXRpb25zLnB1c2goe1xuICAgICAgbG9jYWxSZWNvcmRJZDogcmVjb3JkLmlkLFxuICAgICAgbG9jYWxTZXF1ZW5jZTogcmVjb3JkLnNlcXVlbmNlLFxuICAgICAgc2lnbmVkTXV0YXRpb246IGF3YWl0IGNyZWF0ZVNpZ25lZE11dGF0aW9uKHtcbiAgICAgICAgZGV2aWNlQ2VydGlmaWNhdGUsXG4gICAgICAgIGRldmljZVByaXZhdGVLZXksXG4gICAgICAgIG11dGF0aW9uOiByZWNvcmQubXV0YXRpb25cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0ZWRBdDogdGltZXN0YW1wLFxuICAgIGZvcm1hdDogUEVFUl9NVVRBVElPTl9CVU5ETEVfRk9STUFULFxuICAgIG11dGF0aW9uc1xuICB9XG59XG5cbi8qKlxuICogSW1wb3J0cyB2ZXJpZmllZCBwZWVyIG11dGF0aW9ucyBpbnRvIHRoZSBsb2NhbCBtdXRhdGlvbiBsb2cuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY0pzb25XZWJLZXl9IGFyZ3MuYmFja2VuZFB1YmxpY0tleSAtIEJhY2tlbmQgcHVibGljIGtleSBmb3IgdmVyaWZ5aW5nIHBlZXIgY2VydGlmaWNhdGVzLlxuICogQHBhcmFtIHtQZWVyTXV0YXRpb25CdW5kbGV9IGFyZ3MuYnVuZGxlIC0gUGVlciBidW5kbGUgdG8gaW1wb3J0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2xvY2FsLW11dGF0aW9uLWxvZy5qc1wiKS5kZWZhdWx0fSBhcmdzLm11dGF0aW9uTG9nIC0gTG9jYWwgbXV0YXRpb24gbG9nLlxuICogQHBhcmFtIHtEYXRlfSBbYXJncy5ub3ddIC0gVmVyaWZpY2F0aW9uIHRpbWUuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7aW1wb3J0ZWQ6IHtjbGllbnRNdXRhdGlvbklkOiBzdHJpbmcsIGlkZW1wb3RlbmN5S2V5OiBzdHJpbmcsIGxvY2FsUmVjb3JkSWQ6IHN0cmluZ31bXSwgcmVqZWN0ZWQ6IHtlcnJvck1lc3NhZ2U6IHN0cmluZywgaW5kZXg6IG51bWJlcn1bXSwgc2tpcHBlZDoge2NsaWVudE11dGF0aW9uSWQ6IHN0cmluZywgaWRlbXBvdGVuY3lLZXk6IHN0cmluZywgbG9jYWxSZWNvcmRJZDogc3RyaW5nLCByZWFzb246IFwiZHVwbGljYXRlXCJ9W119Pn0gLSBJbXBvcnQgcmVzdWx0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0UGVlck11dGF0aW9uQnVuZGxlKHtiYWNrZW5kUHVibGljS2V5LCBidW5kbGUsIG11dGF0aW9uTG9nLCBub3cgPSBuZXcgRGF0ZSgpfSkge1xuICBjb25zdCBub3JtYWxpemVkQnVuZGxlID0gbm9ybWFsaXplUGVlck11dGF0aW9uQnVuZGxlKGJ1bmRsZSlcbiAgY29uc3QgZXhpc3RpbmdSZWNvcmRzID0gYXdhaXQgbXV0YXRpb25Mb2cucmVjb3JkcygpXG4gIGNvbnN0IGV4aXN0aW5nQnlJZGVtcG90ZW5jeUtleSA9IG5ldyBNYXAoZXhpc3RpbmdSZWNvcmRzLm1hcCgocmVjb3JkKSA9PiBbbXV0YXRpb25JZGVtcG90ZW5jeUtleSh7bXV0YXRpb246IHJlY29yZC5tdXRhdGlvbn0pLCByZWNvcmRdKSlcbiAgLyoqIEB0eXBlIHt7Y2xpZW50TXV0YXRpb25JZDogc3RyaW5nLCBpZGVtcG90ZW5jeUtleTogc3RyaW5nLCBsb2NhbFJlY29yZElkOiBzdHJpbmd9W119ICovXG4gIGNvbnN0IGltcG9ydGVkID0gW11cbiAgLyoqIEB0eXBlIHt7ZXJyb3JNZXNzYWdlOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9W119ICovXG4gIGNvbnN0IHJlamVjdGVkID0gW11cbiAgLyoqIEB0eXBlIHt7Y2xpZW50TXV0YXRpb25JZDogc3RyaW5nLCBpZGVtcG90ZW5jeUtleTogc3RyaW5nLCBsb2NhbFJlY29yZElkOiBzdHJpbmcsIHJlYXNvbjogXCJkdXBsaWNhdGVcIn1bXX0gKi9cbiAgY29uc3Qgc2tpcHBlZCA9IFtdXG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBub3JtYWxpemVkQnVuZGxlLm11dGF0aW9ucy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBtdXRhdGlvbiA9IGF3YWl0IHZlcmlmaWVkQnVuZGxlTXV0YXRpb24oe2JhY2tlbmRQdWJsaWNLZXksIGVudHJ5LCBpbmRleCwgbm93LCByZWplY3RlZH0pXG5cbiAgICBpZiAoIW11dGF0aW9uKSBjb250aW51ZVxuXG4gICAgY29uc3QgaWRlbXBvdGVuY3lLZXkgPSBtdXRhdGlvbklkZW1wb3RlbmN5S2V5KGVudHJ5LnNpZ25lZE11dGF0aW9uKVxuICAgIGNvbnN0IGR1cGxpY2F0ZVJlY29yZCA9IGV4aXN0aW5nQnlJZGVtcG90ZW5jeUtleS5nZXQoaWRlbXBvdGVuY3lLZXkpXG5cbiAgICBpZiAoZHVwbGljYXRlUmVjb3JkKSB7XG4gICAgICBza2lwcGVkLnB1c2goe1xuICAgICAgICBjbGllbnRNdXRhdGlvbklkOiBtdXRhdGlvbi5jbGllbnRNdXRhdGlvbklkLFxuICAgICAgICBpZGVtcG90ZW5jeUtleSxcbiAgICAgICAgbG9jYWxSZWNvcmRJZDogZHVwbGljYXRlUmVjb3JkLmlkLFxuICAgICAgICByZWFzb246IC8qKiBAdHlwZSB7XCJkdXBsaWNhdGVcIn0gKi8gKFwiZHVwbGljYXRlXCIpXG4gICAgICB9KVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCByZWNvcmQgPSBhd2FpdCBtdXRhdGlvbkxvZy5hcHBlbmQoe211dGF0aW9ufSlcbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgbXV0YXRpb25Mb2cudXBkYXRlU3RhdHVzKHtpZDogcmVjb3JkLmlkLCBzdGF0dXM6IFwicGVlci1hcHBsaWVkXCJ9KVxuICAgIGV4aXN0aW5nQnlJZGVtcG90ZW5jeUtleS5zZXQoaWRlbXBvdGVuY3lLZXksIHVwZGF0ZWQpXG4gICAgaW1wb3J0ZWQucHVzaCh7Y2xpZW50TXV0YXRpb25JZDogbXV0YXRpb24uY2xpZW50TXV0YXRpb25JZCwgaWRlbXBvdGVuY3lLZXksIGxvY2FsUmVjb3JkSWQ6IHVwZGF0ZWQuaWR9KVxuICB9XG5cbiAgcmV0dXJuIHtpbXBvcnRlZCwgcmVqZWN0ZWQsIHNraXBwZWR9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgYSBidW5kbGUgbXV0YXRpb24gYW5kIHJlY29yZHMgbm9ybWFsIHBlci1lbnRyeSB2ZXJpZmljYXRpb24gcmVqZWN0aW9ucy5cbiAqIFN0b3JhZ2Ugd3JpdGVzIGludGVudGlvbmFsbHkgaGFwcGVuIG91dHNpZGUgdGhpcyBoZWxwZXIgc28gc3RvcmFnZSBmYWlsdXJlcyBlc2NhcGUgaW1wb3J0LlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNKc29uV2ViS2V5fSBhcmdzLmJhY2tlbmRQdWJsaWNLZXkgLSBCYWNrZW5kIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0ge1BlZXJNdXRhdGlvbkJ1bmRsZUVudHJ5fSBhcmdzLmVudHJ5IC0gQnVuZGxlIGVudHJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuaW5kZXggLSBFbnRyeSBpbmRleC5cbiAqIEBwYXJhbSB7RGF0ZX0gYXJncy5ub3cgLSBWZXJpZmljYXRpb24gdGltZS5cbiAqIEBwYXJhbSB7e2Vycm9yTWVzc2FnZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfVtdfSBhcmdzLnJlamVjdGVkIC0gUmVqZWN0aW9uIGFjY3VtdWxhdG9yLlxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY011dGF0aW9uIHwgbnVsbD59IC0gVmVyaWZpZWQgbXV0YXRpb24sIG9yIG51bGwgd2hlbiByZWplY3RlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdmVyaWZpZWRCdW5kbGVNdXRhdGlvbih7YmFja2VuZFB1YmxpY0tleSwgZW50cnksIGluZGV4LCBub3csIHJlamVjdGVkfSkge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB2ZXJpZnlTaWduZWRNdXRhdGlvbih7YmFja2VuZFB1YmxpY0tleSwgbm93LCBzaWduZWRNdXRhdGlvbjogZW50cnkuc2lnbmVkTXV0YXRpb259KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdGVkLnB1c2goe2Vycm9yTWVzc2FnZTogZXJyb3JNZXNzYWdlKGVycm9yKSwgaW5kZXh9KVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZXhwb3J0IHN0YXR1cyBmaWx0ZXJzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2xvY2FsLW11dGF0aW9uLWxvZy5qc1wiKS5Mb2NhbE11dGF0aW9uU3RhdHVzW10gfCB1bmRlZmluZWR9IHN0YXR1c2VzIC0gT3B0aW9uYWwgc3RhdHVzZXMuXG4gKiBAcmV0dXJucyB7U2V0PGltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25TdGF0dXM+fSAtIFN0YXR1cyBzZXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV4cG9ydFN0YXR1c2VzKHN0YXR1c2VzKSB7XG4gIGlmIChzdGF0dXNlcyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLyoqIEB0eXBlIHtTZXQ8aW1wb3J0KFwiLi9sb2NhbC1tdXRhdGlvbi1sb2cuanNcIikuTG9jYWxNdXRhdGlvblN0YXR1cz59ICovIChuZXcgU2V0KEVYUE9SVEFCTEVfU1RBVFVTRVMpKVxuICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdHVzZXMpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBwZWVyIG11dGF0aW9uIGV4cG9ydCBzdGF0dXNlcyBhcnJheVwiKVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNlcykge1xuICAgIGlmICghRVhQT1JUQUJMRV9TVEFUVVNFUy5oYXMoc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBwZWVyIG11dGF0aW9uIGV4cG9ydCBzdGF0dXMgJyR7U3RyaW5nKHN0YXR1cyl9J2ApXG4gICAgbm9ybWFsaXplZC5hZGQoc3RhdHVzKVxuICB9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7U2V0PGltcG9ydChcIi4vbG9jYWwtbXV0YXRpb24tbG9nLmpzXCIpLkxvY2FsTXV0YXRpb25TdGF0dXM+fSAqLyAobm9ybWFsaXplZClcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGVlciBtdXRhdGlvbiBidW5kbGUuXG4gKiBAcGFyYW0ge1BlZXJNdXRhdGlvbkJ1bmRsZX0gYnVuZGxlIC0gQnVuZGxlIHZhbHVlLlxuICogQHJldHVybnMge1BlZXJNdXRhdGlvbkJ1bmRsZX0gLSBOb3JtYWxpemVkIGJ1bmRsZS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGVlck11dGF0aW9uQnVuZGxlKGJ1bmRsZSkge1xuICBpZiAoIWJ1bmRsZSB8fCB0eXBlb2YgYnVuZGxlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYnVuZGxlKSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcGVlciBtdXRhdGlvbiBidW5kbGUgb2JqZWN0XCIpXG4gIGlmIChidW5kbGUuZm9ybWF0ICE9PSBQRUVSX01VVEFUSU9OX0JVTkRMRV9GT1JNQVQpIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcGVlciBtdXRhdGlvbiBidW5kbGUgZm9ybWF0ICcke1N0cmluZyhidW5kbGUuZm9ybWF0KX0nYClcbiAgaXNvVGltZXN0YW1wKG5ldyBEYXRlKHJlcXVpcmVkU3RyaW5nKGJ1bmRsZS5leHBvcnRlZEF0LCBcImV4cG9ydGVkQXRcIikpLCBcImV4cG9ydGVkQXRcIilcbiAgaWYgKCFBcnJheS5pc0FycmF5KGJ1bmRsZS5tdXRhdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBwZWVyIG11dGF0aW9uIGJ1bmRsZSBtdXRhdGlvbnMgYXJyYXlcIilcblxuICByZXR1cm4ge1xuICAgIGV4cG9ydGVkQXQ6IGJ1bmRsZS5leHBvcnRlZEF0LFxuICAgIGZvcm1hdDogYnVuZGxlLmZvcm1hdCxcbiAgICBtdXRhdGlvbnM6IGJ1bmRsZS5tdXRhdGlvbnMubWFwKChlbnRyeSwgaW5kZXgpID0+IG5vcm1hbGl6ZVBlZXJNdXRhdGlvbkJ1bmRsZUVudHJ5KGVudHJ5LCBpbmRleCkpXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIG9uZSBwZWVyIG11dGF0aW9uIGJ1bmRsZSBlbnRyeS5cbiAqIEBwYXJhbSB7UGVlck11dGF0aW9uQnVuZGxlRW50cnl9IGVudHJ5IC0gQnVuZGxlIGVudHJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gRW50cnkgaW5kZXguXG4gKiBAcmV0dXJucyB7UGVlck11dGF0aW9uQnVuZGxlRW50cnl9IC0gTm9ybWFsaXplZCBlbnRyeS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGVlck11dGF0aW9uQnVuZGxlRW50cnkoZW50cnksIGluZGV4KSB7XG4gIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5ICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZW50cnkpKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHBlZXIgbXV0YXRpb24gYnVuZGxlIGVudHJ5ICR7aW5kZXh9IG9iamVjdGApXG4gIGlmICghZW50cnkuc2lnbmVkTXV0YXRpb24gfHwgdHlwZW9mIGVudHJ5LnNpZ25lZE11dGF0aW9uICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZW50cnkuc2lnbmVkTXV0YXRpb24pKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHBlZXIgbXV0YXRpb24gYnVuZGxlIGVudHJ5ICR7aW5kZXh9IHNpZ25lZE11dGF0aW9uIG9iamVjdGApXG5cbiAgLyoqIEB0eXBlIHtQZWVyTXV0YXRpb25CdW5kbGVFbnRyeX0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICBzaWduZWRNdXRhdGlvbjogZW50cnkuc2lnbmVkTXV0YXRpb25cbiAgfVxuXG4gIGlmIChlbnRyeS5sb2NhbFJlY29yZElkICE9PSB1bmRlZmluZWQpIG5vcm1hbGl6ZWQubG9jYWxSZWNvcmRJZCA9IHJlcXVpcmVkU3RyaW5nKGVudHJ5LmxvY2FsUmVjb3JkSWQsIGBlbnRyeSAke2luZGV4fSBsb2NhbFJlY29yZElkYClcbiAgaWYgKGVudHJ5LmxvY2FsU2VxdWVuY2UgIT09IHVuZGVmaW5lZCkgbm9ybWFsaXplZC5sb2NhbFNlcXVlbmNlID0gcG9zaXRpdmVJbnRlZ2VyKGVudHJ5LmxvY2FsU2VxdWVuY2UsIGBlbnRyeSAke2luZGV4fSBsb2NhbFNlcXVlbmNlYClcblxuICByZXR1cm4gbm9ybWFsaXplZFxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgbm9uLWVtcHR5IHN0cmluZy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBWYWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIExhYmVsLlxuICogQHJldHVybnMge3N0cmluZ30gLSBTdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkU3RyaW5nKHZhbHVlLCBsYWJlbCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IHZhbHVlLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcGVlciBtdXRhdGlvbiBidW5kbGUgJHtsYWJlbH1gKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlci5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBWYWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIExhYmVsLlxuICogQHJldHVybnMge251bWJlcn0gLSBJbnRlZ2VyLlxuICovXG5mdW5jdGlvbiBwb3NpdGl2ZUludGVnZXIodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgMSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwZWVyIG11dGF0aW9uIGJ1bmRsZSAke2xhYmVsfSBwb3NpdGl2ZSBpbnRlZ2VyYClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIElTTyB0aW1lc3RhbXAgZnJvbSBhIHZhbGlkIERhdGUuXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBEYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gTGFiZWwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIElTTyB0aW1lc3RhbXAuXG4gKi9cbmZ1bmN0aW9uIGlzb1RpbWVzdGFtcChkYXRlLCBsYWJlbCkge1xuICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkgfHwgTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBlZXIgbXV0YXRpb24gYnVuZGxlICR7bGFiZWx9YClcblxuICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHNhZmUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBFcnJvci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gZXJyb3JNZXNzYWdlKGVycm9yKSB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gZXJyb3IubWVzc2FnZVxuXG4gIHJldHVybiBTdHJpbmcoZXJyb3IpXG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"server-change-feed.d.ts","sourceRoot":"","sources":["../../../src/sync/server-change-feed.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-change-feed.d.ts","sourceRoot":"","sources":["../../../src/sync/server-change-feed.js"],"names":[],"mappings":"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"}