@pipeline-builder/api-core 5.2.6 → 5.2.7

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 (181) 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 +1 -1
  22. package/lib/middleware/deferred-quota-check.js +1 -1
  23. package/lib/middleware/ecosystem-guard.js +1 -1
  24. package/lib/middleware/index.js +1 -1
  25. package/lib/middleware/jwt-verify.js +1 -1
  26. package/lib/middleware/mongo-sanitize.js +1 -1
  27. package/lib/middleware/on-behalf.js +1 -1
  28. package/lib/middleware/permission-gates.js +1 -1
  29. package/lib/middleware/quota-exempt-routes.js +1 -1
  30. package/lib/middleware/revocation.js +1 -1
  31. package/lib/middleware/route-table.js +16 -1
  32. package/lib/middleware/service-tokens.js +1 -1
  33. package/lib/middleware/step-up.js +1 -1
  34. package/lib/middleware/system-org.d.ts +18 -5
  35. package/lib/middleware/system-org.js +19 -6
  36. package/lib/openapi/extend-zod.js +1 -1
  37. package/lib/openapi/index.js +1 -1
  38. package/lib/openapi/registry.js +1 -1
  39. package/lib/openapi/routes/ask-routes.js +1 -1
  40. package/lib/openapi/routes/billing-routes.js +1 -1
  41. package/lib/openapi/routes/image-registry-routes.js +1 -1
  42. package/lib/openapi/routes/index.js +1 -1
  43. package/lib/openapi/routes/message-routes.js +1 -1
  44. package/lib/openapi/routes/pipeline-routes.js +1 -1
  45. package/lib/openapi/routes/pipeline-template-routes.js +1 -1
  46. package/lib/openapi/routes/plugin-routes.js +1 -1
  47. package/lib/openapi/routes/quota-routes.js +1 -1
  48. package/lib/openapi/schema-registry.js +1 -1
  49. package/lib/routes/health.js +1 -1
  50. package/lib/routes/index.js +1 -1
  51. package/lib/services/ai-call-weight.js +1 -1
  52. package/lib/services/alert-delivery.js +1 -1
  53. package/lib/services/api-key-exchange.js +1 -1
  54. package/lib/services/audit-context.js +1 -1
  55. package/lib/services/audit-spool.js +1 -1
  56. package/lib/services/cache-service.js +1 -1
  57. package/lib/services/circuit-breaker.js +1 -1
  58. package/lib/services/compliance-client.js +1 -1
  59. package/lib/services/compliance-event-subscriber.js +1 -1
  60. package/lib/services/durable-event-bus.js +1 -1
  61. package/lib/services/ecosystem-notify-client.d.ts +7 -1
  62. package/lib/services/ecosystem-notify-client.js +9 -3
  63. package/lib/services/entity-events.js +1 -1
  64. package/lib/services/env-redis.js +1 -1
  65. package/lib/services/http-client.js +19 -3
  66. package/lib/services/index.d.ts +1 -1
  67. package/lib/services/index.js +2 -2
  68. package/lib/services/jwks-cache.js +1 -1
  69. package/lib/services/leader-lock.js +1 -1
  70. package/lib/services/notification-channels.js +1 -1
  71. package/lib/services/org-ai-client.js +1 -1
  72. package/lib/services/pagerduty-inbound.js +1 -1
  73. package/lib/services/pagerduty.js +1 -1
  74. package/lib/services/quota-increment-batcher.js +1 -1
  75. package/lib/services/quota.js +1 -1
  76. package/lib/services/remote-audit-client.js +1 -1
  77. package/lib/services/retry-forever.js +1 -1
  78. package/lib/services/retry-strategy.js +1 -1
  79. package/lib/services/s3-client.js +1 -1
  80. package/lib/services/scheduler.js +1 -1
  81. package/lib/services/service-boot.js +1 -1
  82. package/lib/services/service-keys.js +2 -2
  83. package/lib/services/sse-ticket-store.js +1 -1
  84. package/lib/services/system-notification.js +1 -1
  85. package/lib/services/token-revocation.js +1 -1
  86. package/lib/services/version-vuln-policy.d.ts +11 -0
  87. package/lib/services/version-vuln-policy.js +33 -7
  88. package/lib/types/ai-catalog.js +1 -1
  89. package/lib/types/ask-proposals.d.ts +23 -0
  90. package/lib/types/ask-proposals.js +29 -1
  91. package/lib/types/audit-events.js +1 -1
  92. package/lib/types/build-catalog.d.ts +65 -0
  93. package/lib/types/build-catalog.js +95 -1
  94. package/lib/types/catalog-metadata.js +1 -1
  95. package/lib/types/common.js +1 -1
  96. package/lib/types/compliance-exemption.js +1 -1
  97. package/lib/types/ecosystem-notifications.d.ts +9 -0
  98. package/lib/types/ecosystem-notifications.js +15 -6
  99. package/lib/types/ecosystem.d.ts +1 -6
  100. package/lib/types/ecosystem.js +18 -5
  101. package/lib/types/error-codes.js +1 -1
  102. package/lib/types/feature-flags.d.ts +17 -1
  103. package/lib/types/feature-flags.js +1 -1
  104. package/lib/types/http.js +1 -1
  105. package/lib/types/index.d.ts +3 -3
  106. package/lib/types/index.js +4 -4
  107. package/lib/types/metadata-keys.js +1 -1
  108. package/lib/types/permissions.d.ts +60 -13
  109. package/lib/types/permissions.js +63 -14
  110. package/lib/types/pipeline-template.js +1 -1
  111. package/lib/types/pipeline.js +1 -1
  112. package/lib/types/plugin-catalog.js +1 -1
  113. package/lib/types/plugin-health.js +1 -1
  114. package/lib/types/plugin-scan.d.ts +69 -0
  115. package/lib/types/plugin-scan.js +77 -1
  116. package/lib/types/quota-catalog.js +15 -2
  117. package/lib/types/quota-tiers.d.ts +27 -160
  118. package/lib/types/quota-tiers.js +47 -255
  119. package/lib/types/remote-audit-actions.d.ts +1 -1
  120. package/lib/types/remote-audit-actions.js +9 -1
  121. package/lib/types/reserved-tags.js +1 -1
  122. package/lib/types/tier-limits.d.ts +210 -0
  123. package/lib/types/tier-limits.js +254 -0
  124. package/lib/types/usage-projection.js +1 -1
  125. package/lib/types/visibility.js +1 -1
  126. package/lib/types/wire-vocabulary.d.ts +7 -0
  127. package/lib/types/wire-vocabulary.js +7 -1
  128. package/lib/utils/alias-resolver.js +1 -1
  129. package/lib/utils/api-key.js +1 -1
  130. package/lib/utils/audit.js +1 -1
  131. package/lib/utils/aws-scrub.js +1 -1
  132. package/lib/utils/compliance-attributes.js +1 -1
  133. package/lib/utils/concurrency-gate.d.ts +98 -0
  134. package/lib/utils/concurrency-gate.js +110 -0
  135. package/lib/utils/concurrency.js +1 -1
  136. package/lib/utils/crash-handlers.js +1 -1
  137. package/lib/utils/date.js +1 -1
  138. package/lib/utils/dsse.js +1 -1
  139. package/lib/utils/env.d.ts +11 -0
  140. package/lib/utils/env.js +14 -1
  141. package/lib/utils/headers.js +1 -1
  142. package/lib/utils/identity.js +1 -1
  143. package/lib/utils/index.d.ts +1 -0
  144. package/lib/utils/index.js +2 -1
  145. package/lib/utils/jwk.js +2 -2
  146. package/lib/utils/logger.js +1 -1
  147. package/lib/utils/metric-emitter.js +1 -1
  148. package/lib/utils/object.js +1 -1
  149. package/lib/utils/params.js +1 -1
  150. package/lib/utils/plugin-compliance.d.ts +9 -1
  151. package/lib/utils/plugin-compliance.js +1 -1
  152. package/lib/utils/proof-of-work.js +1 -1
  153. package/lib/utils/response.js +1 -1
  154. package/lib/utils/retention.js +1 -1
  155. package/lib/utils/safe-require.js +1 -1
  156. package/lib/utils/secret-encryption.js +1 -1
  157. package/lib/utils/secret-rotation.js +1 -1
  158. package/lib/utils/secure-compare.js +1 -1
  159. package/lib/utils/sensitive-patterns.js +1 -1
  160. package/lib/utils/service-registry.js +1 -1
  161. package/lib/utils/ssrf.js +1 -1
  162. package/lib/validation/ai-schemas.js +1 -1
  163. package/lib/validation/common-schemas.js +1 -1
  164. package/lib/validation/dockerfile-static.js +1 -1
  165. package/lib/validation/index.d.ts +1 -1
  166. package/lib/validation/index.js +2 -2
  167. package/lib/validation/message-schemas.d.ts +73 -0
  168. package/lib/validation/message-schemas.js +63 -2
  169. package/lib/validation/middleware.js +1 -1
  170. package/lib/validation/pipeline-schemas.js +1 -1
  171. package/lib/validation/pipeline-template-schemas.js +1 -1
  172. package/lib/validation/plugin-base-images.js +1 -1
  173. package/lib/validation/plugin-catalog-detect.js +1 -1
  174. package/lib/validation/plugin-catalog-metadata.js +1 -1
  175. package/lib/validation/plugin-heuristics.js +1 -1
  176. package/lib/validation/plugin-lint.js +1 -1
  177. package/lib/validation/plugin-name-confusable.js +1 -1
  178. package/lib/validation/plugin-schemas.js +1 -1
  179. package/lib/validation/plugin-spec-schema.js +1 -1
  180. package/lib/validation/plugin-template-contract.js +1 -1
  181. package/package.json +11 -4
@@ -209,4 +209,4 @@ export async function releaseSharedEnvLock() {
209
209
  sharedLock = undefined;
210
210
  await closeLeaderLock(client);
211
211
  }
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZGVyLWxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvbGVhZGVyLWxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBb0IvQzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQUMsS0FBbUM7SUFDdkUsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPO0lBQ25CLElBQUksQ0FBQztRQUNILElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFBQyxPQUFPO1FBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsNkJBQTZCO0lBQy9CLENBQUM7SUFDRCxJQUFJLENBQUM7UUFBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztJQUFDLENBQUM7SUFBQyxNQUFNLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRDtpRUFDaUU7QUFDakUsTUFBTSxnQkFBZ0IsR0FDcEIsbUdBQW1HLENBQUM7QUFFdEcsOERBQThEO0FBQzlELE1BQU0sZUFBZSxHQUNuQixnSEFBZ0gsQ0FBQztBQUVuSCxxRkFBcUY7QUFDckYs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QUFlLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGNyZWF0ZUVudlJlZGlzQ2xpZW50LCB3aGVuUmVkaXNSZWFkeSwgdHlwZSBSZWFkeUF3YXJlUmVkaXMgfSBmcm9tICcuL2Vudi1yZWRpcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvY2tMb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2xlYWRlci1sb2NrJyk7XG5cbi8qKlxuICogTWluaW1hbCBSZWRpcyBjbGllbnQgc3VyZmFjZSBuZWVkZWQgZm9yIGEgbGVhZGVyIGxvY2sgKGEgc3Vic2V0IG9mIGlvcmVkaXMpLlxuICogYHNldGAgaXMgdmFyaWFkaWMgc28gY2FsbGVycyBjYW4gcGFzcyBgJ1BYJywgdHRsLCAnTlgnYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NrUmVkaXMgZXh0ZW5kcyBSZWFkeUF3YXJlUmVkaXMge1xuICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG4gIGRlbCguLi5rZXlzOiBzdHJpbmdbXSk6IFByb21pc2U8bnVtYmVyPjtcbiAgLyoqIE9wdGlvbmFsIEx1YSBldmFsIChpb3JlZGlzIGhhcyBpdCkuIFdoZW4gcHJlc2VudCwgcmVsZWFzZSB1c2VzIGFuIGF0b21pY1xuICAgKiAgY29tcGFyZS1hbmQtZGVsZXRlIHNvIGEgbGFwc2VkIGhvbGRlciBjYW4ndCBmcmVlIGEgc3VjY2Vzc29yJ3MgbG9jay4gKi9cbiAgZXZhbD8oc2NyaXB0OiBzdHJpbmcsIG51bUtleXM6IG51bWJlciwgLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgLyoqIEdyYWNlZnVsIGNsb3NlIChpb3JlZGlzIGBxdWl0YCkg4oCUIGNhbGxlZCBvbiBzaHV0ZG93biBzbyB0aGUgY29ubmVjdGlvblxuICAgKiAgZG9lc24ndCBrZWVwIHRoZSBldmVudCBsb29wIGFsaXZlLiAqL1xuICBxdWl0PygpOiBQcm9taXNlPHVua25vd24+O1xuICAvKiogSW1tZWRpYXRlIGNsb3NlIChpb3JlZGlzIGBkaXNjb25uZWN0YCkg4oCUIHRoZSBmYWxsYmFjayBpZiBgcXVpdGAgZmFpbHMuICovXG4gIGRpc2Nvbm5lY3Q/KCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQmVzdC1lZmZvcnQgY2xvc2Ugb2YgYSBsZWFkZXItbG9jayBSZWRpcyBjbGllbnQgb24gc2h1dGRvd24uIFByZWZlcnMgZ3JhY2VmdWxcbiAqIGBxdWl0YDsgZmFsbHMgYmFjayB0byBgZGlzY29ubmVjdGAuIE5vLW9wIGZvciBhIG51bGwgY2xpZW50IC8gb25lIHdpdGhvdXRcbiAqIGVpdGhlciBtZXRob2QuIE5ldmVyIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb3NlTGVhZGVyTG9jayhyZWRpczogTG9ja1JlZGlzIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIXJlZGlzKSByZXR1cm47XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiByZWRpcy5xdWl0ID09PSAnZnVuY3Rpb24nKSB7IGF3YWl0IHJlZGlzLnF1aXQoKTsgcmV0dXJuOyB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byBkaXNjb25uZWN0XG4gIH1cbiAgdHJ5IHsgcmVkaXMuZGlzY29ubmVjdD8uKCk7IH0gY2F0Y2ggeyAvKiBiZXN0LWVmZm9ydCAqLyB9XG59XG5cbi8qKiBBdG9taWMgXCJkZWxldGUgb25seSBpZiBJIHN0aWxsIG93biBpdFwiIOKAlCBjbG9zZXMgdGhlIGdldC10aGVuLWRlbCByYWNlIHdoZXJlXG4gKiAgdGhlIGxvY2sgZXhwaXJlcyBhbmQgaXMgcmUtYWNxdWlyZWQgYmV0d2VlbiB0aGUgdHdvIGNhbGxzLiAqL1xuY29uc3QgUkVMRUFTRV9JRl9PV05FUiA9XG4gICdpZiByZWRpcy5jYWxsKFwiZ2V0XCIsIEtFWVNbMV0pID09IEFSR1ZbMV0gdGhlbiByZXR1cm4gcmVkaXMuY2FsbChcImRlbFwiLCBLRVlTWzFdKSBlbHNlIHJldHVybiAwIGVuZCc7XG5cbi8qKiBBdG9taWMgXCJleHRlbmQgb25seSBpZiBJIHN0aWxsIG93biBpdFwiIOKAlCB0aGUgaGVhcnRiZWF0LiAqL1xuY29uc3QgRVhURU5EX0lGX09XTkVSID1cbiAgJ2lmIHJlZGlzLmNhbGwoXCJnZXRcIiwgS0VZU1sxXSkgPT0gQVJHVlsxXSB0aGVuIHJldHVybiByZWRpcy5jYWxsKFwicGV4cGlyZVwiLCBLRVlTWzFdLCBBUkdWWzJdKSBlbHNlIHJldHVybiAwIGVuZCc7XG5cbi8qKiBMb25nZXN0IGEgcnVuIHdhaXRzIGZvciBhIG5vdC15ZXQtY29ubmVjdGVkIGNsaWVudCBiZWZvcmUgc2tpcHBpbmcgdGhlIHdpbmRvdy4gKi9cbmNvbnN0IExPQ0tfUkVBRFlfVElNRU9VVF9NUyA9IDEwXzAwMDtcblxuLyoqXG4gKiBEZWZhdWx0IGxvY2sgbGlmZXRpbWUg4oCUIGEgQ1JBU0gtUkVDT1ZFUlkgd2luZG93LCBub3QgYSBydW4tZHVyYXRpb24gY292ZXIuXG4gKlxuICogVGhlIGhvbGRlciBoZWFydGJlYXRzIChjb21wYXJlLWFuZC1QRVhQSVJFIGV2ZXJ5IGB0dGxNcyAvIDNgKSBmb3IgYXMgbG9uZyBhc1xuICogYGZuYCBydW5zLCBzbyBhIHNpeC1ob3VyIGpvYiBob2xkcyBhIHR3by1taW51dGUgbG9jayBwZXJmZWN0bHkgd2VsbC4gV2hhdCB0aGVcbiAqIFRUTCBhY3R1YWxseSBkZWNpZGVzIGlzIGhvdyBsb25nIGEgam9iIHN0YXlzIEJMT0NLRUQgYWZ0ZXIgdGhlIHBvZCBob2xkaW5nIGl0XG4gKiBkaWVzIHdpdGhvdXQgcmVsZWFzaW5nIOKAlCB0aGUga2V5IHNpbXBseSBzaXRzIHRoZXJlIHVudGlsIGl0IGV4cGlyZXMuIFNpemluZyB0aGVcbiAqIFRUTCB0byB0aGUgZXhwZWN0ZWQgcnVuIHRpbWUgKHdoaWNoIGlzIHdoYXQgc2V2ZXJhbCBjYWxsZXJzIHVzZWQgdG8gZG8pIHR1cm5lZCBhXG4gKiBjcmFzaGVkIHBvZCBpbnRvIGhvdXJzIG9mIHNpbGVudCBpbmFjdGl2aXR5LlxuICpcbiAqIFR3byBtaW51dGVzIGxlYXZlcyB0aHJlZSBtaXNzZWQgaGVhcnRiZWF0cyBvZiBzbGFjaywgc28gYW4gZXZlbnQtbG9vcCBzdGFsbCBvciBhXG4gKiBicmllZiBSZWRpcyBibGlwIGRvZXMgbm90IGhhbmQgdGhlIGxvY2sgdG8gYSBzZWNvbmQgcG9kIG1pZC1ydW4sIHdoaWxlIHJlY292ZXJ5XG4gKiBhZnRlciBhIHJlYWwgY3Jhc2ggaXMgYm91bmRlZCBhdCB0d28gbWludXRlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEVBREVSX0xPQ0tfVFRMX01TID0gMTIwXzAwMDtcblxuLyoqXG4gKiBUaGUgb25lIHdheSB0byBidWlsZCBhIGxlYWRlci1sb2NrIGtleTogYDxzZXJ2aWNlPjo8am9iPjpsZWFkZXJgLlxuICpcbiAqIEZvdXIgY29udmVudGlvbnMgaGFkIGdyb3duIHVwIOKAlCBgcGx1Z2luOnZ1bG4tcmVzY2FuOmxlYWRlcmAsXG4gKiBgcGxhdGZvcm06bGVhZGVyOm9yZy1wdXJnZWAsIGEgYmFyZSBgZWNvc3lzdGVtLXN0YXRzOmxlYWRlcmAsIGFuZCBiaWxsaW5nJ3NcbiAqIHVubmFtZXNwYWNlZCBgc3Vic2NyaXB0aW9uLWxpZmVjeWNsZWAg4oCUIHdoaWNoIG1lYW50IG5vIHNpbmdsZSBnbG9iIGZvdW5kIGV2ZXJ5XG4gKiBsb2NrLiBgS0VZUyAnKjpsZWFkZXInYCBtaXNzZWQgYmlsbGluZydzIHRocmVlIGVudGlyZWx5LCBzbyBhbiBvcGVyYXRvciBhc2tpbmdcbiAqIFwid2hhdCBpcyBoZWxkIHJpZ2h0IG5vd1wiIGdvdCBhIHBhcnRpYWwgYW5zd2VyLiBUaGUgZW52IFJlZGlzIGNsaWVudCBzZXRzIG5vXG4gKiBga2V5UHJlZml4YCwgc28gdGhlc2Ugc2hhcmUgb25lIGZsYXQga2V5c3BhY2Ugd2l0aCBjYWNoZSwgQnVsbE1RIGFuZCBzcG9vbCBrZXlzO1xuICogdGhlIGA8c2VydmljZT46YCBzZWdtZW50IGlzIHdoYXQga2VlcHMgdGhlbSBhcGFydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxlYWRlckxvY2tLZXkoc2VydmljZTogc3RyaW5nLCBqb2I6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtzZXJ2aWNlfToke2pvYn06bGVhZGVyYDtcbn1cblxuLyoqIFdoeSBhIGxlYWRlci1sb2NrZWQgcnVuIHdhcyB0b2xkIHRvIHN0b3AuICovXG5leHBvcnQgdHlwZSBMZWFkZXJMb2NrQWJvcnRSZWFzb24gPSAnbG9jay1sb3N0JyB8ICdzaHV0ZG93bic7XG5cbi8qKiBXaGF0IGEgbGVhZGVyLWxvY2tlZCBydW4gaXMgdG9sZCB3aGlsZSBpdCBydW5zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZWFkZXJMb2NrUnVuIHtcbiAgLyoqXG4gICAqIEFib3J0ZWQgd2hlbiB0aGUgbG9jayBpcyBMT1NUIG1pZC1ydW4gKGEgaGVhcnRiZWF0IGZvdW5kIGFub3RoZXIgaG9sZGVyLCBvclxuICAgKiB0aGUga2V5IGdvbmUpLCBvciB3aGVuIHRoZSBjYWxsZXIgaXMgU0hVVFRJTkcgRE9XTi4gTG9uZyBydW5zIG11c3QgY2hlY2sgaXRcbiAgICogYmV0d2VlbiB1bml0cyBvZiB3b3JrIGFuZCByZXR1cm46IHBhc3QgYSBsb2NrIGxvc3MgYW5vdGhlciBwb2QgbWF5IGJlIGRvaW5nXG4gICAqIHRoZSBzYW1lIHdvcmssIGFuZCBvbiBzaHV0ZG93biByZXR1cm5pbmcgcHJvbXB0bHkgaXMgd2hhdCByZWxlYXNlcyB0aGUgbG9ja1xuICAgKiBpbnN0ZWFkIG9mIGxlYXZpbmcgaXQgdG8gZXhwaXJlLlxuICAgKlxuICAgKiBgc2lnbmFsLnJlYXNvbmAgaXMgYSB7QGxpbmsgTGVhZGVyTG9ja0Fib3J0UmVhc29ufS5cbiAgICovXG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG59XG5cbi8qKiBDYWxsZXItc3VwcGxpZWQgY29udHJvbHMgZm9yIHtAbGluayB3aXRoTGVhZGVyTG9ja30uICovXG5leHBvcnQgaW50ZXJmYWNlIExlYWRlckxvY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFib3J0ZWQgYnkgdGhlIGNhbGxlciB0byBhc2sgYSBydW5uaW5nIGpvYiB0byBzdG9wIOKAlCBhIHNjaGVkdWxlcidzIGBzdG9wKClgXG4gICAqIG9uIHNodXRkb3duLiBNZXJnZWQgaW50byB7QGxpbmsgTGVhZGVyTG9ja1J1bi5zaWduYWx9LCBzbyBhIHNpZ25hbC1hd2FyZSBgZm5gXG4gICAqIHJldHVybnMgYW5kIHRoZSBsb2NrIGlzIHJlbGVhc2VkIGluIHRoZSBgZmluYWxseWAgcmF0aGVyIHRoYW4gbGluZ2VyaW5nIGZvclxuICAgKiB0aGUgcmVzdCBvZiB0aGUgVFRMLlxuICAgKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKlxuICogUnVuIGBmbmAgb25seSBpZiB0aGlzIHByb2Nlc3Mgd2lucyBhIHNob3J0LWxpdmVkIGRpc3RyaWJ1dGVkIGxvY2sg4oCUIHRoZVxuICogYWNyb3NzLXBvZHMgXCJzaW5nbGUgcnVubmVyXCIgZ3VhcmQgZm9yIHBlcmlvZGljIGpvYnMgKGRpZ2VzdCBmbHVzaGVzLCBldGMuKS5cbiAqXG4gKiBVc2VzIGBTRVQga2V5IHRva2VuIE5YIFBYIHR0bGAsIHNvIGV4YWN0bHkgb25lIGhvbGRlciBydW5zIHBlciB3aW5kb3cgYW5kIHRoZVxuICogbG9jayBhdXRvLWV4cGlyZXMgaWYgdGhhdCBob2xkZXIgZGllcyBtaWQtcnVuIChubyBzdHVjayBsb2NrKS4gV2hpbGUgYGZuYFxuICogcnVucywgdGhlIGhvbGRlciBIRUFSVEJFQVRTIChjb21wYXJlLWFuZC1QRVhQSVJFIGV2ZXJ5IGB0dGxNcyAvIDNgKSwgc28gYSBydW5cbiAqIHRoYXQgb3V0bGFzdHMgYHR0bE1zYCBrZWVwcyB0aGUgbG9jayBpbnN0ZWFkIG9mIHNpbGVudGx5IGxldHRpbmcgYSBzZWNvbmQgcG9kXG4gKiBzdGFydCB0aGUgc2FtZSB3b3JrOyBhIGhlYXJ0YmVhdCB0aGF0IGZpbmRzIHRoZSBsb2NrIGdvbmUgYWJvcnRzXG4gKiBgcnVuLnNpZ25hbGAuIFRoZSBsb2NrIGlzIHJlbGVhc2VkIG9uIGNvbXBsZXRpb24sIGJ1dCBvbmx5IGlmIHdlIHN0aWxsIG93blxuICogaXQg4oCUIGEgc2xvd2VyIHByZWRlY2Vzc29yIG5ldmVyIGRlbGV0ZXMgYSBzdWNjZXNzb3IncyBsb2NrLlxuICpcbiAqIElmIFJlZGlzIGNhbid0IGJlIHJlYWNoZWQgdGhlIHJ1biBpcyBza2lwcGVkIChyZXR1cm5zIGZhbHNlKSByYXRoZXIgdGhhblxuICogcmVqZWN0aW5nIOKAlCBjYWxsZXJzIGFyZSB0aW1lcnMsIGFuZCBhIFJlZGlzIGJsaXAgbXVzdCBub3QgY3Jhc2ggdGhlIHByb2Nlc3MuXG4gKlxuICogRVZFUlkgb3V0Y29tZSBpcyBjb3VudGVkLCBiZWNhdXNlIHRoZXkgbWVhbiB2ZXJ5IGRpZmZlcmVudCB0aGluZ3MgYW5kIHRoZVxuICogZGlmZmVyZW5jZSB1c2VkIHRvIGJlIHZpc2libGUgb25seSBpbiBhIGxvZyBsaW5lOlxuICogIC0gYGxlYWRlcl9sb2NrX2FjcXVpcmVkX3RvdGFsYCDigJQgdGhpcyBwb2QgcmFuIHRoZSB3aW5kb3cuIEEgam9iIHdob3NlIGNvdW50XG4gKiAgICBzdGF5cyBmbGF0IGlzIG5vdCBydW5uaW5nIEFOWVdIRVJFLCB3aGljaCBpcyB0aGUgY29uZGl0aW9uIHdvcnRoIGFsZXJ0aW5nIG9uLlxuICogIC0gYGxlYWRlcl9sb2NrX2NvbnRlbmRlZF90b3RhbGAg4oCUIGFub3RoZXIgcG9kIGhvbGRzIGl0LiBIZWFsdGh5IGFuZCBleHBlY3RlZFxuICogICAgd2l0aCByZXBsaWNhcyA+IDE7IGV4YWN0bHkgb25lIGFjcXVpcmUgcGVyIHdpbmRvdyBhY3Jvc3MgdGhlIGZsZWV0LlxuICogIC0gYGxlYWRlcl9sb2NrX3VuYXZhaWxhYmxlX3RvdGFsYCDigJQgUmVkaXMgdW5yZWFjaGFibGUsIHNvIE5PQk9EWSByYW4gdGhpc1xuICogICAgd2luZG93LiBBIFJlZGlzIGJsaXAgc2lsZW50bHkgc3RvcHBpbmcgZXZlcnkgc3dlZXAgZmxlZXQtd2lkZSB3YXMgcHJldmlvdXNseVxuICogICAgYSBXQVJOIGxvZyBhbmQgbm90aGluZyBlbHNlLlxuICpcbiAqIEByZXR1cm5zIHRydWUgaWYgd2UgaGVsZCB0aGUgbG9jayBhbmQgcmFuIGBmbmA7IGZhbHNlIGlmIGFub3RoZXIgaG9sZGVyIGRpZCBvclxuICogICB0aGUgbG9jayBjb3VsZG4ndCBiZSB0YWtlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhMZWFkZXJMb2NrKFxuICByZWRpczogTG9ja1JlZGlzLFxuICBrZXk6IHN0cmluZyxcbiAgdHRsTXM6IG51bWJlcixcbiAgZm46IChydW46IExlYWRlckxvY2tSdW4pID0+IFByb21pc2U8dm9pZD4sXG4gIG9wdHM6IExlYWRlckxvY2tPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gQXNrZWQgdG8gc3RvcCBiZWZvcmUgd2UgZXZlbiB0cmllZDogZG9uJ3QgdGFrZSBhIGxvY2sgd2UgYXJlIGFib3V0IHRvIGRyb3AuXG4gIGlmIChvcHRzLnNpZ25hbD8uYWJvcnRlZCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHRva2VuID0gcmFuZG9tVVVJRCgpO1xuICBsZXQgYWNxdWlyZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgLy8gVGhlIGVudiBjbGllbnQgaGFzIG5vIG9mZmxpbmUgcXVldWU6IGEgU0VUIGJlZm9yZSB0aGUgZmlyc3QgY29ubmVjdGlvblxuICAgIC8vIGNvbXBsZXRlcyBpcyByZWplY3RlZCwgd2hpY2ggbWFkZSB0aGUgRklSU1QgdGljayBhZnRlciBldmVyeSBib290IGFcbiAgICAvLyBndWFyYW50ZWVkIHNraXAuIFdhaXQgKGJvdW5kZWQpIGZvciByZWFkaW5lc3MgZmlyc3QuXG4gICAgYXdhaXQgd2hlblJlZGlzUmVhZHkocmVkaXMsIE1hdGgubWluKExPQ0tfUkVBRFlfVElNRU9VVF9NUywgTWF0aC5tYXgoMSwgdHRsTXMpKSk7XG4gICAgYWNxdWlyZWQgPSBhd2FpdCByZWRpcy5zZXQoa2V5LCB0b2tlbiwgJ1BYJywgdHRsTXMsICdOWCcpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBSZWRpcyB1bnJlYWNoYWJsZSAoaW5jbHVkaW5nIGJlZm9yZSB0aGUgZmlyc3QgY29ubmVjdGlvbiBjb21wbGV0ZXMpOiBub1xuICAgIC8vIHBvZCBjYW4gcHJvdmUgaXQncyB0aGUgbGVhZGVyLCBzbyBub2JvZHkgcnVucyB0aGlzIHdpbmRvdy4gU2tpcHBpbmcgaXNcbiAgICAvLyB0aGUgc2FmZSBzaWRlIOKAlCBydW5uaW5nIGhlcmUgY291bGQgZHVwbGljYXRlIGRlc3RydWN0aXZlIHdvcmsgYWNyb3NzIHBvZHMuXG4gICAgbG9ja0xvZ2dlci53YXJuKCdMZWFkZXIgbG9jayB1bmF2YWlsYWJsZTsgc2tpcHBpbmcgdGhpcyBydW4nLCB7XG4gICAgICBrZXksIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICBlbWl0Q291bnRlcignbGVhZGVyX2xvY2tfdW5hdmFpbGFibGVfdG90YWwnLCB7IGtleSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGFjcXVpcmVkICE9PSAnT0snKSB7XG4gICAgZW1pdENvdW50ZXIoJ2xlYWRlcl9sb2NrX2NvbnRlbmRlZF90b3RhbCcsIHsga2V5IH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBlbWl0Q291bnRlcignbGVhZGVyX2xvY2tfYWNxdWlyZWRfdG90YWwnLCB7IGtleSB9KTtcblxuICBjb25zdCBsb3N0ID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAvLyBTaHV0ZG93biBpcyBtZXJnZWQgaW50byB0aGUgU0FNRSBzaWduYWwgYSBsb2NrIGxvc3MgdXNlczogZnJvbSBgZm5gJ3MgcG9pbnQgb2ZcbiAgLy8gdmlldyBib3RoIG1lYW4gXCJzdG9wIGJldHdlZW4gdW5pdHMgb2Ygd29yayBhbmQgcmV0dXJuXCIuIGBzaWduYWwucmVhc29uYCBzYXlzXG4gIC8vIHdoaWNoLiBSZWdpc3RlcmVkIHdpdGggYG9uY2VgIHNvIGEgbG9uZy1saXZlZCBjYWxsZXIgc2lnbmFsIGRvZXNuJ3QgcmV0YWluXG4gIC8vIHRoaXMgY29udHJvbGxlciBhZnRlciB0aGUgcnVuLlxuICBjb25zdCBvbkV4dGVybmFsQWJvcnQgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCFsb3N0LnNpZ25hbC5hYm9ydGVkKSBsb3N0LmFib3J0KCdzaHV0ZG93bicgc2F0aXNmaWVzIExlYWRlckxvY2tBYm9ydFJlYXNvbik7XG4gIH07XG4gIG9wdHMuc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uRXh0ZXJuYWxBYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gIGxldCBoZWFydGJlYXQ6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHJlZGlzLmV2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBldmFsRm4gPSByZWRpcy5ldmFsLmJpbmQocmVkaXMpO1xuICAgIGhlYXJ0YmVhdCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGV2YWxGbihFWFRFTkRfSUZfT1dORVIsIDEsIGtleSwgdG9rZW4sIHR0bE1zKS50aGVuKChleHRlbmRlZCkgPT4ge1xuICAgICAgICBpZiAoTnVtYmVyKGV4dGVuZGVkKSAhPT0gMSAmJiAhbG9zdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgIGxvY2tMb2dnZXIud2FybignTGVhZGVyIGxvY2sgbG9zdCBtaWQtcnVuIChhbm90aGVyIGhvbGRlciwgb3IgdGhlIGtleSBleHBpcmVkKScsIHsga2V5IH0pO1xuICAgICAgICAgIGVtaXRDb3VudGVyKCdsZWFkZXJfbG9ja19sb3N0X3RvdGFsJywgeyBrZXkgfSk7XG4gICAgICAgICAgbG9zdC5hYm9ydCgnbG9jay1sb3N0JyBzYXRpc2ZpZXMgTGVhZGVyTG9ja0Fib3J0UmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAvLyBBIGJsaXA6IHRoZSBuZXh0IGJlYXQgcmV0cmllczsgdGhlIFRUTCBzdGlsbCBjb3ZlcnMgdGhpcyBpbnRlcnZhbC5cbiAgICAgICAgbG9ja0xvZ2dlci5kZWJ1ZygnTGVhZGVyIGxvY2sgaGVhcnRiZWF0IGZhaWxlZCcsIHsga2V5LCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICB9KTtcbiAgICB9LCBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHR0bE1zIC8gMykpKTtcbiAgICBoZWFydGJlYXQudW5yZWY/LigpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBmbih7IHNpZ25hbDogbG9zdC5zaWduYWwgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGhlYXJ0YmVhdCkgY2xlYXJJbnRlcnZhbChoZWFydGJlYXQpO1xuICAgIG9wdHMuc2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uRXh0ZXJuYWxBYm9ydCk7XG4gICAgLy8gUmVsZWFzZSBvbmx5IGlmIHRoZSBsb2NrIGlzIHN0aWxsIG91cnMg4oCUIGlmIG91ciBydW4gb3ZlcnJhbiB0aGUgVFRMIGFuZFxuICAgIC8vIGFub3RoZXIgaG9sZGVyIHRvb2sgb3ZlciwgcmVsZWFzaW5nIGhlcmUgd291bGQgZnJlZSB0aGVpciBsb2NrIGVhcmx5LlxuICAgIC8vIFByZWZlciBhbiBhdG9taWMgQ0FTIChMdWEpOyBmYWxsIGJhY2sgdG8gZ2V0LXRoZW4tZGVsIGZvciBjbGllbnRzIHdpdGhvdXRcbiAgICAvLyBldmFsICh0aGUgc21hbGwgbm9uLWF0b21pYyB3aW5kb3cgaXMgVFRMLWJvdW5kZWQpLlxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHJlZGlzLmV2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXdhaXQgcmVkaXMuZXZhbChSRUxFQVNFX0lGX09XTkVSLCAxLCBrZXksIHRva2VuKTtcbiAgICAgIH0gZWxzZSBpZiAoKGF3YWl0IHJlZGlzLmdldChrZXkpKSA9PT0gdG9rZW4pIHtcbiAgICAgICAgYXdhaXQgcmVkaXMuZGVsKGtleSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBCZXN0LWVmZm9ydDogdGhlIFRUTCBleHBpcmVzIHRoZSBsb2NrIHJlZ2FyZGxlc3MuXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEEgYExvY2tSZWRpc2AgYmFja2VkIGJ5IHRoZSBzaGFyZWQgZW52IFJlZGlzIGNsaWVudCAoc2VlIGVudi1yZWRpcy50cykg4oCUIHRoZSBsZWFkZXItbG9jayBjb3VudGVycGFydCB0byBgY3JlYXRlRW52UmVkaXNBdWRpdFNwb29sYCAvXG4gKiBgY3JlYXRlRW52UmVkaXNUb2tlblJldm9jYXRpb25TdG9yZWAsIGZvciBhIHNlcnZpY2UgdGhhdCBoYXMgbm8gQnVsbE1RIGNsaWVudCB0b1xuICogYm9ycm93LiBSZXR1cm5zIGBudWxsYCB3aGVuIFJlZGlzIGlzbid0IGNvbmZpZ3VyZWQsIHNvIGEgY2FsbGVyIGNhbiBkZWdyYWRlIHRvXG4gKiBydW5uaW5nIG9uIGV2ZXJ5IHBvZCAodGhlIGF0b21pYyBndWFyZHMgaXQgd3JhcHMgbXVzdCBzdGlsbCBtYWtlIHRoYXQgc2FmZSkuXG4gKiBUaGUgY2xpZW50IGlzIGEgcmVhbCBpb3JlZGlzIGluc3RhbmNlOyBpb3JlZGlzIGV4cG9zZXMgYHNldGAvYGdldGAvYGRlbGAvYGV2YWxgLFxuICogc2F0aXNmeWluZyBgTG9ja1JlZGlzYCBpbmNsdWRpbmcgdGhlIGF0b21pYyBDQVMgcmVsZWFzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudlJlZGlzTG9jaygpOiBMb2NrUmVkaXMgfCBudWxsIHtcbiAgY29uc3QgaW5zdCA9IGNyZWF0ZUVudlJlZGlzQ2xpZW50PExvY2tSZWRpcz4oJ2xlYWRlci1sb2NrJyk7XG4gIGlmIChpbnN0KSBsb2NrTG9nZ2VyLmluZm8oJ1JlZGlzIGxlYWRlci1sb2NrIGNsaWVudCBpbml0aWFsaXplZCcpO1xuICByZXR1cm4gaW5zdDtcbn1cblxuLy8gT25lIGVudi1jb25maWd1cmVkIGxvY2sgY2xpZW50IHBlciBwcm9jZXNzLCBzaGFyZWQgYnkgZXZlcnkgc2NoZWR1bGVyIHRoYXRcbi8vIGFza3MgZm9yIGEgbG9jayB3aXRob3V0IHN1cHBseWluZyBpdHMgb3duIGNsaWVudC4gUmVmZXJlbmNlLWNvdW50ZWQgc28gdGhlXG4vLyBjb25uZWN0aW9uIGlzIGNsb3NlZCB3aGVuIHRoZSBsYXN0IHN1Y2ggc2NoZWR1bGVyIHN0b3BzLlxubGV0IHNoYXJlZExvY2s6IExvY2tSZWRpcyB8IG51bGwgfCB1bmRlZmluZWQ7XG5sZXQgc2hhcmVkTG9ja1VzZXJzID0gMDtcblxuLyoqIFRha2UgYSByZWZlcmVuY2Ugb24gdGhlIHNoYXJlZCBlbnYgbG9jayBjbGllbnQgKGBudWxsYCB3aGVuIFJlZGlzIGlzbid0IGNvbmZpZ3VyZWQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjcXVpcmVTaGFyZWRFbnZMb2NrKCk6IExvY2tSZWRpcyB8IG51bGwge1xuICBpZiAoc2hhcmVkTG9jayA9PT0gdW5kZWZpbmVkKSBzaGFyZWRMb2NrID0gY3JlYXRlRW52UmVkaXNMb2NrKCk7XG4gIHNoYXJlZExvY2tVc2VycysrO1xuICByZXR1cm4gc2hhcmVkTG9jaztcbn1cblxuLyoqIERyb3AgYSByZWZlcmVuY2UgdGFrZW4gYnkge0BsaW5rIGFjcXVpcmVTaGFyZWRFbnZMb2NrfTsgdGhlIGxhc3Qgb25lIGNsb3NlcyB0aGUgY2xpZW50LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbGVhc2VTaGFyZWRFbnZMb2NrKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoc2hhcmVkTG9ja1VzZXJzID09PSAwKSByZXR1cm47XG4gIHNoYXJlZExvY2tVc2Vycy0tO1xuICBpZiAoc2hhcmVkTG9ja1VzZXJzID4gMCkgcmV0dXJuO1xuICBjb25zdCBjbGllbnQgPSBzaGFyZWRMb2NrO1xuICBzaGFyZWRMb2NrID0gdW5kZWZpbmVkO1xuICBhd2FpdCBjbG9zZUxlYWRlckxvY2soY2xpZW50KTtcbn1cbiJdfQ==
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZGVyLWxvY2suanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9sZWFkZXItbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7QUFvQi9DOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWUsQ0FBQyxLQUFtQztJQUN2RSxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU87SUFDbkIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUFDLE9BQU87UUFBQyxDQUFDO0lBQ3ZFLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCw2QkFBNkI7SUFDL0IsQ0FBQztJQUNELElBQUksQ0FBQztRQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQUMsQ0FBQztJQUFDLE1BQU0sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVEO2lFQUNpRTtBQUNqRSxNQUFNLGdCQUFnQixHQUNwQixtR0FBbUcsQ0FBQztBQUV0Ryw4REFBOEQ7QUFDOUQsTUFBTSxlQUFlLEdBQ25CLGdIQUFnSCxDQUFDO0FBRW5ILHFGQUFxRjtBQUNyRixNQUFNLHFCQUFxQixHQUFH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QUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgY3JlYXRlRW52UmVkaXNDbGllbnQsIHdoZW5SZWRpc1JlYWR5LCB0eXBlIFJlYWR5QXdhcmVSZWRpcyB9IGZyb20gJy4vZW52LXJlZGlzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9ja0xvZ2dlciA9IGNyZWF0ZUxvZ2dlcignbGVhZGVyLWxvY2snKTtcblxuLyoqXG4gKiBNaW5pbWFsIFJlZGlzIGNsaWVudCBzdXJmYWNlIG5lZWRlZCBmb3IgYSBsZWFkZXIgbG9jayAoYSBzdWJzZXQgb2YgaW9yZWRpcykuXG4gKiBgc2V0YCBpcyB2YXJpYWRpYyBzbyBjYWxsZXJzIGNhbiBwYXNzIGAnUFgnLCB0dGwsICdOWCdgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2tSZWRpcyBleHRlbmRzIFJlYWR5QXdhcmVSZWRpcyB7XG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgZGVsKC4uLmtleXM6IHN0cmluZ1tdKTogUHJvbWlzZTxudW1iZXI+O1xuICAvKiogT3B0aW9uYWwgTHVhIGV2YWwgKGlvcmVkaXMgaGFzIGl0KS4gV2hlbiBwcmVzZW50LCByZWxlYXNlIHVzZXMgYW4gYXRvbWljXG4gICAqICBjb21wYXJlLWFuZC1kZWxldGUgc28gYSBsYXBzZWQgaG9sZGVyIGNhbid0IGZyZWUgYSBzdWNjZXNzb3IncyBsb2NrLiAqL1xuICBldmFsPyhzY3JpcHQ6IHN0cmluZywgbnVtS2V5czogbnVtYmVyLCAuLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHVua25vd24+O1xuICAvKiogR3JhY2VmdWwgY2xvc2UgKGlvcmVkaXMgYHF1aXRgKSDigJQgY2FsbGVkIG9uIHNodXRkb3duIHNvIHRoZSBjb25uZWN0aW9uXG4gICAqICBkb2Vzbid0IGtlZXAgdGhlIGV2ZW50IGxvb3AgYWxpdmUuICovXG4gIHF1aXQ/KCk6IFByb21pc2U8dW5rbm93bj47XG4gIC8qKiBJbW1lZGlhdGUgY2xvc2UgKGlvcmVkaXMgYGRpc2Nvbm5lY3RgKSDigJQgdGhlIGZhbGxiYWNrIGlmIGBxdWl0YCBmYWlscy4gKi9cbiAgZGlzY29ubmVjdD8oKTogdm9pZDtcbn1cblxuLyoqXG4gKiBCZXN0LWVmZm9ydCBjbG9zZSBvZiBhIGxlYWRlci1sb2NrIFJlZGlzIGNsaWVudCBvbiBzaHV0ZG93bi4gUHJlZmVycyBncmFjZWZ1bFxuICogYHF1aXRgOyBmYWxscyBiYWNrIHRvIGBkaXNjb25uZWN0YC4gTm8tb3AgZm9yIGEgbnVsbCBjbGllbnQgLyBvbmUgd2l0aG91dFxuICogZWl0aGVyIG1ldGhvZC4gTmV2ZXIgdGhyb3dzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xvc2VMZWFkZXJMb2NrKHJlZGlzOiBMb2NrUmVkaXMgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghcmVkaXMpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHJlZGlzLnF1aXQgPT09ICdmdW5jdGlvbicpIHsgYXdhaXQgcmVkaXMucXVpdCgpOyByZXR1cm47IH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIGRpc2Nvbm5lY3RcbiAgfVxuICB0cnkgeyByZWRpcy5kaXNjb25uZWN0Py4oKTsgfSBjYXRjaCB7IC8qIGJlc3QtZWZmb3J0ICovIH1cbn1cblxuLyoqIEF0b21pYyBcImRlbGV0ZSBvbmx5IGlmIEkgc3RpbGwgb3duIGl0XCIg4oCUIGNsb3NlcyB0aGUgZ2V0LXRoZW4tZGVsIHJhY2Ugd2hlcmVcbiAqICB0aGUgbG9jayBleHBpcmVzIGFuZCBpcyByZS1hY3F1aXJlZCBiZXR3ZWVuIHRoZSB0d28gY2FsbHMuICovXG5jb25zdCBSRUxFQVNFX0lGX09XTkVSID1cbiAgJ2lmIHJlZGlzLmNhbGwoXCJnZXRcIiwgS0VZU1sxXSkgPT0gQVJHVlsxXSB0aGVuIHJldHVybiByZWRpcy5jYWxsKFwiZGVsXCIsIEtFWVNbMV0pIGVsc2UgcmV0dXJuIDAgZW5kJztcblxuLyoqIEF0b21pYyBcImV4dGVuZCBvbmx5IGlmIEkgc3RpbGwgb3duIGl0XCIg4oCUIHRoZSBoZWFydGJlYXQuICovXG5jb25zdCBFWFRFTkRfSUZfT1dORVIgPVxuICAnaWYgcmVkaXMuY2FsbChcImdldFwiLCBLRVlTWzFdKSA9PSBBUkdWWzFdIHRoZW4gcmV0dXJuIHJlZGlzLmNhbGwoXCJwZXhwaXJlXCIsIEtFWVNbMV0sIEFSR1ZbMl0pIGVsc2UgcmV0dXJuIDAgZW5kJztcblxuLyoqIExvbmdlc3QgYSBydW4gd2FpdHMgZm9yIGEgbm90LXlldC1jb25uZWN0ZWQgY2xpZW50IGJlZm9yZSBza2lwcGluZyB0aGUgd2luZG93LiAqL1xuY29uc3QgTE9DS19SRUFEWV9USU1FT1VUX01TID0gMTBfMDAwO1xuXG4vKipcbiAqIERlZmF1bHQgbG9jayBsaWZldGltZSDigJQgYSBDUkFTSC1SRUNPVkVSWSB3aW5kb3csIG5vdCBhIHJ1bi1kdXJhdGlvbiBjb3Zlci5cbiAqXG4gKiBUaGUgaG9sZGVyIGhlYXJ0YmVhdHMgKGNvbXBhcmUtYW5kLVBFWFBJUkUgZXZlcnkgYHR0bE1zIC8gM2ApIGZvciBhcyBsb25nIGFzXG4gKiBgZm5gIHJ1bnMsIHNvIGEgc2l4LWhvdXIgam9iIGhvbGRzIGEgdHdvLW1pbnV0ZSBsb2NrIHBlcmZlY3RseSB3ZWxsLiBXaGF0IHRoZVxuICogVFRMIGFjdHVhbGx5IGRlY2lkZXMgaXMgaG93IGxvbmcgYSBqb2Igc3RheXMgQkxPQ0tFRCBhZnRlciB0aGUgcG9kIGhvbGRpbmcgaXRcbiAqIGRpZXMgd2l0aG91dCByZWxlYXNpbmcg4oCUIHRoZSBrZXkgc2ltcGx5IHNpdHMgdGhlcmUgdW50aWwgaXQgZXhwaXJlcy4gU2l6aW5nIHRoZVxuICogVFRMIHRvIHRoZSBleHBlY3RlZCBydW4gdGltZSAod2hpY2ggaXMgd2hhdCBzZXZlcmFsIGNhbGxlcnMgdXNlZCB0byBkbykgdHVybmVkIGFcbiAqIGNyYXNoZWQgcG9kIGludG8gaG91cnMgb2Ygc2lsZW50IGluYWN0aXZpdHkuXG4gKlxuICogVHdvIG1pbnV0ZXMgbGVhdmVzIHRocmVlIG1pc3NlZCBoZWFydGJlYXRzIG9mIHNsYWNrLCBzbyBhbiBldmVudC1sb29wIHN0YWxsIG9yIGFcbiAqIGJyaWVmIFJlZGlzIGJsaXAgZG9lcyBub3QgaGFuZCB0aGUgbG9jayB0byBhIHNlY29uZCBwb2QgbWlkLXJ1biwgd2hpbGUgcmVjb3ZlcnlcbiAqIGFmdGVyIGEgcmVhbCBjcmFzaCBpcyBib3VuZGVkIGF0IHR3byBtaW51dGVzLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9MRUFERVJfTE9DS19UVExfTVMgPSAxMjBfMDAwO1xuXG4vKipcbiAqIFRoZSBvbmUgd2F5IHRvIGJ1aWxkIGEgbGVhZGVyLWxvY2sga2V5OiBgPHNlcnZpY2U+Ojxqb2I+OmxlYWRlcmAuXG4gKlxuICogRm91ciBjb252ZW50aW9ucyBoYWQgZ3Jvd24gdXAg4oCUIGBwbHVnaW46dnVsbi1yZXNjYW46bGVhZGVyYCxcbiAqIGBwbGF0Zm9ybTpsZWFkZXI6b3JnLXB1cmdlYCwgYSBiYXJlIGBlY29zeXN0ZW0tc3RhdHM6bGVhZGVyYCwgYW5kIGJpbGxpbmcnc1xuICogdW5uYW1lc3BhY2VkIGBzdWJzY3JpcHRpb24tbGlmZWN5Y2xlYCDigJQgd2hpY2ggbWVhbnQgbm8gc2luZ2xlIGdsb2IgZm91bmQgZXZlcnlcbiAqIGxvY2suIGBLRVlTICcqOmxlYWRlcidgIG1pc3NlZCBiaWxsaW5nJ3MgdGhyZWUgZW50aXJlbHksIHNvIGFuIG9wZXJhdG9yIGFza2luZ1xuICogXCJ3aGF0IGlzIGhlbGQgcmlnaHQgbm93XCIgZ290IGEgcGFydGlhbCBhbnN3ZXIuIFRoZSBlbnYgUmVkaXMgY2xpZW50IHNldHMgbm9cbiAqIGBrZXlQcmVmaXhgLCBzbyB0aGVzZSBzaGFyZSBvbmUgZmxhdCBrZXlzcGFjZSB3aXRoIGNhY2hlLCBCdWxsTVEgYW5kIHNwb29sIGtleXM7XG4gKiB0aGUgYDxzZXJ2aWNlPjpgIHNlZ21lbnQgaXMgd2hhdCBrZWVwcyB0aGVtIGFwYXJ0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVhZGVyTG9ja0tleShzZXJ2aWNlOiBzdHJpbmcsIGpvYjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3NlcnZpY2V9OiR7am9ifTpsZWFkZXJgO1xufVxuXG4vKiogV2h5IGEgbGVhZGVyLWxvY2tlZCBydW4gd2FzIHRvbGQgdG8gc3RvcC4gKi9cbmV4cG9ydCB0eXBlIExlYWRlckxvY2tBYm9ydFJlYXNvbiA9ICdsb2NrLWxvc3QnIHwgJ3NodXRkb3duJztcblxuLyoqIFdoYXQgYSBsZWFkZXItbG9ja2VkIHJ1biBpcyB0b2xkIHdoaWxlIGl0IHJ1bnMuICovXG5leHBvcnQgaW50ZXJmYWNlIExlYWRlckxvY2tSdW4ge1xuICAvKipcbiAgICogQWJvcnRlZCB3aGVuIHRoZSBsb2NrIGlzIExPU1QgbWlkLXJ1biAoYSBoZWFydGJlYXQgZm91bmQgYW5vdGhlciBob2xkZXIsIG9yXG4gICAqIHRoZSBrZXkgZ29uZSksIG9yIHdoZW4gdGhlIGNhbGxlciBpcyBTSFVUVElORyBET1dOLiBMb25nIHJ1bnMgbXVzdCBjaGVjayBpdFxuICAgKiBiZXR3ZWVuIHVuaXRzIG9mIHdvcmsgYW5kIHJldHVybjogcGFzdCBhIGxvY2sgbG9zcyBhbm90aGVyIHBvZCBtYXkgYmUgZG9pbmdcbiAgICogdGhlIHNhbWUgd29yaywgYW5kIG9uIHNodXRkb3duIHJldHVybmluZyBwcm9tcHRseSBpcyB3aGF0IHJlbGVhc2VzIHRoZSBsb2NrXG4gICAqIGluc3RlYWQgb2YgbGVhdmluZyBpdCB0byBleHBpcmUuXG4gICAqXG4gICAqIGBzaWduYWwucmVhc29uYCBpcyBhIHtAbGluayBMZWFkZXJMb2NrQWJvcnRSZWFzb259LlxuICAgKi9cbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqIENhbGxlci1zdXBwbGllZCBjb250cm9scyBmb3Ige0BsaW5rIHdpdGhMZWFkZXJMb2NrfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGVhZGVyTG9ja09wdGlvbnMge1xuICAvKipcbiAgICogQWJvcnRlZCBieSB0aGUgY2FsbGVyIHRvIGFzayBhIHJ1bm5pbmcgam9iIHRvIHN0b3Ag4oCUIGEgc2NoZWR1bGVyJ3MgYHN0b3AoKWBcbiAgICogb24gc2h1dGRvd24uIE1lcmdlZCBpbnRvIHtAbGluayBMZWFkZXJMb2NrUnVuLnNpZ25hbH0sIHNvIGEgc2lnbmFsLWF3YXJlIGBmbmBcbiAgICogcmV0dXJucyBhbmQgdGhlIGxvY2sgaXMgcmVsZWFzZWQgaW4gdGhlIGBmaW5hbGx5YCByYXRoZXIgdGhhbiBsaW5nZXJpbmcgZm9yXG4gICAqIHRoZSByZXN0IG9mIHRoZSBUVEwuXG4gICAqL1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqXG4gKiBSdW4gYGZuYCBvbmx5IGlmIHRoaXMgcHJvY2VzcyB3aW5zIGEgc2hvcnQtbGl2ZWQgZGlzdHJpYnV0ZWQgbG9jayDigJQgdGhlXG4gKiBhY3Jvc3MtcG9kcyBcInNpbmdsZSBydW5uZXJcIiBndWFyZCBmb3IgcGVyaW9kaWMgam9icyAoZGlnZXN0IGZsdXNoZXMsIGV0Yy4pLlxuICpcbiAqIFVzZXMgYFNFVCBrZXkgdG9rZW4gTlggUFggdHRsYCwgc28gZXhhY3RseSBvbmUgaG9sZGVyIHJ1bnMgcGVyIHdpbmRvdyBhbmQgdGhlXG4gKiBsb2NrIGF1dG8tZXhwaXJlcyBpZiB0aGF0IGhvbGRlciBkaWVzIG1pZC1ydW4gKG5vIHN0dWNrIGxvY2spLiBXaGlsZSBgZm5gXG4gKiBydW5zLCB0aGUgaG9sZGVyIEhFQVJUQkVBVFMgKGNvbXBhcmUtYW5kLVBFWFBJUkUgZXZlcnkgYHR0bE1zIC8gM2ApLCBzbyBhIHJ1blxuICogdGhhdCBvdXRsYXN0cyBgdHRsTXNgIGtlZXBzIHRoZSBsb2NrIGluc3RlYWQgb2Ygc2lsZW50bHkgbGV0dGluZyBhIHNlY29uZCBwb2RcbiAqIHN0YXJ0IHRoZSBzYW1lIHdvcms7IGEgaGVhcnRiZWF0IHRoYXQgZmluZHMgdGhlIGxvY2sgZ29uZSBhYm9ydHNcbiAqIGBydW4uc2lnbmFsYC4gVGhlIGxvY2sgaXMgcmVsZWFzZWQgb24gY29tcGxldGlvbiwgYnV0IG9ubHkgaWYgd2Ugc3RpbGwgb3duXG4gKiBpdCDigJQgYSBzbG93ZXIgcHJlZGVjZXNzb3IgbmV2ZXIgZGVsZXRlcyBhIHN1Y2Nlc3NvcidzIGxvY2suXG4gKlxuICogSWYgUmVkaXMgY2FuJ3QgYmUgcmVhY2hlZCB0aGUgcnVuIGlzIHNraXBwZWQgKHJldHVybnMgZmFsc2UpIHJhdGhlciB0aGFuXG4gKiByZWplY3Rpbmcg4oCUIGNhbGxlcnMgYXJlIHRpbWVycywgYW5kIGEgUmVkaXMgYmxpcCBtdXN0IG5vdCBjcmFzaCB0aGUgcHJvY2Vzcy5cbiAqXG4gKiBFVkVSWSBvdXRjb21lIGlzIGNvdW50ZWQsIGJlY2F1c2UgdGhleSBtZWFuIHZlcnkgZGlmZmVyZW50IHRoaW5ncyBhbmQgdGhlXG4gKiBkaWZmZXJlbmNlIHVzZWQgdG8gYmUgdmlzaWJsZSBvbmx5IGluIGEgbG9nIGxpbmU6XG4gKiAgLSBgbGVhZGVyX2xvY2tfYWNxdWlyZWRfdG90YWxgIOKAlCB0aGlzIHBvZCByYW4gdGhlIHdpbmRvdy4gQSBqb2Igd2hvc2UgY291bnRcbiAqICAgIHN0YXlzIGZsYXQgaXMgbm90IHJ1bm5pbmcgQU5ZV0hFUkUsIHdoaWNoIGlzIHRoZSBjb25kaXRpb24gd29ydGggYWxlcnRpbmcgb24uXG4gKiAgLSBgbGVhZGVyX2xvY2tfY29udGVuZGVkX3RvdGFsYCDigJQgYW5vdGhlciBwb2QgaG9sZHMgaXQuIEhlYWx0aHkgYW5kIGV4cGVjdGVkXG4gKiAgICB3aXRoIHJlcGxpY2FzID4gMTsgZXhhY3RseSBvbmUgYWNxdWlyZSBwZXIgd2luZG93IGFjcm9zcyB0aGUgZmxlZXQuXG4gKiAgLSBgbGVhZGVyX2xvY2tfdW5hdmFpbGFibGVfdG90YWxgIOKAlCBSZWRpcyB1bnJlYWNoYWJsZSwgc28gTk9CT0RZIHJhbiB0aGlzXG4gKiAgICB3aW5kb3cuIEEgUmVkaXMgYmxpcCBzaWxlbnRseSBzdG9wcGluZyBldmVyeSBzd2VlcCBmbGVldC13aWRlIHdhcyBwcmV2aW91c2x5XG4gKiAgICBhIFdBUk4gbG9nIGFuZCBub3RoaW5nIGVsc2UuXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiB3ZSBoZWxkIHRoZSBsb2NrIGFuZCByYW4gYGZuYDsgZmFsc2UgaWYgYW5vdGhlciBob2xkZXIgZGlkIG9yXG4gKiAgIHRoZSBsb2NrIGNvdWxkbid0IGJlIHRha2VuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aExlYWRlckxvY2soXG4gIHJlZGlzOiBMb2NrUmVkaXMsXG4gIGtleTogc3RyaW5nLFxuICB0dGxNczogbnVtYmVyLFxuICBmbjogKHJ1bjogTGVhZGVyTG9ja1J1bikgPT4gUHJvbWlzZTx2b2lkPixcbiAgb3B0czogTGVhZGVyTG9ja09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAvLyBBc2tlZCB0byBzdG9wIGJlZm9yZSB3ZSBldmVuIHRyaWVkOiBkb24ndCB0YWtlIGEgbG9jayB3ZSBhcmUgYWJvdXQgdG8gZHJvcC5cbiAgaWYgKG9wdHMuc2lnbmFsPy5hYm9ydGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgdG9rZW4gPSByYW5kb21VVUlEKCk7XG4gIGxldCBhY3F1aXJlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICAvLyBUaGUgZW52IGNsaWVudCBoYXMgbm8gb2ZmbGluZSBxdWV1ZTogYSBTRVQgYmVmb3JlIHRoZSBmaXJzdCBjb25uZWN0aW9uXG4gICAgLy8gY29tcGxldGVzIGlzIHJlamVjdGVkLCB3aGljaCBtYWRlIHRoZSBGSVJTVCB0aWNrIGFmdGVyIGV2ZXJ5IGJvb3QgYVxuICAgIC8vIGd1YXJhbnRlZWQgc2tpcC4gV2FpdCAoYm91bmRlZCkgZm9yIHJlYWRpbmVzcyBmaXJzdC5cbiAgICBhd2FpdCB3aGVuUmVkaXNSZWFkeShyZWRpcywgTWF0aC5taW4oTE9DS19SRUFEWV9USU1FT1VUX01TLCBNYXRoLm1heCgxLCB0dGxNcykpKTtcbiAgICBhY3F1aXJlZCA9IGF3YWl0IHJlZGlzLnNldChrZXksIHRva2VuLCAnUFgnLCB0dGxNcywgJ05YJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFJlZGlzIHVucmVhY2hhYmxlIChpbmNsdWRpbmcgYmVmb3JlIHRoZSBmaXJzdCBjb25uZWN0aW9uIGNvbXBsZXRlcyk6IG5vXG4gICAgLy8gcG9kIGNhbiBwcm92ZSBpdCdzIHRoZSBsZWFkZXIsIHNvIG5vYm9keSBydW5zIHRoaXMgd2luZG93LiBTa2lwcGluZyBpc1xuICAgIC8vIHRoZSBzYWZlIHNpZGUg4oCUIHJ1bm5pbmcgaGVyZSBjb3VsZCBkdXBsaWNhdGUgZGVzdHJ1Y3RpdmUgd29yayBhY3Jvc3MgcG9kcy5cbiAgICBsb2NrTG9nZ2VyLndhcm4oJ0xlYWRlciBsb2NrIHVuYXZhaWxhYmxlOyBza2lwcGluZyB0aGlzIHJ1bicsIHtcbiAgICAgIGtleSwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpLFxuICAgIH0pO1xuICAgIGVtaXRDb3VudGVyKCdsZWFkZXJfbG9ja191bmF2YWlsYWJsZV90b3RhbCcsIHsga2V5IH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYWNxdWlyZWQgIT09ICdPSycpIHtcbiAgICBlbWl0Q291bnRlcignbGVhZGVyX2xvY2tfY29udGVuZGVkX3RvdGFsJywgeyBrZXkgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGVtaXRDb3VudGVyKCdsZWFkZXJfbG9ja19hY3F1aXJlZF90b3RhbCcsIHsga2V5IH0pO1xuXG4gIGNvbnN0IGxvc3QgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIC8vIFNodXRkb3duIGlzIG1lcmdlZCBpbnRvIHRoZSBTQU1FIHNpZ25hbCBhIGxvY2sgbG9zcyB1c2VzOiBmcm9tIGBmbmAncyBwb2ludCBvZlxuICAvLyB2aWV3IGJvdGggbWVhbiBcInN0b3AgYmV0d2VlbiB1bml0cyBvZiB3b3JrIGFuZCByZXR1cm5cIi4gYHNpZ25hbC5yZWFzb25gIHNheXNcbiAgLy8gd2hpY2guIFJlZ2lzdGVyZWQgd2l0aCBgb25jZWAgc28gYSBsb25nLWxpdmVkIGNhbGxlciBzaWduYWwgZG9lc24ndCByZXRhaW5cbiAgLy8gdGhpcyBjb250cm9sbGVyIGFmdGVyIHRoZSBydW4uXG4gIGNvbnN0IG9uRXh0ZXJuYWxBYm9ydCA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIWxvc3Quc2lnbmFsLmFib3J0ZWQpIGxvc3QuYWJvcnQoJ3NodXRkb3duJyBzYXRpc2ZpZXMgTGVhZGVyTG9ja0Fib3J0UmVhc29uKTtcbiAgfTtcbiAgb3B0cy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25FeHRlcm5hbEFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgbGV0IGhlYXJ0YmVhdDogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgcmVkaXMuZXZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGV2YWxGbiA9IHJlZGlzLmV2YWwuYmluZChyZWRpcyk7XG4gICAgaGVhcnRiZWF0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgZXZhbEZuKEVYVEVORF9JRl9PV05FUiwgMSwga2V5LCB0b2tlbiwgdHRsTXMpLnRoZW4oKGV4dGVuZGVkKSA9PiB7XG4gICAgICAgIGlmIChOdW1iZXIoZXh0ZW5kZWQpICE9PSAxICYmICFsb3N0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgbG9ja0xvZ2dlci53YXJuKCdMZWFkZXIgbG9jayBsb3N0IG1pZC1ydW4gKGFub3RoZXIgaG9sZGVyLCBvciB0aGUga2V5IGV4cGlyZWQpJywgeyBrZXkgfSk7XG4gICAgICAgICAgZW1pdENvdW50ZXIoJ2xlYWRlcl9sb2NrX2xvc3RfdG90YWwnLCB7IGtleSB9KTtcbiAgICAgICAgICBsb3N0LmFib3J0KCdsb2NrLWxvc3QnIHNhdGlzZmllcyBMZWFkZXJMb2NrQWJvcnRSZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIC8vIEEgYmxpcDogdGhlIG5leHQgYmVhdCByZXRyaWVzOyB0aGUgVFRMIHN0aWxsIGNvdmVycyB0aGlzIGludGVydmFsLlxuICAgICAgICBsb2NrTG9nZ2VyLmRlYnVnKCdMZWFkZXIgbG9jayBoZWFydGJlYXQgZmFpbGVkJywgeyBrZXksIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICAgIH0pO1xuICAgIH0sIE1hdGgubWF4KDEsIE1hdGguZmxvb3IodHRsTXMgLyAzKSkpO1xuICAgIGhlYXJ0YmVhdC51bnJlZj8uKCk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGZuKHsgc2lnbmFsOiBsb3N0LnNpZ25hbCB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoaGVhcnRiZWF0KSBjbGVhckludGVydmFsKGhlYXJ0YmVhdCk7XG4gICAgb3B0cy5zaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25FeHRlcm5hbEFib3J0KTtcbiAgICAvLyBSZWxlYXNlIG9ubHkgaWYgdGhlIGxvY2sgaXMgc3RpbGwgb3VycyDigJQgaWYgb3VyIHJ1biBvdmVycmFuIHRoZSBUVEwgYW5kXG4gICAgLy8gYW5vdGhlciBob2xkZXIgdG9vayBvdmVyLCByZWxlYXNpbmcgaGVyZSB3b3VsZCBmcmVlIHRoZWlyIGxvY2sgZWFybHkuXG4gICAgLy8gUHJlZmVyIGFuIGF0b21pYyBDQVMgKEx1YSk7IGZhbGwgYmFjayB0byBnZXQtdGhlbi1kZWwgZm9yIGNsaWVudHMgd2l0aG91dFxuICAgIC8vIGV2YWwgKHRoZSBzbWFsbCBub24tYXRvbWljIHdpbmRvdyBpcyBUVEwtYm91bmRlZCkuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgcmVkaXMuZXZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhd2FpdCByZWRpcy5ldmFsKFJFTEVBU0VfSUZfT1dORVIsIDEsIGtleSwgdG9rZW4pO1xuICAgICAgfSBlbHNlIGlmICgoYXdhaXQgcmVkaXMuZ2V0KGtleSkpID09PSB0b2tlbikge1xuICAgICAgICBhd2FpdCByZWRpcy5kZWwoa2V5KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEJlc3QtZWZmb3J0OiB0aGUgVFRMIGV4cGlyZXMgdGhlIGxvY2sgcmVnYXJkbGVzcy5cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQSBgTG9ja1JlZGlzYCBiYWNrZWQgYnkgdGhlIHNoYXJlZCBlbnYgUmVkaXMgY2xpZW50IChzZWUgZW52LXJlZGlzLnRzKSDigJQgdGhlIGxlYWRlci1sb2NrIGNvdW50ZXJwYXJ0IHRvIGBjcmVhdGVFbnZSZWRpc0F1ZGl0U3Bvb2xgIC9cbiAqIGBjcmVhdGVFbnZSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlYCwgZm9yIGEgc2VydmljZSB0aGF0IGhhcyBubyBCdWxsTVEgY2xpZW50IHRvXG4gKiBib3Jyb3cuIFJldHVybnMgYG51bGxgIHdoZW4gUmVkaXMgaXNuJ3QgY29uZmlndXJlZCwgc28gYSBjYWxsZXIgY2FuIGRlZ3JhZGUgdG9cbiAqIHJ1bm5pbmcgb24gZXZlcnkgcG9kICh0aGUgYXRvbWljIGd1YXJkcyBpdCB3cmFwcyBtdXN0IHN0aWxsIG1ha2UgdGhhdCBzYWZlKS5cbiAqIFRoZSBjbGllbnQgaXMgYSByZWFsIGlvcmVkaXMgaW5zdGFuY2U7IGlvcmVkaXMgZXhwb3NlcyBgc2V0YC9gZ2V0YC9gZGVsYC9gZXZhbGAsXG4gKiBzYXRpc2Z5aW5nIGBMb2NrUmVkaXNgIGluY2x1ZGluZyB0aGUgYXRvbWljIENBUyByZWxlYXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW52UmVkaXNMb2NrKCk6IExvY2tSZWRpcyB8IG51bGwge1xuICBjb25zdCBpbnN0ID0gY3JlYXRlRW52UmVkaXNDbGllbnQ8TG9ja1JlZGlzPignbGVhZGVyLWxvY2snKTtcbiAgaWYgKGluc3QpIGxvY2tMb2dnZXIuaW5mbygnUmVkaXMgbGVhZGVyLWxvY2sgY2xpZW50IGluaXRpYWxpemVkJyk7XG4gIHJldHVybiBpbnN0O1xufVxuXG4vLyBPbmUgZW52LWNvbmZpZ3VyZWQgbG9jayBjbGllbnQgcGVyIHByb2Nlc3MsIHNoYXJlZCBieSBldmVyeSBzY2hlZHVsZXIgdGhhdFxuLy8gYXNrcyBmb3IgYSBsb2NrIHdpdGhvdXQgc3VwcGx5aW5nIGl0cyBvd24gY2xpZW50LiBSZWZlcmVuY2UtY291bnRlZCBzbyB0aGVcbi8vIGNvbm5lY3Rpb24gaXMgY2xvc2VkIHdoZW4gdGhlIGxhc3Qgc3VjaCBzY2hlZHVsZXIgc3RvcHMuXG5sZXQgc2hhcmVkTG9jazogTG9ja1JlZGlzIHwgbnVsbCB8IHVuZGVmaW5lZDtcbmxldCBzaGFyZWRMb2NrVXNlcnMgPSAwO1xuXG4vKiogVGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgc2hhcmVkIGVudiBsb2NrIGNsaWVudCAoYG51bGxgIHdoZW4gUmVkaXMgaXNuJ3QgY29uZmlndXJlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gYWNxdWlyZVNoYXJlZEVudkxvY2soKTogTG9ja1JlZGlzIHwgbnVsbCB7XG4gIGlmIChzaGFyZWRMb2NrID09PSB1bmRlZmluZWQpIHNoYXJlZExvY2sgPSBjcmVhdGVFbnZSZWRpc0xvY2soKTtcbiAgc2hhcmVkTG9ja1VzZXJzKys7XG4gIHJldHVybiBzaGFyZWRMb2NrO1xufVxuXG4vKiogRHJvcCBhIHJlZmVyZW5jZSB0YWtlbiBieSB7QGxpbmsgYWNxdWlyZVNoYXJlZEVudkxvY2t9OyB0aGUgbGFzdCBvbmUgY2xvc2VzIHRoZSBjbGllbnQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsZWFzZVNoYXJlZEVudkxvY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChzaGFyZWRMb2NrVXNlcnMgPT09IDApIHJldHVybjtcbiAgc2hhcmVkTG9ja1VzZXJzLS07XG4gIGlmIChzaGFyZWRMb2NrVXNlcnMgPiAwKSByZXR1cm47XG4gIGNvbnN0IGNsaWVudCA9IHNoYXJlZExvY2s7XG4gIHNoYXJlZExvY2sgPSB1bmRlZmluZWQ7XG4gIGF3YWl0IGNsb3NlTGVhZGVyTG9jayhjbGllbnQpO1xufVxuIl19
@@ -120,4 +120,4 @@ export function createChannelRegistry(channels) {
120
120
  const byName = new Map(channels.map((c) => [c.channel, c]));
121
121
  return (channel) => byName.get(channel) ?? null;
122
122
  }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNoYW5uZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL25vdGlmaWNhdGlvbi1jaGFubmVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBdUU3Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLElBQUksR0FBNkIsRUFBRTtJQUVuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4RCxPQUFPO1FBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUztRQUMvQixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTTtZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUM7WUFDakUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBMkIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztZQUMvRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsVUFBVSxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekcsQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUksR0FBRyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO29CQUN6QyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxPQUFPO29CQUNQLElBQUk7b0JBQ0osTUFBTTtvQkFDTixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztpQkFDMUIsQ0FBQyxDQUFDO2dCQUNILElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNwQixPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQztnQkFDckYsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0RixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQTRCRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLElBQXlCO0lBRXpCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDLENBQUMsa0NBQWtDO0lBRTVFLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUU7UUFDNUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUM5QixJQUFJLEdBQUcsSUFBSSxHQUFHO2dCQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsT0FBTyxFQUFFLE9BQU87UUFDaEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTTtZQUN2QiwwRUFBMEU7WUFDMUUsbURBQW1EO1lBQ25ELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUNwQyxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQy9ELENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzdHLElBQUksU0FBUyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDckMsQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQzNCLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSztvQkFDaEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxjQUFjO29CQUN6QixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJO29CQUN2QyxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87b0JBQ3BCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtpQkFDZixDQUFDLENBQUM7Z0JBQ0gseUVBQXlFO2dCQUN6RSxJQUFJLElBQUksSUFBSSxTQUFTO29CQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLENBQUM7WUFDekUsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pELENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxRQUFrQztJQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELE9BQU8sQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTaGFyZWQgbm90aWZpY2F0aW9uLWNoYW5uZWwgY29udHJhY3QgKyB0aGUgdHJhbnNwb3J0cyB0aGF0IGFyZSBnZW51aW5lbHkgdGhlXG4gKiBzYW1lIGV2ZXJ5d2hlcmUuXG4gKlxuICogVHdvIHNlcnZpY2VzIGhhZCBncm93biB0aGVpciBvd24gY29weSBvZiB0aGlzIChwbGF0Zm9ybSdzIGFsZXJ0IHJlbGF5IGFuZFxuICogY29tcGxpYW5jZSdzIG5vdGlmaWVyKSB3aXRoIElOQ09NUEFUSUJMRSBjb250cmFjdHMg4oCUIGB0YXJnZXQudmFsdWVgIHZzXG4gKiBgdGFyZ2V0LnVybGAsIGEgc2V2ZXJpdHkgZW51bSB2cyBhIHByaW9yaXR5IGVudW0sIGBza2lwcGVkYCBwcmVzZW50IGluIG9uZVxuICogcmVzdWx0IHNoYXBlIGFuZCBhYnNlbnQgaW4gdGhlIG90aGVyLCBhbmQgdHdvIHNlcGFyYXRlIFNTUkYgcG9zdHVyZXMgaW4gdGhlXG4gKiB0d28gd2ViaG9vayBzZW5kZXJzLiBUaGlzIG1vZHVsZSBpcyB0aGUgc2luZ2xlIGNvbnRyYWN0OyB0aGUgd2ViaG9vayBhbmRcbiAqIGVtYWlsIHRyYW5zcG9ydHMgbGl2ZSBoZXJlLlxuICpcbiAqIFdoYXQgc3RheXMgcGVyLXNlcnZpY2U6IHRoZSBgaW4tYXBwYCB0cmFuc3BvcnQgb25seS4gQ29tcGxpYW5jZSBwb3N0cyB0byB0aGVcbiAqIG1lc3NhZ2Ugc2VydmljZSBvdmVyIEhUVFA7IHBsYXRmb3JtICh3aGljaCBpcyB0aGUgYWxlcnQgaW5ncmVzcyBhbmQgbXVzdCBub3RcbiAqIGFkZCBhIG5ldHdvcmsgaG9wIHRvIGFuIGFsZXJ0IGZhbi1vdXQpIHdyaXRlcyB0aGUgc2hhcmVkIGBtZXNzYWdlc2AgdGFibGVcbiAqIGRpcmVjdGx5IHVuZGVyIGEgc3VwZXJhZG1pbiB0ZW5hbnQgY29udGV4dC4gVGhvc2UgYXJlIGdlbnVpbmVseSBkaWZmZXJlbnRcbiAqIHRyYW5zcG9ydHMsIG5vdCBkdXBsaWNhdGlvbi5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVIbWFjIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc2FmZUZldGNoIH0gZnJvbSAnLi4vdXRpbHMvc3NyZi5qcyc7XG5cbi8qKiBJbmJveCBwcmlvcml0eSBldmVyeSBjaGFubmVsIHJlbmRlcnMgZnJvbS4gKi9cbmV4cG9ydCB0eXBlIE5vdGlmaWNhdGlvblByaW9yaXR5ID0gJ3VyZ2VudCcgfCAnaGlnaCcgfCAnbm9ybWFsJztcblxuLyoqXG4gKiBUcmFuc3BvcnQtYWdub3N0aWMgbm90aWZpY2F0aW9uIHBheWxvYWQuIENoYW5uZWxzIHJlbmRlciBmcm9tIHRoZXNlIGZpZWxkcztcbiAqIGBwYXlsb2FkYCBpcyB0aGUgZXhhY3QgSlNPTiB0aGUgZ2VuZXJpYyBgd2ViaG9va2AgY2hhbm5lbCBmb3J3YXJkcyB1bmNoYW5nZWRcbiAqIChzbyBhbiBleGlzdGluZyB3ZWJob29rIGNvbnN1bWVyIGtlZXBzIHJlY2VpdmluZyB0aGUgc2hhcGUgaXQgZXhwZWN0cykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uTWVzc2FnZSB7XG4gIC8qKiBPcmcgd2hvc2UgaW5ib3ggLyBkZXN0aW5hdGlvbiByZWNlaXZlcyB0aGlzLiAqL1xuICByZWNpcGllbnRPcmdJZDogc3RyaW5nO1xuICAvKiogU2hvcnQgc3ViamVjdCBsaW5lLCBhbHJlYWR5IHByZWZpeGVkL2RlY29yYXRlZCBieSB0aGUgY2FsbGVyLiAqL1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIC8qKiBQbGFpbi10ZXh0IGJvZHkuICovXG4gIGJvZHk6IHN0cmluZztcbiAgcHJpb3JpdHk6IE5vdGlmaWNhdGlvblByaW9yaXR5O1xuICBtZXNzYWdlVHlwZTogJ2Fubm91bmNlbWVudCcgfCAnY29udmVyc2F0aW9uJztcbiAgLyoqIFN0cnVjdHVyZWQgYm9keSBmb3J3YXJkZWQgdmVyYmF0aW0gYnkgdGhlIHdlYmhvb2sgY2hhbm5lbC4gKi9cbiAgcGF5bG9hZDogdW5rbm93bjtcbiAgLyoqIFN0YWJsZSBrZXkgZm9yIGF0LWxlYXN0LW9uY2UgY2hhbm5lbHMgKGVtYWlsKSB0byBkZWR1cGUgcmV0cmllcy4gKi9cbiAgZGVkdXBlS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENoYW5uZWwtc3BlY2lmaWMgZGVsaXZlcnkgdGFyZ2V0LiBgdmFsdWVgIGlzIHRoZSBVUkwgKHdlYmhvb2svc2xhY2spIG9yIHRoZVxuICogZW1haWwgYWRkcmVzczsgYHNlY3JldGAgaXMgdGhlIHdlYmhvb2sgSE1BQyBrZXk7IGB0YXJnZXRVc2Vyc2AgbmFycm93cyBhblxuICogZW1haWwgZmFuLW91dCAobnVsbC9hYnNlbnQgPSBldmVyeSBvcmcgYWRtaW4pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYW5uZWxUYXJnZXQge1xuICB2YWx1ZT86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICB0YXJnZXRVc2Vycz86IHN0cmluZ1tdIHwgbnVsbDtcbiAgb3JnSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3V0Y29tZSBvZiBvbmUgZGVsaXZlcnkuIGBza2lwcGVkYCBkaXN0aW5ndWlzaGVzIFwiaW50ZW50aW9uYWxseSBub3Qgc2VudFwiXG4gKiAoZW1haWwgZGlzYWJsZWQsIGRlZHVwZSBoaXQpIGZyb20gYSByZWFsIGZhaWx1cmUgc28gdGhlIGNhbGxlciBjYW4gY291bnQgdGhlbVxuICogYXBhcnQ7IGBjb2RlYC9gZXJyb3JgIGZlZWQgc3RydWN0dXJlZCBsb2dnaW5nIGFuZCB0aGUgYXVkaXQgdHJhaWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVsaXZlcnlSZXN1bHQge1xuICBvazogYm9vbGVhbjtcbiAgc2tpcHBlZD86IGJvb2xlYW47XG4gIGNvZGU/OiBudW1iZXI7XG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSBkZWxpdmVyeSB0cmFuc3BvcnQuIEdlbmVyaWMgaW4gdGhlIG1lc3NhZ2UgdHlwZSBzbyBhIHNlcnZpY2UgY2FuIGNhcnJ5XG4gKiBleHRyYSByZW5kZXJpbmcgZmllbGRzIChwbGF0Zm9ybSdzIGFsZXJ0IHNldmVyaXR5L2xhYmVscykgd2l0aG91dCBsb29zZW5pbmdcbiAqIHRoZSBzaGFyZWQgY29udHJhY3Qgb3IgY2FzdGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25DaGFubmVsPE0gZXh0ZW5kcyBOb3RpZmljYXRpb25NZXNzYWdlID0gTm90aWZpY2F0aW9uTWVzc2FnZT4ge1xuICByZWFkb25seSBjaGFubmVsOiBzdHJpbmc7XG4gIGRlbGl2ZXIobXNnOiBNLCB0YXJnZXQ6IENoYW5uZWxUYXJnZXQsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxEZWxpdmVyeVJlc3VsdD47XG59XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgY3JlYXRlV2ViaG9va0NoYW5uZWx9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJob29rQ2hhbm5lbE9wdGlvbnM8TSBleHRlbmRzIE5vdGlmaWNhdGlvbk1lc3NhZ2UgPSBOb3RpZmljYXRpb25NZXNzYWdlPiB7XG4gIC8qKiBDaGFubmVsIG5hbWUgKGRlZmF1bHQgYCd3ZWJob29rJ2ApLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogQWxsb3dlZCBVUkwgcHJvdG9jb2xzIChkZWZhdWx0IGh0dHBzLW9ubHkpLiAqL1xuICBwcm90b2NvbHM/OiBzdHJpbmdbXTtcbiAgLyoqIFBlci1kZWxpdmVyeSB3YWxsLWNsb2NrIGNhcCBpbiBtcy4gKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogUmVuZGVyIHRoZSBKU09OIGJvZHk7IGRlZmF1bHRzIHRvIGBtc2cucGF5bG9hZGAgZm9yd2FyZGVkIHZlcmJhdGltLiAqL1xuICByZW5kZXI/OiAobXNnOiBNKSA9PiB1bmtub3duO1xufVxuXG4vKipcbiAqIEdlbmVyaWMgb3V0Ym91bmQgd2ViaG9vayB0cmFuc3BvcnQuXG4gKlxuICogVGhlIFVSTCBpcyBvcmctY29udHJvbGxlZCwgc28gZGVsaXZlcnkgZ29lcyB0aHJvdWdoIHtAbGluayBzYWZlRmV0Y2h9OiB0aGVcbiAqIGhvc3QgaXMgcmVzb2x2ZWQgYW5kIHZldHRlZCwgdGhlIHZldHRlZCBJUCBpcyBQSU5ORUQgaW50byB0aGUgc29ja2V0IChub1xuICogRE5TLXJlYmluZGluZyB3aW5kb3cgYmV0d2VlbiB0aGUgY2hlY2sgYW5kIHRoZSBjb25uZWN0KSwgYW5kIHJlZGlyZWN0cyBhcmVcbiAqIHJlZnVzZWQg4oCUIGEgM3h4IGlzIGEgRkFJTEVEIGRlbGl2ZXJ5LCBuZXZlciBhIHBpdm90IHRvIGFuIHVudmV0dGVkIGhvc3QgYW5kXG4gKiBuZXZlciByZWNvcmRlZCBncmVlbi4gU2lnbmVkIHdpdGggYFgtUEItU2lnbmF0dXJlYCB3aGVuIHRoZSB0YXJnZXQgY2FycmllcyBhXG4gKiBzZWNyZXQ7IHRhcmdldHMgd2l0aG91dCBvbmUgKGFsZXJ0IGRlc3RpbmF0aW9ucykgc3RheSB1bnNpZ25lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYmhvb2tDaGFubmVsPE0gZXh0ZW5kcyBOb3RpZmljYXRpb25NZXNzYWdlID0gTm90aWZpY2F0aW9uTWVzc2FnZT4oXG4gIG9wdHM6IFdlYmhvb2tDaGFubmVsT3B0aW9uczxNPiA9IHt9LFxuKTogTm90aWZpY2F0aW9uQ2hhbm5lbDxNPiB7XG4gIGNvbnN0IHJlbmRlciA9IG9wdHMucmVuZGVyID8/ICgobXNnOiBNKSA9PiBtc2cucGF5bG9hZCk7XG4gIHJldHVybiB7XG4gICAgY2hhbm5lbDogb3B0cy5uYW1lID8/ICd3ZWJob29rJyxcbiAgICBhc3luYyBkZWxpdmVyKG1zZywgdGFyZ2V0LCBzaWduYWwpIHtcbiAgICAgIGlmICghdGFyZ2V0LnZhbHVlKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnbm8gd2ViaG9vayB1cmwnIH07XG4gICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVuZGVyKG1zZykpO1xuICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICAgICAgaWYgKHRhcmdldC5zZWNyZXQpIHtcbiAgICAgICAgaGVhZGVyc1snWC1QQi1TaWduYXR1cmUnXSA9IGBzaGEyNTY9JHtjcmVhdGVIbWFjKCdzaGEyNTYnLCB0YXJnZXQuc2VjcmV0KS51cGRhdGUoYm9keSkuZGlnZXN0KCdoZXgnKX1gO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHNhZmVGZXRjaCh0YXJnZXQudmFsdWUsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgIHByb3RvY29sczogb3B0cy5wcm90b2NvbHMsXG4gICAgICAgICAgdGltZW91dE1zOiBvcHRzLnRpbWVvdXRNcyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXNwLnJlZGlyZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIGNvZGU6IHJlc3Auc3RhdHVzLCBlcnJvcjogJ3dlYmhvb2sgdXJsIHJlZGlyZWN0ZWQgKHJlZnVzZWQpJyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwLm9rID8geyBvazogdHJ1ZSwgY29kZTogcmVzcC5zdGF0dXMgfSA6IHsgb2s6IGZhbHNlLCBjb2RlOiByZXNwLnN0YXR1cyB9O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH07XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIEFyZ3VtZW50cyBoYW5kZWQgdG8gYW4ge0BsaW5rIEVtYWlsQ2hhbm5lbE9wdGlvbnMuc2VuZH0gaW1wbGVtZW50YXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsU2VuZFJlcXVlc3Qge1xuICAvKiogVGhlIHRhcmdldCBhZGRyZXNzLCB3aGVuIHRoZSB0cmFuc3BvcnQgYWRkcmVzc2VzIG9uZSByZWNpcGllbnQgZGlyZWN0bHkuICovXG4gIHRvPzogc3RyaW5nO1xuICAvKiogT3JnIHdob3NlIGFkbWlucy91c2VycyByZWNlaXZlIGl0LCB3aGVuIHRoZSB0cmFuc3BvcnQgcmVzb2x2ZXMgcmVjaXBpZW50cy4gKi9cbiAgb3JnSWQ6IHN0cmluZztcbiAgLyoqIE5hcnJvd2VkIHJlY2lwaWVudCBsaXN0LCBvciBudWxsIGZvciBcImV2ZXJ5IG9yZyBhZG1pblwiLiAqL1xuICB0YXJnZXRVc2Vycz86IHN0cmluZ1tdIHwgbnVsbDtcbiAgc3ViamVjdDogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgY3JlYXRlRW1haWxDaGFubmVsfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxDaGFubmVsT3B0aW9ucyB7XG4gIC8qKiBQZXJmb3JtIHRoZSBzZW5kOyByZXNvbHZlIGZhbHNlIGZvciBhIHRyYW5zcG9ydC1sZXZlbCBmYWlsdXJlLiAqL1xuICBzZW5kOiAocmVxOiBFbWFpbFNlbmRSZXF1ZXN0KSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICAvKiogUmVwb3J0IHdoZXRoZXIgZW1haWwgaXMgY29uZmlndXJlZCBhdCBhbGwgb24gdGhpcyBkZXBsb3kgKGRlZmF1bHQ6IHllcykuICovXG4gIGVuYWJsZWQ/OiAoKSA9PiBib29sZWFuO1xuICAvKipcbiAgICogQXQtbGVhc3Qtb25jZSBkZWR1cGUgd2luZG93LiBBIHJlcGVhdCBvZiB0aGUgc2FtZSBgKGRlZHVwZUtleSwgdGFyZ2V0KWBcbiAgICogaW5zaWRlIHRoZSB3aW5kb3cgaXMgcmVwb3J0ZWQgYHsgb2s6IHRydWUsIHNraXBwZWQ6IHRydWUgfWAgcmF0aGVyIHRoYW5cbiAgICogcmUtc2VudC4gT21pdC8wIHRvIGRpc2FibGUuXG4gICAqL1xuICBkZWR1cGVUdGxNcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFbWFpbCB0cmFuc3BvcnQuIFRoZSBhY3R1YWwgZGVsaXZlcnkgbWVjaGFuaXNtIGlzIGluamVjdGVkIChgc2VuZGApIGJlY2F1c2VcbiAqIGl0IGxlZ2l0aW1hdGVseSBkaWZmZXJzIOKAlCBwbGF0Zm9ybSBoYXMgU01UUC9TRVMsIGNvbXBsaWFuY2UgYXNrcyBwbGF0Zm9ybSB0b1xuICogc2VuZCBvbiBpdHMgYmVoYWxmIOKAlCBidXQgdGhlIHBhcnRzIHRoYXQgd2VyZSBkdXBsaWNhdGVkLWFuZC1kcmlmdGluZyBhcmVcbiAqIGhlcmU6IHRoZSBlbmFibGVkL3NraXBwZWQgc2VtYW50aWNzIGFuZCB0aGUgYXQtbGVhc3Qtb25jZSBkZWR1cGUgd2luZG93IChhXG4gKiB3ZWJob29rLXJldHJ5aW5nIGFsZXJ0IHNvdXJjZSB3b3VsZCBvdGhlcndpc2UgcmUtbWFpbCB0aGUgc2FtZSBldmVudCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbWFpbENoYW5uZWw8TSBleHRlbmRzIE5vdGlmaWNhdGlvbk1lc3NhZ2UgPSBOb3RpZmljYXRpb25NZXNzYWdlPihcbiAgb3B0czogRW1haWxDaGFubmVsT3B0aW9ucyxcbik6IE5vdGlmaWNhdGlvbkNoYW5uZWw8TT4ge1xuICBjb25zdCB0dGwgPSBvcHRzLmRlZHVwZVR0bE1zID8/IDA7XG4gIGNvbnN0IHJlY2VudCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7IC8vIGRlZHVwZSBrZXkgLT4gZXhwaXJ5IChlcG9jaCBtcylcblxuICBjb25zdCBzZWVuUmVjZW50bHkgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgW2ssIGV4cF0gb2YgcmVjZW50KSB7XG4gICAgICBpZiAoZXhwIDw9IG5vdykgcmVjZW50LmRlbGV0ZShrKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY2VudC5oYXMoa2V5KTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNoYW5uZWw6ICdlbWFpbCcsXG4gICAgYXN5bmMgZGVsaXZlcihtc2csIHRhcmdldCkge1xuICAgICAgLy8gRW1haWwgdW5jb25maWd1cmVkIG9uIHRoaXMgZGVwbG95IOKGkiByZXBvcnQgU0tJUFBFRCAobm90IGRlbGl2ZXJlZCkgc28gYVxuICAgICAgLy8gY2FsbGVyIG5ldmVyIGNsYWltcyBpdCBzZW50IHNvbWV0aGluZyBpdCBkaWRuJ3QuXG4gICAgICBpZiAob3B0cy5lbmFibGVkICYmICFvcHRzLmVuYWJsZWQoKSkge1xuICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIHNraXBwZWQ6IHRydWUsIGVycm9yOiAnZW1haWwtZGlzYWJsZWQnIH07XG4gICAgICB9XG4gICAgICBjb25zdCBkZWR1cGVLZXkgPSB0dGwgPiAwICYmIG1zZy5kZWR1cGVLZXkgPyBgJHttc2cuZGVkdXBlS2V5fToke3RhcmdldC52YWx1ZSA/PyBtc2cucmVjaXBpZW50T3JnSWR9YCA6IG51bGw7XG4gICAgICBpZiAoZGVkdXBlS2V5ICYmIHNlZW5SZWNlbnRseShkZWR1cGVLZXkpKSB7XG4gICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCBza2lwcGVkOiB0cnVlIH07XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzZW50ID0gYXdhaXQgb3B0cy5zZW5kKHtcbiAgICAgICAgICB0bzogdGFyZ2V0LnZhbHVlLFxuICAgICAgICAgIG9yZ0lkOiBtc2cucmVjaXBpZW50T3JnSWQsXG4gICAgICAgICAgdGFyZ2V0VXNlcnM6IHRhcmdldC50YXJnZXRVc2VycyA/PyBudWxsLFxuICAgICAgICAgIHN1YmplY3Q6IG1zZy5zdWJqZWN0LFxuICAgICAgICAgIHRleHQ6IG1zZy5ib2R5LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmVjb3JkIG9ubHkgb24gc3VjY2Vzcywgc28gYSBmYWlsZWQgc2VuZCBpcyByZXRyaWVkIGJ5IHRoZSBuZXh0IGV2ZW50LlxuICAgICAgICBpZiAoc2VudCAmJiBkZWR1cGVLZXkpIHJlY2VudC5zZXQoZGVkdXBlS2V5LCBEYXRlLm5vdygpICsgdHRsKTtcbiAgICAgICAgcmV0dXJuIHNlbnQgPyB7IG9rOiB0cnVlIH0gOiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdlbWFpbC1zZW5kLWZhaWxlZCcgfTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9O1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIHBlci1zZXJ2aWNlIGNoYW5uZWwgcmVnaXN0cnkuIFJldHVybnMgYSByZXNvbHZlciB0aGF0IHlpZWxkcyBgbnVsbGBcbiAqIGZvciBhbiB1bmtub3duIG5hbWUg4oCUIHRoZSBjaGFubmVsIGlzIERCIGRhdGEsIHNvIGFuIHVua25vd24gdmFsdWUgaXMgcG9zc2libGVcbiAqIGFuZCB0aGUgY2FsbGVyIGxvZ3MvY291bnRzIGl0IHJhdGhlciB0aGFuIHRocm93aW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hhbm5lbFJlZ2lzdHJ5PE0gZXh0ZW5kcyBOb3RpZmljYXRpb25NZXNzYWdlID0gTm90aWZpY2F0aW9uTWVzc2FnZT4oXG4gIGNoYW5uZWxzOiBOb3RpZmljYXRpb25DaGFubmVsPE0+W10sXG4pOiAoY2hhbm5lbDogc3RyaW5nKSA9PiBOb3RpZmljYXRpb25DaGFubmVsPE0+IHwgbnVsbCB7XG4gIGNvbnN0IGJ5TmFtZSA9IG5ldyBNYXAoY2hhbm5lbHMubWFwKChjKSA9PiBbYy5jaGFubmVsLCBjXSkpO1xuICByZXR1cm4gKGNoYW5uZWw6IHN0cmluZykgPT4gYnlOYW1lLmdldChjaGFubmVsKSA/PyBudWxsO1xufVxuIl19
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWNoYW5uZWxzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvbm90aWZpY2F0aW9uLWNoYW5uZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUF1RTdDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsSUFBSSxHQUE2QixFQUFFO0lBRW5DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTO1FBQy9CLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztnQkFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUNqRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sT0FBTyxHQUEyQixFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1lBQy9FLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxVQUFVLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FB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YnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFNoYXJlZCBub3RpZmljYXRpb24tY2hhbm5lbCBjb250cmFjdCArIHRoZSB0cmFuc3BvcnRzIHRoYXQgYXJlIGdlbnVpbmVseSB0aGVcbiAqIHNhbWUgZXZlcnl3aGVyZS5cbiAqXG4gKiBUd28gc2VydmljZXMgaGFkIGdyb3duIHRoZWlyIG93biBjb3B5IG9mIHRoaXMgKHBsYXRmb3JtJ3MgYWxlcnQgcmVsYXkgYW5kXG4gKiBjb21wbGlhbmNlJ3Mgbm90aWZpZXIpIHdpdGggSU5DT01QQVRJQkxFIGNvbnRyYWN0cyDigJQgYHRhcmdldC52YWx1ZWAgdnNcbiAqIGB0YXJnZXQudXJsYCwgYSBzZXZlcml0eSBlbnVtIHZzIGEgcHJpb3JpdHkgZW51bSwgYHNraXBwZWRgIHByZXNlbnQgaW4gb25lXG4gKiByZXN1bHQgc2hhcGUgYW5kIGFic2VudCBpbiB0aGUgb3RoZXIsIGFuZCB0d28gc2VwYXJhdGUgU1NSRiBwb3N0dXJlcyBpbiB0aGVcbiAqIHR3byB3ZWJob29rIHNlbmRlcnMuIFRoaXMgbW9kdWxlIGlzIHRoZSBzaW5nbGUgY29udHJhY3Q7IHRoZSB3ZWJob29rIGFuZFxuICogZW1haWwgdHJhbnNwb3J0cyBsaXZlIGhlcmUuXG4gKlxuICogV2hhdCBzdGF5cyBwZXItc2VydmljZTogdGhlIGBpbi1hcHBgIHRyYW5zcG9ydCBvbmx5LiBDb21wbGlhbmNlIHBvc3RzIHRvIHRoZVxuICogbWVzc2FnZSBzZXJ2aWNlIG92ZXIgSFRUUDsgcGxhdGZvcm0gKHdoaWNoIGlzIHRoZSBhbGVydCBpbmdyZXNzIGFuZCBtdXN0IG5vdFxuICogYWRkIGEgbmV0d29yayBob3AgdG8gYW4gYWxlcnQgZmFuLW91dCkgd3JpdGVzIHRoZSBzaGFyZWQgYG1lc3NhZ2VzYCB0YWJsZVxuICogZGlyZWN0bHkgdW5kZXIgYSBzdXBlcmFkbWluIHRlbmFudCBjb250ZXh0LiBUaG9zZSBhcmUgZ2VudWluZWx5IGRpZmZlcmVudFxuICogdHJhbnNwb3J0cywgbm90IGR1cGxpY2F0aW9uLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUhtYWMgfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBzYWZlRmV0Y2ggfSBmcm9tICcuLi91dGlscy9zc3JmLmpzJztcblxuLyoqIEluYm94IHByaW9yaXR5IGV2ZXJ5IGNoYW5uZWwgcmVuZGVycyBmcm9tLiAqL1xuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uUHJpb3JpdHkgPSAndXJnZW50JyB8ICdoaWdoJyB8ICdub3JtYWwnO1xuXG4vKipcbiAqIFRyYW5zcG9ydC1hZ25vc3RpYyBub3RpZmljYXRpb24gcGF5bG9hZC4gQ2hhbm5lbHMgcmVuZGVyIGZyb20gdGhlc2UgZmllbGRzO1xuICogYHBheWxvYWRgIGlzIHRoZSBleGFjdCBKU09OIHRoZSBnZW5lcmljIGB3ZWJob29rYCBjaGFubmVsIGZvcndhcmRzIHVuY2hhbmdlZFxuICogKHNvIGFuIGV4aXN0aW5nIHdlYmhvb2sgY29uc3VtZXIga2VlcHMgcmVjZWl2aW5nIHRoZSBzaGFwZSBpdCBleHBlY3RzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25NZXNzYWdlIHtcbiAgLyoqIE9yZyB3aG9zZSBpbmJveCAvIGRlc3RpbmF0aW9uIHJlY2VpdmVzIHRoaXMuICovXG4gIHJlY2lwaWVudE9yZ0lkOiBzdHJpbmc7XG4gIC8qKiBTaG9ydCBzdWJqZWN0IGxpbmUsIGFscmVhZHkgcHJlZml4ZWQvZGVjb3JhdGVkIGJ5IHRoZSBjYWxsZXIuICovXG4gIHN1YmplY3Q6IHN0cmluZztcbiAgLyoqIFBsYWluLXRleHQgYm9keS4gKi9cbiAgYm9keTogc3RyaW5nO1xuICBwcmlvcml0eTogTm90aWZpY2F0aW9uUHJpb3JpdHk7XG4gIG1lc3NhZ2VUeXBlOiAnYW5ub3VuY2VtZW50JyB8ICdjb252ZXJzYXRpb24nO1xuICAvKiogU3RydWN0dXJlZCBib2R5IGZvcndhcmRlZCB2ZXJiYXRpbSBieSB0aGUgd2ViaG9vayBjaGFubmVsLiAqL1xuICBwYXlsb2FkOiB1bmtub3duO1xuICAvKiogU3RhYmxlIGtleSBmb3IgYXQtbGVhc3Qtb25jZSBjaGFubmVscyAoZW1haWwpIHRvIGRlZHVwZSByZXRyaWVzLiAqL1xuICBkZWR1cGVLZXk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2hhbm5lbC1zcGVjaWZpYyBkZWxpdmVyeSB0YXJnZXQuIGB2YWx1ZWAgaXMgdGhlIFVSTCAod2ViaG9vay9zbGFjaykgb3IgdGhlXG4gKiBlbWFpbCBhZGRyZXNzOyBgc2VjcmV0YCBpcyB0aGUgd2ViaG9vayBITUFDIGtleTsgYHRhcmdldFVzZXJzYCBuYXJyb3dzIGFuXG4gKiBlbWFpbCBmYW4tb3V0IChudWxsL2Fic2VudCA9IGV2ZXJ5IG9yZyBhZG1pbikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbm5lbFRhcmdldCB7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBzZWNyZXQ/OiBzdHJpbmc7XG4gIHRhcmdldFVzZXJzPzogc3RyaW5nW10gfCBudWxsO1xuICBvcmdJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPdXRjb21lIG9mIG9uZSBkZWxpdmVyeS4gYHNraXBwZWRgIGRpc3Rpbmd1aXNoZXMgXCJpbnRlbnRpb25hbGx5IG5vdCBzZW50XCJcbiAqIChlbWFpbCBkaXNhYmxlZCwgZGVkdXBlIGhpdCkgZnJvbSBhIHJlYWwgZmFpbHVyZSBzbyB0aGUgY2FsbGVyIGNhbiBjb3VudCB0aGVtXG4gKiBhcGFydDsgYGNvZGVgL2BlcnJvcmAgZmVlZCBzdHJ1Y3R1cmVkIGxvZ2dpbmcgYW5kIHRoZSBhdWRpdCB0cmFpbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWxpdmVyeVJlc3VsdCB7XG4gIG9rOiBib29sZWFuO1xuICBza2lwcGVkPzogYm9vbGVhbjtcbiAgY29kZT86IG51bWJlcjtcbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT25lIGRlbGl2ZXJ5IHRyYW5zcG9ydC4gR2VuZXJpYyBpbiB0aGUgbWVzc2FnZSB0eXBlIHNvIGEgc2VydmljZSBjYW4gY2FycnlcbiAqIGV4dHJhIHJlbmRlcmluZyBmaWVsZHMgKHBsYXRmb3JtJ3MgYWxlcnQgc2V2ZXJpdHkvbGFiZWxzKSB3aXRob3V0IGxvb3NlbmluZ1xuICogdGhlIHNoYXJlZCBjb250cmFjdCBvciBjYXN0aW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkNoYW5uZWw8TSBleHRlbmRzIE5vdGlmaWNhdGlvbk1lc3NhZ2UgPSBOb3RpZmljYXRpb25NZXNzYWdlPiB7XG4gIHJlYWRvbmx5IGNoYW5uZWw6IHN0cmluZztcbiAgZGVsaXZlcihtc2c6IE0sIHRhcmdldDogQ2hhbm5lbFRhcmdldCwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPERlbGl2ZXJ5UmVzdWx0Pjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBjcmVhdGVXZWJob29rQ2hhbm5lbH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tDaGFubmVsT3B0aW9uczxNIGV4dGVuZHMgTm90aWZpY2F0aW9uTWVzc2FnZSA9IE5vdGlmaWNhdGlvbk1lc3NhZ2U+IHtcbiAgLyoqIENoYW5uZWwgbmFtZSAoZGVmYXVsdCBgJ3dlYmhvb2snYCkuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBBbGxvd2VkIFVSTCBwcm90b2NvbHMgKGRlZmF1bHQgaHR0cHMtb25seSkuICovXG4gIHByb3RvY29scz86IHN0cmluZ1tdO1xuICAvKiogUGVyLWRlbGl2ZXJ5IHdhbGwtY2xvY2sgY2FwIGluIG1zLiAqL1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBSZW5kZXIgdGhlIEpTT04gYm9keTsgZGVmYXVsdHMgdG8gYG1zZy5wYXlsb2FkYCBmb3J3YXJkZWQgdmVyYmF0aW0uICovXG4gIHJlbmRlcj86IChtc2c6IE0pID0+IHVua25vd247XG59XG5cbi8qKlxuICogR2VuZXJpYyBvdXRib3VuZCB3ZWJob29rIHRyYW5zcG9ydC5cbiAqXG4gKiBUaGUgVVJMIGlzIG9yZy1jb250cm9sbGVkLCBzbyBkZWxpdmVyeSBnb2VzIHRocm91Z2gge0BsaW5rIHNhZmVGZXRjaH06IHRoZVxuICogaG9zdCBpcyByZXNvbHZlZCBhbmQgdmV0dGVkLCB0aGUgdmV0dGVkIElQIGlzIFBJTk5FRCBpbnRvIHRoZSBzb2NrZXQgKG5vXG4gKiBETlMtcmViaW5kaW5nIHdpbmRvdyBiZXR3ZWVuIHRoZSBjaGVjayBhbmQgdGhlIGNvbm5lY3QpLCBhbmQgcmVkaXJlY3RzIGFyZVxuICogcmVmdXNlZCDigJQgYSAzeHggaXMgYSBGQUlMRUQgZGVsaXZlcnksIG5ldmVyIGEgcGl2b3QgdG8gYW4gdW52ZXR0ZWQgaG9zdCBhbmRcbiAqIG5ldmVyIHJlY29yZGVkIGdyZWVuLiBTaWduZWQgd2l0aCBgWC1QQi1TaWduYXR1cmVgIHdoZW4gdGhlIHRhcmdldCBjYXJyaWVzIGFcbiAqIHNlY3JldDsgdGFyZ2V0cyB3aXRob3V0IG9uZSAoYWxlcnQgZGVzdGluYXRpb25zKSBzdGF5IHVuc2lnbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViaG9va0NoYW5uZWw8TSBleHRlbmRzIE5vdGlmaWNhdGlvbk1lc3NhZ2UgPSBOb3RpZmljYXRpb25NZXNzYWdlPihcbiAgb3B0czogV2ViaG9va0NoYW5uZWxPcHRpb25zPE0+ID0ge30sXG4pOiBOb3RpZmljYXRpb25DaGFubmVsPE0+IHtcbiAgY29uc3QgcmVuZGVyID0gb3B0cy5yZW5kZXIgPz8gKChtc2c6IE0pID0+IG1zZy5wYXlsb2FkKTtcbiAgcmV0dXJuIHtcbiAgICBjaGFubmVsOiBvcHRzLm5hbWUgPz8gJ3dlYmhvb2snLFxuICAgIGFzeW5jIGRlbGl2ZXIobXNnLCB0YXJnZXQsIHNpZ25hbCkge1xuICAgICAgaWYgKCF0YXJnZXQudmFsdWUpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdubyB3ZWJob29rIHVybCcgfTtcbiAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZW5kZXIobXNnKSk7XG4gICAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH07XG4gICAgICBpZiAodGFyZ2V0LnNlY3JldCkge1xuICAgICAgICBoZWFkZXJzWydYLVBCLVNpZ25hdHVyZSddID0gYHNoYTI1Nj0ke2NyZWF0ZUhtYWMoJ3NoYTI1NicsIHRhcmdldC5zZWNyZXQpLnVwZGF0ZShib2R5KS5kaWdlc3QoJ2hleCcpfWA7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgc2FmZUZldGNoKHRhcmdldC52YWx1ZSwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgcHJvdG9jb2xzOiBvcHRzLnByb3RvY29scyxcbiAgICAgICAgICB0aW1lb3V0TXM6IG9wdHMudGltZW91dE1zLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc3AucmVkaXJlY3RlZCkge1xuICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgY29kZTogcmVzcC5zdGF0dXMsIGVycm9yOiAnd2ViaG9vayB1cmwgcmVkaXJlY3RlZCAocmVmdXNlZCknIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3Aub2sgPyB7IG9rOiB0cnVlLCBjb2RlOiByZXNwLnN0YXR1cyB9IDogeyBvazogZmFsc2UsIGNvZGU6IHJlc3Auc3RhdHVzIH07XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG4vKiogQXJndW1lbnRzIGhhbmRlZCB0byBhbiB7QGxpbmsgRW1haWxDaGFubmVsT3B0aW9ucy5zZW5kfSBpbXBsZW1lbnRhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxTZW5kUmVxdWVzdCB7XG4gIC8qKiBUaGUgdGFyZ2V0IGFkZHJlc3MsIHdoZW4gdGhlIHRyYW5zcG9ydCBhZGRyZXNzZXMgb25lIHJlY2lwaWVudCBkaXJlY3RseS4gKi9cbiAgdG8/OiBzdHJpbmc7XG4gIC8qKiBPcmcgd2hvc2UgYWRtaW5zL3VzZXJzIHJlY2VpdmUgaXQsIHdoZW4gdGhlIHRyYW5zcG9ydCByZXNvbHZlcyByZWNpcGllbnRzLiAqL1xuICBvcmdJZDogc3RyaW5nO1xuICAvKiogTmFycm93ZWQgcmVjaXBpZW50IGxpc3QsIG9yIG51bGwgZm9yIFwiZXZlcnkgb3JnIGFkbWluXCIuICovXG4gIHRhcmdldFVzZXJzPzogc3RyaW5nW10gfCBudWxsO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbn1cblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBjcmVhdGVFbWFpbENoYW5uZWx9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbENoYW5uZWxPcHRpb25zIHtcbiAgLyoqIFBlcmZvcm0gdGhlIHNlbmQ7IHJlc29sdmUgZmFsc2UgZm9yIGEgdHJhbnNwb3J0LWxldmVsIGZhaWx1cmUuICovXG4gIHNlbmQ6IChyZXE6IEVtYWlsU2VuZFJlcXVlc3QpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIC8qKiBSZXBvcnQgd2hldGhlciBlbWFpbCBpcyBjb25maWd1cmVkIGF0IGFsbCBvbiB0aGlzIGRlcGxveSAoZGVmYXVsdDogeWVzKS4gKi9cbiAgZW5hYmxlZD86ICgpID0+IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBdC1sZWFzdC1vbmNlIGRlZHVwZSB3aW5kb3cuIEEgcmVwZWF0IG9mIHRoZSBzYW1lIGAoZGVkdXBlS2V5LCB0YXJnZXQpYFxuICAgKiBpbnNpZGUgdGhlIHdpbmRvdyBpcyByZXBvcnRlZCBgeyBvazogdHJ1ZSwgc2tpcHBlZDogdHJ1ZSB9YCByYXRoZXIgdGhhblxuICAgKiByZS1zZW50LiBPbWl0LzAgdG8gZGlzYWJsZS5cbiAgICovXG4gIGRlZHVwZVR0bE1zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEVtYWlsIHRyYW5zcG9ydC4gVGhlIGFjdHVhbCBkZWxpdmVyeSBtZWNoYW5pc20gaXMgaW5qZWN0ZWQgKGBzZW5kYCkgYmVjYXVzZVxuICogaXQgbGVnaXRpbWF0ZWx5IGRpZmZlcnMg4oCUIHBsYXRmb3JtIGhhcyBTTVRQL1NFUywgY29tcGxpYW5jZSBhc2tzIHBsYXRmb3JtIHRvXG4gKiBzZW5kIG9uIGl0cyBiZWhhbGYg4oCUIGJ1dCB0aGUgcGFydHMgdGhhdCB3ZXJlIGR1cGxpY2F0ZWQtYW5kLWRyaWZ0aW5nIGFyZVxuICogaGVyZTogdGhlIGVuYWJsZWQvc2tpcHBlZCBzZW1hbnRpY3MgYW5kIHRoZSBhdC1sZWFzdC1vbmNlIGRlZHVwZSB3aW5kb3cgKGFcbiAqIHdlYmhvb2stcmV0cnlpbmcgYWxlcnQgc291cmNlIHdvdWxkIG90aGVyd2lzZSByZS1tYWlsIHRoZSBzYW1lIGV2ZW50KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVtYWlsQ2hhbm5lbDxNIGV4dGVuZHMgTm90aWZpY2F0aW9uTWVzc2FnZSA9IE5vdGlmaWNhdGlvbk1lc3NhZ2U+KFxuICBvcHRzOiBFbWFpbENoYW5uZWxPcHRpb25zLFxuKTogTm90aWZpY2F0aW9uQ2hhbm5lbDxNPiB7XG4gIGNvbnN0IHR0bCA9IG9wdHMuZGVkdXBlVHRsTXMgPz8gMDtcbiAgY29uc3QgcmVjZW50ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTsgLy8gZGVkdXBlIGtleSAtPiBleHBpcnkgKGVwb2NoIG1zKVxuXG4gIGNvbnN0IHNlZW5SZWNlbnRseSA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgZm9yIChjb25zdCBbaywgZXhwXSBvZiByZWNlbnQpIHtcbiAgICAgIGlmIChleHAgPD0gbm93KSByZWNlbnQuZGVsZXRlKGspO1xuICAgIH1cbiAgICByZXR1cm4gcmVjZW50LmhhcyhrZXkpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2hhbm5lbDogJ2VtYWlsJyxcbiAgICBhc3luYyBkZWxpdmVyKG1zZywgdGFyZ2V0KSB7XG4gICAgICAvLyBFbWFpbCB1bmNvbmZpZ3VyZWQgb24gdGhpcyBkZXBsb3kg4oaSIHJlcG9ydCBTS0lQUEVEIChub3QgZGVsaXZlcmVkKSBzbyBhXG4gICAgICAvLyBjYWxsZXIgbmV2ZXIgY2xhaW1zIGl0IHNlbnQgc29tZXRoaW5nIGl0IGRpZG4ndC5cbiAgICAgIGlmIChvcHRzLmVuYWJsZWQgJiYgIW9wdHMuZW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgc2tpcHBlZDogdHJ1ZSwgZXJyb3I6ICdlbWFpbC1kaXNhYmxlZCcgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlZHVwZUtleSA9IHR0bCA+IDAgJiYgbXNnLmRlZHVwZUtleSA/IGAke21zZy5kZWR1cGVLZXl9OiR7dGFyZ2V0LnZhbHVlID8/IG1zZy5yZWNpcGllbnRPcmdJZH1gIDogbnVsbDtcbiAgICAgIGlmIChkZWR1cGVLZXkgJiYgc2VlblJlY2VudGx5KGRlZHVwZUtleSkpIHtcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHNraXBwZWQ6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNlbnQgPSBhd2FpdCBvcHRzLnNlbmQoe1xuICAgICAgICAgIHRvOiB0YXJnZXQudmFsdWUsXG4gICAgICAgICAgb3JnSWQ6IG1zZy5yZWNpcGllbnRPcmdJZCxcbiAgICAgICAgICB0YXJnZXRVc2VyczogdGFyZ2V0LnRhcmdldFVzZXJzID8/IG51bGwsXG4gICAgICAgICAgc3ViamVjdDogbXNnLnN1YmplY3QsXG4gICAgICAgICAgdGV4dDogbXNnLmJvZHksXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZWNvcmQgb25seSBvbiBzdWNjZXNzLCBzbyBhIGZhaWxlZCBzZW5kIGlzIHJldHJpZWQgYnkgdGhlIG5leHQgZXZlbnQuXG4gICAgICAgIGlmIChzZW50ICYmIGRlZHVwZUtleSkgcmVjZW50LnNldChkZWR1cGVLZXksIERhdGUubm93KCkgKyB0dGwpO1xuICAgICAgICByZXR1cm4gc2VudCA/IHsgb2s6IHRydWUgfSA6IHsgb2s6IGZhbHNlLCBlcnJvcjogJ2VtYWlsLXNlbmQtZmFpbGVkJyB9O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH07XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgcGVyLXNlcnZpY2UgY2hhbm5lbCByZWdpc3RyeS4gUmV0dXJucyBhIHJlc29sdmVyIHRoYXQgeWllbGRzIGBudWxsYFxuICogZm9yIGFuIHVua25vd24gbmFtZSDigJQgdGhlIGNoYW5uZWwgaXMgREIgZGF0YSwgc28gYW4gdW5rbm93biB2YWx1ZSBpcyBwb3NzaWJsZVxuICogYW5kIHRoZSBjYWxsZXIgbG9ncy9jb3VudHMgaXQgcmF0aGVyIHRoYW4gdGhyb3dpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFubmVsUmVnaXN0cnk8TSBleHRlbmRzIE5vdGlmaWNhdGlvbk1lc3NhZ2UgPSBOb3RpZmljYXRpb25NZXNzYWdlPihcbiAgY2hhbm5lbHM6IE5vdGlmaWNhdGlvbkNoYW5uZWw8TT5bXSxcbik6IChjaGFubmVsOiBzdHJpbmcpID0+IE5vdGlmaWNhdGlvbkNoYW5uZWw8TT4gfCBudWxsIHtcbiAgY29uc3QgYnlOYW1lID0gbmV3IE1hcChjaGFubmVscy5tYXAoKGMpID0+IFtjLmNoYW5uZWwsIGNdKSk7XG4gIHJldHVybiAoY2hhbm5lbDogc3RyaW5nKSA9PiBieU5hbWUuZ2V0KGNoYW5uZWwpID8/IG51bGw7XG59XG4iXX0=
@@ -109,4 +109,4 @@ export function resetOrgAICache(orgId) {
109
109
  if (k.startsWith(`${orgId}\u0000`))
110
110
  keyCache.delete(k);
111
111
  }
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWFpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9vcmctYWktY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUE0QnRDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9ELHFGQUFxRjtBQUNyRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQztBQUN4RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztBQUVwRCxtRkFBbUY7QUFDbkYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLHdGQUF3RjtBQUN4RixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQVkvRixNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBK0Is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LHdCQUF3QixDQUFDLENBQUM7UUFDeEcsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxNQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsR0FBRyxHQUE2QyxDQUFDO1FBQ3hELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQztBQUNILENBQUM7QUFFRCx5RkFBeUY7QUFDekYsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFjO0lBQzVDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsT0FBTztJQUNULENBQUM7SUFDRCxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLEtBQUssTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtRQUFFLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDO1lBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIG9yZyBoYWxmIG9mIGV2ZXJ5IEFJIGNhbGw6IGlzIEFJIHN3aXRjaGVkIG9uIGZvciB0aGlzIG9yZ2FuaXphdGlvbiwgd2hpY2hcbiAqIHByb3ZpZGVycyBoYXMgaXQgY29uZmlndXJlZCBpdHMgT1dOIGtleSBmb3IsIGFuZCDigJQgd2hlbiB0aGUgY2FsbCBpcyBnb2luZyB0b1xuICogdXNlIG9uZSDigJQgdGhlIGRlY3J5cHRlZCBrZXkuXG4gKlxuICogUGxhdGZvcm0gaG9sZHMgYm90aCBmYWN0cyAodGhlIG9yZydzIGBhaUVuYWJsZWRgIHN3aXRjaCBhbmQgaXRzIGVuY3J5cHRlZFxuICogYGFpUHJvdmlkZXJLZXlzYCksIHNvIHRoZXkgYXJlIHR3byBJTlRFUk5BTCByZWFkcyBvbiBwbGF0Zm9ybSwgZ2F0ZWQgYnlcbiAqIGByZXF1aXJlSW50ZXJuYWxTZXJ2aWNlYCB0byB0aGUgZm91ciBBSSBjYWxsZXJzIChhc2ssIHBpcGVsaW5lLCBwbHVnaW4sXG4gKiByZXBvcnRpbmcpIGFuZCBieSB0aGUgbWVzaCBvbiB0aGUgSXN0aW8gdGFyZ2V0czpcbiAqXG4gKiAgLSBgR0VUIC9pbnRlcm5hbC9haS9hY2Nlc3MvOm9yZ0lkYCAgICAgICAgIOKGkiBgeyBhaUVuYWJsZWQsIHByb3ZpZGVyczogc3RyaW5nW10gfWBcbiAqICAtIGBHRVQgL2ludGVybmFsL2FpL2tleXMvOm9yZ0lkLzpwcm92aWRlcmAg4oaSIGB7IHByb3ZpZGVyLCBhcGlLZXkgfWAgKGF1ZGl0ZWQgb24gcGxhdGZvcm0pXG4gKlxuICogS0VZIE1BVEVSSUFMIEhBTkRMSU5HLiBBIGtleSBmZXRjaGVkIGhlcmUgaXMgaGVsZCBpbiBwcm9jZXNzIG1lbW9yeSBmb3IgYXQgbW9zdFxuICoge0BsaW5rIE9SR19BSV9LRVlfVFRMX01TfSAoc28gYSByb3RhdGVkIG9yIGNsZWFyZWQga2V5IHN0b3BzIGJlaW5nIHVzZWQgd2l0aGluXG4gKiB0aGF0IHdpbmRvdywgYW5kIHBsYXRmb3JtJ3MgcmVhZCBhdWRpdCBpcyBub3Qgb25lIHJvdyBwZXIgbW9kZWwgY2FsbCksIGlzIG5ldmVyXG4gKiBsb2dnZWQsIG5ldmVyIHdyaXR0ZW4gdG8gUmVkaXMgb3IgYW55IHNoYXJlZCBjYWNoZSwgYW5kIG5ldmVyIHBsYWNlZCBpbiBhbiBlcnJvclxuICogbWVzc2FnZS4gQ2FsbGVycyBoYW5kIGl0IHN0cmFpZ2h0IHRvIGEgbW9kZWwgZmFjdG9yeS5cbiAqXG4gKiBGQUlMVVJFIElTIE5PVCBBIEZBTExCQUNLLiBBbiB1bnJlYWNoYWJsZSBwbGF0Zm9ybSBtYWtlcyB7QGxpbmsgZmV0Y2hPcmdBSUFjY2Vzc31cbiAqIHRocm93IGFuIHtAbGluayBBSUNvbmZpZ3VyYXRpb25FcnJvcn0gcmF0aGVyIHRoYW4gYW5zd2VyIFwiZW5hYmxlZCwgbm8gb3JnIGtleXNcIjpcbiAqIHRoYXQgYW5zd2VyIHdvdWxkIHNpbGVudGx5IGJpbGwgdGhlIHBsYXRmb3JtJ3Mga2V5IGZvciBhbiBvcmcgdGhhdCBjb25maWd1cmVkIGl0c1xuICogb3duLCBhbmQgd291bGQgcnVuIEFJIGZvciBhbiBvcmcgd2hvc2UgYWRtaW5pc3RyYXRvcnMgc3dpdGNoZWQgaXQgb2ZmLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTmV4dEZ1bmN0aW9uLCBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgY3JlYXRlU2FmZUNsaWVudCB9IGZyb20gJy4vaHR0cC1jbGllbnQuanMnO1xuaW1wb3J0IHsgc2VydmljZUlkZW50aXR5IH0gZnJvbSAnLi9zZXJ2aWNlLWtleXMuanMnO1xuaW1wb3J0IHsgQUlDb25maWd1cmF0aW9uRXJyb3IsIEFJRGlzYWJsZWRFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9hcHAtZXJyb3JzLmpzJztcbmltcG9ydCB7IGdldFNlcnZpY2VBdXRoSGVhZGVyIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zZXJ2aWNlLXRva2Vucy5qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcy5qcyc7XG5pbXBvcnQgeyBlbnZJbnQgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHsgc2VuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc2VydmljZUVuZHBvaW50IH0gZnJvbSAnLi4vdXRpbHMvc2VydmljZS1yZWdpc3RyeS5qcyc7XG5cbi8qKiBQbGF0Zm9ybSBwYXRocyAoZXhwb3J0ZWQgZm9yIHRoZSBwbGF0Zm9ybSByb3V0ZS1jb3ZlcmFnZSArIG1lc2ggZGVjbGFyYXRpb25zKS4gKi9cbmV4cG9ydCBjb25zdCBPUkdfQUlfQUNDRVNTX1BBVEggPSAnL2ludGVybmFsL2FpL2FjY2Vzcyc7XG5leHBvcnQgY29uc3QgT1JHX0FJX0tFWVNfUEFUSCA9ICcvaW50ZXJuYWwvYWkva2V5cyc7XG5cbi8qKiBIb3cgbG9uZyBhbiBvcmcncyBzd2l0Y2ggKyBjb25maWd1cmVkLXByb3ZpZGVyIGxpc3QgaXMgcmV1c2VkIChkZWZhdWx0IDMwcykuICovXG5leHBvcnQgY29uc3QgT1JHX0FJX0FDQ0VTU19UVExfTVMgPSBlbnZJbnQoJ09SR19BSV9BQ0NFU1NfVFRMX01TJywgMzBfMDAwLCB7IG1pbjogMCB9KTtcbi8qKiBIb3cgbG9uZyBhIGRlY3J5cHRlZCBvcmcga2V5IGlzIGhlbGQgaW4gbWVtb3J5IChkZWZhdWx0IDYwczsgMCBkaXNhYmxlcyBjYWNoaW5nKS4gKi9cbmV4cG9ydCBjb25zdCBPUkdfQUlfS0VZX1RUTF9NUyA9IGVudkludCgnT1JHX0FJX0tFWV9UVExfTVMnLCA2MF8wMDAsIHsgbWluOiAwLCBtYXg6IDMwMF8wMDAgfSk7XG5cbi8qKiBBbiBvcmcncyBBSSBwb3N0dXJlLCBhcyBwbGF0Zm9ybSByZXBvcnRzIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmdBSUFjY2VzcyB7XG4gIC8qKiBGYWxzZSB3aGVuIHRoZSBvcmcncyBhZG1pbmlzdHJhdG9ycyBzd2l0Y2hlZCBBSSBmZWF0dXJlcyBvZmYuICovXG4gIGFpRW5hYmxlZDogYm9vbGVhbjtcbiAgLyoqIFByb3ZpZGVyIGlkcyB0aGUgb3JnIGhhcyBjb25maWd1cmVkIGl0cyBPV04ga2V5IGZvciAoY2F0YWxvZyBpZHMpLiAqL1xuICBwcm92aWRlcnM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgQ2FjaGVkPFQ+IHsgdmFsdWU6IFQ7IGV4cGlyZXNBdDogbnVtYmVyIH1cblxuY29uc3QgYWNjZXNzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVkPE9yZ0FJQWNjZXNzPj4oKTtcbmNvbnN0IGtleUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENhY2hlZDxzdHJpbmc+PigpO1xuXG5sZXQgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVTYWZlQ2xpZW50PiB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIHBsYXRmb3JtKCk6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVNhZmVDbGllbnQ+IHtcbiAgY2xpZW50ID8/PSBjcmVhdGVTYWZlQ2xpZW50KHsgLi4uc2VydmljZUVuZHBvaW50KCdwbGF0Zm9ybScpLCB0aW1lb3V0OiA1XzAwMCB9KTtcbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuLyoqIEEgc2VydmljZSB0b2tlbiBzY29wZWQgdG8gdGhlIG9yZyBiZWluZyBhc2tlZCBhYm91dCDigJQgcGxhdGZvcm0gYmluZHMgdGhlIHJlYWQgdG8gaXQuICovXG5mdW5jdGlvbiBhdXRoRm9yKG9yZ0lkOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHsgQXV0aG9yaXphdGlvbjogZ2V0U2VydmljZUF1dGhIZWFkZXIoeyBzZXJ2aWNlTmFtZTogc2VydmljZUlkZW50aXR5KCksIG9yZ0lkLCByb2xlOiAnbWVtYmVyJyB9KSB9O1xufVxuXG4vKipcbiAqIFRoZSBvcmcncyBBSSBzd2l0Y2ggYW5kIHRoZSBwcm92aWRlcnMgaXQgaGFzIGl0cyBvd24ga2V5IGZvci4gQ2FjaGVkXG4gKiB7QGxpbmsgT1JHX0FJX0FDQ0VTU19UVExfTVN9LiBUaHJvd3Mge0BsaW5rIEFJQ29uZmlndXJhdGlvbkVycm9yfSAoNTAzKSB3aGVuIHBsYXRmb3JtXG4gKiBjYW5ub3QgYW5zd2VyIOKAlCBzZWUgdGhlIG1vZHVsZSBjb21tZW50IGZvciB3aHkgdGhhdCBpcyBub3QgXCJlbmFibGVkXCIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaE9yZ0FJQWNjZXNzKG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPE9yZ0FJQWNjZXNzPiB7XG4gIGNvbnN0IGhpdCA9IGFjY2Vzc0NhY2hlLmdldChvcmdJZCk7XG4gIGlmIChoaXQgJiYgaGl0LmV4cGlyZXNBdCA+IERhdGUubm93KCkpIHJldHVybiBoaXQudmFsdWU7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwbGF0Zm9ybSgpLmdldDx7IGRhdGE/OiBQYXJ0aWFsPE9yZ0FJQWNjZXNzPiB9ICYgUGFydGlhbDxPcmdBSUFjY2Vzcz4+KFxuICAgIGAke09SR19BSV9BQ0NFU1NfUEFUSH0vJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfWAsIHsgaGVhZGVyczogYXV0aEZvcihvcmdJZCkgfSxcbiAgKTtcbiAgY29uc3QgYm9keSA9IHJlc3BvbnNlPy5ib2R5O1xuICBjb25zdCBkYXRhID0gYm9keT8uZGF0YSA/PyBib2R5O1xuICBpZiAoIXJlc3BvbnNlIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCB8fCB0eXBlb2YgZGF0YT8uYWlFbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICB0aHJvdyBuZXcgQUlDb25maWd1cmF0aW9uRXJyb3IoJ1RoZSBvcmdhbml6YXRpb25cXCdzIEFJIHNldHRpbmdzIGNvdWxkIG5vdCBiZSByZWFkLCBzbyBubyBBSSByZXF1ZXN0IHdhcyBtYWRlLiBUcnkgYWdhaW4gc2hvcnRseS4nKTtcbiAgfVxuICBjb25zdCB2YWx1ZTogT3JnQUlBY2Nlc3MgPSB7XG4gICAgYWlFbmFibGVkOiBkYXRhLmFpRW5hYmxlZCxcbiAgICBwcm92aWRlcnM6IEFycmF5LmlzQXJyYXkoZGF0YS5wcm92aWRlcnMpID8gZGF0YS5wcm92aWRlcnMuZmlsdGVyKChwKTogcCBpcyBzdHJpbmcgPT4gdHlwZW9mIHAgPT09ICdzdHJpbmcnKSA6IFtdLFxuICB9O1xuICBpZiAoT1JHX0FJX0FDQ0VTU19UVExfTVMgPiAwKSBhY2Nlc3NDYWNoZS5zZXQob3JnSWQsIHsgdmFsdWUsIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIE9SR19BSV9BQ0NFU1NfVFRMX01TIH0pO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhlIG9yZydzIGRlY3J5cHRlZCBrZXkgZm9yIGBwcm92aWRlcmAuIENhbGwgT05MWSBhZnRlciB7QGxpbmsgZmV0Y2hPcmdBSUFjY2Vzc31cbiAqIGxpc3RlZCB0aGUgcHJvdmlkZXIuIFRocm93cyB7QGxpbmsgQUlDb25maWd1cmF0aW9uRXJyb3J9IHdoZW4gdGhlIGtleSBjYW5ub3QgYmVcbiAqIGxvYWRlZCDigJQgdGhlIGNhbGxlciBtdXN0IHRoZW4gZmFpbCB0aGUgcmVxdWVzdCwgbmV2ZXIgZmFsbCBiYWNrIHRvIHRoZSBwbGF0Zm9ybSBrZXkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaE9yZ0FJS2V5KG9yZ0lkOiBzdHJpbmcsIHByb3ZpZGVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjYWNoZUtleSA9IGAke29yZ0lkfVxcdTAwMDAke3Byb3ZpZGVyfWA7XG4gIGNvbnN0IGhpdCA9IGtleUNhY2hlLmdldChjYWNoZUtleSk7XG4gIGlmIChoaXQgJiYgaGl0LmV4cGlyZXNBdCA+IERhdGUubm93KCkpIHJldHVybiBoaXQudmFsdWU7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwbGF0Zm9ybSgpLmdldDx7IGRhdGE/OiB7IGFwaUtleT86IHVua25vd24gfTsgYXBpS2V5PzogdW5rbm93biB9PihcbiAgICBgJHtPUkdfQUlfS0VZU19QQVRIfS8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHByb3ZpZGVyKX1gLCB7IGhlYWRlcnM6IGF1dGhGb3Iob3JnSWQpIH0sXG4gICk7XG4gIGNvbnN0IGFwaUtleSA9IHJlc3BvbnNlPy5ib2R5Py5kYXRhPy5hcGlLZXkgPz8gcmVzcG9uc2U/LmJvZHk/LmFwaUtleTtcbiAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDAgfHwgdHlwZW9mIGFwaUtleSAhPT0gJ3N0cmluZycgfHwgYXBpS2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIFN0YXR1cyBvbmx5OiB0aGUgYm9keSBpcyBuZXZlciBlY2hvZWQsIGFuZCB0aGUga2V5IGlzIG5ldmVyIGluIGEgbWVzc2FnZS5cbiAgICB0aHJvdyBuZXcgQUlDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICBgVGhlIG9yZ2FuaXphdGlvbidzICR7cHJvdmlkZXJ9IEFQSSBrZXkgY291bGQgbm90IGJlIGxvYWRlZCwgc28gdGhlIHJlcXVlc3Qgd2FzIG5vdCBzZW50LiBgXG4gICAgICArICdJdCB3YXMgTk9UIHJldHJpZWQgb24gdGhlIHBsYXRmb3JtXFwncyBrZXkg4oCUIHJlLXNhdmUgdGhlIGtleSBpbiBTZXR0aW5ncywgb3IgdHJ5IGFnYWluIHNob3J0bHkuJyxcbiAgICApO1xuICB9XG4gIGlmIChPUkdfQUlfS0VZX1RUTF9NUyA+IDApIGtleUNhY2hlLnNldChjYWNoZUtleSwgeyB2YWx1ZTogYXBpS2V5LCBleHBpcmVzQXQ6IERhdGUubm93KCkgKyBPUkdfQUlfS0VZX1RUTF9NUyB9KTtcbiAgcmV0dXJuIGFwaUtleTtcbn1cblxuLyoqIFRocm93IHtAbGluayBBSURpc2FibGVkRXJyb3J9ICg0MDMgYEFJX0RJU0FCTEVEYCkgd2hlbiB0aGUgb3JnIHN3aXRjaGVkIEFJIG9mZi4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3NlcnRPcmdBSUVuYWJsZWQob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8T3JnQUlBY2Nlc3M+IHtcbiAgY29uc3QgYWNjZXNzID0gYXdhaXQgZmV0Y2hPcmdBSUFjY2VzcyhvcmdJZCk7XG4gIGlmICghYWNjZXNzLmFpRW5hYmxlZCkgdGhyb3cgbmV3IEFJRGlzYWJsZWRFcnJvcigpO1xuICByZXR1cm4gYWNjZXNzO1xufVxuXG4vKipcbiAqIFJvdXRlIGd1YXJkOiByZWZ1c2UgZXZlcnkgQUkgZW50cnkgcG9pbnQgZm9yIGFuIG9yZyB3aG9zZSBhZG1pbmlzdHJhdG9ycyBzd2l0Y2hlZFxuICogQUkgb2ZmICg0MDMgYEFJX0RJU0FCTEVEYCksIG9yIHdob3NlIHNldHRpbmdzIHBsYXRmb3JtIGNhbm5vdCBjb25maXJtICg1MDMpLiBNb3VudFxuICogQUZURVIgYXV0aCBhbmQgQkVGT1JFIGFueSBxdW90YSByZXNlcnZhdGlvbiwgc28gYSBkaXNhYmxlZCBvcmcgaXMgbmV2ZXIgY2hhcmdlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVPcmdBSUVuYWJsZWQocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBuZXh0OiBOZXh0RnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgb3JnSWQgPSByZXEudXNlcj8ub3JnYW5pemF0aW9uSWQ7XG4gIGlmICghb3JnSWQpIHtcbiAgICBzZW5kRXJyb3IocmVzLCA0MDMsICdObyBvcmdhbml6YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCcsIEVycm9yQ29kZS5JTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMpO1xuICAgIHJldHVybjtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGFzc2VydE9yZ0FJRW5hYmxlZChTdHJpbmcob3JnSWQpKTtcbiAgICBuZXh0KCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IGUgPSBlcnIgYXMgQUlEaXNhYmxlZEVycm9yIHwgQUlDb25maWd1cmF0aW9uRXJyb3I7XG4gICAgc2VuZEVycm9yKHJlcywgZS5zdGF0dXNDb2RlID8/IDUwMywgZS5tZXNzYWdlLCBlLmNvZGUpO1xuICB9XG59XG5cbi8qKiBEcm9wIHRoZSBjYWNoZWQgb3JnIEFJIHBvc3R1cmUgKyBrZXlzICh0ZXN0czsgYW4gb3JnIHdob3NlIHNldHRpbmdzIGp1c3QgY2hhbmdlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRPcmdBSUNhY2hlKG9yZ0lkPzogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChvcmdJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYWNjZXNzQ2FjaGUuY2xlYXIoKTtcbiAgICBrZXlDYWNoZS5jbGVhcigpO1xuICAgIHJldHVybjtcbiAgfVxuICBhY2Nlc3NDYWNoZS5kZWxldGUob3JnSWQpO1xuICBmb3IgKGNvbnN0IGsgb2Yga2V5Q2FjaGUua2V5cygpKSBpZiAoay5zdGFydHNXaXRoKGAke29yZ0lkfVxcdTAwMDBgKSkga2V5Q2FjaGUuZGVsZXRlKGspO1xufVxuIl19
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWFpLWNsaWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL29yZy1haS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQTRCdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFL0QscUZBQXFGO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO0FBRXBELG1GQUFtRjtBQUNuRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkYsd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBWS9GLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO0FBQzNELE1BQU0s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QztRQUN4RyxPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sQ0FBQyxHQUFHLEdBQTZDLENBQUM7UUFDeEQsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDO0FBQ0gsQ0FBQztBQUVELHlGQUF5RjtBQUN6RixNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWM7SUFDNUMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDeEIsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixPQUFPO0lBQ1QsQ0FBQztJQUNELFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsS0FBSyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO1FBQUUsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUM7WUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgb3JnIGhhbGYgb2YgZXZlcnkgQUkgY2FsbDogaXMgQUkgc3dpdGNoZWQgb24gZm9yIHRoaXMgb3JnYW5pemF0aW9uLCB3aGljaFxuICogcHJvdmlkZXJzIGhhcyBpdCBjb25maWd1cmVkIGl0cyBPV04ga2V5IGZvciwgYW5kIOKAlCB3aGVuIHRoZSBjYWxsIGlzIGdvaW5nIHRvXG4gKiB1c2Ugb25lIOKAlCB0aGUgZGVjcnlwdGVkIGtleS5cbiAqXG4gKiBQbGF0Zm9ybSBob2xkcyBib3RoIGZhY3RzICh0aGUgb3JnJ3MgYGFpRW5hYmxlZGAgc3dpdGNoIGFuZCBpdHMgZW5jcnlwdGVkXG4gKiBgYWlQcm92aWRlcktleXNgKSwgc28gdGhleSBhcmUgdHdvIElOVEVSTkFMIHJlYWRzIG9uIHBsYXRmb3JtLCBnYXRlZCBieVxuICogYHJlcXVpcmVJbnRlcm5hbFNlcnZpY2VgIHRvIHRoZSBmb3VyIEFJIGNhbGxlcnMgKGFzaywgcGlwZWxpbmUsIHBsdWdpbixcbiAqIHJlcG9ydGluZykgYW5kIGJ5IHRoZSBtZXNoIG9uIHRoZSBJc3RpbyB0YXJnZXRzOlxuICpcbiAqICAtIGBHRVQgL2ludGVybmFsL2FpL2FjY2Vzcy86b3JnSWRgICAgICAgICAg4oaSIGB7IGFpRW5hYmxlZCwgcHJvdmlkZXJzOiBzdHJpbmdbXSB9YFxuICogIC0gYEdFVCAvaW50ZXJuYWwvYWkva2V5cy86b3JnSWQvOnByb3ZpZGVyYCDihpIgYHsgcHJvdmlkZXIsIGFwaUtleSB9YCAoYXVkaXRlZCBvbiBwbGF0Zm9ybSlcbiAqXG4gKiBLRVkgTUFURVJJQUwgSEFORExJTkcuIEEga2V5IGZldGNoZWQgaGVyZSBpcyBoZWxkIGluIHByb2Nlc3MgbWVtb3J5IGZvciBhdCBtb3N0XG4gKiB7QGxpbmsgT1JHX0FJX0tFWV9UVExfTVN9IChzbyBhIHJvdGF0ZWQgb3IgY2xlYXJlZCBrZXkgc3RvcHMgYmVpbmcgdXNlZCB3aXRoaW5cbiAqIHRoYXQgd2luZG93LCBhbmQgcGxhdGZvcm0ncyByZWFkIGF1ZGl0IGlzIG5vdCBvbmUgcm93IHBlciBtb2RlbCBjYWxsKSwgaXMgbmV2ZXJcbiAqIGxvZ2dlZCwgbmV2ZXIgd3JpdHRlbiB0byBSZWRpcyBvciBhbnkgc2hhcmVkIGNhY2hlLCBhbmQgbmV2ZXIgcGxhY2VkIGluIGFuIGVycm9yXG4gKiBtZXNzYWdlLiBDYWxsZXJzIGhhbmQgaXQgc3RyYWlnaHQgdG8gYSBtb2RlbCBmYWN0b3J5LlxuICpcbiAqIEZBSUxVUkUgSVMgTk9UIEEgRkFMTEJBQ0suIEFuIHVucmVhY2hhYmxlIHBsYXRmb3JtIG1ha2VzIHtAbGluayBmZXRjaE9yZ0FJQWNjZXNzfVxuICogdGhyb3cgYW4ge0BsaW5rIEFJQ29uZmlndXJhdGlvbkVycm9yfSByYXRoZXIgdGhhbiBhbnN3ZXIgXCJlbmFibGVkLCBubyBvcmcga2V5c1wiOlxuICogdGhhdCBhbnN3ZXIgd291bGQgc2lsZW50bHkgYmlsbCB0aGUgcGxhdGZvcm0ncyBrZXkgZm9yIGFuIG9yZyB0aGF0IGNvbmZpZ3VyZWQgaXRzXG4gKiBvd24sIGFuZCB3b3VsZCBydW4gQUkgZm9yIGFuIG9yZyB3aG9zZSBhZG1pbmlzdHJhdG9ycyBzd2l0Y2hlZCBpdCBvZmYuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBOZXh0RnVuY3Rpb24sIFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBjcmVhdGVTYWZlQ2xpZW50IH0gZnJvbSAnLi9odHRwLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBzZXJ2aWNlSWRlbnRpdHkgfSBmcm9tICcuL3NlcnZpY2Uta2V5cy5qcyc7XG5pbXBvcnQgeyBBSUNvbmZpZ3VyYXRpb25FcnJvciwgQUlEaXNhYmxlZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL2FwcC1lcnJvcnMuanMnO1xuaW1wb3J0IHsgZ2V0U2VydmljZUF1dGhIZWFkZXIgfSBmcm9tICcuLi9taWRkbGV3YXJlL3NlcnZpY2UtdG9rZW5zLmpzJztcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJy4uL3R5cGVzL2Vycm9yLWNvZGVzLmpzJztcbmltcG9ydCB7IGVudkludCB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5pbXBvcnQgeyBzZW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBzZXJ2aWNlRW5kcG9pbnQgfSBmcm9tICcuLi91dGlscy9zZXJ2aWNlLXJlZ2lzdHJ5LmpzJztcblxuLyoqIFBsYXRmb3JtIHBhdGhzIChleHBvcnRlZCBmb3IgdGhlIHBsYXRmb3JtIHJvdXRlLWNvdmVyYWdlICsgbWVzaCBkZWNsYXJhdGlvbnMpLiAqL1xuZXhwb3J0IGNvbnN0IE9SR19BSV9BQ0NFU1NfUEFUSCA9ICcvaW50ZXJuYWwvYWkvYWNjZXNzJztcbmV4cG9ydCBjb25zdCBPUkdfQUlfS0VZU19QQVRIID0gJy9pbnRlcm5hbC9haS9rZXlzJztcblxuLyoqIEhvdyBsb25nIGFuIG9yZydzIHN3aXRjaCArIGNvbmZpZ3VyZWQtcHJvdmlkZXIgbGlzdCBpcyByZXVzZWQgKGRlZmF1bHQgMzBzKS4gKi9cbmV4cG9ydCBjb25zdCBPUkdfQUlfQUNDRVNTX1RUTF9NUyA9IGVudkludCgnT1JHX0FJX0FDQ0VTU19UVExfTVMnLCAzMF8wMDAsIHsgbWluOiAwIH0pO1xuLyoqIEhvdyBsb25nIGEgZGVjcnlwdGVkIG9yZyBrZXkgaXMgaGVsZCBpbiBtZW1vcnkgKGRlZmF1bHQgNjBzOyAwIGRpc2FibGVzIGNhY2hpbmcpLiAqL1xuZXhwb3J0IGNvbnN0IE9SR19BSV9LRVlfVFRMX01TID0gZW52SW50KCdPUkdfQUlfS0VZX1RUTF9NUycsIDYwXzAwMCwgeyBtaW46IDAsIG1heDogMzAwXzAwMCB9KTtcblxuLyoqIEFuIG9yZydzIEFJIHBvc3R1cmUsIGFzIHBsYXRmb3JtIHJlcG9ydHMgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yZ0FJQWNjZXNzIHtcbiAgLyoqIEZhbHNlIHdoZW4gdGhlIG9yZydzIGFkbWluaXN0cmF0b3JzIHN3aXRjaGVkIEFJIGZlYXR1cmVzIG9mZi4gKi9cbiAgYWlFbmFibGVkOiBib29sZWFuO1xuICAvKiogUHJvdmlkZXIgaWRzIHRoZSBvcmcgaGFzIGNvbmZpZ3VyZWQgaXRzIE9XTiBrZXkgZm9yIChjYXRhbG9nIGlkcykuICovXG4gIHByb3ZpZGVyczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBDYWNoZWQ8VD4geyB2YWx1ZTogVDsgZXhwaXJlc0F0OiBudW1iZXIgfVxuXG5jb25zdCBhY2Nlc3NDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZWQ8T3JnQUlBY2Nlc3M+PigpO1xuY29uc3Qga2V5Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVkPHN0cmluZz4+KCk7XG5cbmxldCBjbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVNhZmVDbGllbnQ+IHwgdW5kZWZpbmVkO1xuZnVuY3Rpb24gcGxhdGZvcm0oKTogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlU2FmZUNsaWVudD4ge1xuICBjbGllbnQgPz89IGNyZWF0ZVNhZmVDbGllbnQoeyAuLi5zZXJ2aWNlRW5kcG9pbnQoJ3BsYXRmb3JtJyksIHRpbWVvdXQ6IDVfMDAwIH0pO1xuICByZXR1cm4gY2xpZW50O1xufVxuXG4vKiogQSBzZXJ2aWNlIHRva2VuIHNjb3BlZCB0byB0aGUgb3JnIGJlaW5nIGFza2VkIGFib3V0IOKAlCBwbGF0Zm9ybSBiaW5kcyB0aGUgcmVhZCB0byBpdC4gKi9cbmZ1bmN0aW9uIGF1dGhGb3Iob3JnSWQ6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4geyBBdXRob3JpemF0aW9uOiBnZXRTZXJ2aWNlQXV0aEhlYWRlcih7IHNlcnZpY2VOYW1lOiBzZXJ2aWNlSWRlbnRpdHkoKSwgb3JnSWQsIHJvbGU6ICdtZW1iZXInIH0pIH07XG59XG5cbi8qKlxuICogVGhlIG9yZydzIEFJIHN3aXRjaCBhbmQgdGhlIHByb3ZpZGVycyBpdCBoYXMgaXRzIG93biBrZXkgZm9yLiBDYWNoZWRcbiAqIHtAbGluayBPUkdfQUlfQUNDRVNTX1RUTF9NU30uIFRocm93cyB7QGxpbmsgQUlDb25maWd1cmF0aW9uRXJyb3J9ICg1MDMpIHdoZW4gcGxhdGZvcm1cbiAqIGNhbm5vdCBhbnN3ZXIg4oCUIHNlZSB0aGUgbW9kdWxlIGNvbW1lbnQgZm9yIHdoeSB0aGF0IGlzIG5vdCBcImVuYWJsZWRcIi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoT3JnQUlBY2Nlc3Mob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8T3JnQUlBY2Nlc3M+IHtcbiAgY29uc3QgaGl0ID0gYWNjZXNzQ2FjaGUuZ2V0KG9yZ0lkKTtcbiAgaWYgKGhpdCAmJiBoaXQuZXhwaXJlc0F0ID4gRGF0ZS5ub3coKSkgcmV0dXJuIGhpdC52YWx1ZTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBsYXRmb3JtKCkuZ2V0PHsgZGF0YT86IFBhcnRpYWw8T3JnQUlBY2Nlc3M+IH0gJiBQYXJ0aWFsPE9yZ0FJQWNjZXNzPj4oXG4gICAgYCR7T1JHX0FJX0FDQ0VTU19QQVRIfS8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9YCwgeyBoZWFkZXJzOiBhdXRoRm9yKG9yZ0lkKSB9LFxuICApO1xuICBjb25zdCBib2R5ID0gcmVzcG9uc2U/LmJvZHk7XG4gIGNvbnN0IGRhdGEgPSBib2R5Py5kYXRhID8/IGJvZHk7XG4gIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwIHx8IHR5cGVvZiBkYXRhPy5haUVuYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgIHRocm93IG5ldyBBSUNvbmZpZ3VyYXRpb25FcnJvcignVGhlIG9yZ2FuaXphdGlvblxcJ3MgQUkgc2V0dGluZ3MgY291bGQgbm90IGJlIHJlYWQsIHNvIG5vIEFJIHJlcXVlc3Qgd2FzIG1hZGUuIFRyeSBhZ2FpbiBzaG9ydGx5LicpO1xuICB9XG4gIGNvbnN0IHZhbHVlOiBPcmdBSUFjY2VzcyA9IHtcbiAgICBhaUVuYWJsZWQ6IGRhdGEuYWlFbmFibGVkLFxuICAgIHByb3ZpZGVyczogQXJyYXkuaXNBcnJheShkYXRhLnByb3ZpZGVycykgPyBkYXRhLnByb3ZpZGVycy5maWx0ZXIoKHApOiBwIGlzIHN0cmluZyA9PiB0eXBlb2YgcCA9PT0gJ3N0cmluZycpIDogW10sXG4gIH07XG4gIGlmIChPUkdfQUlfQUNDRVNTX1RUTF9NUyA+IDApIGFjY2Vzc0NhY2hlLnNldChvcmdJZCwgeyB2YWx1ZSwgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgT1JHX0FJX0FDQ0VTU19UVExfTVMgfSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgb3JnJ3MgZGVjcnlwdGVkIGtleSBmb3IgYHByb3ZpZGVyYC4gQ2FsbCBPTkxZIGFmdGVyIHtAbGluayBmZXRjaE9yZ0FJQWNjZXNzfVxuICogbGlzdGVkIHRoZSBwcm92aWRlci4gVGhyb3dzIHtAbGluayBBSUNvbmZpZ3VyYXRpb25FcnJvcn0gd2hlbiB0aGUga2V5IGNhbm5vdCBiZVxuICogbG9hZGVkIOKAlCB0aGUgY2FsbGVyIG11c3QgdGhlbiBmYWlsIHRoZSByZXF1ZXN0LCBuZXZlciBmYWxsIGJhY2sgdG8gdGhlIHBsYXRmb3JtIGtleS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoT3JnQUlLZXkob3JnSWQ6IHN0cmluZywgcHJvdmlkZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGNhY2hlS2V5ID0gYCR7b3JnSWR9XFx1MDAwMCR7cHJvdmlkZXJ9YDtcbiAgY29uc3QgaGl0ID0ga2V5Q2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgaWYgKGhpdCAmJiBoaXQuZXhwaXJlc0F0ID4gRGF0ZS5ub3coKSkgcmV0dXJuIGhpdC52YWx1ZTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBsYXRmb3JtKCkuZ2V0PHsgZGF0YT86IHsgYXBpS2V5PzogdW5rbm93biB9OyBhcGlLZXk/OiB1bmtub3duIH0+KFxuICAgIGAke09SR19BSV9LRVlTX1BBVEh9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vJHtlbmNvZGVVUklDb21wb25lbnQocHJvdmlkZXIpfWAsIHsgaGVhZGVyczogYXV0aEZvcihvcmdJZCkgfSxcbiAgKTtcbiAgY29uc3QgYXBpS2V5ID0gcmVzcG9uc2U/LmJvZHk/LmRhdGE/LmFwaUtleSA/PyByZXNwb25zZT8uYm9keT8uYXBpS2V5O1xuICBpZiAoIXJlc3BvbnNlIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCB8fCB0eXBlb2YgYXBpS2V5ICE9PSAnc3RyaW5nJyB8fCBhcGlLZXkubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gU3RhdHVzIG9ubHk6IHRoZSBib2R5IGlzIG5ldmVyIGVjaG9lZCwgYW5kIHRoZSBrZXkgaXMgbmV2ZXIgaW4gYSBtZXNzYWdlLlxuICAgIHRocm93IG5ldyBBSUNvbmZpZ3VyYXRpb25FcnJvcihcbiAgICAgIGBUaGUgb3JnYW5pemF0aW9uJ3MgJHtwcm92aWRlcn0gQVBJIGtleSBjb3VsZCBub3QgYmUgbG9hZGVkLCBzbyB0aGUgcmVxdWVzdCB3YXMgbm90IHNlbnQuIGBcbiAgICAgICsgJ0l0IHdhcyBOT1QgcmV0cmllZCBvbiB0aGUgcGxhdGZvcm1cXCdzIGtleSDigJQgcmUtc2F2ZSB0aGUga2V5IGluIFNldHRpbmdzLCBvciB0cnkgYWdhaW4gc2hvcnRseS4nLFxuICAgICk7XG4gIH1cbiAgaWYgKE9SR19BSV9LRVlfVFRMX01TID4gMCkga2V5Q2FjaGUuc2V0KGNhY2hlS2V5LCB7IHZhbHVlOiBhcGlLZXksIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIE9SR19BSV9LRVlfVFRMX01TIH0pO1xuICByZXR1cm4gYXBpS2V5O1xufVxuXG4vKiogVGhyb3cge0BsaW5rIEFJRGlzYWJsZWRFcnJvcn0gKDQwMyBgQUlfRElTQUJMRURgKSB3aGVuIHRoZSBvcmcgc3dpdGNoZWQgQUkgb2ZmLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VydE9yZ0FJRW5hYmxlZChvcmdJZDogc3RyaW5nKTogUHJvbWlzZTxPcmdBSUFjY2Vzcz4ge1xuICBjb25zdCBhY2Nlc3MgPSBhd2FpdCBmZXRjaE9yZ0FJQWNjZXNzKG9yZ0lkKTtcbiAgaWYgKCFhY2Nlc3MuYWlFbmFibGVkKSB0aHJvdyBuZXcgQUlEaXNhYmxlZEVycm9yKCk7XG4gIHJldHVybiBhY2Nlc3M7XG59XG5cbi8qKlxuICogUm91dGUgZ3VhcmQ6IHJlZnVzZSBldmVyeSBBSSBlbnRyeSBwb2ludCBmb3IgYW4gb3JnIHdob3NlIGFkbWluaXN0cmF0b3JzIHN3aXRjaGVkXG4gKiBBSSBvZmYgKDQwMyBgQUlfRElTQUJMRURgKSwgb3Igd2hvc2Ugc2V0dGluZ3MgcGxhdGZvcm0gY2Fubm90IGNvbmZpcm0gKDUwMykuIE1vdW50XG4gKiBBRlRFUiBhdXRoIGFuZCBCRUZPUkUgYW55IHF1b3RhIHJlc2VydmF0aW9uLCBzbyBhIGRpc2FibGVkIG9yZyBpcyBuZXZlciBjaGFyZ2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWlyZU9yZ0FJRW5hYmxlZChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UsIG5leHQ6IE5leHRGdW5jdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBvcmdJZCA9IHJlcS51c2VyPy5vcmdhbml6YXRpb25JZDtcbiAgaWYgKCFvcmdJZCkge1xuICAgIHNlbmRFcnJvcihyZXMsIDQwMywgJ05vIG9yZ2FuaXphdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0JywgRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgYXNzZXJ0T3JnQUlFbmFibGVkKFN0cmluZyhvcmdJZCkpO1xuICAgIG5leHQoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgZSA9IGVyciBhcyBBSURpc2FibGVkRXJyb3IgfCBBSUNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICBzZW5kRXJyb3IocmVzLCBlLnN0YXR1c0NvZGUgPz8gNTAzLCBlLm1lc3NhZ2UsIGUuY29kZSk7XG4gIH1cbn1cblxuLyoqIERyb3AgdGhlIGNhY2hlZCBvcmcgQUkgcG9zdHVyZSArIGtleXMgKHRlc3RzOyBhbiBvcmcgd2hvc2Ugc2V0dGluZ3MganVzdCBjaGFuZ2VkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldE9yZ0FJQ2FjaGUob3JnSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKG9yZ0lkID09PSB1bmRlZmluZWQpIHtcbiAgICBhY2Nlc3NDYWNoZS5jbGVhcigpO1xuICAgIGtleUNhY2hlLmNsZWFyKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGFjY2Vzc0NhY2hlLmRlbGV0ZShvcmdJZCk7XG4gIGZvciAoY29uc3QgayBvZiBrZXlDYWNoZS5rZXlzKCkpIGlmIChrLnN0YXJ0c1dpdGgoYCR7b3JnSWR9XFx1MDAwMGApKSBrZXlDYWNoZS5kZWxldGUoayk7XG59XG4iXX0=
@@ -192,4 +192,4 @@ export function ackLatencySeconds(event) {
192
192
  return undefined;
193
193
  return (to - from) / 1000;
194
194
  }
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZXJkdXR5LWluYm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvcGFnZXJkdXR5LWluYm91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU3QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUVqRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRywyQkFBMkIsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsT0FBd0IsRUFBRSxNQUEwQixFQUFFLE1BQWM7SUFDM0csSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEQsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFF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QUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQXlCO0lBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM1RCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakQsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2xGLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgSU5CT1VORCBoYWxmIG9mIG9uLWNhbGw6IHdoYXQgdGhlIHByb3ZpZGVyIHRlbGxzIHVzIGJhY2suXG4gKlxuICogRXZlcnl0aGluZyBlbHNlIGluIHRoaXMgZmVhdHVyZSBwdXNoZXMgb3V0d2FyZCDigJQgYW4gYWxlcnQgZmlyZXMsIGEgY2FzZVxuICogYXBwcm9hY2hlcyBpdHMgZGVhZGxpbmUsIGFuIGV2ZW50IGdvZXMgdG8gRXZlbnRzIHYyLiBUaGF0IGRpcmVjdGlvbiBjYW4gb25seVxuICogZXZlciByZXBvcnQgdGhhdCBhIHBhZ2Ugd2FzIEFDQ0VQVEVELCB3aGljaCBpcyBhIDIwMiBhbmQgbm90IGEgcGhvbmUgcmluZ2luZy5cbiAqIFRoaXMgbW9kdWxlIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiB0aGUgdHdvIGZhY3RzIHRoYXQgYWN0dWFsbHkgbWF0dGVyOlxuICpcbiAqICAtIFNPTUVCT0RZIFBJQ0tFRCBJVCBVUCwgYW5kIHdoby4gYG9uY2FsbF9wYWdlc190b3RhbHtvdXRjb21lPVwiYWNjZXB0ZWRcIn1gXG4gKiAgICBjYW5ub3QgYW5zd2VyIFwid2FzIGFueW9uZSBhd2FrZSBhdCAwMzoxNFwiOyBhbiBhY2tub3dsZWRnZW1lbnQgY2FuLCBhbmRcbiAqICAgIGJvdW5kIHRvIGEgdXNlciBpZCBpdCBiZWNvbWVzIGFuIGF1ZGl0IHJlY29yZCByYXRoZXIgdGhhbiBhIGhpbnQuIFRoZVxuICogICAgcHJvdmlkZXIncyBvd24gYWNrIHZpZXcgaXMgbm90IGF1ZGl0YWJsZSBoZXJlIOKAlCBhIGNsaWNrIG9uIGEgbGluayBpbiB0aGVpclxuICogICAgVUkgaXMgbm90IGFuIGlkZW50aXR5IHRoaXMgc3lzdGVtIGNhbiBhdHRlc3QgdG8g4oCUIHNvIHRoZSB3ZWJob29rIGlzIHdoYXRcbiAqICAgIHR1cm5zIHRoZWlyIHN0YXRlIGNoYW5nZSBpbnRvIG91ciByZWNvcmQuXG4gKiAgLSBOT0JPRFkgSVMgU0NIRURVTEVELiBBIHJvdGEgd2l0aCBhIGhvbGUgbmV4dCBUdWVzZGF5IGhhcyB0byBiZSB2aXNpYmxlIG9uXG4gKiAgICBNT05EQVksIG5vdCBhdCAwMjowMCBUdWVzZGF5LiBUaGF0IGlzIGFuIGFic2VuY2UgY2hlY2ssIGFuZCBhYnNlbmNlIGNoZWNrc1xuICogICAgYXJlIHRoZSBvbmVzIHRoaXMgY29kZWJhc2Uga2VlcHMgZmluZGluZyBpdCBoYWQgbWlzc2VkLiBJdCBpcyBhbnN3ZXJlZCBieVxuICogICAgUkVBRElORyB0aGUgcHJvdmlkZXIncyBzY2hlZHVsZSByYXRoZXIgdGhhbiBvd25pbmcgb25lLlxuICpcbiAqIFRXTyBDUkVERU5USUFMUywgREVMSUJFUkFURUxZIFNFUEFSQVRFIEFORCBCT1RIIE9QVElPTkFMLlxuICogYFBBR0VSRFVUWV9XRUJIT09LX1NFQ1JFVGAgdmVyaWZpZXMgd2hhdCB0aGV5IHNlbmQgdXMuIGBQQUdFUkRVVFlfQVBJX1RPS0VOYFxuICogaXMgYSBSRVNUIHRva2VuIGZvciByZWFkaW5nIHRoZSByb3RhIGFuZCBpcyBzdHJpY3RseSBtb3JlIHBvd2VyZnVsIHRoYW4gdGhlXG4gKiBwZXItc2VydmljZSBpbnRlZ3JhdGlvbiBrZXkgdXNlZCBmb3Igc2VuZGluZyDigJQgYW4gaW50ZWdyYXRpb24ga2V5IGNhbiBvbmx5XG4gKiBjcmVhdGUgZXZlbnRzIG9uIG9uZSBzZXJ2aWNlLCB3aGlsZSBhIFJFU1QgdG9rZW4gcmVhZHMgaW5jaWRlbnRzLCBzY2hlZHVsZXNcbiAqIGFuZCB1c2VycyBhY2NvdW50LXdpZGUuIFNvIHRoZSByb3RhIGNoZWNrIGlzIG9wdC1pbiBvbiBpdHMgb3duIGNyZWRlbnRpYWwsXG4gKiBhbmQgYSBkZXBsb3ltZW50IHRoYXQgZG9lcyBub3Qgd2FudCB0byBoYW5kIG92ZXIgYSBSRVNUIHRva2VuIHNpbXBseSBkb2VzIG5vdFxuICogZ2V0IHRoZSBnYXVnZS4gSXQgbXVzdCBuZXZlciBiZSBpbmZlcnJlZCBmcm9tIHRoZSByb3V0aW5nIGtleS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVIbWFjLCB0aW1pbmdTYWZlRXF1YWwgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgZW52SW50LCBlbnZTdHIgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcbmltcG9ydCB7IHNhZmVGZXRjaCB9IGZyb20gJy4uL3V0aWxzL3NzcmYuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3BhZ2VyZHV0eS1pbmJvdW5kJyk7XG5cbmV4cG9ydCBjb25zdCBQQUdFUkRVVFlfQVBJX1VSTCA9ICdodHRwczovL2FwaS5wYWdlcmR1dHkuY29tJztcblxuLyoqXG4gKiBWZXJpZnkgYSBQYWdlckR1dHkgdjMgd2ViaG9vayBzaWduYXR1cmUuXG4gKlxuICogVGhlIHNjaGVtZTogYFgtUGFnZXJEdXR5LVNpZ25hdHVyZTogdjE9PGxvd2VyY2FzZSBoZXg+YCwgYW4gSE1BQy1TSEEyNTYgb3ZlclxuICogdGhlIFJBVyByZXF1ZXN0IGJvZHkuIFRocmVlIHByb3BlcnRpZXMgb2YgaXQgYXJlIGVhc3kgdG8gZ2V0IHdyb25nIGFuZCBlYWNoXG4gKiBvbmUgaXMgYSBob2xlOlxuICpcbiAqICAtIFRIRSBSQVcgQk9EWSwgbm90IGEgcmUtc2VyaWFsaXplZCBvYmplY3QuIGBKU09OLnN0cmluZ2lmeShyZXEuYm9keSlgIGFmdGVyXG4gKiAgICBhIEpTT04gcGFyc2VyIGhhcyBydW4gcHJvZHVjZXMgZGlmZmVyZW50IGJ5dGVzIChrZXkgb3JkZXIsIHdoaXRlc3BhY2UsXG4gKiAgICBudW1iZXIgZm9ybWF0dGluZyksIHNvIGV2ZXJ5IHNpZ25hdHVyZSBmYWlscyBhbmQgdGhlIG9idmlvdXMgXCJmaXhcIiBpcyB0b1xuICogICAgc3RvcCBjaGVja2luZy4gVGhlIHJvdXRlIHRoZXJlZm9yZSBtb3VudHMgYGV4cHJlc3MucmF3YC5cbiAqICAtIE1VTFRJUExFIFNJR05BVFVSRVMuIFRoZSBoZWFkZXIgbWF5IGNhcnJ5IHNldmVyYWwgY29tbWEtc2VwYXJhdGVkIGB2MT1gXG4gKiAgICB2YWx1ZXMsIHdoaWNoIGlzIGhvdyBQYWdlckR1dHkgcm90YXRlcyBhIHNlY3JldCB3aXRob3V0IGRvd250aW1lLiBDaGVja2luZ1xuICogICAgb25seSB0aGUgZmlyc3QgYnJlYWtzIGR1cmluZyB0aGVpciByb3RhdGlvbiwgc28gQU5ZIG1hdGNoIGlzIGFjY2VwdGVkIOKAlFxuICogICAgdGhlIHNhbWUgb3ZlcmxhcCB0aGlzIHJlcG8gYWxyZWFkeSBydW5zIGZvciBpdHMgb3duIHJlbGF5IHRva2VuLlxuICogIC0gQ09OU1RBTlQgVElNRS4gQ29tcGFyZWQgd2l0aCBgdGltaW5nU2FmZUVxdWFsYCBvbiBlcXVhbC1sZW5ndGggYnVmZmVycyxcbiAqICAgIGJlY2F1c2UgYSBieXRlLWF0LWEtdGltZSBjb21wYXJpc29uIGxlYWtzIHRoZSBleHBlY3RlZCBkaWdlc3QgdG8gYW55b25lXG4gKiAgICB3aG8gY2FuIHBvc3QgaGVyZSByZXBlYXRlZGx5LlxuICpcbiAqIE5PIFNFQ1JFVCBNRUFOUyBOTy4gQW4gdW52ZXJpZmllZCB3ZWJob29rIHRoYXQgbW92ZXMgYW4gYXVkaXQgcmVjb3JkIGFuZCBhXG4gKiBtZXRyaWMgaXMgYSB3YXkgZm9yIGFueW9uZSB3aG8gbGVhcm5zIHRoZSBVUkwgdG8gYXNzZXJ0IHRoYXQgYSBwYWdlIHdhc1xuICogaGFuZGxlZCDigJQgdGhlIG9uZSBsaWUgdGhhdCB3b3VsZCBtYWtlIHRoZSB3aG9sZSBmZWF0dXJlIHJlcG9ydCBjb3ZlcmFnZSBpdFxuICogZG9lcyBub3QgaGF2ZS4gRmFpbHMgY2xvc2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5UGFnZXJEdXR5U2lnbmF0dXJlKHJhd0JvZHk6IEJ1ZmZlciB8IHN0cmluZywgaGVhZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNlY3JldDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghc2VjcmV0IHx8ICFoZWFkZXIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZXhwZWN0ZWQgPSBjcmVhdGVIbWFjKCdzaGEyNTYnLCBzZWNyZXQpLnVwZGF0ZShyYXdCb2R5KS5kaWdlc3QoJ2hleCcpO1xuICBjb25zdCBleHBlY3RlZEJ1ZiA9IEJ1ZmZlci5mcm9tKGV4cGVjdGVkLCAndXRmOCcpO1xuICBmb3IgKGNvbnN0IHBhcnQgb2YgaGVhZGVyLnNwbGl0KCcsJykpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnQudHJpbSgpO1xuICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aCgndjE9JykpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGdpdmVuID0gQnVmZmVyLmZyb20odmFsdWUuc2xpY2UoMyksICd1dGY4Jyk7XG4gICAgLy8gTGVuZ3RoLWd1YXJkZWQ6IHRpbWluZ1NhZmVFcXVhbCBUSFJPV1Mgb24gYSBsZW5ndGggbWlzbWF0Y2gsIGFuZCBhblxuICAgIC8vIGF0dGFja2VyIGNvbnRyb2xzIHRoaXMgbGVuZ3RoLlxuICAgIGlmIChnaXZlbi5sZW5ndGggPT09IGV4cGVjdGVkQnVmLmxlbmd0aCAmJiB0aW1pbmdTYWZlRXF1YWwoZ2l2ZW4sIGV4cGVjdGVkQnVmKSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9uQ2FsbEluYm91bmRDb25maWcge1xuICB3ZWJob29rU2VjcmV0OiBzdHJpbmc7XG4gIGFwaVRva2VuOiBzdHJpbmc7XG4gIGFwaVVybDogc3RyaW5nO1xuICAvKiogSG93IGZhciBhaGVhZCB0aGUgcm90YSBjaGVjayBsb29rcy4gVGhlIGdhcCBhbGVydCBpcyBvbmx5IGFzIHVzZWZ1bCBhcyB0aGlzLiAqL1xuICBsb29rYWhlYWRIb3VyczogbnVtYmVyO1xuICAvKiogRXNjYWxhdGlvbiBwb2xpY3kgaWRzIHRvIGNoZWNrIGNvdmVyYWdlIGZvcjsgZW1wdHkgbWVhbnMgdGhlIHdob2xlIGFjY291bnQuICovXG4gIGVzY2FsYXRpb25Qb2xpY3lJZHM6IHN0cmluZ1tdO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uQ2FsbEluYm91bmRDb25maWcoKTogT25DYWxsSW5ib3VuZENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgd2ViaG9va1NlY3JldDogZW52U3RyKCdQQUdFUkRVVFlfV0VCSE9PS19TRUNSRVQnLCAnJyksXG4gICAgYXBpVG9rZW46IGVudlN0cignUEFHRVJEVVRZX0FQSV9UT0tFTicsICcnKSxcbiAgICBhcGlVcmw6IGVudlN0cignUEFHRVJEVVRZX0FQSV9VUkwnLCBQQUdFUkRVVFlfQVBJX1VSTCksXG4gICAgLy8gNDggaG91cnM6IGZhciBlbm91Z2ggdG8gY2F0Y2ggYSBob2xlIG92ZXIgYSB3ZWVrZW5kIG9uIHRoZSBGcmlkYXksIGFuZFxuICAgIC8vIHNob3J0IGVub3VnaCB0aGF0IGEgcm90YSBtYWludGFpbmVkIGEgd2VlayBvdXQgZG9lcyBub3QgYWxlcnQgZm9yZXZlci5cbiAgICBsb29rYWhlYWRIb3VyczogZW52SW50KCdPTkNBTExfU0NIRURVTEVfR0FQX0xPT0tBSEVBRF9IT1VSUycsIDQ4LCB7IG1pbjogMSwgbWF4OiAyMTYwIH0pLFxuICAgIGVzY2FsYXRpb25Qb2xpY3lJZHM6IGVudlN0cignUEFHRVJEVVRZX0VTQ0FMQVRJT05fUE9MSUNZX0lEUycsICcnKVxuICAgICAgLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLFxuICAgIHRpbWVvdXRNczogZW52SW50KCdPTkNBTExfRVZFTlRTX1RJTUVPVVRfTVMnLCA1MDAwLCB7IG1pbjogMSB9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3RhQ292ZXJhZ2Uge1xuICAvKiogV2hldGhlciB0aGUgcXVlc3Rpb24gY291bGQgYmUgYW5zd2VyZWQgYXQgYWxsLiAqL1xuICBrbm93bjogYm9vbGVhbjtcbiAgLyoqIERpc3RpbmN0IG9uLWNhbGwgZW50cmllcyBjb3ZlcmluZyBhbnkgcGFydCBvZiB0aGUgd2luZG93LiAqL1xuICBlbnRyaWVzOiBudW1iZXI7XG4gIC8qKiBTZWNvbmRzIG9mIHRoZSBsb29rYWhlYWQgd2luZG93IHdpdGggbm9ib2R5IG9uIGNhbGwsIDAgd2hlbiBmdWxseSBjb3ZlcmVkLiAqL1xuICB1bmNvdmVyZWRTZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogQXNrIHRoZSBwcm92aWRlciB3aGV0aGVyIGFueW9uZSBpcyBvbiBjYWxsIGFjcm9zcyB0aGUgbG9va2FoZWFkIHdpbmRvdy5cbiAqXG4gKiBXSEFUIFRISVMgQ0FOIEFORCBDQU5OT1QgQ09OQ0xVREUsIGJlY2F1c2UgdGhlIGRpZmZlcmVuY2UgZGVjaWRlcyB3aGV0aGVyIHRoZVxuICogYWxlcnQgYnVpbHQgb24gaXQgaXMgaG9uZXN0LiBgR0VUIC9vbmNhbGxzP3NpbmNlJnVudGlsYCByZXR1cm5zIHRoZSBvbi1jYWxsXG4gKiBlbnRyaWVzIE9WRVJMQVBQSU5HIGEgd2luZG93OyBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIGhvbGVzLiBSZWNvbnN0cnVjdGluZ1xuICogZXhhY3QgaG9sZXMgd291bGQgbWVhbiBzdGl0Y2hpbmcgZXZlcnkgZW50cnkncyBpbnRlcnZhbCwgYW5kIGFuIGVudHJ5J3NcbiAqIGBzdGFydGAvYGVuZGAgYXJlIG51bGwgZm9yIGFuIGFsd2F5cy1vbiBwb2xpY3kg4oCUIHNvIGEgcHJlY2lzZVxuICogXCJ1bmNvdmVyZWQgc2Vjb25kc1wiIGlzIG5vdCBhdmFpbGFibGUgZnJvbSB0aGlzIGVuZHBvaW50IHdpdGhvdXQgYSBsb3Qgb2ZcbiAqIGFyaXRobWV0aWMgdGhhdCB3b3VsZCBiZSB3cm9uZyBpbiB0aGUgYWx3YXlzLW9uIGNhc2UuXG4gKlxuICogU28gdGhpcyBhbnN3ZXJzIHRoZSBxdWVzdGlvbiBpdCBDQU4gYW5zd2VyIGV4YWN0bHk6IGlzIHRoZSB3aW5kb3cgY292ZXJlZCBhdFxuICogYWxsLiBaZXJvIGVudHJpZXMgb3ZlciB0aGUgbmV4dCBOIGhvdXJzIG1lYW5zIG5vYm9keSBpcyBzY2hlZHVsZWQsIHdoaWNoIGlzXG4gKiB0aGUgZmFpbHVyZSB3b3J0aCBwYWdpbmcgYWJvdXQgYW5kIHRoZSBvbmUgYSByb3RhIG1haW50YWluZXIgYWN0dWFsbHkgbWFrZXMuXG4gKiBgdW5jb3ZlcmVkU2Vjb25kc2AgaXMgdGhlcmVmb3JlIHRoZSB3aG9sZSB3aW5kb3cgb3Igbm90aGluZywgYW5kIGl0IGlzIGFcbiAqIGRlbGliZXJhdGUgdW5kZXItcmVwb3J0IHJhdGhlciB0aGFuIGEgZ3Vlc3Mg4oCUIGEgcGFydGlhbCBob2xlIHJlYWRzIGFzIGNvdmVyZWRcbiAqIGhlcmUsIGFuZCBjbGFpbWluZyBvdGhlcndpc2Ugd291bGQgYmUgaW52ZW50aW5nIHByZWNpc2lvbi5cbiAqXG4gKiBga25vd246IGZhbHNlYCB3aGVuIHRoZXJlIGlzIG5vIEFQSSB0b2tlbiBvciB0aGUgY2FsbCBmYWlscywgYW5kIHRoZSBjYWxsZXJcbiAqIG11c3QgcHVibGlzaCBOT1RISU5HIGluIHRoYXQgY2FzZS4gQSBnYXVnZSBvZiAwIHdvdWxkIHNheSBcImZ1bGx5IGNvdmVyZWRcIixcbiAqIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGxpZSB0aGlzIGNoZWNrIGV4aXN0cyB0byBwcmV2ZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hSb3RhQ292ZXJhZ2UoY2ZnOiBPbkNhbGxJbmJvdW5kQ29uZmlnID0gb25DYWxsSW5ib3VuZENvbmZpZygpKTogUHJvbWlzZTxSb3RhQ292ZXJhZ2U+IHtcbiAgY29uc3Qgd2luZG93U2Vjb25kcyA9IGNmZy5sb29rYWhlYWRIb3VycyAqIDM2MDA7XG4gIGlmICghY2ZnLmFwaVRva2VuKSByZXR1cm4geyBrbm93bjogZmFsc2UsIGVudHJpZXM6IDAsIHVuY292ZXJlZFNlY29uZHM6IDAgfTtcblxuICBjb25zdCBzaW5jZSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IHVudGlsID0gbmV3IERhdGUoc2luY2UuZ2V0VGltZSgpICsgd2luZG93U2Vjb25kcyAqIDEwMDApO1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICBzaW5jZTogc2luY2UudG9JU09TdHJpbmcoKSxcbiAgICB1bnRpbDogdW50aWwudG9JU09TdHJpbmcoKSxcbiAgICBsaW1pdDogJzUwJyxcbiAgfSk7XG4gIGZvciAoY29uc3QgaWQgb2YgY2ZnLmVzY2FsYXRpb25Qb2xpY3lJZHMpIHBhcmFtcy5hcHBlbmQoJ2VzY2FsYXRpb25fcG9saWN5X2lkc1tdJywgaWQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IHNhZmVGZXRjaChgJHtjZmcuYXBpVXJsfS9vbmNhbGxzPyR7cGFyYW1zLnRvU3RyaW5nKCl9YCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgLy8gUGFnZXJEdXR5J3MgUkVTVCBzY2hlbWUuIGBBY2NlcHRgIHBpbnMgdGhlIEFQSSB2ZXJzaW9uOyB3aXRob3V0IGl0XG4gICAgICAgIC8vIHRoZSByZXNwb25zZSBzaGFwZSBpcyB3aGF0ZXZlciB0aGVpciBkZWZhdWx0IGhhcHBlbnMgdG8gYmUuXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBUb2tlbiB0b2tlbj0ke2NmZy5hcGlUb2tlbn1gLFxuICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi92bmQucGFnZXJkdXR5K2pzb247dmVyc2lvbj0yJyxcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0TXM6IGNmZy50aW1lb3V0TXMsXG4gICAgfSk7XG4gICAgaWYgKHJlc3AucmVkaXJlY3RlZCB8fCAhcmVzcC5vaykge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCByZWFkIHRoZSBvbi1jYWxsIHJvdGEnLCB7IHN0YXR1czogcmVzcC5zdGF0dXMsIHJlZGlyZWN0ZWQ6IHJlc3AucmVkaXJlY3RlZCB9KTtcbiAgICAgIHJldHVybiB7IGtub3duOiBmYWxzZSwgZW50cmllczogMCwgdW5jb3ZlcmVkU2Vjb25kczogMCB9O1xuICAgIH1cbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzcC5qc29uKCkgYXMgeyBvbmNhbGxzPzogdW5rbm93bltdIH07XG4gICAgY29uc3QgZW50cmllcyA9IEFycmF5LmlzQXJyYXkoYm9keS5vbmNhbGxzKSA/IGJvZHkub25jYWxscy5sZW5ndGggOiAwO1xuICAgIHJldHVybiB7IGtub3duOiB0cnVlLCBlbnRyaWVzLCB1bmNvdmVyZWRTZWNvbmRzOiBlbnRyaWVzID4gMCA/IDAgOiB3aW5kb3dTZWNvbmRzIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKCdDb3VsZCBub3QgcmVhY2ggdGhlIG9uLWNhbGwgcm90YSBBUEknLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICByZXR1cm4geyBrbm93bjogZmFsc2UsIGVudHJpZXM6IDAsIHVuY292ZXJlZFNlY29uZHM6IDAgfTtcbiAgfVxufVxuXG4vKiogVGhlIHdlYmhvb2sgZXZlbnRzIHRoaXMgc3lzdGVtIGFjdHMgb24uIEV2ZXJ5dGhpbmcgZWxzZSBpcyBjb3VudGVkIGFuZCBkcm9wcGVkLiAqL1xuZXhwb3J0IHR5cGUgT25DYWxsV2ViaG9va0V2ZW50VHlwZSA9XG4gIHwgJ2luY2lkZW50LmFja25vd2xlZGdlZCdcbiAgfCAnaW5jaWRlbnQuZXNjYWxhdGVkJ1xuICB8ICdpbmNpZGVudC5yZXNvbHZlZCdcbiAgfCAnaW5jaWRlbnQudW5hY2tub3dsZWRnZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9uQ2FsbFdlYmhvb2tFdmVudCB7XG4gIGV2ZW50VHlwZTogc3RyaW5nO1xuICAvKiogUHJvdmlkZXIgaW5jaWRlbnQgaWQg4oCUIHRoZSBqb2luIGJhY2sgdG8gd2hhdCB3ZSBzZW50LiAqL1xuICBpbmNpZGVudElkPzogc3RyaW5nO1xuICAvKiogT3VyIG93biBgZGVkdXBfa2V5YCwgd2hlbiB0aGUgcHJvdmlkZXIgZWNob2VzIGl0LiAqL1xuICBkZWR1cEtleT86IHN0cmluZztcbiAgLyoqIFdobyBhY3RlZCwgYXMgdGhlIHByb3ZpZGVyIGtub3dzIHRoZW0uIEFuIGlkIGFuZCBhbiBlbWFpbCwgbmV2ZXIgYSBzZXNzaW9uLiAqL1xuICBhZ2VudElkPzogc3RyaW5nO1xuICBhZ2VudFN1bW1hcnk/OiBzdHJpbmc7XG4gIC8qKiBXaGVuIHRoZSBpbmNpZGVudCB3YXMgY3JlYXRlZCwgZm9yIHRoZSBhY2stbGF0ZW5jeSBtZWFzdXJlbWVudC4gKi9cbiAgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICBvY2N1cnJlZEF0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZHVjZSBhIHYzIHdlYmhvb2sgYm9keSB0byB0aGUgZmllbGRzIHRoaXMgc3lzdGVtIHVzZXMuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgZm9yIGFueXRoaW5nIHRoYXQgaXMgbm90IGEgcmVjb2duaXNlZCBpbmNpZGVudCBldmVudCwgd2hpY2hcbiAqIHRoZSBjYWxsZXIgQ09VTlRTIHJhdGhlciB0aGFuIGRyb3BzIHNpbGVudGx5IOKAlCBhbiB1bnJlY29nbmlzZWQgZXZlbnQgdHlwZSBpc1xuICogdXN1YWxseSBhIHN1YnNjcmlwdGlvbiBjb25maWd1cmVkIHdpZGVyIHRoYW4gdGhlIGhhbmRsZXIsIGFuZCBhIGNvdW50IGlzIGhvd1xuICogdGhhdCBiZWNvbWVzIHZpc2libGUgaW5zdGVhZCBvZiBiZWluZyBpbmZlcnJlZCBmcm9tIG5vdGhpbmcgaGFwcGVuaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPbkNhbGxXZWJob29rKGJvZHk6IHVua25vd24pOiBPbkNhbGxXZWJob29rRXZlbnQgfCBudWxsIHtcbiAgY29uc3QgZXZlbnQgPSAoYm9keSBhcyB7IGV2ZW50PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSk/LmV2ZW50O1xuICBpZiAoIWV2ZW50IHx8IHR5cGVvZiBldmVudC5ldmVudF90eXBlICE9PSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGRhdGEgPSAoZXZlbnQuZGF0YSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGFnZW5jeSA9IChldmVudC5hZ2VudCA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJldHVybiB7XG4gICAgZXZlbnRUeXBlOiBldmVudC5ldmVudF90eXBlLFxuICAgIGluY2lkZW50SWQ6IHR5cGVvZiBkYXRhLmlkID09PSAnc3RyaW5nJyA/IGRhdGEuaWQgOiB1bmRlZmluZWQsXG4gICAgLy8gUGFnZXJEdXR5IGVjaG9lcyB0aGUgdHJpZ2dlcidzIGRlZHVwX2tleSBvbiB0aGUgaW5jaWRlbnQsIHdoaWNoIGlzIHRoZVxuICAgIC8vIG9ubHkgbGluayBiYWNrIHRvIFdISUNIIGNhc2Ugb3IgYWxlcnQgdGhpcyB3YXMg4oCUIHRoZWlyIGluY2lkZW50IGlkIGlzXG4gICAgLy8gdGhlaXJzIGFuZCBtZWFucyBub3RoaW5nIG9uIHRoaXMgc2lkZS5cbiAgICBkZWR1cEtleTogdHlwZW9mIGRhdGEuZGVkdXBfa2V5ID09PSAnc3RyaW5nJyA/IGRhdGEuZGVkdXBfa2V5IDogdW5kZWZpbmVkLFxuICAgIGFnZW50SWQ6IHR5cGVvZiBhZ2VuY3kuaWQgPT09ICdzdHJpbmcnID8gYWdlbmN5LmlkIDogdW5kZWZpbmVkLFxuICAgIGFnZW50U3VtbWFyeTogdHlwZW9mIGFnZW5jeS5zdW1tYXJ5ID09PSAnc3RyaW5nJyA/IGFnZW5jeS5zdW1tYXJ5IDogdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogdHlwZW9mIGRhdGEuY3JlYXRlZF9hdCA9PT0gJ3N0cmluZycgPyBkYXRhLmNyZWF0ZWRfYXQgOiB1bmRlZmluZWQsXG4gICAgb2NjdXJyZWRBdDogdHlwZW9mIGV2ZW50Lm9jY3VycmVkX2F0ID09PSAnc3RyaW5nJyA/IGV2ZW50Lm9jY3VycmVkX2F0IDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG4vKipcbiAqIFNlY29uZHMgYmV0d2VlbiB0aGUgaW5jaWRlbnQgYmVpbmcgcmFpc2VkIGFuZCB0aGlzIGV2ZW50LlxuICpcbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgcmF0aGVyIHRoYW4gMCB3aGVuIGVpdGhlciB0aW1lc3RhbXAgaXMgbWlzc2luZyBvciB0aGVcbiAqIGFyaXRobWV0aWMgaXMgbm9uc2Vuc2U6IGEgMCB3b3VsZCBsYW5kIGluIHRoZSBmaXJzdCBoaXN0b2dyYW0gYnVja2V0IGFuZCByZWFkXG4gKiBhcyBhbiBpbnN0YW50IGFja25vd2xlZGdlbWVudCwgd2hpY2ggaXMgdGhlIG1vc3QgZmxhdHRlcmluZyBwb3NzaWJsZSBsaWVcbiAqIGFib3V0IHJlc3BvbnNlIHRpbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY2tMYXRlbmN5U2Vjb25kcyhldmVudDogT25DYWxsV2ViaG9va0V2ZW50KTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFldmVudC5jcmVhdGVkQXQgfHwgIWV2ZW50Lm9jY3VycmVkQXQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGZyb20gPSBuZXcgRGF0ZShldmVudC5jcmVhdGVkQXQpLmdldFRpbWUoKTtcbiAgY29uc3QgdG8gPSBuZXcgRGF0ZShldmVudC5vY2N1cnJlZEF0KS5nZXRUaW1lKCk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGZyb20pIHx8ICFOdW1iZXIuaXNGaW5pdGUodG8pIHx8IHRvIDwgZnJvbSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuICh0byAtIGZyb20pIC8gMTAwMDtcbn1cbiJdfQ==
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZXJkdXR5LWluYm91bmQuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9wYWdlcmR1dHktaW5ib3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRWpELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLDJCQUEyQixDQUFDO0FBRTdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxPQUF3QixFQUFFLE1BQTBCLEVBQUUsTUFBYztJQUMzRyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFN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T0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBeUI7SUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqRCxNQUFNLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDbEYsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBJTkJPVU5EIGhhbGYgb2Ygb24tY2FsbDogd2hhdCB0aGUgcHJvdmlkZXIgdGVsbHMgdXMgYmFjay5cbiAqXG4gKiBFdmVyeXRoaW5nIGVsc2UgaW4gdGhpcyBmZWF0dXJlIHB1c2hlcyBvdXR3YXJkIOKAlCBhbiBhbGVydCBmaXJlcywgYSBjYXNlXG4gKiBhcHByb2FjaGVzIGl0cyBkZWFkbGluZSwgYW4gZXZlbnQgZ29lcyB0byBFdmVudHMgdjIuIFRoYXQgZGlyZWN0aW9uIGNhbiBvbmx5XG4gKiBldmVyIHJlcG9ydCB0aGF0IGEgcGFnZSB3YXMgQUNDRVBURUQsIHdoaWNoIGlzIGEgMjAyIGFuZCBub3QgYSBwaG9uZSByaW5naW5nLlxuICogVGhpcyBtb2R1bGUgaXMgdGhlIG9ubHkgc291cmNlIG9mIHRoZSB0d28gZmFjdHMgdGhhdCBhY3R1YWxseSBtYXR0ZXI6XG4gKlxuICogIC0gU09NRUJPRFkgUElDS0VEIElUIFVQLCBhbmQgd2hvLiBgb25jYWxsX3BhZ2VzX3RvdGFse291dGNvbWU9XCJhY2NlcHRlZFwifWBcbiAqICAgIGNhbm5vdCBhbnN3ZXIgXCJ3YXMgYW55b25lIGF3YWtlIGF0IDAzOjE0XCI7IGFuIGFja25vd2xlZGdlbWVudCBjYW4sIGFuZFxuICogICAgYm91bmQgdG8gYSB1c2VyIGlkIGl0IGJlY29tZXMgYW4gYXVkaXQgcmVjb3JkIHJhdGhlciB0aGFuIGEgaGludC4gVGhlXG4gKiAgICBwcm92aWRlcidzIG93biBhY2sgdmlldyBpcyBub3QgYXVkaXRhYmxlIGhlcmUg4oCUIGEgY2xpY2sgb24gYSBsaW5rIGluIHRoZWlyXG4gKiAgICBVSSBpcyBub3QgYW4gaWRlbnRpdHkgdGhpcyBzeXN0ZW0gY2FuIGF0dGVzdCB0byDigJQgc28gdGhlIHdlYmhvb2sgaXMgd2hhdFxuICogICAgdHVybnMgdGhlaXIgc3RhdGUgY2hhbmdlIGludG8gb3VyIHJlY29yZC5cbiAqICAtIE5PQk9EWSBJUyBTQ0hFRFVMRUQuIEEgcm90YSB3aXRoIGEgaG9sZSBuZXh0IFR1ZXNkYXkgaGFzIHRvIGJlIHZpc2libGUgb25cbiAqICAgIE1PTkRBWSwgbm90IGF0IDAyOjAwIFR1ZXNkYXkuIFRoYXQgaXMgYW4gYWJzZW5jZSBjaGVjaywgYW5kIGFic2VuY2UgY2hlY2tzXG4gKiAgICBhcmUgdGhlIG9uZXMgdGhpcyBjb2RlYmFzZSBrZWVwcyBmaW5kaW5nIGl0IGhhZCBtaXNzZWQuIEl0IGlzIGFuc3dlcmVkIGJ5XG4gKiAgICBSRUFESU5HIHRoZSBwcm92aWRlcidzIHNjaGVkdWxlIHJhdGhlciB0aGFuIG93bmluZyBvbmUuXG4gKlxuICogVFdPIENSRURFTlRJQUxTLCBERUxJQkVSQVRFTFkgU0VQQVJBVEUgQU5EIEJPVEggT1BUSU9OQUwuXG4gKiBgUEFHRVJEVVRZX1dFQkhPT0tfU0VDUkVUYCB2ZXJpZmllcyB3aGF0IHRoZXkgc2VuZCB1cy4gYFBBR0VSRFVUWV9BUElfVE9LRU5gXG4gKiBpcyBhIFJFU1QgdG9rZW4gZm9yIHJlYWRpbmcgdGhlIHJvdGEgYW5kIGlzIHN0cmljdGx5IG1vcmUgcG93ZXJmdWwgdGhhbiB0aGVcbiAqIHBlci1zZXJ2aWNlIGludGVncmF0aW9uIGtleSB1c2VkIGZvciBzZW5kaW5nIOKAlCBhbiBpbnRlZ3JhdGlvbiBrZXkgY2FuIG9ubHlcbiAqIGNyZWF0ZSBldmVudHMgb24gb25lIHNlcnZpY2UsIHdoaWxlIGEgUkVTVCB0b2tlbiByZWFkcyBpbmNpZGVudHMsIHNjaGVkdWxlc1xuICogYW5kIHVzZXJzIGFjY291bnQtd2lkZS4gU28gdGhlIHJvdGEgY2hlY2sgaXMgb3B0LWluIG9uIGl0cyBvd24gY3JlZGVudGlhbCxcbiAqIGFuZCBhIGRlcGxveW1lbnQgdGhhdCBkb2VzIG5vdCB3YW50IHRvIGhhbmQgb3ZlciBhIFJFU1QgdG9rZW4gc2ltcGx5IGRvZXMgbm90XG4gKiBnZXQgdGhlIGdhdWdlLiBJdCBtdXN0IG5ldmVyIGJlIGluZmVycmVkIGZyb20gdGhlIHJvdXRpbmcga2V5LlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUhtYWMsIHRpbWluZ1NhZmVFcXVhbCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBlbnZJbnQsIGVudlN0ciB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc2FmZUZldGNoIH0gZnJvbSAnLi4vdXRpbHMvc3NyZi5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncGFnZXJkdXR5LWluYm91bmQnKTtcblxuZXhwb3J0IGNvbnN0IFBBR0VSRFVUWV9BUElfVVJMID0gJ2h0dHBzOi8vYXBpLnBhZ2VyZHV0eS5jb20nO1xuXG4vKipcbiAqIFZlcmlmeSBhIFBhZ2VyRHV0eSB2MyB3ZWJob29rIHNpZ25hdHVyZS5cbiAqXG4gKiBUaGUgc2NoZW1lOiBgWC1QYWdlckR1dHktU2lnbmF0dXJlOiB2MT08bG93ZXJjYXNlIGhleD5gLCBhbiBITUFDLVNIQTI1NiBvdmVyXG4gKiB0aGUgUkFXIHJlcXVlc3QgYm9keS4gVGhyZWUgcHJvcGVydGllcyBvZiBpdCBhcmUgZWFzeSB0byBnZXQgd3JvbmcgYW5kIGVhY2hcbiAqIG9uZSBpcyBhIGhvbGU6XG4gKlxuICogIC0gVEhFIFJBVyBCT0RZLCBub3QgYSByZS1zZXJpYWxpemVkIG9iamVjdC4gYEpTT04uc3RyaW5naWZ5KHJlcS5ib2R5KWAgYWZ0ZXJcbiAqICAgIGEgSlNPTiBwYXJzZXIgaGFzIHJ1biBwcm9kdWNlcyBkaWZmZXJlbnQgYnl0ZXMgKGtleSBvcmRlciwgd2hpdGVzcGFjZSxcbiAqICAgIG51bWJlciBmb3JtYXR0aW5nKSwgc28gZXZlcnkgc2lnbmF0dXJlIGZhaWxzIGFuZCB0aGUgb2J2aW91cyBcImZpeFwiIGlzIHRvXG4gKiAgICBzdG9wIGNoZWNraW5nLiBUaGUgcm91dGUgdGhlcmVmb3JlIG1vdW50cyBgZXhwcmVzcy5yYXdgLlxuICogIC0gTVVMVElQTEUgU0lHTkFUVVJFUy4gVGhlIGhlYWRlciBtYXkgY2Fycnkgc2V2ZXJhbCBjb21tYS1zZXBhcmF0ZWQgYHYxPWBcbiAqICAgIHZhbHVlcywgd2hpY2ggaXMgaG93IFBhZ2VyRHV0eSByb3RhdGVzIGEgc2VjcmV0IHdpdGhvdXQgZG93bnRpbWUuIENoZWNraW5nXG4gKiAgICBvbmx5IHRoZSBmaXJzdCBicmVha3MgZHVyaW5nIHRoZWlyIHJvdGF0aW9uLCBzbyBBTlkgbWF0Y2ggaXMgYWNjZXB0ZWQg4oCUXG4gKiAgICB0aGUgc2FtZSBvdmVybGFwIHRoaXMgcmVwbyBhbHJlYWR5IHJ1bnMgZm9yIGl0cyBvd24gcmVsYXkgdG9rZW4uXG4gKiAgLSBDT05TVEFOVCBUSU1FLiBDb21wYXJlZCB3aXRoIGB0aW1pbmdTYWZlRXF1YWxgIG9uIGVxdWFsLWxlbmd0aCBidWZmZXJzLFxuICogICAgYmVjYXVzZSBhIGJ5dGUtYXQtYS10aW1lIGNvbXBhcmlzb24gbGVha3MgdGhlIGV4cGVjdGVkIGRpZ2VzdCB0byBhbnlvbmVcbiAqICAgIHdobyBjYW4gcG9zdCBoZXJlIHJlcGVhdGVkbHkuXG4gKlxuICogTk8gU0VDUkVUIE1FQU5TIE5PLiBBbiB1bnZlcmlmaWVkIHdlYmhvb2sgdGhhdCBtb3ZlcyBhbiBhdWRpdCByZWNvcmQgYW5kIGFcbiAqIG1ldHJpYyBpcyBhIHdheSBmb3IgYW55b25lIHdobyBsZWFybnMgdGhlIFVSTCB0byBhc3NlcnQgdGhhdCBhIHBhZ2Ugd2FzXG4gKiBoYW5kbGVkIOKAlCB0aGUgb25lIGxpZSB0aGF0IHdvdWxkIG1ha2UgdGhlIHdob2xlIGZlYXR1cmUgcmVwb3J0IGNvdmVyYWdlIGl0XG4gKiBkb2VzIG5vdCBoYXZlLiBGYWlscyBjbG9zZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlQYWdlckR1dHlTaWduYXR1cmUocmF3Qm9keTogQnVmZmVyIHwgc3RyaW5nLCBoZWFkZXI6IHN0cmluZyB8IHVuZGVmaW5lZCwgc2VjcmV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFzZWNyZXQgfHwgIWhlYWRlcikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBleHBlY3RlZCA9IGNyZWF0ZUhtYWMoJ3NoYTI1NicsIHNlY3JldCkudXBkYXRlKHJhd0JvZHkpLmRpZ2VzdCgnaGV4Jyk7XG4gIGNvbnN0IGV4cGVjdGVkQnVmID0gQnVmZmVyLmZyb20oZXhwZWN0ZWQsICd1dGY4Jyk7XG4gIGZvciAoY29uc3QgcGFydCBvZiBoZWFkZXIuc3BsaXQoJywnKSkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFydC50cmltKCk7XG4gICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKCd2MT0nKSkgY29udGludWU7XG4gICAgY29uc3QgZ2l2ZW4gPSBCdWZmZXIuZnJvbSh2YWx1ZS5zbGljZSgzKSwgJ3V0ZjgnKTtcbiAgICAvLyBMZW5ndGgtZ3VhcmRlZDogdGltaW5nU2FmZUVxdWFsIFRIUk9XUyBvbiBhIGxlbmd0aCBtaXNtYXRjaCwgYW5kIGFuXG4gICAgLy8gYXR0YWNrZXIgY29udHJvbHMgdGhpcyBsZW5ndGguXG4gICAgaWYgKGdpdmVuLmxlbmd0aCA9PT0gZXhwZWN0ZWRCdWYubGVuZ3RoICYmIHRpbWluZ1NhZmVFcXVhbChnaXZlbiwgZXhwZWN0ZWRCdWYpKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25DYWxsSW5ib3VuZENvbmZpZyB7XG4gIHdlYmhvb2tTZWNyZXQ6IHN0cmluZztcbiAgYXBpVG9rZW46IHN0cmluZztcbiAgYXBpVXJsOiBzdHJpbmc7XG4gIC8qKiBIb3cgZmFyIGFoZWFkIHRoZSByb3RhIGNoZWNrIGxvb2tzLiBUaGUgZ2FwIGFsZXJ0IGlzIG9ubHkgYXMgdXNlZnVsIGFzIHRoaXMuICovXG4gIGxvb2thaGVhZEhvdXJzOiBudW1iZXI7XG4gIC8qKiBFc2NhbGF0aW9uIHBvbGljeSBpZHMgdG8gY2hlY2sgY292ZXJhZ2UgZm9yOyBlbXB0eSBtZWFucyB0aGUgd2hvbGUgYWNjb3VudC4gKi9cbiAgZXNjYWxhdGlvblBvbGljeUlkczogc3RyaW5nW107XG4gIHRpbWVvdXRNczogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25DYWxsSW5ib3VuZENvbmZpZygpOiBPbkNhbGxJbmJvdW5kQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB3ZWJob29rU2VjcmV0OiBlbnZTdHIoJ1BBR0VSRFVUWV9XRUJIT09LX1NFQ1JFVCcsICcnKSxcbiAgICBhcGlUb2tlbjogZW52U3RyKCdQQUdFUkRVVFlfQVBJX1RPS0VOJywgJycpLFxuICAgIGFwaVVybDogZW52U3RyKCdQQUdFUkRVVFlfQVBJX1VSTCcsIFBBR0VSRFVUWV9BUElfVVJMKSxcbiAgICAvLyA0OCBob3VyczogZmFyIGVub3VnaCB0byBjYXRjaCBhIGhvbGUgb3ZlciBhIHdlZWtlbmQgb24gdGhlIEZyaWRheSwgYW5kXG4gICAgLy8gc2hvcnQgZW5vdWdoIHRoYXQgYSByb3RhIG1haW50YWluZWQgYSB3ZWVrIG91dCBkb2VzIG5vdCBhbGVydCBmb3JldmVyLlxuICAgIGxvb2thaGVhZEhvdXJzOiBlbnZJbnQoJ09OQ0FMTF9TQ0hFRFVMRV9HQVBfTE9PS0FIRUFEX0hPVVJTJywgNDgsIHsgbWluOiAxLCBtYXg6IDIxNjAgfSksXG4gICAgZXNjYWxhdGlvblBvbGljeUlkczogZW52U3RyKCdQQUdFUkRVVFlfRVNDQUxBVElPTl9QT0xJQ1lfSURTJywgJycpXG4gICAgICAuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKS5maWx0ZXIoQm9vbGVhbiksXG4gICAgdGltZW91dE1zOiBlbnZJbnQoJ09OQ0FMTF9FVkVOVFNfVElNRU9VVF9NUycsIDUwMDAsIHsgbWluOiAxIH0pLFxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdGFDb3ZlcmFnZSB7XG4gIC8qKiBXaGV0aGVyIHRoZSBxdWVzdGlvbiBjb3VsZCBiZSBhbnN3ZXJlZCBhdCBhbGwuICovXG4gIGtub3duOiBib29sZWFuO1xuICAvKiogRGlzdGluY3Qgb24tY2FsbCBlbnRyaWVzIGNvdmVyaW5nIGFueSBwYXJ0IG9mIHRoZSB3aW5kb3cuICovXG4gIGVudHJpZXM6IG51bWJlcjtcbiAgLyoqIFNlY29uZHMgb2YgdGhlIGxvb2thaGVhZCB3aW5kb3cgd2l0aCBub2JvZHkgb24gY2FsbCwgMCB3aGVuIGZ1bGx5IGNvdmVyZWQuICovXG4gIHVuY292ZXJlZFNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBc2sgdGhlIHByb3ZpZGVyIHdoZXRoZXIgYW55b25lIGlzIG9uIGNhbGwgYWNyb3NzIHRoZSBsb29rYWhlYWQgd2luZG93LlxuICpcbiAqIFdIQVQgVEhJUyBDQU4gQU5EIENBTk5PVCBDT05DTFVERSwgYmVjYXVzZSB0aGUgZGlmZmVyZW5jZSBkZWNpZGVzIHdoZXRoZXIgdGhlXG4gKiBhbGVydCBidWlsdCBvbiBpdCBpcyBob25lc3QuIGBHRVQgL29uY2FsbHM/c2luY2UmdW50aWxgIHJldHVybnMgdGhlIG9uLWNhbGxcbiAqIGVudHJpZXMgT1ZFUkxBUFBJTkcgYSB3aW5kb3c7IGl0IGRvZXMgbm90IHJldHVybiB0aGUgaG9sZXMuIFJlY29uc3RydWN0aW5nXG4gKiBleGFjdCBob2xlcyB3b3VsZCBtZWFuIHN0aXRjaGluZyBldmVyeSBlbnRyeSdzIGludGVydmFsLCBhbmQgYW4gZW50cnknc1xuICogYHN0YXJ0YC9gZW5kYCBhcmUgbnVsbCBmb3IgYW4gYWx3YXlzLW9uIHBvbGljeSDigJQgc28gYSBwcmVjaXNlXG4gKiBcInVuY292ZXJlZCBzZWNvbmRzXCIgaXMgbm90IGF2YWlsYWJsZSBmcm9tIHRoaXMgZW5kcG9pbnQgd2l0aG91dCBhIGxvdCBvZlxuICogYXJpdGhtZXRpYyB0aGF0IHdvdWxkIGJlIHdyb25nIGluIHRoZSBhbHdheXMtb24gY2FzZS5cbiAqXG4gKiBTbyB0aGlzIGFuc3dlcnMgdGhlIHF1ZXN0aW9uIGl0IENBTiBhbnN3ZXIgZXhhY3RseTogaXMgdGhlIHdpbmRvdyBjb3ZlcmVkIGF0XG4gKiBhbGwuIFplcm8gZW50cmllcyBvdmVyIHRoZSBuZXh0IE4gaG91cnMgbWVhbnMgbm9ib2R5IGlzIHNjaGVkdWxlZCwgd2hpY2ggaXNcbiAqIHRoZSBmYWlsdXJlIHdvcnRoIHBhZ2luZyBhYm91dCBhbmQgdGhlIG9uZSBhIHJvdGEgbWFpbnRhaW5lciBhY3R1YWxseSBtYWtlcy5cbiAqIGB1bmNvdmVyZWRTZWNvbmRzYCBpcyB0aGVyZWZvcmUgdGhlIHdob2xlIHdpbmRvdyBvciBub3RoaW5nLCBhbmQgaXQgaXMgYVxuICogZGVsaWJlcmF0ZSB1bmRlci1yZXBvcnQgcmF0aGVyIHRoYW4gYSBndWVzcyDigJQgYSBwYXJ0aWFsIGhvbGUgcmVhZHMgYXMgY292ZXJlZFxuICogaGVyZSwgYW5kIGNsYWltaW5nIG90aGVyd2lzZSB3b3VsZCBiZSBpbnZlbnRpbmcgcHJlY2lzaW9uLlxuICpcbiAqIGBrbm93bjogZmFsc2VgIHdoZW4gdGhlcmUgaXMgbm8gQVBJIHRva2VuIG9yIHRoZSBjYWxsIGZhaWxzLCBhbmQgdGhlIGNhbGxlclxuICogbXVzdCBwdWJsaXNoIE5PVEhJTkcgaW4gdGhhdCBjYXNlLiBBIGdhdWdlIG9mIDAgd291bGQgc2F5IFwiZnVsbHkgY292ZXJlZFwiLFxuICogd2hpY2ggaXMgZXhhY3RseSB0aGUgbGllIHRoaXMgY2hlY2sgZXhpc3RzIHRvIHByZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFJvdGFDb3ZlcmFnZShjZmc6IE9uQ2FsbEluYm91bmRDb25maWcgPSBvbkNhbGxJbmJvdW5kQ29uZmlnKCkpOiBQcm9taXNlPFJvdGFDb3ZlcmFnZT4ge1xuICBjb25zdCB3aW5kb3dTZWNvbmRzID0gY2ZnLmxvb2thaGVhZEhvdXJzICogMzYwMDtcbiAgaWYgKCFjZmcuYXBpVG9rZW4pIHJldHVybiB7IGtub3duOiBmYWxzZSwgZW50cmllczogMCwgdW5jb3ZlcmVkU2Vjb25kczogMCB9O1xuXG4gIGNvbnN0IHNpbmNlID0gbmV3IERhdGUoKTtcbiAgY29uc3QgdW50aWwgPSBuZXcgRGF0ZShzaW5jZS5nZXRUaW1lKCkgKyB3aW5kb3dTZWNvbmRzICogMTAwMCk7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgIHNpbmNlOiBzaW5jZS50b0lTT1N0cmluZygpLFxuICAgIHVudGlsOiB1bnRpbC50b0lTT1N0cmluZygpLFxuICAgIGxpbWl0OiAnNTAnLFxuICB9KTtcbiAgZm9yIChjb25zdCBpZCBvZiBjZmcuZXNjYWxhdGlvblBvbGljeUlkcykgcGFyYW1zLmFwcGVuZCgnZXNjYWxhdGlvbl9wb2xpY3lfaWRzW10nLCBpZCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgc2FmZUZldGNoKGAke2NmZy5hcGlVcmx9L29uY2FsbHM/JHtwYXJhbXMudG9TdHJpbmcoKX1gLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAvLyBQYWdlckR1dHkncyBSRVNUIHNjaGVtZS4gYEFjY2VwdGAgcGlucyB0aGUgQVBJIHZlcnNpb247IHdpdGhvdXQgaXRcbiAgICAgICAgLy8gdGhlIHJlc3BvbnNlIHNoYXBlIGlzIHdoYXRldmVyIHRoZWlyIGRlZmF1bHQgaGFwcGVucyB0byBiZS5cbiAgICAgICAgQXV0aG9yaXphdGlvbjogYFRva2VuIHRva2VuPSR7Y2ZnLmFwaVRva2VufWAsXG4gICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL3ZuZC5wYWdlcmR1dHkranNvbjt2ZXJzaW9uPTInLFxuICAgICAgfSxcbiAgICAgIHRpbWVvdXRNczogY2ZnLnRpbWVvdXRNcyxcbiAgICB9KTtcbiAgICBpZiAocmVzcC5yZWRpcmVjdGVkIHx8ICFyZXNwLm9rKSB7XG4gICAgICBsb2dnZXIud2FybignQ291bGQgbm90IHJlYWQgdGhlIG9uLWNhbGwgcm90YScsIHsgc3RhdHVzOiByZXNwLnN0YXR1cywgcmVkaXJlY3RlZDogcmVzcC5yZWRpcmVjdGVkIH0pO1xuICAgICAgcmV0dXJuIHsga25vd246IGZhbHNlLCBlbnRyaWVzOiAwLCB1bmNvdmVyZWRTZWNvbmRzOiAwIH07XG4gICAgfVxuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwLmpzb24oKSBhcyB7IG9uY2FsbHM/OiB1bmtub3duW10gfTtcbiAgICBjb25zdCBlbnRyaWVzID0gQXJyYXkuaXNBcnJheShib2R5Lm9uY2FsbHMpID8gYm9keS5vbmNhbGxzLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIHsga25vd246IHRydWUsIGVudHJpZXMsIHVuY292ZXJlZFNlY29uZHM6IGVudHJpZXMgPiAwID8gMCA6IHdpbmRvd1NlY29uZHMgfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCByZWFjaCB0aGUgb24tY2FsbCByb3RhIEFQSScsIHsgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgIHJldHVybiB7IGtub3duOiBmYWxzZSwgZW50cmllczogMCwgdW5jb3ZlcmVkU2Vjb25kczogMCB9O1xuICB9XG59XG5cbi8qKiBUaGUgd2ViaG9vayBldmVudHMgdGhpcyBzeXN0ZW0gYWN0cyBvbi4gRXZlcnl0aGluZyBlbHNlIGlzIGNvdW50ZWQgYW5kIGRyb3BwZWQuICovXG5leHBvcnQgdHlwZSBPbkNhbGxXZWJob29rRXZlbnRUeXBlID1cbiAgfCAnaW5jaWRlbnQuYWNrbm93bGVkZ2VkJ1xuICB8ICdpbmNpZGVudC5lc2NhbGF0ZWQnXG4gIHwgJ2luY2lkZW50LnJlc29sdmVkJ1xuICB8ICdpbmNpZGVudC51bmFja25vd2xlZGdlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25DYWxsV2ViaG9va0V2ZW50IHtcbiAgZXZlbnRUeXBlOiBzdHJpbmc7XG4gIC8qKiBQcm92aWRlciBpbmNpZGVudCBpZCDigJQgdGhlIGpvaW4gYmFjayB0byB3aGF0IHdlIHNlbnQuICovXG4gIGluY2lkZW50SWQ/OiBzdHJpbmc7XG4gIC8qKiBPdXIgb3duIGBkZWR1cF9rZXlgLCB3aGVuIHRoZSBwcm92aWRlciBlY2hvZXMgaXQuICovXG4gIGRlZHVwS2V5Pzogc3RyaW5nO1xuICAvKiogV2hvIGFjdGVkLCBhcyB0aGUgcHJvdmlkZXIga25vd3MgdGhlbS4gQW4gaWQgYW5kIGFuIGVtYWlsLCBuZXZlciBhIHNlc3Npb24uICovXG4gIGFnZW50SWQ/OiBzdHJpbmc7XG4gIGFnZW50U3VtbWFyeT86IHN0cmluZztcbiAgLyoqIFdoZW4gdGhlIGluY2lkZW50IHdhcyBjcmVhdGVkLCBmb3IgdGhlIGFjay1sYXRlbmN5IG1lYXN1cmVtZW50LiAqL1xuICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIG9jY3VycmVkQXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVkdWNlIGEgdjMgd2ViaG9vayBib2R5IHRvIHRoZSBmaWVsZHMgdGhpcyBzeXN0ZW0gdXNlcy5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCBmb3IgYW55dGhpbmcgdGhhdCBpcyBub3QgYSByZWNvZ25pc2VkIGluY2lkZW50IGV2ZW50LCB3aGljaFxuICogdGhlIGNhbGxlciBDT1VOVFMgcmF0aGVyIHRoYW4gZHJvcHMgc2lsZW50bHkg4oCUIGFuIHVucmVjb2duaXNlZCBldmVudCB0eXBlIGlzXG4gKiB1c3VhbGx5IGEgc3Vic2NyaXB0aW9uIGNvbmZpZ3VyZWQgd2lkZXIgdGhhbiB0aGUgaGFuZGxlciwgYW5kIGEgY291bnQgaXMgaG93XG4gKiB0aGF0IGJlY29tZXMgdmlzaWJsZSBpbnN0ZWFkIG9mIGJlaW5nIGluZmVycmVkIGZyb20gbm90aGluZyBoYXBwZW5pbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9uQ2FsbFdlYmhvb2soYm9keTogdW5rbm93bik6IE9uQ2FsbFdlYmhvb2tFdmVudCB8IG51bGwge1xuICBjb25zdCBldmVudCA9IChib2R5IGFzIHsgZXZlbnQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KT8uZXZlbnQ7XG4gIGlmICghZXZlbnQgfHwgdHlwZW9mIGV2ZW50LmV2ZW50X3R5cGUgIT09ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgZGF0YSA9IChldmVudC5kYXRhID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgYWdlbmN5ID0gKGV2ZW50LmFnZW50ID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIHtcbiAgICBldmVudFR5cGU6IGV2ZW50LmV2ZW50X3R5cGUsXG4gICAgaW5jaWRlbnRJZDogdHlwZW9mIGRhdGEuaWQgPT09ICdzdHJpbmcnID8gZGF0YS5pZCA6IHVuZGVmaW5lZCxcbiAgICAvLyBQYWdlckR1dHkgZWNob2VzIHRoZSB0cmlnZ2VyJ3MgZGVkdXBfa2V5IG9uIHRoZSBpbmNpZGVudCwgd2hpY2ggaXMgdGhlXG4gICAgLy8gb25seSBsaW5rIGJhY2sgdG8gV0hJQ0ggY2FzZSBvciBhbGVydCB0aGlzIHdhcyDigJQgdGhlaXIgaW5jaWRlbnQgaWQgaXNcbiAgICAvLyB0aGVpcnMgYW5kIG1lYW5zIG5vdGhpbmcgb24gdGhpcyBzaWRlLlxuICAgIGRlZHVwS2V5OiB0eXBlb2YgZGF0YS5kZWR1cF9rZXkgPT09ICdzdHJpbmcnID8gZGF0YS5kZWR1cF9rZXkgOiB1bmRlZmluZWQsXG4gICAgYWdlbnRJZDogdHlwZW9mIGFnZW5jeS5pZCA9PT0gJ3N0cmluZycgPyBhZ2VuY3kuaWQgOiB1bmRlZmluZWQsXG4gICAgYWdlbnRTdW1tYXJ5OiB0eXBlb2YgYWdlbmN5LnN1bW1hcnkgPT09ICdzdHJpbmcnID8gYWdlbmN5LnN1bW1hcnkgOiB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiB0eXBlb2YgZGF0YS5jcmVhdGVkX2F0ID09PSAnc3RyaW5nJyA/IGRhdGEuY3JlYXRlZF9hdCA6IHVuZGVmaW5lZCxcbiAgICBvY2N1cnJlZEF0OiB0eXBlb2YgZXZlbnQub2NjdXJyZWRfYXQgPT09ICdzdHJpbmcnID8gZXZlbnQub2NjdXJyZWRfYXQgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogU2Vjb25kcyBiZXR3ZWVuIHRoZSBpbmNpZGVudCBiZWluZyByYWlzZWQgYW5kIHRoaXMgZXZlbnQuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCByYXRoZXIgdGhhbiAwIHdoZW4gZWl0aGVyIHRpbWVzdGFtcCBpcyBtaXNzaW5nIG9yIHRoZVxuICogYXJpdGhtZXRpYyBpcyBub25zZW5zZTogYSAwIHdvdWxkIGxhbmQgaW4gdGhlIGZpcnN0IGhpc3RvZ3JhbSBidWNrZXQgYW5kIHJlYWRcbiAqIGFzIGFuIGluc3RhbnQgYWNrbm93bGVkZ2VtZW50LCB3aGljaCBpcyB0aGUgbW9zdCBmbGF0dGVyaW5nIHBvc3NpYmxlIGxpZVxuICogYWJvdXQgcmVzcG9uc2UgdGltZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFja0xhdGVuY3lTZWNvbmRzKGV2ZW50OiBPbkNhbGxXZWJob29rRXZlbnQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAoIWV2ZW50LmNyZWF0ZWRBdCB8fCAhZXZlbnQub2NjdXJyZWRBdCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZnJvbSA9IG5ldyBEYXRlKGV2ZW50LmNyZWF0ZWRBdCkuZ2V0VGltZSgpO1xuICBjb25zdCB0byA9IG5ldyBEYXRlKGV2ZW50Lm9jY3VycmVkQXQpLmdldFRpbWUoKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZnJvbSkgfHwgIU51bWJlci5pc0Zpbml0ZSh0bykgfHwgdG8gPCBmcm9tKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gKHRvIC0gZnJvbSkgLyAxMDAwO1xufVxuIl19
@@ -183,4 +183,4 @@ export async function sendPagerDutyEvent(event, cfg = pagerDutyConfig()) {
183
183
  return { ok: false, error: errorMessage(err) };
184
184
  }
185
185
  }
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZXJkdXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3BhZ2VyZHV0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQWdGekMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcseUNBQXlDLENBQUM7QUFtQjlFOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsUUFBd0IsRUFBRSxRQUFnQjtJQUM5RSxJQUFJLFFBQVE7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUM5QixPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQVMsdUJBQXVCO0lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDcEQsSUFBSSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDbEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxtRUFB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Q25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNsRyxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQYWdlckR1dHkgRXZlbnRzIEFQSSB2MiDigJQgdGhlIG9ubHkgdGhpbmcgaW4gdGhpcyByZXBvIHRoYXQgY2FuIHdha2UgYSBodW1hbi5cbiAqXG4gKiBXSFkgVEhJUyBFWElTVFMuIGBTVVBQT1JUX1BSRU1JVU1fRU5BQkxFRGAgc2hpcHMgb24sIGFuZCBwcmVtaXVtIHNlbGxzIGEgZmlyc3RcbiAqIHJlc3BvbnNlIFwid2l0aGluIDggaG91cnMsIGFueSBkYXlcIiDigJQgdGhlIG9uZSByZXNwb25zZSB0YXJnZXQgaW5cbiAqIGBTVVBQT1JUX1JFU1BPTlNFX1RBUkdFVFNgIHdpdGggbm8gYnVzaW5lc3MtaG91cnMgZXhlbXB0aW9uLCBzbyBpdHMgY2xvY2sgcnVuc1xuICogdGhyb3VnaCBuaWdodHMgYW5kIHdlZWtlbmRzLiBCZWZvcmUgdGhpcywgdGhlIG9ubHkgdGhpbmcgd2F0Y2hpbmcgaXQgd2FzXG4gKiBgU3VwcG9ydFByZW1pdW1GaXJzdFJlc3BvbnNlQXRSaXNrYCByb3V0ZWQgdG8gYSBTbGFjayBjaGFubmVsLCB3aGljaCBzYXRpc2ZpZXNcbiAqIHRoZSByb3V0aW5nIGFuZCBub3QgdGhlIG9ibGlnYXRpb246IHRoZSBhbGVydCdzIG93biBkZXNjcmlwdGlvbiBzYXlzIFwiaWYgbm9cbiAqIHJvdGEgaXMgYXdha2UsIHRoYXQgaXMgdGhlIGNhdXNlXCIuXG4gKlxuICogV0hZIE5PIFNESy4gVGhlIHdob2xlIHByb3RvY29sIGlzIG9uZSBIVFRQUyBQT1NUIG9mIEpTT04gdG8gYSBmaXhlZCBlbmRwb2ludC5cbiAqIEFuIFNESyBmb3IgdGhhdCBpcyBhIGRlcGVuZGVuY3kgZm9yIG5vdGhpbmcgaW4gYSByZXBvIHRoYXQgZGlnZXN0LXBpbnMsXG4gKiBPU1Ytc2NhbnMgYW5kIGVuZm9yY2VzIGBtaW5pbXVtUmVsZWFzZUFnZWAuXG4gKlxuICogV0hBVCBUSEUgUFJPVklERVIgT1dOUywgQU5EIFdIWSBUSEFUIERFQ0lERUQgVEhFIERFU0lHTi4gYGRlZHVwS2V5YCBwbHVzXG4gKiBgZXZlbnRfYWN0aW9uYCBtZWFucyBQYWdlckR1dHkgaG9sZHMgdGhlIGluY2lkZW50IHN0YXRlLCBzbyB0aHJlZSB0aGluZ3MgdGhpc1xuICogcmVwbyB3b3VsZCBvdGhlcndpc2UgaGF2ZSBoYWQgdG8gYnVpbGQgYXJlIHNpbXBseSB0aGVpcnM6XG4gKlxuICogIC0gREVEVVBMSUNBVElPTi4gRmlmdHkgcHJlbWl1bSBjYXNlcyBicmVhY2hpbmcgdG9nZXRoZXIg4oCUIHRoZSBub3JtYWwgc2hhcGVcbiAqICAgIGFmdGVyIGFueSBvdXRhZ2Ug4oCUIGlzIG9uZSBpbmNpZGVudCwgbm90IGZpZnR5IHBhZ2VzLiBGaWZ0eSBwYWdlcyBhbmQgbm9cbiAqICAgIHBhZ2VzIGFyZSB0aGUgc2FtZSB0aGluZy5cbiAqICAtIFJFU09MVVRJT04uIGByZXNvbHZlYCBvbiB0aGUgc2FtZSBrZXkgY2xvc2VzIGl0LCBzbyBhIGNhc2UgdGhhdCBmaW5hbGx5XG4gKiAgICBnZXRzIGEgZmlyc3QgcmVzcG9uc2Ugc3RvcHMgcGFnaW5nIHdpdGhvdXQgYSBsb2NhbCBzdGF0ZSBtYWNoaW5lLlxuICogIC0gQ09OVEFDVCBNRVRIT0RTIGFuZCB0aGVpciB2ZXJpZmljYXRpb24sIHRoZSByb3RhLCBhbmQgZXNjYWxhdGlvbi5cbiAqXG4gKiBTbyB0aGVyZSBpcyBubyByb3RhIGluIHRoaXMgY29kZWJhc2Ugb24gcHVycG9zZS4gV2hhdCBzdGF5cyBoZXJlIGlzIHRoZVxuICogVFJJR0dFUiwgYmVjYXVzZSB0aGUgcHJvZHVjdCBrbm93cyBzb21ldGhpbmcgUGFnZXJEdXR5IGNhbm5vdDogYSBzdXBwb3J0IGNhc2VcbiAqIGNhcnJpZXMgYW4gZXhhY3QgYHJlc3BvbnNlX2R1ZV9hdGAsIHdoaWNoIGJlYXRzIGEgcDkwIGhpc3RvZ3JhbSB0aGF0IGNhbiBvbmx5XG4gKiBzYXkgdGhlIGRpc3RyaWJ1dGlvbiBhbHJlYWR5IGRyaWZ0ZWQuXG4gKlxuICogTkVWRVIgVEhST1dTLiBFdmVyeSBjYWxsZXIgaXMgb24gYW4gYWxlcnRpbmcgcGF0aCDigJQgYSB3ZWJob29rIGhhbmRsZXIgb3IgYVxuICogc3dlZXAg4oCUIGFuZCBhbiBleGNlcHRpb24gdGhlcmUgdHVybnMgXCJjb3VsZCBub3QgcGFnZVwiIGludG8gXCJjcmFzaGVkIGluc3RlYWQgb2ZcbiAqIHBhZ2luZ1wiLiBGYWlsdXJlcyBjb21lIGJhY2sgYXMgYSB0eXBlZCByZXN1bHQgYW5kIGFyZSBjb3VudGVkLlxuICovXG5cbmltcG9ydCB7IGVudkJvb2wsIGVudkludCwgZW52U3RyIH0gZnJvbSAnLi4vdXRpbHMvZW52LmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcbmltcG9ydCB7IHNhZmVGZXRjaCB9IGZyb20gJy4uL3V0aWxzL3NzcmYuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3BhZ2VyZHV0eScpO1xuXG4vKiogUGFnZXJEdXR5J3Mgb3duIHNldmVyaXR5IGVudW0uIE91cnMgbWFwIHN0cmFpZ2h0IG9udG8gaXQuICovXG5leHBvcnQgdHlwZSBQYWdlckR1dHlTZXZlcml0eSA9ICdjcml0aWNhbCcgfCAnZXJyb3InIHwgJ3dhcm5pbmcnIHwgJ2luZm8nO1xuXG4vKiogVGhlIHRocmVlIGZvbGxvdy11cCBhY3Rpb25zIGEgc2luZ2xlIGBkZWR1cEtleWAgbW92ZXMgdGhyb3VnaC4gKi9cbmV4cG9ydCB0eXBlIFBhZ2VyRHV0eUFjdGlvbiA9ICd0cmlnZ2VyJyB8ICdhY2tub3dsZWRnZScgfCAncmVzb2x2ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZXJEdXR5RXZlbnQge1xuICAvKipcbiAgICogVGhlIGtleSB0aGF0IHRpZXMgYSB0cmlnZ2VyIHRvIGl0cyBsYXRlciBhY2tub3dsZWRnZS9yZXNvbHZlLiBTdGFibGUgYW5kXG4gICAqIGRlcml2ZWQsIG5ldmVyIHJhbmRvbTogYGNhc2U6PGNhc2VJZD5gIGZvciB0aGUgcGVyLWNhc2Ugc3dlZXAsXG4gICAqIEFsZXJ0bWFuYWdlcidzIG93biBncm91cCBmaW5nZXJwcmludCBmb3IgdGhlIGFsZXJ0IGxlZyDigJQgc28gaXRzIGdyb3VwaW5nIGFuZFxuICAgKiBvdXJzIGNhbm5vdCBmaWdodCBvdmVyIHRoZSBzYW1lIGluY2lkZW50LlxuICAgKi9cbiAgZGVkdXBLZXk6IHN0cmluZztcbiAgYWN0aW9uOiBQYWdlckR1dHlBY3Rpb247XG4gIC8qKlxuICAgKiBXSElDSCBsZWcgcmFpc2VkIHRoaXMsIGFzIGEgbWV0cmljIGRpbWVuc2lvbiBvbmx5IOKAlCBuZXZlciBzZW50IHRvIFBhZ2VyRHV0eS5cbiAgICpcbiAgICogVGhlIHR3byBsZWdzIGhhdmUgZGlmZmVyZW50IGZhaWx1cmUgbW9kZXMgYW5kIG11c3QgYmUgc2VwYXJhYmxlIGluIG9uZVxuICAgKiBjb3VudGVyOiBgYWxlcnRtYW5hZ2VyYCBkZXBlbmRzIG9uIFByb21ldGhldXMgZXZhbHVhdGluZyBhbmQgQWxlcnRtYW5hZ2VyXG4gICAqIGRlbGl2ZXJpbmcsIGBjYXNlYCBkZXBlbmRzIG9uIHRoaXMgcHJvZHVjdCdzIG93biBzd2VlcCBiZWluZyBhbGl2ZS4gQ29sbGFwc2VkXG4gICAqIGludG8gb25lIHNlcmllcywgYSBkZWFkIHN3ZWVwIGlzIGludmlzaWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgZmxlZXQgYWxlcnRcbiAgICogc3RpbGwgZmlyZXMg4oCUIHdoaWNoIGlzIHByZWNpc2VseSB0aGUgd2luZG93IHRoZSBwZXItY2FzZSB0cmlnZ2VyIGV4aXN0cyB0b1xuICAgKiBjb3Zlci5cbiAgICovXG4gIHRyaWdnZXI/OiAnYWxlcnRtYW5hZ2VyJyB8ICdjYXNlJztcbiAgLyoqIFJlcXVpcmVkIGJ5IHRoZSBBUEkgb24gYSBgdHJpZ2dlcmA7IGlnbm9yZWQgb24gcmVzb2x2ZS4gKi9cbiAgc3VtbWFyeT86IHN0cmluZztcbiAgc2V2ZXJpdHk/OiBQYWdlckR1dHlTZXZlcml0eTtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIG9yaWdpbi4gUmVxdWlyZWQgb24gYSBgdHJpZ2dlcmAuICovXG4gIHNvdXJjZT86IHN0cmluZztcbiAgY29tcG9uZW50Pzogc3RyaW5nO1xuICAvKipcbiAgICogUGFnZXJEdXR5J3MgZ3JvdXBpbmcgZGltZW5zaW9uLiBXZSBwdXQgdGhlIE9SRyBJRCBoZXJlIGFuZCBub3RoaW5nIGVsc2Ug4oCUXG4gICAqIHNlZSB0aGUgbm90ZSBvbiBgY3VzdG9tRGV0YWlsc2AuXG4gICAqL1xuICBncm91cD86IHN0cmluZztcbiAgY2xhc3M/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGcmVlLWZvcm0gZGV0YWlsLiBJRFMgQU5EIFRJTUVTVEFNUFMgT05MWSDigJQgbmV2ZXIgY2FzZSBjb250ZW50LlxuICAgKlxuICAgKiBUaGlzIGlzIGFuIGF1dGhvcml6YXRpb24gYm91bmRhcnksIG5vdCBhIHN0eWxlIHByZWZlcmVuY2UuIFRoZSBvbi1jYWxsXG4gICAqIHBlcm1pc3Npb24gaXMgc3lzdGVtLW9yZyBzY29wZWQgYW5kIGdyYW50cyBubyB0ZW5hbnQgYWNjZXNzIGF0IGFsbFxuICAgKiAoYGlzU3lzdGVtT3JnSWRgIGlzIGEgY29udGVudC1vd25lciBjaGVjaywgbm90IGEgcHJpdmlsZWdlIGdhdGUpLCBzbyBwdXR0aW5nXG4gICAqIGEgY2FzZSBzdWJqZWN0IG9yIGJvZHkgaGVyZSB3b3VsZCByb3V0ZSB0ZW5hbnQgY29udGVudCB0byBhIHRoaXJkIHBhcnR5XG4gICAqIHRocm91Z2ggYSBjaGFubmVsIHRoYXQgZGVsaWJlcmF0ZWx5IGhhcyBubyByaWdodCB0byByZWFkIGl0LlxuICAgKi9cbiAgY3VzdG9tRGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlckR1dHlSZXN1bHQge1xuICBvazogYm9vbGVhbjtcbiAgLyoqIEhUVFAgc3RhdHVzIHdoZW4gdGhlIHJlcXVlc3QgY29tcGxldGVkLiAqL1xuICBzdGF0dXM/OiBudW1iZXI7XG4gIC8qKiBXaHkgaXQgZmFpbGVkLCBmb3IgdGhlIGxvZyBsaW5lIOKAlCBuZXZlciBzdXJmYWNlZCB0byBhIHRlbmFudC4gKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gcGFnaW5nIGlzIGNvbmZpZ3VyZWQgb2ZmLCBzbyBhIGNhbGxlciBjYW4gdGVsbCBcIm9mZlwiIGZyb20gXCJicm9rZVwiLiAqL1xuICBza2lwcGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXaGljaCBwcm92aWRlciB0aGUgRXZlbnRzIHYyIGNhbGxzIGdvIHRvLlxuICpcbiAqIGBwYWdlcmR1dHlgIHBpbnMgdGhlIGtub3duIGVuZHBvaW50LiBgY3VzdG9tYCBtZWFucyBcInNvbWV0aGluZyBlbHNlIHRoYXRcbiAqIGltcGxlbWVudHMgdGhpcyB3aXJlIGZvcm1hdFwiIGFuZCBSRVFVSVJFUyBgT05DQUxMX0VWRU5UU19VUkxgIOKAlCBpdCBkb2VzIG5vdFxuICogZmFsbCBiYWNrLCBiZWNhdXNlIGZhbGxpbmcgYmFjayBpcyBob3cgYSB0eXBvJ2QgVVJMIHF1aWV0bHkgcGFnZXMgdGhlIHdyb25nXG4gKiBhY2NvdW50LCBvciBwYWdlcyBub2JvZHkgd2hpbGUgcmVwb3J0aW5nIHN1Y2Nlc3MuXG4gKlxuICogV0hZIFRIRVJFIElTIE5PIGBvcHNnZW5pZWAgSEVSRSwgYWx0aG91Z2ggdGhlIGRlc2lnbiBub3RlcyBwcm9wb3NlZCBvbmU6XG4gKiBub3RoaW5nIGRvY3VtZW50cyBPcHNnZW5pZSBhY2NlcHRpbmcgdGhlIEV2ZW50cyB2MiBzaGFwZS4gSXRzIG93biBhbGVydCBBUElcbiAqIHRha2VzIGBtZXNzYWdlYC9gYWxpYXNgL2Bwcmlvcml0eWAsIG5vdCBgc3VtbWFyeWAvYHNldmVyaXR5YC9gZGVkdXBfa2V5YCwgc29cbiAqIGFuIGBvcHNnZW5pZWAgdmFsdWUgd291bGQgbmFtZSBhIHByb3ZpZGVyIHRoaXMgY2xpZW50IGNhbm5vdCBhY3R1YWxseSB0YWxrIHRvXG4gKiDigJQgYSBjb25maWcgb3B0aW9uIHRoYXQgZmFpbHMgYXQgM2FtIG9uIHRoZSBvbmUgY2FsbCB0aGF0IGhhZCB0byB3b3JrLiBBXG4gKiBnZW51aW5lbHkgRXZlbnRzLXYyLWNvbXBhdGlibGUgdmVuZG9yIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGBjdXN0b21gIHdpdGggaXRzXG4gKiBlbmRwb2ludCBzdGF0ZWQsIHdoaWNoIGlzIGhvbmVzdCBhYm91dCB3aG8gdmVyaWZpZWQgdGhlIGNvbXBhdGliaWxpdHkuXG4gKi9cbmV4cG9ydCB0eXBlIE9uQ2FsbFByb3ZpZGVyID0gJ3BhZ2VyZHV0eScgfCAnY3VzdG9tJztcblxuZXhwb3J0IGNvbnN0IFBBR0VSRFVUWV9FVkVOVFNfVVJMID0gJ2h0dHBzOi8vZXZlbnRzLnBhZ2VyZHV0eS5jb20vdjIvZW5xdWV1ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZXJEdXR5Q29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgcGFnaW5nIHJ1bnMgYXQgYWxsLiBPUFQtSU4sIGFnYWluc3QgdGhpcyByZXBvJ3MgdXN1YWwgb3B0LW91dCBncmFpblxuICAgKiAoYFNVUFBPUlRfRU5BQkxFRGAsIGBCSUxMSU5HX0RJU0NPVU5UU19FTkFCTEVEYCk6IGEgZmVhdHVyZSBuZWVkaW5nIGFuXG4gICAqIGV4dGVybmFsIGNyZWRlbnRpYWwgZGVmYXVsdHMgb2ZmIGhlcmUsIHRoZSB3YXkgYEJJTExJTkdfTUVURVJJTkdfRU5BQkxFRGBcbiAgICogZG9lcywgYW5kIGEgcGFnZXIgd2l0aCBubyByb3V0aW5nIGtleSB3b3VsZCBwYWdlIG5vYm9keSB3aGlsZSByZXBvcnRpbmdcbiAgICogc3VjY2Vzcy5cbiAgICovXG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKiBQZXItU0VSVklDRSBpbnRlZ3JhdGlvbiBrZXkuIE5PVCBhIFJFU1QgQVBJIGtleSDigJQgc2VlIGRvY3Mvb25jYWxsLXBhZ2luZy5tZC4gKi9cbiAgcm91dGluZ0tleTogc3RyaW5nO1xuICBwcm92aWRlcjogT25DYWxsUHJvdmlkZXI7XG4gIC8qKiBSZXNvbHZlZCBmcm9tIGBwcm92aWRlcmAgKyBgT05DQUxMX0VWRU5UU19VUkxgLiBFbXB0eSBtZWFucyBtaXNjb25maWd1cmVkLiAqL1xuICBlbmRwb2ludDogc3RyaW5nO1xuICB0aW1lb3V0TXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBlbmRwb2ludCBmcm9tIHRoZSBwcm92aWRlciBhbmQgdGhlIG92ZXJyaWRlLlxuICpcbiAqIEV4cG9ydGVkIGJlY2F1c2UgdGhlIHJlc29sdXRpb24gaGFzIGEgZmFpbHVyZSBjYXNlIHdvcnRoIHRlc3RpbmcgZGlyZWN0bHk6XG4gKiBgY3VzdG9tYCB3aXRoIG5vIFVSTCByZXR1cm5zIEVNUFRZLCBhbmQgdGhlIGNhbGxlciB0cmVhdHMgdGhhdCBhc1xuICogdW5jb25maWd1cmVkIHJhdGhlciB0aGFuIHNpbGVudGx5IHJlYWNoaW5nIGZvciBQYWdlckR1dHkncyBlbmRwb2ludCB3aXRoXG4gKiBzb21lYm9keSBlbHNlJ3Mgcm91dGluZyBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRXZlbnRzRW5kcG9pbnQocHJvdmlkZXI6IE9uQ2FsbFByb3ZpZGVyLCBvdmVycmlkZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKG92ZXJyaWRlKSByZXR1cm4gb3ZlcnJpZGU7XG4gIHJldHVybiBwcm92aWRlciA9PT0gJ3BhZ2VyZHV0eScgPyBQQUdFUkRVVFlfRVZFTlRTX1VSTCA6ICcnO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgcGFnaW5nIGlzIEJPVEggYXNrZWQgZm9yIGFuZCBjb2hlcmVudC5cbiAqXG4gKiBPTi1DQUxMIFJFUVVJUkVTIFNVUFBPUlQuIGBPTkNBTExfRU5BQkxFRGAgZXhpc3RzIHRvIHBhZ2UgYWJvdXQgYSBzdXBwb3J0XG4gKiByZXNwb25zZSB0YXJnZXQsIHNvIHdpdGggYFNVUFBPUlRfRU5BQkxFRD1mYWxzZWAgdGhlcmUgaXMgbm8gcHJvZHVjdCB0byBwYWdlXG4gKiBhYm91dCDigJQgdGhlIGJ1bmRsZXMgYXJlIGluYWN0aXZlLCBubyBjYXNlIGNhbiBiZSBvcGVuZWQsIGFuZCB0aGUgb25seSB0aGluZ1xuICogbGVmdCBpcyBhIGRlcGxveW1lbnQgcGF5aW5nIHBlciBzZWF0IGZvciBhIHBhZ2VyIHdpcmVkIHRvIG5vdGhpbmcuXG4gKlxuICogVkFMSURBVEVEIEZPUiBUSEUgQUNUSVZFIEZFQVRVUkUgT05MWSwgd2hpY2ggaXMgdGhlIHByZWNlZGVudCB0aGF0IG1hdHRlcnNcbiAqIGhlcmU6IGEgYnVuZGxlIHZhbGlkYXRvciBvbmNlIGNyYXNoZWQgYmlsbGluZyBhdCBib290IGJ5IGNoZWNraW5nIGV2ZXJ5XG4gKiBidW5kbGUgcmF0aGVyIHRoYW4gZXZlcnkgQUNUSVZFIG9uZS4gU28gdGhpcyBuZWl0aGVyIHRocm93cyBub3Igd2FybnMgd2hlblxuICogcGFnaW5nIGlzIG9mZiDigJQgaXQgaXMgbm90IGEgY29uZmxpY3QgdW50aWwgc29tZWJvZHkgYXNrcyBmb3IgdGhlIHRoaW5nLiBXaGVuXG4gKiB0aGV5IGRvLCB0aGUgcHJlcmVxdWlzaXRlIGlzIHJlcG9ydGVkIG9uY2UgYW5kIHBhZ2luZyBzdGF5cyBvZmYgcmF0aGVyIHRoYW5cbiAqIGhhbGYtb24sIGJlY2F1c2UgYSBwYWdlciB0aGF0IGZpcmVzIGZvciBhIHByb2R1Y3Qgbm9ib2R5IHNlbGxzIGlzIHRoZSBzYW1lXG4gKiBmYWlsdXJlIGFzIGEgcGFnZXIgd2l0aCBubyBrZXk6IGl0IHJlcG9ydHMgY292ZXJhZ2Ugb2Ygbm90aGluZy5cbiAqL1xuZnVuY3Rpb24gb25DYWxsQ29oZXJlbnRseUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIGlmICghZW52Qm9vbCgnT05DQUxMX0VOQUJMRUQnLCBmYWxzZSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKGVudkJvb2woJ1NVUFBPUlRfRU5BQkxFRCcsIHRydWUpKSByZXR1cm4gdHJ1ZTtcbiAgbG9nZ2VyLmVycm9yKCdPTkNBTExfRU5BQkxFRD10cnVlIHdpdGggU1VQUE9SVF9FTkFCTEVEPWZhbHNlIOKAlCBwYWdpbmcgc3RheXMgT0ZGJywge1xuICAgIHdoeTogJ29uLWNhbGwgcGFnZXMgYWJvdXQgYSBzdXBwb3J0IHJlc3BvbnNlIHRhcmdldDsgd2l0aCBzdXBwb3J0IG9mZiB0aGVyZSBhcmUgbm8gY2FzZXMgYW5kIG5vIHRhcmdldCcsXG4gIH0pO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWdlckR1dHlDb25maWcoKTogUGFnZXJEdXR5Q29uZmlnIHtcbiAgY29uc3QgcHJvdmlkZXIgPSBlbnZTdHIoJ09OQ0FMTF9QUk9WSURFUicsICdwYWdlcmR1dHknKSA9PT0gJ2N1c3RvbScgPyAnY3VzdG9tJyA6ICdwYWdlcmR1dHknO1xuICByZXR1cm4ge1xuICAgIGVuYWJsZWQ6IG9uQ2FsbENvaGVyZW50bHlFbmFibGVkKCksXG4gICAgLy8gUmVhZCBmcm9tIHRoZSBlbnZpcm9ubWVudCByYXRoZXIgdGhhbiBhIG1vdW50ZWQgZmlsZTogdW5saWtlIHRoZVxuICAgIC8vIEFsZXJ0bWFuYWdlciBTbGFjayBVUkxzIChhcGlfdXJsX2ZpbGUpLCB0aGlzIGtleSBpcyBjb25zdW1lZCBieSBPVVJcbiAgICAvLyBwcm9jZXNzLCB3aGljaCBhbHJlYWR5IHJlY2VpdmVzIGl0cyBzZWNyZXRzIGFzIGVudiBmcm9tIGEgU2VjcmV0LlxuICAgIHJvdXRpbmdLZXk6IGVudlN0cignUEFHRVJEVVRZX1JPVVRJTkdfS0VZJywgJycpLFxuICAgIHByb3ZpZGVyLFxuICAgIGVuZHBvaW50OiByZXNvbHZlRXZlbnRzRW5kcG9pbnQocHJvdmlkZXIsIGVudlN0cignT05DQUxMX0VWRU5UU19VUkwnLCAnJykpLFxuICAgIHRpbWVvdXRNczogZW52SW50KCdPTkNBTExfRVZFTlRTX1RJTUVPVVRfTVMnLCA1MDAwLCB7IG1pbjogMSB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTZW5kIG9uZSBldmVudC4gUmV0dXJucyBgeyBvazogdHJ1ZSB9YCBvbmx5IHdoZW4gUGFnZXJEdXR5IEFDQ0VQVEVEIGl0LlxuICpcbiAqIEEgMjAyIGlzIGFuIGFjY2VwdGFuY2UgYW5kIG5vdCBhIGRlbGl2ZXJ5IHJlY2VpcHQg4oCUIGl0IHNheXMgUGFnZXJEdXR5IGhhcyB0aGVcbiAqIGV2ZW50LCBub3RoaW5nIGFib3V0IHdoZXRoZXIgYSBwaG9uZSByYW5nLiBgb25jYWxsX3BhZ2VzX3RvdGFse291dGNvbWV9YFxuICogcmVjb3JkcyB3aGF0IHdlIGtub3csIHdoaWNoIGlzIHRoaXMgYW5kIG5vIG1vcmU7IHRoZSBvbmx5IGhvbmVzdCBldmlkZW5jZSBvZlxuICogY292ZXJhZ2UgaXMgYSBodW1hbiBhY2tub3dsZWRnaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFBhZ2VyRHV0eUV2ZW50KFxuICBldmVudDogUGFnZXJEdXR5RXZlbnQsXG4gIGNmZzogUGFnZXJEdXR5Q29uZmlnID0gcGFnZXJEdXR5Q29uZmlnKCksXG4pOiBQcm9taXNlPFBhZ2VyRHV0eVJlc3VsdD4ge1xuICBjb25zdCBsYWJlbHMgPSB7IGFjdGlvbjogZXZlbnQuYWN0aW9uLCB0cmlnZ2VyOiBldmVudC50cmlnZ2VyID8/ICdhbGVydG1hbmFnZXInIH07XG5cbiAgLy8gQ29uZmlndXJlZCBPRkYgaXMgYSBTS0lQLCBkaXN0aW5jdCBmcm9tIGEgZmFpbHVyZS4gVGhlIEFsZXJ0bWFuYWdlciBsZWdcbiAgLy8gcmVsaWVzIG9uIHRoaXM6IGl0cyByb3V0ZSBpcyBhbHdheXMgcHJlc2VudCAoYWxlcnRtYW5hZ2VyLnltbCBpcyBhc3NlcnRlZFxuICAvLyBieXRlLWlkZW50aWNhbCBhY3Jvc3MgdGFyZ2V0cywgc28gaXQgY2Fubm90IGJlIHRvZ2dsZWQgcGVyIGRlcGxveW1lbnQpLCBhbmRcbiAgLy8gdGhpcyBlbmRwb2ludCBhY2NlcHRpbmctYW5kLWRyb3BwaW5nIGlzIHdoYXQgbWFrZXMgdGhlIGtub2Igd29yayB3aXRob3V0IGFcbiAgLy8gc2Vjb25kIGNvbmZpZyBmaWxlIGFuZCB3aXRob3V0IGEgc3RyZWFtIG9mIG5vdGlmaWNhdGlvbiBmYWlsdXJlcy5cbiAgaWYgKCFjZmcuZW5hYmxlZCkge1xuICAgIGVtaXRDb3VudGVyKCdvbmNhbGxfcGFnZXNfdG90YWwnLCB7IC4uLmxhYmVscywgb3V0Y29tZTogJ2Rpc2FibGVkJyB9KTtcbiAgICByZXR1cm4geyBvazogdHJ1ZSwgc2tpcHBlZDogdHJ1ZSB9O1xuICB9XG4gIGlmICghY2ZnLmVuZHBvaW50KSB7XG4gICAgLy8gYE9OQ0FMTF9QUk9WSURFUj1jdXN0b21gIHdpdGggbm8gYE9OQ0FMTF9FVkVOVFNfVVJMYC4gQ291bnRlZCB1bmRlciB0aGVcbiAgICAvLyBzYW1lIG91dGNvbWUgYXMgYSBtaXNzaW5nIGtleSBiZWNhdXNlIGl0IGlzIHRoZSBzYW1lIGNsYXNzIG9mIGZhaWx1cmUg4oCUXG4gICAgLy8gc29tZWJvZHkgYXNrZWQgZm9yIHBhZ2luZyBhbmQgdGhlIGNsaWVudCBoYXMgbm93aGVyZSB0byBzZW5kIGl0IOKAlCBhbmRcbiAgICAvLyBiZWNhdXNlIHF1aWV0bHkgcmVhY2hpbmcgZm9yIFBhZ2VyRHV0eSdzIGVuZHBvaW50IGluc3RlYWQgd291bGQgc2VuZCB0aGlzXG4gICAgLy8gZGVwbG95bWVudCdzIHJvdXRpbmcga2V5IHRvIGEgcHJvdmlkZXIgbm9ib2R5IGNob3NlLlxuICAgIGVtaXRDb3VudGVyKCdvbmNhbGxfcGFnZXNfdG90YWwnLCB7IC4uLmxhYmVscywgb3V0Y29tZTogJ3VuY29uZmlndXJlZCcgfSk7XG4gICAgbG9nZ2VyLmVycm9yKCdPTkNBTExfUFJPVklERVI9Y3VzdG9tIGJ1dCBPTkNBTExfRVZFTlRTX1VSTCBpcyBlbXB0eSDigJQgbm9ib2R5IHdpbGwgYmUgcGFnZWQnLCB7XG4gICAgICBkZWR1cEtleTogZXZlbnQuZGVkdXBLZXksXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ25vIGV2ZW50cyBlbmRwb2ludCcgfTtcbiAgfVxuICBpZiAoIWNmZy5yb3V0aW5nS2V5KSB7XG4gICAgLy8gRW5hYmxlZCB3aXRoIG5vIGtleSBpcyB0aGUgaGFsZi1jb25maWd1cmVkIHN0YXRlIHRoZSBrbm9iIGV4aXN0cyB0b1xuICAgIC8vIHByZXZlbnQsIGFuZCBpdCBpcyB0aGUgb25lIGZhaWx1cmUgd29ydGggc2hvdXRpbmcgYWJvdXQ6IHNvbWVib2R5IGFza2VkXG4gICAgLy8gZm9yIHBhZ2luZyBhbmQgaXMgbm90IGdldHRpbmcgaXQuXG4gICAgZW1pdENvdW50ZXIoJ29uY2FsbF9wYWdlc190b3RhbCcsIHsgLi4ubGFiZWxzLCBvdXRjb21lOiAndW5jb25maWd1cmVkJyB9KTtcbiAgICBsb2dnZXIuZXJyb3IoJ09OQ0FMTF9FTkFCTEVEIGlzIHRydWUgYnV0IFBBR0VSRFVUWV9ST1VUSU5HX0tFWSBpcyBlbXB0eSDigJQgbm9ib2R5IHdpbGwgYmUgcGFnZWQnLCB7XG4gICAgICBkZWR1cEtleTogZXZlbnQuZGVkdXBLZXksXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ25vIHJvdXRpbmcga2V5JyB9O1xuICB9XG5cbiAgLy8gYHJlc29sdmVgIGFuZCBgYWNrbm93bGVkZ2VgIG5lZWQgb25seSB0aGUga2V5IGFuZCB0aGUgYWN0aW9uOyBhIHRyaWdnZXJcbiAgLy8gbmVlZHMgc3VtbWFyeS9zZXZlcml0eS9zb3VyY2UuIEJ1aWx0IGNvbmRpdGlvbmFsbHkgc28gYSByZXNvbHZlIGNhbm5vdCBiZVxuICAvLyByZWplY3RlZCBmb3IgYSBtaXNzaW5nIGZpZWxkIGl0IG5ldmVyIHJlcXVpcmVkLlxuICBjb25zdCBib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICByb3V0aW5nX2tleTogY2ZnLnJvdXRpbmdLZXksXG4gICAgZXZlbnRfYWN0aW9uOiBldmVudC5hY3Rpb24sXG4gICAgZGVkdXBfa2V5OiBldmVudC5kZWR1cEtleSxcbiAgfTtcbiAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ3RyaWdnZXInKSB7XG4gICAgYm9keS5wYXlsb2FkID0ge1xuICAgICAgc3VtbWFyeTogZXZlbnQuc3VtbWFyeSA/PyAnUGlwZWxpbmUgQnVpbGRlciBhbGVydCcsXG4gICAgICBzZXZlcml0eTogZXZlbnQuc2V2ZXJpdHkgPz8gJ2NyaXRpY2FsJyxcbiAgICAgIHNvdXJjZTogZXZlbnQuc291cmNlID8/ICdwaXBlbGluZS1idWlsZGVyJyxcbiAgICAgIC4uLihldmVudC5jb21wb25lbnQgPyB7IGNvbXBvbmVudDogZXZlbnQuY29tcG9uZW50IH0gOiB7fSksXG4gICAgICAuLi4oZXZlbnQuZ3JvdXAgPyB7IGdyb3VwOiBldmVudC5ncm91cCB9IDoge30pLFxuICAgICAgLi4uKGV2ZW50LmNsYXNzID8geyBjbGFzczogZXZlbnQuY2xhc3MgfSA6IHt9KSxcbiAgICAgIC4uLihldmVudC5jdXN0b21EZXRhaWxzID8geyBjdXN0b21fZGV0YWlsczogZXZlbnQuY3VzdG9tRGV0YWlscyB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBzYWZlRmV0Y2goY2ZnLmVuZHBvaW50LCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICB0aW1lb3V0TXM6IGNmZy50aW1lb3V0TXMsXG4gICAgfSk7XG4gICAgLy8gYHNhZmVGZXRjaGAgcmVmdXNlcyByZWRpcmVjdHMgcmF0aGVyIHRoYW4gZm9sbG93aW5nIHRoZW0sIHNvIGEgM3h4IGFycml2ZXNcbiAgICAvLyBhcyBgcmVkaXJlY3RlZGAgYW5kIGlzIGEgRkFJTEVEIHNlbmQg4oCUIG5ldmVyIGEgcGl2b3QgdG8gYW4gdW52ZXR0ZWQgaG9zdFxuICAgIC8vIGFuZCBuZXZlciByZWNvcmRlZCBncmVlbi5cbiAgICBpZiAocmVzcC5yZWRpcmVjdGVkKSB7XG4gICAgICBlbWl0Q291bnRlcignb25jYWxsX3BhZ2VzX3RvdGFsJywgeyAuLi5sYWJlbHMsIG91dGNvbWU6ICdyZWRpcmVjdGVkJyB9KTtcbiAgICAgIGxvZ2dlci5lcnJvcignUGFnZXJEdXR5IGVuZHBvaW50IHJlZGlyZWN0ZWQg4oCUIHJlZnVzZWQnLCB7IHN0YXR1czogcmVzcC5zdGF0dXMgfSk7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIHN0YXR1czogcmVzcC5zdGF0dXMsIGVycm9yOiAnZW5kcG9pbnQgcmVkaXJlY3RlZCAocmVmdXNlZCknIH07XG4gICAgfVxuICAgIGlmICghcmVzcC5vaykge1xuICAgICAgZW1pdENvdW50ZXIoJ29uY2FsbF9wYWdlc190b3RhbCcsIHsgLi4ubGFiZWxzLCBvdXRjb21lOiAncmVqZWN0ZWQnIH0pO1xuICAgICAgbG9nZ2VyLmVycm9yKCdQYWdlckR1dHkgcmVqZWN0ZWQgYW4gZXZlbnQnLCB7IHN0YXR1czogcmVzcC5zdGF0dXMsIGRlZHVwS2V5OiBldmVudC5kZWR1cEtleSB9KTtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgc3RhdHVzOiByZXNwLnN0YXR1cywgZXJyb3I6IGBzdGF0dXMgJHtyZXNwLnN0YXR1c31gIH07XG4gICAgfVxuICAgIGVtaXRDb3VudGVyKCdvbmNhbGxfcGFnZXNfdG90YWwnLCB7IC4uLmxhYmVscywgb3V0Y29tZTogJ2FjY2VwdGVkJyB9KTtcbiAgICByZXR1cm4geyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwLnN0YXR1cyB9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlbWl0Q291bnRlcignb25jYWxsX3BhZ2VzX3RvdGFsJywgeyAuLi5sYWJlbHMsIG91dGNvbWU6ICdlcnJvcicgfSk7XG4gICAgbG9nZ2VyLmVycm9yKCdDb3VsZCBub3QgcmVhY2ggUGFnZXJEdXR5JywgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksIGRlZHVwS2V5OiBldmVudC5kZWR1cEtleSB9KTtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9O1xuICB9XG59XG4iXX0=
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZXJkdXR5LmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvcGFnZXJkdXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFN0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBZ0Z6QyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyx5Q0FBeUMsQ0FBQztBQW1COUU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxRQUF3QixFQUFFLFFBQWdCO0lBQzlFLElBQUksUUFBUTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzlCLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBUyx1QkFBdUI7SUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNwRCxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNsRCxNQUFNLENBQUMsS0FBSyxDQUFDLG1FQUFtRSxFQUFFO1FBQ2hGLEdB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QUssQ0FBQywyQkFBMkIsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFBhZ2VyRHV0eSBFdmVudHMgQVBJIHYyIOKAlCB0aGUgb25seSB0aGluZyBpbiB0aGlzIHJlcG8gdGhhdCBjYW4gd2FrZSBhIGh1bWFuLlxuICpcbiAqIFdIWSBUSElTIEVYSVNUUy4gYFNVUFBPUlRfUFJFTUlVTV9FTkFCTEVEYCBzaGlwcyBvbiwgYW5kIHByZW1pdW0gc2VsbHMgYSBmaXJzdFxuICogcmVzcG9uc2UgXCJ3aXRoaW4gOCBob3VycywgYW55IGRheVwiIOKAlCB0aGUgb25lIHJlc3BvbnNlIHRhcmdldCBpblxuICogYFNVUFBPUlRfUkVTUE9OU0VfVEFSR0VUU2Agd2l0aCBubyBidXNpbmVzcy1ob3VycyBleGVtcHRpb24sIHNvIGl0cyBjbG9jayBydW5zXG4gKiB0aHJvdWdoIG5pZ2h0cyBhbmQgd2Vla2VuZHMuIEJlZm9yZSB0aGlzLCB0aGUgb25seSB0aGluZyB3YXRjaGluZyBpdCB3YXNcbiAqIGBTdXBwb3J0UHJlbWl1bUZpcnN0UmVzcG9uc2VBdFJpc2tgIHJvdXRlZCB0byBhIFNsYWNrIGNoYW5uZWwsIHdoaWNoIHNhdGlzZmllc1xuICogdGhlIHJvdXRpbmcgYW5kIG5vdCB0aGUgb2JsaWdhdGlvbjogdGhlIGFsZXJ0J3Mgb3duIGRlc2NyaXB0aW9uIHNheXMgXCJpZiBub1xuICogcm90YSBpcyBhd2FrZSwgdGhhdCBpcyB0aGUgY2F1c2VcIi5cbiAqXG4gKiBXSFkgTk8gU0RLLiBUaGUgd2hvbGUgcHJvdG9jb2wgaXMgb25lIEhUVFBTIFBPU1Qgb2YgSlNPTiB0byBhIGZpeGVkIGVuZHBvaW50LlxuICogQW4gU0RLIGZvciB0aGF0IGlzIGEgZGVwZW5kZW5jeSBmb3Igbm90aGluZyBpbiBhIHJlcG8gdGhhdCBkaWdlc3QtcGlucyxcbiAqIE9TVi1zY2FucyBhbmQgZW5mb3JjZXMgYG1pbmltdW1SZWxlYXNlQWdlYC5cbiAqXG4gKiBXSEFUIFRIRSBQUk9WSURFUiBPV05TLCBBTkQgV0hZIFRIQVQgREVDSURFRCBUSEUgREVTSUdOLiBgZGVkdXBLZXlgIHBsdXNcbiAqIGBldmVudF9hY3Rpb25gIG1lYW5zIFBhZ2VyRHV0eSBob2xkcyB0aGUgaW5jaWRlbnQgc3RhdGUsIHNvIHRocmVlIHRoaW5ncyB0aGlzXG4gKiByZXBvIHdvdWxkIG90aGVyd2lzZSBoYXZlIGhhZCB0byBidWlsZCBhcmUgc2ltcGx5IHRoZWlyczpcbiAqXG4gKiAgLSBERURVUExJQ0FUSU9OLiBGaWZ0eSBwcmVtaXVtIGNhc2VzIGJyZWFjaGluZyB0b2dldGhlciDigJQgdGhlIG5vcm1hbCBzaGFwZVxuICogICAgYWZ0ZXIgYW55IG91dGFnZSDigJQgaXMgb25lIGluY2lkZW50LCBub3QgZmlmdHkgcGFnZXMuIEZpZnR5IHBhZ2VzIGFuZCBub1xuICogICAgcGFnZXMgYXJlIHRoZSBzYW1lIHRoaW5nLlxuICogIC0gUkVTT0xVVElPTi4gYHJlc29sdmVgIG9uIHRoZSBzYW1lIGtleSBjbG9zZXMgaXQsIHNvIGEgY2FzZSB0aGF0IGZpbmFsbHlcbiAqICAgIGdldHMgYSBmaXJzdCByZXNwb25zZSBzdG9wcyBwYWdpbmcgd2l0aG91dCBhIGxvY2FsIHN0YXRlIG1hY2hpbmUuXG4gKiAgLSBDT05UQUNUIE1FVEhPRFMgYW5kIHRoZWlyIHZlcmlmaWNhdGlvbiwgdGhlIHJvdGEsIGFuZCBlc2NhbGF0aW9uLlxuICpcbiAqIFNvIHRoZXJlIGlzIG5vIHJvdGEgaW4gdGhpcyBjb2RlYmFzZSBvbiBwdXJwb3NlLiBXaGF0IHN0YXlzIGhlcmUgaXMgdGhlXG4gKiBUUklHR0VSLCBiZWNhdXNlIHRoZSBwcm9kdWN0IGtub3dzIHNvbWV0aGluZyBQYWdlckR1dHkgY2Fubm90OiBhIHN1cHBvcnQgY2FzZVxuICogY2FycmllcyBhbiBleGFjdCBgcmVzcG9uc2VfZHVlX2F0YCwgd2hpY2ggYmVhdHMgYSBwOTAgaGlzdG9ncmFtIHRoYXQgY2FuIG9ubHlcbiAqIHNheSB0aGUgZGlzdHJpYnV0aW9uIGFscmVhZHkgZHJpZnRlZC5cbiAqXG4gKiBORVZFUiBUSFJPV1MuIEV2ZXJ5IGNhbGxlciBpcyBvbiBhbiBhbGVydGluZyBwYXRoIOKAlCBhIHdlYmhvb2sgaGFuZGxlciBvciBhXG4gKiBzd2VlcCDigJQgYW5kIGFuIGV4Y2VwdGlvbiB0aGVyZSB0dXJucyBcImNvdWxkIG5vdCBwYWdlXCIgaW50byBcImNyYXNoZWQgaW5zdGVhZCBvZlxuICogcGFnaW5nXCIuIEZhaWx1cmVzIGNvbWUgYmFjayBhcyBhIHR5cGVkIHJlc3VsdCBhbmQgYXJlIGNvdW50ZWQuXG4gKi9cblxuaW1wb3J0IHsgZW52Qm9vbCwgZW52SW50LCBlbnZTdHIgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc2FmZUZldGNoIH0gZnJvbSAnLi4vdXRpbHMvc3NyZi5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncGFnZXJkdXR5Jyk7XG5cbi8qKiBQYWdlckR1dHkncyBvd24gc2V2ZXJpdHkgZW51bS4gT3VycyBtYXAgc3RyYWlnaHQgb250byBpdC4gKi9cbmV4cG9ydCB0eXBlIFBhZ2VyRHV0eVNldmVyaXR5ID0gJ2NyaXRpY2FsJyB8ICdlcnJvcicgfCAnd2FybmluZycgfCAnaW5mbyc7XG5cbi8qKiBUaGUgdGhyZWUgZm9sbG93LXVwIGFjdGlvbnMgYSBzaW5nbGUgYGRlZHVwS2V5YCBtb3ZlcyB0aHJvdWdoLiAqL1xuZXhwb3J0IHR5cGUgUGFnZXJEdXR5QWN0aW9uID0gJ3RyaWdnZXInIHwgJ2Fja25vd2xlZGdlJyB8ICdyZXNvbHZlJztcblxuZXhwb3J0IGludGVyZmFjZSBQYWdlckR1dHlFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUga2V5IHRoYXQgdGllcyBhIHRyaWdnZXIgdG8gaXRzIGxhdGVyIGFja25vd2xlZGdlL3Jlc29sdmUuIFN0YWJsZSBhbmRcbiAgICogZGVyaXZlZCwgbmV2ZXIgcmFuZG9tOiBgY2FzZTo8Y2FzZUlkPmAgZm9yIHRoZSBwZXItY2FzZSBzd2VlcCxcbiAgICogQWxlcnRtYW5hZ2VyJ3Mgb3duIGdyb3VwIGZpbmdlcnByaW50IGZvciB0aGUgYWxlcnQgbGVnIOKAlCBzbyBpdHMgZ3JvdXBpbmcgYW5kXG4gICAqIG91cnMgY2Fubm90IGZpZ2h0IG92ZXIgdGhlIHNhbWUgaW5jaWRlbnQuXG4gICAqL1xuICBkZWR1cEtleTogc3RyaW5nO1xuICBhY3Rpb246IFBhZ2VyRHV0eUFjdGlvbjtcbiAgLyoqXG4gICAqIFdISUNIIGxlZyByYWlzZWQgdGhpcywgYXMgYSBtZXRyaWMgZGltZW5zaW9uIG9ubHkg4oCUIG5ldmVyIHNlbnQgdG8gUGFnZXJEdXR5LlxuICAgKlxuICAgKiBUaGUgdHdvIGxlZ3MgaGF2ZSBkaWZmZXJlbnQgZmFpbHVyZSBtb2RlcyBhbmQgbXVzdCBiZSBzZXBhcmFibGUgaW4gb25lXG4gICAqIGNvdW50ZXI6IGBhbGVydG1hbmFnZXJgIGRlcGVuZHMgb24gUHJvbWV0aGV1cyBldmFsdWF0aW5nIGFuZCBBbGVydG1hbmFnZXJcbiAgICogZGVsaXZlcmluZywgYGNhc2VgIGRlcGVuZHMgb24gdGhpcyBwcm9kdWN0J3Mgb3duIHN3ZWVwIGJlaW5nIGFsaXZlLiBDb2xsYXBzZWRcbiAgICogaW50byBvbmUgc2VyaWVzLCBhIGRlYWQgc3dlZXAgaXMgaW52aXNpYmxlIGZvciBhcyBsb25nIGFzIHRoZSBmbGVldCBhbGVydFxuICAgKiBzdGlsbCBmaXJlcyDigJQgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSB3aW5kb3cgdGhlIHBlci1jYXNlIHRyaWdnZXIgZXhpc3RzIHRvXG4gICAqIGNvdmVyLlxuICAgKi9cbiAgdHJpZ2dlcj86ICdhbGVydG1hbmFnZXInIHwgJ2Nhc2UnO1xuICAvKiogUmVxdWlyZWQgYnkgdGhlIEFQSSBvbiBhIGB0cmlnZ2VyYDsgaWdub3JlZCBvbiByZXNvbHZlLiAqL1xuICBzdW1tYXJ5Pzogc3RyaW5nO1xuICBzZXZlcml0eT86IFBhZ2VyRHV0eVNldmVyaXR5O1xuICAvKiogSHVtYW4tcmVhZGFibGUgb3JpZ2luLiBSZXF1aXJlZCBvbiBhIGB0cmlnZ2VyYC4gKi9cbiAgc291cmNlPzogc3RyaW5nO1xuICBjb21wb25lbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQYWdlckR1dHkncyBncm91cGluZyBkaW1lbnNpb24uIFdlIHB1dCB0aGUgT1JHIElEIGhlcmUgYW5kIG5vdGhpbmcgZWxzZSDigJRcbiAgICogc2VlIHRoZSBub3RlIG9uIGBjdXN0b21EZXRhaWxzYC5cbiAgICovXG4gIGdyb3VwPzogc3RyaW5nO1xuICBjbGFzcz86IHN0cmluZztcbiAgLyoqXG4gICAqIEZyZWUtZm9ybSBkZXRhaWwuIElEUyBBTkQgVElNRVNUQU1QUyBPTkxZIOKAlCBuZXZlciBjYXNlIGNvbnRlbnQuXG4gICAqXG4gICAqIFRoaXMgaXMgYW4gYXV0aG9yaXphdGlvbiBib3VuZGFyeSwgbm90IGEgc3R5bGUgcHJlZmVyZW5jZS4gVGhlIG9uLWNhbGxcbiAgICogcGVybWlzc2lvbiBpcyBzeXN0ZW0tb3JnIHNjb3BlZCBhbmQgZ3JhbnRzIG5vIHRlbmFudCBhY2Nlc3MgYXQgYWxsXG4gICAqIChgaXNTeXN0ZW1PcmdJZGAgaXMgYSBjb250ZW50LW93bmVyIGNoZWNrLCBub3QgYSBwcml2aWxlZ2UgZ2F0ZSksIHNvIHB1dHRpbmdcbiAgICogYSBjYXNlIHN1YmplY3Qgb3IgYm9keSBoZXJlIHdvdWxkIHJvdXRlIHRlbmFudCBjb250ZW50IHRvIGEgdGhpcmQgcGFydHlcbiAgICogdGhyb3VnaCBhIGNoYW5uZWwgdGhhdCBkZWxpYmVyYXRlbHkgaGFzIG5vIHJpZ2h0IHRvIHJlYWQgaXQuXG4gICAqL1xuICBjdXN0b21EZXRhaWxzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VyRHV0eVJlc3VsdCB7XG4gIG9rOiBib29sZWFuO1xuICAvKiogSFRUUCBzdGF0dXMgd2hlbiB0aGUgcmVxdWVzdCBjb21wbGV0ZWQuICovXG4gIHN0YXR1cz86IG51bWJlcjtcbiAgLyoqIFdoeSBpdCBmYWlsZWQsIGZvciB0aGUgbG9nIGxpbmUg4oCUIG5ldmVyIHN1cmZhY2VkIHRvIGEgdGVuYW50LiAqL1xuICBlcnJvcj86IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiBwYWdpbmcgaXMgY29uZmlndXJlZCBvZmYsIHNvIGEgY2FsbGVyIGNhbiB0ZWxsIFwib2ZmXCIgZnJvbSBcImJyb2tlXCIuICovXG4gIHNraXBwZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdoaWNoIHByb3ZpZGVyIHRoZSBFdmVudHMgdjIgY2FsbHMgZ28gdG8uXG4gKlxuICogYHBhZ2VyZHV0eWAgcGlucyB0aGUga25vd24gZW5kcG9pbnQuIGBjdXN0b21gIG1lYW5zIFwic29tZXRoaW5nIGVsc2UgdGhhdFxuICogaW1wbGVtZW50cyB0aGlzIHdpcmUgZm9ybWF0XCIgYW5kIFJFUVVJUkVTIGBPTkNBTExfRVZFTlRTX1VSTGAg4oCUIGl0IGRvZXMgbm90XG4gKiBmYWxsIGJhY2ssIGJlY2F1c2UgZmFsbGluZyBiYWNrIGlzIGhvdyBhIHR5cG8nZCBVUkwgcXVpZXRseSBwYWdlcyB0aGUgd3JvbmdcbiAqIGFjY291bnQsIG9yIHBhZ2VzIG5vYm9keSB3aGlsZSByZXBvcnRpbmcgc3VjY2Vzcy5cbiAqXG4gKiBXSFkgVEhFUkUgSVMgTk8gYG9wc2dlbmllYCBIRVJFLCBhbHRob3VnaCB0aGUgZGVzaWduIG5vdGVzIHByb3Bvc2VkIG9uZTpcbiAqIG5vdGhpbmcgZG9jdW1lbnRzIE9wc2dlbmllIGFjY2VwdGluZyB0aGUgRXZlbnRzIHYyIHNoYXBlLiBJdHMgb3duIGFsZXJ0IEFQSVxuICogdGFrZXMgYG1lc3NhZ2VgL2BhbGlhc2AvYHByaW9yaXR5YCwgbm90IGBzdW1tYXJ5YC9gc2V2ZXJpdHlgL2BkZWR1cF9rZXlgLCBzb1xuICogYW4gYG9wc2dlbmllYCB2YWx1ZSB3b3VsZCBuYW1lIGEgcHJvdmlkZXIgdGhpcyBjbGllbnQgY2Fubm90IGFjdHVhbGx5IHRhbGsgdG9cbiAqIOKAlCBhIGNvbmZpZyBvcHRpb24gdGhhdCBmYWlscyBhdCAzYW0gb24gdGhlIG9uZSBjYWxsIHRoYXQgaGFkIHRvIHdvcmsuIEFcbiAqIGdlbnVpbmVseSBFdmVudHMtdjItY29tcGF0aWJsZSB2ZW5kb3IgaXMgcmVhY2hhYmxlIHRocm91Z2ggYGN1c3RvbWAgd2l0aCBpdHNcbiAqIGVuZHBvaW50IHN0YXRlZCwgd2hpY2ggaXMgaG9uZXN0IGFib3V0IHdobyB2ZXJpZmllZCB0aGUgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IHR5cGUgT25DYWxsUHJvdmlkZXIgPSAncGFnZXJkdXR5JyB8ICdjdXN0b20nO1xuXG5leHBvcnQgY29uc3QgUEFHRVJEVVRZX0VWRU5UU19VUkwgPSAnaHR0cHM6Ly9ldmVudHMucGFnZXJkdXR5LmNvbS92Mi9lbnF1ZXVlJztcblxuZXhwb3J0IGludGVyZmFjZSBQYWdlckR1dHlDb25maWcge1xuICAvKipcbiAgICogV2hldGhlciBwYWdpbmcgcnVucyBhdCBhbGwuIE9QVC1JTiwgYWdhaW5zdCB0aGlzIHJlcG8ncyB1c3VhbCBvcHQtb3V0IGdyYWluXG4gICAqIChgU1VQUE9SVF9FTkFCTEVEYCwgYEJJTExJTkdfRElTQ09VTlRTX0VOQUJMRURgKTogYSBmZWF0dXJlIG5lZWRpbmcgYW5cbiAgICogZXh0ZXJuYWwgY3JlZGVudGlhbCBkZWZhdWx0cyBvZmYgaGVyZSwgdGhlIHdheSBgQklMTElOR19NRVRFUklOR19FTkFCTEVEYFxuICAgKiBkb2VzLCBhbmQgYSBwYWdlciB3aXRoIG5vIHJvdXRpbmcga2V5IHdvdWxkIHBhZ2Ugbm9ib2R5IHdoaWxlIHJlcG9ydGluZ1xuICAgKiBzdWNjZXNzLlxuICAgKi9cbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgLyoqIFBlci1TRVJWSUNFIGludGVncmF0aW9uIGtleS4gTk9UIGEgUkVTVCBBUEkga2V5IOKAlCBzZWUgZG9jcy9vbmNhbGwtcGFnaW5nLm1kLiAqL1xuICByb3V0aW5nS2V5OiBzdHJpbmc7XG4gIHByb3ZpZGVyOiBPbkNhbGxQcm92aWRlcjtcbiAgLyoqIFJlc29sdmVkIGZyb20gYHByb3ZpZGVyYCArIGBPTkNBTExfRVZFTlRTX1VSTGAuIEVtcHR5IG1lYW5zIG1pc2NvbmZpZ3VyZWQuICovXG4gIGVuZHBvaW50OiBzdHJpbmc7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGVuZHBvaW50IGZyb20gdGhlIHByb3ZpZGVyIGFuZCB0aGUgb3ZlcnJpZGUuXG4gKlxuICogRXhwb3J0ZWQgYmVjYXVzZSB0aGUgcmVzb2x1dGlvbiBoYXMgYSBmYWlsdXJlIGNhc2Ugd29ydGggdGVzdGluZyBkaXJlY3RseTpcbiAqIGBjdXN0b21gIHdpdGggbm8gVVJMIHJldHVybnMgRU1QVFksIGFuZCB0aGUgY2FsbGVyIHRyZWF0cyB0aGF0IGFzXG4gKiB1bmNvbmZpZ3VyZWQgcmF0aGVyIHRoYW4gc2lsZW50bHkgcmVhY2hpbmcgZm9yIFBhZ2VyRHV0eSdzIGVuZHBvaW50IHdpdGhcbiAqIHNvbWVib2R5IGVsc2UncyByb3V0aW5nIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFdmVudHNFbmRwb2ludChwcm92aWRlcjogT25DYWxsUHJvdmlkZXIsIG92ZXJyaWRlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAob3ZlcnJpZGUpIHJldHVybiBvdmVycmlkZTtcbiAgcmV0dXJuIHByb3ZpZGVyID09PSAncGFnZXJkdXR5JyA/IFBBR0VSRFVUWV9FVkVOVFNfVVJMIDogJyc7XG59XG5cbi8qKlxuICogV2hldGhlciBwYWdpbmcgaXMgQk9USCBhc2tlZCBmb3IgYW5kIGNvaGVyZW50LlxuICpcbiAqIE9OLUNBTEwgUkVRVUlSRVMgU1VQUE9SVC4gYE9OQ0FMTF9FTkFCTEVEYCBleGlzdHMgdG8gcGFnZSBhYm91dCBhIHN1cHBvcnRcbiAqIHJlc3BvbnNlIHRhcmdldCwgc28gd2l0aCBgU1VQUE9SVF9FTkFCTEVEPWZhbHNlYCB0aGVyZSBpcyBubyBwcm9kdWN0IHRvIHBhZ2VcbiAqIGFib3V0IOKAlCB0aGUgYnVuZGxlcyBhcmUgaW5hY3RpdmUsIG5vIGNhc2UgY2FuIGJlIG9wZW5lZCwgYW5kIHRoZSBvbmx5IHRoaW5nXG4gKiBsZWZ0IGlzIGEgZGVwbG95bWVudCBwYXlpbmcgcGVyIHNlYXQgZm9yIGEgcGFnZXIgd2lyZWQgdG8gbm90aGluZy5cbiAqXG4gKiBWQUxJREFURUQgRk9SIFRIRSBBQ1RJVkUgRkVBVFVSRSBPTkxZLCB3aGljaCBpcyB0aGUgcHJlY2VkZW50IHRoYXQgbWF0dGVyc1xuICogaGVyZTogYSBidW5kbGUgdmFsaWRhdG9yIG9uY2UgY3Jhc2hlZCBiaWxsaW5nIGF0IGJvb3QgYnkgY2hlY2tpbmcgZXZlcnlcbiAqIGJ1bmRsZSByYXRoZXIgdGhhbiBldmVyeSBBQ1RJVkUgb25lLiBTbyB0aGlzIG5laXRoZXIgdGhyb3dzIG5vciB3YXJucyB3aGVuXG4gKiBwYWdpbmcgaXMgb2ZmIOKAlCBpdCBpcyBub3QgYSBjb25mbGljdCB1bnRpbCBzb21lYm9keSBhc2tzIGZvciB0aGUgdGhpbmcuIFdoZW5cbiAqIHRoZXkgZG8sIHRoZSBwcmVyZXF1aXNpdGUgaXMgcmVwb3J0ZWQgb25jZSBhbmQgcGFnaW5nIHN0YXlzIG9mZiByYXRoZXIgdGhhblxuICogaGFsZi1vbiwgYmVjYXVzZSBhIHBhZ2VyIHRoYXQgZmlyZXMgZm9yIGEgcHJvZHVjdCBub2JvZHkgc2VsbHMgaXMgdGhlIHNhbWVcbiAqIGZhaWx1cmUgYXMgYSBwYWdlciB3aXRoIG5vIGtleTogaXQgcmVwb3J0cyBjb3ZlcmFnZSBvZiBub3RoaW5nLlxuICovXG5mdW5jdGlvbiBvbkNhbGxDb2hlcmVudGx5RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgaWYgKCFlbnZCb29sKCdPTkNBTExfRU5BQkxFRCcsIGZhbHNlKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZW52Qm9vbCgnU1VQUE9SVF9FTkFCTEVEJywgdHJ1ZSkpIHJldHVybiB0cnVlO1xuICBsb2dnZXIuZXJyb3IoJ09OQ0FMTF9FTkFCTEVEPXRydWUgd2l0aCBTVVBQT1JUX0VOQUJMRUQ9ZmFsc2Ug4oCUIHBhZ2luZyBzdGF5cyBPRkYnLCB7XG4gICAgd2h5OiAnb24tY2FsbCBwYWdlcyBhYm91dCBhIHN1cHBvcnQgcmVzcG9uc2UgdGFyZ2V0OyB3aXRoIHN1cHBvcnQgb2ZmIHRoZXJlIGFyZSBubyBjYXNlcyBhbmQgbm8gdGFyZ2V0JyxcbiAgfSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhZ2VyRHV0eUNvbmZpZygpOiBQYWdlckR1dHlDb25maWcge1xuICBjb25zdCBwcm92aWRlciA9IGVudlN0cignT05DQUxMX1BST1ZJREVSJywgJ3BhZ2VyZHV0eScpID09PSAnY3VzdG9tJyA/ICdjdXN0b20nIDogJ3BhZ2VyZHV0eSc7XG4gIHJldHVybiB7XG4gICAgZW5hYmxlZDogb25DYWxsQ29oZXJlbnRseUVuYWJsZWQoKSxcbiAgICAvLyBSZWFkIGZyb20gdGhlIGVudmlyb25tZW50IHJhdGhlciB0aGFuIGEgbW91bnRlZCBmaWxlOiB1bmxpa2UgdGhlXG4gICAgLy8gQWxlcnRtYW5hZ2VyIFNsYWNrIFVSTHMgKGFwaV91cmxfZmlsZSksIHRoaXMga2V5IGlzIGNvbnN1bWVkIGJ5IE9VUlxuICAgIC8vIHByb2Nlc3MsIHdoaWNoIGFscmVhZHkgcmVjZWl2ZXMgaXRzIHNlY3JldHMgYXMgZW52IGZyb20gYSBTZWNyZXQuXG4gICAgcm91dGluZ0tleTogZW52U3RyKCdQQUdFUkRVVFlfUk9VVElOR19LRVknLCAnJyksXG4gICAgcHJvdmlkZXIsXG4gICAgZW5kcG9pbnQ6IHJlc29sdmVFdmVudHNFbmRwb2ludChwcm92aWRlciwgZW52U3RyKCdPTkNBTExfRVZFTlRTX1VSTCcsICcnKSksXG4gICAgdGltZW91dE1zOiBlbnZJbnQoJ09OQ0FMTF9FVkVOVFNfVElNRU9VVF9NUycsIDUwMDAsIHsgbWluOiAxIH0pLFxuICB9O1xufVxuXG4vKipcbiAqIFNlbmQgb25lIGV2ZW50LiBSZXR1cm5zIGB7IG9rOiB0cnVlIH1gIG9ubHkgd2hlbiBQYWdlckR1dHkgQUNDRVBURUQgaXQuXG4gKlxuICogQSAyMDIgaXMgYW4gYWNjZXB0YW5jZSBhbmQgbm90IGEgZGVsaXZlcnkgcmVjZWlwdCDigJQgaXQgc2F5cyBQYWdlckR1dHkgaGFzIHRoZVxuICogZXZlbnQsIG5vdGhpbmcgYWJvdXQgd2hldGhlciBhIHBob25lIHJhbmcuIGBvbmNhbGxfcGFnZXNfdG90YWx7b3V0Y29tZX1gXG4gKiByZWNvcmRzIHdoYXQgd2Uga25vdywgd2hpY2ggaXMgdGhpcyBhbmQgbm8gbW9yZTsgdGhlIG9ubHkgaG9uZXN0IGV2aWRlbmNlIG9mXG4gKiBjb3ZlcmFnZSBpcyBhIGh1bWFuIGFja25vd2xlZGdpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kUGFnZXJEdXR5RXZlbnQoXG4gIGV2ZW50OiBQYWdlckR1dHlFdmVudCxcbiAgY2ZnOiBQYWdlckR1dHlDb25maWcgPSBwYWdlckR1dHlDb25maWcoKSxcbik6IFByb21pc2U8UGFnZXJEdXR5UmVzdWx0PiB7XG4gIGNvbnN0IGxhYmVscyA9IHsgYWN0aW9uOiBldmVudC5hY3Rpb24sIHRyaWdnZXI6IGV2ZW50LnRyaWdnZXIgPz8gJ2FsZXJ0bWFuYWdlcicgfTtcblxuICAvLyBDb25maWd1cmVkIE9GRiBpcyBhIFNLSVAsIGRpc3RpbmN0IGZyb20gYSBmYWlsdXJlLiBUaGUgQWxlcnRtYW5hZ2VyIGxlZ1xuICAvLyByZWxpZXMgb24gdGhpczogaXRzIHJvdXRlIGlzIGFsd2F5cyBwcmVzZW50IChhbGVydG1hbmFnZXIueW1sIGlzIGFzc2VydGVkXG4gIC8vIGJ5dGUtaWRlbnRpY2FsIGFjcm9zcyB0YXJnZXRzLCBzbyBpdCBjYW5ub3QgYmUgdG9nZ2xlZCBwZXIgZGVwbG95bWVudCksIGFuZFxuICAvLyB0aGlzIGVuZHBvaW50IGFjY2VwdGluZy1hbmQtZHJvcHBpbmcgaXMgd2hhdCBtYWtlcyB0aGUga25vYiB3b3JrIHdpdGhvdXQgYVxuICAvLyBzZWNvbmQgY29uZmlnIGZpbGUgYW5kIHdpdGhvdXQgYSBzdHJlYW0gb2Ygbm90aWZpY2F0aW9uIGZhaWx1cmVzLlxuICBpZiAoIWNmZy5lbmFibGVkKSB7XG4gICAgZW1pdENvdW50ZXIoJ29uY2FsbF9wYWdlc190b3RhbCcsIHsgLi4ubGFiZWxzLCBvdXRjb21lOiAnZGlzYWJsZWQnIH0pO1xuICAgIHJldHVybiB7IG9rOiB0cnVlLCBza2lwcGVkOiB0cnVlIH07XG4gIH1cbiAgaWYgKCFjZmcuZW5kcG9pbnQpIHtcbiAgICAvLyBgT05DQUxMX1BST1ZJREVSPWN1c3RvbWAgd2l0aCBubyBgT05DQUxMX0VWRU5UU19VUkxgLiBDb3VudGVkIHVuZGVyIHRoZVxuICAgIC8vIHNhbWUgb3V0Y29tZSBhcyBhIG1pc3Npbmcga2V5IGJlY2F1c2UgaXQgaXMgdGhlIHNhbWUgY2xhc3Mgb2YgZmFpbHVyZSDigJRcbiAgICAvLyBzb21lYm9keSBhc2tlZCBmb3IgcGFnaW5nIGFuZCB0aGUgY2xpZW50IGhhcyBub3doZXJlIHRvIHNlbmQgaXQg4oCUIGFuZFxuICAgIC8vIGJlY2F1c2UgcXVpZXRseSByZWFjaGluZyBmb3IgUGFnZXJEdXR5J3MgZW5kcG9pbnQgaW5zdGVhZCB3b3VsZCBzZW5kIHRoaXNcbiAgICAvLyBkZXBsb3ltZW50J3Mgcm91dGluZyBrZXkgdG8gYSBwcm92aWRlciBub2JvZHkgY2hvc2UuXG4gICAgZW1pdENvdW50ZXIoJ29uY2FsbF9wYWdlc190b3RhbCcsIHsgLi4ubGFiZWxzLCBvdXRjb21lOiAndW5jb25maWd1cmVkJyB9KTtcbiAgICBsb2dnZXIuZXJyb3IoJ09OQ0FMTF9QUk9WSURFUj1jdXN0b20gYnV0IE9OQ0FMTF9FVkVOVFNfVVJMIGlzIGVtcHR5IOKAlCBub2JvZHkgd2lsbCBiZSBwYWdlZCcsIHtcbiAgICAgIGRlZHVwS2V5OiBldmVudC5kZWR1cEtleSxcbiAgICB9KTtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnbm8gZXZlbnRzIGVuZHBvaW50JyB9O1xuICB9XG4gIGlmICghY2ZnLnJvdXRpbmdLZXkpIHtcbiAgICAvLyBFbmFibGVkIHdpdGggbm8ga2V5IGlzIHRoZSBoYWxmLWNvbmZpZ3VyZWQgc3RhdGUgdGhlIGtub2IgZXhpc3RzIHRvXG4gICAgLy8gcHJldmVudCwgYW5kIGl0IGlzIHRoZSBvbmUgZmFpbHVyZSB3b3J0aCBzaG91dGluZyBhYm91dDogc29tZWJvZHkgYXNrZWRcbiAgICAvLyBmb3IgcGFnaW5nIGFuZCBpcyBub3QgZ2V0dGluZyBpdC5cbiAgICBlbWl0Q291bnRlcignb25jYWxsX3BhZ2VzX3RvdGFsJywgeyAuLi5sYWJlbHMsIG91dGNvbWU6ICd1bmNvbmZpZ3VyZWQnIH0pO1xuICAgIGxvZ2dlci5lcnJvcignT05DQUxMX0VOQUJMRUQgaXMgdHJ1ZSBidXQgUEFHRVJEVVRZX1JPVVRJTkdfS0VZIGlzIGVtcHR5IOKAlCBub2JvZHkgd2lsbCBiZSBwYWdlZCcsIHtcbiAgICAgIGRlZHVwS2V5OiBldmVudC5kZWR1cEtleSxcbiAgICB9KTtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnbm8gcm91dGluZyBrZXknIH07XG4gIH1cblxuICAvLyBgcmVzb2x2ZWAgYW5kIGBhY2tub3dsZWRnZWAgbmVlZCBvbmx5IHRoZSBrZXkgYW5kIHRoZSBhY3Rpb247IGEgdHJpZ2dlclxuICAvLyBuZWVkcyBzdW1tYXJ5L3NldmVyaXR5L3NvdXJjZS4gQnVpbHQgY29uZGl0aW9uYWxseSBzbyBhIHJlc29sdmUgY2Fubm90IGJlXG4gIC8vIHJlamVjdGVkIGZvciBhIG1pc3NpbmcgZmllbGQgaXQgbmV2ZXIgcmVxdWlyZWQuXG4gIGNvbnN0IGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIHJvdXRpbmdfa2V5OiBjZmcucm91dGluZ0tleSxcbiAgICBldmVudF9hY3Rpb246IGV2ZW50LmFjdGlvbixcbiAgICBkZWR1cF9rZXk6IGV2ZW50LmRlZHVwS2V5LFxuICB9O1xuICBpZiAoZXZlbnQuYWN0aW9uID09PSAndHJpZ2dlcicpIHtcbiAgICBib2R5LnBheWxvYWQgPSB7XG4gICAgICBzdW1tYXJ5OiBldmVudC5zdW1tYXJ5ID8/ICdQaXBlbGluZSBCdWlsZGVyIGFsZXJ0JyxcbiAgICAgIHNldmVyaXR5OiBldmVudC5zZXZlcml0eSA/PyAnY3JpdGljYWwnLFxuICAgICAgc291cmNlOiBldmVudC5zb3VyY2UgPz8gJ3BpcGVsaW5lLWJ1aWxkZXInLFxuICAgICAgLi4uKGV2ZW50LmNvbXBvbmVudCA/IHsgY29tcG9uZW50OiBldmVudC5jb21wb25lbnQgfSA6IHt9KSxcbiAgICAgIC4uLihldmVudC5ncm91cCA/IHsgZ3JvdXA6IGV2ZW50Lmdyb3VwIH0gOiB7fSksXG4gICAgICAuLi4oZXZlbnQuY2xhc3MgPyB7IGNsYXNzOiBldmVudC5jbGFzcyB9IDoge30pLFxuICAgICAgLi4uKGV2ZW50LmN1c3RvbURldGFpbHMgPyB7IGN1c3RvbV9kZXRhaWxzOiBldmVudC5jdXN0b21EZXRhaWxzIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IHNhZmVGZXRjaChjZmcuZW5kcG9pbnQsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgIHRpbWVvdXRNczogY2ZnLnRpbWVvdXRNcyxcbiAgICB9KTtcbiAgICAvLyBgc2FmZUZldGNoYCByZWZ1c2VzIHJlZGlyZWN0cyByYXRoZXIgdGhhbiBmb2xsb3dpbmcgdGhlbSwgc28gYSAzeHggYXJyaXZlc1xuICAgIC8vIGFzIGByZWRpcmVjdGVkYCBhbmQgaXMgYSBGQUlMRUQgc2VuZCDigJQgbmV2ZXIgYSBwaXZvdCB0byBhbiB1bnZldHRlZCBob3N0XG4gICAgLy8gYW5kIG5ldmVyIHJlY29yZGVkIGdyZWVuLlxuICAgIGlmIChyZXNwLnJlZGlyZWN0ZWQpIHtcbiAgICAgIGVtaXRDb3VudGVyKCdvbmNhbGxfcGFnZXNfdG90YWwnLCB7IC4uLmxhYmVscywgb3V0Y29tZTogJ3JlZGlyZWN0ZWQnIH0pO1xuICAgICAgbG9nZ2VyLmVycm9yKCdQYWdlckR1dHkgZW5kcG9pbnQgcmVkaXJlY3RlZCDigJQgcmVmdXNlZCcsIHsgc3RhdHVzOiByZXNwLnN0YXR1cyB9KTtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgc3RhdHVzOiByZXNwLnN0YXR1cywgZXJyb3I6ICdlbmRwb2ludCByZWRpcmVjdGVkIChyZWZ1c2VkKScgfTtcbiAgICB9XG4gICAgaWYgKCFyZXNwLm9rKSB7XG4gICAgICBlbWl0Q291bnRlcignb25jYWxsX3BhZ2VzX3RvdGFsJywgeyAuLi5sYWJlbHMsIG91dGNvbWU6ICdyZWplY3RlZCcgfSk7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1BhZ2VyRHV0eSByZWplY3RlZCBhbiBldmVudCcsIHsgc3RhdHVzOiByZXNwLnN0YXR1cywgZGVkdXBLZXk6IGV2ZW50LmRlZHVwS2V5IH0pO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3Auc3RhdHVzLCBlcnJvcjogYHN0YXR1cyAke3Jlc3Auc3RhdHVzfWAgfTtcbiAgICB9XG4gICAgZW1pdENvdW50ZXIoJ29uY2FsbF9wYWdlc190b3RhbCcsIHsgLi4ubGFiZWxzLCBvdXRjb21lOiAnYWNjZXB0ZWQnIH0pO1xuICAgIHJldHVybiB7IG9rOiB0cnVlLCBzdGF0dXM6IHJlc3Auc3RhdHVzIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVtaXRDb3VudGVyKCdvbmNhbGxfcGFnZXNfdG90YWwnLCB7IC4uLmxhYmVscywgb3V0Y29tZTogJ2Vycm9yJyB9KTtcbiAgICBsb2dnZXIuZXJyb3IoJ0NvdWxkIG5vdCByZWFjaCBQYWdlckR1dHknLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSwgZGVkdXBLZXk6IGV2ZW50LmRlZHVwS2V5IH0pO1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH07XG4gIH1cbn1cbiJdfQ==