@pipeline-builder/api-core 5.2.6 → 5.2.8

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 (189) hide show
  1. package/lib/constants/ai-providers.js +1 -1
  2. package/lib/constants/http-status.js +1 -1
  3. package/lib/constants/index.js +1 -1
  4. package/lib/constants/time.js +1 -1
  5. package/lib/errors/app-errors.js +1 -1
  6. package/lib/errors/index.js +1 -1
  7. package/lib/helpers/access-helpers.d.ts +19 -0
  8. package/lib/helpers/access-helpers.js +24 -4
  9. package/lib/helpers/content-disposition.js +1 -1
  10. package/lib/helpers/crud-helpers.js +1 -1
  11. package/lib/helpers/index.d.ts +1 -1
  12. package/lib/helpers/index.js +2 -2
  13. package/lib/helpers/org-hierarchy-http.js +1 -1
  14. package/lib/helpers/org-hierarchy.js +1 -1
  15. package/lib/helpers/restore-helpers.js +1 -1
  16. package/lib/helpers/sse-helpers.js +13 -2
  17. package/lib/helpers/support-calendar.js +1 -1
  18. package/lib/index.js +1 -1
  19. package/lib/middleware/ask-provenance.js +1 -1
  20. package/lib/middleware/assurance.js +1 -1
  21. package/lib/middleware/auth.js +3 -2
  22. package/lib/middleware/client-version.d.ts +45 -0
  23. package/lib/middleware/client-version.js +97 -0
  24. package/lib/middleware/deferred-quota-check.js +1 -1
  25. package/lib/middleware/ecosystem-guard.js +1 -1
  26. package/lib/middleware/index.d.ts +1 -0
  27. package/lib/middleware/index.js +2 -1
  28. package/lib/middleware/jwt-verify.js +1 -1
  29. package/lib/middleware/mongo-sanitize.js +1 -1
  30. package/lib/middleware/on-behalf.js +1 -1
  31. package/lib/middleware/permission-gates.js +1 -1
  32. package/lib/middleware/quota-exempt-routes.js +1 -1
  33. package/lib/middleware/revocation.js +1 -1
  34. package/lib/middleware/route-table.js +16 -1
  35. package/lib/middleware/service-tokens.js +1 -1
  36. package/lib/middleware/step-up.js +1 -1
  37. package/lib/middleware/system-org.d.ts +18 -5
  38. package/lib/middleware/system-org.js +19 -6
  39. package/lib/openapi/extend-zod.js +1 -1
  40. package/lib/openapi/index.js +1 -1
  41. package/lib/openapi/registry.js +1 -1
  42. package/lib/openapi/routes/ask-routes.js +1 -1
  43. package/lib/openapi/routes/billing-routes.js +1 -1
  44. package/lib/openapi/routes/image-registry-routes.js +1 -1
  45. package/lib/openapi/routes/index.js +1 -1
  46. package/lib/openapi/routes/message-routes.js +1 -1
  47. package/lib/openapi/routes/pipeline-routes.js +1 -1
  48. package/lib/openapi/routes/pipeline-template-routes.js +1 -1
  49. package/lib/openapi/routes/plugin-routes.js +1 -1
  50. package/lib/openapi/routes/quota-routes.js +1 -1
  51. package/lib/openapi/schema-registry.js +1 -1
  52. package/lib/routes/health.js +1 -1
  53. package/lib/routes/index.js +1 -1
  54. package/lib/services/ai-call-weight.js +1 -1
  55. package/lib/services/alert-delivery.js +1 -1
  56. package/lib/services/api-key-exchange.d.ts +4 -2
  57. package/lib/services/api-key-exchange.js +15 -8
  58. package/lib/services/audit-context.d.ts +3 -0
  59. package/lib/services/audit-context.js +2 -1
  60. package/lib/services/audit-spool.js +1 -1
  61. package/lib/services/cache-service.js +1 -1
  62. package/lib/services/circuit-breaker.js +1 -1
  63. package/lib/services/compliance-client.js +1 -1
  64. package/lib/services/compliance-event-subscriber.js +1 -1
  65. package/lib/services/durable-event-bus.js +1 -1
  66. package/lib/services/ecosystem-notify-client.d.ts +7 -1
  67. package/lib/services/ecosystem-notify-client.js +9 -3
  68. package/lib/services/entity-events.js +1 -1
  69. package/lib/services/env-redis.js +1 -1
  70. package/lib/services/http-client.js +19 -3
  71. package/lib/services/index.d.ts +1 -1
  72. package/lib/services/index.js +2 -2
  73. package/lib/services/jwks-cache.js +1 -1
  74. package/lib/services/leader-lock.js +1 -1
  75. package/lib/services/notification-channels.js +1 -1
  76. package/lib/services/org-ai-client.js +1 -1
  77. package/lib/services/pagerduty-inbound.js +1 -1
  78. package/lib/services/pagerduty.js +1 -1
  79. package/lib/services/quota-increment-batcher.js +1 -1
  80. package/lib/services/quota.js +1 -1
  81. package/lib/services/remote-audit-client.js +1 -1
  82. package/lib/services/retry-forever.js +1 -1
  83. package/lib/services/retry-strategy.js +1 -1
  84. package/lib/services/s3-client.js +1 -1
  85. package/lib/services/scheduler.js +1 -1
  86. package/lib/services/service-boot.js +1 -1
  87. package/lib/services/service-keys.js +2 -2
  88. package/lib/services/sse-ticket-store.js +1 -1
  89. package/lib/services/system-notification.js +1 -1
  90. package/lib/services/token-revocation.js +1 -1
  91. package/lib/services/version-vuln-policy.d.ts +11 -0
  92. package/lib/services/version-vuln-policy.js +33 -7
  93. package/lib/types/ai-catalog.js +1 -1
  94. package/lib/types/ask-proposals.d.ts +23 -0
  95. package/lib/types/ask-proposals.js +29 -1
  96. package/lib/types/audit-events.js +1 -1
  97. package/lib/types/build-catalog.d.ts +65 -0
  98. package/lib/types/build-catalog.js +95 -1
  99. package/lib/types/catalog-metadata.js +1 -1
  100. package/lib/types/common.js +1 -1
  101. package/lib/types/compliance-exemption.js +1 -1
  102. package/lib/types/ecosystem-notifications.d.ts +9 -0
  103. package/lib/types/ecosystem-notifications.js +15 -6
  104. package/lib/types/ecosystem.d.ts +1 -6
  105. package/lib/types/ecosystem.js +18 -5
  106. package/lib/types/error-codes.d.ts +3 -0
  107. package/lib/types/error-codes.js +6 -1
  108. package/lib/types/feature-flags.d.ts +17 -1
  109. package/lib/types/feature-flags.js +1 -1
  110. package/lib/types/http.js +1 -1
  111. package/lib/types/index.d.ts +3 -3
  112. package/lib/types/index.js +4 -4
  113. package/lib/types/metadata-keys.js +1 -1
  114. package/lib/types/permissions.d.ts +60 -13
  115. package/lib/types/permissions.js +63 -14
  116. package/lib/types/pipeline-template.js +1 -1
  117. package/lib/types/pipeline.js +1 -1
  118. package/lib/types/plugin-catalog.js +1 -1
  119. package/lib/types/plugin-health.js +1 -1
  120. package/lib/types/plugin-scan.d.ts +69 -0
  121. package/lib/types/plugin-scan.js +77 -1
  122. package/lib/types/quota-catalog.js +15 -2
  123. package/lib/types/quota-tiers.d.ts +27 -160
  124. package/lib/types/quota-tiers.js +47 -255
  125. package/lib/types/remote-audit-actions.d.ts +1 -1
  126. package/lib/types/remote-audit-actions.js +9 -1
  127. package/lib/types/reserved-tags.js +1 -1
  128. package/lib/types/tier-limits.d.ts +210 -0
  129. package/lib/types/tier-limits.js +254 -0
  130. package/lib/types/usage-projection.js +1 -1
  131. package/lib/types/visibility.js +1 -1
  132. package/lib/types/wire-vocabulary.d.ts +7 -0
  133. package/lib/types/wire-vocabulary.js +7 -1
  134. package/lib/utils/alias-resolver.js +1 -1
  135. package/lib/utils/api-key.js +1 -1
  136. package/lib/utils/audit.js +1 -1
  137. package/lib/utils/aws-scrub.js +1 -1
  138. package/lib/utils/compliance-attributes.js +1 -1
  139. package/lib/utils/concurrency-gate.d.ts +98 -0
  140. package/lib/utils/concurrency-gate.js +110 -0
  141. package/lib/utils/concurrency.js +1 -1
  142. package/lib/utils/crash-handlers.js +1 -1
  143. package/lib/utils/date.js +1 -1
  144. package/lib/utils/dsse.js +1 -1
  145. package/lib/utils/env.d.ts +11 -0
  146. package/lib/utils/env.js +14 -1
  147. package/lib/utils/headers.js +1 -1
  148. package/lib/utils/identity.js +1 -1
  149. package/lib/utils/index.d.ts +2 -0
  150. package/lib/utils/index.js +3 -1
  151. package/lib/utils/jwk.js +2 -2
  152. package/lib/utils/logger.js +1 -1
  153. package/lib/utils/metric-emitter.js +1 -1
  154. package/lib/utils/object.js +1 -1
  155. package/lib/utils/params.js +1 -1
  156. package/lib/utils/plugin-compliance.d.ts +9 -1
  157. package/lib/utils/plugin-compliance.js +1 -1
  158. package/lib/utils/proof-of-work.js +1 -1
  159. package/lib/utils/response.js +1 -1
  160. package/lib/utils/retention.js +1 -1
  161. package/lib/utils/safe-require.js +1 -1
  162. package/lib/utils/secret-encryption.js +1 -1
  163. package/lib/utils/secret-rotation.js +1 -1
  164. package/lib/utils/secure-compare.js +1 -1
  165. package/lib/utils/semver.d.ts +18 -0
  166. package/lib/utils/semver.js +120 -0
  167. package/lib/utils/sensitive-patterns.js +1 -1
  168. package/lib/utils/service-registry.js +1 -1
  169. package/lib/utils/ssrf.js +1 -1
  170. package/lib/validation/ai-schemas.js +1 -1
  171. package/lib/validation/common-schemas.js +1 -1
  172. package/lib/validation/dockerfile-static.js +1 -1
  173. package/lib/validation/index.d.ts +1 -1
  174. package/lib/validation/index.js +2 -2
  175. package/lib/validation/message-schemas.d.ts +73 -0
  176. package/lib/validation/message-schemas.js +63 -2
  177. package/lib/validation/middleware.js +1 -1
  178. package/lib/validation/pipeline-schemas.js +1 -1
  179. package/lib/validation/pipeline-template-schemas.js +1 -1
  180. package/lib/validation/plugin-base-images.js +1 -1
  181. package/lib/validation/plugin-catalog-detect.js +1 -1
  182. package/lib/validation/plugin-catalog-metadata.js +1 -1
  183. package/lib/validation/plugin-heuristics.js +1 -1
  184. package/lib/validation/plugin-lint.js +1 -1
  185. package/lib/validation/plugin-name-confusable.js +1 -1
  186. package/lib/validation/plugin-schemas.js +1 -1
  187. package/lib/validation/plugin-spec-schema.js +1 -1
  188. package/lib/validation/plugin-template-contract.js +1 -1
  189. package/package.json +11 -4
@@ -313,4 +313,4 @@ export function parseSort(query) {
313
313
  export function parsePaginationParams(query) {
314
314
  return { ...parsePage(query, { def: 10, max: MAX_PAGE_LIMIT }), ...parseSort(query) };
315
315
  }
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUd0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBa0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWpFLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUV4Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsR0FBYSxFQUNiLFVBQVUsR0FBVyxHQUFHLEVBQ3hCLElBQVEsRUFDUixPQUFnQjtJQUVoQixJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLHNEQUFzRCxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNwRixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUtWO1FBQ0YsT0FBTyxFQUFFLElBQUk7UUFDYixVQUFVO0tBQ1gsQ0FBQztJQUVGLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVE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Z0JBQWdCO0lBRXJELFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRUQsMENBQTBDO0FBQzFDLE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsR0FBYSxFQUNiLE9BQWUsRUFDZixPQUFpQztJQUVqQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBa0JELHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQThCO0lBQ3RELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sU0FBUyxHQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUMvQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUE4QjtJQUNsRSxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IHBhcnNlUGFnZSB9IGZyb20gJy4vcGFyYW1zLmpzJztcbmltcG9ydCB7IGlzVmFsaWRRdW90YVR5cGUsIFFVT1RBX1RZUEVfTEFCRUxTLCBRVU9UQV9VUEdSQURFX1BBVEgsIHR5cGUgUXVvdGFJbmZvIH0gZnJvbSAnLi4vdHlwZXMvY29tbW9uLmpzJztcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJy4uL3R5cGVzL2Vycm9yLWNvZGVzLmpzJztcbmltcG9ydCB7IE1BWF9QQUdFX0xJTUlUIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncmVzcG9uc2UnKTtcblxuLyoqXG4gKiBTZW5kIGEgc3RhbmRhcmRpemVkIHN1Y2Nlc3MgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHJlcyAtIEV4cHJlc3MgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gc3RhdHVzQ29kZSAtIEhUVFAgc3RhdHVzIGNvZGUgKGRlZmF1bHQ6IDIwMClcbiAqIEBwYXJhbSBkYXRhIC0gUmVzcG9uc2UgZGF0YVxuICogQHBhcmFtIG1lc3NhZ2UgLSBPcHRpb25hbCBzdWNjZXNzIG1lc3NhZ2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogc2VuZFN1Y2Nlc3MocmVzLCAyMDAsIHsgcGx1Z2luOiBwbHVnaW5EYXRhIH0pO1xuICogc2VuZFN1Y2Nlc3MocmVzLCAyMDEsIHsgaWQ6IG5ld0lkIH0sICdSZXNvdXJjZSBjcmVhdGVkJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRTdWNjZXNzPFQ+KFxuICByZXM6IFJlc3BvbnNlLFxuICBzdGF0dXNDb2RlOiBudW1iZXIgPSAyMDAsXG4gIGRhdGE/OiBULFxuICBtZXNzYWdlPzogc3RyaW5nLFxuKTogdm9pZCB7XG4gIGlmIChyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICBsb2dnZXIud2FybignQXR0ZW1wdGVkIHRvIHNlbmQgc3VjY2VzcyBhZnRlciBoZWFkZXJzIGFscmVhZHkgc2VudCcsIHsgc3RhdHVzQ29kZSB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNwb25zZToge1xuICAgIHN1Y2Nlc3M6IHRydWU7XG4gICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIGRhdGE/OiBUO1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIH0gPSB7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBzdGF0dXNDb2RlLFxuICB9O1xuXG4gIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIGlmIChtZXNzYWdlKSB7XG4gICAgcmVzcG9uc2UubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIH1cblxuICByZXMuc3RhdHVzKHN0YXR1c0NvZGUpLmpzb24ocmVzcG9uc2UpO1xufVxuXG4vKipcbiAqIFNlbmQgYSBzdGFuZGFyZGl6ZWQgZXJyb3IgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHJlcyAtIEV4cHJlc3MgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gc3RhdHVzQ29kZSAtIEhUVFAgc3RhdHVzIGNvZGVcbiAqIEBwYXJhbSBtZXNzYWdlIC0gRXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIGNvZGUgLSBFcnJvciBjb2RlIGZyb20gRXJyb3JDb2RlIGVudW1cbiAqIEBwYXJhbSBkZXRhaWxzIC0gT3B0aW9uYWwgYWRkaXRpb25hbCBkZXRhaWxzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRFcnJvcihyZXMsIDQwNCwgJ1BsdWdpbiBub3QgZm91bmQnLCBFcnJvckNvZGUuTk9UX0ZPVU5EKTtcbiAqIHNlbmRFcnJvcihyZXMsIDQwMCwgJ0ludmFsaWQgaW5wdXQnLCBFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUiwgeyBmaWVsZDogJ25hbWUnIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kRXJyb3IoXG4gIHJlczogUmVzcG9uc2UsXG4gIHN0YXR1c0NvZGU6IG51bWJlcixcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBjb2RlPzogRXJyb3JDb2RlIHwgc3RyaW5nLFxuICBkZXRhaWxzPzogdW5rbm93bixcbik6IHZvaWQge1xuICBpZiAocmVzLmhlYWRlcnNTZW50KSB7XG4gICAgbG9nZ2VyLndhcm4oJ0F0dGVtcHRlZCB0byBzZW5kIGVycm9yIGFmdGVyIGhlYWRlcnMgYWxyZWFkeSBzZW50JywgeyBzdGF0dXNDb2RlLCBtZXNzYWdlIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlOiB7XG4gICAgc3VjY2VzczogZmFsc2U7XG4gICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBjb2RlPzogc3RyaW5nO1xuICAgIGRldGFpbHM/OiB1bmtub3duO1xuICB9ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIHN0YXR1c0NvZGUsXG4gICAgbWVzc2FnZSxcbiAgfTtcblxuICBpZiAoY29kZSkge1xuICAgIHJlc3BvbnNlLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgaWYgKGRldGFpbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlc3BvbnNlLmRldGFpbHMgPSBkZXRhaWxzO1xuICB9XG5cbiAgcmVzLnN0YXR1cyhzdGF0dXNDb2RlKS5qc29uKHJlc3BvbnNlKTtcbn1cblxuLyoqXG4gKiBUaGUgc3RydWN0dXJlZCBoYWxmIG9mIGV2ZXJ5IDQyOSBgUVVPVEFfRVhDRUVERURgIGJvZHkgKGBkZXRhaWxzYCkuIFN0YWJsZVxuICogd2lyZSBjb250cmFjdCDigJQgdGhlIGRhc2hib2FyZCwgdGhlIENMSSBhbmQgdGhlIHBpcGVsaW5lIExhbWJkYSBhbGwgcmVuZGVyIGFcbiAqIHF1b3RhIHJlZnVzYWwgZnJvbSB0aGVzZSBmaWVsZHMgcmF0aGVyIHRoYW4gcGFyc2luZyBgbWVzc2FnZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFFeGNlZWRlZERldGFpbHMge1xuICBxdW90YTogUXVvdGFJbmZvO1xuICBxdW90YVR5cGU6IHN0cmluZztcbiAgbGltaXQ6IG51bWJlcjtcbiAgdXNlZDogbnVtYmVyO1xuICAvKiogSVNPIHRpbWVzdGFtcCB0aGUgcGVyaW9kIHJlc2V0cyAoYWJzZW50IHdoZW4gdGhlIGNhbGxlciBkaWRuJ3Qga25vdykuICovXG4gIHJlc2V0QXQ/OiBzdHJpbmc7XG4gIC8qKiBXaGVyZSBhIHBlcnNvbiByYWlzZXMgdGhlIGxpbWl0IChyZWxhdGl2ZSB0byB0aGUgZGFzaGJvYXJkIG9yaWdpbikuICovXG4gIHVwZ3JhZGVVcmw6IHN0cmluZztcbn1cblxuLyoqIGAyMDI2LTExLTA1YCDigJQgdGhlIHJlc2V0IERBVEUgYSBwZXJzb24gcmVhZHM7IHRoZSBleGFjdCBpbnN0YW50IGlzIGluIGByZXNldEF0YC4gKi9cbmZ1bmN0aW9uIHJlc2V0RGF0ZUxhYmVsKHJlc2V0QXQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghcmVzZXRBdCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgbXMgPSBEYXRlLnBhcnNlKHJlc2V0QXQpO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG1zKSA/IG5ldyBEYXRlKG1zKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGUgaHVtYW4gc2VudGVuY2UgZm9yIGEgcXVvdGEgcmVmdXNhbDogd2hhdCByYW4gb3V0LCB3aGVuIGl0IGNvbWVzIGJhY2sgYW5kXG4gKiB3aGVyZSB0byByYWlzZSBpdCDigJQgXCJBUEkgY2FsbCBxdW90YSByZWFjaGVkICgyNTAwMC8yNTAwMCk7IHJlc2V0cyAyMDI2LTExLTA1LlxuICogVXBncmFkZSBhdCAvZGFzaGJvYXJkL2JpbGxpbmcuXCIgSXQgc2F5cyBXSElDSCBxdW90YSBhbmQgZ2l2ZXMgYSBkYXRlLCBiZWNhdXNlXG4gKiBcImNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yXCIgc2VudCBwZW9wbGUgaHVudGluZyBmb3IgYSBwZXJzb24gd2hlbiB0aGUgYW5zd2VyXG4gKiB3YXMgYSBwYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVvdGFFeGNlZWRlZE1lc3NhZ2UocXVvdGFUeXBlOiBzdHJpbmcsIHF1b3RhOiBQaWNrPFF1b3RhSW5mbywgJ2xpbWl0JyB8ICd1c2VkJz4sIHJlc2V0QXQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBsYWJlbCA9IGlzVmFsaWRRdW90YVR5cGUocXVvdGFUeXBlKSA/IFFVT1RBX1RZUEVfTEFCRUxTW3F1b3RhVHlwZV0gOiBxdW90YVR5cGU7XG4gIGNvbnN0IHdoZW4gPSByZXNldERhdGVMYWJlbChyZXNldEF0KTtcbiAgcmV0dXJuIGAke2xhYmVsfSBxdW90YSByZWFjaGVkICgke3F1b3RhLnVzZWR9LyR7cXVvdGEubGltaXR9KSR7d2hlbiA/IGA7IHJlc2V0cyAke3doZW59YCA6ICcnfS4gVXBncmFkZSBhdCAke1FVT1RBX1VQR1JBREVfUEFUSH0uYDtcbn1cblxuLyoqXG4gKiBTZW5kIGEgcXVvdGEgZXhjZWVkZWQgZXJyb3IgcmVzcG9uc2UuXG4gKlxuICogVGhlIGJvZHkgY2FycmllcyBgZGV0YWlsc2AgKHtAbGluayBRdW90YUV4Y2VlZGVkRGV0YWlsc306IHF1b3RhVHlwZSwgbGltaXQsXG4gKiB1c2VkLCByZXNldEF0LCB1cGdyYWRlVXJsKSBhbmQgdGhlIHtAbGluayBxdW90YUV4Y2VlZGVkTWVzc2FnZX0gc2VudGVuY2U7IHRoZVxuICogYFJldHJ5LUFmdGVyYCArIGBYLVF1b3RhLSpgIGhlYWRlcnMgcmVwZWF0IHRoZSBudW1iZXJzIGZvciBjbGllbnRzIHRoYXQgb25seVxuICogcmVhZCBoZWFkZXJzLiBDb3VudHMgYHF1b3RhX2RlbmllZF90b3RhbHt0eXBlfWAg4oCUIGV2ZXJ5IHVzZXItZmFjaW5nIHF1b3RhXG4gKiByZWZ1c2FsLCBsYWJlbGxlZCBieSB0aGUgZW1pdHRpbmcgYHNlcnZpY2VgLlxuICpcbiAqIEBwYXJhbSByZXMgLSBFeHByZXNzIHJlc3BvbnNlIG9iamVjdFxuICogQHBhcmFtIHF1b3RhVHlwZSAtIFR5cGUgb2YgcXVvdGEgZXhjZWVkZWRcbiAqIEBwYXJhbSBxdW90YSAtIEN1cnJlbnQgcXVvdGEgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSByZXNldEF0IC0gSVNPIHRpbWVzdGFtcCB3aGVuIHF1b3RhIHJlc2V0c1xuICogQHBhcmFtIG1lc3NhZ2UgLSBPdmVycmlkZSBmb3IgdGhlIGh1bWFuIHNlbnRlbmNlIChyYXJlbHkgcmlnaHQg4oCUIHRoZSBkZWZhdWx0IG5hbWVzIHRoZSBxdW90YSwgdGhlIHJlc2V0IGRhdGUgYW5kIHRoZSB1cGdyYWRlIHBhZ2UpXG4gKiBAcGFyYW0gb3B0aW9ucy5jb3VudERlbmlhbCAtIGBmYWxzZWAgZm9yIGFuIElOVEVSTkFMIHJlZnVzYWwgYW5vdGhlciBzZXJ2aWNlIHJlLWFuc3dlcnMgKHRoZSBxdW90YSBzZXJ2aWNlJ3Mgb3duIC9pbmNyZW1lbnQpLCBzbyBvbmUgcmVmdXNhbCBpcyBjb3VudGVkIG9uY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogc2VuZFF1b3RhRXhjZWVkZWQocmVzLCAnYXBpQ2FsbHMnLCB7IHR5cGU6ICdhcGlDYWxscycsIGxpbWl0OiAxMDAwMCwgdXNlZDogMTAwMDAsIHJlbWFpbmluZzogMCB9LCByZXNldEF0KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZFF1b3RhRXhjZWVkZWQoXG4gIHJlczogUmVzcG9uc2UsXG4gIHF1b3RhVHlwZTogc3RyaW5nLFxuICBxdW90YTogUXVvdGFJbmZvLFxuICByZXNldEF0Pzogc3RyaW5nLFxuICBtZXNzYWdlPzogc3RyaW5nLFxuICBvcHRpb25zOiB7IGNvdW50RGVuaWFsPzogYm9vbGVhbiB9ID0ge30sXG4pOiB2b2lkIHtcbiAgY29uc3QgcmVzZXREYXRlID0gcmVzZXRBdCA/IG5ldyBEYXRlKHJlc2V0QXQpIDogbmV3IERhdGUoKTtcbiAgY29uc3QgcmVzZXRJbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgocmVzZXREYXRlLmdldFRpbWUoKSAtIERhdGUubm93KCkpIC8gMTAwMCkpO1xuXG4gIC8vIEd1YXJkIGxpa2UgdGhlIHNpYmxpbmcgaGVscGVyczogYHNldEhlYWRlcmAgdGhyb3dzIHN5bmNocm9ub3VzbHkgb25jZSB0aGVcbiAgLy8gcmVzcG9uc2UgaGFzIGJlZW4gc2VudCwgc28gc2tpcCB0aGUgcXVvdGEgaGVhZGVycyAoYW5kIGxldCBgc2VuZEVycm9yYCBuby1vcClcbiAgLy8gaW5zdGVhZCBvZiBjcmFzaGluZyB0aGUgaGFuZGxlciBvbiBhbiBhbHJlYWR5LWNvbW1pdHRlZCByZXNwb25zZS5cbiAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICByZXMuc2V0SGVhZGVyKCdSZXRyeS1BZnRlcicsIHJlc2V0SW4pO1xuICAgIHJlcy5zZXRIZWFkZXIoJ1gtUXVvdGEtTGltaXQnLCBxdW90YS5saW1pdCk7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1Vc2VkJywgcXVvdGEudXNlZCk7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1SZW1haW5pbmcnLCBNYXRoLm1heCgwLCBxdW90YS5yZW1haW5pbmcpKTtcblxuICAgIGlmIChyZXNldEF0KSB7XG4gICAgICByZXMuc2V0SGVhZGVyKCdYLVF1b3RhLVJlc2V0JywgcmVzZXRBdCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuY291bnREZW5pYWwgIT09IGZhbHNlKSBlbWl0Q291bnRlcigncXVvdGFfZGVuaWVkX3RvdGFsJywgeyB0eXBlOiBxdW90YVR5cGUgfSk7XG5cbiAgY29uc3QgZGV0YWlsczogUXVvdGFFeGNlZWRlZERldGFpbHMgPSB7XG4gICAgcXVvdGEsXG4gICAgcXVvdGFUeXBlLFxuICAgIGxpbWl0OiBxdW90YS5saW1pdCxcbiAgICB1c2VkOiBxdW90YS51c2VkLFxuICAgIC4uLihyZXNldEF0ID8geyByZXNldEF0IH0gOiB7fSksXG4gICAgdXBncmFkZVVybDogUVVPVEFfVVBHUkFERV9QQVRILFxuICB9O1xuICBzZW5kRXJyb3IoXG4gICAgcmVzLFxuICAgIDQyOSxcbiAgICBtZXNzYWdlID8/IHF1b3RhRXhjZWVkZWRNZXNzYWdlKHF1b3RhVHlwZSwgcXVvdGEsIHJlc2V0QXQpLFxuICAgIEVycm9yQ29kZS5RVU9UQV9FWENFRURFRCxcbiAgICBkZXRhaWxzLFxuICApO1xufVxuXG4vKiogVGhlIGBwYWdpbmF0aW9uYCBlbnZlbG9wZSBldmVyeSBsaXN0IHJvdXRlIHJldHVybnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25NZXRhIHtcbiAgdG90YWw6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG4gIGxpbWl0OiBudW1iZXI7XG4gIGhhc01vcmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGBwYWdpbmF0aW9uYCBlbnZlbG9wZSBmb3Igb25lIHBhZ2UuXG4gKlxuICogYGhhc01vcmVgIGlzIGRlcml2ZWQsIG5ldmVyIGhhbmQtY29tcHV0ZWQ6IGBvZmZzZXQgKyA8cm93cyBvbiB0aGlzIHBhZ2U+IDxcbiAqIHRvdGFsYCB3YXMgVEhFIG1vc3QtcmVwZWF0ZWQgZXhwcmVzc2lvbiBpbiB0aGUgY29kZWJhc2UsIGFuZCBhIHJvdXRlIHRoYXRcbiAqIHNwZWxscyBpdCBzbGlnaHRseSBkaWZmZXJlbnRseSByZXBvcnRzIGEgcGhhbnRvbSBuZXh0IHBhZ2UgKG9yIGhpZGVzIGEgcmVhbFxuICogb25lKSDigJQgYSBwYWdpbmcgYnVnIHRoYXQgb25seSBzaG93cyBvbiB0aGUgbGFzdCBwYWdlLCB3aGVyZSBub2JvZHkgbG9va3MuXG4gKlxuICogYHJldHVybmVkYCBpcyB0aGUgcm93IGNvdW50IHRoaXMgcGFnZSBhY3R1YWxseSBjYXJyaWVzLiBJdCBkZWZhdWx0cyB0b1xuICogYGxpbWl0YCBiZWNhdXNlIGEgbGlzdCByb3V0ZSB0aGF0IGRvZXNuJ3Qgc2F5IG90aGVyd2lzZSByZXR1cm5zIGEgZnVsbCBwYWdlO1xuICogcGFzcyBpdCBmb3IgYSByb3V0ZSB3aG9zZSBwYWdlIGNhbiBiZSBzaG9ydGVyIHRoYW4gaXRzIGxpbWl0LCBhbmQgZm9yIGFuXG4gKiB1bnBhZ2VkIFwiZXZlcnl0aGluZ1wiIGFuc3dlciAod2hpY2ggcmVwb3J0cyBgbGltaXQgPSB0b3RhbGApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFnaW5hdGlvbk1ldGEoXG4gIG9wdGlvbnM6IHsgdG90YWw6IG51bWJlcjsgb2Zmc2V0OiBudW1iZXI7IGxpbWl0OiBudW1iZXI7IHJldHVybmVkPzogbnVtYmVyIH0sXG4pOiBQYWdpbmF0aW9uTWV0YSB7XG4gIGNvbnN0IHsgdG90YWwsIG9mZnNldCwgbGltaXQsIHJldHVybmVkIH0gPSBvcHRpb25zO1xuICByZXR1cm4geyB0b3RhbCwgb2Zmc2V0LCBsaW1pdCwgaGFzTW9yZTogb2Zmc2V0ICsgKHJldHVybmVkID8/IGxpbWl0KSA8IHRvdGFsIH07XG59XG5cbi8qKlxuICogU2VuZCBhIHBhZ2luYXRlZCBsaXN0IHJlc3BvbnNlIHdpdGggdGhlIGl0ZW1zIG5lc3RlZCB1bmRlciBhIG5hbWVkIGtleS5cbiAqIFVzZSB3aGVuIHRoZSBBUEkgY29udHJhY3QgaXMgYHsgPGtleT46IFsuLi5dLCBwYWdpbmF0aW9uOiB7Li4ufSB9YFxuICogKHRoZSBkb21pbmFudCBzaGFwZSBhY3Jvc3MgYXBpLyogc2VydmljZXMpLlxuICpcbiAqIGBoYXNNb3JlYCBpcyBPUFRJT05BTCBhbmQgZGVmYXVsdHMgdG8gYG9mZnNldCArIGRhdGEubGVuZ3RoIDwgdG90YWxgIOKAlCB0aGVcbiAqIGV4cHJlc3Npb24gZXZlcnkgY2FsbGVyIHVzZWQgdG8gd3JpdGUgb3V0IGJ5IGhhbmQuIFBhc3MgaXQgb25seSB3aGVuIHRoZVxuICogcm91dGUga25vd3Mgc29tZXRoaW5nIHRoZSByb3cgY291bnQgZG9lcyBub3QgKGEgY3Vyc29yIHBhZ2UsIG9yIGEgd2luZG93XG4gKiBmZXRjaGVkIHdpdGggYGxpbWl0ICsgMWAgdG8gcGVlayBhaGVhZCkuIFdpdGhvdXQgYSBgdG90YWxgIHRoZXJlIGlzIG5vdGhpbmcgdG9cbiAqIGRlcml2ZSBmcm9tLCBzbyBpdCBmYWxscyBiYWNrIHRvIFwiYSBjdXJzb3Igd2FzIGlzc3VlZFwiLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZW5kUGFnaW5hdGVkTmVzdGVkKHJlcywgJ3BpcGVsaW5lcycsIGl0ZW1zLCB7IHRvdGFsOiA1MCwgbGltaXQ6IDI1LCBvZmZzZXQ6IDAgfSk7XG4gKiAvLyDihpIgeyBwaXBlbGluZXM6IFsuLi5dLCBwYWdpbmF0aW9uOiB7IHRvdGFsOiA1MCwgbGltaXQ6IDI1LCBvZmZzZXQ6IDAsIGhhc01vcmU6IHRydWUgfSB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRQYWdpbmF0ZWROZXN0ZWQ8VD4oXG4gIHJlczogUmVzcG9uc2UsXG4gIGRhdGFLZXk6IHN0cmluZyxcbiAgZGF0YTogVFtdLFxuICBvcHRpb25zOiB7XG4gICAgdG90YWw/OiBudW1iZXI7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICBvZmZzZXQ6IG51bWJlcjtcbiAgICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgICBuZXh0Q3Vyc29yPzogc3RyaW5nO1xuICAgIHN0YXR1c0NvZGU/OiBudW1iZXI7XG4gIH0sXG4pOiB2b2lkIHtcbiAgaWYgKHJlcy5oZWFkZXJzU2VudCkge1xuICAgIGxvZ2dlci53YXJuKCdBdHRlbXB0ZWQgdG8gc2VuZCBwYWdpbmF0ZWQgcmVzcG9uc2UgYWZ0ZXIgaGVhZGVycyBhbHJlYWR5IHNlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgeyBzdGF0dXNDb2RlID0gMjAwLCB0b3RhbCwgbGltaXQsIG9mZnNldCwgaGFzTW9yZSwgbmV4dEN1cnNvciB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVzb2x2ZWQgPSBoYXNNb3JlXG4gICAgPz8gKHRvdGFsICE9PSB1bmRlZmluZWRcbiAgICAgID8gcGFnaW5hdGlvbk1ldGEoeyB0b3RhbCwgb2Zmc2V0LCBsaW1pdCwgcmV0dXJuZWQ6IGRhdGEubGVuZ3RoIH0pLmhhc01vcmVcbiAgICAgIDogbmV4dEN1cnNvciAhPT0gdW5kZWZpbmVkKTtcbiAgY29uc3QgcGFnaW5hdGlvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IGxpbWl0LCBvZmZzZXQsIGhhc01vcmU6IHJlc29sdmVkIH07XG4gIGlmICh0b3RhbCAhPT0gdW5kZWZpbmVkKSBwYWdpbmF0aW9uLnRvdGFsID0gdG90YWw7XG4gIGlmIChuZXh0Q3Vyc29yKSBwYWdpbmF0aW9uLm5leHRDdXJzb3IgPSBuZXh0Q3Vyc29yO1xuICByZXMuc3RhdHVzKHN0YXR1c0NvZGUpLmpzb24oe1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgc3RhdHVzQ29kZSxcbiAgICBkYXRhOiB7IFtkYXRhS2V5XTogZGF0YSwgcGFnaW5hdGlvbiB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBTUUxTVEFURTogZXhhY3RseSBmaXZlIGNoYXJhY3RlcnMsIGRpZ2l0cyBhbmQgdXBwZXJjYXNlIExhdGluIGxldHRlcnNcbiAqIChlLmcuIGAyMzUwNWAgdW5pcXVlX3Zpb2xhdGlvbiwgYDQyNjAxYCBzeW50YXhfZXJyb3IpLiBOb2RlJ3Mgb3duIHNvY2tldCBhbmRcbiAqIEROUyBlcnJvcnMgdXNlIHRoZSBzYW1lIGAuY29kZWAgcHJvcGVydHkgYnV0IHNwZWxsIGl0IGRpZmZlcmVudGx5XG4gKiAoYEVDT05OUkVTRVRgLCBgRVRJTUVET1VUYCwgYEVOT1RGT1VORGApLCB3aGljaCBpcyB3aGF0IHRoaXMgdGVsbHMgYXBhcnQuXG4gKi9cbmNvbnN0IFNRTFNUQVRFX1BBVFRFUk4gPSAvXlswLTlBLVpdezV9JC87XG5cbi8qKlxuICogTGVuZ3RoIGFsb25lIGlzIG5vdCBlbm91Z2g6IGBFUElQRWAgYW5kIGBFMkJJR2AgYXJlIGZpdmUgdXBwZXJjYXNlIGNoYXJhY3RlcnNcbiAqIGFuZCB3b3VsZCBwYXNzIGFzIFNRTFNUQVRFcy4gRXZlcnkgbGlidXYvTm9kZSBlcnJubyBzdGFydHMgd2l0aCBgRWAsIGFuZFxuICogUG9zdGdyZXMgZGVmaW5lcyBubyBlcnJvciBjbGFzcyB0aGF0IGRvZXMg4oCUIGl0cyBjbGFzc2VzIGFyZSAwMC0wWiwgMjAtMkYsXG4gKiAzNC0zRiwgNDAtNDQsIDUzLTU4LCA3MiwgRjAsIEhWLCBQMCBhbmQgWFggKHNlZSB0aGUgc2VydmVyJ3MgZXJyY29kZXMudHh0KS5cbiAqIFNvIGEgbGVhZGluZyBgRWAgc2V0dGxlcyBpdC5cbiAqL1xuY29uc3QgTk9ERV9FUlJOT19QQVRURVJOID0gL15FLztcblxuLyoqXG4gKiBFeHRyYWN0IGRhdGFiYXNlIGVycm9yIGRldGFpbHMgZm9yIGxvZ2dpbmcvcmVzcG9uc2UuXG4gKlxuICogRXh0cmFjdHMgUG9zdGdyZVNRTCBlcnJvciBjb2RlcywgZGV0YWlscywgaGludHMsIGFuZCBjb25zdHJhaW50IG5hbWVzXG4gKiBmcm9tIGRhdGFiYXNlIGVycm9ycyBmb3IgYmV0dGVyIGVycm9yIG1lc3NhZ2VzLlxuICpcbiAqIE9ubHkgYSBnZW51aW5lIFBvc3RncmVzIGVycm9yIHlpZWxkcyBhIGBkYkNvZGVgOiByZXBvcnRpbmcgYW55IGAuY29kZWAgYXMgb25lXG4gKiB3b3VsZCBsb2cgYSB0cmFuc3BvcnQgZmFpbHVyZSAoYEVDT05OUkVTRVRgIHdoZW4gdGhlIHBvb2xlciBkcm9wcyBvdXQgb2YgdGhlXG4gKiBTZXJ2aWNlIGVuZHBvaW50cywgc2F5KSBhcyBge1wiZGJcIjp7XCJkYkNvZGVcIjpcIkVDT05OUkVTRVRcIn19YCBhbmQgc2VuZCByZWFkZXJzXG4gKiBodW50aW5nIHRocm91Z2ggY2xlYW4gUG9zdGdyZXMgbG9ncy4gVGhlIHRyYW5zcG9ydCBjb2RlIGlzIG5vdCBsb3N0IOKAlCBjYWxsZXJzIGxvZyB0aGUgZXJyb3IgbWVzc2FnZVxuICogaXRzZWxmIGFsb25nc2lkZSB0aGVzZSBkZXRhaWxzIOKAlCBpdCBqdXN0IHN0b3BzIGNsYWltaW5nIHRvIGJlIGEgREIgZmF1bHQuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gRXJyb3Igb2JqZWN0IGZyb20gZGF0YWJhc2Ugb3BlcmF0aW9uXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBleHRyYWN0ZWQgZXJyb3IgZGV0YWlsczsgYHt9YCB3aGVuIGBlcnJvcmAgaXMgbm90IGFcbiAqICAgUG9zdGdyZXMgZXJyb3IgKG5vIFNRTFNUQVRFIGFuZCBub25lIG9mIHRoZSBwZy1zcGVjaWZpYyBmaWVsZHMpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHRyeSB7XG4gKiAgIGF3YWl0IGRiLmluc2VydChwbHVnaW5zKS52YWx1ZXMobmV3UGx1Z2luKTtcbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIGNvbnN0IGRiRGV0YWlscyA9IGV4dHJhY3REYkVycm9yKGVycm9yKTtcbiAqICAgcmV0dXJuIHNlbmRFcnJvcihyZXMsIDUwMCwgJ0RhdGFiYXNlIGVycm9yJywgRXJyb3JDb2RlLkRBVEFCQVNFX0VSUk9SLCBkYkRldGFpbHMpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGJFcnJvcihlcnJvcjogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKCFlcnJvciB8fCB0eXBlb2YgZXJyb3IgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLy8gRHJpenpsZSBPUk0gd3JhcHMgdGhlIG9yaWdpbmFsIHBnIGVycm9yIGluIGVycm9yLmNhdXNlIOKAlFxuICAvLyBjaGVjayB0aGUgY2F1c2UgZmlyc3QsIHRoZW4gZmFsbCBiYWNrIHRvIHRoZSBlcnJvciBpdHNlbGYuXG4gIGNvbnN0IGVyciA9IGVycm9yIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBzb3VyY2UgPSAoZXJyLmNhdXNlICYmIHR5cGVvZiBlcnIuY2F1c2UgPT09ICdvYmplY3QnID8gZXJyLmNhdXNlIDogZXJyKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgZGV0YWlsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBpZiAodHlwZW9mIHNvdXJjZS5jb2RlID09PSAnc3RyaW5nJ1xuICAgICYmIFNRTFNUQVRFX1BBVFRFUk4udGVzdChzb3VyY2UuY29kZSlcbiAgICAmJiAhTk9ERV9FUlJOT19QQVRURVJOLnRlc3Qoc291cmNlLmNvZGUpKSB7XG4gICAgZGV0YWlscy5kYkNvZGUgPSBzb3VyY2UuY29kZTtcbiAgfVxuICBpZiAoc291cmNlLmRldGFpbCkgZGV0YWlscy5kYkRldGFpbCA9IHNvdXJjZS5kZXRhaWw7XG4gIGlmIChzb3VyY2UuaGludCkgZGV0YWlscy5kYkhpbnQgPSBzb3VyY2UuaGludDtcbiAgaWYgKHNvdXJjZS5jb25zdHJhaW50KSBkZXRhaWxzLmNvbnN0cmFpbnQgPSBzb3VyY2UuY29uc3RyYWludDtcbiAgaWYgKHNvdXJjZS50YWJsZSkgZGV0YWlscy50YWJsZSA9IHNvdXJjZS50YWJsZTtcbiAgaWYgKHNvdXJjZS5jb2x1bW4pIGRldGFpbHMuY29sdW1uID0gc291cmNlLmNvbHVtbjtcblxuICByZXR1cm4gZGV0YWlscztcbn1cblxuLy8gQ29udmVuaWVuY2UgaGVscGVycyAoc2hhcmVkIGFjcm9zcyBwbHVnaW4sIHBpcGVsaW5lLCBxdW90YSBzZXJ2aWNlcylcblxuLyoqXG4gKiBFeHRyYWN0IGEgaHVtYW4tcmVhZGFibGUgbWVzc2FnZSBmcm9tIGFuIHVua25vd24gY2F0Y2ggdmFsdWUuXG4gKlxuICogRmFsbHMgYmFjayBiZXlvbmQgYC5tZXNzYWdlYCBiZWNhdXNlIHNldmVyYWwgY29tbW9uIE5vZGUgZXJyb3JzIGNhcnJ5IGFuXG4gKiBFTVBUWSBgLm1lc3NhZ2VgOlxuICogIC0gZHVhbC1zdGFjayAoSVB2NCtJUHY2KSBjb25uZWN0IGZhaWx1cmVzIHN1cmZhY2UgYXMgYW4gYEFnZ3JlZ2F0ZUVycm9yYFxuICogICAgd2hvc2Ugb3duIG1lc3NhZ2UgaXMgYmxhbmsg4oCUIHRoZSBjYXVzZSBsaXZlcyBpbiBgLmNvZGVgIChlLmcuXG4gKiAgICBgRUNPTk5SRUZVU0VEYC9gRVRJTUVET1VUYCkgYW5kL29yIHRoZSBgLmVycm9yc1tdYCBzdWItZXJyb3JzO1xuICogIC0gcmF3IHNvY2tldCBgRXJybm9FeGNlcHRpb25gcyBjYW4gbGlrZXdpc2UgY2Fycnkgb25seSBhIGAuY29kZWAuXG4gKiBXaXRob3V0IHRoaXMsIGFuIHVucmVhY2hhYmxlIGludGVybmFsIHNlcnZpY2UgKGUuZy4gY29tcGxpYW5jZSBzdGlsbFxuICogc3RhcnRpbmcpIHByb2R1Y2VkIGJsYW5rIHBlci1pdGVtIGVycm9ycyBpbiBidWxrIHJlc3BvbnNlcyBhbmQgYGVycm9yOlwiXCJgXG4gKiBpbiBsb2dzIOKAlCBhIHNpbGVudCBibGFjayBib3guIE9yZGVyOiBtZXNzYWdlIOKGkiBjb2RlIOKGkiBqb2luZWQgc3ViLWVycm9ycyDihpJcbiAqIGVycm9yIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkgcmV0dXJuIFN0cmluZyhlcnJvcik7XG4gIGlmIChlcnJvci5tZXNzYWdlKSByZXR1cm4gZXJyb3IubWVzc2FnZTtcblxuICBjb25zdCBjb2RlID0gKGVycm9yIGFzIHsgY29kZT86IHN0cmluZyB9KS5jb2RlO1xuICBpZiAoY29kZSkgcmV0dXJuIGNvZGU7XG5cbiAgY29uc3QgaW5uZXIgPSAoZXJyb3IgYXMgeyBlcnJvcnM/OiB1bmtub3duW10gfSkuZXJyb3JzO1xuICBpZiAoQXJyYXkuaXNBcnJheShpbm5lcikgJiYgaW5uZXIubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGpvaW5lZCA9IGlubmVyLm1hcChlcnJvck1lc3NhZ2UpLmZpbHRlcihCb29sZWFuKS5qb2luKCc7ICcpO1xuICAgIGlmIChqb2luZWQpIHJldHVybiBqb2luZWQ7XG4gIH1cblxuICByZXR1cm4gZXJyb3IubmFtZSB8fCAnVW5rbm93biBlcnJvcic7XG59XG5cbi8qKiBTZW5kIGEgNDAwIGJhZC1yZXF1ZXN0IHJlc3BvbnNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRCYWRSZXF1ZXN0KFxuICByZXM6IFJlc3BvbnNlLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIGNvZGU6IEVycm9yQ29kZSB8IHN0cmluZyA9IEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SLFxuKTogdm9pZCB7XG4gIHNlbmRFcnJvcihyZXMsIDQwMCwgbWVzc2FnZSwgY29kZSk7XG59XG5cbi8qKiBTZW5kIGEgNTAwIGludGVybmFsIGVycm9yIHJlc3BvbnNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRJbnRlcm5hbEVycm9yKFxuICByZXM6IFJlc3BvbnNlLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IHZvaWQge1xuICBzZW5kRXJyb3IocmVzLCA1MDAsIG1lc3NhZ2UsIEVycm9yQ29kZS5JTlRFUk5BTF9FUlJPUiwgZGV0YWlscyk7XG59XG5cbi8vIFBhZ2luYXRpb25cblxuLyoqIENvbW1vbiBwYWdpbmF0aW9uICsgc29ydGluZyBwYXJhbWV0ZXJzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uUGFyYW1zIHtcbiAgbGltaXQ6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG4gIHNvcnRCeTogc3RyaW5nO1xuICBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnO1xufVxuXG4vKiogQSBwYXJzZWQgYD9zb3J0Qnk9JnNvcnRPcmRlcj1gIChkZWZhdWx0OiBuZXdlc3QgZmlyc3QpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3J0UGFyYW1zIHtcbiAgc29ydEJ5OiBzdHJpbmc7XG4gIHNvcnRPcmRlcjogJ2FzYycgfCAnZGVzYyc7XG59XG5cbi8qKiBQYXJzZSBgP3NvcnRCeT0mc29ydE9yZGVyPWA7IGRlZmF1bHRzIHRvIGBjcmVhdGVkQXRgIGRlc2NlbmRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTb3J0KHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFNvcnRQYXJhbXMge1xuICBjb25zdCBzb3J0QnkgPSBTdHJpbmcocXVlcnkuc29ydEJ5IHx8ICdjcmVhdGVkQXQnKTtcbiAgY29uc3Qgc29ydE9yZGVyOiAnYXNjJyB8ICdkZXNjJyA9XG4gICAgU3RyaW5nKHF1ZXJ5LnNvcnRPcmRlciB8fCAnZGVzYycpLnRvTG93ZXJDYXNlKCkgPT09ICdhc2MnID8gJ2FzYycgOiAnZGVzYyc7XG4gIHJldHVybiB7IHNvcnRCeSwgc29ydE9yZGVyIH07XG59XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgbGlzdC1yb3V0ZSB3aW5kb3cgKyBzb3J0OiB7QGxpbmsgcGFyc2VQYWdlfSB3aXRoIGEgcGFnZSBvZiAxMFxuICogKGNhcHBlZCBhdCBgTUFYX1BBR0VfTElNSVRgLCBvZmZzZXQgY2FwcGVkIGF0IGBNQVhfUEFHRV9PRkZTRVRgIOKAlCBkZWVwIHBhZ2luZ1xuICogdXNlcyB0aGUgY3Vyc29yIEFQSSkgcGx1cyB7QGxpbmsgcGFyc2VTb3J0fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFnaW5hdGlvblBhcmFtcyhxdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQYWdpbmF0aW9uUGFyYW1zIHtcbiAgcmV0dXJuIHsgLi4ucGFyc2VQYWdlKHF1ZXJ5LCB7IGRlZjogMTAsIG1heDogTUFYX1BBR0VfTElNSVQgfSksIC4uLnBhcnNlU29ydChxdWVyeSkgfTtcbn1cbiJdfQ==
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9yZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFrQixNQUFNLG9CQUFvQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakUsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixHQUFhLEVBQ2IsVUFBVSxHQUFXLEdBQUcsRUFDeEIsSUFBUSxFQUNSLE9BQWdCO0lBRWhCLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0RBQXNELEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBS1Y7UUFDRixPQUFPLEVBQUUsSUFBSTtRQUNiLFVBQVU7S0FDWCxDQUFDO0lBRUYsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdkIsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQU0s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UyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCwwQ0FBMEM7QUFDMUMsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixHQUFhLEVBQ2IsT0FBZSxFQUNmLE9BQWlDO0lBRWpDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFrQkQsdUVBQXVFO0FBQ3ZFLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBOEI7SUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLENBQUM7SUFDbkQsTUFBTSxTQUFTLEdBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQThCO0lBQ2xFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4vbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VQYWdlIH0gZnJvbSAnLi9wYXJhbXMuanMnO1xuaW1wb3J0IHsgaXNWYWxpZFF1b3RhVHlwZSwgUVVPVEFfVFlQRV9MQUJFTFMsIFFVT1RBX1VQR1JBREVfUEFUSCwgdHlwZSBRdW90YUluZm8gfSBmcm9tICcuLi90eXBlcy9jb21tb24uanMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItY29kZXMuanMnO1xuaW1wb3J0IHsgTUFYX1BBR0VfTElNSVQgfSBmcm9tICcuLi92YWxpZGF0aW9uL2NvbW1vbi1zY2hlbWFzLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdyZXNwb25zZScpO1xuXG4vKipcbiAqIFNlbmQgYSBzdGFuZGFyZGl6ZWQgc3VjY2VzcyByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0gcmVzIC0gRXhwcmVzcyByZXNwb25zZSBvYmplY3RcbiAqIEBwYXJhbSBzdGF0dXNDb2RlIC0gSFRUUCBzdGF0dXMgY29kZSAoZGVmYXVsdDogMjAwKVxuICogQHBhcmFtIGRhdGEgLSBSZXNwb25zZSBkYXRhXG4gKiBAcGFyYW0gbWVzc2FnZSAtIE9wdGlvbmFsIHN1Y2Nlc3MgbWVzc2FnZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZW5kU3VjY2VzcyhyZXMsIDIwMCwgeyBwbHVnaW46IHBsdWdpbkRhdGEgfSk7XG4gKiBzZW5kU3VjY2VzcyhyZXMsIDIwMSwgeyBpZDogbmV3SWQgfSwgJ1Jlc291cmNlIGNyZWF0ZWQnKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZFN1Y2Nlc3M8VD4oXG4gIHJlczogUmVzcG9uc2UsXG4gIHN0YXR1c0NvZGU6IG51bWJlciA9IDIwMCxcbiAgZGF0YT86IFQsXG4gIG1lc3NhZ2U/OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgaWYgKHJlcy5oZWFkZXJzU2VudCkge1xuICAgIGxvZ2dlci53YXJuKCdBdHRlbXB0ZWQgdG8gc2VuZCBzdWNjZXNzIGFmdGVyIGhlYWRlcnMgYWxyZWFkeSBzZW50JywgeyBzdGF0dXNDb2RlIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlOiB7XG4gICAgc3VjY2VzczogdHJ1ZTtcbiAgICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gICAgZGF0YT86IFQ7XG4gICAgbWVzc2FnZT86IHN0cmluZztcbiAgfSA9IHtcbiAgICBzdWNjZXNzOiB0cnVlLFxuICAgIHN0YXR1c0NvZGUsXG4gIH07XG5cbiAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlc3BvbnNlLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgaWYgKG1lc3NhZ2UpIHtcbiAgICByZXNwb25zZS5tZXNzYWdlID0gbWVzc2FnZTtcbiAgfVxuXG4gIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuanNvbihyZXNwb25zZSk7XG59XG5cbi8qKlxuICogU2VuZCBhIHN0YW5kYXJkaXplZCBlcnJvciByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0gcmVzIC0gRXhwcmVzcyByZXNwb25zZSBvYmplY3RcbiAqIEBwYXJhbSBzdGF0dXNDb2RlIC0gSFRUUCBzdGF0dXMgY29kZVxuICogQHBhcmFtIG1lc3NhZ2UgLSBFcnJvciBtZXNzYWdlXG4gKiBAcGFyYW0gY29kZSAtIEVycm9yIGNvZGUgZnJvbSBFcnJvckNvZGUgZW51bVxuICogQHBhcmFtIGRldGFpbHMgLSBPcHRpb25hbCBhZGRpdGlvbmFsIGRldGFpbHNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogc2VuZEVycm9yKHJlcywgNDA0LCAnUGx1Z2luIG5vdCBmb3VuZCcsIEVycm9yQ29kZS5OT1RfRk9VTkQpO1xuICogc2VuZEVycm9yKHJlcywgNDAwLCAnSW52YWxpZCBpbnB1dCcsIEVycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SLCB7IGZpZWxkOiAnbmFtZScgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRFcnJvcihcbiAgcmVzOiBSZXNwb25zZSxcbiAgc3RhdHVzQ29kZTogbnVtYmVyLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIGNvZGU/OiBFcnJvckNvZGUgfCBzdHJpbmcsXG4gIGRldGFpbHM/OiB1bmtub3duLFxuKTogdm9pZCB7XG4gIGlmIChyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICBsb2dnZXIud2FybignQXR0ZW1wdGVkIHRvIHNlbmQgZXJyb3IgYWZ0ZXIgaGVhZGVycyBhbHJlYWR5IHNlbnQnLCB7IHN0YXR1c0NvZGUsIG1lc3NhZ2UgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2U6IHtcbiAgICBzdWNjZXNzOiBmYWxzZTtcbiAgICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgZGV0YWlscz86IHVua25vd247XG4gIH0gPSB7XG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgc3RhdHVzQ29kZSxcbiAgICBtZXNzYWdlLFxuICB9O1xuXG4gIGlmIChjb2RlKSB7XG4gICAgcmVzcG9uc2UuY29kZSA9IGNvZGU7XG4gIH1cblxuICBpZiAoZGV0YWlscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVzcG9uc2UuZGV0YWlscyA9IGRldGFpbHM7XG4gIH1cblxuICByZXMuc3RhdHVzKHN0YXR1c0NvZGUpLmpzb24ocmVzcG9uc2UpO1xufVxuXG4vKipcbiAqIFRoZSBzdHJ1Y3R1cmVkIGhhbGYgb2YgZXZlcnkgNDI5IGBRVU9UQV9FWENFRURFRGAgYm9keSAoYGRldGFpbHNgKS4gU3RhYmxlXG4gKiB3aXJlIGNvbnRyYWN0IOKAlCB0aGUgZGFzaGJvYXJkLCB0aGUgQ0xJIGFuZCB0aGUgcGlwZWxpbmUgTGFtYmRhIGFsbCByZW5kZXIgYVxuICogcXVvdGEgcmVmdXNhbCBmcm9tIHRoZXNlIGZpZWxkcyByYXRoZXIgdGhhbiBwYXJzaW5nIGBtZXNzYWdlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YUV4Y2VlZGVkRGV0YWlscyB7XG4gIHF1b3RhOiBRdW90YUluZm87XG4gIHF1b3RhVHlwZTogc3RyaW5nO1xuICBsaW1pdDogbnVtYmVyO1xuICB1c2VkOiBudW1iZXI7XG4gIC8qKiBJU08gdGltZXN0YW1wIHRoZSBwZXJpb2QgcmVzZXRzIChhYnNlbnQgd2hlbiB0aGUgY2FsbGVyIGRpZG4ndCBrbm93KS4gKi9cbiAgcmVzZXRBdD86IHN0cmluZztcbiAgLyoqIFdoZXJlIGEgcGVyc29uIHJhaXNlcyB0aGUgbGltaXQgKHJlbGF0aXZlIHRvIHRoZSBkYXNoYm9hcmQgb3JpZ2luKS4gKi9cbiAgdXBncmFkZVVybDogc3RyaW5nO1xufVxuXG4vKiogYDIwMjYtMTEtMDVgIOKAlCB0aGUgcmVzZXQgREFURSBhIHBlcnNvbiByZWFkczsgdGhlIGV4YWN0IGluc3RhbnQgaXMgaW4gYHJlc2V0QXRgLiAqL1xuZnVuY3Rpb24gcmVzZXREYXRlTGFiZWwocmVzZXRBdDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFyZXNldEF0KSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBtcyA9IERhdGUucGFyc2UocmVzZXRBdCk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobXMpID8gbmV3IERhdGUobXMpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBodW1hbiBzZW50ZW5jZSBmb3IgYSBxdW90YSByZWZ1c2FsOiB3aGF0IHJhbiBvdXQsIHdoZW4gaXQgY29tZXMgYmFjayBhbmRcbiAqIHdoZXJlIHRvIHJhaXNlIGl0IOKAlCBcIkFQSSBjYWxsIHF1b3RhIHJlYWNoZWQgKDI1MDAwLzI1MDAwKTsgcmVzZXRzIDIwMjYtMTEtMDUuXG4gKiBVcGdyYWRlIGF0IC9kYXNoYm9hcmQvYmlsbGluZy5cIiBJdCBzYXlzIFdISUNIIHF1b3RhIGFuZCBnaXZlcyBhIGRhdGUsIGJlY2F1c2VcbiAqIFwiY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3JcIiBzZW50IHBlb3BsZSBodW50aW5nIGZvciBhIHBlcnNvbiB3aGVuIHRoZSBhbnN3ZXJcbiAqIHdhcyBhIHBhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdW90YUV4Y2VlZGVkTWVzc2FnZShxdW90YVR5cGU6IHN0cmluZywgcXVvdGE6IFBpY2s8UXVvdGFJbmZvLCAnbGltaXQnIHwgJ3VzZWQnPiwgcmVzZXRBdD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxhYmVsID0gaXNWYWxpZFF1b3RhVHlwZShxdW90YVR5cGUpID8gUVVPVEFfVFlQRV9MQUJFTFNbcXVvdGFUeXBlXSA6IHF1b3RhVHlwZTtcbiAgY29uc3Qgd2hlbiA9IHJlc2V0RGF0ZUxhYmVsKHJlc2V0QXQpO1xuICByZXR1cm4gYCR7bGFiZWx9IHF1b3RhIHJlYWNoZWQgKCR7cXVvdGEudXNlZH0vJHtxdW90YS5saW1pdH0pJHt3aGVuID8gYDsgcmVzZXRzICR7d2hlbn1gIDogJyd9LiBVcGdyYWRlIGF0ICR7UVVPVEFfVVBHUkFERV9QQVRIfS5gO1xufVxuXG4vKipcbiAqIFNlbmQgYSBxdW90YSBleGNlZWRlZCBlcnJvciByZXNwb25zZS5cbiAqXG4gKiBUaGUgYm9keSBjYXJyaWVzIGBkZXRhaWxzYCAoe0BsaW5rIFF1b3RhRXhjZWVkZWREZXRhaWxzfTogcXVvdGFUeXBlLCBsaW1pdCxcbiAqIHVzZWQsIHJlc2V0QXQsIHVwZ3JhZGVVcmwpIGFuZCB0aGUge0BsaW5rIHF1b3RhRXhjZWVkZWRNZXNzYWdlfSBzZW50ZW5jZTsgdGhlXG4gKiBgUmV0cnktQWZ0ZXJgICsgYFgtUXVvdGEtKmAgaGVhZGVycyByZXBlYXQgdGhlIG51bWJlcnMgZm9yIGNsaWVudHMgdGhhdCBvbmx5XG4gKiByZWFkIGhlYWRlcnMuIENvdW50cyBgcXVvdGFfZGVuaWVkX3RvdGFse3R5cGV9YCDigJQgZXZlcnkgdXNlci1mYWNpbmcgcXVvdGFcbiAqIHJlZnVzYWwsIGxhYmVsbGVkIGJ5IHRoZSBlbWl0dGluZyBgc2VydmljZWAuXG4gKlxuICogQHBhcmFtIHJlcyAtIEV4cHJlc3MgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gcXVvdGFUeXBlIC0gVHlwZSBvZiBxdW90YSBleGNlZWRlZFxuICogQHBhcmFtIHF1b3RhIC0gQ3VycmVudCBxdW90YSBpbmZvcm1hdGlvblxuICogQHBhcmFtIHJlc2V0QXQgLSBJU08gdGltZXN0YW1wIHdoZW4gcXVvdGEgcmVzZXRzXG4gKiBAcGFyYW0gbWVzc2FnZSAtIE92ZXJyaWRlIGZvciB0aGUgaHVtYW4gc2VudGVuY2UgKHJhcmVseSByaWdodCDigJQgdGhlIGRlZmF1bHQgbmFtZXMgdGhlIHF1b3RhLCB0aGUgcmVzZXQgZGF0ZSBhbmQgdGhlIHVwZ3JhZGUgcGFnZSlcbiAqIEBwYXJhbSBvcHRpb25zLmNvdW50RGVuaWFsIC0gYGZhbHNlYCBmb3IgYW4gSU5URVJOQUwgcmVmdXNhbCBhbm90aGVyIHNlcnZpY2UgcmUtYW5zd2VycyAodGhlIHF1b3RhIHNlcnZpY2UncyBvd24gL2luY3JlbWVudCksIHNvIG9uZSByZWZ1c2FsIGlzIGNvdW50ZWQgb25jZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzZW5kUXVvdGFFeGNlZWRlZChyZXMsICdhcGlDYWxscycsIHsgdHlwZTogJ2FwaUNhbGxzJywgbGltaXQ6IDEwMDAwLCB1c2VkOiAxMDAwMCwgcmVtYWluaW5nOiAwIH0sIHJlc2V0QXQpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kUXVvdGFFeGNlZWRlZChcbiAgcmVzOiBSZXNwb25zZSxcbiAgcXVvdGFUeXBlOiBzdHJpbmcsXG4gIHF1b3RhOiBRdW90YUluZm8sXG4gIHJlc2V0QXQ/OiBzdHJpbmcsXG4gIG1lc3NhZ2U/OiBzdHJpbmcsXG4gIG9wdGlvbnM6IHsgY291bnREZW5pYWw/OiBib29sZWFuIH0gPSB7fSxcbik6IHZvaWQge1xuICBjb25zdCByZXNldERhdGUgPSByZXNldEF0ID8gbmV3IERhdGUocmVzZXRBdCkgOiBuZXcgRGF0ZSgpO1xuICBjb25zdCByZXNldEluID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChyZXNldERhdGUuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSkgLyAxMDAwKSk7XG5cbiAgLy8gR3VhcmQgbGlrZSB0aGUgc2libGluZyBoZWxwZXJzOiBgc2V0SGVhZGVyYCB0aHJvd3Mgc3luY2hyb25vdXNseSBvbmNlIHRoZVxuICAvLyByZXNwb25zZSBoYXMgYmVlbiBzZW50LCBzbyBza2lwIHRoZSBxdW90YSBoZWFkZXJzIChhbmQgbGV0IGBzZW5kRXJyb3JgIG5vLW9wKVxuICAvLyBpbnN0ZWFkIG9mIGNyYXNoaW5nIHRoZSBoYW5kbGVyIG9uIGFuIGFscmVhZHktY29tbWl0dGVkIHJlc3BvbnNlLlxuICBpZiAoIXJlcy5oZWFkZXJzU2VudCkge1xuICAgIHJlcy5zZXRIZWFkZXIoJ1JldHJ5LUFmdGVyJywgcmVzZXRJbik7XG4gICAgcmVzLnNldEhlYWRlcignWC1RdW90YS1MaW1pdCcsIHF1b3RhLmxpbWl0KTtcbiAgICByZXMuc2V0SGVhZGVyKCdYLVF1b3RhLVVzZWQnLCBxdW90YS51c2VkKTtcbiAgICByZXMuc2V0SGVhZGVyKCdYLVF1b3RhLVJlbWFpbmluZycsIE1hdGgubWF4KDAsIHF1b3RhLnJlbWFpbmluZykpO1xuXG4gICAgaWYgKHJlc2V0QXQpIHtcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ1gtUXVvdGEtUmVzZXQnLCByZXNldEF0KTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucy5jb3VudERlbmlhbCAhPT0gZmFsc2UpIGVtaXRDb3VudGVyKCdxdW90YV9kZW5pZWRfdG90YWwnLCB7IHR5cGU6IHF1b3RhVHlwZSB9KTtcblxuICBjb25zdCBkZXRhaWxzOiBRdW90YUV4Y2VlZGVkRGV0YWlscyA9IHtcbiAgICBxdW90YSxcbiAgICBxdW90YVR5cGUsXG4gICAgbGltaXQ6IHF1b3RhLmxpbWl0LFxuICAgIHVzZWQ6IHF1b3RhLnVzZWQsXG4gICAgLi4uKHJlc2V0QXQgPyB7IHJlc2V0QXQgfSA6IHt9KSxcbiAgICB1cGdyYWRlVXJsOiBRVU9UQV9VUEdSQURFX1BBVEgsXG4gIH07XG4gIHNlbmRFcnJvcihcbiAgICByZXMsXG4gICAgNDI5LFxuICAgIG1lc3NhZ2UgPz8gcXVvdGFFeGNlZWRlZE1lc3NhZ2UocXVvdGFUeXBlLCBxdW90YSwgcmVzZXRBdCksXG4gICAgRXJyb3JDb2RlLlFVT1RBX0VYQ0VFREVELFxuICAgIGRldGFpbHMsXG4gICk7XG59XG5cbi8qKiBUaGUgYHBhZ2luYXRpb25gIGVudmVsb3BlIGV2ZXJ5IGxpc3Qgcm91dGUgcmV0dXJucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbk1ldGEge1xuICB0b3RhbDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbiAgaGFzTW9yZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYHBhZ2luYXRpb25gIGVudmVsb3BlIGZvciBvbmUgcGFnZS5cbiAqXG4gKiBgaGFzTW9yZWAgaXMgZGVyaXZlZCwgbmV2ZXIgaGFuZC1jb21wdXRlZDogYG9mZnNldCArIDxyb3dzIG9uIHRoaXMgcGFnZT4gPFxuICogdG90YWxgIHdhcyBUSEUgbW9zdC1yZXBlYXRlZCBleHByZXNzaW9uIGluIHRoZSBjb2RlYmFzZSwgYW5kIGEgcm91dGUgdGhhdFxuICogc3BlbGxzIGl0IHNsaWdodGx5IGRpZmZlcmVudGx5IHJlcG9ydHMgYSBwaGFudG9tIG5leHQgcGFnZSAob3IgaGlkZXMgYSByZWFsXG4gKiBvbmUpIOKAlCBhIHBhZ2luZyBidWcgdGhhdCBvbmx5IHNob3dzIG9uIHRoZSBsYXN0IHBhZ2UsIHdoZXJlIG5vYm9keSBsb29rcy5cbiAqXG4gKiBgcmV0dXJuZWRgIGlzIHRoZSByb3cgY291bnQgdGhpcyBwYWdlIGFjdHVhbGx5IGNhcnJpZXMuIEl0IGRlZmF1bHRzIHRvXG4gKiBgbGltaXRgIGJlY2F1c2UgYSBsaXN0IHJvdXRlIHRoYXQgZG9lc24ndCBzYXkgb3RoZXJ3aXNlIHJldHVybnMgYSBmdWxsIHBhZ2U7XG4gKiBwYXNzIGl0IGZvciBhIHJvdXRlIHdob3NlIHBhZ2UgY2FuIGJlIHNob3J0ZXIgdGhhbiBpdHMgbGltaXQsIGFuZCBmb3IgYW5cbiAqIHVucGFnZWQgXCJldmVyeXRoaW5nXCIgYW5zd2VyICh3aGljaCByZXBvcnRzIGBsaW1pdCA9IHRvdGFsYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWdpbmF0aW9uTWV0YShcbiAgb3B0aW9uczogeyB0b3RhbDogbnVtYmVyOyBvZmZzZXQ6IG51bWJlcjsgbGltaXQ6IG51bWJlcjsgcmV0dXJuZWQ/OiBudW1iZXIgfSxcbik6IFBhZ2luYXRpb25NZXRhIHtcbiAgY29uc3QgeyB0b3RhbCwgb2Zmc2V0LCBsaW1pdCwgcmV0dXJuZWQgfSA9IG9wdGlvbnM7XG4gIHJldHVybiB7IHRvdGFsLCBvZmZzZXQsIGxpbWl0LCBoYXNNb3JlOiBvZmZzZXQgKyAocmV0dXJuZWQgPz8gbGltaXQpIDwgdG90YWwgfTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgcGFnaW5hdGVkIGxpc3QgcmVzcG9uc2Ugd2l0aCB0aGUgaXRlbXMgbmVzdGVkIHVuZGVyIGEgbmFtZWQga2V5LlxuICogVXNlIHdoZW4gdGhlIEFQSSBjb250cmFjdCBpcyBgeyA8a2V5PjogWy4uLl0sIHBhZ2luYXRpb246IHsuLi59IH1gXG4gKiAodGhlIGRvbWluYW50IHNoYXBlIGFjcm9zcyBhcGkvKiBzZXJ2aWNlcykuXG4gKlxuICogYGhhc01vcmVgIGlzIE9QVElPTkFMIGFuZCBkZWZhdWx0cyB0byBgb2Zmc2V0ICsgZGF0YS5sZW5ndGggPCB0b3RhbGAg4oCUIHRoZVxuICogZXhwcmVzc2lvbiBldmVyeSBjYWxsZXIgdXNlZCB0byB3cml0ZSBvdXQgYnkgaGFuZC4gUGFzcyBpdCBvbmx5IHdoZW4gdGhlXG4gKiByb3V0ZSBrbm93cyBzb21ldGhpbmcgdGhlIHJvdyBjb3VudCBkb2VzIG5vdCAoYSBjdXJzb3IgcGFnZSwgb3IgYSB3aW5kb3dcbiAqIGZldGNoZWQgd2l0aCBgbGltaXQgKyAxYCB0byBwZWVrIGFoZWFkKS4gV2l0aG91dCBhIGB0b3RhbGAgdGhlcmUgaXMgbm90aGluZyB0b1xuICogZGVyaXZlIGZyb20sIHNvIGl0IGZhbGxzIGJhY2sgdG8gXCJhIGN1cnNvciB3YXMgaXNzdWVkXCIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHNlbmRQYWdpbmF0ZWROZXN0ZWQocmVzLCAncGlwZWxpbmVzJywgaXRlbXMsIHsgdG90YWw6IDUwLCBsaW1pdDogMjUsIG9mZnNldDogMCB9KTtcbiAqIC8vIOKGkiB7IHBpcGVsaW5lczogWy4uLl0sIHBhZ2luYXRpb246IHsgdG90YWw6IDUwLCBsaW1pdDogMjUsIG9mZnNldDogMCwgaGFzTW9yZTogdHJ1ZSB9IH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZFBhZ2luYXRlZE5lc3RlZDxUPihcbiAgcmVzOiBSZXNwb25zZSxcbiAgZGF0YUtleTogc3RyaW5nLFxuICBkYXRhOiBUW10sXG4gIG9wdGlvbnM6IHtcbiAgICB0b3RhbD86IG51bWJlcjtcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIG9mZnNldDogbnVtYmVyO1xuICAgIGhhc01vcmU/OiBib29sZWFuO1xuICAgIG5leHRDdXJzb3I/OiBzdHJpbmc7XG4gICAgc3RhdHVzQ29kZT86IG51bWJlcjtcbiAgfSxcbik6IHZvaWQge1xuICBpZiAocmVzLmhlYWRlcnNTZW50KSB7XG4gICAgbG9nZ2VyLndhcm4oJ0F0dGVtcHRlZCB0byBzZW5kIHBhZ2luYXRlZCByZXNwb25zZSBhZnRlciBoZWFkZXJzIGFscmVhZHkgc2VudCcpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7IHN0YXR1c0NvZGUgPSAyMDAsIHRvdGFsLCBsaW1pdCwgb2Zmc2V0LCBoYXNNb3JlLCBuZXh0Q3Vyc29yIH0gPSBvcHRpb25zO1xuICBjb25zdCByZXNvbHZlZCA9IGhhc01vcmVcbiAgICA/PyAodG90YWwgIT09IHVuZGVmaW5lZFxuICAgICAgPyBwYWdpbmF0aW9uTWV0YSh7IHRvdGFsLCBvZmZzZXQsIGxpbWl0LCByZXR1cm5lZDogZGF0YS5sZW5ndGggfSkuaGFzTW9yZVxuICAgICAgOiBuZXh0Q3Vyc29yICE9PSB1bmRlZmluZWQpO1xuICBjb25zdCBwYWdpbmF0aW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgbGltaXQsIG9mZnNldCwgaGFzTW9yZTogcmVzb2x2ZWQgfTtcbiAgaWYgKHRvdGFsICE9PSB1bmRlZmluZWQpIHBhZ2luYXRpb24udG90YWwgPSB0b3RhbDtcbiAgaWYgKG5leHRDdXJzb3IpIHBhZ2luYXRpb24ubmV4dEN1cnNvciA9IG5leHRDdXJzb3I7XG4gIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuanNvbih7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBzdGF0dXNDb2RlLFxuICAgIGRhdGE6IHsgW2RhdGFLZXldOiBkYXRhLCBwYWdpbmF0aW9uIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFNRTFNUQVRFOiBleGFjdGx5IGZpdmUgY2hhcmFjdGVycywgZGlnaXRzIGFuZCB1cHBlcmNhc2UgTGF0aW4gbGV0dGVyc1xuICogKGUuZy4gYDIzNTA1YCB1bmlxdWVfdmlvbGF0aW9uLCBgNDI2MDFgIHN5bnRheF9lcnJvcikuIE5vZGUncyBvd24gc29ja2V0IGFuZFxuICogRE5TIGVycm9ycyB1c2UgdGhlIHNhbWUgYC5jb2RlYCBwcm9wZXJ0eSBidXQgc3BlbGwgaXQgZGlmZmVyZW50bHlcbiAqIChgRUNPTk5SRVNFVGAsIGBFVElNRURPVVRgLCBgRU5PVEZPVU5EYCksIHdoaWNoIGlzIHdoYXQgdGhpcyB0ZWxscyBhcGFydC5cbiAqL1xuY29uc3QgU1FMU1RBVEVfUEFUVEVSTiA9IC9eWzAtOUEtWl17NX0kLztcblxuLyoqXG4gKiBMZW5ndGggYWxvbmUgaXMgbm90IGVub3VnaDogYEVQSVBFYCBhbmQgYEUyQklHYCBhcmUgZml2ZSB1cHBlcmNhc2UgY2hhcmFjdGVyc1xuICogYW5kIHdvdWxkIHBhc3MgYXMgU1FMU1RBVEVzLiBFdmVyeSBsaWJ1di9Ob2RlIGVycm5vIHN0YXJ0cyB3aXRoIGBFYCwgYW5kXG4gKiBQb3N0Z3JlcyBkZWZpbmVzIG5vIGVycm9yIGNsYXNzIHRoYXQgZG9lcyDigJQgaXRzIGNsYXNzZXMgYXJlIDAwLTBaLCAyMC0yRixcbiAqIDM0LTNGLCA0MC00NCwgNTMtNTgsIDcyLCBGMCwgSFYsIFAwIGFuZCBYWCAoc2VlIHRoZSBzZXJ2ZXIncyBlcnJjb2Rlcy50eHQpLlxuICogU28gYSBsZWFkaW5nIGBFYCBzZXR0bGVzIGl0LlxuICovXG5jb25zdCBOT0RFX0VSUk5PX1BBVFRFUk4gPSAvXkUvO1xuXG4vKipcbiAqIEV4dHJhY3QgZGF0YWJhc2UgZXJyb3IgZGV0YWlscyBmb3IgbG9nZ2luZy9yZXNwb25zZS5cbiAqXG4gKiBFeHRyYWN0cyBQb3N0Z3JlU1FMIGVycm9yIGNvZGVzLCBkZXRhaWxzLCBoaW50cywgYW5kIGNvbnN0cmFpbnQgbmFtZXNcbiAqIGZyb20gZGF0YWJhc2UgZXJyb3JzIGZvciBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuXG4gKlxuICogT25seSBhIGdlbnVpbmUgUG9zdGdyZXMgZXJyb3IgeWllbGRzIGEgYGRiQ29kZWA6IHJlcG9ydGluZyBhbnkgYC5jb2RlYCBhcyBvbmVcbiAqIHdvdWxkIGxvZyBhIHRyYW5zcG9ydCBmYWlsdXJlIChgRUNPTk5SRVNFVGAgd2hlbiB0aGUgcG9vbGVyIGRyb3BzIG91dCBvZiB0aGVcbiAqIFNlcnZpY2UgZW5kcG9pbnRzLCBzYXkpIGFzIGB7XCJkYlwiOntcImRiQ29kZVwiOlwiRUNPTk5SRVNFVFwifX1gIGFuZCBzZW5kIHJlYWRlcnNcbiAqIGh1bnRpbmcgdGhyb3VnaCBjbGVhbiBQb3N0Z3JlcyBsb2dzLiBUaGUgdHJhbnNwb3J0IGNvZGUgaXMgbm90IGxvc3Qg4oCUIGNhbGxlcnMgbG9nIHRoZSBlcnJvciBtZXNzYWdlXG4gKiBpdHNlbGYgYWxvbmdzaWRlIHRoZXNlIGRldGFpbHMg4oCUIGl0IGp1c3Qgc3RvcHMgY2xhaW1pbmcgdG8gYmUgYSBEQiBmYXVsdC5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBFcnJvciBvYmplY3QgZnJvbSBkYXRhYmFzZSBvcGVyYXRpb25cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGV4dHJhY3RlZCBlcnJvciBkZXRhaWxzOyBge31gIHdoZW4gYGVycm9yYCBpcyBub3QgYVxuICogICBQb3N0Z3JlcyBlcnJvciAobm8gU1FMU1RBVEUgYW5kIG5vbmUgb2YgdGhlIHBnLXNwZWNpZmljIGZpZWxkcylcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHJ5IHtcbiAqICAgYXdhaXQgZGIuaW5zZXJ0KHBsdWdpbnMpLnZhbHVlcyhuZXdQbHVnaW4pO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgY29uc3QgZGJEZXRhaWxzID0gZXh0cmFjdERiRXJyb3IoZXJyb3IpO1xuICogICByZXR1cm4gc2VuZEVycm9yKHJlcywgNTAwLCAnRGF0YWJhc2UgZXJyb3InLCBFcnJvckNvZGUuREFUQUJBU0VfRVJST1IsIGRiRGV0YWlscyk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYkVycm9yKGVycm9yOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIWVycm9yIHx8IHR5cGVvZiBlcnJvciAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyBEcml6emxlIE9STSB3cmFwcyB0aGUgb3JpZ2luYWwgcGcgZXJyb3IgaW4gZXJyb3IuY2F1c2Ug4oCUXG4gIC8vIGNoZWNrIHRoZSBjYXVzZSBmaXJzdCwgdGhlbiBmYWxsIGJhY2sgdG8gdGhlIGVycm9yIGl0c2VsZi5cbiAgY29uc3QgZXJyID0gZXJyb3IgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHNvdXJjZSA9IChlcnIuY2F1c2UgJiYgdHlwZW9mIGVyci5jYXVzZSA9PT0gJ29iamVjdCcgPyBlcnIuY2F1c2UgOiBlcnIpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBkZXRhaWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIGlmICh0eXBlb2Ygc291cmNlLmNvZGUgPT09ICdzdHJpbmcnXG4gICAgJiYgU1FMU1RBVEVfUEFUVEVSTi50ZXN0KHNvdXJjZS5jb2RlKVxuICAgICYmICFOT0RFX0VSUk5PX1BBVFRFUk4udGVzdChzb3VyY2UuY29kZSkpIHtcbiAgICBkZXRhaWxzLmRiQ29kZSA9IHNvdXJjZS5jb2RlO1xuICB9XG4gIGlmIChzb3VyY2UuZGV0YWlsKSBkZXRhaWxzLmRiRGV0YWlsID0gc291cmNlLmRldGFpbDtcbiAgaWYgKHNvdXJjZS5oaW50KSBkZXRhaWxzLmRiSGludCA9IHNvdXJjZS5oaW50O1xuICBpZiAoc291cmNlLmNvbnN0cmFpbnQpIGRldGFpbHMuY29uc3RyYWludCA9IHNvdXJjZS5jb25zdHJhaW50O1xuICBpZiAoc291cmNlLnRhYmxlKSBkZXRhaWxzLnRhYmxlID0gc291cmNlLnRhYmxlO1xuICBpZiAoc291cmNlLmNvbHVtbikgZGV0YWlscy5jb2x1bW4gPSBzb3VyY2UuY29sdW1uO1xuXG4gIHJldHVybiBkZXRhaWxzO1xufVxuXG4vLyBDb252ZW5pZW5jZSBoZWxwZXJzIChzaGFyZWQgYWNyb3NzIHBsdWdpbiwgcGlwZWxpbmUsIHF1b3RhIHNlcnZpY2VzKVxuXG4vKipcbiAqIEV4dHJhY3QgYSBodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGZyb20gYW4gdW5rbm93biBjYXRjaCB2YWx1ZS5cbiAqXG4gKiBGYWxscyBiYWNrIGJleW9uZCBgLm1lc3NhZ2VgIGJlY2F1c2Ugc2V2ZXJhbCBjb21tb24gTm9kZSBlcnJvcnMgY2FycnkgYW5cbiAqIEVNUFRZIGAubWVzc2FnZWA6XG4gKiAgLSBkdWFsLXN0YWNrIChJUHY0K0lQdjYpIGNvbm5lY3QgZmFpbHVyZXMgc3VyZmFjZSBhcyBhbiBgQWdncmVnYXRlRXJyb3JgXG4gKiAgICB3aG9zZSBvd24gbWVzc2FnZSBpcyBibGFuayDigJQgdGhlIGNhdXNlIGxpdmVzIGluIGAuY29kZWAgKGUuZy5cbiAqICAgIGBFQ09OTlJFRlVTRURgL2BFVElNRURPVVRgKSBhbmQvb3IgdGhlIGAuZXJyb3JzW11gIHN1Yi1lcnJvcnM7XG4gKiAgLSByYXcgc29ja2V0IGBFcnJub0V4Y2VwdGlvbmBzIGNhbiBsaWtld2lzZSBjYXJyeSBvbmx5IGEgYC5jb2RlYC5cbiAqIFdpdGhvdXQgdGhpcywgYW4gdW5yZWFjaGFibGUgaW50ZXJuYWwgc2VydmljZSAoZS5nLiBjb21wbGlhbmNlIHN0aWxsXG4gKiBzdGFydGluZykgcHJvZHVjZWQgYmxhbmsgcGVyLWl0ZW0gZXJyb3JzIGluIGJ1bGsgcmVzcG9uc2VzIGFuZCBgZXJyb3I6XCJcImBcbiAqIGluIGxvZ3Mg4oCUIGEgc2lsZW50IGJsYWNrIGJveC4gT3JkZXI6IG1lc3NhZ2Ug4oaSIGNvZGUg4oaSIGpvaW5lZCBzdWItZXJyb3JzIOKGklxuICogZXJyb3IgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSByZXR1cm4gU3RyaW5nKGVycm9yKTtcbiAgaWYgKGVycm9yLm1lc3NhZ2UpIHJldHVybiBlcnJvci5tZXNzYWdlO1xuXG4gIGNvbnN0IGNvZGUgPSAoZXJyb3IgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGU7XG4gIGlmIChjb2RlKSByZXR1cm4gY29kZTtcblxuICBjb25zdCBpbm5lciA9IChlcnJvciBhcyB7IGVycm9ycz86IHVua25vd25bXSB9KS5lcnJvcnM7XG4gIGlmIChBcnJheS5pc0FycmF5KGlubmVyKSAmJiBpbm5lci5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgam9pbmVkID0gaW5uZXIubWFwKGVycm9yTWVzc2FnZSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJzsgJyk7XG4gICAgaWYgKGpvaW5lZCkgcmV0dXJuIGpvaW5lZDtcbiAgfVxuXG4gIHJldHVybiBlcnJvci5uYW1lIHx8ICdVbmtub3duIGVycm9yJztcbn1cblxuLyoqIFNlbmQgYSA0MDAgYmFkLXJlcXVlc3QgcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEJhZFJlcXVlc3QoXG4gIHJlczogUmVzcG9uc2UsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgY29kZTogRXJyb3JDb2RlIHwgc3RyaW5nID0gRXJyb3JDb2RlLlZBTElEQVRJT05fRVJST1IsXG4pOiB2b2lkIHtcbiAgc2VuZEVycm9yKHJlcywgNDAwLCBtZXNzYWdlLCBjb2RlKTtcbn1cblxuLyoqIFNlbmQgYSA1MDAgaW50ZXJuYWwgZXJyb3IgcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEludGVybmFsRXJyb3IoXG4gIHJlczogUmVzcG9uc2UsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogdm9pZCB7XG4gIHNlbmRFcnJvcihyZXMsIDUwMCwgbWVzc2FnZSwgRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SLCBkZXRhaWxzKTtcbn1cblxuLy8gUGFnaW5hdGlvblxuXG4vKiogQ29tbW9uIHBhZ2luYXRpb24gKyBzb3J0aW5nIHBhcmFtZXRlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25QYXJhbXMge1xuICBsaW1pdDogbnVtYmVyO1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgc29ydEJ5OiBzdHJpbmc7XG4gIHNvcnRPcmRlcjogJ2FzYycgfCAnZGVzYyc7XG59XG5cbi8qKiBBIHBhcnNlZCBgP3NvcnRCeT0mc29ydE9yZGVyPWAgKGRlZmF1bHQ6IG5ld2VzdCBmaXJzdCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRQYXJhbXMge1xuICBzb3J0Qnk6IHN0cmluZztcbiAgc29ydE9yZGVyOiAnYXNjJyB8ICdkZXNjJztcbn1cblxuLyoqIFBhcnNlIGA/c29ydEJ5PSZzb3J0T3JkZXI9YDsgZGVmYXVsdHMgdG8gYGNyZWF0ZWRBdGAgZGVzY2VuZGluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNvcnQocXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogU29ydFBhcmFtcyB7XG4gIGNvbnN0IHNvcnRCeSA9IFN0cmluZyhxdWVyeS5zb3J0QnkgfHwgJ2NyZWF0ZWRBdCcpO1xuICBjb25zdCBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnID1cbiAgICBTdHJpbmcocXVlcnkuc29ydE9yZGVyIHx8ICdkZXNjJykudG9Mb3dlckNhc2UoKSA9PT0gJ2FzYycgPyAnYXNjJyA6ICdkZXNjJztcbiAgcmV0dXJuIHsgc29ydEJ5LCBzb3J0T3JkZXIgfTtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBsaXN0LXJvdXRlIHdpbmRvdyArIHNvcnQ6IHtAbGluayBwYXJzZVBhZ2V9IHdpdGggYSBwYWdlIG9mIDEwXG4gKiAoY2FwcGVkIGF0IGBNQVhfUEFHRV9MSU1JVGAsIG9mZnNldCBjYXBwZWQgYXQgYE1BWF9QQUdFX09GRlNFVGAg4oCUIGRlZXAgcGFnaW5nXG4gKiB1c2VzIHRoZSBjdXJzb3IgQVBJKSBwbHVzIHtAbGluayBwYXJzZVNvcnR9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYWdpbmF0aW9uUGFyYW1zKHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFBhZ2luYXRpb25QYXJhbXMge1xuICByZXR1cm4geyAuLi5wYXJzZVBhZ2UocXVlcnksIHsgZGVmOiAxMCwgbWF4OiBNQVhfUEFHRV9MSU1JVCB9KSwgLi4ucGFyc2VTb3J0KHF1ZXJ5KSB9O1xufVxuIl19
@@ -27,4 +27,4 @@ export function normalizeRetentionDays(value) {
27
27
  return null;
28
28
  return clampRetentionDays(value);
29
29
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0ZW50aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3JldGVudGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFDcEMsbUVBQW1FO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUN0Qyw2REFBNkQ7QUFDN0QsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFdEMsK0VBQStFO0FBQy9FLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUFZO0lBQzdDLE9BQU8sSUFBSSxLQUFLLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEtBQWM7SUFDbkQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3ZFLElBQUksS0FBSyxLQUFLLG1CQUFtQjtRQUFFLE9BQU8sbUJBQW1CLENBQUM7SUFDOUQsSUFBSSxLQUFLLEdBQUcsa0JBQWtCO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDNUMsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHJlcG9ydGluZy1yZXRlbnRpb24gYm91bmRzLCBzaGFyZWQgYnkgYmlsbGluZyAod2hpY2ggY29tcHV0ZXMgYW5kIHB1c2hlc1xuICogYW4gb3JnJ3MgZWZmZWN0aXZlIGVudGl0bGVtZW50KSwgcmVwb3J0aW5nICh3aGljaCBhY2NlcHRzIGl0IGFuZCBjYXBzIHJlcG9ydFxuICogcmFuZ2VzKSBhbmQgdGhlIGRhdGEgbGF5ZXIgKHdoaWNoIHN3ZWVwcykuXG4gKi9cbmV4cG9ydCBjb25zdCBSRVRFTlRJT05fTUlOX0RBWVMgPSAxO1xuLyoqIEFic29sdXRlIGNlaWxpbmcgKGRheXMpIGZvciByZXRhaW5lZCBkYXRhIGFuZCByZXBvcnQgcmFuZ2VzLiAqL1xuZXhwb3J0IGNvbnN0IFJFVEVOVElPTl9NQVhfREFZUyA9IDczMDtcbi8qKiBUaGUgXCJrZWVwIGZvcmV2ZXJcIiBzZW50aW5lbCBhbiB1bmxpbWl0ZWQgdGllciBjYXJyaWVzLiAqL1xuZXhwb3J0IGNvbnN0IFJFVEVOVElPTl9VTkxJTUlURUQgPSAtMTtcblxuLyoqIENsYW1wIGEgcmV0ZW50aW9uIHRvIHRoZSBjZWlsaW5nOyB0aGUgdW5saW1pdGVkIHNlbnRpbmVsIHBhc3NlcyB0aHJvdWdoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wUmV0ZW50aW9uRGF5cyhkYXlzOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gZGF5cyA9PT0gUkVURU5USU9OX1VOTElNSVRFRCA/IFJFVEVOVElPTl9VTkxJTUlURUQgOiBNYXRoLm1pbihkYXlzLCBSRVRFTlRJT05fTUFYX0RBWVMpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGFuIHVudHJ1c3RlZCByZXRlbnRpb24gdmFsdWU6IHRoZSB1bmxpbWl0ZWQgc2VudGluZWwsIG9yIGFuIGludGVnZXJcbiAqIOKJpSAxIGNsYW1wZWQgdG8gdGhlIGNlaWxpbmcuIEFueXRoaW5nIGVsc2UgKG5vbi1pbnRlZ2VyLCAwLCA8IC0xKSDihpIgYG51bGxgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUmV0ZW50aW9uRGF5cyh2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IG51bGwge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHJldHVybiBudWxsO1xuICBpZiAodmFsdWUgPT09IFJFVEVOVElPTl9VTkxJTUlURUQpIHJldHVybiBSRVRFTlRJT05fVU5MSU1JVEVEO1xuICBpZiAodmFsdWUgPCBSRVRFTlRJT05fTUlOX0RBWVMpIHJldHVybiBudWxsO1xuICByZXR1cm4gY2xhbXBSZXRlbnRpb25EYXlzKHZhbHVlKTtcbn1cbiJdfQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0ZW50aW9uLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmV0ZW50aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUNwQyxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUV0QywrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQVk7SUFDN0MsT0FBTyxJQUFJLEtBQUssbUJBQW1CLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2pHLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBYztJQUNuRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdkUsSUFBSSxLQUFLLEtBQUssbUJBQW1CO1FBQUUsT0FBTyxtQkFBbUIsQ0FBQztJQUM5RCxJQUFJLEtBQUssR0FBRyxrQkFBa0I7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM1QyxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgcmVwb3J0aW5nLXJldGVudGlvbiBib3VuZHMsIHNoYXJlZCBieSBiaWxsaW5nICh3aGljaCBjb21wdXRlcyBhbmQgcHVzaGVzXG4gKiBhbiBvcmcncyBlZmZlY3RpdmUgZW50aXRsZW1lbnQpLCByZXBvcnRpbmcgKHdoaWNoIGFjY2VwdHMgaXQgYW5kIGNhcHMgcmVwb3J0XG4gKiByYW5nZXMpIGFuZCB0aGUgZGF0YSBsYXllciAod2hpY2ggc3dlZXBzKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFVEVOVElPTl9NSU5fREFZUyA9IDE7XG4vKiogQWJzb2x1dGUgY2VpbGluZyAoZGF5cykgZm9yIHJldGFpbmVkIGRhdGEgYW5kIHJlcG9ydCByYW5nZXMuICovXG5leHBvcnQgY29uc3QgUkVURU5USU9OX01BWF9EQVlTID0gNzMwO1xuLyoqIFRoZSBcImtlZXAgZm9yZXZlclwiIHNlbnRpbmVsIGFuIHVubGltaXRlZCB0aWVyIGNhcnJpZXMuICovXG5leHBvcnQgY29uc3QgUkVURU5USU9OX1VOTElNSVRFRCA9IC0xO1xuXG4vKiogQ2xhbXAgYSByZXRlbnRpb24gdG8gdGhlIGNlaWxpbmc7IHRoZSB1bmxpbWl0ZWQgc2VudGluZWwgcGFzc2VzIHRocm91Z2guICovXG5leHBvcnQgZnVuY3Rpb24gY2xhbXBSZXRlbnRpb25EYXlzKGRheXM6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBkYXlzID09PSBSRVRFTlRJT05fVU5MSU1JVEVEID8gUkVURU5USU9OX1VOTElNSVRFRCA6IE1hdGgubWluKGRheXMsIFJFVEVOVElPTl9NQVhfREFZUyk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4gdW50cnVzdGVkIHJldGVudGlvbiB2YWx1ZTogdGhlIHVubGltaXRlZCBzZW50aW5lbCwgb3IgYW4gaW50ZWdlclxuICog4omlIDEgY2xhbXBlZCB0byB0aGUgY2VpbGluZy4gQW55dGhpbmcgZWxzZSAobm9uLWludGVnZXIsIDAsIDwgLTEpIOKGkiBgbnVsbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZXRlbnRpb25EYXlzKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gUkVURU5USU9OX1VOTElNSVRFRCkgcmV0dXJuIFJFVEVOVElPTl9VTkxJTUlURUQ7XG4gIGlmICh2YWx1ZSA8IFJFVEVOVElPTl9NSU5fREFZUykgcmV0dXJuIG51bGw7XG4gIHJldHVybiBjbGFtcFJldGVudGlvbkRheXModmFsdWUpO1xufVxuIl19
@@ -16,4 +16,4 @@ import { createRequire } from 'node:module';
16
16
  export function safeCreateRequire(metaUrl) {
17
17
  return createRequire(metaUrl || process.argv[1] || `${process.cwd()}/index.js`);
18
18
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1yZXF1aXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NhZmUtcmVxdWlyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBMkI7SUFDM0QsT0FBTyxhQUFhLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2xGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ25vZGU6bW9kdWxlJztcblxuLyoqXG4gKiBCdWlsZCBhIENvbW1vbkpTIGByZXF1aXJlYCBmb3Igc3luY2hyb25vdXNseSBsb2FkaW5nIE9QVElPTkFMIGluc3RhbGxlZFxuICogcGFja2FnZXMgZnJvbSBFU00gY29kZSAoZS5nLiBwcm9tLWNsaWVudCwgQG9wZW50ZWxlbWV0cnkvYXBpLCBpb3JlZGlzIGJlaGluZFxuICogYSB0cnkvY2F0Y2gpLlxuICpcbiAqIFBhc3MgYGltcG9ydC5tZXRhLnVybGAuIFdoZW4gdGhpcyBFU00gc291cmNlIGlzIGJ1bmRsZWQgdG8gQ0pTIOKAlCBhcyB0aGUgQ0RLXG4gKiBMYW1iZGEgaGFuZGxlcnMgYXJlIOKAlCBlc2J1aWxkIHJlcGxhY2VzIGBpbXBvcnQubWV0YWAgd2l0aCBge31gLCBzbyB0aGUgdmFsdWVcbiAqIGlzIGB1bmRlZmluZWRgIGFuZCBhIGJhcmUgYGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKWAgdGhyb3dzIGF0IG1vZHVsZVxuICogbG9hZCAoXCJUaGUgYXJndW1lbnQgJ2ZpbGVuYW1lJyBtdXN0IGJlIGEgZmlsZSBVUkzigKYgUmVjZWl2ZWQgdW5kZWZpbmVkXCIpLiBXZVxuICogZmFsbCBiYWNrIHRvIHRoZSBwcm9jZXNzIGVudHJ5IHBhdGggc28gdGhlcmUncyBhbHdheXMgYSB2YWxpZCByZXNvbHV0aW9uIGJhc2VcbiAqICh0aGUgYmFzZSBvbmx5IG5lZWRzIHRvIGV4aXN0IHdpdGhpbiB0aGUgcHJvamVjdCBmb3Igbm9kZV9tb2R1bGVzIGxvb2t1cCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYWZlQ3JlYXRlUmVxdWlyZShtZXRhVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBOb2RlUmVxdWlyZSB7XG4gIHJldHVybiBjcmVhdGVSZXF1aXJlKG1ldGFVcmwgfHwgcHJvY2Vzcy5hcmd2WzFdIHx8IGAke3Byb2Nlc3MuY3dkKCl9L2luZGV4LmpzYCk7XG59XG4iXX0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1yZXF1aXJlLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2FmZS1yZXF1aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUEyQjtJQUMzRCxPQUFPLGFBQWEsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuXG4vKipcbiAqIEJ1aWxkIGEgQ29tbW9uSlMgYHJlcXVpcmVgIGZvciBzeW5jaHJvbm91c2x5IGxvYWRpbmcgT1BUSU9OQUwgaW5zdGFsbGVkXG4gKiBwYWNrYWdlcyBmcm9tIEVTTSBjb2RlIChlLmcuIHByb20tY2xpZW50LCBAb3BlbnRlbGVtZXRyeS9hcGksIGlvcmVkaXMgYmVoaW5kXG4gKiBhIHRyeS9jYXRjaCkuXG4gKlxuICogUGFzcyBgaW1wb3J0Lm1ldGEudXJsYC4gV2hlbiB0aGlzIEVTTSBzb3VyY2UgaXMgYnVuZGxlZCB0byBDSlMg4oCUIGFzIHRoZSBDREtcbiAqIExhbWJkYSBoYW5kbGVycyBhcmUg4oCUIGVzYnVpbGQgcmVwbGFjZXMgYGltcG9ydC5tZXRhYCB3aXRoIGB7fWAsIHNvIHRoZSB2YWx1ZVxuICogaXMgYHVuZGVmaW5lZGAgYW5kIGEgYmFyZSBgY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpYCB0aHJvd3MgYXQgbW9kdWxlXG4gKiBsb2FkIChcIlRoZSBhcmd1bWVudCAnZmlsZW5hbWUnIG11c3QgYmUgYSBmaWxlIFVSTOKApiBSZWNlaXZlZCB1bmRlZmluZWRcIikuIFdlXG4gKiBmYWxsIGJhY2sgdG8gdGhlIHByb2Nlc3MgZW50cnkgcGF0aCBzbyB0aGVyZSdzIGFsd2F5cyBhIHZhbGlkIHJlc29sdXRpb24gYmFzZVxuICogKHRoZSBiYXNlIG9ubHkgbmVlZHMgdG8gZXhpc3Qgd2l0aGluIHRoZSBwcm9qZWN0IGZvciBub2RlX21vZHVsZXMgbG9va3VwKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhZmVDcmVhdGVSZXF1aXJlKG1ldGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IE5vZGVSZXF1aXJlIHtcbiAgcmV0dXJuIGNyZWF0ZVJlcXVpcmUobWV0YVVybCB8fCBwcm9jZXNzLmFyZ3ZbMV0gfHwgYCR7cHJvY2Vzcy5jd2QoKX0vaW5kZXguanNgKTtcbn1cbiJdfQ==
@@ -570,4 +570,4 @@ export function isEncryptedBlob(value) {
570
570
  && typeof value.iv === 'string'
571
571
  && typeof value.ciphertext === 'string');
572
572
  }
573
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LWVuY3J5cHRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2VjcmV0LWVuY3J5cHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUE2QmpGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUNSLFNBQVMsQ0FBUztJQUVuQyxZQUFZLGlCQUEwQjtRQUNwQyxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO1FBQ25FLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsMEVBQTBFO1FBQzFFLHNEQUFzRDtRQUN0RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUMzRCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLENBQUMs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Q0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFjO0lBQzVDLE9BQU8sQ0FBRSxPQUFPLEtBQUssS0FBSyxRQUFRO1dBQzdCLEtBQUssS0FBSyxJQUFJO1dBQ2IsS0FBMkIsQ0FBQyxHQUFHLEtBQUssZ0JBQWdCO1dBQ3JELE9BQVEsS0FBMEIsQ0FBQyxFQUFFLEtBQUssUUFBUTtXQUNsRCxPQUFRLEtBQWtDLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FDdEUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBFbnZlbG9wZSBlbmNyeXB0aW9uIGZvciBvcmctc2NvcGVkIHNlY3JldCBjb2x1bW5zIChBSSBwcm92aWRlciBrZXlzLCBJZFBcbiAqIGNsaWVudCBzZWNyZXRzLCB3ZWJob29rIFVSTHMvc2VjcmV0cywgcmVnaXN0cnkgY3JlZGVudGlhbHMpLlxuICpcbiAqIENyeXB0b2dyYXBoeSDigJQgdGhlIHNhbWUgZm9yIGV2ZXJ5IHByb3ZpZGVyIGJlbG93OlxuICogLSBBRVMtMjU2LUdDTSAoYXV0aGVudGljYXRlZCBlbmNyeXB0aW9uKS5cbiAqIC0gUGVyLW9yZyBrZXkgdmlhIEhLREYtU0hBMjU2KG1hc3Rlciwgc2FsdD1vcmdJZCwgaW5mbz0nc2VjcmV0cy12MScpLCBzbyB0d29cbiAqICAgb3JncyBlbmNyeXB0aW5nIHRoZSBzYW1lIHBsYWludGV4dCBwcm9kdWNlIGRpZmZlcmVudCBjaXBoZXJ0ZXh0cyBhbmQgYVxuICogICBzdG9sZW4gZGF0YWJhc2UgY2Fubm90IHRlbGwgd2hpY2ggb3JncyBzaGFyZSBhIHNlY3JldCBieSBjb21wYXJpc29uLlxuICogLSAxMi1ieXRlIElWIHBlciBlbmNyeXB0aW9uIGZyb20gYGNyeXB0by5yYW5kb21CeXRlc2AuXG4gKiAtIDE2LWJ5dGUgR0NNIGF1dGggdGFnIGNvbmNhdGVuYXRlZCBvbnRvIHRoZSBjaXBoZXJ0ZXh0LlxuICpcbiAqIFdIRVJFIFRIRSBNQVNURVIgQ09NRVMgRlJPTSBpcyB0aGUgb25seSBheGlzIHRoYXQgdmFyaWVzLCBhbmQgYWxsIHRocmVlXG4gKiBwcm92aWRlcnMgYXJlIGltcGxlbWVudGVkIOKAlCBwaWNrIG9uZSBwZXIgZGVwbG95bWVudDpcbiAqXG4gKiB8IHByb3ZpZGVyICAgICAgICAgICAgICAgfCBtYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJsYXN0IHJhZGl1cyAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IGBFbnZLZXlQcm92aWRlcmAgICAgICAgfCBgU0VDUkVUX0VOQ1JZUFRJT05fS0VZYCwgcGxhaW50ZXh0ICB8IGV2ZXJ5IG9yZyAgICAgICAgICB8XG4gKiB8IGBLbXNLZXlQcm92aWRlcmAgICAgICAgfCBLTVMtd3JhcHBlZCwgdW53cmFwcGVkIG9uY2UgYXQgYm9vdCB8IGV2ZXJ5IG9yZyAgICAgICAgICB8XG4gKiB8IGBQZXJPcmdLbXNLZXlQcm92aWRlcmAgfCBvbmUgS01TLXdyYXBwZWQgbWFzdGVyIFBFUiBPUkcgICAgICB8IG9uZSBvcmcgICAgICAgICAgICB8XG4gKlxuICogYGluaXRTZWNyZXRFbmNyeXB0aW9uKClgIHNlbGVjdHMgYmV0d2VlbiB0aGUgZmlyc3QgdHdvIGZyb20gZW52IGFuZCB3YXJtcyB0aGVcbiAqIHJlc3VsdDsgcGxhdGZvcm0gbGF5ZXJzIGBQZXJPcmdLbXNLZXlQcm92aWRlcmAgb3ZlciBpdCAob3JncyB3aXRoIG5vIHBlci1vcmdcbiAqIENNSyBmYWxsIHRocm91Z2ggdG8gdGhlIGJhc2UgcHJvdmlkZXIpLCBzbyBhIGRlcGxveW1lbnQgY2FuIHJ1biBtaXhlZC1tb2RlLlxuICogQ2FsbCBpdCBvbmNlIGF0IHN0YXJ0dXAg4oCUIGJlZm9yZSB0aGF0LCB0aGUgbGF6eSBkZWZhdWx0IGlzIGBFbnZLZXlQcm92aWRlcmAsXG4gKiB3aGljaCBpcyBjb3JyZWN0IGZvciBkZXYgYW5kIHNlbGYtaG9zdGVkIGluc3RhbGxzIHdpdGggbm8gS01TLlxuICpcbiAqIEZhaWwtY2xvc2VkIHRocm91Z2hvdXQ6IGEgbWlzc2luZyBvciB3cm9uZy1sZW5ndGggbWFzdGVyIHRocm93cyByYXRoZXIgdGhhblxuICogcm91bmQtdHJpcHBpbmcgYSBzZWNyZXQgYXMgcGxhaW50ZXh0LCBhbmQgYW4gdW5yZXNvbHZlZCBwZXItb3JnIGNvbmZpZyB0aHJvd3NcbiAqIHJhdGhlciB0aGFuIGd1ZXNzaW5nIHRoZSBzaGFyZWQgbWFzdGVyLlxuICpcbiAqIFRoZSBvbi1kaXNrIHNoYXBlIChgeyBhbGcsIGl2LCBjaXBoZXJ0ZXh0LCBraWQ/IH1gKSBpcyBwcm92aWRlci1pbmRlcGVuZGVudDtcbiAqIGBraWRgIGNhcnJpZXMgdGhlIEtNUyBrZXkgaWQgZm9yIHRoZSBwcm92aWRlcnMgdGhhdCBoYXZlIG9uZSwgd2hpY2ggaXMgd2hhdFxuICogbGV0cyBgZGVjcnlwdFNlY3JldGAgcmVmdXNlIGEgYmxvYiB3cml0dGVuIHVuZGVyIGEgc2luY2Utcm90YXRlZCBDTUsgaW5zdGVhZFxuICogb2Ygc3VyZmFjaW5nIGFuIG9wYXF1ZSBhdXRoLXRhZyBmYWlsdXJlLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUNpcGhlcml2LCBjcmVhdGVEZWNpcGhlcml2LCBoa2RmU3luYywgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG4vKiogT24tZGlzayBzaGFwZSBvZiBhbiBlbmNyeXB0ZWQgc2VjcmV0LiBKU09OLXNlcmlhbGl6YWJsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5jcnlwdGVkQmxvYiB7XG4gIC8qKiBBbGdvcml0aG0gdGFnLiBCdW1wIG9uIGZvcm1hdCBjaGFuZ2Ugc28gYSBmdXR1cmUgbWlncmF0aW9uIGNhbiBkZXRlY3Qgb2xkIGJsb2JzLiAqL1xuICBhbGc6ICdhZXMtMjU2LWdjbS12MSc7XG4gIC8qKiBCYXNlNjQtZW5jb2RlZCAxMi1ieXRlIElWLiAqL1xuICBpdjogc3RyaW5nO1xuICAvKiogQmFzZTY0LWVuY29kZWQgY2lwaGVydGV4dCArIDE2LWJ5dGUgYXV0aGVudGljYXRpb24gdGFnIGNvbmNhdGVuYXRlZC4gKi9cbiAgY2lwaGVydGV4dDogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwga2V5IGlkICBwb3B1bGF0ZWQgYnkgS01TLWJhY2tlZCBwcm92aWRlcnMsIGlnbm9yZWQgYnkgdGhlIGVudiBwcm92aWRlci4gKi9cbiAga2lkPzogc3RyaW5nO1xufVxuXG4vKiogUGx1Z2dhYmxlIGtleSBzb3VyY2UuIEVudi1iYWNrZWQgYnkgZGVmYXVsdDsgS01TLWJhY2tlZCBhdmFpbGFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVByb3ZpZGVyIHtcbiAgLyoqIERlcml2ZSBhIDMyLWJ5dGUgc3ltbWV0cmljIGtleSBib3VuZCB0byBgb3JnSWRgLiAqL1xuICBkZXJpdmVLZXkob3JnSWQ6IHN0cmluZyk6IEJ1ZmZlcjtcbiAgLyoqIE9wdGlvbmFsIGFzeW5jIHZhcmlhbnQgZm9yIHByb3ZpZGVycyB0aGF0IG5lZWQgdG8gZG8gSS9PIChlLmcuXG4gICAqICBwZXItb3JnIEtNUyBsb29rdXAgdGhlIGZpcnN0IHRpbWUgYW4gb3JnIGlzIHNlZW4pLiBEZWZhdWx0XG4gICAqICBpbXBsZW1lbnRhdGlvbiBmb3J3YXJkcyB0byB0aGUgc3luYyBgZGVyaXZlS2V5YC4gKi9cbiAgZGVyaXZlS2V5QXN5bmM/KG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj47XG4gIC8qKiBPcHRpb25hbCBLTVMta2V5LWlkIHRoaXMgcHJvdmlkZXIgdXNlZCBmb3IgYG9yZ0lkYC4gRW1iZWRkZWQgaW4gdGhlXG4gICAqICBgRW5jcnlwdGVkQmxvYi5raWRgIGZpZWxkIG9uIHdyaXRlIHNvIGRlY3J5cHQgY2FuIHZlcmlmeSB0aGUgcmlnaHRcbiAgICogIEtNUyBDTUsgaXMgYmVpbmcgdXNlZCAoZGVmZW5zZSBhZ2FpbnN0IGFuIGF0dGFja2VyIHdobyBzd2FwcyBhIGJsb2JcbiAgICogIGJldHdlZW4gb3JncykuIERlZmF1bHQgcmV0dXJucyB1bmRlZmluZWQgKGVudiBwcm92aWRlcikuICovXG4gIGtpZEZvcj8ob3JnSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IHByb3ZpZGVyICBkZXJpdmVzIGEgcGVyLW9yZyBrZXkgZnJvbSBgU0VDUkVUX0VOQ1JZUFRJT05fS0VZYCB2aWFcbiAqIEhLREYtU0hBMjU2LiBTdWl0YWJsZSBmb3Igc2VsZi1ob3N0ZWQgLyBkZXYgd2hlcmUgb3BlcmF0b3JzIGRvbid0IGhhdmUgS01TLlxuICpcbiAqIEZhaWxzIGZhc3QgaWYgdGhlIGVudiBpcyBtaXNzaW5nIG9yIHRoZSBrZXkgaXMgdGhlIHdyb25nIGxlbmd0aCBzbyBtaXNjb25maWdcbiAqIHN1cmZhY2VzIGF0IGZpcnN0IHVzZSByYXRoZXIgdGhhbiBzaWxlbnRseSBmaW5nZXJwcmludGluZyBhbGwgd3JpdGVzIHdpdGhcbiAqIGEgZGVmYXVsdCB6ZXJvIGtleS5cbiAqL1xuZXhwb3J0IGNsYXNzIEVudktleVByb3ZpZGVyIGltcGxlbWVudHMgS2V5UHJvdmlkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IG1hc3RlcktleTogQnVmZmVyO1xuXG4gIGNvbnN0cnVjdG9yKG1hc3RlcktleU92ZXJyaWRlPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmF3ID0gbWFzdGVyS2V5T3ZlcnJpZGUgPz8gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS0VZO1xuICAgIGlmICghcmF3KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NFQ1JFVF9FTkNSWVBUSU9OX0tFWSBlbnYgaXMgcmVxdWlyZWQgZm9yIHNlY3JldCBlbmNyeXB0aW9uJyk7XG4gICAgfVxuICAgIC8vIEFjY2VwdCBlaXRoZXIgaGV4ICg2NCBjaGFycykgb3IgYmFzZTY0ICg0NCBjaGFycyBpbmNsdWRpbmcgcGFkZGluZykgZm9yXG4gICAgLy8gb3BlcmF0b3IgY29udmVuaWVuY2UgIGJvdGggZGVjb2RlIHRvIGEgMzItYnl0ZSBrZXkuXG4gICAgY29uc3QgZGVjb2RlZCA9IHJhdy5sZW5ndGggPT09IDY0ICYmIC9eWzAtOWEtZl0rJC9pLnRlc3QocmF3KVxuICAgICAgPyBCdWZmZXIuZnJvbShyYXcsICdoZXgnKVxuICAgICAgOiBCdWZmZXIuZnJvbShyYXcsICdiYXNlNjQnKTtcbiAgICBpZiAoZGVjb2RlZC5sZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNFQ1JFVF9FTkNSWVBUSU9OX0tFWSBtdXN0IGRlY29kZSB0byAzMiBieXRlcyAoZ290ICR7ZGVjb2RlZC5sZW5ndGh9KWApO1xuICAgIH1cbiAgICB0aGlzLm1hc3RlcktleSA9IGRlY29kZWQ7XG4gIH1cblxuICBkZXJpdmVLZXkob3JnSWQ6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgLy8gSEtERiBiaW5kcyB0aGUgbWFzdGVyIGtleSB0byB0aGUgb3JnIHNvIHR3byBvcmdzIGVuY3J5cHRpbmcgdGhlIHNhbWVcbiAgICAvLyBwbGFpbnRleHQgcHJvZHVjZSBkaWZmZXJlbnQgY2lwaGVydGV4dHMgIGtlZXBzIGEgc3RvbGVuIERCIHVuYWJsZSB0b1xuICAgIC8vIHRlbGwgd2hpY2ggb3JncyBzaGFyZSBzZWNyZXRzIHZpYSBjaXBoZXJ0ZXh0IGNvbXBhcmlzb24uXG4gICAgY29uc3QgZGVyaXZlZCA9IGhrZGZTeW5jKCAnc2hhMjU2JyxcbiAgICAgIHRoaXMubWFzdGVyS2V5LFxuICAgICAgQnVmZmVyLmZyb20ob3JnSWQsICd1dGY4JyksXG4gICAgICAnc2VjcmV0cy12MScsXG4gICAgICAzMixcbiAgICApO1xuICAgIC8vIGhrZGZTeW5jIHJldHVybnMgQXJyYXlCdWZmZXIgaW4gb2xkZXIgTm9kZSB0eXBpbmdzOyBub3JtYWxpemUgdG8gQnVmZmVyLlxuICAgIHJldHVybiBCdWZmZXIuZnJvbShkZXJpdmVkKTtcbiAgfVxufVxuXG4vKipcbiAqICBBV1MtS01TLWJhY2tlZCBLZXlQcm92aWRlci5cbiAqXG4gKiBUcmFkZS1vZmYgcGlja2VkOiBzdG9yZSBPTkUgbWFzdGVyIGtleSBlbmNyeXB0ZWQgdW5kZXIgYSBLTVMgQ01LOyBvblxuICogZmlyc3QgdXNlLCBjYWxsIGBrbXM6RGVjcnlwdGAgdG8gcmVjb3ZlciB0aGUgbWFzdGVyIGtleSBieXRlczsgSEtERi1cbiAqIGRlcml2ZSBwZXItb3JnIGZyb20gaXQgKHNhbWUgYXMgRW52S2V5UHJvdmlkZXIpLiBUaGUgcHJvY2VzcyB0aGVuIGhvbGRzXG4gKiB0aGUgcGxhaW50ZXh0IG1hc3RlciBrZXkgaW4gbWVtb3J5IHVudGlsIHJlc3RhcnQuXG4gKlxuICogUFJPUzogb25lIEtNUyBjYWxsIHBlciBwcm9jZXNzIGxpZmV0aW1lIChjaGVhcCwgbG93IHA5OSBpbXBhY3QpLFxuICogdGhlIGVuY3J5cHRlZC1tYXN0ZXIta2V5IGJsb2IgaXMgc2FmZSB0byBjb21taXQvbG9nL2NoZWNraW4sXG4gKiBLTVMgYXVkaXQgbG9nIHJlY29yZHMgd2hlbiB0aGUgbWFzdGVyIGlzIHJlY292ZXJlZC5cbiAqIENPTlM6IHByb2Nlc3MgbWVtb3J5IHN0aWxsIGhvbGRzIHRoZSBtYXN0ZXIga2V5ICBzYW1lIHBvc3R1cmUgYXNcbiAqIEVudktleVByb3ZpZGVyIG9uY2Ugd2FybWVkIHVwLiBGb3Igc3Ryb25nZXIgaXNvbGF0aW9uIGFuXG4gKiBvcGVyYXRvciBjYW4gbW92ZSB0byBwZXItcmVjb3JkIGVudmVsb3BlIGVuY3J5cHRpb24gKGNhbGxcbiAqIEdlbmVyYXRlRGF0YUtleSBvbiBldmVyeSB3cml0ZSk7IHRoYXQncyBhIGZvbGxvdy1vbi5cbiAqXG4gKiBPcGVyYXRvciBzZXR1cDpcbiAqICAgMS4gQ3JlYXRlIGEgS01TIENNSyB3aG9zZSBrZXkgcG9saWN5IGFsbG93cyB0aGUgc2VydmljZSByb2xlIGBrbXM6RGVjcnlwdGAuXG4gKiAgICAgIE9uIHRoZSBBV1MgdGFyZ2V0cyBgYmluL3NldHVwLnNoYCAvIGB0ZW1wbGF0ZS55YW1sYCBncmFudCB0aGF0IHRvIHRoZVxuICogICAgICBwbGF0Zm9ybSBhbmQgcGx1Z2luIHRhc2sgcm9sZXMgd2hlbiB0aGVzZSB2YXJzIGFyZSBzZXQuXG4gKiAgIDIuIEdlbmVyYXRlIGEgMzItYnl0ZSBtYXN0ZXI6ICBoZWFkIC1jIDMyIC9kZXYvdXJhbmRvbSB8IGJhc2U2NFxuICogICAzLiBXcmFwIGl0OiAgYXdzIGttcyBlbmNyeXB0IC0ta2V5LWlkIDxLRVlfSUQ+IC0tcGxhaW50ZXh0IDxiYXNlNjQtZnJvbS0yPiBcXFxuICogICAgICAgICAgICAgICAgICAtLW91dHB1dCB0ZXh0IC0tcXVlcnkgQ2lwaGVydGV4dEJsb2JcbiAqICAgNC4gU2V0IG9uIHRoZSBzZXJ2aWNlOlxuICogICAgICAgIFNFQ1JFVF9FTkNSWVBUSU9OX0tNU19LRVlfSUQ9PEtFWV9JRD4gICAgICAgIChhbGlhcy88bmFtZT4gb3Iga2V5IFVVSUQpXG4gKiAgICAgICAgU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFQ9PGJhc2U2NC1mcm9tLTM+XG4gKlxuICogTk8gTUFOVUFMIFdJUklORzogYGluaXRTZWNyZXRFbmNyeXB0aW9uKClgIHBpY2tzIHRoaXMgcHJvdmlkZXIgd2hlbmV2ZXIgYm90aFxuICogdmFycyBhcmUgc2V0IGFuZCB3YXJtcyBpdCBiZWZvcmUgdGhlIHNlcnZpY2UgYWNjZXB0cyB0cmFmZmljLiAoSXQgdXNlZCB0b1xuICogcmVxdWlyZSBhIGhhbmQtd3JpdHRlbiBgc2V0S2V5UHJvdmlkZXIobmV3IEttc0tleVByb3ZpZGVyKCkpYCB0aGF0IG5vIHNlcnZpY2VcbiAqIGV2ZXIgY2FsbGVkLCBzbyB0aGUgbW9kZSB3YXMgZG9jdW1lbnRlZCBidXQgdW5yZWFjaGFibGUuKVxuICpcbiAqIE1pZ3JhdGluZyBlbnYgLT4gS01TOiBzZXQgdGhlIHR3byB2YXJzIGFib3ZlIHRvIHRoZSBORVcgd3JhcHBlZCBtYXN0ZXIgYW5kXG4gKiBsZWF2ZSB0aGUgb2xkIHBsYWludGV4dCBtYXN0ZXIgaW4gYFNFQ1JFVF9FTkNSWVBUSU9OX0tFWV9QUkVWSU9VU2AuIFJlYWRzXG4gKiBmYWxsIGJhY2sgdG8gaXQgZm9yIGtpZC1sZXNzIGJsb2JzIHVudGlsIGByZWVuY3J5cHQtc2VjcmV0c2AgaGFzIHJld3JpdHRlblxuICogdGhlbTsgc2VlIGRvY3MvcnVuYm9va3Mvc2VjcmV0LXJvdGF0aW9uLm1kLlxuICpcbiAqIFRoZSBBV1MgU0RLIGlzIGltcG9ydGVkIGxhemlseSwgc28gaW5zdGFsbHMgdGhhdCBzdGF5IG9uIGBFbnZLZXlQcm92aWRlcmBcbiAqIG5ldmVyIHBheSBpdHMgY29sZC1zdGFydCBjb3N0LlxuICovXG4vKipcbiAqIEtNUy1kZWNyeXB0IGEgYmFzZTY0IGNpcGhlcnRleHQgaW50byBhIDMyLWJ5dGUga2V5LiBTaGFyZWQgYnkgYm90aCBLTVMga2V5XG4gKiBwcm92aWRlcnMgKHNpbmdsZS1tYXN0ZXIgKyBwZXItb3JnKS4gYEBhd3Mtc2RrL2NsaWVudC1rbXNgIGlzXG4gKiBkeW5hbWljYWxseSBpbXBvcnRlZCBzbyBFbnZLZXlQcm92aWRlci1vbmx5IGVudnMgbmV2ZXIgbG9hZCB0aGUgU0RLLlxuICovXG5hc3luYyBmdW5jdGlvbiBrbXNEZWNyeXB0MzIoa2V5SWQ6IHN0cmluZywgY2lwaGVydGV4dEI2NDogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIGVuZHBvaW50Pzogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgY29uc3QgeyBLTVNDbGllbnQsIERlY3J5cHRDb21tYW5kIH0gPSBhd2FpdCBpbXBvcnQoJ0Bhd3Mtc2RrL2NsaWVudC1rbXMnKTtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEtNU0NsaWVudCh7IHJlZ2lvbiwgLi4uKGVuZHBvaW50ID8geyBlbmRwb2ludCB9IDoge30pIH0pO1xuICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IERlY3J5cHRDb21tYW5kKHtcbiAgICBLZXlJZDoga2V5SWQsXG4gICAgQ2lwaGVydGV4dEJsb2I6IEJ1ZmZlci5mcm9tKGNpcGhlcnRleHRCNjQsICdiYXNlNjQnKSxcbiAgfSkpO1xuICBpZiAoIXJlc3AuUGxhaW50ZXh0KSB0aHJvdyBuZXcgRXJyb3IoYEtNUyBEZWNyeXB0IHJldHVybmVkIGFuIGVtcHR5IFBsYWludGV4dCBmb3Iga2V5ICR7a2V5SWR9YCk7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3AuUGxhaW50ZXh0KTtcbiAgaWYgKGJ1Zi5sZW5ndGggIT09IDMyKSB0aHJvdyBuZXcgRXJyb3IoYEtNUyBEZWNyeXB0IHJldHVybmVkICR7YnVmLmxlbmd0aH0tYnl0ZSBrZXkgZm9yICR7a2V5SWR9OyBleHBlY3RlZCAzMmApO1xuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgS21zS2V5UHJvdmlkZXIgaW1wbGVtZW50cyBLZXlQcm92aWRlciB7XG4gIHByaXZhdGUgbWFzdGVyS2V5Q2FjaGU6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGtleUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2lwaGVydGV4dEI2NDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludD86IHN0cmluZztcbiAgcHJpdmF0ZSBkZWNyeXB0SW5GbGlnaHQ6IFByb21pc2U8QnVmZmVyPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKG9wdHM/OiB7IGtleUlkPzogc3RyaW5nOyBjaXBoZXJ0ZXh0QmFzZTY0Pzogc3RyaW5nOyByZWdpb24/OiBzdHJpbmc7IGVuZHBvaW50Pzogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBrZXlJZCA9IG9wdHM/LmtleUlkID8/IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tNU19LRVlfSUQ7XG4gICAgY29uc3QgY2lwaGVydGV4dCA9IG9wdHM/LmNpcGhlcnRleHRCYXNlNjQgPz8gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFQ7XG4gICAgaWYgKCFrZXlJZCkgdGhyb3cgbmV3IEVycm9yKCdTRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEIGVudiBpcyByZXF1aXJlZCBmb3IgS21zS2V5UHJvdmlkZXInKTtcbiAgICBpZiAoIWNpcGhlcnRleHQpIHRocm93IG5ldyBFcnJvcignU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFQgZW52IGlzIHJlcXVpcmVkIGZvciBLbXNLZXlQcm92aWRlcicpO1xuICAgIHRoaXMua2V5SWQgPSBrZXlJZDtcbiAgICB0aGlzLmNpcGhlcnRleHRCNjQgPSBjaXBoZXJ0ZXh0O1xuICAgIHRoaXMucmVnaW9uID0gb3B0cz8ucmVnaW9uID8/IHByb2Nlc3MuZW52LkFXU19SRUdJT04gPz8gcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUkVHSU9OO1xuICAgIHRoaXMuZW5kcG9pbnQgPSBvcHRzPy5lbmRwb2ludCA/PyBwcm9jZXNzLmVudi5BV1NfS01TX0VORFBPSU5UO1xuICB9XG5cbiAgZGVyaXZlS2V5KG9yZ0lkOiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5tYXN0ZXJLZXlDYWNoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCAnS21zS2V5UHJvdmlkZXIgaXMgbm90IHdhcm1lZCB1cC4gQ2FsbCBgYXdhaXQgcHJvdmlkZXIud2FybXVwKClgIG9uY2UgYXQgc2VydmljZSBzdGFydHVwIGJlZm9yZSBhbnkgZW5jcnlwdC9kZWNyeXB0LicsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkZXJpdmVkID0gaGtkZlN5bmMoJ3NoYTI1NicsIHRoaXMubWFzdGVyS2V5Q2FjaGUsIEJ1ZmZlci5mcm9tKG9yZ0lkLCAndXRmOCcpLCAnc2VjcmV0cy12MScsIDMyKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGVyaXZlZCk7XG4gIH1cblxuICAvKipcbiAgICogRWFnZXJseSByZWNvdmVyIHRoZSBtYXN0ZXIga2V5IGZyb20gS01TIHNvIHN1YnNlcXVlbnQgYGRlcml2ZUtleWBcbiAgICogY2FsbHMgYXJlIHN5bmMuIElkZW1wb3RlbnQgIGNvbmN1cnJlbnQgY2FsbGVycyBzaGFyZSB0aGUgc2FtZSBpbi1cbiAgICogZmxpZ2h0IHByb21pc2Ugc28gd2UgZG9uJ3Qgc3Bhd24gbXVsdGlwbGUgS01TIERlY3J5cHQgcmVxdWVzdHMgYXRcbiAgICogYm9vdC4gVGhyb3dzIG9uIGFueSBLTVMgZmFpbHVyZTsgdGhlIGNhbGxlciAodHlwaWNhbGx5IHRoZSBzZXJ2aWNlJ3NcbiAgICogb25CZWZvcmVTdGFydCBob29rKSBkZWNpZGVzIHdoZXRoZXIgdG8gZmFsbCBiYWNrIHRvIGEgZGlmZmVyZW50XG4gICAqIHByb3ZpZGVyIG9yIGZhaWwtc3RhcnR1cC5cbiAgICovXG4gIGFzeW5jIHdhcm11cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5tYXN0ZXJLZXlDYWNoZSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5kZWNyeXB0SW5GbGlnaHQpIHtcbiAgICAgIHRoaXMuZGVjcnlwdEluRmxpZ2h0ID0gdGhpcy5mZXRjaEFuZERlY3J5cHQoKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubWFzdGVyS2V5Q2FjaGUgPSBhd2FpdCB0aGlzLmRlY3J5cHRJbkZsaWdodDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEEgdHJhbnNpZW50IEtNUyBmYWlsdXJlIG11c3Qgbm90IHBlcm1hbmVudGx5IHBvaXNvbiB0aGUgcHJvdmlkZXI6IGNsZWFyXG4gICAgICAvLyB0aGUgcmVqZWN0ZWQgaW4tZmxpZ2h0IHByb21pc2Ugc28gYSBsYXRlciB3YXJtdXAoKSByZXRyaWVzIGluc3RlYWQgb2ZcbiAgICAgIC8vIHJlLWF3YWl0aW5nIHRoZSBzYW1lIHJlamVjdGlvbiBmb3JldmVyIChtYXRjaGVzIFBlck9yZ0ttc0tleVByb3ZpZGVyKS5cbiAgICAgIHRoaXMuZGVjcnlwdEluRmxpZ2h0ID0gbnVsbDtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZldGNoQW5kRGVjcnlwdCgpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiBrbXNEZWNyeXB0MzIodGhpcy5rZXlJZCwgdGhpcy5jaXBoZXJ0ZXh0QjY0LCB0aGlzLnJlZ2lvbiwgdGhpcy5lbmRwb2ludCk7XG4gIH1cbn1cblxuLy8gTGF6eSBzaW5nbGV0b24gIG9wZXJhdG9yIGNvZGUgaW4gbG9uZy1saXZlZCBzZXJ2aWNlcyBwYXlzIHRoZSBlbnYtcGFyc2Vcbi8vIGNvc3Qgb25jZSwgYW5kIHRlc3RzIGNhbiBtaW50IHRoZWlyIG93biBwcm92aWRlciB3aXRoIGEgbGl0ZXJhbCBrZXkuXG5sZXQgZGVmYXVsdFByb3ZpZGVyOiBLZXlQcm92aWRlciB8IG51bGwgPSBudWxsO1xuZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3ZpZGVyKCk6IEtleVByb3ZpZGVyIHtcbiAgaWYgKCFkZWZhdWx0UHJvdmlkZXIpIGRlZmF1bHRQcm92aWRlciA9IG5ldyBFbnZLZXlQcm92aWRlcigpO1xuICByZXR1cm4gZGVmYXVsdFByb3ZpZGVyO1xufVxuXG4vKiogUmVhZCB0aGUgYWN0aXZlIGRlZmF1bHQgcHJvdmlkZXIuIEV4cG9zZWQgc28gc2VydmljZSBjb2RlIChlLmcuIGFuXG4gKiAgYWRtaW4gZW5kcG9pbnQgdGhhdCBqdXN0IHJvdGF0ZWQgYW4gb3JnJ3MgS01TIGNvbmZpZykgY2FuIGNhbGxcbiAqICBgcHJvdmlkZXIuZXZpY3Qob3JnSWQpYCBvbiB0aGUgbGl2ZSBwcm92aWRlciByYXRoZXIgdGhhbiByZWNvbnN0cnVjdGluZ1xuICogIG9uZS4gVHJpZ2dlcnMgbGF6eSBpbml0aWFsaXphdGlvbiBvbiBmaXJzdCBhY2Nlc3MsIHNhbWUgYXMgdGhlIGludGVybmFsXG4gKiAgY2FsbGVycyBiZWxvdy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0S2V5UHJvdmlkZXIoKTogS2V5UHJvdmlkZXIge1xuICByZXR1cm4gZ2V0RGVmYXVsdFByb3ZpZGVyKCk7XG59XG5cbi8qKlxuICogUm90YXRpb24gZmFsbGJhY2s6IGFuIGBFbnZLZXlQcm92aWRlcmAgb3ZlciBgU0VDUkVUX0VOQ1JZUFRJT05fS0VZX1BSRVZJT1VTYCxcbiAqIG9yIG51bGwgd2hlbiB0aGF0IGVudiBpcyB1bnNldC4gYHVuZGVmaW5lZGAgPSBub3QgeWV0IHJlc29sdmVkLiBXaGlsZSBhXG4gKiBtYXN0ZXIta2V5IHJvdGF0aW9uIGlzIGluIHByb2dyZXNzLCBgZGVjcnlwdFNlY3JldGAgcmV0cmllcyBhIGZhaWxlZCBkZWNyeXB0XG4gKiB1bmRlciB0aGlzIGtleSwgc28gcm93cyB3cml0dGVuIHVuZGVyIHRoZSBvbGQgbWFzdGVyIHN0YXkgcmVhZGFibGUgdW50aWwgdGhlXG4gKiByZS1lbmNyeXB0aW9uIHRvb2wgKHBsYXRmb3JtIGBzY3JpcHRzL3JlZW5jcnlwdC1zZWNyZXRzLmpzYCkgaGFzIHJld3JpdHRlblxuICogdGhlbSB1bmRlciB0aGUgbmV3IG9uZS4gRW5jcnlwdGlvbiBORVZFUiB1c2VzIGl0LlxuICovXG5sZXQgcHJldmlvdXNQcm92aWRlcjogS2V5UHJvdmlkZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0UHJldmlvdXNQcm92aWRlcigpOiBLZXlQcm92aWRlciB8IG51bGwge1xuICBpZiAocHJldmlvdXNQcm92aWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS0VZX1BSRVZJT1VTO1xuICAgIHByZXZpb3VzUHJvdmlkZXIgPSByYXcgPyBuZXcgRW52S2V5UHJvdmlkZXIocmF3KSA6IG51bGw7XG4gIH1cbiAgcmV0dXJuIHByZXZpb3VzUHJvdmlkZXI7XG59XG5cbi8qKlxuICogUmVzb2x2ZSAoYW5kIFdBUk0pIHRoZSByb3RhdGlvbiBmYWxsYmFjay5cbiAqXG4gKiBUd28gcm90YXRpb24gc2hhcGVzLCBhbmQgdGhlIG9yZGVyIG1hdHRlcnM6XG4gKiAgLSBLTVMgbWFzdGVyIHJvdGF0aW9uOiBgU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFRfUFJFVklPVVNgIGhvbGRzIHRoZVxuICogICAgb3V0Z29pbmcgbWFzdGVyIHdyYXBwZWQgdW5kZXIgYFNFQ1JFVF9FTkNSWVBUSU9OX0tNU19LRVlfSURfUFJFVklPVVNgIChvclxuICogICAgdGhlIGN1cnJlbnQgQ01LLCB3aGVuIG9ubHkgdGhlIG1hc3RlciBjaGFuZ2VkIGFuZCBub3QgdGhlIGtleSkuXG4gKiAgLSBNaWdyYXRpb24gRlJPTSB0aGUgZW52IG1hc3RlciBUTyBLTVM6IHRoZSBwcmltYXJ5IGlzIHRoZSBuZXcgS01TLXdyYXBwZWRcbiAqICAgIG1hc3RlciBhbmQgdGhlIG91dGdvaW5nIFBMQUlOVEVYVCBtYXN0ZXIgc3RheXMgaW5cbiAqICAgIGBTRUNSRVRfRU5DUllQVElPTl9LRVlfUFJFVklPVVNgLiBUaGF0IGlzIHdoeSB0aGUgZW52IGZvcm0gaXMgc3RpbGwgcmVhZFxuICogICAgd2hlbiBubyBLTVMgcHJldmlvdXMgaXMgY29uZmlndXJlZCwgcmF0aGVyIHRoYW4gYmVpbmcgbXV0dWFsbHkgZXhjbHVzaXZlLlxuICpcbiAqIFdhcm1lZCBoZXJlIGJlY2F1c2UgYGRlY3J5cHRTZWNyZXRgIHRha2VzIHRoZSBwcmV2aW91cyBwcm92aWRlciBhcyBhIFNZTkNcbiAqIGRlZmF1bHQgcGFyYW1ldGVyIOKAlCBhIGNvbGQgYEttc0tleVByb3ZpZGVyYCB3b3VsZCB0aHJvdyBvdXQgb2YgYGRlcml2ZUtleWBcbiAqIG9uIHRoZSByZXRyeSBwYXRoIGFuZCBtYXNrIHRoZSBvcmlnaW5hbCBkZWNyeXB0aW9uIGVycm9yLlxuICpcbiAqIENhbGxlZCBmcm9tIGBpbml0U2VjcmV0RW5jcnlwdGlvbigpYCBvbiBFVkVSWSBwYXRoLCBpbmNsdWRpbmcgdGhlIG9uZSB0aGF0XG4gKiBjb25maWd1cmVzIG5vIEtNUyBwcmltYXJ5OiB3aGljaCBtYXN0ZXIgaXMgb3V0Z29pbmcgaXMgaW5kZXBlbmRlbnQgb2Ygd2hpY2hcbiAqIG9uZSBpcyBjdXJyZW50LCBzbyBhbiBlbnYgcHJpbWFyeSB3aXRoIGEgS01TLXdyYXBwZWQgcHJldmlvdXMgaXMgYSB2YWxpZFxuICogcm90YXRpb24gc3RhdGUgYW5kIGhhcyB0byByZXNvbHZlIGhlcmUuIFdpdGhvdXQgYSBib290IGNhbGwgdGhpcyBmYWxscyBiYWNrXG4gKiB0byB0aGUgbGF6eSBgZ2V0UHJldmlvdXNQcm92aWRlcigpYCwgd2hpY2ggcmVhZHMgdGhlIHBsYWludGV4dCB2YXIgb25seS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdFByZXZpb3VzUHJvdmlkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHdyYXBwZWRQcmV2aW91cyA9IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tNU19DSVBIRVJURVhUX1BSRVZJT1VTO1xuICBjb25zdCBwcmV2aW91c0tleUlkID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0tFWV9JRF9QUkVWSU9VUyA/PyBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEO1xuICBpZiAod3JhcHBlZFByZXZpb3VzICYmIHByZXZpb3VzS2V5SWQpIHtcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBLbXNLZXlQcm92aWRlcih7IGtleUlkOiBwcmV2aW91c0tleUlkLCBjaXBoZXJ0ZXh0QmFzZTY0OiB3cmFwcGVkUHJldmlvdXMgfSk7XG4gICAgYXdhaXQgcHJvdmlkZXIud2FybXVwKCk7XG4gICAgcHJldmlvdXNQcm92aWRlciA9IHByb3ZpZGVyO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwbGFpbnRleHRQcmV2aW91cyA9IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tFWV9QUkVWSU9VUztcbiAgcHJldmlvdXNQcm92aWRlciA9IHBsYWludGV4dFByZXZpb3VzID8gbmV3IEVudktleVByb3ZpZGVyKHBsYWludGV4dFByZXZpb3VzKSA6IG51bGw7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgKG5vbi1wZXItb3JnKSBwcm92aWRlciB0aGlzIGVudmlyb25tZW50IGFza3MgZm9yOiB0aGUgS01TLXdyYXBwZWRcbiAqIG1hc3RlciB3aGVuIGJvdGggb2YgaXRzIHZhcnMgYXJlIHNldCwgb3RoZXJ3aXNlIHRoZSBwbGFpbnRleHQgZW52IG1hc3Rlci5cbiAqXG4gKiBDb25zdHJ1Y3RzIGVhZ2VybHksIHNvIGl0IHRocm93cyB3aGVuIHRoZSBlbnYgbWFzdGVyIGlzIHJlcXVpcmVkIGFuZCBtaXNzaW5nLlxuICogYGluaXRTZWNyZXRFbmNyeXB0aW9uKClgIGlzIHRoZSBib290IGVudHJ5IHBvaW50IGFuZCBkZWxpYmVyYXRlbHkgZG9lcyBOT1RcbiAqIGNhbGwgdGhpcyBmb3IgdGhlIGVudiBjYXNlOyB1c2UgaXQgb25seSB3aGVyZSBhbiBpbnN0YW5jZSBpcyBuZWVkZWQgcmlnaHRcbiAqIGF3YXkg4oCUIGUuZy4gdGhlIHBlci1vcmcgZmFsbGJhY2ssIHdoaWNoIGlzIGFscmVhZHkgcGFzdCB0aGF0IGNoZWNrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmFzZUtleVByb3ZpZGVyKCk6IEtleVByb3ZpZGVyIHtcbiAgY29uc3Qga2V5SWQgPSBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEO1xuICBjb25zdCBjaXBoZXJ0ZXh0ID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFQ7XG4gIHJldHVybiBrZXlJZCAmJiBjaXBoZXJ0ZXh0ID8gbmV3IEttc0tleVByb3ZpZGVyKHsga2V5SWQsIGNpcGhlcnRleHRCYXNlNjQ6IGNpcGhlcnRleHQgfSkgOiBuZXcgRW52S2V5UHJvdmlkZXIoKTtcbn1cblxuLyoqXG4gKiBTZWxlY3QsIFdBUk0gYW5kIGluc3RhbGwgdGhlIGJhc2Uga2V5IHByb3ZpZGVyLiBDYWxsIG9uY2UgYXQgc3RhcnR1cCwgYmVmb3JlXG4gKiB0aGUgc2VydmljZSBzZXJ2ZXMgdHJhZmZpYy5cbiAqXG4gKiBXYXJtaW5nIG1hdHRlcnM6IGBLbXNLZXlQcm92aWRlci5kZXJpdmVLZXlgIGlzIHN5bmNocm9ub3VzIGFuZCByZWZ1c2VzIHRvIHdvcmtcbiAqIGNvbGQsIHNvIHdpdGhvdXQgdGhpcyBldmVyeSBzZWNyZXQgcmVhZC93cml0ZSB3b3VsZCB0aHJvdyB1bnRpbCBzb21ldGhpbmdcbiAqIGhhcHBlbmVkIHRvIGNhbGwgYHdhcm11cCgpYC4gRG9pbmcgaXQgYXQgYm9vdCBhbHNvIHR1cm5zIGEgYmFkIENNSywgYSBiYWRcbiAqIHdyYXBwZWQgbWFzdGVyIG9yIGEgbWlzc2luZyBga21zOkRlY3J5cHRgIGdyYW50IGludG8gYSBzdGFydHVwIGZhaWx1cmUgcmF0aGVyXG4gKiB0aGFuIGEgNTAwIG9uIHRoZSBmaXJzdCByZXF1ZXN0IHRoYXQgdG91Y2hlcyBhIHNlY3JldC5cbiAqXG4gKiBSZXR1cm5zIHRoZSB3YXJtZWQgcHJvdmlkZXIgc28gYSBjYWxsZXIgY2FuIGxheWVyIGBQZXJPcmdLbXNLZXlQcm92aWRlcmAgb3ZlclxuICogaXQgd2l0aG91dCBjb25zdHJ1Y3RpbmcgKGFuZCByZS13YXJtaW5nKSBhIHNlY29uZCBvbmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0U2VjcmV0RW5jcnlwdGlvbigpOiBQcm9taXNlPHsgcHJvdmlkZXI6IEtleVByb3ZpZGVyIHwgbnVsbDsgbW9kZTogJ2VudicgfCAna21zJyB9PiB7XG4gIGNvbnN0IGtleUlkID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0tFWV9JRDtcbiAgY29uc3QgY2lwaGVydGV4dCA9IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tNU19DSVBIRVJURVhUO1xuXG4gIC8vIE5PIEtNUyBDT05GSUdVUkVEOiBkZWxpYmVyYXRlbHkgdG91Y2ggbm90aGluZyBhbmQgcmVwb3J0IGBudWxsYC5cbiAgLy9cbiAgLy8gYEVudktleVByb3ZpZGVyYCBuZWVkcyBubyB3YXJtaW5nLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGdhaW4gaGVyZSDigJQgYW5kXG4gIC8vIGNvbnN0cnVjdGluZyBvbmUgZWFnZXJseSB3b3VsZCBtYWtlIGBTRUNSRVRfRU5DUllQVElPTl9LRVlgIGEgaGFyZCBCT09UXG4gIC8vIHJlcXVpcmVtZW50IGZvciBldmVyeSBzZXJ2aWNlIHRoYXQgY2FsbHMgdGhpcywgaW5jbHVkaW5nIGRldiBhbmQgdGVzdCBydW5zXG4gIC8vIHRoYXQgbmV2ZXIgZW5jcnlwdCBhIHNlY3JldC4gVGhlIGxhenkgZGVmYXVsdCBzdGF5cyBleGFjdGx5IGFzIGl0IHdhczogdGhlXG4gIC8vIGZpcnN0IGBlbmNyeXB0U2VjcmV0YC9gZGVjcnlwdFNlY3JldGAgYnVpbGRzIGl0LCBhbmQgYSBtaXNzaW5nIG1hc3RlciB0aHJvd3NcbiAgLy8gdGhlcmUuIENhbGxlcnMgdGhhdCBuZWVkIGFuIGluc3RhbmNlICh0aGUgcGVyLW9yZyBmYWxsYmFjaykgY29uc3RydWN0IHRoZWlyXG4gIC8vIG93biBgRW52S2V5UHJvdmlkZXJgIHdoZW4gdGhpcyByZXR1cm5zIG51bGwuXG4gIC8vXG4gIC8vIFRoZSByb3RhdGlvbiBmYWxsYmFjayBpcyByZXNvbHZlZCBGSVJTVCwgYW5kIG9uIGJvdGggcGF0aHMuIEl0IHVzZWQgdG8gYmVcbiAgLy8gcmVzb2x2ZWQgb25seSBhZnRlciB0aGUgS01TIHByaW1hcnkgd2FzIGluc3RhbGxlZCwgYmVsb3cg4oCUIHNvIHdpdGggYW4gZW52XG4gIC8vIFBSSU1BUlkgdGhpcyBmdW5jdGlvbiByZXR1cm5lZCBoZXJlIGFuZCBgU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFRfXG4gIC8vIFBSRVZJT1VTYCB3YXMgbmV2ZXIgcmVhZCBhdCBhbGwuIFRoZSBsYXp5IGBnZXRQcmV2aW91c1Byb3ZpZGVyKClgIGtub3dzXG4gIC8vIG9ubHkgdGhlIHBsYWludGV4dCBlbnYgdmFyLCBzbyBhIEtNUy13cmFwcGVkIG91dGdvaW5nIG1hc3RlciB3YXMgc2lsZW50bHlcbiAgLy8gaWdub3JlZCBhbmQgZXZlcnkgcm93IHN0aWxsIHdyaXR0ZW4gdW5kZXIgaXQgZmFpbGVkIHRvIGRlY3J5cHQgd2l0aCBhblxuICAvLyBvcGFxdWUgYXV0aC10YWcgZXJyb3IuIGByZWVuY3J5cHQtc2VjcmV0c2AgY291bnRzIHRoYXQgc2FtZSB2YXIgYXNcbiAgLy8gYHByZXZpb3VzS2V5Q29uZmlndXJlZGAsIHNvIHRoZSB0b29sIHJlcG9ydGVkIGl0c2VsZiByZWFkeSB0byBydW4gYVxuICAvLyByb3RhdGlvbiB3aG9zZSByZWFkcyBjb3VsZCBub3Qgc3VjY2VlZC5cbiAgYXdhaXQgaW5pdFByZXZpb3VzUHJvdmlkZXIoKTtcblxuICBpZiAoIWtleUlkIHx8ICFjaXBoZXJ0ZXh0KSByZXR1cm4geyBwcm92aWRlcjogbnVsbCwgbW9kZTogJ2VudicgfTtcblxuICBjb25zdCBwcm92aWRlciA9IG5ldyBLbXNLZXlQcm92aWRlcih7IGtleUlkLCBjaXBoZXJ0ZXh0QmFzZTY0OiBjaXBoZXJ0ZXh0IH0pO1xuICBhd2FpdCBwcm92aWRlci53YXJtdXAoKTtcbiAgc2V0S2V5UHJvdmlkZXIocHJvdmlkZXIpO1xuICByZXR1cm4geyBwcm92aWRlciwgbW9kZTogJ2ttcycgfTtcbn1cblxuLyoqIFJlc2V0IHRoZSBjYWNoZWQgZGVmYXVsdCAoYW5kIHByZXZpb3VzKSBwcm92aWRlciAgZm9yIHRlc3RzIHRoYXQgbXV0YXRlIGBwcm9jZXNzLmVudmAuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXREZWZhdWx0S2V5UHJvdmlkZXIoKTogdm9pZCB7IGRlZmF1bHRQcm92aWRlciA9IG51bGw7IHByZXZpb3VzUHJvdmlkZXIgPSB1bmRlZmluZWQ7IH1cblxuLyoqIFJlcGxhY2UgdGhlIGRlZmF1bHQgcHJvdmlkZXIgIHNlcnZpY2VzIHRoYXQgb3B0IGludG8gS01TIGNhbGwgdGhpc1xuICogb25jZSBhdCBzdGFydHVwIHdpdGggYSB3YXJtZWQtdXAgYEttc0tleVByb3ZpZGVyYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRLZXlQcm92aWRlcihwcm92aWRlcjogS2V5UHJvdmlkZXIpOiB2b2lkIHsgZGVmYXVsdFByb3ZpZGVyID0gcHJvdmlkZXI7IH1cblxuLyoqIFBlci1vcmcgS01TIGNvbmZpZyB0aGUgb3BlcmF0b3Igc3VwcGxpZXMuIFRoZSBga2V5SWRgIGlkZW50aWZpZXMgdGhlXG4gKiAgS01TIENNSyB0byBjYWxsIERlY3J5cHQgb247IGBjaXBoZXJ0ZXh0QmFzZTY0YCBpcyB0aGUgd3JhcHBlZCAzMi1ieXRlXG4gKiAgbWFzdGVyIGdlbmVyYXRlZCBieSBgYXdzIGttcyBlbmNyeXB0YCBhZ2FpbnN0IHRoYXQga2V5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJPcmdLbXNDb25maWcge1xuICBrZXlJZDogc3RyaW5nO1xuICBjaXBoZXJ0ZXh0QmFzZTY0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXN5bmMgcmVzb2x2ZXIgdGhhdCBtYXBzIGFuIG9yZyBpZCB0byBpdHMgS01TIGNvbmZpZy4gUmV0dXJucyBgbnVsbGAgd2hlblxuICogdGhlIG9yZyBoYXMgbm8gcGVyLW9yZyBjb25maWcg4oCUIHRoZSBwcm92aWRlciB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlXG4gKiBgZmFsbGJhY2tgIHByb3ZpZGVyIHN1cHBsaWVkIGF0IGNvbnN0cnVjdGlvbiAodXN1YWxseSBhbiBFbnZLZXlQcm92aWRlclxuICogb3IgYSBkZWZhdWx0IEttc0tleVByb3ZpZGVyKS5cbiAqL1xuZXhwb3J0IHR5cGUgUGVyT3JnS21zUmVzb2x2ZXIgPSAob3JnSWQ6IHN0cmluZykgPT4gUHJvbWlzZTxQZXJPcmdLbXNDb25maWcgfCBudWxsPjtcblxuLyoqXG4gKiBQZXItb3JnIEtNUy1iYWNrZWQgS2V5UHJvdmlkZXIuIFRoZSBibGFzdCByYWRpdXMgb2YgYSBLTVMga2V5IGNvbXByb21pc2VcbiAqIGlzIG9uZSBvcmcgaW5zdGVhZCBvZiBldmVyeSBvcmcgdW5kZXIgYSBzaGFyZWQgbWFzdGVyLlxuICpcbiAqIEVhY2ggb3JnIGhhcyBpdHMgb3duIEtNUyBDTUsgKyBpdHMgb3duIHdyYXBwZWQgbWFzdGVyIChzdG9yZWQgaW4gTW9uZ29cbiAqIHZpYSB0aGUgb3BlcmF0b3IncyBzZXR1cCBzY3JpcHQpLiBPbiBmaXJzdCBlbmNyeXB0L2RlY3J5cHQgZm9yIGFuIG9yZyxcbiAqIHRoZSBwcm92aWRlcjpcbiAqICAgMS4gQ2FsbHMgdGhlIHJlc29sdmVyIHRvIGZldGNoIHRoZSBvcmcncyBLTVMgY29uZmlnLlxuICogICAyLiBDYWxscyBga21zOkRlY3J5cHRgIHRvIHJlY292ZXIgdGhlIDMyLWJ5dGUgbWFzdGVyLlxuICogICAzLiBDYWNoZXMgdGhlIHJlY292ZXJlZCBtYXN0ZXIgaW4tbWVtb3J5IGZvciB0aGUgcHJvY2VzcyBsaWZldGltZS5cbiAqICAgNC4gSEtERi1kZXJpdmVzIHBlci1jYWxsIGZyb20gdGhhdCBtYXN0ZXIgKyB0aGUgb3JnIGlkIHNhbHQuXG4gKlxuICogQmxvYnMgZW5jcnlwdGVkIGJ5IHRoaXMgcHJvdmlkZXIgY2FycnkgYGtpZCA9IDxrbXMta2V5LWlkPmAgc28gdGhlXG4gKiBkZWNyeXB0IHBhdGggZGV0ZWN0cyBhIHN0YWxlIGNvbmZpZyAob3BlcmF0b3Igcm90YXRlZCB0aGUga2V5IGJ1dFxuICogZXhpc3Rpbmcgcm93cyB3ZXJlbid0IHJlLWVuY3J5cHRlZCkgQkVGT1JFIEFFUy1HQ00gdGhyb3dzIGFuIG9wYXF1ZVxuICogYXV0aGVudGljYXRpb24tdGFnIGVycm9yLlxuICpcbiAqIE9yZ3Mgd2l0aG91dCBwZXItb3JnIGNvbmZpZyBmYWxsIHRocm91Z2ggdG8gdGhlIGBmYWxsYmFja2AgcHJvdmlkZXIg4oCUXG4gKiBtaXhlZC1tb2RlIGRlcGxveW1lbnRzIHdoZXJlIHNvbWUgb3JncyBoYXZlIEtNUyBpc29sYXRpb24gYW5kIG90aGVyc1xuICogc3RheSBvbiB0aGUgc2hhcmVkIG1hc3RlciBhcmUgZXhwbGljaXRseSBzdXBwb3J0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBQZXJPcmdLbXNLZXlQcm92aWRlciBpbXBsZW1lbnRzIEtleVByb3ZpZGVyIHtcbiAgLyoqIENhY2hlZCBwZXItb3JnIG1hc3RlciBrZXlzLCBrZXllZCBieSBvcmdJZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBtYXN0ZXJzID0gbmV3IE1hcDxzdHJpbmcsIHsga2V5OiBCdWZmZXI7IGtpZDogc3RyaW5nIH0+KCk7XG4gIC8qKiBSZXNvbHZlZCBwZXItb3JnIGNvbmZpZ3MgY2FjaGVkIGZvciB0aGUgcHJvY2VzcyBsaWZldGltZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdzID0gbmV3IE1hcDxzdHJpbmcsIFBlck9yZ0ttc0NvbmZpZz4oKTtcbiAgLyoqIEluLWZsaWdodCByZXNvbHZlciBwcm9taXNlcyBzbyBjb25jdXJyZW50IGZpcnN0LXRvdWNoIGNhbGxlcnMgc2hhcmUgb25lIEtNUyBEZWNyeXB0LlxuICAgKiAgUmVzb2x2ZXMgdG8gYG51bGxgIGZvciBvcmdzIHdpdGggbm8gcGVyLW9yZyBjb25maWcg4oCUIGNhbGxlciB0cmVhdHMgbnVsbCBhc1xuICAgKiAgXCJmYWxsIHRocm91Z2ggdG8gdGhlIGZhbGxiYWNrIHByb3ZpZGVyXCIsIHNhbWUgYXMgYSBjb2xkIGNhY2hlIG1pc3MuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5GbGlnaHQgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx7IGtleTogQnVmZmVyOyBraWQ6IHN0cmluZyB9IHwgbnVsbD4+KCk7XG4gIC8qKiBPcmdzIHRoZSByZXNvbHZlciBoYXMgUFJPVkVOIGhhdmUgbm8gcGVyLW9yZyBjb25maWcg4oCUIHRoZSBmYWxsYmFjayBwcm92aWRlclxuICAgKiAgaXMgdGhlIGNvcnJlY3QgYW5zd2VyIGZvciB0aGVzZSwgYW5kIGBkZXJpdmVLZXlgIG1heSBzZXJ2ZSB0aGVtXG4gICAqICBzeW5jaHJvbm91c2x5LiBEaXN0aW5jdCBmcm9tIFwibm90IHlldCByZXNvbHZlZFwiLCB3aGljaCBtdXN0IG5vdCBndWVzcy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlZE5vUGVyT3JnQ29uZmlnID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIC8qKiBQcm92aWRlciB1c2VkIGZvciBvcmdzIHRoYXQgaGF2ZSBubyBwZXItb3JnIGNvbmZpZy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBmYWxsYmFjazogS2V5UHJvdmlkZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZXI6IFBlck9yZ0ttc1Jlc29sdmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRzOiB7XG4gICAgcmVzb2x2ZXI6IFBlck9yZ0ttc1Jlc29sdmVyO1xuICAgIGZhbGxiYWNrOiBLZXlQcm92aWRlcjtcbiAgICByZWdpb24/OiBzdHJpbmc7XG4gICAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICB0aGlzLnJlc29sdmVyID0gb3B0cy5yZXNvbHZlcjtcbiAgICB0aGlzLmZhbGxiYWNrID0gb3B0cy5mYWxsYmFjaztcbiAgICB0aGlzLnJlZ2lvbiA9IG9wdHMucmVnaW9uID8/IHByb2Nlc3MuZW52LkFXU19SRUdJT04gPz8gcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUkVHSU9OO1xuICAgIHRoaXMuZW5kcG9pbnQgPSBvcHRzLmVuZHBvaW50ID8/IHByb2Nlc3MuZW52LkFXU19LTVNfRU5EUE9JTlQ7XG4gIH1cblxuICAvKipcbiAgICogU3luYyBkZXJpdmUuIE9ubHkgY29ycmVjdCBmb3IgYW4gb3JnIHdob3NlIGNvbmZpZyBoYXMgYWxyZWFkeSBiZWVuXG4gICAqIFJFU09MVkVEIOKAlCBlaXRoZXIgaXQgaGFzIGEgcGVyLW9yZyBtYXN0ZXIgKHVzZSBpdCkgb3IgaXQgcHJvdmFibHkgaGFzIG5vXG4gICAqIHBlci1vcmcgY29uZmlnICh0aGUgZmFsbGJhY2sgaXMgdGhlbiB0aGUgcmlnaHQgYW5zd2VyKS5cbiAgICpcbiAgICogRm9yIGFuIFVOUkVTT0xWRUQgb3JnIHRoaXMgVEhST1dTIHJhdGhlciB0aGFuIGd1ZXNzaW5nLiBGYWxsaW5nIHRocm91Z2ggdG9cbiAgICogdGhlIGZhbGxiYWNrIHdvdWxkIHNpbGVudGx5IGVuY3J5cHQgdGhhdCBvcmcncyBzZWNyZXRzIHVuZGVyIHRoZSBTSEFSRURcbiAgICogbWFzdGVyIGFuZCDigJQgYmVjYXVzZSBga2lkRm9yYCBhbHNvIHJldHVybnMgdW5kZWZpbmVkLCBzbyB0aGVcbiAgICogYm90aC1raWRzLXByZXNlbnQgbWlzbWF0Y2ggZ3VhcmQgY291bGQgbmV2ZXIgZmlyZSDigJQgbGVhdmUgdGhlbSBwZXJtYW5lbnRseVxuICAgKiB1bmRlY3J5cHRhYmxlIG9uY2UgdGhlIG9yZyB3YXJtZWQgKGBkZWNpcGhlci5maW5hbCgpYCB0aHJvd3MgYW4gb3BhcXVlXG4gICAqIGF1dGgtdGFnIGVycm9yIHdpdGggbm8gZGlhZ25vc3RpYykuIEZhaWxpbmcgbG91ZCBoZXJlIG1hdGNoZXNcbiAgICogYEttc0tleVByb3ZpZGVyLmRlcml2ZUtleWAsIHdoaWNoIHJlZnVzZXMgdG8gd29yayBjb2xkLlxuICAgKlxuICAgKiBgZW5jcnlwdFNlY3JldGAvYGRlY3J5cHRTZWNyZXRgIGFyZSBhc3luYyBhbmQgYXdhaXQgYGRlcml2ZUtleUFzeW5jYCwgc29cbiAgICogdGhleSByZXNvbHZlIHRoZSBvcmcgZmlyc3QgYW5kIG5ldmVyIGhpdCB0aGlzIHBhdGg7IGl0IGlzIHRoZSBiYWNrc3RvcCBmb3JcbiAgICogYSBjYWxsZXIgdGhhdCByZWFjaGVzIGZvciB0aGUgc3luYyBBUEkgZGlyZWN0bHkuXG4gICAqL1xuICBkZXJpdmVLZXkob3JnSWQ6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5tYXN0ZXJzLmdldChvcmdJZCk7XG4gICAgaWYgKCFjYWNoZWQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdmVkTm9QZXJPcmdDb25maWcuaGFzKG9yZ0lkKSkgcmV0dXJuIHRoaXMuZmFsbGJhY2suZGVyaXZlS2V5KG9yZ0lkKTtcbiAgICAgIHRocm93IG5ldyBFcnJvciggYFBlck9yZ0ttc0tleVByb3ZpZGVyIGhhcyBub3QgcmVzb2x2ZWQgb3JnICR7b3JnSWR9LiBgXG4gICAgICAgICsgJ0NhbGwgYGF3YWl0IHByb3ZpZGVyLmVuc3VyZVdhcm1lZChvcmdJZClgIChvciB1c2UgdGhlIGFzeW5jIGVuY3J5cHRTZWNyZXQvZGVjcnlwdFNlY3JldCkgJ1xuICAgICAgICArICdiZWZvcmUgZGVyaXZpbmcgYSBrZXkg4oCUIGd1ZXNzaW5nIHRoZSBzaGFyZWQgbWFzdGVyIHdvdWxkIHdyaXRlIHNlY3JldHMgdGhhdCBjYW5ub3QgYmUgZGVjcnlwdGVkIGxhdGVyLicsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkZXJpdmVkID0gaGtkZlN5bmMoJ3NoYTI1NicsIGNhY2hlZC5rZXksIEJ1ZmZlci5mcm9tKG9yZ0lkLCAndXRmOCcpLCAnc2VjcmV0cy12MScsIDMyKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGVyaXZlZCk7XG4gIH1cblxuICBhc3luYyBkZXJpdmVLZXlBc3luYyhvcmdJZDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVdhcm1lZChvcmdJZCk7XG4gICAgcmV0dXJuIHRoaXMuZGVyaXZlS2V5KG9yZ0lkKTtcbiAgfVxuXG4gIGtpZEZvcihvcmdJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLm1hc3RlcnMuZ2V0KG9yZ0lkKTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkLmtpZDtcbiAgICAvLyBPbmx5IHNwZWFrIGZvciBhbiBvcmcgd2hvc2UgY29uZmlnIGlzIHJlc29sdmVkOyBhbiB1bnJlc29sdmVkIG9yZyBoYXMgbm9cbiAgICAvLyBtZWFuaW5nZnVsIGtpZCwgYW5kIGNsYWltaW5nIG9uZSB3b3VsZCBkZWZlYXQgdGhlIG1pc21hdGNoIGd1YXJkLlxuICAgIGlmICh0aGlzLnJlc29sdmVkTm9QZXJPcmdDb25maWcuaGFzKG9yZ0lkKSkgcmV0dXJuIHRoaXMuZmFsbGJhY2sua2lkRm9yPy4ob3JnSWQpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgb3JnJ3MgS01TIGNvbmZpZywgY2FsbCBEZWNyeXB0LCBjYWNoZSB0aGUgbWFzdGVyLiBTdWJzZXF1ZW50XG4gICAqIGNhbGxzIGZvciB0aGUgc2FtZSBvcmcgYXJlIG5vLW9wcy4gQ29uY3VycmVudCBjYWxsZXJzIHNoYXJlIHRoZSBpbi1mbGlnaHRcbiAgICogRGVjcnlwdCBwcm9taXNlLlxuICAgKlxuICAgKiBSZXR1cm5zIHNpbGVudGx5IHdoZW4gdGhlIG9yZyBoYXMgbm8gcGVyLW9yZyBjb25maWcg4oCUIHRoZSBmYWxsYmFja1xuICAgKiBwcm92aWRlciBoYW5kbGVzIHRob3NlIG9yZ3MuXG4gICAqL1xuICBhc3luYyBlbnN1cmVXYXJtZWQob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm1hc3RlcnMuaGFzKG9yZ0lkKSkgcmV0dXJuO1xuICAgIC8vIEluc3RhbGwgdGhlIGluLWZsaWdodCBwcm9taXNlIFNZTkNIUk9OT1VTTFkgYmVmb3JlIHlpZWxkaW5nIHNvIGNvbmN1cnJlbnRcbiAgICAvLyBjYWxsZXJzIGZpbmQgaXQgb24gdGhlIHNlY29uZC1hbmQtbGF0ZXIgcGFzc2VzLiBBd2FpdGluZyB0aGUgcmVzb2x2ZXJcbiAgICAvLyBiZWZvcmUgcG9wdWxhdGluZyB0aGUgbWFwIGlzIHRoZSBidWcgdGhhdCBsZXRzIGEgUHJvbWlzZS5hbGwgb2YgM1xuICAgIC8vIGNhbGxlcnMgZmlyZSAzIEtNUyBEZWNyeXB0cy5cbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMuaW5GbGlnaHQuZ2V0KG9yZ0lkKTtcbiAgICBpZiAoIXByb21pc2UpIHtcbiAgICAgIHByb21pc2UgPSB0aGlzLnJlc29sdmVBbmREZWNyeXB0KG9yZ0lkKTtcbiAgICAgIHRoaXMuaW5GbGlnaHQuc2V0KG9yZ0lkLCBwcm9taXNlKTtcbiAgICAgIHZvaWQgcHJvbWlzZS5maW5hbGx5KCgpID0+IHsgaWYgKHRoaXMuaW5GbGlnaHQuZ2V0KG9yZ0lkKSA9PT0gcHJvbWlzZSkgdGhpcy5pbkZsaWdodC5kZWxldGUob3JnSWQpOyB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbWlzZTtcbiAgICBpZiAocmVzdWx0KSB0aGlzLm1hc3RlcnMuc2V0KG9yZ0lkLCByZXN1bHQpO1xuICAgIC8vIFJlbWVtYmVyIHRoZSBORUdBVElWRSBvdXRjb21lIHRvbywgc28gdGhlIHN5bmMgYGRlcml2ZUtleWAgY2FuIHRlbGxcbiAgICAvLyBcIm5vIHBlci1vcmcgY29uZmlnLCBmYWxsYmFjayBpcyBjb3JyZWN0XCIgZnJvbSBcIm5vdCByZXNvbHZlZCB5ZXRcIi5cbiAgICBlbHNlIHRoaXMucmVzb2x2ZWROb1Blck9yZ0NvbmZpZy5hZGQob3JnSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlQW5kRGVjcnlwdChvcmdJZDogc3RyaW5nKTogUHJvbWlzZTx7IGtleTogQnVmZmVyOyBraWQ6IHN0cmluZyB9IHwgbnVsbD4ge1xuICAgIGxldCBjZmcgPSB0aGlzLmNvbmZpZ3MuZ2V0KG9yZ0lkKTtcbiAgICBpZiAoIWNmZykge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCB0aGlzLnJlc29sdmVyKG9yZ0lkKTtcbiAgICAgIGlmICghcmVzb2x2ZWQpIHJldHVybiBudWxsOyAvLyBubyBwZXItb3JnIGNvbmZpZyDihpIgY2FsbGVyIHVzZXMgZmFsbGJhY2tcbiAgICAgIGNmZyA9IHJlc29sdmVkO1xuICAgICAgdGhpcy5jb25maWdzLnNldChvcmdJZCwgY2ZnKTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5mZXRjaEFuZERlY3J5cHQoY2ZnKTtcbiAgICByZXR1cm4geyBrZXksIGtpZDogY2ZnLmtleUlkIH07XG4gIH1cblxuICBwcml2YXRlIGZldGNoQW5kRGVjcnlwdChjZmc6IFBlck9yZ0ttc0NvbmZpZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgcmV0dXJuIGttc0RlY3J5cHQzMihjZmcua2V5SWQsIGNmZy5jaXBoZXJ0ZXh0QmFzZTY0LCB0aGlzLnJlZ2lvbiwgdGhpcy5lbmRwb2ludCk7XG4gIH1cblxuICAvKiogRXZpY3QgYSBjYWNoZWQgcGVyLW9yZyBtYXN0ZXIuIFVzZSBhZnRlciBhIGtleSByb3RhdGlvbiBzbyB0aGUgbmV4dFxuICAgKiAgdG91Y2ggcmUtZmV0Y2hlcyB0aGUgbmV3IHdyYXBwZWQgbWFzdGVyIGZyb20gdGhlIHJlc29sdmVyLiAqL1xuICBldmljdChvcmdJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tYXN0ZXJzLmRlbGV0ZShvcmdJZCk7XG4gICAgdGhpcy5jb25maWdzLmRlbGV0ZShvcmdJZCk7XG4gICAgLy8gQWxzbyBmb3JnZXQgYSBORUdBVElWRSByZXNvbHV0aW9uLCBvciBhbiBvcmcgdGhhdCBnYWlucyBhIHBlci1vcmcgY29uZmlnXG4gICAgLy8gYWZ0ZXIgYmVpbmcgcmVzb2x2ZWQgYXMgXCJubyBjb25maWdcIiB3b3VsZCBrZWVwIHVzaW5nIHRoZSBzaGFyZWQgbWFzdGVyLlxuICAgIHRoaXMucmVzb2x2ZWROb1Blck9yZ0NvbmZpZy5kZWxldGUob3JnSWQpO1xuICB9XG59XG5cbi8qKlxuICogRGVyaXZlIHRoZSBrZXkgZm9yIGBvcmdJZGAsIGdpdmluZyB0aGUgcHJvdmlkZXIgYSBjaGFuY2UgdG8gZG8gSS9PIGZpcnN0LlxuICpcbiAqIFRoaXMgaXMgd2h5IGBlbmNyeXB0U2VjcmV0YC9gZGVjcnlwdFNlY3JldGAgYXJlIGFzeW5jOiBgUGVyT3JnS21zS2V5UHJvdmlkZXJgXG4gKiBuZWVkcyBvbmUgS01TIERlY3J5cHQgdGhlIGZpcnN0IHRpbWUgaXQgc2VlcyBhbiBvcmcsIGFuZCBkZXJpdmluZ1xuICogc3luY2hyb25vdXNseSBiZWZvcmUgdGhhdCByZXNvbHZlcyB3b3VsZCBzaWxlbnRseSBmYWxsIGJhY2sgdG8gdGhlIHNoYXJlZFxuICogbWFzdGVyIGFuZCBwcm9kdWNlIHNlY3JldHMgdGhhdCBjYW5ub3QgYmUgZGVjcnlwdGVkIGFmdGVyd2FyZHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcml2ZUtleUZvcihwcm92aWRlcjogS2V5UHJvdmlkZXIsIG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICByZXR1cm4gcHJvdmlkZXIuZGVyaXZlS2V5QXN5bmMgPyBwcm92aWRlci5kZXJpdmVLZXlBc3luYyhvcmdJZCkgOiBwcm92aWRlci5kZXJpdmVLZXkob3JnSWQpO1xufVxuXG4vKipcbiAqIEVuY3J5cHQgYSBwbGFpbnRleHQgc3RyaW5nIGZvciBzdG9yYWdlLiBSZXR1cm5zIGFuIGBFbmNyeXB0ZWRCbG9iYCB0aGF0XG4gKiBjYW4gYmUgSlNPTi1zZXJpYWxpemVkIGludG8gdGhlIHVuZGVybHlpbmcgY29sdW1uIC8gTW9uZ28gZG9jdW1lbnQuXG4gKlxuICogRW1wdHkgc3RyaW5ncyByb3VuZC10cmlwIGFzIGBudWxsYCBzbyB0aGUgY2FsbGluZyBtb2RlbCBsYXllciBjYW4gdHJlYXRcbiAqIFwibm8gc2VjcmV0IHNldFwiIGlkZW50aWNhbGx5IHRvIFwiZmllbGQgYWJzZW50XCIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNyeXB0U2VjcmV0KCBwbGFpbnRleHQ6IHN0cmluZyxcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcHJvdmlkZXI6IEtleVByb3ZpZGVyID0gZ2V0RGVmYXVsdFByb3ZpZGVyKCksXG4pOiBQcm9taXNlPEVuY3J5cHRlZEJsb2I+IHtcbiAgaWYgKCFwbGFpbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZnVzaW5nIHRvIGVuY3J5cHQgZW1wdHkgc3RyaW5nOyBjYWxsZXIgc2hvdWxkIHN0b3JlIG51bGwgaW5zdGVhZCcpO1xuICB9XG4gIC8vIFJlc29sdmUgKGFuZCB3YXJtKSB0aGUgb3JnIEJFRk9SRSByZWFkaW5nIGBraWRGb3JgIGJlbG93LCBzbyBhIHBlci1vcmcgS01TXG4gIC8vIGJsb2IgaXMgYWx3YXlzIHN0YW1wZWQgd2l0aCB0aGUga2V5IGl0IHdhcyBhY3R1YWxseSBlbmNyeXB0ZWQgdW5kZXIuXG4gIGNvbnN0IGtleSA9IGF3YWl0IGRlcml2ZUtleUZvcihwcm92aWRlciwgb3JnSWQpO1xuICBjb25zdCBpdiA9IHJhbmRvbUJ5dGVzKDEyKTtcbiAgY29uc3QgY2lwaGVyID0gY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtZ2NtJywga2V5LCBpdik7XG4gIGNvbnN0IGVuYyA9IEJ1ZmZlci5jb25jYXQoW2NpcGhlci51cGRhdGUocGxhaW50ZXh0LCAndXRmOCcpLCBjaXBoZXIuZmluYWwoKV0pO1xuICBjb25zdCB0YWcgPSBjaXBoZXIuZ2V0QXV0aFRhZygpO1xuICAvLyBQZXJPcmdLbXNLZXlQcm92aWRlciB0YWdzIGJsb2JzIHdpdGggdGhlIEtNUyBrZXkgaWQgdXNlZCBzbyB0aGVcbiAgLy8gZGVjcnlwdCBwYXRoIGNhbiByZWZ1c2UgdG8gb3BlcmF0ZSBpZiB0aGUgb3BlcmF0b3IgbGF0ZXIgc3dhcHMgaW4gYVxuICAvLyBkaWZmZXJlbnQgcGVyLW9yZyBjb25maWcgKGEgbWlzY29uZmlndXJlZCBzd2FwIHNob3VsZG4ndCBzaWxlbnRseVxuICAvLyBhY2NlcHQgYSBzdGFsZSBibG9iIGl0IGNhbid0IHZlcmlmeSBhZ2FpbnN0IHRoZSByaWdodCBDTUspLlxuICBjb25zdCBraWQgPSBwcm92aWRlci5raWRGb3I/LihvcmdJZCk7XG4gIHJldHVybiB7XG4gICAgYWxnOiAnYWVzLTI1Ni1nY20tdjEnLFxuICAgIGl2OiBpdi50b1N0cmluZygnYmFzZTY0JyksXG4gICAgLy8gR0NNIHRhZyBNVVNUIHRyYXZlbCB3aXRoIHRoZSBjaXBoZXJ0ZXh0IG9yIGBkZWNyeXB0U2VjcmV0YCBjYW4ndFxuICAgIC8vIHZlcmlmeSBpbnRlZ3JpdHkgIGNvbmNhdGVuYXRlIHNvIHRoZSBvbi1kaXNrIHNoYXBlIGlzIG9uZSBmaWVsZC5cbiAgICBjaXBoZXJ0ZXh0OiBCdWZmZXIuY29uY2F0KFtlbmMsIHRhZ10pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAuLi4oa2lkICE9PSB1bmRlZmluZWQgPyB7IGtpZCB9IDoge30pLFxuICB9O1xufVxuXG4vKipcbiAqIERlY3J5cHQgYW4gYEVuY3J5cHRlZEJsb2JgIHdyaXR0ZW4gYnkgYGVuY3J5cHRTZWNyZXRgLiBUaHJvd3Mgb24gKiAtIHVua25vd24gYGFsZ2AgKGZvcmNlcyBhbiBleHBsaWNpdCBtaWdyYXRpb24gd2hlbiB0aGUgZm9ybWF0IGNoYW5nZXMpXG4gKiAtIHdyb25nIG9yZ0lkIChIS0RGIGJpbmRpbmcgbWlzbWF0Y2ggZmFpbHMgdGhlIGF1dGggdGFnKVxuICogLSB0YW1wZXJlZCBjaXBoZXJ0ZXh0IChHQ00gYXV0aCB0YWcgY2hlY2sgZmFpbHMpXG4gKlxuICogQ2FsbGVycyBoYW5kbGUgdGhlIHRocm93ICBtYXNraW5nIHRoZSBmYWlsdXJlIGFzIGBudWxsYCB3b3VsZCBoaWRlXG4gKiBzaWxlbnQgY29ycnVwdGlvbiAvIHdyb25nLW9yZyByZWFkcy5cbiAqXG4gKiBgcHJldmlvdXNgIChkZWZhdWx0OiBgU0VDUkVUX0VOQ1JZUFRJT05fS0VZX1BSRVZJT1VTYCwgd2hlbiBzZXQpIGlzIHRyaWVkXG4gKiBvbmx5IGFmdGVyIHRoZSBwcmltYXJ5IGtleSBmYWlscywgYW5kIG9ubHkgZm9yIGtpZC1sZXNzIGJsb2JzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVjcnlwdFNlY3JldCggYmxvYjogRW5jcnlwdGVkQmxvYixcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcHJvdmlkZXI6IEtleVByb3ZpZGVyID0gZ2V0RGVmYXVsdFByb3ZpZGVyKCksXG4gIHByZXZpb3VzOiBLZXlQcm92aWRlciB8IG51bGwgPSBnZXRQcmV2aW91c1Byb3ZpZGVyKCksXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoYmxvYi5hbGcgIT09ICdhZXMtMjU2LWdjbS12MScpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGVuY3J5cHRpb24gYWxnOiAke2Jsb2IuYWxnfWApO1xuICB9XG4gIC8vIFdhcm0gZmlyc3Q6IGBraWRGb3JgIGFuZCBgZGVyaXZlS2V5YCBiZWxvdyBtdXN0IGJvdGggc3BlYWsgZm9yIHRoZSBvcmcnc1xuICAvLyByZWFsIGNvbmZpZywgb3IgdGhlIG1pc21hdGNoIGd1YXJkIHNpbGVudGx5IG5vLW9wcy5cbiAgY29uc3Qga2V5ID0gYXdhaXQgZGVyaXZlS2V5Rm9yKHByb3ZpZGVyLCBvcmdJZCk7XG4gIC8vIElmIGJvdGggdGhlIHByb3ZpZGVyIEFORCB0aGUgYmxvYiByZXBvcnQgYSBraWQsIHRoZXkgbXVzdCBtYXRjaC5cbiAgLy8gTWlzbWF0Y2ggdXN1YWxseSBtZWFucyBhbiBvcGVyYXRvciByb3RhdGVkL3JlcGxhY2VkIGFuIG9yZydzIEtNU1xuICAvLyBjb25maWcgYW5kIGlzIG5vdyByZWFkaW5nIGEgYmxvYiBlbmNyeXB0ZWQgdW5kZXIgdGhlIE9MRCBrZXkg4oCUXG4gIC8vIGZhaWxpbmcgbG91ZCBoZXJlIGJlYXRzIGxldHRpbmcgQUVTLUdDTSB0aHJvdyBhbiBvcGFxdWUgYXV0aC10YWcgZXJyb3IuXG4gIGNvbnN0IHByb3ZpZGVyS2lkID0gcHJvdmlkZXIua2lkRm9yPy4ob3JnSWQpO1xuICBpZiAocHJvdmlkZXJLaWQgIT09IHVuZGVmaW5lZCAmJiBibG9iLmtpZCAhPT0gdW5kZWZpbmVkICYmIHByb3ZpZGVyS2lkICE9PSBibG9iLmtpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgS01TIGtleSBpZCBtaXNtYXRjaDogYmxvYiB3YXMgZW5jcnlwdGVkIHVuZGVyICR7YmxvYi5raWR9LCBjdXJyZW50IHByb3ZpZGVyIHVzZXMgJHtwcm92aWRlcktpZH0gZm9yIG9yZyAke29yZ0lkfWApO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY3J5cHRXaXRoS2V5KGJsb2IsIGtleSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIE1hc3Rlci1rZXkgcm90YXRpb24gd2luZG93OiByZXRyeSB1bmRlciBTRUNSRVRfRU5DUllQVElPTl9LRVlfUFJFVklPVVMuXG4gICAgLy8gT25seSBmb3IgYSBraWQtbGVzcyBibG9iICh0aGUgZW52LWtleWVkIHNoYXBlKSDigJQgYSBwZXItb3JnIEtNUyBibG9iIGlzXG4gICAgLy8gYm91bmQgdG8gaXRzIENNSyBhbmQgdGhlIHNoYXJlZCBwcmV2aW91cyBtYXN0ZXIgY2FuIG5ldmVyIG9wZW4gaXQuIFRoZVxuICAgIC8vIE9SSUdJTkFMIGVycm9yIHN1cmZhY2VzIHdoZW4gdGhlIHByZXZpb3VzIGtleSBmYWlscyB0b28sIHNvIGEgdGFtcGVyZWQgb3JcbiAgICAvLyB3cm9uZy1vcmcgYmxvYiBzdGlsbCBmYWlscyBsb3VkIGV4YWN0bHkgYXMgYmVmb3JlLlxuICAgIGlmIChwcmV2aW91cyAmJiBibG9iLmtpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjcnlwdFdpdGhLZXkoYmxvYiwgYXdhaXQgZGVyaXZlS2V5Rm9yKHByZXZpb3VzLCBvcmdJZCkpO1xuICAgICAgfSBjYXRjaCB7IC8qIGZhbGwgdGhyb3VnaCB0byB0aGUgcHJpbWFyeSBlcnJvciAqLyB9XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKiogQUVTLTI1Ni1HQ00gb3BlbiBvZiBhIGJsb2IgdW5kZXIgb25lIGRlcml2ZWQga2V5LiBUaHJvd3Mgb24gYW55IGF1dGgtdGFnIGZhaWx1cmUuICovXG5mdW5jdGlvbiBkZWNyeXB0V2l0aEtleShibG9iOiBFbmNyeXB0ZWRCbG9iLCBrZXk6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGNvbnN0IGl2ID0gQnVmZmVyLmZyb20oYmxvYi5pdiwgJ2Jhc2U2NCcpO1xuICBjb25zdCBhbGwgPSBCdWZmZXIuZnJvbShibG9iLmNpcGhlcnRleHQsICdiYXNlNjQnKTtcbiAgLy8gU3BsaXQgb2ZmIHRoZSAxNi1ieXRlIGF1dGggdGFnIGFwcGVuZGVkIGluIGVuY3J5cHRTZWNyZXQuIEFueSB0YW1wZXJpbmdcbiAgLy8gIHRvIGVpdGhlciB0aGUgY2lwaGVydGV4dCBPUiB0aGUgdGFnICBjYXVzZXMgdGhlIG5leHQgYGZpbmFsKClgIHRvXG4gIC8vIHRocm93IHdpdGggXCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGFcIi5cbiAgY29uc3QgdGFnID0gYWxsLnN1YmFycmF5KGFsbC5sZW5ndGggLSAxNik7XG4gIGNvbnN0IGVuYyA9IGFsbC5zdWJhcnJheSgwLCBhbGwubGVuZ3RoIC0gMTYpO1xuICBjb25zdCBkZWNpcGhlciA9IGNyZWF0ZURlY2lwaGVyaXYoJ2Flcy0yNTYtZ2NtJywga2V5LCBpdik7XG4gIGRlY2lwaGVyLnNldEF1dGhUYWcodGFnKTtcbiAgY29uc3QgZGVjID0gQnVmZmVyLmNvbmNhdChbZGVjaXBoZXIudXBkYXRlKGVuYyksIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgcmV0dXJuIGRlYy50b1N0cmluZygndXRmOCcpO1xufVxuXG4vKipcbiAqIFNoYXBlIGd1YXJkIGZvciBhIHBhcnNlZCBgRW5jcnlwdGVkQmxvYmAuIENhbGxlcnMgaG9sZCBhIHZhbHVlIHRoYXQgd2FzIEpTT04tXG4gKiBkZWNvZGVkIGZyb20gYSBzZWNyZXQgY29sdW1uIGFuZCBtdXN0IG5vdCBoYW5kIGFueXRoaW5nIGVsc2UgdG9cbiAqIGBkZWNyeXB0U2VjcmV0YDsgdGhpcyBuYXJyb3dzIGl0IChvciB0aGUgY2FsbGVyIHJlamVjdHMgdGhlIHZhbHVlKS4gQ2xlYXIgdGV4dFxuICogaXMgTk9UIGEgc3VwcG9ydGVkIHN0b3JlZCBmb3JtIOKAlCB0aGUgb25seSBjb25zdW1lciB0aHJvd3Mgb24gYSBub24tYmxvYi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW5jcnlwdGVkQmxvYih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEVuY3J5cHRlZEJsb2Ige1xuICByZXR1cm4gKCB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgJiYgdmFsdWUgIT09IG51bGxcbiAgICAmJiAodmFsdWUgYXMgeyBhbGc/OiB1bmtub3duIH0pLmFsZyA9PT0gJ2Flcy0yNTYtZ2NtLXYxJ1xuICAgICYmIHR5cGVvZiAodmFsdWUgYXMgeyBpdj86IHVua25vd24gfSkuaXYgPT09ICdzdHJpbmcnXG4gICAgJiYgdHlwZW9mICh2YWx1ZSBhcyB7IGNpcGhlcnRleHQ/OiB1bmtub3duIH0pLmNpcGhlcnRleHQgPT09ICdzdHJpbmcnXG4gICk7XG59XG4iXX0=
573
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LWVuY3J5cHRpb24uanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zZWNyZXQtZW5jcnlwdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQTZCakY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBQ1IsU0FBUyxDQUFTO0lBRW5DLFlBQVksaUJBQTBCO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7UUFDbkUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCwwRUFBMEU7UUFDMUUsc0RBQXNEO1FBQ3RELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQzNELENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7WUFDekIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhO1FBQ3JCLHVFQUF1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QUFHLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWM7SUFDNUMsT0FBTyxDQUFFLE9BQU8sS0FBSyxLQUFLLFFBQVE7V0FDN0IsS0FBSyxLQUFLLElBQUk7V0FDYixLQUEyQixDQUFDLEdBQUcsS0FBSyxnQkFBZ0I7V0FDckQsT0FBUSxLQUEwQixDQUFDLEVBQUUsS0FBSyxRQUFRO1dBQ2xELE9BQVEsS0FBa0MsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUN0RSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIEVudmVsb3BlIGVuY3J5cHRpb24gZm9yIG9yZy1zY29wZWQgc2VjcmV0IGNvbHVtbnMgKEFJIHByb3ZpZGVyIGtleXMsIElkUFxuICogY2xpZW50IHNlY3JldHMsIHdlYmhvb2sgVVJMcy9zZWNyZXRzLCByZWdpc3RyeSBjcmVkZW50aWFscykuXG4gKlxuICogQ3J5cHRvZ3JhcGh5IOKAlCB0aGUgc2FtZSBmb3IgZXZlcnkgcHJvdmlkZXIgYmVsb3c6XG4gKiAtIEFFUy0yNTYtR0NNIChhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24pLlxuICogLSBQZXItb3JnIGtleSB2aWEgSEtERi1TSEEyNTYobWFzdGVyLCBzYWx0PW9yZ0lkLCBpbmZvPSdzZWNyZXRzLXYxJyksIHNvIHR3b1xuICogICBvcmdzIGVuY3J5cHRpbmcgdGhlIHNhbWUgcGxhaW50ZXh0IHByb2R1Y2UgZGlmZmVyZW50IGNpcGhlcnRleHRzIGFuZCBhXG4gKiAgIHN0b2xlbiBkYXRhYmFzZSBjYW5ub3QgdGVsbCB3aGljaCBvcmdzIHNoYXJlIGEgc2VjcmV0IGJ5IGNvbXBhcmlzb24uXG4gKiAtIDEyLWJ5dGUgSVYgcGVyIGVuY3J5cHRpb24gZnJvbSBgY3J5cHRvLnJhbmRvbUJ5dGVzYC5cbiAqIC0gMTYtYnl0ZSBHQ00gYXV0aCB0YWcgY29uY2F0ZW5hdGVkIG9udG8gdGhlIGNpcGhlcnRleHQuXG4gKlxuICogV0hFUkUgVEhFIE1BU1RFUiBDT01FUyBGUk9NIGlzIHRoZSBvbmx5IGF4aXMgdGhhdCB2YXJpZXMsIGFuZCBhbGwgdGhyZWVcbiAqIHByb3ZpZGVycyBhcmUgaW1wbGVtZW50ZWQg4oCUIHBpY2sgb25lIHBlciBkZXBsb3ltZW50OlxuICpcbiAqIHwgcHJvdmlkZXIgICAgICAgICAgICAgICB8IG1hc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmxhc3QgcmFkaXVzICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgYEVudktleVByb3ZpZGVyYCAgICAgICB8IGBTRUNSRVRfRU5DUllQVElPTl9LRVlgLCBwbGFpbnRleHQgIHwgZXZlcnkgb3JnICAgICAgICAgIHxcbiAqIHwgYEttc0tleVByb3ZpZGVyYCAgICAgICB8IEtNUy13cmFwcGVkLCB1bndyYXBwZWQgb25jZSBhdCBib290IHwgZXZlcnkgb3JnICAgICAgICAgIHxcbiAqIHwgYFBlck9yZ0ttc0tleVByb3ZpZGVyYCB8IG9uZSBLTVMtd3JhcHBlZCBtYXN0ZXIgUEVSIE9SRyAgICAgIHwgb25lIG9yZyAgICAgICAgICAgIHxcbiAqXG4gKiBgaW5pdFNlY3JldEVuY3J5cHRpb24oKWAgc2VsZWN0cyBiZXR3ZWVuIHRoZSBmaXJzdCB0d28gZnJvbSBlbnYgYW5kIHdhcm1zIHRoZVxuICogcmVzdWx0OyBwbGF0Zm9ybSBsYXllcnMgYFBlck9yZ0ttc0tleVByb3ZpZGVyYCBvdmVyIGl0IChvcmdzIHdpdGggbm8gcGVyLW9yZ1xuICogQ01LIGZhbGwgdGhyb3VnaCB0byB0aGUgYmFzZSBwcm92aWRlciksIHNvIGEgZGVwbG95bWVudCBjYW4gcnVuIG1peGVkLW1vZGUuXG4gKiBDYWxsIGl0IG9uY2UgYXQgc3RhcnR1cCDigJQgYmVmb3JlIHRoYXQsIHRoZSBsYXp5IGRlZmF1bHQgaXMgYEVudktleVByb3ZpZGVyYCxcbiAqIHdoaWNoIGlzIGNvcnJlY3QgZm9yIGRldiBhbmQgc2VsZi1ob3N0ZWQgaW5zdGFsbHMgd2l0aCBubyBLTVMuXG4gKlxuICogRmFpbC1jbG9zZWQgdGhyb3VnaG91dDogYSBtaXNzaW5nIG9yIHdyb25nLWxlbmd0aCBtYXN0ZXIgdGhyb3dzIHJhdGhlciB0aGFuXG4gKiByb3VuZC10cmlwcGluZyBhIHNlY3JldCBhcyBwbGFpbnRleHQsIGFuZCBhbiB1bnJlc29sdmVkIHBlci1vcmcgY29uZmlnIHRocm93c1xuICogcmF0aGVyIHRoYW4gZ3Vlc3NpbmcgdGhlIHNoYXJlZCBtYXN0ZXIuXG4gKlxuICogVGhlIG9uLWRpc2sgc2hhcGUgKGB7IGFsZywgaXYsIGNpcGhlcnRleHQsIGtpZD8gfWApIGlzIHByb3ZpZGVyLWluZGVwZW5kZW50O1xuICogYGtpZGAgY2FycmllcyB0aGUgS01TIGtleSBpZCBmb3IgdGhlIHByb3ZpZGVycyB0aGF0IGhhdmUgb25lLCB3aGljaCBpcyB3aGF0XG4gKiBsZXRzIGBkZWNyeXB0U2VjcmV0YCByZWZ1c2UgYSBibG9iIHdyaXR0ZW4gdW5kZXIgYSBzaW5jZS1yb3RhdGVkIENNSyBpbnN0ZWFkXG4gKiBvZiBzdXJmYWNpbmcgYW4gb3BhcXVlIGF1dGgtdGFnIGZhaWx1cmUuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlQ2lwaGVyaXYsIGNyZWF0ZURlY2lwaGVyaXYsIGhrZGZTeW5jLCByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5cbi8qKiBPbi1kaXNrIHNoYXBlIG9mIGFuIGVuY3J5cHRlZCBzZWNyZXQuIEpTT04tc2VyaWFsaXphYmxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmNyeXB0ZWRCbG9iIHtcbiAgLyoqIEFsZ29yaXRobSB0YWcuIEJ1bXAgb24gZm9ybWF0IGNoYW5nZSBzbyBhIGZ1dHVyZSBtaWdyYXRpb24gY2FuIGRldGVjdCBvbGQgYmxvYnMuICovXG4gIGFsZzogJ2Flcy0yNTYtZ2NtLXYxJztcbiAgLyoqIEJhc2U2NC1lbmNvZGVkIDEyLWJ5dGUgSVYuICovXG4gIGl2OiBzdHJpbmc7XG4gIC8qKiBCYXNlNjQtZW5jb2RlZCBjaXBoZXJ0ZXh0ICsgMTYtYnl0ZSBhdXRoZW50aWNhdGlvbiB0YWcgY29uY2F0ZW5hdGVkLiAqL1xuICBjaXBoZXJ0ZXh0OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBrZXkgaWQgIHBvcHVsYXRlZCBieSBLTVMtYmFja2VkIHByb3ZpZGVycywgaWdub3JlZCBieSB0aGUgZW52IHByb3ZpZGVyLiAqL1xuICBraWQ/OiBzdHJpbmc7XG59XG5cbi8qKiBQbHVnZ2FibGUga2V5IHNvdXJjZS4gRW52LWJhY2tlZCBieSBkZWZhdWx0OyBLTVMtYmFja2VkIGF2YWlsYWJsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5UHJvdmlkZXIge1xuICAvKiogRGVyaXZlIGEgMzItYnl0ZSBzeW1tZXRyaWMga2V5IGJvdW5kIHRvIGBvcmdJZGAuICovXG4gIGRlcml2ZUtleShvcmdJZDogc3RyaW5nKTogQnVmZmVyO1xuICAvKiogT3B0aW9uYWwgYXN5bmMgdmFyaWFudCBmb3IgcHJvdmlkZXJzIHRoYXQgbmVlZCB0byBkbyBJL08gKGUuZy5cbiAgICogIHBlci1vcmcgS01TIGxvb2t1cCB0aGUgZmlyc3QgdGltZSBhbiBvcmcgaXMgc2VlbikuIERlZmF1bHRcbiAgICogIGltcGxlbWVudGF0aW9uIGZvcndhcmRzIHRvIHRoZSBzeW5jIGBkZXJpdmVLZXlgLiAqL1xuICBkZXJpdmVLZXlBc3luYz8ob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPjtcbiAgLyoqIE9wdGlvbmFsIEtNUy1rZXktaWQgdGhpcyBwcm92aWRlciB1c2VkIGZvciBgb3JnSWRgLiBFbWJlZGRlZCBpbiB0aGVcbiAgICogIGBFbmNyeXB0ZWRCbG9iLmtpZGAgZmllbGQgb24gd3JpdGUgc28gZGVjcnlwdCBjYW4gdmVyaWZ5IHRoZSByaWdodFxuICAgKiAgS01TIENNSyBpcyBiZWluZyB1c2VkIChkZWZlbnNlIGFnYWluc3QgYW4gYXR0YWNrZXIgd2hvIHN3YXBzIGEgYmxvYlxuICAgKiAgYmV0d2VlbiBvcmdzKS4gRGVmYXVsdCByZXR1cm5zIHVuZGVmaW5lZCAoZW52IHByb3ZpZGVyKS4gKi9cbiAga2lkRm9yPyhvcmdJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERlZmF1bHQgcHJvdmlkZXIgIGRlcml2ZXMgYSBwZXItb3JnIGtleSBmcm9tIGBTRUNSRVRfRU5DUllQVElPTl9LRVlgIHZpYVxuICogSEtERi1TSEEyNTYuIFN1aXRhYmxlIGZvciBzZWxmLWhvc3RlZCAvIGRldiB3aGVyZSBvcGVyYXRvcnMgZG9uJ3QgaGF2ZSBLTVMuXG4gKlxuICogRmFpbHMgZmFzdCBpZiB0aGUgZW52IGlzIG1pc3Npbmcgb3IgdGhlIGtleSBpcyB0aGUgd3JvbmcgbGVuZ3RoIHNvIG1pc2NvbmZpZ1xuICogc3VyZmFjZXMgYXQgZmlyc3QgdXNlIHJhdGhlciB0aGFuIHNpbGVudGx5IGZpbmdlcnByaW50aW5nIGFsbCB3cml0ZXMgd2l0aFxuICogYSBkZWZhdWx0IHplcm8ga2V5LlxuICovXG5leHBvcnQgY2xhc3MgRW52S2V5UHJvdmlkZXIgaW1wbGVtZW50cyBLZXlQcm92aWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFzdGVyS2V5OiBCdWZmZXI7XG5cbiAgY29uc3RydWN0b3IobWFzdGVyS2V5T3ZlcnJpZGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByYXcgPSBtYXN0ZXJLZXlPdmVycmlkZSA/PyBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LRVk7XG4gICAgaWYgKCFyYXcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0VDUkVUX0VOQ1JZUFRJT05fS0VZIGVudiBpcyByZXF1aXJlZCBmb3Igc2VjcmV0IGVuY3J5cHRpb24nKTtcbiAgICB9XG4gICAgLy8gQWNjZXB0IGVpdGhlciBoZXggKDY0IGNoYXJzKSBvciBiYXNlNjQgKDQ0IGNoYXJzIGluY2x1ZGluZyBwYWRkaW5nKSBmb3JcbiAgICAvLyBvcGVyYXRvciBjb252ZW5pZW5jZSAgYm90aCBkZWNvZGUgdG8gYSAzMi1ieXRlIGtleS5cbiAgICBjb25zdCBkZWNvZGVkID0gcmF3Lmxlbmd0aCA9PT0gNjQgJiYgL15bMC05YS1mXSskL2kudGVzdChyYXcpXG4gICAgICA/IEJ1ZmZlci5mcm9tKHJhdywgJ2hleCcpXG4gICAgICA6IEJ1ZmZlci5mcm9tKHJhdywgJ2Jhc2U2NCcpO1xuICAgIGlmIChkZWNvZGVkLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU0VDUkVUX0VOQ1JZUFRJT05fS0VZIG11c3QgZGVjb2RlIHRvIDMyIGJ5dGVzIChnb3QgJHtkZWNvZGVkLmxlbmd0aH0pYCk7XG4gICAgfVxuICAgIHRoaXMubWFzdGVyS2V5ID0gZGVjb2RlZDtcbiAgfVxuXG4gIGRlcml2ZUtleShvcmdJZDogc3RyaW5nKTogQnVmZmVyIHtcbiAgICAvLyBIS0RGIGJpbmRzIHRoZSBtYXN0ZXIga2V5IHRvIHRoZSBvcmcgc28gdHdvIG9yZ3MgZW5jcnlwdGluZyB0aGUgc2FtZVxuICAgIC8vIHBsYWludGV4dCBwcm9kdWNlIGRpZmZlcmVudCBjaXBoZXJ0ZXh0cyAga2VlcHMgYSBzdG9sZW4gREIgdW5hYmxlIHRvXG4gICAgLy8gdGVsbCB3aGljaCBvcmdzIHNoYXJlIHNlY3JldHMgdmlhIGNpcGhlcnRleHQgY29tcGFyaXNvbi5cbiAgICBjb25zdCBkZXJpdmVkID0gaGtkZlN5bmMoICdzaGEyNTYnLFxuICAgICAgdGhpcy5tYXN0ZXJLZXksXG4gICAgICBCdWZmZXIuZnJvbShvcmdJZCwgJ3V0ZjgnKSxcbiAgICAgICdzZWNyZXRzLXYxJyxcbiAgICAgIDMyLFxuICAgICk7XG4gICAgLy8gaGtkZlN5bmMgcmV0dXJucyBBcnJheUJ1ZmZlciBpbiBvbGRlciBOb2RlIHR5cGluZ3M7IG5vcm1hbGl6ZSB0byBCdWZmZXIuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGRlcml2ZWQpO1xuICB9XG59XG5cbi8qKlxuICogIEFXUy1LTVMtYmFja2VkIEtleVByb3ZpZGVyLlxuICpcbiAqIFRyYWRlLW9mZiBwaWNrZWQ6IHN0b3JlIE9ORSBtYXN0ZXIga2V5IGVuY3J5cHRlZCB1bmRlciBhIEtNUyBDTUs7IG9uXG4gKiBmaXJzdCB1c2UsIGNhbGwgYGttczpEZWNyeXB0YCB0byByZWNvdmVyIHRoZSBtYXN0ZXIga2V5IGJ5dGVzOyBIS0RGLVxuICogZGVyaXZlIHBlci1vcmcgZnJvbSBpdCAoc2FtZSBhcyBFbnZLZXlQcm92aWRlcikuIFRoZSBwcm9jZXNzIHRoZW4gaG9sZHNcbiAqIHRoZSBwbGFpbnRleHQgbWFzdGVyIGtleSBpbiBtZW1vcnkgdW50aWwgcmVzdGFydC5cbiAqXG4gKiBQUk9TOiBvbmUgS01TIGNhbGwgcGVyIHByb2Nlc3MgbGlmZXRpbWUgKGNoZWFwLCBsb3cgcDk5IGltcGFjdCksXG4gKiB0aGUgZW5jcnlwdGVkLW1hc3Rlci1rZXkgYmxvYiBpcyBzYWZlIHRvIGNvbW1pdC9sb2cvY2hlY2tpbixcbiAqIEtNUyBhdWRpdCBsb2cgcmVjb3JkcyB3aGVuIHRoZSBtYXN0ZXIgaXMgcmVjb3ZlcmVkLlxuICogQ09OUzogcHJvY2VzcyBtZW1vcnkgc3RpbGwgaG9sZHMgdGhlIG1hc3RlciBrZXkgIHNhbWUgcG9zdHVyZSBhc1xuICogRW52S2V5UHJvdmlkZXIgb25jZSB3YXJtZWQgdXAuIEZvciBzdHJvbmdlciBpc29sYXRpb24gYW5cbiAqIG9wZXJhdG9yIGNhbiBtb3ZlIHRvIHBlci1yZWNvcmQgZW52ZWxvcGUgZW5jcnlwdGlvbiAoY2FsbFxuICogR2VuZXJhdGVEYXRhS2V5IG9uIGV2ZXJ5IHdyaXRlKTsgdGhhdCdzIGEgZm9sbG93LW9uLlxuICpcbiAqIE9wZXJhdG9yIHNldHVwOlxuICogICAxLiBDcmVhdGUgYSBLTVMgQ01LIHdob3NlIGtleSBwb2xpY3kgYWxsb3dzIHRoZSBzZXJ2aWNlIHJvbGUgYGttczpEZWNyeXB0YC5cbiAqICAgICAgT24gdGhlIEFXUyB0YXJnZXRzIGBiaW4vc2V0dXAuc2hgIC8gYHRlbXBsYXRlLnlhbWxgIGdyYW50IHRoYXQgdG8gdGhlXG4gKiAgICAgIHBsYXRmb3JtIGFuZCBwbHVnaW4gdGFzayByb2xlcyB3aGVuIHRoZXNlIHZhcnMgYXJlIHNldC5cbiAqICAgMi4gR2VuZXJhdGUgYSAzMi1ieXRlIG1hc3RlcjogIGhlYWQgLWMgMzIgL2Rldi91cmFuZG9tIHwgYmFzZTY0XG4gKiAgIDMuIFdyYXAgaXQ6ICBhd3Mga21zIGVuY3J5cHQgLS1rZXktaWQgPEtFWV9JRD4gLS1wbGFpbnRleHQgPGJhc2U2NC1mcm9tLTI+IFxcXG4gKiAgICAgICAgICAgICAgICAgIC0tb3V0cHV0IHRleHQgLS1xdWVyeSBDaXBoZXJ0ZXh0QmxvYlxuICogICA0LiBTZXQgb24gdGhlIHNlcnZpY2U6XG4gKiAgICAgICAgU0VDUkVUX0VOQ1JZUFRJT05fS01TX0tFWV9JRD08S0VZX0lEPiAgICAgICAgKGFsaWFzLzxuYW1lPiBvciBrZXkgVVVJRClcbiAqICAgICAgICBTRUNSRVRfRU5DUllQVElPTl9LTVNfQ0lQSEVSVEVYVD08YmFzZTY0LWZyb20tMz5cbiAqXG4gKiBOTyBNQU5VQUwgV0lSSU5HOiBgaW5pdFNlY3JldEVuY3J5cHRpb24oKWAgcGlja3MgdGhpcyBwcm92aWRlciB3aGVuZXZlciBib3RoXG4gKiB2YXJzIGFyZSBzZXQgYW5kIHdhcm1zIGl0IGJlZm9yZSB0aGUgc2VydmljZSBhY2NlcHRzIHRyYWZmaWMuIChJdCB1c2VkIHRvXG4gKiByZXF1aXJlIGEgaGFuZC13cml0dGVuIGBzZXRLZXlQcm92aWRlcihuZXcgS21zS2V5UHJvdmlkZXIoKSlgIHRoYXQgbm8gc2VydmljZVxuICogZXZlciBjYWxsZWQsIHNvIHRoZSBtb2RlIHdhcyBkb2N1bWVudGVkIGJ1dCB1bnJlYWNoYWJsZS4pXG4gKlxuICogTWlncmF0aW5nIGVudiAtPiBLTVM6IHNldCB0aGUgdHdvIHZhcnMgYWJvdmUgdG8gdGhlIE5FVyB3cmFwcGVkIG1hc3RlciBhbmRcbiAqIGxlYXZlIHRoZSBvbGQgcGxhaW50ZXh0IG1hc3RlciBpbiBgU0VDUkVUX0VOQ1JZUFRJT05fS0VZX1BSRVZJT1VTYC4gUmVhZHNcbiAqIGZhbGwgYmFjayB0byBpdCBmb3Iga2lkLWxlc3MgYmxvYnMgdW50aWwgYHJlZW5jcnlwdC1zZWNyZXRzYCBoYXMgcmV3cml0dGVuXG4gKiB0aGVtOyBzZWUgZG9jcy9ydW5ib29rcy9zZWNyZXQtcm90YXRpb24ubWQuXG4gKlxuICogVGhlIEFXUyBTREsgaXMgaW1wb3J0ZWQgbGF6aWx5LCBzbyBpbnN0YWxscyB0aGF0IHN0YXkgb24gYEVudktleVByb3ZpZGVyYFxuICogbmV2ZXIgcGF5IGl0cyBjb2xkLXN0YXJ0IGNvc3QuXG4gKi9cbi8qKlxuICogS01TLWRlY3J5cHQgYSBiYXNlNjQgY2lwaGVydGV4dCBpbnRvIGEgMzItYnl0ZSBrZXkuIFNoYXJlZCBieSBib3RoIEtNUyBrZXlcbiAqIHByb3ZpZGVycyAoc2luZ2xlLW1hc3RlciArIHBlci1vcmcpLiBgQGF3cy1zZGsvY2xpZW50LWttc2AgaXNcbiAqIGR5bmFtaWNhbGx5IGltcG9ydGVkIHNvIEVudktleVByb3ZpZGVyLW9ubHkgZW52cyBuZXZlciBsb2FkIHRoZSBTREsuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGttc0RlY3J5cHQzMihrZXlJZDogc3RyaW5nLCBjaXBoZXJ0ZXh0QjY0OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgZW5kcG9pbnQ/OiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBjb25zdCB7IEtNU0NsaWVudCwgRGVjcnlwdENvbW1hbmQgfSA9IGF3YWl0IGltcG9ydCgnQGF3cy1zZGsvY2xpZW50LWttcycpO1xuICBjb25zdCBjbGllbnQgPSBuZXcgS01TQ2xpZW50KHsgcmVnaW9uLCAuLi4oZW5kcG9pbnQgPyB7IGVuZHBvaW50IH0gOiB7fSkgfSk7XG4gIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgRGVjcnlwdENvbW1hbmQoe1xuICAgIEtleUlkOiBrZXlJZCxcbiAgICBDaXBoZXJ0ZXh0QmxvYjogQnVmZmVyLmZyb20oY2lwaGVydGV4dEI2NCwgJ2Jhc2U2NCcpLFxuICB9KSk7XG4gIGlmICghcmVzcC5QbGFpbnRleHQpIHRocm93IG5ldyBFcnJvcihgS01TIERlY3J5cHQgcmV0dXJuZWQgYW4gZW1wdHkgUGxhaW50ZXh0IGZvciBrZXkgJHtrZXlJZH1gKTtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20ocmVzcC5QbGFpbnRleHQpO1xuICBpZiAoYnVmLmxlbmd0aCAhPT0gMzIpIHRocm93IG5ldyBFcnJvcihgS01TIERlY3J5cHQgcmV0dXJuZWQgJHtidWYubGVuZ3RofS1ieXRlIGtleSBmb3IgJHtrZXlJZH07IGV4cGVjdGVkIDMyYCk7XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBjbGFzcyBLbXNLZXlQcm92aWRlciBpbXBsZW1lbnRzIEtleVByb3ZpZGVyIHtcbiAgcHJpdmF0ZSBtYXN0ZXJLZXlDYWNoZTogQnVmZmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkga2V5SWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjaXBoZXJ0ZXh0QjY0OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50Pzogc3RyaW5nO1xuICBwcml2YXRlIGRlY3J5cHRJbkZsaWdodDogUHJvbWlzZTxCdWZmZXI+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3Iob3B0cz86IHsga2V5SWQ/OiBzdHJpbmc7IGNpcGhlcnRleHRCYXNlNjQ/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZzsgZW5kcG9pbnQ/OiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IGtleUlkID0gb3B0cz8ua2V5SWQgPz8gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0tFWV9JRDtcbiAgICBjb25zdCBjaXBoZXJ0ZXh0ID0gb3B0cz8uY2lwaGVydGV4dEJhc2U2NCA/PyBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LTVNfQ0lQSEVSVEVYVDtcbiAgICBpZiAoIWtleUlkKSB0aHJvdyBuZXcgRXJyb3IoJ1NFQ1JFVF9FTkNSWVBUSU9OX0tNU19LRVlfSUQgZW52IGlzIHJlcXVpcmVkIGZvciBLbXNLZXlQcm92aWRlcicpO1xuICAgIGlmICghY2lwaGVydGV4dCkgdGhyb3cgbmV3IEVycm9yKCdTRUNSRVRfRU5DUllQVElPTl9LTVNfQ0lQSEVSVEVYVCBlbnYgaXMgcmVxdWlyZWQgZm9yIEttc0tleVByb3ZpZGVyJyk7XG4gICAgdGhpcy5rZXlJZCA9IGtleUlkO1xuICAgIHRoaXMuY2lwaGVydGV4dEI2NCA9IGNpcGhlcnRleHQ7XG4gICAgdGhpcy5yZWdpb24gPSBvcHRzPy5yZWdpb24gPz8gcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiA/PyBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT047XG4gICAgdGhpcy5lbmRwb2ludCA9IG9wdHM/LmVuZHBvaW50ID8/IHByb2Nlc3MuZW52LkFXU19LTVNfRU5EUE9JTlQ7XG4gIH1cblxuICBkZXJpdmVLZXkob3JnSWQ6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLm1hc3RlcktleUNhY2hlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoICdLbXNLZXlQcm92aWRlciBpcyBub3Qgd2FybWVkIHVwLiBDYWxsIGBhd2FpdCBwcm92aWRlci53YXJtdXAoKWAgb25jZSBhdCBzZXJ2aWNlIHN0YXJ0dXAgYmVmb3JlIGFueSBlbmNyeXB0L2RlY3J5cHQuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRlcml2ZWQgPSBoa2RmU3luYygnc2hhMjU2JywgdGhpcy5tYXN0ZXJLZXlDYWNoZSwgQnVmZmVyLmZyb20ob3JnSWQsICd1dGY4JyksICdzZWNyZXRzLXYxJywgMzIpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShkZXJpdmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFYWdlcmx5IHJlY292ZXIgdGhlIG1hc3RlciBrZXkgZnJvbSBLTVMgc28gc3Vic2VxdWVudCBgZGVyaXZlS2V5YFxuICAgKiBjYWxscyBhcmUgc3luYy4gSWRlbXBvdGVudCAgY29uY3VycmVudCBjYWxsZXJzIHNoYXJlIHRoZSBzYW1lIGluLVxuICAgKiBmbGlnaHQgcHJvbWlzZSBzbyB3ZSBkb24ndCBzcGF3biBtdWx0aXBsZSBLTVMgRGVjcnlwdCByZXF1ZXN0cyBhdFxuICAgKiBib290LiBUaHJvd3Mgb24gYW55IEtNUyBmYWlsdXJlOyB0aGUgY2FsbGVyICh0eXBpY2FsbHkgdGhlIHNlcnZpY2Unc1xuICAgKiBvbkJlZm9yZVN0YXJ0IGhvb2spIGRlY2lkZXMgd2hldGhlciB0byBmYWxsIGJhY2sgdG8gYSBkaWZmZXJlbnRcbiAgICogcHJvdmlkZXIgb3IgZmFpbC1zdGFydHVwLlxuICAgKi9cbiAgYXN5bmMgd2FybXVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm1hc3RlcktleUNhY2hlKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmRlY3J5cHRJbkZsaWdodCkge1xuICAgICAgdGhpcy5kZWNyeXB0SW5GbGlnaHQgPSB0aGlzLmZldGNoQW5kRGVjcnlwdCgpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5tYXN0ZXJLZXlDYWNoZSA9IGF3YWl0IHRoaXMuZGVjcnlwdEluRmxpZ2h0O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gQSB0cmFuc2llbnQgS01TIGZhaWx1cmUgbXVzdCBub3QgcGVybWFuZW50bHkgcG9pc29uIHRoZSBwcm92aWRlcjogY2xlYXJcbiAgICAgIC8vIHRoZSByZWplY3RlZCBpbi1mbGlnaHQgcHJvbWlzZSBzbyBhIGxhdGVyIHdhcm11cCgpIHJldHJpZXMgaW5zdGVhZCBvZlxuICAgICAgLy8gcmUtYXdhaXRpbmcgdGhlIHNhbWUgcmVqZWN0aW9uIGZvcmV2ZXIgKG1hdGNoZXMgUGVyT3JnS21zS2V5UHJvdmlkZXIpLlxuICAgICAgdGhpcy5kZWNyeXB0SW5GbGlnaHQgPSBudWxsO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hBbmREZWNyeXB0KCk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgcmV0dXJuIGttc0RlY3J5cHQzMih0aGlzLmtleUlkLCB0aGlzLmNpcGhlcnRleHRCNjQsIHRoaXMucmVnaW9uLCB0aGlzLmVuZHBvaW50KTtcbiAgfVxufVxuXG4vLyBMYXp5IHNpbmdsZXRvbiAgb3BlcmF0b3IgY29kZSBpbiBsb25nLWxpdmVkIHNlcnZpY2VzIHBheXMgdGhlIGVudi1wYXJzZVxuLy8gY29zdCBvbmNlLCBhbmQgdGVzdHMgY2FuIG1pbnQgdGhlaXIgb3duIHByb3ZpZGVyIHdpdGggYSBsaXRlcmFsIGtleS5cbmxldCBkZWZhdWx0UHJvdmlkZXI6IEtleVByb3ZpZGVyIHwgbnVsbCA9IG51bGw7XG5mdW5jdGlvbiBnZXREZWZhdWx0UHJvdmlkZXIoKTogS2V5UHJvdmlkZXIge1xuICBpZiAoIWRlZmF1bHRQcm92aWRlcikgZGVmYXVsdFByb3ZpZGVyID0gbmV3IEVudktleVByb3ZpZGVyKCk7XG4gIHJldHVybiBkZWZhdWx0UHJvdmlkZXI7XG59XG5cbi8qKiBSZWFkIHRoZSBhY3RpdmUgZGVmYXVsdCBwcm92aWRlci4gRXhwb3NlZCBzbyBzZXJ2aWNlIGNvZGUgKGUuZy4gYW5cbiAqICBhZG1pbiBlbmRwb2ludCB0aGF0IGp1c3Qgcm90YXRlZCBhbiBvcmcncyBLTVMgY29uZmlnKSBjYW4gY2FsbFxuICogIGBwcm92aWRlci5ldmljdChvcmdJZClgIG9uIHRoZSBsaXZlIHByb3ZpZGVyIHJhdGhlciB0aGFuIHJlY29uc3RydWN0aW5nXG4gKiAgb25lLiBUcmlnZ2VycyBsYXp5IGluaXRpYWxpemF0aW9uIG9uIGZpcnN0IGFjY2Vzcywgc2FtZSBhcyB0aGUgaW50ZXJuYWxcbiAqICBjYWxsZXJzIGJlbG93LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRLZXlQcm92aWRlcigpOiBLZXlQcm92aWRlciB7XG4gIHJldHVybiBnZXREZWZhdWx0UHJvdmlkZXIoKTtcbn1cblxuLyoqXG4gKiBSb3RhdGlvbiBmYWxsYmFjazogYW4gYEVudktleVByb3ZpZGVyYCBvdmVyIGBTRUNSRVRfRU5DUllQVElPTl9LRVlfUFJFVklPVVNgLFxuICogb3IgbnVsbCB3aGVuIHRoYXQgZW52IGlzIHVuc2V0LiBgdW5kZWZpbmVkYCA9IG5vdCB5ZXQgcmVzb2x2ZWQuIFdoaWxlIGFcbiAqIG1hc3Rlci1rZXkgcm90YXRpb24gaXMgaW4gcHJvZ3Jlc3MsIGBkZWNyeXB0U2VjcmV0YCByZXRyaWVzIGEgZmFpbGVkIGRlY3J5cHRcbiAqIHVuZGVyIHRoaXMga2V5LCBzbyByb3dzIHdyaXR0ZW4gdW5kZXIgdGhlIG9sZCBtYXN0ZXIgc3RheSByZWFkYWJsZSB1bnRpbCB0aGVcbiAqIHJlLWVuY3J5cHRpb24gdG9vbCAocGxhdGZvcm0gYHNjcmlwdHMvcmVlbmNyeXB0LXNlY3JldHMuanNgKSBoYXMgcmV3cml0dGVuXG4gKiB0aGVtIHVuZGVyIHRoZSBuZXcgb25lLiBFbmNyeXB0aW9uIE5FVkVSIHVzZXMgaXQuXG4gKi9cbmxldCBwcmV2aW91c1Byb3ZpZGVyOiBLZXlQcm92aWRlciB8IG51bGwgfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRQcmV2aW91c1Byb3ZpZGVyKCk6IEtleVByb3ZpZGVyIHwgbnVsbCB7XG4gIGlmIChwcmV2aW91c1Byb3ZpZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCByYXcgPSBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LRVlfUFJFVklPVVM7XG4gICAgcHJldmlvdXNQcm92aWRlciA9IHJhdyA/IG5ldyBFbnZLZXlQcm92aWRlcihyYXcpIDogbnVsbDtcbiAgfVxuICByZXR1cm4gcHJldmlvdXNQcm92aWRlcjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIChhbmQgV0FSTSkgdGhlIHJvdGF0aW9uIGZhbGxiYWNrLlxuICpcbiAqIFR3byByb3RhdGlvbiBzaGFwZXMsIGFuZCB0aGUgb3JkZXIgbWF0dGVyczpcbiAqICAtIEtNUyBtYXN0ZXIgcm90YXRpb246IGBTRUNSRVRfRU5DUllQVElPTl9LTVNfQ0lQSEVSVEVYVF9QUkVWSU9VU2AgaG9sZHMgdGhlXG4gKiAgICBvdXRnb2luZyBtYXN0ZXIgd3JhcHBlZCB1bmRlciBgU0VDUkVUX0VOQ1JZUFRJT05fS01TX0tFWV9JRF9QUkVWSU9VU2AgKG9yXG4gKiAgICB0aGUgY3VycmVudCBDTUssIHdoZW4gb25seSB0aGUgbWFzdGVyIGNoYW5nZWQgYW5kIG5vdCB0aGUga2V5KS5cbiAqICAtIE1pZ3JhdGlvbiBGUk9NIHRoZSBlbnYgbWFzdGVyIFRPIEtNUzogdGhlIHByaW1hcnkgaXMgdGhlIG5ldyBLTVMtd3JhcHBlZFxuICogICAgbWFzdGVyIGFuZCB0aGUgb3V0Z29pbmcgUExBSU5URVhUIG1hc3RlciBzdGF5cyBpblxuICogICAgYFNFQ1JFVF9FTkNSWVBUSU9OX0tFWV9QUkVWSU9VU2AuIFRoYXQgaXMgd2h5IHRoZSBlbnYgZm9ybSBpcyBzdGlsbCByZWFkXG4gKiAgICB3aGVuIG5vIEtNUyBwcmV2aW91cyBpcyBjb25maWd1cmVkLCByYXRoZXIgdGhhbiBiZWluZyBtdXR1YWxseSBleGNsdXNpdmUuXG4gKlxuICogV2FybWVkIGhlcmUgYmVjYXVzZSBgZGVjcnlwdFNlY3JldGAgdGFrZXMgdGhlIHByZXZpb3VzIHByb3ZpZGVyIGFzIGEgU1lOQ1xuICogZGVmYXVsdCBwYXJhbWV0ZXIg4oCUIGEgY29sZCBgS21zS2V5UHJvdmlkZXJgIHdvdWxkIHRocm93IG91dCBvZiBgZGVyaXZlS2V5YFxuICogb24gdGhlIHJldHJ5IHBhdGggYW5kIG1hc2sgdGhlIG9yaWdpbmFsIGRlY3J5cHRpb24gZXJyb3IuXG4gKlxuICogQ2FsbGVkIGZyb20gYGluaXRTZWNyZXRFbmNyeXB0aW9uKClgIG9uIEVWRVJZIHBhdGgsIGluY2x1ZGluZyB0aGUgb25lIHRoYXRcbiAqIGNvbmZpZ3VyZXMgbm8gS01TIHByaW1hcnk6IHdoaWNoIG1hc3RlciBpcyBvdXRnb2luZyBpcyBpbmRlcGVuZGVudCBvZiB3aGljaFxuICogb25lIGlzIGN1cnJlbnQsIHNvIGFuIGVudiBwcmltYXJ5IHdpdGggYSBLTVMtd3JhcHBlZCBwcmV2aW91cyBpcyBhIHZhbGlkXG4gKiByb3RhdGlvbiBzdGF0ZSBhbmQgaGFzIHRvIHJlc29sdmUgaGVyZS4gV2l0aG91dCBhIGJvb3QgY2FsbCB0aGlzIGZhbGxzIGJhY2tcbiAqIHRvIHRoZSBsYXp5IGBnZXRQcmV2aW91c1Byb3ZpZGVyKClgLCB3aGljaCByZWFkcyB0aGUgcGxhaW50ZXh0IHZhciBvbmx5LlxuICovXG5hc3luYyBmdW5jdGlvbiBpbml0UHJldmlvdXNQcm92aWRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgd3JhcHBlZFByZXZpb3VzID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFRfUFJFVklPVVM7XG4gIGNvbnN0IHByZXZpb3VzS2V5SWQgPSBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEX1BSRVZJT1VTID8/IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tNU19LRVlfSUQ7XG4gIGlmICh3cmFwcGVkUHJldmlvdXMgJiYgcHJldmlvdXNLZXlJZCkge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IEttc0tleVByb3ZpZGVyKHsga2V5SWQ6IHByZXZpb3VzS2V5SWQsIGNpcGhlcnRleHRCYXNlNjQ6IHdyYXBwZWRQcmV2aW91cyB9KTtcbiAgICBhd2FpdCBwcm92aWRlci53YXJtdXAoKTtcbiAgICBwcmV2aW91c1Byb3ZpZGVyID0gcHJvdmlkZXI7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBsYWludGV4dFByZXZpb3VzID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS0VZX1BSRVZJT1VTO1xuICBwcmV2aW91c1Byb3ZpZGVyID0gcGxhaW50ZXh0UHJldmlvdXMgPyBuZXcgRW52S2V5UHJvdmlkZXIocGxhaW50ZXh0UHJldmlvdXMpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSAobm9uLXBlci1vcmcpIHByb3ZpZGVyIHRoaXMgZW52aXJvbm1lbnQgYXNrcyBmb3I6IHRoZSBLTVMtd3JhcHBlZFxuICogbWFzdGVyIHdoZW4gYm90aCBvZiBpdHMgdmFycyBhcmUgc2V0LCBvdGhlcndpc2UgdGhlIHBsYWludGV4dCBlbnYgbWFzdGVyLlxuICpcbiAqIENvbnN0cnVjdHMgZWFnZXJseSwgc28gaXQgdGhyb3dzIHdoZW4gdGhlIGVudiBtYXN0ZXIgaXMgcmVxdWlyZWQgYW5kIG1pc3NpbmcuXG4gKiBgaW5pdFNlY3JldEVuY3J5cHRpb24oKWAgaXMgdGhlIGJvb3QgZW50cnkgcG9pbnQgYW5kIGRlbGliZXJhdGVseSBkb2VzIE5PVFxuICogY2FsbCB0aGlzIGZvciB0aGUgZW52IGNhc2U7IHVzZSBpdCBvbmx5IHdoZXJlIGFuIGluc3RhbmNlIGlzIG5lZWRlZCByaWdodFxuICogYXdheSDigJQgZS5nLiB0aGUgcGVyLW9yZyBmYWxsYmFjaywgd2hpY2ggaXMgYWxyZWFkeSBwYXN0IHRoYXQgY2hlY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCYXNlS2V5UHJvdmlkZXIoKTogS2V5UHJvdmlkZXIge1xuICBjb25zdCBrZXlJZCA9IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tNU19LRVlfSUQ7XG4gIGNvbnN0IGNpcGhlcnRleHQgPSBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LTVNfQ0lQSEVSVEVYVDtcbiAgcmV0dXJuIGtleUlkICYmIGNpcGhlcnRleHQgPyBuZXcgS21zS2V5UHJvdmlkZXIoeyBrZXlJZCwgY2lwaGVydGV4dEJhc2U2NDogY2lwaGVydGV4dCB9KSA6IG5ldyBFbnZLZXlQcm92aWRlcigpO1xufVxuXG4vKipcbiAqIFNlbGVjdCwgV0FSTSBhbmQgaW5zdGFsbCB0aGUgYmFzZSBrZXkgcHJvdmlkZXIuIENhbGwgb25jZSBhdCBzdGFydHVwLCBiZWZvcmVcbiAqIHRoZSBzZXJ2aWNlIHNlcnZlcyB0cmFmZmljLlxuICpcbiAqIFdhcm1pbmcgbWF0dGVyczogYEttc0tleVByb3ZpZGVyLmRlcml2ZUtleWAgaXMgc3luY2hyb25vdXMgYW5kIHJlZnVzZXMgdG8gd29ya1xuICogY29sZCwgc28gd2l0aG91dCB0aGlzIGV2ZXJ5IHNlY3JldCByZWFkL3dyaXRlIHdvdWxkIHRocm93IHVudGlsIHNvbWV0aGluZ1xuICogaGFwcGVuZWQgdG8gY2FsbCBgd2FybXVwKClgLiBEb2luZyBpdCBhdCBib290IGFsc28gdHVybnMgYSBiYWQgQ01LLCBhIGJhZFxuICogd3JhcHBlZCBtYXN0ZXIgb3IgYSBtaXNzaW5nIGBrbXM6RGVjcnlwdGAgZ3JhbnQgaW50byBhIHN0YXJ0dXAgZmFpbHVyZSByYXRoZXJcbiAqIHRoYW4gYSA1MDAgb24gdGhlIGZpcnN0IHJlcXVlc3QgdGhhdCB0b3VjaGVzIGEgc2VjcmV0LlxuICpcbiAqIFJldHVybnMgdGhlIHdhcm1lZCBwcm92aWRlciBzbyBhIGNhbGxlciBjYW4gbGF5ZXIgYFBlck9yZ0ttc0tleVByb3ZpZGVyYCBvdmVyXG4gKiBpdCB3aXRob3V0IGNvbnN0cnVjdGluZyAoYW5kIHJlLXdhcm1pbmcpIGEgc2Vjb25kIG9uZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRTZWNyZXRFbmNyeXB0aW9uKCk6IFByb21pc2U8eyBwcm92aWRlcjogS2V5UHJvdmlkZXIgfCBudWxsOyBtb2RlOiAnZW52JyB8ICdrbXMnIH0+IHtcbiAgY29uc3Qga2V5SWQgPSBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEO1xuICBjb25zdCBjaXBoZXJ0ZXh0ID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFQ7XG5cbiAgLy8gTk8gS01TIENPTkZJR1VSRUQ6IGRlbGliZXJhdGVseSB0b3VjaCBub3RoaW5nIGFuZCByZXBvcnQgYG51bGxgLlxuICAvL1xuICAvLyBgRW52S2V5UHJvdmlkZXJgIG5lZWRzIG5vIHdhcm1pbmcsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZ2FpbiBoZXJlIOKAlCBhbmRcbiAgLy8gY29uc3RydWN0aW5nIG9uZSBlYWdlcmx5IHdvdWxkIG1ha2UgYFNFQ1JFVF9FTkNSWVBUSU9OX0tFWWAgYSBoYXJkIEJPT1RcbiAgLy8gcmVxdWlyZW1lbnQgZm9yIGV2ZXJ5IHNlcnZpY2UgdGhhdCBjYWxscyB0aGlzLCBpbmNsdWRpbmcgZGV2IGFuZCB0ZXN0IHJ1bnNcbiAgLy8gdGhhdCBuZXZlciBlbmNyeXB0IGEgc2VjcmV0LiBUaGUgbGF6eSBkZWZhdWx0IHN0YXlzIGV4YWN0bHkgYXMgaXQgd2FzOiB0aGVcbiAgLy8gZmlyc3QgYGVuY3J5cHRTZWNyZXRgL2BkZWNyeXB0U2VjcmV0YCBidWlsZHMgaXQsIGFuZCBhIG1pc3NpbmcgbWFzdGVyIHRocm93c1xuICAvLyB0aGVyZS4gQ2FsbGVycyB0aGF0IG5lZWQgYW4gaW5zdGFuY2UgKHRoZSBwZXItb3JnIGZhbGxiYWNrKSBjb25zdHJ1Y3QgdGhlaXJcbiAgLy8gb3duIGBFbnZLZXlQcm92aWRlcmAgd2hlbiB0aGlzIHJldHVybnMgbnVsbC5cbiAgLy9cbiAgLy8gVGhlIHJvdGF0aW9uIGZhbGxiYWNrIGlzIHJlc29sdmVkIEZJUlNULCBhbmQgb24gYm90aCBwYXRocy4gSXQgdXNlZCB0byBiZVxuICAvLyByZXNvbHZlZCBvbmx5IGFmdGVyIHRoZSBLTVMgcHJpbWFyeSB3YXMgaW5zdGFsbGVkLCBiZWxvdyDigJQgc28gd2l0aCBhbiBlbnZcbiAgLy8gUFJJTUFSWSB0aGlzIGZ1bmN0aW9uIHJldHVybmVkIGhlcmUgYW5kIGBTRUNSRVRfRU5DUllQVElPTl9LTVNfQ0lQSEVSVEVYVF9cbiAgLy8gUFJFVklPVVNgIHdhcyBuZXZlciByZWFkIGF0IGFsbC4gVGhlIGxhenkgYGdldFByZXZpb3VzUHJvdmlkZXIoKWAga25vd3NcbiAgLy8gb25seSB0aGUgcGxhaW50ZXh0IGVudiB2YXIsIHNvIGEgS01TLXdyYXBwZWQgb3V0Z29pbmcgbWFzdGVyIHdhcyBzaWxlbnRseVxuICAvLyBpZ25vcmVkIGFuZCBldmVyeSByb3cgc3RpbGwgd3JpdHRlbiB1bmRlciBpdCBmYWlsZWQgdG8gZGVjcnlwdCB3aXRoIGFuXG4gIC8vIG9wYXF1ZSBhdXRoLXRhZyBlcnJvci4gYHJlZW5jcnlwdC1zZWNyZXRzYCBjb3VudHMgdGhhdCBzYW1lIHZhciBhc1xuICAvLyBgcHJldmlvdXNLZXlDb25maWd1cmVkYCwgc28gdGhlIHRvb2wgcmVwb3J0ZWQgaXRzZWxmIHJlYWR5IHRvIHJ1biBhXG4gIC8vIHJvdGF0aW9uIHdob3NlIHJlYWRzIGNvdWxkIG5vdCBzdWNjZWVkLlxuICBhd2FpdCBpbml0UHJldmlvdXNQcm92aWRlcigpO1xuXG4gIGlmICgha2V5SWQgfHwgIWNpcGhlcnRleHQpIHJldHVybiB7IHByb3ZpZGVyOiBudWxsLCBtb2RlOiAnZW52JyB9O1xuXG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IEttc0tleVByb3ZpZGVyKHsga2V5SWQsIGNpcGhlcnRleHRCYXNlNjQ6IGNpcGhlcnRleHQgfSk7XG4gIGF3YWl0IHByb3ZpZGVyLndhcm11cCgpO1xuICBzZXRLZXlQcm92aWRlcihwcm92aWRlcik7XG4gIHJldHVybiB7IHByb3ZpZGVyLCBtb2RlOiAna21zJyB9O1xufVxuXG4vKiogUmVzZXQgdGhlIGNhY2hlZCBkZWZhdWx0IChhbmQgcHJldmlvdXMpIHByb3ZpZGVyICBmb3IgdGVzdHMgdGhhdCBtdXRhdGUgYHByb2Nlc3MuZW52YC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldERlZmF1bHRLZXlQcm92aWRlcigpOiB2b2lkIHsgZGVmYXVsdFByb3ZpZGVyID0gbnVsbDsgcHJldmlvdXNQcm92aWRlciA9IHVuZGVmaW5lZDsgfVxuXG4vKiogUmVwbGFjZSB0aGUgZGVmYXVsdCBwcm92aWRlciAgc2VydmljZXMgdGhhdCBvcHQgaW50byBLTVMgY2FsbCB0aGlzXG4gKiBvbmNlIGF0IHN0YXJ0dXAgd2l0aCBhIHdhcm1lZC11cCBgS21zS2V5UHJvdmlkZXJgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEtleVByb3ZpZGVyKHByb3ZpZGVyOiBLZXlQcm92aWRlcik6IHZvaWQgeyBkZWZhdWx0UHJvdmlkZXIgPSBwcm92aWRlcjsgfVxuXG4vKiogUGVyLW9yZyBLTVMgY29uZmlnIHRoZSBvcGVyYXRvciBzdXBwbGllcy4gVGhlIGBrZXlJZGAgaWRlbnRpZmllcyB0aGVcbiAqICBLTVMgQ01LIHRvIGNhbGwgRGVjcnlwdCBvbjsgYGNpcGhlcnRleHRCYXNlNjRgIGlzIHRoZSB3cmFwcGVkIDMyLWJ5dGVcbiAqICBtYXN0ZXIgZ2VuZXJhdGVkIGJ5IGBhd3Mga21zIGVuY3J5cHRgIGFnYWluc3QgdGhhdCBrZXkuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlck9yZ0ttc0NvbmZpZyB7XG4gIGtleUlkOiBzdHJpbmc7XG4gIGNpcGhlcnRleHRCYXNlNjQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBc3luYyByZXNvbHZlciB0aGF0IG1hcHMgYW4gb3JnIGlkIHRvIGl0cyBLTVMgY29uZmlnLiBSZXR1cm5zIGBudWxsYCB3aGVuXG4gKiB0aGUgb3JnIGhhcyBubyBwZXItb3JnIGNvbmZpZyDigJQgdGhlIHByb3ZpZGVyIHRoZW4gZmFsbHMgYmFjayB0byB0aGVcbiAqIGBmYWxsYmFja2AgcHJvdmlkZXIgc3VwcGxpZWQgYXQgY29uc3RydWN0aW9uICh1c3VhbGx5IGFuIEVudktleVByb3ZpZGVyXG4gKiBvciBhIGRlZmF1bHQgS21zS2V5UHJvdmlkZXIpLlxuICovXG5leHBvcnQgdHlwZSBQZXJPcmdLbXNSZXNvbHZlciA9IChvcmdJZDogc3RyaW5nKSA9PiBQcm9taXNlPFBlck9yZ0ttc0NvbmZpZyB8IG51bGw+O1xuXG4vKipcbiAqIFBlci1vcmcgS01TLWJhY2tlZCBLZXlQcm92aWRlci4gVGhlIGJsYXN0IHJhZGl1cyBvZiBhIEtNUyBrZXkgY29tcHJvbWlzZVxuICogaXMgb25lIG9yZyBpbnN0ZWFkIG9mIGV2ZXJ5IG9yZyB1bmRlciBhIHNoYXJlZCBtYXN0ZXIuXG4gKlxuICogRWFjaCBvcmcgaGFzIGl0cyBvd24gS01TIENNSyArIGl0cyBvd24gd3JhcHBlZCBtYXN0ZXIgKHN0b3JlZCBpbiBNb25nb1xuICogdmlhIHRoZSBvcGVyYXRvcidzIHNldHVwIHNjcmlwdCkuIE9uIGZpcnN0IGVuY3J5cHQvZGVjcnlwdCBmb3IgYW4gb3JnLFxuICogdGhlIHByb3ZpZGVyOlxuICogICAxLiBDYWxscyB0aGUgcmVzb2x2ZXIgdG8gZmV0Y2ggdGhlIG9yZydzIEtNUyBjb25maWcuXG4gKiAgIDIuIENhbGxzIGBrbXM6RGVjcnlwdGAgdG8gcmVjb3ZlciB0aGUgMzItYnl0ZSBtYXN0ZXIuXG4gKiAgIDMuIENhY2hlcyB0aGUgcmVjb3ZlcmVkIG1hc3RlciBpbi1tZW1vcnkgZm9yIHRoZSBwcm9jZXNzIGxpZmV0aW1lLlxuICogICA0LiBIS0RGLWRlcml2ZXMgcGVyLWNhbGwgZnJvbSB0aGF0IG1hc3RlciArIHRoZSBvcmcgaWQgc2FsdC5cbiAqXG4gKiBCbG9icyBlbmNyeXB0ZWQgYnkgdGhpcyBwcm92aWRlciBjYXJyeSBga2lkID0gPGttcy1rZXktaWQ+YCBzbyB0aGVcbiAqIGRlY3J5cHQgcGF0aCBkZXRlY3RzIGEgc3RhbGUgY29uZmlnIChvcGVyYXRvciByb3RhdGVkIHRoZSBrZXkgYnV0XG4gKiBleGlzdGluZyByb3dzIHdlcmVuJ3QgcmUtZW5jcnlwdGVkKSBCRUZPUkUgQUVTLUdDTSB0aHJvd3MgYW4gb3BhcXVlXG4gKiBhdXRoZW50aWNhdGlvbi10YWcgZXJyb3IuXG4gKlxuICogT3JncyB3aXRob3V0IHBlci1vcmcgY29uZmlnIGZhbGwgdGhyb3VnaCB0byB0aGUgYGZhbGxiYWNrYCBwcm92aWRlciDigJRcbiAqIG1peGVkLW1vZGUgZGVwbG95bWVudHMgd2hlcmUgc29tZSBvcmdzIGhhdmUgS01TIGlzb2xhdGlvbiBhbmQgb3RoZXJzXG4gKiBzdGF5IG9uIHRoZSBzaGFyZWQgbWFzdGVyIGFyZSBleHBsaWNpdGx5IHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBlck9yZ0ttc0tleVByb3ZpZGVyIGltcGxlbWVudHMgS2V5UHJvdmlkZXIge1xuICAvKiogQ2FjaGVkIHBlci1vcmcgbWFzdGVyIGtleXMsIGtleWVkIGJ5IG9yZ0lkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG1hc3RlcnMgPSBuZXcgTWFwPHN0cmluZywgeyBrZXk6IEJ1ZmZlcjsga2lkOiBzdHJpbmcgfT4oKTtcbiAgLyoqIFJlc29sdmVkIHBlci1vcmcgY29uZmlncyBjYWNoZWQgZm9yIHRoZSBwcm9jZXNzIGxpZmV0aW1lLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ3MgPSBuZXcgTWFwPHN0cmluZywgUGVyT3JnS21zQ29uZmlnPigpO1xuICAvKiogSW4tZmxpZ2h0IHJlc29sdmVyIHByb21pc2VzIHNvIGNvbmN1cnJlbnQgZmlyc3QtdG91Y2ggY2FsbGVycyBzaGFyZSBvbmUgS01TIERlY3J5cHQuXG4gICAqICBSZXNvbHZlcyB0byBgbnVsbGAgZm9yIG9yZ3Mgd2l0aCBubyBwZXItb3JnIGNvbmZpZyDigJQgY2FsbGVyIHRyZWF0cyBudWxsIGFzXG4gICAqICBcImZhbGwgdGhyb3VnaCB0byB0aGUgZmFsbGJhY2sgcHJvdmlkZXJcIiwgc2FtZSBhcyBhIGNvbGQgY2FjaGUgbWlzcy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHsga2V5OiBCdWZmZXI7IGtpZDogc3RyaW5nIH0gfCBudWxsPj4oKTtcbiAgLyoqIE9yZ3MgdGhlIHJlc29sdmVyIGhhcyBQUk9WRU4gaGF2ZSBubyBwZXItb3JnIGNvbmZpZyDigJQgdGhlIGZhbGxiYWNrIHByb3ZpZGVyXG4gICAqICBpcyB0aGUgY29ycmVjdCBhbnN3ZXIgZm9yIHRoZXNlLCBhbmQgYGRlcml2ZUtleWAgbWF5IHNlcnZlIHRoZW1cbiAgICogIHN5bmNocm9ub3VzbHkuIERpc3RpbmN0IGZyb20gXCJub3QgeWV0IHJlc29sdmVkXCIsIHdoaWNoIG11c3Qgbm90IGd1ZXNzLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVkTm9QZXJPcmdDb25maWcgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgLyoqIFByb3ZpZGVyIHVzZWQgZm9yIG9yZ3MgdGhhdCBoYXZlIG5vIHBlci1vcmcgY29uZmlnLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZhbGxiYWNrOiBLZXlQcm92aWRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlcjogUGVyT3JnS21zUmVzb2x2ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdHM6IHtcbiAgICByZXNvbHZlcjogUGVyT3JnS21zUmVzb2x2ZXI7XG4gICAgZmFsbGJhY2s6IEtleVByb3ZpZGVyO1xuICAgIHJlZ2lvbj86IHN0cmluZztcbiAgICBlbmRwb2ludD86IHN0cmluZztcbiAgfSkge1xuICAgIHRoaXMucmVzb2x2ZXIgPSBvcHRzLnJlc29sdmVyO1xuICAgIHRoaXMuZmFsbGJhY2sgPSBvcHRzLmZhbGxiYWNrO1xuICAgIHRoaXMucmVnaW9uID0gb3B0cy5yZWdpb24gPz8gcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiA/PyBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT047XG4gICAgdGhpcy5lbmRwb2ludCA9IG9wdHMuZW5kcG9pbnQgPz8gcHJvY2Vzcy5lbnYuQVdTX0tNU19FTkRQT0lOVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIGRlcml2ZS4gT25seSBjb3JyZWN0IGZvciBhbiBvcmcgd2hvc2UgY29uZmlnIGhhcyBhbHJlYWR5IGJlZW5cbiAgICogUkVTT0xWRUQg4oCUIGVpdGhlciBpdCBoYXMgYSBwZXItb3JnIG1hc3RlciAodXNlIGl0KSBvciBpdCBwcm92YWJseSBoYXMgbm9cbiAgICogcGVyLW9yZyBjb25maWcgKHRoZSBmYWxsYmFjayBpcyB0aGVuIHRoZSByaWdodCBhbnN3ZXIpLlxuICAgKlxuICAgKiBGb3IgYW4gVU5SRVNPTFZFRCBvcmcgdGhpcyBUSFJPV1MgcmF0aGVyIHRoYW4gZ3Vlc3NpbmcuIEZhbGxpbmcgdGhyb3VnaCB0b1xuICAgKiB0aGUgZmFsbGJhY2sgd291bGQgc2lsZW50bHkgZW5jcnlwdCB0aGF0IG9yZydzIHNlY3JldHMgdW5kZXIgdGhlIFNIQVJFRFxuICAgKiBtYXN0ZXIgYW5kIOKAlCBiZWNhdXNlIGBraWRGb3JgIGFsc28gcmV0dXJucyB1bmRlZmluZWQsIHNvIHRoZVxuICAgKiBib3RoLWtpZHMtcHJlc2VudCBtaXNtYXRjaCBndWFyZCBjb3VsZCBuZXZlciBmaXJlIOKAlCBsZWF2ZSB0aGVtIHBlcm1hbmVudGx5XG4gICAqIHVuZGVjcnlwdGFibGUgb25jZSB0aGUgb3JnIHdhcm1lZCAoYGRlY2lwaGVyLmZpbmFsKClgIHRocm93cyBhbiBvcGFxdWVcbiAgICogYXV0aC10YWcgZXJyb3Igd2l0aCBubyBkaWFnbm9zdGljKS4gRmFpbGluZyBsb3VkIGhlcmUgbWF0Y2hlc1xuICAgKiBgS21zS2V5UHJvdmlkZXIuZGVyaXZlS2V5YCwgd2hpY2ggcmVmdXNlcyB0byB3b3JrIGNvbGQuXG4gICAqXG4gICAqIGBlbmNyeXB0U2VjcmV0YC9gZGVjcnlwdFNlY3JldGAgYXJlIGFzeW5jIGFuZCBhd2FpdCBgZGVyaXZlS2V5QXN5bmNgLCBzb1xuICAgKiB0aGV5IHJlc29sdmUgdGhlIG9yZyBmaXJzdCBhbmQgbmV2ZXIgaGl0IHRoaXMgcGF0aDsgaXQgaXMgdGhlIGJhY2tzdG9wIGZvclxuICAgKiBhIGNhbGxlciB0aGF0IHJlYWNoZXMgZm9yIHRoZSBzeW5jIEFQSSBkaXJlY3RseS5cbiAgICovXG4gIGRlcml2ZUtleShvcmdJZDogc3RyaW5nKTogQnVmZmVyIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLm1hc3RlcnMuZ2V0KG9yZ0lkKTtcbiAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgaWYgKHRoaXMucmVzb2x2ZWROb1Blck9yZ0NvbmZpZy5oYXMob3JnSWQpKSByZXR1cm4gdGhpcy5mYWxsYmFjay5kZXJpdmVLZXkob3JnSWQpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCBgUGVyT3JnS21zS2V5UHJvdmlkZXIgaGFzIG5vdCByZXNvbHZlZCBvcmcgJHtvcmdJZH0uIGBcbiAgICAgICAgKyAnQ2FsbCBgYXdhaXQgcHJvdmlkZXIuZW5zdXJlV2FybWVkKG9yZ0lkKWAgKG9yIHVzZSB0aGUgYXN5bmMgZW5jcnlwdFNlY3JldC9kZWNyeXB0U2VjcmV0KSAnXG4gICAgICAgICsgJ2JlZm9yZSBkZXJpdmluZyBhIGtleSDigJQgZ3Vlc3NpbmcgdGhlIHNoYXJlZCBtYXN0ZXIgd291bGQgd3JpdGUgc2VjcmV0cyB0aGF0IGNhbm5vdCBiZSBkZWNyeXB0ZWQgbGF0ZXIuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRlcml2ZWQgPSBoa2RmU3luYygnc2hhMjU2JywgY2FjaGVkLmtleSwgQnVmZmVyLmZyb20ob3JnSWQsICd1dGY4JyksICdzZWNyZXRzLXYxJywgMzIpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShkZXJpdmVkKTtcbiAgfVxuXG4gIGFzeW5jIGRlcml2ZUtleUFzeW5jKG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlV2FybWVkKG9yZ0lkKTtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmVLZXkob3JnSWQpO1xuICB9XG5cbiAga2lkRm9yKG9yZ0lkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMubWFzdGVycy5nZXQob3JnSWQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQua2lkO1xuICAgIC8vIE9ubHkgc3BlYWsgZm9yIGFuIG9yZyB3aG9zZSBjb25maWcgaXMgcmVzb2x2ZWQ7IGFuIHVucmVzb2x2ZWQgb3JnIGhhcyBub1xuICAgIC8vIG1lYW5pbmdmdWwga2lkLCBhbmQgY2xhaW1pbmcgb25lIHdvdWxkIGRlZmVhdCB0aGUgbWlzbWF0Y2ggZ3VhcmQuXG4gICAgaWYgKHRoaXMucmVzb2x2ZWROb1Blck9yZ0NvbmZpZy5oYXMob3JnSWQpKSByZXR1cm4gdGhpcy5mYWxsYmFjay5raWRGb3I/LihvcmdJZCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBvcmcncyBLTVMgY29uZmlnLCBjYWxsIERlY3J5cHQsIGNhY2hlIHRoZSBtYXN0ZXIuIFN1YnNlcXVlbnRcbiAgICogY2FsbHMgZm9yIHRoZSBzYW1lIG9yZyBhcmUgbm8tb3BzLiBDb25jdXJyZW50IGNhbGxlcnMgc2hhcmUgdGhlIGluLWZsaWdodFxuICAgKiBEZWNyeXB0IHByb21pc2UuXG4gICAqXG4gICAqIFJldHVybnMgc2lsZW50bHkgd2hlbiB0aGUgb3JnIGhhcyBubyBwZXItb3JnIGNvbmZpZyDigJQgdGhlIGZhbGxiYWNrXG4gICAqIHByb3ZpZGVyIGhhbmRsZXMgdGhvc2Ugb3Jncy5cbiAgICovXG4gIGFzeW5jIGVuc3VyZVdhcm1lZChvcmdJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMubWFzdGVycy5oYXMob3JnSWQpKSByZXR1cm47XG4gICAgLy8gSW5zdGFsbCB0aGUgaW4tZmxpZ2h0IHByb21pc2UgU1lOQ0hST05PVVNMWSBiZWZvcmUgeWllbGRpbmcgc28gY29uY3VycmVudFxuICAgIC8vIGNhbGxlcnMgZmluZCBpdCBvbiB0aGUgc2Vjb25kLWFuZC1sYXRlciBwYXNzZXMuIEF3YWl0aW5nIHRoZSByZXNvbHZlclxuICAgIC8vIGJlZm9yZSBwb3B1bGF0aW5nIHRoZSBtYXAgaXMgdGhlIGJ1ZyB0aGF0IGxldHMgYSBQcm9taXNlLmFsbCBvZiAzXG4gICAgLy8gY2FsbGVycyBmaXJlIDMgS01TIERlY3J5cHRzLlxuICAgIGxldCBwcm9taXNlID0gdGhpcy5pbkZsaWdodC5nZXQob3JnSWQpO1xuICAgIGlmICghcHJvbWlzZSkge1xuICAgICAgcHJvbWlzZSA9IHRoaXMucmVzb2x2ZUFuZERlY3J5cHQob3JnSWQpO1xuICAgICAgdGhpcy5pbkZsaWdodC5zZXQob3JnSWQsIHByb21pc2UpO1xuICAgICAgdm9pZCBwcm9taXNlLmZpbmFsbHkoKCkgPT4geyBpZiAodGhpcy5pbkZsaWdodC5nZXQob3JnSWQpID09PSBwcm9taXNlKSB0aGlzLmluRmxpZ2h0LmRlbGV0ZShvcmdJZCk7IH0pO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuICAgIGlmIChyZXN1bHQpIHRoaXMubWFzdGVycy5zZXQob3JnSWQsIHJlc3VsdCk7XG4gICAgLy8gUmVtZW1iZXIgdGhlIE5FR0FUSVZFIG91dGNvbWUgdG9vLCBzbyB0aGUgc3luYyBgZGVyaXZlS2V5YCBjYW4gdGVsbFxuICAgIC8vIFwibm8gcGVyLW9yZyBjb25maWcsIGZhbGxiYWNrIGlzIGNvcnJlY3RcIiBmcm9tIFwibm90IHJlc29sdmVkIHlldFwiLlxuICAgIGVsc2UgdGhpcy5yZXNvbHZlZE5vUGVyT3JnQ29uZmlnLmFkZChvcmdJZCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc29sdmVBbmREZWNyeXB0KG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPHsga2V5OiBCdWZmZXI7IGtpZDogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgbGV0IGNmZyA9IHRoaXMuY29uZmlncy5nZXQob3JnSWQpO1xuICAgIGlmICghY2ZnKSB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHRoaXMucmVzb2x2ZXIob3JnSWQpO1xuICAgICAgaWYgKCFyZXNvbHZlZCkgcmV0dXJuIG51bGw7IC8vIG5vIHBlci1vcmcgY29uZmlnIOKGkiBjYWxsZXIgdXNlcyBmYWxsYmFja1xuICAgICAgY2ZnID0gcmVzb2x2ZWQ7XG4gICAgICB0aGlzLmNvbmZpZ3Muc2V0KG9yZ0lkLCBjZmcpO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmZldGNoQW5kRGVjcnlwdChjZmcpO1xuICAgIHJldHVybiB7IGtleSwga2lkOiBjZmcua2V5SWQgfTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hBbmREZWNyeXB0KGNmZzogUGVyT3JnS21zQ29uZmlnKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICByZXR1cm4ga21zRGVjcnlwdDMyKGNmZy5rZXlJZCwgY2ZnLmNpcGhlcnRleHRCYXNlNjQsIHRoaXMucmVnaW9uLCB0aGlzLmVuZHBvaW50KTtcbiAgfVxuXG4gIC8qKiBFdmljdCBhIGNhY2hlZCBwZXItb3JnIG1hc3Rlci4gVXNlIGFmdGVyIGEga2V5IHJvdGF0aW9uIHNvIHRoZSBuZXh0XG4gICAqICB0b3VjaCByZS1mZXRjaGVzIHRoZSBuZXcgd3JhcHBlZCBtYXN0ZXIgZnJvbSB0aGUgcmVzb2x2ZXIuICovXG4gIGV2aWN0KG9yZ0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1hc3RlcnMuZGVsZXRlKG9yZ0lkKTtcbiAgICB0aGlzLmNvbmZpZ3MuZGVsZXRlKG9yZ0lkKTtcbiAgICAvLyBBbHNvIGZvcmdldCBhIE5FR0FUSVZFIHJlc29sdXRpb24sIG9yIGFuIG9yZyB0aGF0IGdhaW5zIGEgcGVyLW9yZyBjb25maWdcbiAgICAvLyBhZnRlciBiZWluZyByZXNvbHZlZCBhcyBcIm5vIGNvbmZpZ1wiIHdvdWxkIGtlZXAgdXNpbmcgdGhlIHNoYXJlZCBtYXN0ZXIuXG4gICAgdGhpcy5yZXNvbHZlZE5vUGVyT3JnQ29uZmlnLmRlbGV0ZShvcmdJZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXJpdmUgdGhlIGtleSBmb3IgYG9yZ0lkYCwgZ2l2aW5nIHRoZSBwcm92aWRlciBhIGNoYW5jZSB0byBkbyBJL08gZmlyc3QuXG4gKlxuICogVGhpcyBpcyB3aHkgYGVuY3J5cHRTZWNyZXRgL2BkZWNyeXB0U2VjcmV0YCBhcmUgYXN5bmM6IGBQZXJPcmdLbXNLZXlQcm92aWRlcmBcbiAqIG5lZWRzIG9uZSBLTVMgRGVjcnlwdCB0aGUgZmlyc3QgdGltZSBpdCBzZWVzIGFuIG9yZywgYW5kIGRlcml2aW5nXG4gKiBzeW5jaHJvbm91c2x5IGJlZm9yZSB0aGF0IHJlc29sdmVzIHdvdWxkIHNpbGVudGx5IGZhbGwgYmFjayB0byB0aGUgc2hhcmVkXG4gKiBtYXN0ZXIgYW5kIHByb2R1Y2Ugc2VjcmV0cyB0aGF0IGNhbm5vdCBiZSBkZWNyeXB0ZWQgYWZ0ZXJ3YXJkcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVyaXZlS2V5Rm9yKHByb3ZpZGVyOiBLZXlQcm92aWRlciwgb3JnSWQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIHJldHVybiBwcm92aWRlci5kZXJpdmVLZXlBc3luYyA/IHByb3ZpZGVyLmRlcml2ZUtleUFzeW5jKG9yZ0lkKSA6IHByb3ZpZGVyLmRlcml2ZUtleShvcmdJZCk7XG59XG5cbi8qKlxuICogRW5jcnlwdCBhIHBsYWludGV4dCBzdHJpbmcgZm9yIHN0b3JhZ2UuIFJldHVybnMgYW4gYEVuY3J5cHRlZEJsb2JgIHRoYXRcbiAqIGNhbiBiZSBKU09OLXNlcmlhbGl6ZWQgaW50byB0aGUgdW5kZXJseWluZyBjb2x1bW4gLyBNb25nbyBkb2N1bWVudC5cbiAqXG4gKiBFbXB0eSBzdHJpbmdzIHJvdW5kLXRyaXAgYXMgYG51bGxgIHNvIHRoZSBjYWxsaW5nIG1vZGVsIGxheWVyIGNhbiB0cmVhdFxuICogXCJubyBzZWNyZXQgc2V0XCIgaWRlbnRpY2FsbHkgdG8gXCJmaWVsZCBhYnNlbnRcIi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY3J5cHRTZWNyZXQoIHBsYWludGV4dDogc3RyaW5nLFxuICBvcmdJZDogc3RyaW5nLFxuICBwcm92aWRlcjogS2V5UHJvdmlkZXIgPSBnZXREZWZhdWx0UHJvdmlkZXIoKSxcbik6IFByb21pc2U8RW5jcnlwdGVkQmxvYj4ge1xuICBpZiAoIXBsYWludGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUmVmdXNpbmcgdG8gZW5jcnlwdCBlbXB0eSBzdHJpbmc7IGNhbGxlciBzaG91bGQgc3RvcmUgbnVsbCBpbnN0ZWFkJyk7XG4gIH1cbiAgLy8gUmVzb2x2ZSAoYW5kIHdhcm0pIHRoZSBvcmcgQkVGT1JFIHJlYWRpbmcgYGtpZEZvcmAgYmVsb3csIHNvIGEgcGVyLW9yZyBLTVNcbiAgLy8gYmxvYiBpcyBhbHdheXMgc3RhbXBlZCB3aXRoIHRoZSBrZXkgaXQgd2FzIGFjdHVhbGx5IGVuY3J5cHRlZCB1bmRlci5cbiAgY29uc3Qga2V5ID0gYXdhaXQgZGVyaXZlS2V5Rm9yKHByb3ZpZGVyLCBvcmdJZCk7XG4gIGNvbnN0IGl2ID0gcmFuZG9tQnl0ZXMoMTIpO1xuICBjb25zdCBjaXBoZXIgPSBjcmVhdGVDaXBoZXJpdignYWVzLTI1Ni1nY20nLCBrZXksIGl2KTtcbiAgY29uc3QgZW5jID0gQnVmZmVyLmNvbmNhdChbY2lwaGVyLnVwZGF0ZShwbGFpbnRleHQsICd1dGY4JyksIGNpcGhlci5maW5hbCgpXSk7XG4gIGNvbnN0IHRhZyA9IGNpcGhlci5nZXRBdXRoVGFnKCk7XG4gIC8vIFBlck9yZ0ttc0tleVByb3ZpZGVyIHRhZ3MgYmxvYnMgd2l0aCB0aGUgS01TIGtleSBpZCB1c2VkIHNvIHRoZVxuICAvLyBkZWNyeXB0IHBhdGggY2FuIHJlZnVzZSB0byBvcGVyYXRlIGlmIHRoZSBvcGVyYXRvciBsYXRlciBzd2FwcyBpbiBhXG4gIC8vIGRpZmZlcmVudCBwZXItb3JnIGNvbmZpZyAoYSBtaXNjb25maWd1cmVkIHN3YXAgc2hvdWxkbid0IHNpbGVudGx5XG4gIC8vIGFjY2VwdCBhIHN0YWxlIGJsb2IgaXQgY2FuJ3QgdmVyaWZ5IGFnYWluc3QgdGhlIHJpZ2h0IENNSykuXG4gIGNvbnN0IGtpZCA9IHByb3ZpZGVyLmtpZEZvcj8uKG9yZ0lkKTtcbiAgcmV0dXJuIHtcbiAgICBhbGc6ICdhZXMtMjU2LWdjbS12MScsXG4gICAgaXY6IGl2LnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAvLyBHQ00gdGFnIE1VU1QgdHJhdmVsIHdpdGggdGhlIGNpcGhlcnRleHQgb3IgYGRlY3J5cHRTZWNyZXRgIGNhbid0XG4gICAgLy8gdmVyaWZ5IGludGVncml0eSAgY29uY2F0ZW5hdGUgc28gdGhlIG9uLWRpc2sgc2hhcGUgaXMgb25lIGZpZWxkLlxuICAgIGNpcGhlcnRleHQ6IEJ1ZmZlci5jb25jYXQoW2VuYywgdGFnXSkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgIC4uLihraWQgIT09IHVuZGVmaW5lZCA/IHsga2lkIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKlxuICogRGVjcnlwdCBhbiBgRW5jcnlwdGVkQmxvYmAgd3JpdHRlbiBieSBgZW5jcnlwdFNlY3JldGAuIFRocm93cyBvbiAqIC0gdW5rbm93biBgYWxnYCAoZm9yY2VzIGFuIGV4cGxpY2l0IG1pZ3JhdGlvbiB3aGVuIHRoZSBmb3JtYXQgY2hhbmdlcylcbiAqIC0gd3Jvbmcgb3JnSWQgKEhLREYgYmluZGluZyBtaXNtYXRjaCBmYWlscyB0aGUgYXV0aCB0YWcpXG4gKiAtIHRhbXBlcmVkIGNpcGhlcnRleHQgKEdDTSBhdXRoIHRhZyBjaGVjayBmYWlscylcbiAqXG4gKiBDYWxsZXJzIGhhbmRsZSB0aGUgdGhyb3cgIG1hc2tpbmcgdGhlIGZhaWx1cmUgYXMgYG51bGxgIHdvdWxkIGhpZGVcbiAqIHNpbGVudCBjb3JydXB0aW9uIC8gd3Jvbmctb3JnIHJlYWRzLlxuICpcbiAqIGBwcmV2aW91c2AgKGRlZmF1bHQ6IGBTRUNSRVRfRU5DUllQVElPTl9LRVlfUFJFVklPVVNgLCB3aGVuIHNldCkgaXMgdHJpZWRcbiAqIG9ubHkgYWZ0ZXIgdGhlIHByaW1hcnkga2V5IGZhaWxzLCBhbmQgb25seSBmb3Iga2lkLWxlc3MgYmxvYnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0U2VjcmV0KCBibG9iOiBFbmNyeXB0ZWRCbG9iLFxuICBvcmdJZDogc3RyaW5nLFxuICBwcm92aWRlcjogS2V5UHJvdmlkZXIgPSBnZXREZWZhdWx0UHJvdmlkZXIoKSxcbiAgcHJldmlvdXM6IEtleVByb3ZpZGVyIHwgbnVsbCA9IGdldFByZXZpb3VzUHJvdmlkZXIoKSxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChibG9iLmFsZyAhPT0gJ2Flcy0yNTYtZ2NtLXYxJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGc6ICR7YmxvYi5hbGd9YCk7XG4gIH1cbiAgLy8gV2FybSBmaXJzdDogYGtpZEZvcmAgYW5kIGBkZXJpdmVLZXlgIGJlbG93IG11c3QgYm90aCBzcGVhayBmb3IgdGhlIG9yZydzXG4gIC8vIHJlYWwgY29uZmlnLCBvciB0aGUgbWlzbWF0Y2ggZ3VhcmQgc2lsZW50bHkgbm8tb3BzLlxuICBjb25zdCBrZXkgPSBhd2FpdCBkZXJpdmVLZXlGb3IocHJvdmlkZXIsIG9yZ0lkKTtcbiAgLy8gSWYgYm90aCB0aGUgcHJvdmlkZXIgQU5EIHRoZSBibG9iIHJlcG9ydCBhIGtpZCwgdGhleSBtdXN0IG1hdGNoLlxuICAvLyBNaXNtYXRjaCB1c3VhbGx5IG1lYW5zIGFuIG9wZXJhdG9yIHJvdGF0ZWQvcmVwbGFjZWQgYW4gb3JnJ3MgS01TXG4gIC8vIGNvbmZpZyBhbmQgaXMgbm93IHJlYWRpbmcgYSBibG9iIGVuY3J5cHRlZCB1bmRlciB0aGUgT0xEIGtleSDigJRcbiAgLy8gZmFpbGluZyBsb3VkIGhlcmUgYmVhdHMgbGV0dGluZyBBRVMtR0NNIHRocm93IGFuIG9wYXF1ZSBhdXRoLXRhZyBlcnJvci5cbiAgY29uc3QgcHJvdmlkZXJLaWQgPSBwcm92aWRlci5raWRGb3I/LihvcmdJZCk7XG4gIGlmIChwcm92aWRlcktpZCAhPT0gdW5kZWZpbmVkICYmIGJsb2Iua2lkICE9PSB1bmRlZmluZWQgJiYgcHJvdmlkZXJLaWQgIT09IGJsb2Iua2lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBLTVMga2V5IGlkIG1pc21hdGNoOiBibG9iIHdhcyBlbmNyeXB0ZWQgdW5kZXIgJHtibG9iLmtpZH0sIGN1cnJlbnQgcHJvdmlkZXIgdXNlcyAke3Byb3ZpZGVyS2lkfSBmb3Igb3JnICR7b3JnSWR9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjcnlwdFdpdGhLZXkoYmxvYiwga2V5KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gTWFzdGVyLWtleSByb3RhdGlvbiB3aW5kb3c6IHJldHJ5IHVuZGVyIFNFQ1JFVF9FTkNSWVBUSU9OX0tFWV9QUkVWSU9VUy5cbiAgICAvLyBPbmx5IGZvciBhIGtpZC1sZXNzIGJsb2IgKHRoZSBlbnYta2V5ZWQgc2hhcGUpIOKAlCBhIHBlci1vcmcgS01TIGJsb2IgaXNcbiAgICAvLyBib3VuZCB0byBpdHMgQ01LIGFuZCB0aGUgc2hhcmVkIHByZXZpb3VzIG1hc3RlciBjYW4gbmV2ZXIgb3BlbiBpdC4gVGhlXG4gICAgLy8gT1JJR0lOQUwgZXJyb3Igc3VyZmFjZXMgd2hlbiB0aGUgcHJldmlvdXMga2V5IGZhaWxzIHRvbywgc28gYSB0YW1wZXJlZCBvclxuICAgIC8vIHdyb25nLW9yZyBibG9iIHN0aWxsIGZhaWxzIGxvdWQgZXhhY3RseSBhcyBiZWZvcmUuXG4gICAgaWYgKHByZXZpb3VzICYmIGJsb2Iua2lkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNyeXB0V2l0aEtleShibG9iLCBhd2FpdCBkZXJpdmVLZXlGb3IocHJldmlvdXMsIG9yZ0lkKSk7XG4gICAgICB9IGNhdGNoIHsgLyogZmFsbCB0aHJvdWdoIHRvIHRoZSBwcmltYXJ5IGVycm9yICovIH1cbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbi8qKiBBRVMtMjU2LUdDTSBvcGVuIG9mIGEgYmxvYiB1bmRlciBvbmUgZGVyaXZlZCBrZXkuIFRocm93cyBvbiBhbnkgYXV0aC10YWcgZmFpbHVyZS4gKi9cbmZ1bmN0aW9uIGRlY3J5cHRXaXRoS2V5KGJsb2I6IEVuY3J5cHRlZEJsb2IsIGtleTogQnVmZmVyKTogc3RyaW5nIHtcbiAgY29uc3QgaXYgPSBCdWZmZXIuZnJvbShibG9iLml2LCAnYmFzZTY0Jyk7XG4gIGNvbnN0IGFsbCA9IEJ1ZmZlci5mcm9tKGJsb2IuY2lwaGVydGV4dCwgJ2Jhc2U2NCcpO1xuICAvLyBTcGxpdCBvZmYgdGhlIDE2LWJ5dGUgYXV0aCB0YWcgYXBwZW5kZWQgaW4gZW5jcnlwdFNlY3JldC4gQW55IHRhbXBlcmluZ1xuICAvLyAgdG8gZWl0aGVyIHRoZSBjaXBoZXJ0ZXh0IE9SIHRoZSB0YWcgIGNhdXNlcyB0aGUgbmV4dCBgZmluYWwoKWAgdG9cbiAgLy8gdGhyb3cgd2l0aCBcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiLlxuICBjb25zdCB0YWcgPSBhbGwuc3ViYXJyYXkoYWxsLmxlbmd0aCAtIDE2KTtcbiAgY29uc3QgZW5jID0gYWxsLnN1YmFycmF5KDAsIGFsbC5sZW5ndGggLSAxNik7XG4gIGNvbnN0IGRlY2lwaGVyID0gY3JlYXRlRGVjaXBoZXJpdignYWVzLTI1Ni1nY20nLCBrZXksIGl2KTtcbiAgZGVjaXBoZXIuc2V0QXV0aFRhZyh0YWcpO1xuICBjb25zdCBkZWMgPSBCdWZmZXIuY29uY2F0KFtkZWNpcGhlci51cGRhdGUoZW5jKSwgZGVjaXBoZXIuZmluYWwoKV0pO1xuICByZXR1cm4gZGVjLnRvU3RyaW5nKCd1dGY4Jyk7XG59XG5cbi8qKlxuICogU2hhcGUgZ3VhcmQgZm9yIGEgcGFyc2VkIGBFbmNyeXB0ZWRCbG9iYC4gQ2FsbGVycyBob2xkIGEgdmFsdWUgdGhhdCB3YXMgSlNPTi1cbiAqIGRlY29kZWQgZnJvbSBhIHNlY3JldCBjb2x1bW4gYW5kIG11c3Qgbm90IGhhbmQgYW55dGhpbmcgZWxzZSB0b1xuICogYGRlY3J5cHRTZWNyZXRgOyB0aGlzIG5hcnJvd3MgaXQgKG9yIHRoZSBjYWxsZXIgcmVqZWN0cyB0aGUgdmFsdWUpLiBDbGVhciB0ZXh0XG4gKiBpcyBOT1QgYSBzdXBwb3J0ZWQgc3RvcmVkIGZvcm0g4oCUIHRoZSBvbmx5IGNvbnN1bWVyIHRocm93cyBvbiBhIG5vbi1ibG9iLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbmNyeXB0ZWRCbG9iKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRW5jcnlwdGVkQmxvYiB7XG4gIHJldHVybiAoIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiB2YWx1ZSAhPT0gbnVsbFxuICAgICYmICh2YWx1ZSBhcyB7IGFsZz86IHVua25vd24gfSkuYWxnID09PSAnYWVzLTI1Ni1nY20tdjEnXG4gICAgJiYgdHlwZW9mICh2YWx1ZSBhcyB7IGl2PzogdW5rbm93biB9KS5pdiA9PT0gJ3N0cmluZydcbiAgICAmJiB0eXBlb2YgKHZhbHVlIGFzIHsgY2lwaGVydGV4dD86IHVua25vd24gfSkuY2lwaGVydGV4dCA9PT0gJ3N0cmluZydcbiAgKTtcbn1cbiJdfQ==
@@ -51,4 +51,4 @@ export function previousSecretStates() {
51
51
  return { secret, previousSet };
52
52
  });
53
53
  }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LXJvdGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NlY3JldC1yb3RhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUUsc0RBQXNEO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLDhCQUE4QixDQUFDO0FBRTdFLHVGQUF1RjtBQUN2RixNQUFNLFVBQVUsUUFBUSxDQUFDLElBQVk7SUFDbkMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBd0I7SUFDNUMsQ0FBQyxxQkFBcUIsRUFBRSw2QkFBNkIsQ0FBQztDQUN2RCxDQUFDLENBQUM7QUFFSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsTUFBYyxFQUFFLGFBQTRCO0lBQ3RGLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxpRkFBaUY7QUFDakYsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQ25ELElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUM7WUFBQyxXQUFXLEdBQUcsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDO1FBQUMsQ0FBQztRQUFDLE1BQU0sQ0FBQyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDOUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBSb3RhdGlvbi13aW5kb3cgdmlzaWJpbGl0eSBmb3IgXCJwcmV2aW91c1wiIHNlY3JldHMuXG4gKlxuICogRXZlcnkgcm90YXRhYmxlIHNlY3JldCBrZWVwcyBhIGAqX1BSRVZJT1VTYCB2YWx1ZSAob3IsIGZvciB0aGUgcmVnaXN0cnlcbiAqIHNpZ25pbmcgY2VydCwgYSBzZWNvbmQgY2VydCBpbiB0aGUgdHJ1c3QgYnVuZGxlKSB0aGF0IGlzIGFjY2VwdGVkIE9OTFkgZm9yXG4gKiB0aGUgb3ZlcmxhcCB3aW5kb3cgb2YgYSByb3RhdGlvbi4gTGVhdmluZyBpdCBzZXQgaW5kZWZpbml0ZWx5IHNpbGVudGx5IGtlZXBzXG4gKiB0aGUgb2xkIGNyZWRlbnRpYWwgdmFsaWQg4oCUIHRoZSB2ZXJ5IHRoaW5nIHRoZSByb3RhdGlvbiB3YXMgbWVhbnQgdG8gZW5kLlxuICpcbiAqIEVhY2ggc2VydmljZSByZWdpc3RlcnMgYSBwcm9iZSBwZXIgc2VjcmV0IGl0IG93bnM7IHRoZSBtZXRyaWNzIGxheWVyIGV4cG9ydHNcbiAqIHRoZW0gYXMgdGhlIGBzZWNyZXRfcm90YXRpb25fcHJldmlvdXNfc2V0e3NlY3JldH1gIGdhdWdlICgxIHdoaWxlIHRoZSBwcmV2aW91c1xuICogdmFsdWUgaXMgc2V0KSBhbmQgdGhlIGBTZWNyZXRSb3RhdGlvblByZXZpb3VzTGluZ2VyaW5nYCBhbGVydCBmaXJlcyB3aGVuIGl0XG4gKiBzdGF5cyAxIHBhc3QgdGhlIG92ZXJsYXAgd2luZG93LiBTZWUgZG9jcy9ydW5ib29rcy9zZWNyZXQtcm90YXRpb24ubWQuXG4gKlxuICogYFNFUlZJQ0VfU0lHTklOR19LRVlgIGlzIHJlZ2lzdGVyZWQgaGVyZSBiZWNhdXNlIGV2ZXJ5IHNlcnZpY2UgdGhhdCBsb2Fkc1xuICogYXBpLWNvcmUgc2lnbnMgaXRzIGludGVybmFsIFNFUlZJQ0UgdG9rZW5zIHdpdGggaXRzIG93biBrZXkuIEl0c1xuICogb3ZlcmxhcCBpcyBub3QgYW4gZW52IHZhbHVlOiB3aGlsZSBhIHJvdGF0aW9uIGlzIG9wZW4sIHRoZSBzaGFyZWQga2V5IGJ1bmRsZVxuICogcHVibGlzaGVzIFRXTyBwdWJsaWMga2V5cyBmb3IgdGhpcyBzZXJ2aWNlLCBzbyB0aGUgcHJvYmUgYXNrcyB0aGUga2V5IGxvYWRlclxuICogd2hldGhlciB0aGUgcmV0aXJpbmcgb25lIGlzIHN0aWxsIHRydXN0ZWQuIFRoZSBFUzI1NiB1c2VyLXRva2VuIHNpZ25pbmcga2V5IGlzXG4gKiBwbGF0Zm9ybSdzIGFsb25lLCBzbyBpdHMgcHJvYmUgaXMgcmVnaXN0ZXJlZCB0aGVyZS5cbiAqL1xuXG5pbXBvcnQgeyBpc1JldGlyaW5nU2VydmljZUtleVB1Ymxpc2hlZCB9IGZyb20gJy4uL3NlcnZpY2VzL3NlcnZpY2Uta2V5cy5qcyc7XG5cbi8qKiBHYXVnZSBuYW1lIGV4cG9ydGVkIGJ5IGFwaS1zZXJ2ZXIgYW5kIHBsYXRmb3JtLiAqL1xuZXhwb3J0IGNvbnN0IFNFQ1JFVF9ST1RBVElPTl9QUkVWSU9VU19HQVVHRSA9ICdzZWNyZXRfcm90YXRpb25fcHJldmlvdXNfc2V0JztcblxuLyoqIFRydWUgd2hlbiBhbiBlbnYgdmFyIGhvbGRzIGEgbm9uLWVtcHR5IHZhbHVlIChhbiBlbXB0eSBgS0VZPWAgaW4gLmVudiBpcyB1bnNldCkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbnZTZXQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAocHJvY2Vzcy5lbnZbbmFtZV0gPz8gJycpICE9PSAnJztcbn1cblxuY29uc3QgcHJvYmVzID0gbmV3IE1hcDxzdHJpbmcsICgpID0+IGJvb2xlYW4+KFtcbiAgWydTRVJWSUNFX1NJR05JTkdfS0VZJywgaXNSZXRpcmluZ1NlcnZpY2VLZXlQdWJsaXNoZWRdLFxuXSk7XG5cbi8qKlxuICogUmVnaXN0ZXIgKG9yIHJlcGxhY2UpIHRoZSBwcm9iZSBmb3IgYHNlY3JldGAg4oCUIHRoZSBiYXNlIG5hbWUsIGUuZy5cbiAqIGBTRUNSRVRfRU5DUllQVElPTl9LRVlgLCBvciBgVE9LRU5fU0lHTklOR19LRVlgIGZvciBhIGNyZWRlbnRpYWwgd2hvc2Ugb3ZlcmxhcFxuICogaXMgbm90IGFuIGVudiB2YWx1ZSBhdCBhbGwgKHRoZXJlLCB0aGUgcHJvYmUgYXNrcyB0aGUgc2lnbmVyIHdoZXRoZXIgYVxuICogcmV0aXJpbmcga2V5IGlzIHN0aWxsIHB1Ymxpc2hlZCkuIFRoZSBwcm9iZSBpcyBldmFsdWF0ZWQgYXQgZXZlcnkgbWV0cmljc1xuICogc2NyYXBlLCBzbyBpdCBtdXN0IGJlIGNoZWFwIGFuZCBtdXN0IG5vdCB0aHJvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyUHJldmlvdXNTZWNyZXRQcm9iZShzZWNyZXQ6IHN0cmluZywgaXNQcmV2aW91c1NldDogKCkgPT4gYm9vbGVhbik6IHZvaWQge1xuICBwcm9iZXMuc2V0KHNlY3JldCwgaXNQcmV2aW91c1NldCk7XG59XG5cbi8qKiBDdXJyZW50IHN0YXRlIG9mIGV2ZXJ5IHJlZ2lzdGVyZWQgcHJvYmU7IGEgdGhyb3dpbmcgcHJvYmUgcmVwb3J0cyBgZmFsc2VgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXZpb3VzU2VjcmV0U3RhdGVzKCk6IEFycmF5PHsgc2VjcmV0OiBzdHJpbmc7IHByZXZpb3VzU2V0OiBib29sZWFuIH0+IHtcbiAgcmV0dXJuIFsuLi5wcm9iZXMuZW50cmllcygpXS5tYXAoKFtzZWNyZXQsIHByb2JlXSkgPT4ge1xuICAgIGxldCBwcmV2aW91c1NldCA9IGZhbHNlO1xuICAgIHRyeSB7IHByZXZpb3VzU2V0ID0gcHJvYmUoKSA9PT0gdHJ1ZTsgfSBjYXRjaCB7IC8qIGEgYnJva2VuIHByb2JlIG11c3Qgbm90IGJyZWFrIC9tZXRyaWNzICovIH1cbiAgICByZXR1cm4geyBzZWNyZXQsIHByZXZpb3VzU2V0IH07XG4gIH0pO1xufVxuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LXJvdGF0aW9uLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2VjcmV0LXJvdGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU1RSxzREFBc0Q7QUFDdEQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsOEJBQThCLENBQUM7QUFFN0UsdUZBQXVGO0FBQ3ZGLE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBWTtJQUNuQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUMsQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUF3QjtJQUM1QyxDQUFDLHFCQUFxQixFQUFFLDZCQUE2QixDQUFDO0NBQ3ZELENBQUMsQ0FBQztBQUVIOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxNQUFjLEVBQUUsYUFBNEI7SUFDdEYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELGlGQUFpRjtBQUNqRixNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDbkQsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQztZQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUM5RixPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFJvdGF0aW9uLXdpbmRvdyB2aXNpYmlsaXR5IGZvciBcInByZXZpb3VzXCIgc2VjcmV0cy5cbiAqXG4gKiBFdmVyeSByb3RhdGFibGUgc2VjcmV0IGtlZXBzIGEgYCpfUFJFVklPVVNgIHZhbHVlIChvciwgZm9yIHRoZSByZWdpc3RyeVxuICogc2lnbmluZyBjZXJ0LCBhIHNlY29uZCBjZXJ0IGluIHRoZSB0cnVzdCBidW5kbGUpIHRoYXQgaXMgYWNjZXB0ZWQgT05MWSBmb3JcbiAqIHRoZSBvdmVybGFwIHdpbmRvdyBvZiBhIHJvdGF0aW9uLiBMZWF2aW5nIGl0IHNldCBpbmRlZmluaXRlbHkgc2lsZW50bHkga2VlcHNcbiAqIHRoZSBvbGQgY3JlZGVudGlhbCB2YWxpZCDigJQgdGhlIHZlcnkgdGhpbmcgdGhlIHJvdGF0aW9uIHdhcyBtZWFudCB0byBlbmQuXG4gKlxuICogRWFjaCBzZXJ2aWNlIHJlZ2lzdGVycyBhIHByb2JlIHBlciBzZWNyZXQgaXQgb3duczsgdGhlIG1ldHJpY3MgbGF5ZXIgZXhwb3J0c1xuICogdGhlbSBhcyB0aGUgYHNlY3JldF9yb3RhdGlvbl9wcmV2aW91c19zZXR7c2VjcmV0fWAgZ2F1Z2UgKDEgd2hpbGUgdGhlIHByZXZpb3VzXG4gKiB2YWx1ZSBpcyBzZXQpIGFuZCB0aGUgYFNlY3JldFJvdGF0aW9uUHJldmlvdXNMaW5nZXJpbmdgIGFsZXJ0IGZpcmVzIHdoZW4gaXRcbiAqIHN0YXlzIDEgcGFzdCB0aGUgb3ZlcmxhcCB3aW5kb3cuIFNlZSBkb2NzL3J1bmJvb2tzL3NlY3JldC1yb3RhdGlvbi5tZC5cbiAqXG4gKiBgU0VSVklDRV9TSUdOSU5HX0tFWWAgaXMgcmVnaXN0ZXJlZCBoZXJlIGJlY2F1c2UgZXZlcnkgc2VydmljZSB0aGF0IGxvYWRzXG4gKiBhcGktY29yZSBzaWducyBpdHMgaW50ZXJuYWwgU0VSVklDRSB0b2tlbnMgd2l0aCBpdHMgb3duIGtleS4gSXRzXG4gKiBvdmVybGFwIGlzIG5vdCBhbiBlbnYgdmFsdWU6IHdoaWxlIGEgcm90YXRpb24gaXMgb3BlbiwgdGhlIHNoYXJlZCBrZXkgYnVuZGxlXG4gKiBwdWJsaXNoZXMgVFdPIHB1YmxpYyBrZXlzIGZvciB0aGlzIHNlcnZpY2UsIHNvIHRoZSBwcm9iZSBhc2tzIHRoZSBrZXkgbG9hZGVyXG4gKiB3aGV0aGVyIHRoZSByZXRpcmluZyBvbmUgaXMgc3RpbGwgdHJ1c3RlZC4gVGhlIEVTMjU2IHVzZXItdG9rZW4gc2lnbmluZyBrZXkgaXNcbiAqIHBsYXRmb3JtJ3MgYWxvbmUsIHNvIGl0cyBwcm9iZSBpcyByZWdpc3RlcmVkIHRoZXJlLlxuICovXG5cbmltcG9ydCB7IGlzUmV0aXJpbmdTZXJ2aWNlS2V5UHVibGlzaGVkIH0gZnJvbSAnLi4vc2VydmljZXMvc2VydmljZS1rZXlzLmpzJztcblxuLyoqIEdhdWdlIG5hbWUgZXhwb3J0ZWQgYnkgYXBpLXNlcnZlciBhbmQgcGxhdGZvcm0uICovXG5leHBvcnQgY29uc3QgU0VDUkVUX1JPVEFUSU9OX1BSRVZJT1VTX0dBVUdFID0gJ3NlY3JldF9yb3RhdGlvbl9wcmV2aW91c19zZXQnO1xuXG4vKiogVHJ1ZSB3aGVuIGFuIGVudiB2YXIgaG9sZHMgYSBub24tZW1wdHkgdmFsdWUgKGFuIGVtcHR5IGBLRVk9YCBpbiAuZW52IGlzIHVuc2V0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VudlNldChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIChwcm9jZXNzLmVudltuYW1lXSA/PyAnJykgIT09ICcnO1xufVxuXG5jb25zdCBwcm9iZXMgPSBuZXcgTWFwPHN0cmluZywgKCkgPT4gYm9vbGVhbj4oW1xuICBbJ1NFUlZJQ0VfU0lHTklOR19LRVknLCBpc1JldGlyaW5nU2VydmljZUtleVB1Ymxpc2hlZF0sXG5dKTtcblxuLyoqXG4gKiBSZWdpc3RlciAob3IgcmVwbGFjZSkgdGhlIHByb2JlIGZvciBgc2VjcmV0YCDigJQgdGhlIGJhc2UgbmFtZSwgZS5nLlxuICogYFNFQ1JFVF9FTkNSWVBUSU9OX0tFWWAsIG9yIGBUT0tFTl9TSUdOSU5HX0tFWWAgZm9yIGEgY3JlZGVudGlhbCB3aG9zZSBvdmVybGFwXG4gKiBpcyBub3QgYW4gZW52IHZhbHVlIGF0IGFsbCAodGhlcmUsIHRoZSBwcm9iZSBhc2tzIHRoZSBzaWduZXIgd2hldGhlciBhXG4gKiByZXRpcmluZyBrZXkgaXMgc3RpbGwgcHVibGlzaGVkKS4gVGhlIHByb2JlIGlzIGV2YWx1YXRlZCBhdCBldmVyeSBtZXRyaWNzXG4gKiBzY3JhcGUsIHNvIGl0IG11c3QgYmUgY2hlYXAgYW5kIG11c3Qgbm90IHRocm93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJQcmV2aW91c1NlY3JldFByb2JlKHNlY3JldDogc3RyaW5nLCBpc1ByZXZpb3VzU2V0OiAoKSA9PiBib29sZWFuKTogdm9pZCB7XG4gIHByb2Jlcy5zZXQoc2VjcmV0LCBpc1ByZXZpb3VzU2V0KTtcbn1cblxuLyoqIEN1cnJlbnQgc3RhdGUgb2YgZXZlcnkgcmVnaXN0ZXJlZCBwcm9iZTsgYSB0aHJvd2luZyBwcm9iZSByZXBvcnRzIGBmYWxzZWAuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldmlvdXNTZWNyZXRTdGF0ZXMoKTogQXJyYXk8eyBzZWNyZXQ6IHN0cmluZzsgcHJldmlvdXNTZXQ6IGJvb2xlYW4gfT4ge1xuICByZXR1cm4gWy4uLnByb2Jlcy5lbnRyaWVzKCldLm1hcCgoW3NlY3JldCwgcHJvYmVdKSA9PiB7XG4gICAgbGV0IHByZXZpb3VzU2V0ID0gZmFsc2U7XG4gICAgdHJ5IHsgcHJldmlvdXNTZXQgPSBwcm9iZSgpID09PSB0cnVlOyB9IGNhdGNoIHsgLyogYSBicm9rZW4gcHJvYmUgbXVzdCBub3QgYnJlYWsgL21ldHJpY3MgKi8gfVxuICAgIHJldHVybiB7IHNlY3JldCwgcHJldmlvdXNTZXQgfTtcbiAgfSk7XG59XG4iXX0=
@@ -26,4 +26,4 @@ export function safeEqual(presented, expected) {
26
26
  }
27
27
  return timingSafeEqual(a, b);
28
28
  }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlLWNvbXBhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2VjdXJlLWNvbXBhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXpDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLFNBQWlCLEVBQUUsUUFBZ0I7SUFDM0QsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQix5RUFBeUU7UUFDekUsNERBQTREO1FBQzVELGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgdGltaW5nU2FmZUVxdWFsIH0gZnJvbSAnY3J5cHRvJztcblxuLyoqXG4gKiBDb25zdGFudC10aW1lIHN0cmluZyBlcXVhbGl0eSwgZm9yIGNvbXBhcmluZyBhIHByZXNlbnRlZCBzZWNyZXQgYWdhaW5zdCBhblxuICogZXhwZWN0ZWQgb25lIChzY3JhcGUgdG9rZW5zLCBzaGFyZWQgd2ViaG9vayBzZWNyZXRzLCBzaWduYXR1cmVzKS5cbiAqXG4gKiBgYSA9PT0gYmAgb24gc2VjcmV0cyBzaG9ydC1jaXJjdWl0cyBhdCB0aGUgZmlyc3QgZGlmZmVyaW5nIGJ5dGUsIHdoaWNoIGxlYWtzXG4gKiB0aGUgZXhwZWN0ZWQgdmFsdWUgYSBieXRlIGF0IGEgdGltZSB0byBhbiBhdHRhY2tlciB3aG8gY2FuIG1lYXN1cmUgcmVzcG9uc2VcbiAqIGxhdGVuY3kuIGB0aW1pbmdTYWZlRXF1YWxgIGRvZXMgbm90IOKAlCBidXQgaXQgVEhST1dTIHdoZW4gdGhlIHR3byBidWZmZXJzXG4gKiBkaWZmZXIgaW4gbGVuZ3RoLCBzbyBsZW5ndGggaXMgY29tcGFyZWQgZmlyc3QgYW5kIHRoZSByZXN1bHQgaXMgZm9sZGVkIGluXG4gKiB3aXRob3V0IGFuIGVhcmx5IHJldHVybi5cbiAqXG4gKiBUaGUgbGVuZ3RoIGNoZWNrIGl0c2VsZiBpcyBub3QgY29uc3RhbnQtdGltZSwgc28gdGhpcyBsZWFrcyB0aGUgZXhwZWN0ZWRcbiAqIHNlY3JldCdzIExFTkdUSC4gVGhhdCBpcyBhY2NlcHRhYmxlIGZvciBmaXhlZC1sZW5ndGggdG9rZW5zIGFuZCBpcyB0aGVcbiAqIHN0YW5kYXJkIHRyYWRlLW9mZjsgZG8gbm90IHVzZSB0aGlzIHdoZXJlIHRoZSBsZW5ndGggaXMgaXRzZWxmIHRoZSBzZWNyZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRXF1YWwocHJlc2VudGVkOiBzdHJpbmcsIGV4cGVjdGVkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYSA9IEJ1ZmZlci5mcm9tKHByZXNlbnRlZCwgJ3V0ZjgnKTtcbiAgY29uc3QgYiA9IEJ1ZmZlci5mcm9tKGV4cGVjdGVkLCAndXRmOCcpO1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgLy8gU3RpbGwgcnVuIGEgY29tcGFyaXNvbiBvZiBlcXVhbC1sZW5ndGggYnVmZmVycyBzbyBhIHdyb25nLWxlbmd0aCBndWVzc1xuICAgIC8vIGRvZXNuJ3QgcmV0dXJuIG1lYXN1cmFibHkgZmFzdGVyIHRoYW4gYSByaWdodC1sZW5ndGggb25lLlxuICAgIHRpbWluZ1NhZmVFcXVhbChhLCBhKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRpbWluZ1NhZmVFcXVhbChhLCBiKTtcbn1cbiJdfQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlLWNvbXBhcmUuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zZWN1cmUtY29tcGFyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFekM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsU0FBaUIsRUFBRSxRQUFnQjtJQUMzRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6QyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLHlFQUF5RTtRQUN6RSw0REFBNEQ7UUFDNUQsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyB0aW1pbmdTYWZlRXF1YWwgfSBmcm9tICdjcnlwdG8nO1xuXG4vKipcbiAqIENvbnN0YW50LXRpbWUgc3RyaW5nIGVxdWFsaXR5LCBmb3IgY29tcGFyaW5nIGEgcHJlc2VudGVkIHNlY3JldCBhZ2FpbnN0IGFuXG4gKiBleHBlY3RlZCBvbmUgKHNjcmFwZSB0b2tlbnMsIHNoYXJlZCB3ZWJob29rIHNlY3JldHMsIHNpZ25hdHVyZXMpLlxuICpcbiAqIGBhID09PSBiYCBvbiBzZWNyZXRzIHNob3J0LWNpcmN1aXRzIGF0IHRoZSBmaXJzdCBkaWZmZXJpbmcgYnl0ZSwgd2hpY2ggbGVha3NcbiAqIHRoZSBleHBlY3RlZCB2YWx1ZSBhIGJ5dGUgYXQgYSB0aW1lIHRvIGFuIGF0dGFja2VyIHdobyBjYW4gbWVhc3VyZSByZXNwb25zZVxuICogbGF0ZW5jeS4gYHRpbWluZ1NhZmVFcXVhbGAgZG9lcyBub3Qg4oCUIGJ1dCBpdCBUSFJPV1Mgd2hlbiB0aGUgdHdvIGJ1ZmZlcnNcbiAqIGRpZmZlciBpbiBsZW5ndGgsIHNvIGxlbmd0aCBpcyBjb21wYXJlZCBmaXJzdCBhbmQgdGhlIHJlc3VsdCBpcyBmb2xkZWQgaW5cbiAqIHdpdGhvdXQgYW4gZWFybHkgcmV0dXJuLlxuICpcbiAqIFRoZSBsZW5ndGggY2hlY2sgaXRzZWxmIGlzIG5vdCBjb25zdGFudC10aW1lLCBzbyB0aGlzIGxlYWtzIHRoZSBleHBlY3RlZFxuICogc2VjcmV0J3MgTEVOR1RILiBUaGF0IGlzIGFjY2VwdGFibGUgZm9yIGZpeGVkLWxlbmd0aCB0b2tlbnMgYW5kIGlzIHRoZVxuICogc3RhbmRhcmQgdHJhZGUtb2ZmOyBkbyBub3QgdXNlIHRoaXMgd2hlcmUgdGhlIGxlbmd0aCBpcyBpdHNlbGYgdGhlIHNlY3JldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhZmVFcXVhbChwcmVzZW50ZWQ6IHN0cmluZywgZXhwZWN0ZWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBhID0gQnVmZmVyLmZyb20ocHJlc2VudGVkLCAndXRmOCcpO1xuICBjb25zdCBiID0gQnVmZmVyLmZyb20oZXhwZWN0ZWQsICd1dGY4Jyk7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAvLyBTdGlsbCBydW4gYSBjb21wYXJpc29uIG9mIGVxdWFsLWxlbmd0aCBidWZmZXJzIHNvIGEgd3JvbmctbGVuZ3RoIGd1ZXNzXG4gICAgLy8gZG9lc24ndCByZXR1cm4gbWVhc3VyYWJseSBmYXN0ZXIgdGhhbiBhIHJpZ2h0LWxlbmd0aCBvbmUuXG4gICAgdGltaW5nU2FmZUVxdWFsKGEsIGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdGltaW5nU2FmZUVxdWFsKGEsIGIpO1xufVxuIl19
@@ -0,0 +1,18 @@
1
+ /** True for a full `x.y.z[-pre][+build]` version (a leading `v` is allowed). */
2
+ export declare function isSemver(v: string): boolean;
3
+ /**
4
+ * -1 / 0 / 1 ordering of two versions per SemVer §11: numeric x.y.z, a
5
+ * prerelease sorts before its release, and prerelease identifiers compare
6
+ * numerically when both are numeric (`rc.2` < `rc.10`), else as ASCII, with a
7
+ * numeric identifier below an alphanumeric one and a shorter set below a
8
+ * longer one that it prefixes. Throws on a value that isn't a version.
9
+ */
10
+ export declare function compareSemver(a: string, b: string): -1 | 0 | 1;
11
+ /**
12
+ * Whether `version` satisfies an `engines`-style range: comparator sets joined
13
+ * by `||`, each a space-separated AND of `>=`, `>`, `<=`, `<`, `=`, `^`, `~` or
14
+ * bare versions (partials like `>= 26` allowed). `*` / empty match anything.
15
+ * Returns null when the range uses syntax outside that (hyphen ranges, `x`
16
+ * wildcards), so the caller can decide rather than guess.
17
+ */
18
+ export declare function satisfiesRange(version: string, range: string): boolean | null;