@horietakehiro/aws-cdk-utul 0.40.1 → 0.40.2

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 (29) hide show
  1. package/lib/types/cfn-resource-types/aws-aiops-investigationgroup.d.ts +62 -0
  2. package/lib/types/cfn-resource-types/aws-aiops-investigationgroup.js +3 -0
  3. package/lib/types/cfn-resource-types/aws-batch-computeenvironment.d.ts +2 -0
  4. package/lib/types/cfn-resource-types/aws-batch-computeenvironment.js +1 -1
  5. package/lib/types/cfn-resource-types/aws-bedrock-guardrail.d.ts +10 -0
  6. package/lib/types/cfn-resource-types/aws-bedrock-guardrail.js +1 -1
  7. package/lib/types/cfn-resource-types/aws-cloudfront-distribution.d.ts +2 -0
  8. package/lib/types/cfn-resource-types/aws-cloudfront-distribution.js +1 -1
  9. package/lib/types/cfn-resource-types/aws-connectcampaignsv2-campaign.d.ts +5 -0
  10. package/lib/types/cfn-resource-types/aws-connectcampaignsv2-campaign.js +1 -1
  11. package/lib/types/cfn-resource-types/aws-datazone-projectprofile.d.ts +23 -22
  12. package/lib/types/cfn-resource-types/aws-datazone-projectprofile.js +1 -1
  13. package/lib/types/cfn-resource-types/aws-dsql-cluster.d.ts +21 -0
  14. package/lib/types/cfn-resource-types/aws-dsql-cluster.js +1 -1
  15. package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +23 -0
  16. package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
  17. package/lib/types/cfn-resource-types/aws-logs-transformer.d.ts +8 -0
  18. package/lib/types/cfn-resource-types/aws-logs-transformer.js +1 -1
  19. package/lib/types/cfn-resource-types/aws-rolesanywhere-trustanchor.d.ts +1 -1
  20. package/lib/types/cfn-resource-types/aws-rolesanywhere-trustanchor.js +1 -1
  21. package/lib/types/cfn-resource-types/aws-route53resolver-resolverendpoint.d.ts +1 -0
  22. package/lib/types/cfn-resource-types/aws-route53resolver-resolverendpoint.js +1 -1
  23. package/lib/types/cfn-resource-types/aws-route53resolver-resolverrule.d.ts +20 -16
  24. package/lib/types/cfn-resource-types/aws-route53resolver-resolverrule.js +1 -1
  25. package/lib/types/cfn-resource-types/aws-s3tables-namespace.d.ts +15 -0
  26. package/lib/types/cfn-resource-types/aws-s3tables-namespace.js +3 -0
  27. package/lib/types/cfn-resource-types.d.ts +4 -0
  28. package/lib/types/cfn-resource-types.js +34 -30
  29. package/package.json +1 -1
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgZGlzdHJpYnV0aW9uIHRlbGxzIENsb3VkRnJvbnQgd2hlcmUgeW91IHdhbnQgY29udGVudCB0byBiZSBkZWxpdmVyZWQgZnJvbSwgYW5kIHRoZSBkZXRhaWxzIGFib3V0IGhvdyB0byB0cmFjayBhbmQgbWFuYWdlIGNvbnRlbnQgZGVsaXZlcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19DTE9VREZST05UX0RJU1RSSUJVVElPTiB7XG5EaXN0cmlidXRpb25Db25maWc6IERpc3RyaWJ1dGlvbkNvbmZpZ1xuRG9tYWluTmFtZT86IHN0cmluZ1xuSWQ/OiBzdHJpbmdcbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgYGBUYWdgYCBlbGVtZW50cy5cbiAqL1xuVGFncz86IFRhZ1tdXG59XG4vKipcbiAqIFRoZSBkaXN0cmlidXRpb24ncyBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3RyaWJ1dGlvbkNvbmZpZyB7XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgQ05BTUVzIChhbHRlcm5hdGUgZG9tYWluIG5hbWVzKSwgaWYgYW55LCBmb3IgdGhpcyBkaXN0cmlidXRpb24uXG4gKi9cbkFsaWFzZXM/OiBzdHJpbmdbXVxuLyoqXG4gKiBJRCBvZiB0aGUgQW55Y2FzdCBzdGF0aWMgSVAgbGlzdCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICovXG5BbnljYXN0SXBMaXN0SWQ/OiBzdHJpbmdcbi8qKlxuICogQW4gYWxpYXMgZm9yIHRoZSBDRiBkaXN0cmlidXRpb24ncyBkb21haW4gbmFtZS5cbiAqICAgVGhpcyBwcm9wZXJ0eSBpcyBsZWdhY3kuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgW0FsaWFzZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWRpc3RyaWJ1dGlvbmNvbmZpZy5odG1sI2Nmbi1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1kaXN0cmlidXRpb25jb25maWctYWxpYXNlcykgaW5zdGVhZC5cbiAqL1xuQ05BTUVzPzogc3RyaW5nW11cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgYGBDYWNoZUJlaGF2aW9yYGAgZWxlbWVudHMuXG4gKi9cbkNhY2hlQmVoYXZpb3JzPzogQ2FjaGVCZWhhdmlvcltdXG4vKipcbiAqIEEgY29tbWVudCB0byBkZXNjcmliZSB0aGUgZGlzdHJpYnV0aW9uLiBUaGUgY29tbWVudCBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMTI4IGNoYXJhY3RlcnMuXG4gKi9cbkNvbW1lbnQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIGNvbm5lY3Rpb24gbW9kZSB0byBmaWx0ZXIgZGlzdHJpYnV0aW9ucyBieS5cbiAqL1xuQ29ubmVjdGlvbk1vZGU/OiAoXCJkaXJlY3RcIiB8IFwidGVuYW50LW9ubHlcIilcbi8qKlxuICogVGhlIGlkZW50aWZpZXIgb2YgYSBjb250aW51b3VzIGRlcGxveW1lbnQgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGBgQ3JlYXRlQ29udGludW91c0RlcGxveW1lbnRQb2xpY3lgYC5cbiAqL1xuQ29udGludW91c0RlcGxveW1lbnRQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRyb2xzIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgIFdoZXRoZXIgQ2xvdWRGcm9udCByZXBsYWNlcyBIVFRQIHN0YXR1cyBjb2RlcyBpbiB0aGUgNHh4IGFuZCA1eHggcmFuZ2Ugd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZXMgYmVmb3JlIHJldHVybmluZyB0aGUgcmVzcG9uc2UgdG8gdGhlIHZpZXdlci5cbiAqICAgKyAgSG93IGxvbmcgQ2xvdWRGcm9udCBjYWNoZXMgSFRUUCBzdGF0dXMgY29kZXMgaW4gdGhlIDR4eCBhbmQgNXh4IHJhbmdlLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjdXN0b20gZXJyb3IgcGFnZXMsIHNlZSBbQ3VzdG9taXppbmcgRXJyb3IgUmVzcG9uc2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY3VzdG9tLWVycm9yLXBhZ2VzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ3VzdG9tRXJyb3JSZXNwb25zZXM/OiBDdXN0b21FcnJvclJlc3BvbnNlW11cbkN1c3RvbU9yaWdpbj86IExlZ2FjeUN1c3RvbU9yaWdpblxuRGVmYXVsdENhY2hlQmVoYXZpb3I6IERlZmF1bHRDYWNoZUJlaGF2aW9yXG4vKipcbiAqIFdoZW4gYSB2aWV3ZXIgcmVxdWVzdHMgdGhlIHJvb3QgVVJMIGZvciB5b3VyIGRpc3RyaWJ1dGlvbiwgdGhlIGRlZmF1bHQgcm9vdCBvYmplY3QgaXMgdGhlIG9iamVjdCB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gcmVxdWVzdCBmcm9tIHlvdXIgb3JpZ2luLiBGb3IgZXhhbXBsZSwgaWYgeW91ciByb290IFVSTCBpcyBgYGh0dHBzOi8vd3d3LmV4YW1wbGUuY29tYGAsIHlvdSBjYW4gc3BlY2lmeSBDbG91ZEZyb250IHRvIHJldHVybiB0aGUgYGBpbmRleC5odG1sYGAgZmlsZSBhcyB0aGUgZGVmYXVsdCByb290IG9iamVjdC4gWW91IGNhbiBzcGVjaWZ5IGEgZGVmYXVsdCByb290IG9iamVjdCBzbyB0aGF0IHZpZXdlcnMgc2VlIGEgc3BlY2lmaWMgZmlsZSBvciBvYmplY3QsIGluc3RlYWQgb2YgYW5vdGhlciBvYmplY3QgaW4geW91ciBkaXN0cmlidXRpb24gKGZvciBleGFtcGxlLCBgYGh0dHBzOi8vd3d3LmV4YW1wbGUuY29tL3Byb2R1Y3QtZGVzY3JpcHRpb24uaHRtbGBgKS4gQSBkZWZhdWx0IHJvb3Qgb2JqZWN0IGF2b2lkcyBleHBvc2luZyB0aGUgY29udGVudHMgb2YgeW91ciBkaXN0cmlidXRpb24uXG4gKiAgWW91IGNhbiBzcGVjaWZ5IHRoZSBvYmplY3QgbmFtZSBvciBhIHBhdGggdG8gdGhlIG9iamVjdCBuYW1lIChmb3IgZXhhbXBsZSwgYGBpbmRleC5odG1sYGAgb3IgYGBleGFtcGxlRm9sZGVyTmFtZS9pbmRleC5odG1sYGApLiBZb3VyIHN0cmluZyBjYW4ndCBiZWdpbiB3aXRoIGEgZm9yd2FyZCBzbGFzaCAoYGAvYGApLiBPbmx5IHNwZWNpZnkgdGhlIG9iamVjdCBuYW1lIG9yIHRoZSBwYXRoIHRvIHRoZSBvYmplY3QuXG4gKiAgSWYgeW91IGRvbid0IHdhbnQgdG8gc3BlY2lmeSBhIGRlZmF1bHQgcm9vdCBvYmplY3Qgd2hlbiB5b3UgY3JlYXRlIGEgZGlzdHJpYnV0aW9uLCBpbmNsdWRlIGFuIGVtcHR5IGBgRGVmYXVsdFJvb3RPYmplY3RgYCBlbGVtZW50LlxuICogIFRvIGRlbGV0ZSB0aGUgZGVmYXVsdCByb290IG9iamVjdCBmcm9tIGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiwgdXBkYXRlIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBhbmQgaW5jbHVkZSBhbiBlbXB0eSBgYERlZmF1bHRSb290T2JqZWN0YGAgZWxlbWVudC5cbiAqICBUbyByZXBsYWNlIHRoZSBkZWZhdWx0IHJvb3Qgb2JqZWN0LCB1cGRhdGUgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGFuZCBzcGVjaWZ5IHRoZSBuZXcgb2JqZWN0LlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZWZhdWx0IHJvb3Qgb2JqZWN0LCBzZWUgW1NwZWNpZnkgYSBkZWZhdWx0IHJvb3Qgb2JqZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRGVmYXVsdFJvb3RPYmplY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5EZWZhdWx0Um9vdE9iamVjdD86IHN0cmluZ1xuLyoqXG4gKiBGcm9tIHRoaXMgZmllbGQsIHlvdSBjYW4gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHNlbGVjdGVkIGRpc3RyaWJ1dGlvbi5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxuLyoqXG4gKiAoT3B0aW9uYWwpIFNwZWNpZnkgdGhlIEhUVFAgdmVyc2lvbihzKSB0aGF0IHlvdSB3YW50IHZpZXdlcnMgdG8gdXNlIHRvIGNvbW11bmljYXRlIHdpdGggQ0YuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBuZXcgZGlzdHJpYnV0aW9ucyBpcyBgYGh0dHAxLjFgYC5cbiAqICBGb3Igdmlld2VycyBhbmQgQ0YgdG8gdXNlIEhUVFAvMiwgdmlld2VycyBtdXN0IHN1cHBvcnQgVExTdjEuMiBvciBsYXRlciwgYW5kIG11c3Qgc3VwcG9ydCBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpLlxuICogIEZvciB2aWV3ZXJzIGFuZCBDRiB0byB1c2UgSFRUUC8zLCB2aWV3ZXJzIG11c3Qgc3VwcG9ydCBUTFN2MS4zIGFuZCBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpLiBDRiBzdXBwb3J0cyBIVFRQLzMgY29ubmVjdGlvbiBtaWdyYXRpb24gdG8gYWxsb3cgdGhlIHZpZXdlciB0byBzd2l0Y2ggbmV0d29ya3Mgd2l0aG91dCBsb3NpbmcgY29ubmVjdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY29ubmVjdGlvbiBtaWdyYXRpb24sIHNlZSBbQ29ubmVjdGlvbiBNaWdyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTAwMC5odG1sI25hbWUtY29ubmVjdGlvbi1taWdyYXRpb24pIGF0IFJGQyA5MDAwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzdXBwb3J0ZWQgVExTdjEuMyBjaXBoZXJzLCBzZWUgW1N1cHBvcnRlZCBwcm90b2NvbHMgYW5kIGNpcGhlcnMgYmV0d2VlbiB2aWV3ZXJzIGFuZCBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvc2VjdXJlLWNvbm5lY3Rpb25zLXN1cHBvcnRlZC12aWV3ZXItcHJvdG9jb2xzLWNpcGhlcnMuaHRtbCkuXG4gKi9cbkh0dHBWZXJzaW9uPzogc3RyaW5nXG4vKipcbiAqIElmIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gcmVzcG9uZCB0byBJUHY2IEROUyByZXF1ZXN0cyB3aXRoIGFuIElQdjYgYWRkcmVzcyBmb3IgeW91ciBkaXN0cmlidXRpb24sIHNwZWNpZnkgYGB0cnVlYGAuIElmIHlvdSBzcGVjaWZ5IGBgZmFsc2VgYCwgQ2xvdWRGcm9udCByZXNwb25kcyB0byBJUHY2IEROUyByZXF1ZXN0cyB3aXRoIHRoZSBETlMgcmVzcG9uc2UgY29kZSBgYE5PRVJST1JgYCBhbmQgd2l0aCBubyBJUCBhZGRyZXNzZXMuIFRoaXMgYWxsb3dzIHZpZXdlcnMgdG8gc3VibWl0IGEgc2Vjb25kIHJlcXVlc3QsIGZvciBhbiBJUHY0IGFkZHJlc3MgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLlxuICogIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgZW5hYmxlIElQdjYgaWYgeW91IGhhdmUgdXNlcnMgb24gSVB2NiBuZXR3b3JrcyB3aG8gd2FudCB0byBhY2Nlc3MgeW91ciBjb250ZW50LiBIb3dldmVyLCBpZiB5b3UncmUgdXNpbmcgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHlvdXIgY29udGVudCwgYW5kIGlmIHlvdSdyZSB1c2luZyBhIGN1c3RvbSBwb2xpY3kgdGhhdCBpbmNsdWRlcyB0aGUgYGBJcEFkZHJlc3NgYCBwYXJhbWV0ZXIgdG8gcmVzdHJpY3QgdGhlIElQIGFkZHJlc3NlcyB0aGF0IGNhbiBhY2Nlc3MgeW91ciBjb250ZW50LCBkb24ndCBlbmFibGUgSVB2Ni4gSWYgeW91IHdhbnQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHNvbWUgY29udGVudCBieSBJUCBhZGRyZXNzIGFuZCBub3QgcmVzdHJpY3QgYWNjZXNzIHRvIG90aGVyIGNvbnRlbnQgKG9yIHJlc3RyaWN0IGFjY2VzcyBidXQgbm90IGJ5IElQIGFkZHJlc3MpLCB5b3UgY2FuIGNyZWF0ZSB0d28gZGlzdHJpYnV0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgYSBTaWduZWQgVVJMIFVzaW5nIGEgQ3VzdG9tIFBvbGljeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3ByaXZhdGUtY29udGVudC1jcmVhdGluZy1zaWduZWQtdXJsLWN1c3RvbS1wb2xpY3kuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSdyZSB1c2luZyBhbiBSNTNBV1NJbnRsb25nIGFsaWFzIHJlc291cmNlIHJlY29yZCBzZXQgdG8gcm91dGUgdHJhZmZpYyB0byB5b3VyIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBzZWNvbmQgYWxpYXMgcmVzb3VyY2UgcmVjb3JkIHNldCB3aGVuIGJvdGggb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZTpcbiAqICAgKyAgWW91IGVuYWJsZSBJUHY2IGZvciB0aGUgZGlzdHJpYnV0aW9uXG4gKiAgICsgIFlvdSdyZSB1c2luZyBhbHRlcm5hdGUgZG9tYWluIG5hbWVzIGluIHRoZSBVUkxzIGZvciB5b3VyIG9iamVjdHNcbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUm91dGluZyBUcmFmZmljIHRvIGFuIEFtYXpvbiBDbG91ZEZyb250IFdlYiBEaXN0cmlidXRpb24gYnkgVXNpbmcgWW91ciBEb21haW4gTmFtZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3JvdXRpbmctdG8tY2xvdWRmcm9udC1kaXN0cmlidXRpb24uaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSBjcmVhdGVkIGEgQ05BTUUgcmVzb3VyY2UgcmVjb3JkIHNldCwgZWl0aGVyIHdpdGggUjUzQVdTSW50bG9uZyBvciB3aXRoIGFub3RoZXIgRE5TIHNlcnZpY2UsIHlvdSBkb24ndCBuZWVkIHRvIG1ha2UgYW55IGNoYW5nZXMuIEEgQ05BTUUgcmVjb3JkIHdpbGwgcm91dGUgdHJhZmZpYyB0byB5b3VyIGRpc3RyaWJ1dGlvbiByZWdhcmRsZXNzIG9mIHRoZSBJUCBhZGRyZXNzIGZvcm1hdCBvZiB0aGUgdmlld2VyIHJlcXVlc3QuXG4gKi9cbklQVjZFbmFibGVkPzogYm9vbGVhblxuTG9nZ2luZz86IExvZ2dpbmdcbk9yaWdpbkdyb3Vwcz86IE9yaWdpbkdyb3Vwc1xuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9yaWdpbnMgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLlxuICogIFNwZWNpZnkgYSB2YWx1ZSBmb3IgZWl0aGVyIHRoZSBgYE9yaWdpbnNgYCBvciBgYE9yaWdpbkdyb3Vwc2BgIHByb3BlcnR5LlxuICovXG5PcmlnaW5zPzogT3JpZ2luW11cbi8qKlxuICogVGhlIHByaWNlIGNsYXNzIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgbWF4aW11bSBwcmljZSB0aGF0IHlvdSB3YW50IHRvIHBheSBmb3IgQ2xvdWRGcm9udCBzZXJ2aWNlLiBJZiB5b3Ugc3BlY2lmeSBgYFByaWNlQ2xhc3NfQWxsYGAsIENsb3VkRnJvbnQgcmVzcG9uZHMgdG8gcmVxdWVzdHMgZm9yIHlvdXIgb2JqZWN0cyBmcm9tIGFsbCBDbG91ZEZyb250IGVkZ2UgbG9jYXRpb25zLlxuICogIElmIHlvdSBzcGVjaWZ5IGEgcHJpY2UgY2xhc3Mgb3RoZXIgdGhhbiBgYFByaWNlQ2xhc3NfQWxsYGAsIENsb3VkRnJvbnQgc2VydmVzIHlvdXIgb2JqZWN0cyBmcm9tIHRoZSBDbG91ZEZyb250IGVkZ2UgbG9jYXRpb24gdGhhdCBoYXMgdGhlIGxvd2VzdCBsYXRlbmN5IGFtb25nIHRoZSBlZGdlIGxvY2F0aW9ucyBpbiB5b3VyIHByaWNlIGNsYXNzLiBWaWV3ZXJzIHdobyBhcmUgaW4gb3IgbmVhciByZWdpb25zIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20geW91ciBzcGVjaWZpZWQgcHJpY2UgY2xhc3MgbWF5IGVuY291bnRlciBzbG93ZXIgcGVyZm9ybWFuY2UuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHJpY2UgY2xhc3Nlcywgc2VlIFtDaG9vc2luZyB0aGUgUHJpY2UgQ2xhc3MgZm9yIGEgQ2xvdWRGcm9udCBEaXN0cmlidXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9QcmljZUNsYXNzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi4gRm9yIGluZm9ybWF0aW9uIGFib3V0IENsb3VkRnJvbnQgcHJpY2luZywgaW5jbHVkaW5nIGhvdyBwcmljZSBjbGFzc2VzIChzdWNoIGFzIFByaWNlIENsYXNzIDEwMCkgbWFwIHRvIENsb3VkRnJvbnQgcmVnaW9ucywgc2VlIFtBbWF6b24gQ2xvdWRGcm9udCBQcmljaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9wcmljaW5nLykuXG4gKi9cblByaWNlQ2xhc3M/OiBzdHJpbmdcblJlc3RyaWN0aW9ucz86IFJlc3RyaWN0aW9uc1xuUzNPcmlnaW4/OiBMZWdhY3lTM09yaWdpblxuLyoqXG4gKiBBIEJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RhZ2luZyBkaXN0cmlidXRpb24uIFdoZW4gdGhpcyB2YWx1ZSBpcyBgYHRydWVgYCwgdGhpcyBpcyBhIHN0YWdpbmcgZGlzdHJpYnV0aW9uLiBXaGVuIHRoaXMgdmFsdWUgaXMgYGBmYWxzZWBgLCB0aGlzIGlzIG5vdCBhIHN0YWdpbmcgZGlzdHJpYnV0aW9uLlxuICovXG5TdGFnaW5nPzogYm9vbGVhblxuLyoqXG4gKiBBIGRpc3RyaWJ1dGlvbiB0ZW5hbnQgY29uZmlndXJhdGlvbi5cbiAqL1xuVGVuYW50Q29uZmlnPzoge1xuUGFyYW1ldGVyRGVmaW5pdGlvbnM/OiBQYXJhbWV0ZXJEZWZpbml0aW9uW11cbn1cblZpZXdlckNlcnRpZmljYXRlPzogVmlld2VyQ2VydGlmaWNhdGVcbi8qKlxuICogQSB1bmlxdWUgaWRlbnRpZmllciB0aGF0IHNwZWNpZmllcyB0aGUgV0FGIHdlYiBBQ0wsIGlmIGFueSwgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBkaXN0cmlidXRpb24uIFRvIHNwZWNpZnkgYSB3ZWIgQUNMIGNyZWF0ZWQgdXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFdBRiwgdXNlIHRoZSBBQ0wgQVJOLCBmb3IgZXhhbXBsZSBgYGFybjphd3M6d2FmdjI6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpnbG9iYWwvd2ViYWNsL0V4YW1wbGVXZWJBQ0wvYTFiMmMzZDQtNTY3OC05MGFiLWNkZWYtRVhBTVBMRTExMTExYGAuIFRvIHNwZWNpZnkgYSB3ZWIgQUNMIGNyZWF0ZWQgdXNpbmcgV0FGIENsYXNzaWMsIHVzZSB0aGUgQUNMIElELCBmb3IgZXhhbXBsZSBgYGExYjJjM2Q0LTU2NzgtOTBhYi1jZGVmLUVYQU1QTEUxMTExMWBgLlxuICogIFdBRiBpcyBhIHdlYiBhcHBsaWNhdGlvbiBmaXJld2FsbCB0aGF0IGxldHMgeW91IG1vbml0b3IgdGhlIEhUVFAgYW5kIEhUVFBTIHJlcXVlc3RzIHRoYXQgYXJlIGZvcndhcmRlZCB0byBDbG91ZEZyb250LCBhbmQgbGV0cyB5b3UgY29udHJvbCBhY2Nlc3MgdG8geW91ciBjb250ZW50LiBCYXNlZCBvbiBjb25kaXRpb25zIHRoYXQgeW91IHNwZWNpZnksIHN1Y2ggYXMgdGhlIElQIGFkZHJlc3NlcyB0aGF0IHJlcXVlc3RzIG9yaWdpbmF0ZSBmcm9tIG9yIHRoZSB2YWx1ZXMgb2YgcXVlcnkgc3RyaW5ncywgQ2xvdWRGcm9udCByZXNwb25kcyB0byByZXF1ZXN0cyBlaXRoZXIgd2l0aCB0aGUgcmVxdWVzdGVkIGNvbnRlbnQgb3Igd2l0aCBhbiBIVFRQIDQwMyBzdGF0dXMgY29kZSAoRm9yYmlkZGVuKS4gWW91IGNhbiBhbHNvIGNvbmZpZ3VyZSBDbG91ZEZyb250IHRvIHJldHVybiBhIGN1c3RvbSBlcnJvciBwYWdlIHdoZW4gYSByZXF1ZXN0IGlzIGJsb2NrZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFdBRiwgc2VlIHRoZSBbRGV2ZWxvcGVyIEd1aWRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vd2FmL2xhdGVzdC9kZXZlbG9wZXJndWlkZS93aGF0LWlzLWF3cy13YWYuaHRtbCkuXG4gKi9cbldlYkFDTElkPzogc3RyaW5nXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgZGVzY3JpYmVzIGhvdyBDbG91ZEZyb250IHByb2Nlc3NlcyByZXF1ZXN0cy5cbiAqICBZb3UgbXVzdCBjcmVhdGUgYXQgbGVhc3QgYXMgbWFueSBjYWNoZSBiZWhhdmlvcnMgKGluY2x1ZGluZyB0aGUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvcikgYXMgeW91IGhhdmUgb3JpZ2lucyBpZiB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHNlcnZlIG9iamVjdHMgZnJvbSBhbGwgb2YgdGhlIG9yaWdpbnMuIEVhY2ggY2FjaGUgYmVoYXZpb3Igc3BlY2lmaWVzIHRoZSBvbmUgb3JpZ2luIGZyb20gd2hpY2ggeW91IHdhbnQgQ2xvdWRGcm9udCB0byBnZXQgb2JqZWN0cy4gSWYgeW91IGhhdmUgdHdvIG9yaWdpbnMgYW5kIG9ubHkgdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IsIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yIHdpbGwgY2F1c2UgQ2xvdWRGcm9udCB0byBnZXQgb2JqZWN0cyBmcm9tIG9uZSBvZiB0aGUgb3JpZ2lucywgYnV0IHRoZSBvdGhlciBvcmlnaW4gaXMgbmV2ZXIgdXNlZC5cbiAqICBGb3IgdGhlIGN1cnJlbnQgcXVvdGEgKGZvcm1lcmx5IGtub3duIGFzIGxpbWl0KSBvbiB0aGUgbnVtYmVyIG9mIGNhY2hlIGJlaGF2aW9ycyB0aGF0IHlvdSBjYW4gYWRkIHRvIGEgZGlzdHJpYnV0aW9uLCBzZWUgW1F1b3Rhc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Nsb3VkZnJvbnQtbGltaXRzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzcGVjaWZ5IGFueSBjYWNoZSBiZWhhdmlvcnMsIGluY2x1ZGUgb25seSBhbiBlbXB0eSBgYENhY2hlQmVoYXZpb3JzYGAgZWxlbWVudC4gRG9uJ3Qgc3BlY2lmeSBhbiBlbXB0eSBpbmRpdmlkdWFsIGBgQ2FjaGVCZWhhdmlvcmBgIGVsZW1lbnQsIGJlY2F1c2UgdGhpcyBpcyBpbnZhbGlkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDYWNoZUJlaGF2aW9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkZnJvbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ2FjaGVCZWhhdmlvcnMuaHRtbCkuIFxuICogIFRvIGRlbGV0ZSBhbGwgY2FjaGUgYmVoYXZpb3JzIGluIGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiwgdXBkYXRlIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBhbmQgaW5jbHVkZSBvbmx5IGFuIGVtcHR5IGBgQ2FjaGVCZWhhdmlvcnNgYCBlbGVtZW50LlxuICogIFRvIGFkZCwgY2hhbmdlLCBvciByZW1vdmUgb25lIG9yIG1vcmUgY2FjaGUgYmVoYXZpb3JzLCB1cGRhdGUgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGFuZCBzcGVjaWZ5IGFsbCBvZiB0aGUgY2FjaGUgYmVoYXZpb3JzIHRoYXQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiB0aGUgdXBkYXRlZCBkaXN0cmlidXRpb24uXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FjaGUgYmVoYXZpb3JzLCBzZWUgW0NhY2hlIEJlaGF2aW9yIFNldHRpbmdzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc0NhY2hlQmVoYXZpb3IpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWNoZUJlaGF2aW9yIHtcbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250cm9scyB3aGljaCBIVFRQIG1ldGhvZHMgQ2xvdWRGcm9udCBwcm9jZXNzZXMgYW5kIGZvcndhcmRzIHRvIHlvdXIgQW1hem9uIFMzIGJ1Y2tldCBvciB5b3VyIGN1c3RvbSBvcmlnaW4uIFRoZXJlIGFyZSB0aHJlZSBjaG9pY2VzOlxuICogICArICBDbG91ZEZyb250IGZvcndhcmRzIG9ubHkgYGBHRVRgYCBhbmQgYGBIRUFEYGAgcmVxdWVzdHMuXG4gKiAgICsgIENsb3VkRnJvbnQgZm9yd2FyZHMgb25seSBgYEdFVGBgLCBgYEhFQURgYCwgYW5kIGBgT1BUSU9OU2BgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGZvcndhcmRzIGBgR0VULCBIRUFELCBPUFRJT05TLCBQVVQsIFBBVENILCBQT1NUYGAsIGFuZCBgYERFTEVURWBgIHJlcXVlc3RzLlxuICogICBcbiAqICBJZiB5b3UgcGljayB0aGUgdGhpcmQgY2hvaWNlLCB5b3UgbWF5IG5lZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHlvdXIgQW1hem9uIFMzIGJ1Y2tldCBvciB0byB5b3VyIGN1c3RvbSBvcmlnaW4gc28gdXNlcnMgY2FuJ3QgcGVyZm9ybSBvcGVyYXRpb25zIHRoYXQgeW91IGRvbid0IHdhbnQgdGhlbSB0by4gRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBub3Qgd2FudCB1c2VycyB0byBoYXZlIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBvYmplY3RzIGZyb20geW91ciBvcmlnaW4uXG4gKi9cbkFsbG93ZWRNZXRob2RzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjYWNoZSBwb2xpY3kgdGhhdCBpcyBhdHRhY2hlZCB0byB0aGlzIGNhY2hlIGJlaGF2aW9yLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBgYENhY2hlQmVoYXZpb3JgYCBtdXN0IGluY2x1ZGUgZWl0aGVyIGEgYGBDYWNoZVBvbGljeUlkYGAgb3IgYGBGb3J3YXJkZWRWYWx1ZXNgYC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGBgQ2FjaGVQb2xpY3lJZGBgLlxuICovXG5DYWNoZVBvbGljeUlkPzogc3RyaW5nXG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hldGhlciBDbG91ZEZyb250IGNhY2hlcyB0aGUgcmVzcG9uc2UgdG8gcmVxdWVzdHMgdXNpbmcgdGhlIHNwZWNpZmllZCBIVFRQIG1ldGhvZHMuIFRoZXJlIGFyZSB0d28gY2hvaWNlczpcbiAqICAgKyAgQ2xvdWRGcm9udCBjYWNoZXMgcmVzcG9uc2VzIHRvIGBgR0VUYGAgYW5kIGBgSEVBRGBgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGNhY2hlcyByZXNwb25zZXMgdG8gYGBHRVRgYCwgYGBIRUFEYGAsIGFuZCBgYE9QVElPTlNgYCByZXF1ZXN0cy5cbiAqICAgXG4gKiAgSWYgeW91IHBpY2sgdGhlIHNlY29uZCBjaG9pY2UgZm9yIHlvdXIgQW1hem9uIFMzIE9yaWdpbiwgeW91IG1heSBuZWVkIHRvIGZvcndhcmQgQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QsIEFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycywgYW5kIE9yaWdpbiBoZWFkZXJzIGZvciB0aGUgcmVzcG9uc2VzIHRvIGJlIGNhY2hlZCBjb3JyZWN0bHkuXG4gKi9cbkNhY2hlZE1ldGhvZHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gYXV0b21hdGljYWxseSBjb21wcmVzcyBjZXJ0YWluIGZpbGVzIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yLiBJZiBzbywgc3BlY2lmeSB0cnVlOyBpZiBub3QsIHNwZWNpZnkgZmFsc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpbmcgQ29tcHJlc3NlZCBGaWxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1NlcnZpbmdDb21wcmVzc2VkRmlsZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Db21wcmVzcz86IGJvb2xlYW5cbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIHRoZSBgYERlZmF1bHRUVExgYCBmaWVsZCBpbiBhIGNhY2hlIHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgZGVmYXVsdCBhbW91bnQgb2YgdGltZSB0aGF0IHlvdSB3YW50IG9iamVjdHMgdG8gc3RheSBpbiBDbG91ZEZyb250IGNhY2hlcyBiZWZvcmUgQ2xvdWRGcm9udCBmb3J3YXJkcyBhbm90aGVyIHJlcXVlc3QgdG8geW91ciBvcmlnaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkLiBUaGUgdmFsdWUgdGhhdCB5b3Ugc3BlY2lmeSBhcHBsaWVzIG9ubHkgd2hlbiB5b3VyIG9yaWdpbiBkb2VzIG5vdCBhZGQgSFRUUCBoZWFkZXJzIHN1Y2ggYXMgYGBDYWNoZS1Db250cm9sIG1heC1hZ2VgYCwgYGBDYWNoZS1Db250cm9sIHMtbWF4YWdlYGAsIGFuZCBgYEV4cGlyZXNgYCB0byBvYmplY3RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNYW5hZ2luZyBIb3cgTG9uZyBDb250ZW50IFN0YXlzIGluIGFuIEVkZ2UgQ2FjaGUgKEV4cGlyYXRpb24pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkRlZmF1bHRUVEw/OiBudW1iZXJcbi8qKlxuICogVGhlIHZhbHVlIG9mIGBgSURgYCBmb3IgdGhlIGZpZWxkLWxldmVsIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gdXNlIGZvciBlbmNyeXB0aW5nIHNwZWNpZmljIGZpZWxkcyBvZiBkYXRhIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yLlxuICovXG5GaWVsZExldmVsRW5jcnlwdGlvbklkPzogc3RyaW5nXG5Gb3J3YXJkZWRWYWx1ZXM/OiBGb3J3YXJkZWRWYWx1ZXNcbi8qKlxuICogQSBsaXN0IG9mIENsb3VkRnJvbnQgZnVuY3Rpb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlIGJlaGF2aW9yLiBDbG91ZEZyb250IGZ1bmN0aW9ucyBtdXN0IGJlIHB1Ymxpc2hlZCB0byB0aGUgYGBMSVZFYGAgc3RhZ2UgdG8gYXNzb2NpYXRlIHRoZW0gd2l0aCBhIGNhY2hlIGJlaGF2aW9yLlxuICovXG5GdW5jdGlvbkFzc29jaWF0aW9ucz86IEZ1bmN0aW9uQXNzb2NpYXRpb25bXVxuR3JwY0NvbmZpZz86IEdycGNDb25maWdcbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgTGFtYmRhQEVkZ2UgZnVuY3Rpb24gYXNzb2NpYXRpb25zIGZvciBhIGNhY2hlIGJlaGF2aW9yLlxuICovXG5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9ucz86IExhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25bXVxuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIGBgTWF4VFRMYGAgZmllbGQgaW4gYSBjYWNoZSBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdGhhdCB5b3Ugd2FudCBvYmplY3RzIHRvIHN0YXkgaW4gQ2xvdWRGcm9udCBjYWNoZXMgYmVmb3JlIENsb3VkRnJvbnQgZm9yd2FyZHMgYW5vdGhlciByZXF1ZXN0IHRvIHlvdXIgb3JpZ2luIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBvYmplY3QgaGFzIGJlZW4gdXBkYXRlZC4gVGhlIHZhbHVlIHRoYXQgeW91IHNwZWNpZnkgYXBwbGllcyBvbmx5IHdoZW4geW91ciBvcmlnaW4gYWRkcyBIVFRQIGhlYWRlcnMgc3VjaCBhcyBgYENhY2hlLUNvbnRyb2wgbWF4LWFnZWBgLCBgYENhY2hlLUNvbnRyb2wgcy1tYXhhZ2VgYCwgYW5kIGBgRXhwaXJlc2BgIHRvIG9iamVjdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIEhvdyBMb25nIENvbnRlbnQgU3RheXMgaW4gYW4gRWRnZSBDYWNoZSAoRXhwaXJhdGlvbildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTWF4VFRMPzogbnVtYmVyXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB0aGUgYGBNaW5UVExgYCBmaWVsZCBpbiBhIGNhY2hlIHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZSB0aGF0IHlvdSB3YW50IG9iamVjdHMgdG8gc3RheSBpbiBDbG91ZEZyb250IGNhY2hlcyBiZWZvcmUgQ2xvdWRGcm9udCBmb3J3YXJkcyBhbm90aGVyIHJlcXVlc3QgdG8geW91ciBvcmlnaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNYW5hZ2luZyBIb3cgTG9uZyBDb250ZW50IFN0YXlzIGluIGFuIEVkZ2UgQ2FjaGUgKEV4cGlyYXRpb24pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgWW91IG11c3Qgc3BlY2lmeSBgYDBgYCBmb3IgYGBNaW5UVExgYCBpZiB5b3UgY29uZmlndXJlIENsb3VkRnJvbnQgdG8gZm9yd2FyZCBhbGwgaGVhZGVycyB0byB5b3VyIG9yaWdpbiAodW5kZXIgYGBIZWFkZXJzYGAsIGlmIHlvdSBzcGVjaWZ5IGBgMWBgIGZvciBgYFF1YW50aXR5YGAgYW5kIGBgKmBgIGZvciBgYE5hbWVgYCkuXG4gKi9cbk1pblRUTD86IG51bWJlclxuLyoqXG4gKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIG9yaWdpbiByZXF1ZXN0IHBvbGljeSB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoaXMgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblJlcXVlc3RQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcGF0dGVybiAoZm9yIGV4YW1wbGUsIGBgaW1hZ2VzLyouanBnYGApIHRoYXQgc3BlY2lmaWVzIHdoaWNoIHJlcXVlc3RzIHRvIGFwcGx5IHRoZSBiZWhhdmlvciB0by4gV2hlbiBDbG91ZEZyb250IHJlY2VpdmVzIGEgdmlld2VyIHJlcXVlc3QsIHRoZSByZXF1ZXN0ZWQgcGF0aCBpcyBjb21wYXJlZCB3aXRoIHBhdGggcGF0dGVybnMgaW4gdGhlIG9yZGVyIGluIHdoaWNoIGNhY2hlIGJlaGF2aW9ycyBhcmUgbGlzdGVkIGluIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgIFlvdSBjYW4gb3B0aW9uYWxseSBpbmNsdWRlIGEgc2xhc2ggKGBgL2BgKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoIHBhdHRlcm4uIEZvciBleGFtcGxlLCBgYC9pbWFnZXMvKi5qcGdgYC4gQ2xvdWRGcm9udCBiZWhhdmlvciBpcyB0aGUgc2FtZSB3aXRoIG9yIHdpdGhvdXQgdGhlIGxlYWRpbmcgYGAvYGAuXG4gKiAgIFRoZSBwYXRoIHBhdHRlcm4gZm9yIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yIGlzIGBgKmBgIGFuZCBjYW5ub3QgYmUgY2hhbmdlZC4gSWYgdGhlIHJlcXVlc3QgZm9yIGFuIG9iamVjdCBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0aCBwYXR0ZXJuIGZvciBhbnkgY2FjaGUgYmVoYXZpb3JzLCBDbG91ZEZyb250IGFwcGxpZXMgdGhlIGJlaGF2aW9yIGluIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1BhdGggUGF0dGVybl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNQYXRoUGF0dGVybikgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5QYXRoUGF0dGVybjogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcmVhbC10aW1lIGxvZyBjb25maWd1cmF0aW9uIHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhpcyBjYWNoZSBiZWhhdmlvci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVhbC10aW1lIGxvZ3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9yZWFsLXRpbWUtbG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblJlYWx0aW1lTG9nQ29uZmlnQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIGZvciBhIHJlc3BvbnNlIGhlYWRlcnMgcG9saWN5LlxuICovXG5SZXNwb25zZUhlYWRlcnNQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB5b3Ugd2FudCB0byBkaXN0cmlidXRlIG1lZGlhIGZpbGVzIGluIHRoZSBNaWNyb3NvZnQgU21vb3RoIFN0cmVhbWluZyBmb3JtYXQgdXNpbmcgdGhlIG9yaWdpbiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlIGJlaGF2aW9yLiBJZiBzbywgc3BlY2lmeSBgYHRydWVgYDsgaWYgbm90LCBzcGVjaWZ5IGBgZmFsc2VgYC4gSWYgeW91IHNwZWNpZnkgYGB0cnVlYGAgZm9yIGBgU21vb3RoU3RyZWFtaW5nYGAsIHlvdSBjYW4gc3RpbGwgZGlzdHJpYnV0ZSBvdGhlciBjb250ZW50IHVzaW5nIHRoaXMgY2FjaGUgYmVoYXZpb3IgaWYgdGhlIGNvbnRlbnQgbWF0Y2hlcyB0aGUgdmFsdWUgb2YgYGBQYXRoUGF0dGVybmBgLlxuICovXG5TbW9vdGhTdHJlYW1pbmc/OiBib29sZWFuXG4vKipcbiAqIFRoZSB2YWx1ZSBvZiBgYElEYGAgZm9yIHRoZSBvcmlnaW4gdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHJvdXRlIHJlcXVlc3RzIHRvIHdoZW4gdGhleSBtYXRjaCB0aGlzIGNhY2hlIGJlaGF2aW9yLlxuICovXG5UYXJnZXRPcmlnaW5JZDogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBrZXkgZ3JvdXBzIHRoYXQgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIHZhbGlkYXRlIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzLlxuICogIFdoZW4gYSBjYWNoZSBiZWhhdmlvciBjb250YWlucyB0cnVzdGVkIGtleSBncm91cHMsIENsb3VkRnJvbnQgcmVxdWlyZXMgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgZm9yIGFsbCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSBjYWNoZSBiZWhhdmlvci4gVGhlIFVSTHMgb3IgY29va2llcyBtdXN0IGJlIHNpZ25lZCB3aXRoIGEgcHJpdmF0ZSBrZXkgd2hvc2UgY29ycmVzcG9uZGluZyBwdWJsaWMga2V5IGlzIGluIHRoZSBrZXkgZ3JvdXAuIFRoZSBzaWduZWQgVVJMIG9yIGNvb2tpZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBwdWJsaWMga2V5IENsb3VkRnJvbnQgc2hvdWxkIHVzZSB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBwcml2YXRlIGNvbnRlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Qcml2YXRlQ29udGVudC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblRydXN0ZWRLZXlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXZSByZWNvbW1lbmQgdXNpbmcgYGBUcnVzdGVkS2V5R3JvdXBzYGAgaW5zdGVhZCBvZiBgYFRydXN0ZWRTaWduZXJzYGAuXG4gKiAgIEEgbGlzdCBvZiBBV1MtYWNjb3VudCBJRHMgd2hvc2UgcHVibGljIGtleXMgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIHZhbGlkYXRlIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzLlxuICogIFdoZW4gYSBjYWNoZSBiZWhhdmlvciBjb250YWlucyB0cnVzdGVkIHNpZ25lcnMsIENsb3VkRnJvbnQgcmVxdWlyZXMgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgZm9yIGFsbCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSBjYWNoZSBiZWhhdmlvci4gVGhlIFVSTHMgb3IgY29va2llcyBtdXN0IGJlIHNpZ25lZCB3aXRoIHRoZSBwcml2YXRlIGtleSBvZiBhIENsb3VkRnJvbnQga2V5IHBhaXIgaW4gdGhlIHRydXN0ZWQgc2lnbmVyJ3MgQVdTLWFjY291bnQuIFRoZSBzaWduZWQgVVJMIG9yIGNvb2tpZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBwdWJsaWMga2V5IENsb3VkRnJvbnQgc2hvdWxkIHVzZSB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBwcml2YXRlIGNvbnRlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Qcml2YXRlQ29udGVudC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblRydXN0ZWRTaWduZXJzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIHByb3RvY29sIHRoYXQgdmlld2VycyBjYW4gdXNlIHRvIGFjY2VzcyB0aGUgZmlsZXMgaW4gdGhlIG9yaWdpbiBzcGVjaWZpZWQgYnkgYGBUYXJnZXRPcmlnaW5JZGBgIHdoZW4gYSByZXF1ZXN0IG1hdGNoZXMgdGhlIHBhdGggcGF0dGVybiBpbiBgYFBhdGhQYXR0ZXJuYGAuIFlvdSBjYW4gc3BlY2lmeSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6XG4gKiAgICsgIGBgYWxsb3ctYWxsYGA6IFZpZXdlcnMgY2FuIHVzZSBIVFRQIG9yIEhUVFBTLlxuICogICArICBgYHJlZGlyZWN0LXRvLWh0dHBzYGA6IElmIGEgdmlld2VyIHN1Ym1pdHMgYW4gSFRUUCByZXF1ZXN0LCBDbG91ZEZyb250IHJldHVybnMgYW4gSFRUUCBzdGF0dXMgY29kZSBvZiAzMDEgKE1vdmVkIFBlcm1hbmVudGx5KSB0byB0aGUgdmlld2VyIGFsb25nIHdpdGggdGhlIEhUVFBTIFVSTC4gVGhlIHZpZXdlciB0aGVuIHJlc3VibWl0cyB0aGUgcmVxdWVzdCB1c2luZyB0aGUgbmV3IFVSTC5cbiAqICAgKyAgYGBodHRwcy1vbmx5YGA6IElmIGEgdmlld2VyIHNlbmRzIGFuIEhUVFAgcmVxdWVzdCwgQ2xvdWRGcm9udCByZXR1cm5zIGFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAzIChGb3JiaWRkZW4pLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCByZXF1aXJpbmcgdGhlIEhUVFBTIHByb3RvY29sLCBzZWUgW1JlcXVpcmluZyBIVFRQUyBCZXR3ZWVuIFZpZXdlcnMgYW5kIENsb3VkRnJvbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1odHRwcy12aWV3ZXJzLXRvLWNsb3VkZnJvbnQuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUaGUgb25seSB3YXkgdG8gZ3VhcmFudGVlIHRoYXQgdmlld2VycyByZXRyaWV2ZSBhbiBvYmplY3QgdGhhdCB3YXMgZmV0Y2hlZCBmcm9tIHRoZSBvcmlnaW4gdXNpbmcgSFRUUFMgaXMgbmV2ZXIgdG8gdXNlIGFueSBvdGhlciBwcm90b2NvbCB0byBmZXRjaCB0aGUgb2JqZWN0LiBJZiB5b3UgaGF2ZSByZWNlbnRseSBjaGFuZ2VkIGZyb20gSFRUUCB0byBIVFRQUywgd2UgcmVjb21tZW5kIHRoYXQgeW91IGNsZWFyIHlvdXIgb2JqZWN0cycgY2FjaGUgYmVjYXVzZSBjYWNoZWQgb2JqZWN0cyBhcmUgcHJvdG9jb2wgYWdub3N0aWMuIFRoYXQgbWVhbnMgdGhhdCBhbiBlZGdlIGxvY2F0aW9uIHdpbGwgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHRoZSBjYWNoZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGN1cnJlbnQgcmVxdWVzdCBwcm90b2NvbCBtYXRjaGVzIHRoZSBwcm90b2NvbCB1c2VkIHByZXZpb3VzbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIENhY2hlIEV4cGlyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuVmlld2VyUHJvdG9jb2xQb2xpY3k6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBjYWNoZSBwb2xpY3kgb3IgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbV29ya2luZyB3aXRoIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvd29ya2luZy13aXRoLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIHZhbHVlcyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIHZhbHVlcyB0byB0aGUgb3JpZ2luIGJ1dCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBgYENhY2hlQmVoYXZpb3JgYCBtdXN0IGluY2x1ZGUgZWl0aGVyIGEgYGBDYWNoZVBvbGljeUlkYGAgb3IgYGBGb3J3YXJkZWRWYWx1ZXNgYC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGBgQ2FjaGVQb2xpY3lJZGBgLlxuICogIEEgY29tcGxleCB0eXBlIHRoYXQgc3BlY2lmaWVzIGhvdyBDbG91ZEZyb250IGhhbmRsZXMgcXVlcnkgc3RyaW5ncywgY29va2llcywgYW5kIEhUVFAgaGVhZGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3J3YXJkZWRWYWx1ZXMge1xuQ29va2llcz86IENvb2tpZXNcbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBoZWFkZXJzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIGhlYWRlcnMgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBBIGNvbXBsZXggdHlwZSB0aGF0IHNwZWNpZmllcyB0aGUgYGBIZWFkZXJzYGAsIGlmIGFueSwgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGZvcndhcmQgdG8gdGhlIG9yaWdpbiBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvciAod2hpdGVsaXN0ZWQgaGVhZGVycykuIEZvciB0aGUgaGVhZGVycyB0aGF0IHlvdSBzcGVjaWZ5LCBDbG91ZEZyb250IGFsc28gY2FjaGVzIHNlcGFyYXRlIHZlcnNpb25zIG9mIGEgc3BlY2lmaWVkIG9iamVjdCB0aGF0IGlzIGJhc2VkIG9uIHRoZSBoZWFkZXIgdmFsdWVzIGluIHZpZXdlciByZXF1ZXN0cy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDYWNoaW5nIENvbnRlbnQgQmFzZWQgb24gUmVxdWVzdCBIZWFkZXJzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvaGVhZGVyLWNhY2hpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5IZWFkZXJzPzogc3RyaW5nW11cbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBxdWVyeSBzdHJpbmdzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIHF1ZXJ5IHN0cmluZ3MgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJbmRpY2F0ZXMgd2hldGhlciB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGZvcndhcmQgcXVlcnkgc3RyaW5ncyB0byB0aGUgb3JpZ2luIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FjaGUgYmVoYXZpb3IgYW5kIGNhY2hlIGJhc2VkIG9uIHRoZSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycy4gQ2xvdWRGcm9udCBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBgYFF1ZXJ5U3RyaW5nYGAgYW5kIG9uIHRoZSB2YWx1ZXMgdGhhdCB5b3Ugc3BlY2lmeSBmb3IgYGBRdWVyeVN0cmluZ0NhY2hlS2V5c2BgLCBpZiBhbnk6XG4gKiAgSWYgeW91IHNwZWNpZnkgdHJ1ZSBmb3IgYGBRdWVyeVN0cmluZ2BgIGFuZCB5b3UgZG9uJ3Qgc3BlY2lmeSBhbnkgdmFsdWVzIGZvciBgYFF1ZXJ5U3RyaW5nQ2FjaGVLZXlzYGAsIENsb3VkRnJvbnQgZm9yd2FyZHMgYWxsIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHRoZSBvcmlnaW4gYW5kIGNhY2hlcyBiYXNlZCBvbiBhbGwgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuIERlcGVuZGluZyBvbiBob3cgbWFueSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBhbmQgdmFsdWVzIHlvdSBoYXZlLCB0aGlzIGNhbiBhZHZlcnNlbHkgYWZmZWN0IHBlcmZvcm1hbmNlIGJlY2F1c2UgQ2xvdWRGcm9udCBtdXN0IGZvcndhcmQgbW9yZSByZXF1ZXN0cyB0byB0aGUgb3JpZ2luLlxuICogIElmIHlvdSBzcGVjaWZ5IHRydWUgZm9yIGBgUXVlcnlTdHJpbmdgYCBhbmQgeW91IHNwZWNpZnkgb25lIG9yIG1vcmUgdmFsdWVzIGZvciBgYFF1ZXJ5U3RyaW5nQ2FjaGVLZXlzYGAsIENsb3VkRnJvbnQgZm9yd2FyZHMgYWxsIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHRoZSBvcmlnaW4sIGJ1dCBpdCBvbmx5IGNhY2hlcyBiYXNlZCBvbiB0aGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgdGhhdCB5b3Ugc3BlY2lmeS5cbiAqICBJZiB5b3Ugc3BlY2lmeSBmYWxzZSBmb3IgYGBRdWVyeVN0cmluZ2BgLCBDbG91ZEZyb250IGRvZXNuJ3QgZm9yd2FyZCBhbnkgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgdG8gdGhlIG9yaWdpbiwgYW5kIGRvZXNuJ3QgY2FjaGUgYmFzZWQgb24gcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ29uZmlndXJpbmcgQ2xvdWRGcm9udCB0byBDYWNoZSBCYXNlZCBvbiBRdWVyeSBTdHJpbmcgUGFyYW1ldGVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1F1ZXJ5U3RyaW5nUGFyYW1ldGVycy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblF1ZXJ5U3RyaW5nOiBib29sZWFuXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgcXVlcnkgc3RyaW5ncyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBxdWVyeSBzdHJpbmdzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgY2FjaGluZyBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvci5cbiAqL1xuUXVlcnlTdHJpbmdDYWNoZUtleXM/OiBzdHJpbmdbXVxufVxuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBjYWNoZSBwb2xpY3kgb3IgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC5cbiAqICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGNvb2tpZXMgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIHNlbmQgY29va2llcyB0byB0aGUgb3JpZ2luIGJ1dCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEEgY29tcGxleCB0eXBlIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBmb3J3YXJkIGNvb2tpZXMgdG8gdGhlIG9yaWdpbiBhbmQsIGlmIHNvLCB3aGljaCBvbmVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBmb3J3YXJkaW5nIGNvb2tpZXMgdG8gdGhlIG9yaWdpbiwgc2VlIFtIb3cgQ2xvdWRGcm9udCBGb3J3YXJkcywgQ2FjaGVzLCBhbmQgTG9ncyBDb29raWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvQ29va2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29va2llcyB7XG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgY29va2llcyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBjb29raWVzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgU3BlY2lmaWVzIHdoaWNoIGNvb2tpZXMgdG8gZm9yd2FyZCB0byB0aGUgb3JpZ2luIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yOiBhbGwsIG5vbmUsIG9yIHRoZSBsaXN0IG9mIGNvb2tpZXMgc3BlY2lmaWVkIGluIHRoZSBgYFdoaXRlbGlzdGVkTmFtZXNgYCBjb21wbGV4IHR5cGUuXG4gKiAgQW1hem9uIFMzIGRvZXNuJ3QgcHJvY2VzcyBjb29raWVzLiBXaGVuIHRoZSBjYWNoZSBiZWhhdmlvciBpcyBmb3J3YXJkaW5nIHJlcXVlc3RzIHRvIGFuIEFtYXpvbiBTMyBvcmlnaW4sIHNwZWNpZnkgbm9uZSBmb3IgdGhlIGBgRm9yd2FyZGBgIGVsZW1lbnQuXG4gKi9cbkZvcndhcmQ6IHN0cmluZ1xuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBjYWNoZSBwb2xpY3kgb3IgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC5cbiAqICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGNvb2tpZXMgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIHNlbmQgY29va2llcyB0byB0aGUgb3JpZ2luIGJ1dCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFJlcXVpcmVkIGlmIHlvdSBzcGVjaWZ5IGBgd2hpdGVsaXN0YGAgZm9yIHRoZSB2YWx1ZSBvZiBgYEZvcndhcmRgYC4gQSBjb21wbGV4IHR5cGUgdGhhdCBzcGVjaWZpZXMgaG93IG1hbnkgZGlmZmVyZW50IGNvb2tpZXMgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBmb3J3YXJkIHRvIHRoZSBvcmlnaW4gZm9yIHRoaXMgY2FjaGUgYmVoYXZpb3IgYW5kLCBpZiB5b3Ugd2FudCB0byBmb3J3YXJkIHNlbGVjdGVkIGNvb2tpZXMsIHRoZSBuYW1lcyBvZiB0aG9zZSBjb29raWVzLlxuICogIElmIHlvdSBzcGVjaWZ5IGBgYWxsYGAgb3IgYGBub25lYGAgZm9yIHRoZSB2YWx1ZSBvZiBgYEZvcndhcmRgYCwgb21pdCBgYFdoaXRlbGlzdGVkTmFtZXNgYC4gSWYgeW91IGNoYW5nZSB0aGUgdmFsdWUgb2YgYGBGb3J3YXJkYGAgZnJvbSBgYHdoaXRlbGlzdGBgIHRvIGBgYWxsYGAgb3IgYGBub25lYGAgYW5kIHlvdSBkb24ndCBkZWxldGUgdGhlIGBgV2hpdGVsaXN0ZWROYW1lc2BgIGVsZW1lbnQgYW5kIGl0cyBjaGlsZCBlbGVtZW50cywgQ2xvdWRGcm9udCBkZWxldGVzIHRoZW0gYXV0b21hdGljYWxseS5cbiAqICBGb3IgdGhlIGN1cnJlbnQgbGltaXQgb24gdGhlIG51bWJlciBvZiBjb29raWUgbmFtZXMgdGhhdCB5b3UgY2FuIHdoaXRlbGlzdCBmb3IgZWFjaCBjYWNoZSBiZWhhdmlvciwgc2VlIFtDbG91ZEZyb250IExpbWl0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dlbmVyYWwvbGF0ZXN0L2dyL3hyZWZhd3Nfc2VydmljZV9saW1pdHMuaHRtbCNsaW1pdHNfY2xvdWRmcm9udCkgaW4gdGhlICpHZW5lcmFsIFJlZmVyZW5jZSouXG4gKi9cbldoaXRlbGlzdGVkTmFtZXM/OiBzdHJpbmdbXVxufVxuLyoqXG4gKiBBIENsb3VkRnJvbnQgZnVuY3Rpb24gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBiZWhhdmlvciBpbiBhIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQXNzb2NpYXRpb24ge1xuLyoqXG4gKiBUaGUgZXZlbnQgdHlwZSBvZiB0aGUgZnVuY3Rpb24sIGVpdGhlciBgYHZpZXdlci1yZXF1ZXN0YGAgb3IgYGB2aWV3ZXItcmVzcG9uc2VgYC4gWW91IGNhbm5vdCB1c2Ugb3JpZ2luLWZhY2luZyBldmVudCB0eXBlcyAoYGBvcmlnaW4tcmVxdWVzdGBgIGFuZCBgYG9yaWdpbi1yZXNwb25zZWBgKSB3aXRoIGEgQ2xvdWRGcm9udCBmdW5jdGlvbi5cbiAqL1xuRXZlbnRUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbkZ1bmN0aW9uQVJOPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBnUlBDIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgY2FjaGUgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JwY0NvbmZpZyB7XG4vKipcbiAqIEVuYWJsZXMgeW91ciBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0byByZWNlaXZlIGdSUEMgcmVxdWVzdHMgYW5kIHRvIHByb3h5IHRoZW0gZGlyZWN0bHkgdG8geW91ciBvcmlnaW5zLlxuICovXG5FbmFibGVkOiBib29sZWFuXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgYSBMYW1iZGFARWRnZSBmdW5jdGlvbiBhc3NvY2lhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uIHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBldmVudCB0eXBlIHRoYXQgdHJpZ2dlcnMgYSBMYW1iZGFARWRnZSBmdW5jdGlvbiBpbnZvY2F0aW9uLiBZb3UgY2FuIHNwZWNpZnkgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gKiAgICsgIGBgdmlld2VyLXJlcXVlc3RgYDogVGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIHdoZW4gQ2xvdWRGcm9udCByZWNlaXZlcyBhIHJlcXVlc3QgZnJvbSBhIHZpZXdlciBhbmQgYmVmb3JlIGl0IGNoZWNrcyB0byBzZWUgd2hldGhlciB0aGUgcmVxdWVzdGVkIG9iamVjdCBpcyBpbiB0aGUgZWRnZSBjYWNoZS5cbiAqICAgKyAgYGBvcmlnaW4tcmVxdWVzdGBgOiBUaGUgZnVuY3Rpb24gZXhlY3V0ZXMgb25seSB3aGVuIENsb3VkRnJvbnQgc2VuZHMgYSByZXF1ZXN0IHRvIHlvdXIgb3JpZ2luLiBXaGVuIHRoZSByZXF1ZXN0ZWQgb2JqZWN0IGlzIGluIHRoZSBlZGdlIGNhY2hlLCB0aGUgZnVuY3Rpb24gZG9lc24ndCBleGVjdXRlLlxuICogICArICBgYG9yaWdpbi1yZXNwb25zZWBgOiBUaGUgZnVuY3Rpb24gZXhlY3V0ZXMgYWZ0ZXIgQ2xvdWRGcm9udCByZWNlaXZlcyBhIHJlc3BvbnNlIGZyb20gdGhlIG9yaWdpbiBhbmQgYmVmb3JlIGl0IGNhY2hlcyB0aGUgb2JqZWN0IGluIHRoZSByZXNwb25zZS4gV2hlbiB0aGUgcmVxdWVzdGVkIG9iamVjdCBpcyBpbiB0aGUgZWRnZSBjYWNoZSwgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgZXhlY3V0ZS5cbiAqICAgKyAgYGB2aWV3ZXItcmVzcG9uc2VgYDogVGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGJlZm9yZSBDbG91ZEZyb250IHJldHVybnMgdGhlIHJlcXVlc3RlZCBvYmplY3QgdG8gdGhlIHZpZXdlci4gVGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgb2JqZWN0IHdhcyBhbHJlYWR5IGluIHRoZSBlZGdlIGNhY2hlLlxuICogIElmIHRoZSBvcmlnaW4gcmV0dXJucyBhbiBIVFRQIHN0YXR1cyBjb2RlIG90aGVyIHRoYW4gSFRUUCAyMDAgKE9LKSwgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgZXhlY3V0ZS5cbiAqL1xuRXZlbnRUeXBlPzogc3RyaW5nXG4vKipcbiAqIEEgZmxhZyB0aGF0IGFsbG93cyBhIExhbWJkYUBFZGdlIGZ1bmN0aW9uIHRvIGhhdmUgcmVhZCBhY2Nlc3MgdG8gdGhlIGJvZHkgY29udGVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQWNjZXNzaW5nIHRoZSBSZXF1ZXN0IEJvZHkgYnkgQ2hvb3NpbmcgdGhlIEluY2x1ZGUgQm9keSBPcHRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9sYW1iZGEtaW5jbHVkZS1ib2R5LWFjY2Vzcy5odG1sKSBpbiB0aGUgQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlLlxuICovXG5JbmNsdWRlQm9keT86IGJvb2xlYW5cbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgTGFtYmRhQEVkZ2UgZnVuY3Rpb24uIFlvdSBtdXN0IHNwZWNpZnkgdGhlIEFSTiBvZiBhIGZ1bmN0aW9uIHZlcnNpb247IHlvdSBjYW4ndCBzcGVjaWZ5IGFuIGFsaWFzIG9yICRMQVRFU1QuXG4gKi9cbkxhbWJkYUZ1bmN0aW9uQVJOPzogc3RyaW5nXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHM6XG4gKiAgICsgIFdoZXRoZXIgQ2xvdWRGcm9udCByZXBsYWNlcyBIVFRQIHN0YXR1cyBjb2RlcyBpbiB0aGUgNHh4IGFuZCA1eHggcmFuZ2Ugd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZXMgYmVmb3JlIHJldHVybmluZyB0aGUgcmVzcG9uc2UgdG8gdGhlIHZpZXdlci5cbiAqICAgKyAgSG93IGxvbmcgQ2xvdWRGcm9udCBjYWNoZXMgSFRUUCBzdGF0dXMgY29kZXMgaW4gdGhlIDR4eCBhbmQgNXh4IHJhbmdlLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjdXN0b20gZXJyb3IgcGFnZXMsIHNlZSBbQ3VzdG9taXppbmcgRXJyb3IgUmVzcG9uc2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY3VzdG9tLWVycm9yLXBhZ2VzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21FcnJvclJlc3BvbnNlIHtcbi8qKlxuICogVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBjYWNoZSB0aGUgSFRUUCBzdGF0dXMgY29kZSBzcGVjaWZpZWQgaW4gYGBFcnJvckNvZGVgYC4gV2hlbiB0aGlzIHRpbWUgcGVyaW9kIGhhcyBlbGFwc2VkLCBDbG91ZEZyb250IHF1ZXJpZXMgeW91ciBvcmlnaW4gdG8gc2VlIHdoZXRoZXIgdGhlIHByb2JsZW0gdGhhdCBjYXVzZWQgdGhlIGVycm9yIGhhcyBiZWVuIHJlc29sdmVkIGFuZCB0aGUgcmVxdWVzdGVkIG9iamVjdCBpcyBub3cgYXZhaWxhYmxlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0N1c3RvbWl6aW5nIEVycm9yIFJlc3BvbnNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2N1c3RvbS1lcnJvci1wYWdlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkVycm9yQ2FjaGluZ01pblRUTD86IG51bWJlclxuLyoqXG4gKiBUaGUgSFRUUCBzdGF0dXMgY29kZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gc3BlY2lmeSBhIGN1c3RvbSBlcnJvciBwYWdlIGFuZC9vciBhIGNhY2hpbmcgZHVyYXRpb24uXG4gKi9cbkVycm9yQ29kZTogbnVtYmVyXG4vKipcbiAqIFRoZSBIVFRQIHN0YXR1cyBjb2RlIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByZXR1cm4gdG8gdGhlIHZpZXdlciBhbG9uZyB3aXRoIHRoZSBjdXN0b20gZXJyb3IgcGFnZS4gVGhlcmUgYXJlIGEgdmFyaWV0eSBvZiByZWFzb25zIHRoYXQgeW91IG1pZ2h0IHdhbnQgQ2xvdWRGcm9udCB0byByZXR1cm4gYSBzdGF0dXMgY29kZSBkaWZmZXJlbnQgZnJvbSB0aGUgc3RhdHVzIGNvZGUgdGhhdCB5b3VyIG9yaWdpbiByZXR1cm5lZCB0byBDbG91ZEZyb250LCBmb3IgZXhhbXBsZTpcbiAqICAgKyAgU29tZSBJbnRlcm5ldCBkZXZpY2VzIChzb21lIGZpcmV3YWxscyBhbmQgY29ycG9yYXRlIHByb3hpZXMsIGZvciBleGFtcGxlKSBpbnRlcmNlcHQgSFRUUCA0eHggYW5kIDV4eCBhbmQgcHJldmVudCB0aGUgcmVzcG9uc2UgZnJvbSBiZWluZyByZXR1cm5lZCB0byB0aGUgdmlld2VyLiBJZiB5b3Ugc3Vic3RpdHV0ZSBgYDIwMGBgLCB0aGUgcmVzcG9uc2UgdHlwaWNhbGx5IHdvbid0IGJlIGludGVyY2VwdGVkLlxuICogICArICBJZiB5b3UgZG9uJ3QgY2FyZSBhYm91dCBkaXN0aW5ndWlzaGluZyBhbW9uZyBkaWZmZXJlbnQgY2xpZW50IGVycm9ycyBvciBzZXJ2ZXIgZXJyb3JzLCB5b3UgY2FuIHNwZWNpZnkgYGA0MDBgYCBvciBgYDUwMGBgIGFzIHRoZSBgYFJlc3BvbnNlQ29kZWBgIGZvciBhbGwgNHh4IG9yIDV4eCBlcnJvcnMuXG4gKiAgICsgIFlvdSBtaWdodCB3YW50IHRvIHJldHVybiBhIGBgMjAwYGAgc3RhdHVzIGNvZGUgKE9LKSBhbmQgc3RhdGljIHdlYnNpdGUgc28geW91ciBjdXN0b21lcnMgZG9uJ3Qga25vdyB0aGF0IHlvdXIgd2Vic2l0ZSBpcyBkb3duLlxuICogICBcbiAqICBJZiB5b3Ugc3BlY2lmeSBhIHZhbHVlIGZvciBgYFJlc3BvbnNlQ29kZWBgLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBSZXNwb25zZVBhZ2VQYXRoYGAuXG4gKi9cblJlc3BvbnNlQ29kZT86IG51bWJlclxuLyoqXG4gKiBUaGUgcGF0aCB0byB0aGUgY3VzdG9tIGVycm9yIHBhZ2UgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHJldHVybiB0byBhIHZpZXdlciB3aGVuIHlvdXIgb3JpZ2luIHJldHVybnMgdGhlIEhUVFAgc3RhdHVzIGNvZGUgc3BlY2lmaWVkIGJ5IGBgRXJyb3JDb2RlYGAsIGZvciBleGFtcGxlLCBgYC80eHgtZXJyb3JzLzQwMy1mb3JiaWRkZW4uaHRtbGBgLiBJZiB5b3Ugd2FudCB0byBzdG9yZSB5b3VyIG9iamVjdHMgYW5kIHlvdXIgY3VzdG9tIGVycm9yIHBhZ2VzIGluIGRpZmZlcmVudCBsb2NhdGlvbnMsIHlvdXIgZGlzdHJpYnV0aW9uIG11c3QgaW5jbHVkZSBhIGNhY2hlIGJlaGF2aW9yIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gKiAgICsgIFRoZSB2YWx1ZSBvZiBgYFBhdGhQYXR0ZXJuYGAgbWF0Y2hlcyB0aGUgcGF0aCB0byB5b3VyIGN1c3RvbSBlcnJvciBtZXNzYWdlcy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IHNhdmVkIGN1c3RvbSBlcnJvciBwYWdlcyBmb3IgNHh4IGVycm9ycyBpbiBhbiBBbWF6b24gUzMgYnVja2V0IGluIGEgZGlyZWN0b3J5IG5hbWVkIGBgLzR4eC1lcnJvcnNgYC4gWW91ciBkaXN0cmlidXRpb24gbXVzdCBpbmNsdWRlIGEgY2FjaGUgYmVoYXZpb3IgZm9yIHdoaWNoIHRoZSBwYXRoIHBhdHRlcm4gcm91dGVzIHJlcXVlc3RzIGZvciB5b3VyIGN1c3RvbSBlcnJvciBwYWdlcyB0byB0aGF0IGxvY2F0aW9uLCBmb3IgZXhhbXBsZSwgYGAvNHh4LWVycm9ycy8qYGAuXG4gKiAgICsgIFRoZSB2YWx1ZSBvZiBgYFRhcmdldE9yaWdpbklkYGAgc3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgYGBJRGBgIGVsZW1lbnQgZm9yIHRoZSBvcmlnaW4gdGhhdCBjb250YWlucyB5b3VyIGN1c3RvbSBlcnJvciBwYWdlcy5cbiAqICAgXG4gKiAgSWYgeW91IHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBSZXNwb25zZVBhZ2VQYXRoYGAsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSBhIHZhbHVlIGZvciBgYFJlc3BvbnNlQ29kZWBgLlxuICogIFdlIHJlY29tbWVuZCB0aGF0IHlvdSBzdG9yZSBjdXN0b20gZXJyb3IgcGFnZXMgaW4gYW4gQW1hem9uIFMzIGJ1Y2tldC4gSWYgeW91IHN0b3JlIGN1c3RvbSBlcnJvciBwYWdlcyBvbiBhbiBIVFRQIHNlcnZlciBhbmQgdGhlIHNlcnZlciBzdGFydHMgdG8gcmV0dXJuIDV4eCBlcnJvcnMsIENsb3VkRnJvbnQgY2FuJ3QgZ2V0IHRoZSBmaWxlcyB0aGF0IHlvdSB3YW50IHRvIHJldHVybiB0byB2aWV3ZXJzIGJlY2F1c2UgdGhlIG9yaWdpbiBzZXJ2ZXIgaXMgdW5hdmFpbGFibGUuXG4gKi9cblJlc3BvbnNlUGFnZVBhdGg/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHVzZXItZGVmaW5lZCBIVFRQIHNlcnZlciB0aGF0IHNlcnZlcyBhcyB0aGUgb3JpZ2luIGZvciBjb250ZW50IHRoYXQgQ0YgZGlzdHJpYnV0ZXMuXG4gKiAgIFRoaXMgcHJvcGVydHkgaXMgbGVnYWN5LiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIFtPcmlnaW5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLW9yaWdpbi5odG1sKSBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUN1c3RvbU9yaWdpbiB7XG4vKipcbiAqIFRoZSBkb21haW4gbmFtZSBhc3NpZ25lZCB0byB5b3VyIENGIGRpc3RyaWJ1dGlvbi5cbiAqL1xuRE5TTmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSBIVFRQIHBvcnQgdGhhdCBDRiB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi4gU3BlY2lmeSB0aGUgSFRUUCBwb3J0IHRoYXQgdGhlIG9yaWdpbiBsaXN0ZW5zIG9uLlxuICovXG5IVFRQUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgSFRUUFMgcG9ydCB0aGF0IENGIHVzZXMgdG8gY29ubmVjdCB0byB0aGUgb3JpZ2luLiBTcGVjaWZ5IHRoZSBIVFRQUyBwb3J0IHRoYXQgdGhlIG9yaWdpbiBsaXN0ZW5zIG9uLlxuICovXG5IVFRQU1BvcnQ/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwcm90b2NvbCAoSFRUUCBvciBIVFRQUykgdGhhdCBDRiB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi5cbiAqL1xuT3JpZ2luUHJvdG9jb2xQb2xpY3k6IHN0cmluZ1xuLyoqXG4gKiBUaGUgbWluaW11bSBTU0wvVExTIHByb3RvY29sIHZlcnNpb24gdGhhdCBDRiB1c2VzIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIHlvdXIgb3JpZ2luIHNlcnZlciBvdmVyIEhUVFBzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01pbmltdW0gT3JpZ2luIFNTTCBQcm90b2NvbF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5TU0xQcm90b2NvbHMpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luU1NMUHJvdG9jb2xzOiBzdHJpbmdbXVxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGRlc2NyaWJlcyB0aGUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvciBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIGBgQ2FjaGVCZWhhdmlvcmBgIGVsZW1lbnQgb3IgaWYgZmlsZXMgZG9uJ3QgbWF0Y2ggYW55IG9mIHRoZSB2YWx1ZXMgb2YgYGBQYXRoUGF0dGVybmBgIGluIGBgQ2FjaGVCZWhhdmlvcmBgIGVsZW1lbnRzLiBZb3UgbXVzdCBjcmVhdGUgZXhhY3RseSBvbmUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0Q2FjaGVCZWhhdmlvciB7XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hpY2ggSFRUUCBtZXRob2RzIENsb3VkRnJvbnQgcHJvY2Vzc2VzIGFuZCBmb3J3YXJkcyB0byB5b3VyIEFtYXpvbiBTMyBidWNrZXQgb3IgeW91ciBjdXN0b20gb3JpZ2luLiBUaGVyZSBhcmUgdGhyZWUgY2hvaWNlczpcbiAqICAgKyAgQ2xvdWRGcm9udCBmb3J3YXJkcyBvbmx5IGBgR0VUYGAgYW5kIGBgSEVBRGBgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGZvcndhcmRzIG9ubHkgYGBHRVRgYCwgYGBIRUFEYGAsIGFuZCBgYE9QVElPTlNgYCByZXF1ZXN0cy5cbiAqICAgKyAgQ2xvdWRGcm9udCBmb3J3YXJkcyBgYEdFVCwgSEVBRCwgT1BUSU9OUywgUFVULCBQQVRDSCwgUE9TVGBgLCBhbmQgYGBERUxFVEVgYCByZXF1ZXN0cy5cbiAqICAgXG4gKiAgSWYgeW91IHBpY2sgdGhlIHRoaXJkIGNob2ljZSwgeW91IG1heSBuZWVkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB5b3VyIEFtYXpvbiBTMyBidWNrZXQgb3IgdG8geW91ciBjdXN0b20gb3JpZ2luIHNvIHVzZXJzIGNhbid0IHBlcmZvcm0gb3BlcmF0aW9ucyB0aGF0IHlvdSBkb24ndCB3YW50IHRoZW0gdG8uIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgbm90IHdhbnQgdXNlcnMgdG8gaGF2ZSBwZXJtaXNzaW9ucyB0byBkZWxldGUgb2JqZWN0cyBmcm9tIHlvdXIgb3JpZ2luLlxuICovXG5BbGxvd2VkTWV0aG9kcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY2FjaGUgcG9saWN5IHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBBIGBgRGVmYXVsdENhY2hlQmVoYXZpb3JgYCBtdXN0IGluY2x1ZGUgZWl0aGVyIGEgYGBDYWNoZVBvbGljeUlkYGAgb3IgYGBGb3J3YXJkZWRWYWx1ZXNgYC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGBgQ2FjaGVQb2xpY3lJZGBgLlxuICovXG5DYWNoZVBvbGljeUlkPzogc3RyaW5nXG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hldGhlciBDbG91ZEZyb250IGNhY2hlcyB0aGUgcmVzcG9uc2UgdG8gcmVxdWVzdHMgdXNpbmcgdGhlIHNwZWNpZmllZCBIVFRQIG1ldGhvZHMuIFRoZXJlIGFyZSB0d28gY2hvaWNlczpcbiAqICAgKyAgQ2xvdWRGcm9udCBjYWNoZXMgcmVzcG9uc2VzIHRvIGBgR0VUYGAgYW5kIGBgSEVBRGBgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGNhY2hlcyByZXNwb25zZXMgdG8gYGBHRVRgYCwgYGBIRUFEYGAsIGFuZCBgYE9QVElPTlNgYCByZXF1ZXN0cy5cbiAqICAgXG4gKiAgSWYgeW91IHBpY2sgdGhlIHNlY29uZCBjaG9pY2UgZm9yIHlvdXIgQW1hem9uIFMzIE9yaWdpbiwgeW91IG1heSBuZWVkIHRvIGZvcndhcmQgQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QsIEFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycywgYW5kIE9yaWdpbiBoZWFkZXJzIGZvciB0aGUgcmVzcG9uc2VzIHRvIGJlIGNhY2hlZCBjb3JyZWN0bHkuXG4gKi9cbkNhY2hlZE1ldGhvZHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gYXV0b21hdGljYWxseSBjb21wcmVzcyBjZXJ0YWluIGZpbGVzIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yLiBJZiBzbywgc3BlY2lmeSBgYHRydWVgYDsgaWYgbm90LCBzcGVjaWZ5IGBgZmFsc2VgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBDb21wcmVzc2VkIEZpbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvU2VydmluZ0NvbXByZXNzZWRGaWxlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkNvbXByZXNzPzogYm9vbGVhblxuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIGBgRGVmYXVsdFRUTGBgIGZpZWxkIGluIGEgY2FjaGUgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtY2FjaGUtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBkZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRoYXQgeW91IHdhbnQgb2JqZWN0cyB0byBzdGF5IGluIENsb3VkRnJvbnQgY2FjaGVzIGJlZm9yZSBDbG91ZEZyb250IGZvcndhcmRzIGFub3RoZXIgcmVxdWVzdCB0byB5b3VyIG9yaWdpbiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgb2JqZWN0IGhhcyBiZWVuIHVwZGF0ZWQuIFRoZSB2YWx1ZSB0aGF0IHlvdSBzcGVjaWZ5IGFwcGxpZXMgb25seSB3aGVuIHlvdXIgb3JpZ2luIGRvZXMgbm90IGFkZCBIVFRQIGhlYWRlcnMgc3VjaCBhcyBgYENhY2hlLUNvbnRyb2wgbWF4LWFnZWBgLCBgYENhY2hlLUNvbnRyb2wgcy1tYXhhZ2VgYCwgYW5kIGBgRXhwaXJlc2BgIHRvIG9iamVjdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIEhvdyBMb25nIENvbnRlbnQgU3RheXMgaW4gYW4gRWRnZSBDYWNoZSAoRXhwaXJhdGlvbildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRGVmYXVsdFRUTD86IG51bWJlclxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYGBJRGBgIGZvciB0aGUgZmllbGQtbGV2ZWwgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byB1c2UgZm9yIGVuY3J5cHRpbmcgc3BlY2lmaWMgZmllbGRzIG9mIGRhdGEgZm9yIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLlxuICovXG5GaWVsZExldmVsRW5jcnlwdGlvbklkPzogc3RyaW5nXG5Gb3J3YXJkZWRWYWx1ZXM/OiBGb3J3YXJkZWRWYWx1ZXMxXG4vKipcbiAqIEEgbGlzdCBvZiBDbG91ZEZyb250IGZ1bmN0aW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWNoZSBiZWhhdmlvci4gWW91ciBmdW5jdGlvbnMgbXVzdCBiZSBwdWJsaXNoZWQgdG8gdGhlIGBgTElWRWBgIHN0YWdlIHRvIGFzc29jaWF0ZSB0aGVtIHdpdGggYSBjYWNoZSBiZWhhdmlvci5cbiAqL1xuRnVuY3Rpb25Bc3NvY2lhdGlvbnM/OiBGdW5jdGlvbkFzc29jaWF0aW9uW11cbkdycGNDb25maWc/OiBHcnBjQ29uZmlnMVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIHplcm8gb3IgbW9yZSBMYW1iZGFARWRnZSBmdW5jdGlvbiBhc3NvY2lhdGlvbnMgZm9yIGEgY2FjaGUgYmVoYXZpb3IuXG4gKi9cbkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zPzogTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbltdXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB0aGUgYGBNYXhUVExgYCBmaWVsZCBpbiBhIGNhY2hlIHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0aGF0IHlvdSB3YW50IG9iamVjdHMgdG8gc3RheSBpbiBDbG91ZEZyb250IGNhY2hlcyBiZWZvcmUgQ2xvdWRGcm9udCBmb3J3YXJkcyBhbm90aGVyIHJlcXVlc3QgdG8geW91ciBvcmlnaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkLiBUaGUgdmFsdWUgdGhhdCB5b3Ugc3BlY2lmeSBhcHBsaWVzIG9ubHkgd2hlbiB5b3VyIG9yaWdpbiBhZGRzIEhUVFAgaGVhZGVycyBzdWNoIGFzIGBgQ2FjaGUtQ29udHJvbCBtYXgtYWdlYGAsIGBgQ2FjaGUtQ29udHJvbCBzLW1heGFnZWBgLCBhbmQgYGBFeHBpcmVzYGAgdG8gb2JqZWN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTWFuYWdpbmcgSG93IExvbmcgQ29udGVudCBTdGF5cyBpbiBhbiBFZGdlIENhY2hlIChFeHBpcmF0aW9uKV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0V4cGlyYXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5NYXhUVEw/OiBudW1iZXJcbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIHRoZSBgYE1pblRUTGBgIGZpZWxkIGluIGEgY2FjaGUgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtY2FjaGUtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoYXQgeW91IHdhbnQgb2JqZWN0cyB0byBzdGF5IGluIENsb3VkRnJvbnQgY2FjaGVzIGJlZm9yZSBDbG91ZEZyb250IGZvcndhcmRzIGFub3RoZXIgcmVxdWVzdCB0byB5b3VyIG9yaWdpbiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgb2JqZWN0IGhhcyBiZWVuIHVwZGF0ZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIEhvdyBMb25nIENvbnRlbnQgU3RheXMgaW4gYW4gRWRnZSBDYWNoZSAoRXhwaXJhdGlvbildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IGBgMGBgIGZvciBgYE1pblRUTGBgIGlmIHlvdSBjb25maWd1cmUgQ2xvdWRGcm9udCB0byBmb3J3YXJkIGFsbCBoZWFkZXJzIHRvIHlvdXIgb3JpZ2luICh1bmRlciBgYEhlYWRlcnNgYCwgaWYgeW91IHNwZWNpZnkgYGAxYGAgZm9yIGBgUXVhbnRpdHlgYCBhbmQgYGAqYGAgZm9yIGBgTmFtZWBgKS5cbiAqL1xuTWluVFRMPzogbnVtYmVyXG4vKipcbiAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgb3JpZ2luIHJlcXVlc3QgcG9saWN5IHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblJlcXVlc3RQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJlYWwtdGltZSBsb2cgY29uZmlndXJhdGlvbiB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoaXMgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JlYWwtdGltZSBsb2dzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcmVhbC10aW1lLWxvZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5SZWFsdGltZUxvZ0NvbmZpZ0Fybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBmb3IgYSByZXNwb25zZSBoZWFkZXJzIHBvbGljeS5cbiAqL1xuUmVzcG9uc2VIZWFkZXJzUG9saWN5SWQ/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgeW91IHdhbnQgdG8gZGlzdHJpYnV0ZSBtZWRpYSBmaWxlcyBpbiB0aGUgTWljcm9zb2Z0IFNtb290aCBTdHJlYW1pbmcgZm9ybWF0IHVzaW5nIHRoZSBvcmlnaW4gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWNoZSBiZWhhdmlvci4gSWYgc28sIHNwZWNpZnkgYGB0cnVlYGA7IGlmIG5vdCwgc3BlY2lmeSBgYGZhbHNlYGAuIElmIHlvdSBzcGVjaWZ5IGBgdHJ1ZWBgIGZvciBgYFNtb290aFN0cmVhbWluZ2BgLCB5b3UgY2FuIHN0aWxsIGRpc3RyaWJ1dGUgb3RoZXIgY29udGVudCB1c2luZyB0aGlzIGNhY2hlIGJlaGF2aW9yIGlmIHRoZSBjb250ZW50IG1hdGNoZXMgdGhlIHZhbHVlIG9mIGBgUGF0aFBhdHRlcm5gYC5cbiAqL1xuU21vb3RoU3RyZWFtaW5nPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYGBJRGBgIGZvciB0aGUgb3JpZ2luIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByb3V0ZSByZXF1ZXN0cyB0byB3aGVuIHRoZXkgdXNlIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLlxuICovXG5UYXJnZXRPcmlnaW5JZDogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBrZXkgZ3JvdXBzIHRoYXQgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIHZhbGlkYXRlIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzLlxuICogIFdoZW4gYSBjYWNoZSBiZWhhdmlvciBjb250YWlucyB0cnVzdGVkIGtleSBncm91cHMsIENsb3VkRnJvbnQgcmVxdWlyZXMgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgZm9yIGFsbCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSBjYWNoZSBiZWhhdmlvci4gVGhlIFVSTHMgb3IgY29va2llcyBtdXN0IGJlIHNpZ25lZCB3aXRoIGEgcHJpdmF0ZSBrZXkgd2hvc2UgY29ycmVzcG9uZGluZyBwdWJsaWMga2V5IGlzIGluIHRoZSBrZXkgZ3JvdXAuIFRoZSBzaWduZWQgVVJMIG9yIGNvb2tpZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBwdWJsaWMga2V5IENsb3VkRnJvbnQgc2hvdWxkIHVzZSB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBwcml2YXRlIGNvbnRlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Qcml2YXRlQ29udGVudC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblRydXN0ZWRLZXlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXZSByZWNvbW1lbmQgdXNpbmcgYGBUcnVzdGVkS2V5R3JvdXBzYGAgaW5zdGVhZCBvZiBgYFRydXN0ZWRTaWduZXJzYGAuXG4gKiAgIEEgbGlzdCBvZiBBV1MtYWNjb3VudCBJRHMgd2hvc2UgcHVibGljIGtleXMgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIHZhbGlkYXRlIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzLlxuICogIFdoZW4gYSBjYWNoZSBiZWhhdmlvciBjb250YWlucyB0cnVzdGVkIHNpZ25lcnMsIENsb3VkRnJvbnQgcmVxdWlyZXMgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgZm9yIGFsbCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSBjYWNoZSBiZWhhdmlvci4gVGhlIFVSTHMgb3IgY29va2llcyBtdXN0IGJlIHNpZ25lZCB3aXRoIHRoZSBwcml2YXRlIGtleSBvZiBhIENsb3VkRnJvbnQga2V5IHBhaXIgaW4gYSB0cnVzdGVkIHNpZ25lcidzIEFXUy1hY2NvdW50LiBUaGUgc2lnbmVkIFVSTCBvciBjb29raWUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggcHVibGljIGtleSBDbG91ZEZyb250IHNob3VsZCB1c2UgdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpbmcgcHJpdmF0ZSBjb250ZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUHJpdmF0ZUNvbnRlbnQuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5UcnVzdGVkU2lnbmVycz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBwcm90b2NvbCB0aGF0IHZpZXdlcnMgY2FuIHVzZSB0byBhY2Nlc3MgdGhlIGZpbGVzIGluIHRoZSBvcmlnaW4gc3BlY2lmaWVkIGJ5IGBgVGFyZ2V0T3JpZ2luSWRgYCB3aGVuIGEgcmVxdWVzdCBtYXRjaGVzIHRoZSBwYXRoIHBhdHRlcm4gaW4gYGBQYXRoUGF0dGVybmBgLiBZb3UgY2FuIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBvcHRpb25zOlxuICogICArICBgYGFsbG93LWFsbGBgOiBWaWV3ZXJzIGNhbiB1c2UgSFRUUCBvciBIVFRQUy5cbiAqICAgKyAgYGByZWRpcmVjdC10by1odHRwc2BgOiBJZiBhIHZpZXdlciBzdWJtaXRzIGFuIEhUVFAgcmVxdWVzdCwgQ2xvdWRGcm9udCByZXR1cm5zIGFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgMzAxIChNb3ZlZCBQZXJtYW5lbnRseSkgdG8gdGhlIHZpZXdlciBhbG9uZyB3aXRoIHRoZSBIVFRQUyBVUkwuIFRoZSB2aWV3ZXIgdGhlbiByZXN1Ym1pdHMgdGhlIHJlcXVlc3QgdXNpbmcgdGhlIG5ldyBVUkwuXG4gKiAgICsgIGBgaHR0cHMtb25seWBgOiBJZiBhIHZpZXdlciBzZW5kcyBhbiBIVFRQIHJlcXVlc3QsIENsb3VkRnJvbnQgcmV0dXJucyBhbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMyAoRm9yYmlkZGVuKS5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcmVxdWlyaW5nIHRoZSBIVFRQUyBwcm90b2NvbCwgc2VlIFtSZXF1aXJpbmcgSFRUUFMgQmV0d2VlbiBWaWV3ZXJzIGFuZCBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctaHR0cHMtdmlld2Vycy10by1jbG91ZGZyb250Lmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhlIG9ubHkgd2F5IHRvIGd1YXJhbnRlZSB0aGF0IHZpZXdlcnMgcmV0cmlldmUgYW4gb2JqZWN0IHRoYXQgd2FzIGZldGNoZWQgZnJvbSB0aGUgb3JpZ2luIHVzaW5nIEhUVFBTIGlzIG5ldmVyIHRvIHVzZSBhbnkgb3RoZXIgcHJvdG9jb2wgdG8gZmV0Y2ggdGhlIG9iamVjdC4gSWYgeW91IGhhdmUgcmVjZW50bHkgY2hhbmdlZCBmcm9tIEhUVFAgdG8gSFRUUFMsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBjbGVhciB5b3VyIG9iamVjdHMnIGNhY2hlIGJlY2F1c2UgY2FjaGVkIG9iamVjdHMgYXJlIHByb3RvY29sIGFnbm9zdGljLiBUaGF0IG1lYW5zIHRoYXQgYW4gZWRnZSBsb2NhdGlvbiB3aWxsIHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgY2FjaGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBjdXJyZW50IHJlcXVlc3QgcHJvdG9jb2wgbWF0Y2hlcyB0aGUgcHJvdG9jb2wgdXNlZCBwcmV2aW91c2x5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNYW5hZ2luZyBDYWNoZSBFeHBpcmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblZpZXdlclByb3RvY29sUG9saWN5OiBzdHJpbmdcbn1cbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1dvcmtpbmcgd2l0aCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3dvcmtpbmctd2l0aC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSB2YWx1ZXMgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCB2YWx1ZXMgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtb3JpZ2luLXJlcXVlc3QtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEEgYGBEZWZhdWx0Q2FjaGVCZWhhdmlvcmBgIG11c3QgaW5jbHVkZSBlaXRoZXIgYSBgYENhY2hlUG9saWN5SWRgYCBvciBgYEZvcndhcmRlZFZhbHVlc2BgLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgYGBDYWNoZVBvbGljeUlkYGAuXG4gKiAgQSBjb21wbGV4IHR5cGUgdGhhdCBzcGVjaWZpZXMgaG93IENsb3VkRnJvbnQgaGFuZGxlcyBxdWVyeSBzdHJpbmdzLCBjb29raWVzLCBhbmQgSFRUUCBoZWFkZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcndhcmRlZFZhbHVlczEge1xuQ29va2llcz86IENvb2tpZXNcbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBoZWFkZXJzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIGhlYWRlcnMgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBBIGNvbXBsZXggdHlwZSB0aGF0IHNwZWNpZmllcyB0aGUgYGBIZWFkZXJzYGAsIGlmIGFueSwgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGZvcndhcmQgdG8gdGhlIG9yaWdpbiBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvciAod2hpdGVsaXN0ZWQgaGVhZGVycykuIEZvciB0aGUgaGVhZGVycyB0aGF0IHlvdSBzcGVjaWZ5LCBDbG91ZEZyb250IGFsc28gY2FjaGVzIHNlcGFyYXRlIHZlcnNpb25zIG9mIGEgc3BlY2lmaWVkIG9iamVjdCB0aGF0IGlzIGJhc2VkIG9uIHRoZSBoZWFkZXIgdmFsdWVzIGluIHZpZXdlciByZXF1ZXN0cy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDYWNoaW5nIENvbnRlbnQgQmFzZWQgb24gUmVxdWVzdCBIZWFkZXJzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvaGVhZGVyLWNhY2hpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5IZWFkZXJzPzogc3RyaW5nW11cbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBxdWVyeSBzdHJpbmdzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIHF1ZXJ5IHN0cmluZ3MgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJbmRpY2F0ZXMgd2hldGhlciB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGZvcndhcmQgcXVlcnkgc3RyaW5ncyB0byB0aGUgb3JpZ2luIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FjaGUgYmVoYXZpb3IgYW5kIGNhY2hlIGJhc2VkIG9uIHRoZSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycy4gQ2xvdWRGcm9udCBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBgYFF1ZXJ5U3RyaW5nYGAgYW5kIG9uIHRoZSB2YWx1ZXMgdGhhdCB5b3Ugc3BlY2lmeSBmb3IgYGBRdWVyeVN0cmluZ0NhY2hlS2V5c2BgLCBpZiBhbnk6XG4gKiAgSWYgeW91IHNwZWNpZnkgdHJ1ZSBmb3IgYGBRdWVyeVN0cmluZ2BgIGFuZCB5b3UgZG9uJ3Qgc3BlY2lmeSBhbnkgdmFsdWVzIGZvciBgYFF1ZXJ5U3RyaW5nQ2FjaGVLZXlzYGAsIENsb3VkRnJvbnQgZm9yd2FyZHMgYWxsIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHRoZSBvcmlnaW4gYW5kIGNhY2hlcyBiYXNlZCBvbiBhbGwgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuIERlcGVuZGluZyBvbiBob3cgbWFueSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBhbmQgdmFsdWVzIHlvdSBoYXZlLCB0aGlzIGNhbiBhZHZlcnNlbHkgYWZmZWN0IHBlcmZvcm1hbmNlIGJlY2F1c2UgQ2xvdWRGcm9udCBtdXN0IGZvcndhcmQgbW9yZSByZXF1ZXN0cyB0byB0aGUgb3JpZ2luLlxuICogIElmIHlvdSBzcGVjaWZ5IHRydWUgZm9yIGBgUXVlcnlTdHJpbmdgYCBhbmQgeW91IHNwZWNpZnkgb25lIG9yIG1vcmUgdmFsdWVzIGZvciBgYFF1ZXJ5U3RyaW5nQ2FjaGVLZXlzYGAsIENsb3VkRnJvbnQgZm9yd2FyZHMgYWxsIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHRoZSBvcmlnaW4sIGJ1dCBpdCBvbmx5IGNhY2hlcyBiYXNlZCBvbiB0aGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgdGhhdCB5b3Ugc3BlY2lmeS5cbiAqICBJZiB5b3Ugc3BlY2lmeSBmYWxzZSBmb3IgYGBRdWVyeVN0cmluZ2BgLCBDbG91ZEZyb250IGRvZXNuJ3QgZm9yd2FyZCBhbnkgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgdG8gdGhlIG9yaWdpbiwgYW5kIGRvZXNuJ3QgY2FjaGUgYmFzZWQgb24gcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ29uZmlndXJpbmcgQ2xvdWRGcm9udCB0byBDYWNoZSBCYXNlZCBvbiBRdWVyeSBTdHJpbmcgUGFyYW1ldGVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1F1ZXJ5U3RyaW5nUGFyYW1ldGVycy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblF1ZXJ5U3RyaW5nOiBib29sZWFuXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgcXVlcnkgc3RyaW5ncyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBxdWVyeSBzdHJpbmdzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgY2FjaGluZyBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvci5cbiAqL1xuUXVlcnlTdHJpbmdDYWNoZUtleXM/OiBzdHJpbmdbXVxufVxuLyoqXG4gKiBUaGUgZ1JQQyBjb25maWd1cmF0aW9uIGZvciB5b3VyIGNhY2hlIGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdycGNDb25maWcxIHtcbi8qKlxuICogRW5hYmxlcyB5b3VyIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJlY2VpdmUgZ1JQQyByZXF1ZXN0cyBhbmQgdG8gcHJveHkgdGhlbSBkaXJlY3RseSB0byB5b3VyIG9yaWdpbnMuXG4gKi9cbkVuYWJsZWQ6IGJvb2xlYW5cbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250cm9scyB3aGV0aGVyIGFjY2VzcyBsb2dzIGFyZSB3cml0dGVuIGZvciB0aGUgZGlzdHJpYnV0aW9uLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGxvZ2dpbmcsIHNlZSBbQWNjZXNzIExvZ3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9BY2Nlc3NMb2dzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dnaW5nIHtcbi8qKlxuICogVGhlIEFtYXpvbiBTMyBidWNrZXQgdG8gc3RvcmUgdGhlIGFjY2VzcyBsb2dzIGluLCBmb3IgZXhhbXBsZSwgYGBhbXpuLXMzLWRlbW8tYnVja2V0LnMzLmFtYXpvbmF3cy5jb21gYC5cbiAqL1xuQnVja2V0Pzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gaW5jbHVkZSBjb29raWVzIGluIGFjY2VzcyBsb2dzLCBzcGVjaWZ5IGBgdHJ1ZWBgIGZvciBgYEluY2x1ZGVDb29raWVzYGAuIElmIHlvdSBjaG9vc2UgdG8gaW5jbHVkZSBjb29raWVzIGluIGxvZ3MsIENsb3VkRnJvbnQgbG9ncyBhbGwgY29va2llcyByZWdhcmRsZXNzIG9mIGhvdyB5b3UgY29uZmlndXJlIHRoZSBjYWNoZSBiZWhhdmlvcnMgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIGNvb2tpZXMgd2hlbiB5b3UgY3JlYXRlIGEgZGlzdHJpYnV0aW9uIG9yIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgaW5jbHVkZSBjb29raWVzIGZvciBhbiBleGlzdGluZyBkaXN0cmlidXRpb24sIHNwZWNpZnkgYGBmYWxzZWBgIGZvciBgYEluY2x1ZGVDb29raWVzYGAuXG4gKi9cbkluY2x1ZGVDb29raWVzPzogYm9vbGVhblxuLyoqXG4gKiBBbiBvcHRpb25hbCBzdHJpbmcgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHByZWZpeCB0byB0aGUgYWNjZXNzIGxvZyBgYGZpbGVuYW1lc2BgIGZvciB0aGlzIGRpc3RyaWJ1dGlvbiwgZm9yIGV4YW1wbGUsIGBgbXlwcmVmaXgvYGAuIElmIHlvdSB3YW50IHRvIGVuYWJsZSBsb2dnaW5nLCBidXQgeW91IGRvbid0IHdhbnQgdG8gc3BlY2lmeSBhIHByZWZpeCwgeW91IHN0aWxsIG11c3QgaW5jbHVkZSBhbiBlbXB0eSBgYFByZWZpeGBgIGVsZW1lbnQgaW4gdGhlIGBgTG9nZ2luZ2BgIGVsZW1lbnQuXG4gKi9cblByZWZpeD86IHN0cmluZ1xufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9yaWdpbiBncm91cHMgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLlxuICogIFNwZWNpZnkgYSB2YWx1ZSBmb3IgZWl0aGVyIHRoZSBgYE9yaWdpbnNgYCBvciBgYE9yaWdpbkdyb3Vwc2BgIHByb3BlcnR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkdyb3VwcyB7XG4vKipcbiAqIFRoZSBpdGVtcyAob3JpZ2luIGdyb3VwcykgaW4gYSBkaXN0cmlidXRpb24uXG4gKi9cbkl0ZW1zPzogT3JpZ2luR3JvdXBbXVxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIG9yaWdpbiBncm91cHMuXG4gKi9cblF1YW50aXR5OiBudW1iZXJcbn1cbi8qKlxuICogQW4gb3JpZ2luIGdyb3VwIGluY2x1ZGVzIHR3byBvcmlnaW5zIChhIHByaW1hcnkgb3JpZ2luIGFuZCBhIHNlY29uZGFyeSBvcmlnaW4gdG8gZmFpbG92ZXIgdG8pIGFuZCBhIGZhaWxvdmVyIGNyaXRlcmlhIHRoYXQgeW91IHNwZWNpZnkuIFlvdSBjcmVhdGUgYW4gb3JpZ2luIGdyb3VwIHRvIHN1cHBvcnQgb3JpZ2luIGZhaWxvdmVyIGluIENsb3VkRnJvbnQuIFdoZW4geW91IGNyZWF0ZSBvciB1cGRhdGUgYSBkaXN0cmlidXRpb24sIHlvdSBjYW4gc3BlY2lmeSB0aGUgb3JpZ2luIGdyb3VwIGluc3RlYWQgb2YgYSBzaW5nbGUgb3JpZ2luLCBhbmQgQ2xvdWRGcm9udCB3aWxsIGZhaWxvdmVyIGZyb20gdGhlIHByaW1hcnkgb3JpZ2luIHRvIHRoZSBzZWNvbmRhcnkgb3JpZ2luIHVuZGVyIHRoZSBmYWlsb3ZlciBjb25kaXRpb25zIHRoYXQgeW91J3ZlIGNob3Nlbi5cbiAqICBPcHRpb25hbGx5LCB5b3UgY2FuIGNob29zZSBzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIHlvdXIgb3JpZ2luIGdyb3VwIHRvIHNwZWNpZnkgaG93IHlvdXIgb3JpZ2lucyBhcmUgc2VsZWN0ZWQgd2hlbiB5b3VyIGRpc3RyaWJ1dGlvbiByb3V0ZXMgdmlld2VyIHJlcXVlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkdyb3VwIHtcbkZhaWxvdmVyQ3JpdGVyaWE6IE9yaWdpbkdyb3VwRmFpbG92ZXJDcml0ZXJpYVxuLyoqXG4gKiBUaGUgb3JpZ2luIGdyb3VwJ3MgSUQuXG4gKi9cbklkOiBzdHJpbmdcbk1lbWJlcnM6IE9yaWdpbkdyb3VwTWVtYmVyc1xuLyoqXG4gKiBUaGUgc2VsZWN0aW9uIGNyaXRlcmlhIGZvciB0aGUgb3JpZ2luIGdyb3VwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGUgYW4gb3JpZ2luIGdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvaGlnaF9hdmFpbGFiaWxpdHlfb3JpZ2luX2ZhaWxvdmVyLmh0bWwjY29uY2VwdF9vcmlnaW5fZ3JvdXBzLmNyZWF0aW5nKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblNlbGVjdGlvbkNyaXRlcmlhPzogKFwiZGVmYXVsdFwiIHwgXCJtZWRpYS1xdWFsaXR5LWJhc2VkXCIpXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZhaWxvdmVyIGNyaXRlcmlhIGZvciBhbiBvcmlnaW4gZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luR3JvdXBGYWlsb3ZlckNyaXRlcmlhIHtcblN0YXR1c0NvZGVzOiBTdGF0dXNDb2Rlc1xufVxuLyoqXG4gKiBUaGUgc3RhdHVzIGNvZGVzIHRoYXQsIHdoZW4gcmV0dXJuZWQgZnJvbSB0aGUgcHJpbWFyeSBvcmlnaW4sIHdpbGwgdHJpZ2dlciBDbG91ZEZyb250IHRvIGZhaWxvdmVyIHRvIHRoZSBzZWNvbmQgb3JpZ2luLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXR1c0NvZGVzIHtcbi8qKlxuICogVGhlIGl0ZW1zIChzdGF0dXMgY29kZXMpIGZvciBhbiBvcmlnaW4gZ3JvdXAuXG4gKi9cbkl0ZW1zOiBudW1iZXJbXVxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIHN0YXR1cyBjb2Rlcy5cbiAqL1xuUXVhbnRpdHk6IG51bWJlclxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5zIGluIGFuIG9yaWdpbiBncm91cC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5Hcm91cE1lbWJlcnMge1xuLyoqXG4gKiBJdGVtcyAob3JpZ2lucykgaW4gYW4gb3JpZ2luIGdyb3VwLlxuICovXG5JdGVtczogT3JpZ2luR3JvdXBNZW1iZXJbXVxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIG9yaWdpbnMgaW4gYW4gb3JpZ2luIGdyb3VwLlxuICovXG5RdWFudGl0eTogbnVtYmVyXG59XG4vKipcbiAqIEFuIG9yaWdpbiBpbiBhbiBvcmlnaW4gZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luR3JvdXBNZW1iZXIge1xuLyoqXG4gKiBUaGUgSUQgZm9yIGFuIG9yaWdpbiBpbiBhbiBvcmlnaW4gZ3JvdXAuXG4gKi9cbk9yaWdpbklkOiBzdHJpbmdcbn1cbi8qKlxuICogQW4gb3JpZ2luLlxuICogIEFuIG9yaWdpbiBpcyB0aGUgbG9jYXRpb24gd2hlcmUgY29udGVudCBpcyBzdG9yZWQsIGFuZCBmcm9tIHdoaWNoIENsb3VkRnJvbnQgZ2V0cyBjb250ZW50IHRvIHNlcnZlIHRvIHZpZXdlcnMuIFRvIHNwZWNpZnkgYW4gb3JpZ2luOlxuICogICArICBVc2UgYGBTM09yaWdpbkNvbmZpZ2BgIHRvIHNwZWNpZnkgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIG5vdCBjb25maWd1cmVkIHdpdGggc3RhdGljIHdlYnNpdGUgaG9zdGluZy5cbiAqICAgKyAgVXNlIGBgVnBjT3JpZ2luQ29uZmlnYGAgdG8gc3BlY2lmeSBhIFZQQyBvcmlnaW4uXG4gKiAgICsgIFVzZSBgYEN1c3RvbU9yaWdpbkNvbmZpZ2BgIHRvIHNwZWNpZnkgYWxsIG90aGVyIGtpbmRzIG9mIG9yaWdpbnMsIGluY2x1ZGluZzpcbiAqICAgKyAgQW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIGNvbmZpZ3VyZWQgd2l0aCBzdGF0aWMgd2Vic2l0ZSBob3N0aW5nXG4gKiAgICsgIEFuIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgbG9hZCBiYWxhbmNlclxuICogICArICBBbiBFTVBsb25nIGVuZHBvaW50XG4gKiAgICsgIEFuIEVNU2xvbmcgY29udGFpbmVyXG4gKiAgICsgIEFueSBvdGhlciBIVFRQIHNlcnZlciwgcnVubmluZyBvbiBhbiBBbWF6b24gRUMyIGluc3RhbmNlIG9yIGFueSBvdGhlciBraW5kIG9mIGhvc3RcbiAqICAgXG4gKiAgIFxuICogIEZvciB0aGUgY3VycmVudCBtYXhpbXVtIG51bWJlciBvZiBvcmlnaW5zIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHBlciBkaXN0cmlidXRpb24sIHNlZSBbR2VuZXJhbCBRdW90YXMgb24gV2ViIERpc3RyaWJ1dGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jbG91ZGZyb250LWxpbWl0cy5odG1sI2xpbWl0cy13ZWItZGlzdHJpYnV0aW9ucykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqIChxdW90YXMgd2VyZSBmb3JtZXJseSByZWZlcnJlZCB0byBhcyBsaW1pdHMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbiB7XG4vKipcbiAqIFRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBDbG91ZEZyb250IGF0dGVtcHRzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi4gVGhlIG1pbmltdW0gbnVtYmVyIGlzIDEsIHRoZSBtYXhpbXVtIGlzIDMsIGFuZCB0aGUgZGVmYXVsdCAoaWYgeW91IGRvbid0IHNwZWNpZnkgb3RoZXJ3aXNlKSBpcyAzLlxuICogIEZvciBhIGN1c3RvbSBvcmlnaW4gKGluY2x1ZGluZyBhbiBBbWF6b24gUzMgYnVja2V0IHRoYXQncyBjb25maWd1cmVkIHdpdGggc3RhdGljIHdlYnNpdGUgaG9zdGluZyksIHRoaXMgdmFsdWUgYWxzbyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IENsb3VkRnJvbnQgYXR0ZW1wdHMgdG8gZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgb3JpZ2luLCBpbiB0aGUgY2FzZSBvZiBhbiBbT3JpZ2luIFJlc3BvbnNlIFRpbWVvdXRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td2ViLXZhbHVlcy1zcGVjaWZ5Lmh0bWwjRG93bmxvYWREaXN0VmFsdWVzT3JpZ2luUmVzcG9uc2VUaW1lb3V0KS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtPcmlnaW4gQ29ubmVjdGlvbiBBdHRlbXB0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNvcmlnaW4tY29ubmVjdGlvbi1hdHRlbXB0cykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Db25uZWN0aW9uQXR0ZW1wdHM/OiBudW1iZXJcbi8qKlxuICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRoYXQgQ2xvdWRGcm9udCB3YWl0cyB3aGVuIHRyeWluZyB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBvcmlnaW4uIFRoZSBtaW5pbXVtIHRpbWVvdXQgaXMgMSBzZWNvbmQsIHRoZSBtYXhpbXVtIGlzIDEwIHNlY29uZHMsIGFuZCB0aGUgZGVmYXVsdCAoaWYgeW91IGRvbid0IHNwZWNpZnkgb3RoZXJ3aXNlKSBpcyAxMCBzZWNvbmRzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW09yaWdpbiBDb25uZWN0aW9uIFRpbWVvdXRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td2ViLXZhbHVlcy1zcGVjaWZ5Lmh0bWwjb3JpZ2luLWNvbm5lY3Rpb24tdGltZW91dCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Db25uZWN0aW9uVGltZW91dD86IG51bWJlclxuQ3VzdG9tT3JpZ2luQ29uZmlnPzogQ3VzdG9tT3JpZ2luQ29uZmlnXG4vKipcbiAqIFRoZSBkb21haW4gbmFtZSBmb3IgdGhlIG9yaWdpbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtPcmlnaW4gRG9tYWluIE5hbWVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td2ViLXZhbHVlcy1zcGVjaWZ5Lmh0bWwjRG93bmxvYWREaXN0VmFsdWVzRG9tYWluTmFtZSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Eb21haW5OYW1lOiBzdHJpbmdcbi8qKlxuICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG9yaWdpbi4gVGhpcyB2YWx1ZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICBVc2UgdGhpcyB2YWx1ZSB0byBzcGVjaWZ5IHRoZSBgYFRhcmdldE9yaWdpbklkYGAgaW4gYSBgYENhY2hlQmVoYXZpb3JgYCBvciBgYERlZmF1bHRDYWNoZUJlaGF2aW9yYGAuXG4gKi9cbklkOiBzdHJpbmdcbi8qKlxuICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIGFuIG9yaWdpbiBhY2Nlc3MgY29udHJvbCBmb3IgdGhpcyBvcmlnaW4uXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVzdHJpY3RpbmcgYWNjZXNzIHRvIGFuIEFtYXpvbiBTMyBvcmlnaW5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9wcml2YXRlLWNvbnRlbnQtcmVzdHJpY3RpbmctYWNjZXNzLXRvLXMzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luQWNjZXNzQ29udHJvbElkPzogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBIVFRQIGhlYWRlciBuYW1lcyBhbmQgdmFsdWVzIHRoYXQgQ2xvdWRGcm9udCBhZGRzIHRvIHRoZSByZXF1ZXN0cyB0aGF0IGl0IHNlbmRzIHRvIHRoZSBvcmlnaW4uXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQWRkaW5nIEN1c3RvbSBIZWFkZXJzIHRvIE9yaWdpbiBSZXF1ZXN0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2FkZC1vcmlnaW4tY3VzdG9tLWhlYWRlcnMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5PcmlnaW5DdXN0b21IZWFkZXJzPzogT3JpZ2luQ3VzdG9tSGVhZGVyW11cbi8qKlxuICogQW4gb3B0aW9uYWwgcGF0aCB0aGF0IENsb3VkRnJvbnQgYXBwZW5kcyB0byB0aGUgb3JpZ2luIGRvbWFpbiBuYW1lIHdoZW4gQ2xvdWRGcm9udCByZXF1ZXN0cyBjb250ZW50IGZyb20gdGhlIG9yaWdpbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtPcmlnaW4gUGF0aF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5QYXRoKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblBhdGg/OiBzdHJpbmdcbk9yaWdpblNoaWVsZD86IE9yaWdpblNoaWVsZFxuUzNPcmlnaW5Db25maWc/OiBTM09yaWdpbkNvbmZpZ1xuVnBjT3JpZ2luQ29uZmlnPzogVnBjT3JpZ2luQ29uZmlnXG59XG4vKipcbiAqIFVzZSB0aGlzIHR5cGUgdG8gc3BlY2lmeSBhbiBvcmlnaW4gdGhhdCBpcyBub3QgYW4gQW1hem9uIFMzIGJ1Y2tldCwgd2l0aCBvbmUgZXhjZXB0aW9uLiBJZiB0aGUgQW1hem9uIFMzIGJ1Y2tldCBpcyBjb25maWd1cmVkIHdpdGggc3RhdGljIHdlYnNpdGUgaG9zdGluZywgdXNlIHRoaXMgdHlwZS4gSWYgdGhlIEFtYXpvbiBTMyBidWNrZXQgaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCBzdGF0aWMgd2Vic2l0ZSBob3N0aW5nLCB1c2UgdGhlIGBgUzNPcmlnaW5Db25maWdgYCB0eXBlIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tT3JpZ2luQ29uZmlnIHtcbi8qKlxuICogVGhlIEhUVFAgcG9ydCB0aGF0IENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uIFNwZWNpZnkgdGhlIEhUVFAgcG9ydCB0aGF0IHRoZSBvcmlnaW4gbGlzdGVucyBvbi5cbiAqL1xuSFRUUFBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIEhUVFBTIHBvcnQgdGhhdCBDbG91ZEZyb250IHVzZXMgdG8gY29ubmVjdCB0byB0aGUgb3JpZ2luLiBTcGVjaWZ5IHRoZSBIVFRQUyBwb3J0IHRoYXQgdGhlIG9yaWdpbiBsaXN0ZW5zIG9uLlxuICovXG5IVFRQU1BvcnQ/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIGhvdyBsb25nLCBpbiBzZWNvbmRzLCBDbG91ZEZyb250IHBlcnNpc3RzIGl0cyBjb25uZWN0aW9uIHRvIHRoZSBvcmlnaW4uIFRoZSBtaW5pbXVtIHRpbWVvdXQgaXMgMSBzZWNvbmQsIHRoZSBtYXhpbXVtIGlzIDYwIHNlY29uZHMsIGFuZCB0aGUgZGVmYXVsdCAoaWYgeW91IGRvbid0IHNwZWNpZnkgb3RoZXJ3aXNlKSBpcyA1IHNlY29uZHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbS2VlcC1hbGl2ZSB0aW1lb3V0IChjdXN0b20gb3JpZ2lucyBvbmx5KV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5LZWVwYWxpdmVUaW1lb3V0KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpbktlZXBhbGl2ZVRpbWVvdXQ/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwcm90b2NvbCAoSFRUUCBvciBIVFRQUykgdGhhdCBDbG91ZEZyb250IHVzZXMgdG8gY29ubmVjdCB0byB0aGUgb3JpZ2luLiBWYWxpZCB2YWx1ZXMgYXJlOlxuICogICArICBgYGh0dHAtb25seWBgIOKAkyBDbG91ZEZyb250IGFsd2F5cyB1c2VzIEhUVFAgdG8gY29ubmVjdCB0byB0aGUgb3JpZ2luLlxuICogICArICBgYG1hdGNoLXZpZXdlcmBgIOKAkyBDbG91ZEZyb250IGNvbm5lY3RzIHRvIHRoZSBvcmlnaW4gdXNpbmcgdGhlIHNhbWUgcHJvdG9jb2wgdGhhdCB0aGUgdmlld2VyIHVzZWQgdG8gY29ubmVjdCB0byBDbG91ZEZyb250LlxuICogICArICBgYGh0dHBzLW9ubHlgYCDigJMgQ2xvdWRGcm9udCBhbHdheXMgdXNlcyBIVFRQUyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uXG4gKi9cbk9yaWdpblByb3RvY29sUG9saWN5OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIGhvdyBsb25nLCBpbiBzZWNvbmRzLCBDbG91ZEZyb250IHdhaXRzIGZvciBhIHJlc3BvbnNlIGZyb20gdGhlIG9yaWdpbi4gVGhpcyBpcyBhbHNvIGtub3duIGFzIHRoZSAqb3JpZ2luIHJlc3BvbnNlIHRpbWVvdXQqLiBUaGUgbWluaW11bSB0aW1lb3V0IGlzIDEgc2Vjb25kLCB0aGUgbWF4aW11bSBpcyA2MCBzZWNvbmRzLCBhbmQgdGhlIGRlZmF1bHQgKGlmIHlvdSBkb24ndCBzcGVjaWZ5IG90aGVyd2lzZSkgaXMgMzAgc2Vjb25kcy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXNwb25zZSB0aW1lb3V0IChjdXN0b20gb3JpZ2lucyBvbmx5KV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5SZXNwb25zZVRpbWVvdXQpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luUmVhZFRpbWVvdXQ/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBtaW5pbXVtIFNTTC9UTFMgcHJvdG9jb2wgdGhhdCBDbG91ZEZyb250IHVzZXMgd2hlbiBjb25uZWN0aW5nIHRvIHlvdXIgb3JpZ2luIG92ZXIgSFRUUFMuIFZhbGlkIHZhbHVlcyBpbmNsdWRlIGBgU1NMdjNgYCwgYGBUTFN2MWBgLCBgYFRMU3YxLjFgYCwgYW5kIGBgVExTdjEuMmBgLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01pbmltdW0gT3JpZ2luIFNTTCBQcm90b2NvbF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5TU0xQcm90b2NvbHMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luU1NMUHJvdG9jb2xzPzogc3RyaW5nW11cbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBgYEhlYWRlck5hbWVgYCBhbmQgYGBIZWFkZXJWYWx1ZWBgIGVsZW1lbnRzLCBpZiBhbnksIGZvciB0aGlzIGRpc3RyaWJ1dGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5DdXN0b21IZWFkZXIge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiBhIGhlYWRlciB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gc2VuZCB0byB5b3VyIG9yaWdpbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQWRkaW5nIEN1c3RvbSBIZWFkZXJzIHRvIE9yaWdpbiBSZXF1ZXN0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2ZvcndhcmQtY3VzdG9tLWhlYWRlcnMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5IZWFkZXJOYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIHZhbHVlIGZvciB0aGUgaGVhZGVyIHRoYXQgeW91IHNwZWNpZmllZCBpbiB0aGUgYGBIZWFkZXJOYW1lYGAgZmllbGQuXG4gKi9cbkhlYWRlclZhbHVlOiBzdHJpbmdcbn1cbi8qKlxuICogQ2xvdWRGcm9udCBPcmlnaW4gU2hpZWxkLiBVc2luZyBPcmlnaW4gU2hpZWxkIGNhbiBoZWxwIHJlZHVjZSB0aGUgbG9hZCBvbiB5b3VyIG9yaWdpbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2luZyBPcmlnaW4gU2hpZWxkXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvb3JpZ2luLXNoaWVsZC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luU2hpZWxkIHtcbi8qKlxuICogQSBmbGFnIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgT3JpZ2luIFNoaWVsZCBpcyBlbmFibGVkLlxuICogIFdoZW4gaXQncyBlbmFibGVkLCBDbG91ZEZyb250IHJvdXRlcyBhbGwgcmVxdWVzdHMgdGhyb3VnaCBPcmlnaW4gU2hpZWxkLCB3aGljaCBjYW4gaGVscCBwcm90ZWN0IHlvdXIgb3JpZ2luLiBXaGVuIGl0J3MgZGlzYWJsZWQsIENsb3VkRnJvbnQgbWlnaHQgc2VuZCByZXF1ZXN0cyBkaXJlY3RseSB0byB5b3VyIG9yaWdpbiBmcm9tIG11bHRpcGxlIGVkZ2UgbG9jYXRpb25zIG9yIHJlZ2lvbmFsIGVkZ2UgY2FjaGVzLlxuICovXG5FbmFibGVkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgQVdTLVJlZ2lvbiBmb3IgT3JpZ2luIFNoaWVsZC5cbiAqICBTcGVjaWZ5IHRoZSBBV1MtUmVnaW9uIHRoYXQgaGFzIHRoZSBsb3dlc3QgbGF0ZW5jeSB0byB5b3VyIG9yaWdpbi4gVG8gc3BlY2lmeSBhIHJlZ2lvbiwgdXNlIHRoZSByZWdpb24gY29kZSwgbm90IHRoZSByZWdpb24gbmFtZS4gRm9yIGV4YW1wbGUsIHNwZWNpZnkgdGhlIFVTIEVhc3QgKE9oaW8pIHJlZ2lvbiBhcyBgYHVzLWVhc3QtMmBgLlxuICogIFdoZW4geW91IGVuYWJsZSBDbG91ZEZyb250IE9yaWdpbiBTaGllbGQsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIEFXUy1SZWdpb24gZm9yIE9yaWdpbiBTaGllbGQuIEZvciB0aGUgbGlzdCBvZiBBV1MtUmVnaW9ucyB0aGF0IHlvdSBjYW4gc3BlY2lmeSwgYW5kIGZvciBoZWxwIGNob29zaW5nIHRoZSBiZXN0IFJlZ2lvbiBmb3IgeW91ciBvcmlnaW4sIHNlZSBbQ2hvb3NpbmcgdGhlIGZvciBPcmlnaW4gU2hpZWxkXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvb3JpZ2luLXNoaWVsZC5odG1sI2Nob29zZS1vcmlnaW4tc2hpZWxkLXJlZ2lvbikgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5PcmlnaW5TaGllbGRSZWdpb24/OiBzdHJpbmdcbn1cbi8qKlxuICogVXNlIHRoaXMgdHlwZSB0byBzcGVjaWZ5IGFuIG9yaWdpbiB0aGF0IGlzIGFuIEFtYXpvbiBTMyBidWNrZXQgdGhhdCBpcyBub3QgY29uZmlndXJlZCB3aXRoIHN0YXRpYyB3ZWJzaXRlIGhvc3RpbmcuIFRvIHNwZWNpZnkgYW55IG90aGVyIHR5cGUgb2Ygb3JpZ2luLCBpbmNsdWRpbmcgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIGNvbmZpZ3VyZWQgd2l0aCBzdGF0aWMgd2Vic2l0ZSBob3N0aW5nLCB1c2UgdGhlIGBgQ3VzdG9tT3JpZ2luQ29uZmlnYGAgdHlwZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFMzT3JpZ2luQ29uZmlnIHtcbi8qKlxuICogSWYgeW91J3JlIHVzaW5nIG9yaWdpbiBhY2Nlc3MgY29udHJvbCAoT0FDKSBpbnN0ZWFkIG9mIG9yaWdpbiBhY2Nlc3MgaWRlbnRpdHksIHNwZWNpZnkgYW4gZW1wdHkgYGBPcmlnaW5BY2Nlc3NJZGVudGl0eWBgIGVsZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Jlc3RyaWN0aW5nIGFjY2VzcyB0byBhbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3ByaXZhdGUtY29udGVudC1yZXN0cmljdGluZy1hY2Nlc3MtdG8tb3JpZ2luLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhlIENsb3VkRnJvbnQgb3JpZ2luIGFjY2VzcyBpZGVudGl0eSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgb3JpZ2luLiBVc2UgYW4gb3JpZ2luIGFjY2VzcyBpZGVudGl0eSB0byBjb25maWd1cmUgdGhlIG9yaWdpbiBzbyB0aGF0IHZpZXdlcnMgY2FuICpvbmx5KiBhY2Nlc3Mgb2JqZWN0cyBpbiBhbiBBbWF6b24gUzMgYnVja2V0IHRocm91Z2ggQ2xvdWRGcm9udC4gVGhlIGZvcm1hdCBvZiB0aGUgdmFsdWUgaXM6XG4gKiAgIGBgb3JpZ2luLWFjY2Vzcy1pZGVudGl0eS9jbG91ZGZyb250L0lELW9mLW9yaWdpbi1hY2Nlc3MtaWRlbnRpdHlgYCBcbiAqICBUaGUgYGBJRC1vZi1vcmlnaW4tYWNjZXNzLWlkZW50aXR5YGAgaXMgdGhlIHZhbHVlIHRoYXQgQ2xvdWRGcm9udCByZXR1cm5lZCBpbiB0aGUgYGBJRGBgIGVsZW1lbnQgd2hlbiB5b3UgY3JlYXRlZCB0aGUgb3JpZ2luIGFjY2VzcyBpZGVudGl0eS5cbiAqICBJZiB5b3Ugd2FudCB2aWV3ZXJzIHRvIGJlIGFibGUgdG8gYWNjZXNzIG9iamVjdHMgdXNpbmcgZWl0aGVyIHRoZSBDbG91ZEZyb250IFVSTCBvciB0aGUgQW1hem9uIFMzIFVSTCwgc3BlY2lmeSBhbiBlbXB0eSBgYE9yaWdpbkFjY2Vzc0lkZW50aXR5YGAgZWxlbWVudC5cbiAqICBUbyBkZWxldGUgdGhlIG9yaWdpbiBhY2Nlc3MgaWRlbnRpdHkgZnJvbSBhbiBleGlzdGluZyBkaXN0cmlidXRpb24sIHVwZGF0ZSB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gYW5kIGluY2x1ZGUgYW4gZW1wdHkgYGBPcmlnaW5BY2Nlc3NJZGVudGl0eWBgIGVsZW1lbnQuXG4gKiAgVG8gcmVwbGFjZSB0aGUgb3JpZ2luIGFjY2VzcyBpZGVudGl0eSwgdXBkYXRlIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBhbmQgc3BlY2lmeSB0aGUgbmV3IG9yaWdpbiBhY2Nlc3MgaWRlbnRpdHkuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbiBhY2Nlc3MgaWRlbnRpdHksIHNlZSBbU2VydmluZyBQcml2YXRlIENvbnRlbnQgdGhyb3VnaCBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUHJpdmF0ZUNvbnRlbnQuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5PcmlnaW5BY2Nlc3NJZGVudGl0eT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgVlBDIG9yaWdpbiBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY09yaWdpbkNvbmZpZyB7XG4vKipcbiAqIFNwZWNpZmllcyBob3cgbG9uZywgaW4gc2Vjb25kcywgQ2xvdWRGcm9udCBwZXJzaXN0cyBpdHMgY29ubmVjdGlvbiB0byB0aGUgb3JpZ2luLiBUaGUgbWluaW11bSB0aW1lb3V0IGlzIDEgc2Vjb25kLCB0aGUgbWF4aW11bSBpcyA2MCBzZWNvbmRzLCBhbmQgdGhlIGRlZmF1bHQgKGlmIHlvdSBkb24ndCBzcGVjaWZ5IG90aGVyd2lzZSkgaXMgNSBzZWNvbmRzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0tlZXAtYWxpdmUgdGltZW91dCAoY3VzdG9tIG9yaWdpbnMgb25seSldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td2ViLXZhbHVlcy1zcGVjaWZ5Lmh0bWwjRG93bmxvYWREaXN0VmFsdWVzT3JpZ2luS2VlcGFsaXZlVGltZW91dCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5PcmlnaW5LZWVwYWxpdmVUaW1lb3V0PzogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyBob3cgbG9uZywgaW4gc2Vjb25kcywgQ2xvdWRGcm9udCB3YWl0cyBmb3IgYSByZXNwb25zZSBmcm9tIHRoZSBvcmlnaW4uIFRoaXMgaXMgYWxzbyBrbm93biBhcyB0aGUgKm9yaWdpbiByZXNwb25zZSB0aW1lb3V0Ki4gVGhlIG1pbmltdW0gdGltZW91dCBpcyAxIHNlY29uZCwgdGhlIG1heGltdW0gaXMgNjAgc2Vjb25kcywgYW5kIHRoZSBkZWZhdWx0IChpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBvdGhlcndpc2UpIGlzIDMwIHNlY29uZHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVzcG9uc2UgdGltZW91dCAoY3VzdG9tIG9yaWdpbnMgb25seSldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td2ViLXZhbHVlcy1zcGVjaWZ5Lmh0bWwjRG93bmxvYWREaXN0VmFsdWVzT3JpZ2luUmVzcG9uc2VUaW1lb3V0KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblJlYWRUaW1lb3V0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBWUEMgb3JpZ2luIElELlxuICovXG5WcGNPcmlnaW5JZDogc3RyaW5nXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgaWRlbnRpZmllcyB3YXlzIGluIHdoaWNoIHlvdSB3YW50IHRvIHJlc3RyaWN0IGRpc3RyaWJ1dGlvbiBvZiB5b3VyIGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdHJpY3Rpb25zIHtcbkdlb1Jlc3RyaWN0aW9uOiBHZW9SZXN0cmljdGlvblxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRyb2xzIHRoZSBjb3VudHJpZXMgaW4gd2hpY2ggeW91ciBjb250ZW50IGlzIGRpc3RyaWJ1dGVkLiBDRiBkZXRlcm1pbmVzIHRoZSBsb2NhdGlvbiBvZiB5b3VyIHVzZXJzIHVzaW5nIGBgTWF4TWluZGBgIEdlb0lQIGRhdGFiYXNlcy4gVG8gZGlzYWJsZSBnZW8gcmVzdHJpY3Rpb24sIHJlbW92ZSB0aGUgW1Jlc3RyaWN0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tZGlzdHJpYnV0aW9uY29uZmlnLmh0bWwjY2ZuLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWRpc3RyaWJ1dGlvbmNvbmZpZy1yZXN0cmljdGlvbnMpIHByb3BlcnR5IGZyb20geW91ciBzdGFjayB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW9SZXN0cmljdGlvbiB7XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgYSBgYExvY2F0aW9uYGAgZWxlbWVudCBmb3IgZWFjaCBjb3VudHJ5IGluIHdoaWNoIHlvdSB3YW50IENsb3VkRnJvbnQgZWl0aGVyIHRvIGRpc3RyaWJ1dGUgeW91ciBjb250ZW50IChgYHdoaXRlbGlzdGBgKSBvciBub3QgZGlzdHJpYnV0ZSB5b3VyIGNvbnRlbnQgKGBgYmxhY2tsaXN0YGApLlxuICogIFRoZSBgYExvY2F0aW9uYGAgZWxlbWVudCBpcyBhIHR3by1sZXR0ZXIsIHVwcGVyY2FzZSBjb3VudHJ5IGNvZGUgZm9yIGEgY291bnRyeSB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgaW4geW91ciBgYGJsYWNrbGlzdGBgIG9yIGBgd2hpdGVsaXN0YGAuIEluY2x1ZGUgb25lIGBgTG9jYXRpb25gYCBlbGVtZW50IGZvciBlYWNoIGNvdW50cnkuXG4gKiAgQ2xvdWRGcm9udCBhbmQgYGBNYXhNaW5kYGAgYm90aCB1c2UgYGBJU08gMzE2NmBgIGNvdW50cnkgY29kZXMuIEZvciB0aGUgY3VycmVudCBsaXN0IG9mIGNvdW50cmllcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY29kZXMsIHNlZSBgYElTTyAzMTY2LTEtYWxwaGEtMmBgIGNvZGUgb24gdGhlICpJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uKiB3ZWJzaXRlLiBZb3UgY2FuIGFsc28gcmVmZXIgdG8gdGhlIGNvdW50cnkgbGlzdCBvbiB0aGUgQ2xvdWRGcm9udCBjb25zb2xlLCB3aGljaCBpbmNsdWRlcyBib3RoIGNvdW50cnkgbmFtZXMgYW5kIGNvZGVzLlxuICovXG5Mb2NhdGlvbnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgbWV0aG9kIHRoYXQgeW91IHdhbnQgdG8gdXNlIHRvIHJlc3RyaWN0IGRpc3RyaWJ1dGlvbiBvZiB5b3VyIGNvbnRlbnQgYnkgY291bnRyeTpcbiAqICAgKyAgYGBub25lYGA6IE5vIGdlbyByZXN0cmljdGlvbiBpcyBlbmFibGVkLCBtZWFuaW5nIGFjY2VzcyB0byBjb250ZW50IGlzIG5vdCByZXN0cmljdGVkIGJ5IGNsaWVudCBnZW8gbG9jYXRpb24uXG4gKiAgICsgIGBgYmxhY2tsaXN0YGA6IFRoZSBgYExvY2F0aW9uYGAgZWxlbWVudHMgc3BlY2lmeSB0aGUgY291bnRyaWVzIGluIHdoaWNoIHlvdSBkb24ndCB3YW50IENsb3VkRnJvbnQgdG8gZGlzdHJpYnV0ZSB5b3VyIGNvbnRlbnQuXG4gKiAgICsgIGBgd2hpdGVsaXN0YGA6IFRoZSBgYExvY2F0aW9uYGAgZWxlbWVudHMgc3BlY2lmeSB0aGUgY291bnRyaWVzIGluIHdoaWNoIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gZGlzdHJpYnV0ZSB5b3VyIGNvbnRlbnQuXG4gKi9cblJlc3RyaWN0aW9uVHlwZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBvcmlnaW4gYXMgYW4gUzMgYnVja2V0LlxuICogICBUaGlzIHByb3BlcnR5IGlzIGxlZ2FjeS4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBbT3JpZ2luXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1vcmlnaW4uaHRtbCkgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lTM09yaWdpbiB7XG4vKipcbiAqIFRoZSBkb21haW4gbmFtZSBhc3NpZ25lZCB0byB5b3VyIENGIGRpc3RyaWJ1dGlvbi5cbiAqL1xuRE5TTmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSBDRiBvcmlnaW4gYWNjZXNzIGlkZW50aXR5IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkaXN0cmlidXRpb24uIFVzZSBhbiBvcmlnaW4gYWNjZXNzIGlkZW50aXR5IHRvIGNvbmZpZ3VyZSB0aGUgZGlzdHJpYnV0aW9uIHNvIHRoYXQgZW5kIHVzZXJzIGNhbiBvbmx5IGFjY2VzcyBvYmplY3RzIGluIGFuIFMzIHRocm91Z2ggQ0YuXG4gKiAgIFRoaXMgcHJvcGVydHkgaXMgbGVnYWN5LiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIFtPcmlnaW5BY2Nlc3NDb250cm9sXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtY2xvdWRmcm9udC1vcmlnaW5hY2Nlc3Njb250cm9sLmh0bWwpIGluc3RlYWQuXG4gKi9cbk9yaWdpbkFjY2Vzc0lkZW50aXR5Pzogc3RyaW5nXG59XG4vKipcbiAqIEEgbGlzdCBvZiBwYXJhbWV0ZXIgdmFsdWVzIHRvIGFkZCB0byB0aGUgcmVzb3VyY2UuIEEgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyBhIGtleS12YWx1ZSBwYWlyLiBBIHZhbGlkIHBhcmFtZXRlciB2YWx1ZSBtdXN0IGV4aXN0IGZvciBhbnkgcGFyYW1ldGVyIHRoYXQgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIHRoZSBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlckRlZmluaXRpb24ge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlxuICovXG5OYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIHZhbHVlIHRoYXQgeW91IGFzc2lnbmVkIHRvIHRoZSBwYXJhbWV0ZXIuXG4gKi9cbkRlZmluaXRpb246IHtcblN0cmluZ1NjaGVtYT86IHtcbkNvbW1lbnQ/OiBzdHJpbmdcbkRlZmF1bHRWYWx1ZT86IHN0cmluZ1xuUmVxdWlyZWQ6IGJvb2xlYW5cbn1cbn1cbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBkZXRlcm1pbmVzIHRoZSBkaXN0cmlidXRpb24ncyBTU0wvVExTIGNvbmZpZ3VyYXRpb24gZm9yIGNvbW11bmljYXRpbmcgd2l0aCB2aWV3ZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdlckNlcnRpZmljYXRlIHtcbi8qKlxuICogSW4gQ2xvdWRGb3JtYXRpb24sIHRoaXMgZmllbGQgbmFtZSBpcyBgYEFjbUNlcnRpZmljYXRlQXJuYGAuIE5vdGUgdGhlIGRpZmZlcmVudCBjYXBpdGFsaXphdGlvbi5cbiAqICAgSWYgdGhlIGRpc3RyaWJ1dGlvbiB1c2VzIGBgQWxpYXNlc2BgIChhbHRlcm5hdGUgZG9tYWluIG5hbWVzIG9yIENOQU1FcykgYW5kIHRoZSBTU0wvVExTIGNlcnRpZmljYXRlIGlzIHN0b3JlZCBpbiBbKEFDTSldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hY20vbGF0ZXN0L3VzZXJndWlkZS9hY20tb3ZlcnZpZXcuaHRtbCksIHByb3ZpZGUgdGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBBQ00gY2VydGlmaWNhdGUuIENsb3VkRnJvbnQgb25seSBzdXBwb3J0cyBBQ00gY2VydGlmaWNhdGVzIGluIHRoZSBVUyBFYXN0IChOLiBWaXJnaW5pYSkgUmVnaW9uIChgYHVzLWVhc3QtMWBgKS5cbiAqICBJZiB5b3Ugc3BlY2lmeSBhbiBBQ00gY2VydGlmaWNhdGUgQVJOLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdmFsdWVzIGZvciBgYE1pbmltdW1Qcm90b2NvbFZlcnNpb25gYCBhbmQgYGBTU0xTdXBwb3J0TWV0aG9kYGAuIChJbiBDbG91ZEZvcm1hdGlvbiwgdGhlIGZpZWxkIG5hbWUgaXMgYGBTc2xTdXBwb3J0TWV0aG9kYGAuIE5vdGUgdGhlIGRpZmZlcmVudCBjYXBpdGFsaXphdGlvbi4pXG4gKi9cbkFjbUNlcnRpZmljYXRlQXJuPzogc3RyaW5nXG4vKipcbiAqIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyB0aGUgQ2xvdWRGcm9udCBkb21haW4gbmFtZSBzdWNoIGFzIGBgZDExMTExMWFiY2RlZjguY2xvdWRmcm9udC5uZXRgYCwgc2V0IHRoaXMgZmllbGQgdG8gYGB0cnVlYGAuXG4gKiAgSWYgdGhlIGRpc3RyaWJ1dGlvbiB1c2VzIGBgQWxpYXNlc2BgIChhbHRlcm5hdGUgZG9tYWluIG5hbWVzIG9yIENOQU1FcyksIG9taXQgdGhpcyBmaWVsZCBhbmQgc3BlY2lmeSB2YWx1ZXMgZm9yIHRoZSBmb2xsb3dpbmcgZmllbGRzOlxuICogICArICBgYEFjbUNlcnRpZmljYXRlQXJuYGAgb3IgYGBJYW1DZXJ0aWZpY2F0ZUlkYGAgKHNwZWNpZnkgYSB2YWx1ZSBmb3Igb25lLCBub3QgYm90aCkgXG4gKiAgICsgICBgYE1pbmltdW1Qcm90b2NvbFZlcnNpb25gYCBcbiAqICAgKyAgIGBgU3NsU3VwcG9ydE1ldGhvZGBgXG4gKi9cbkNsb3VkRnJvbnREZWZhdWx0Q2VydGlmaWNhdGU/OiBib29sZWFuXG4vKipcbiAqIEluIENsb3VkRm9ybWF0aW9uLCB0aGlzIGZpZWxkIG5hbWUgaXMgYGBJYW1DZXJ0aWZpY2F0ZUlkYGAuIE5vdGUgdGhlIGRpZmZlcmVudCBjYXBpdGFsaXphdGlvbi5cbiAqICAgSWYgdGhlIGRpc3RyaWJ1dGlvbiB1c2VzIGBgQWxpYXNlc2BgIChhbHRlcm5hdGUgZG9tYWluIG5hbWVzIG9yIENOQU1FcykgYW5kIHRoZSBTU0wvVExTIGNlcnRpZmljYXRlIGlzIHN0b3JlZCBpbiBbKElBTSldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9pZF9jcmVkZW50aWFsc19zZXJ2ZXItY2VydHMuaHRtbCksIHByb3ZpZGUgdGhlIElEIG9mIHRoZSBJQU0gY2VydGlmaWNhdGUuXG4gKiAgSWYgeW91IHNwZWNpZnkgYW4gSUFNIGNlcnRpZmljYXRlIElELCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdmFsdWVzIGZvciBgYE1pbmltdW1Qcm90b2NvbFZlcnNpb25gYCBhbmQgYGBTU0xTdXBwb3J0TWV0aG9kYGAuIChJbiBDbG91ZEZvcm1hdGlvbiwgdGhlIGZpZWxkIG5hbWUgaXMgYGBTc2xTdXBwb3J0TWV0aG9kYGAuIE5vdGUgdGhlIGRpZmZlcmVudCBjYXBpdGFsaXphdGlvbi4pXG4gKi9cbklhbUNlcnRpZmljYXRlSWQ/OiBzdHJpbmdcbi8qKlxuICogSWYgdGhlIGRpc3RyaWJ1dGlvbiB1c2VzIGBgQWxpYXNlc2BgIChhbHRlcm5hdGUgZG9tYWluIG5hbWVzIG9yIENOQU1FcyksIHNwZWNpZnkgdGhlIHNlY3VyaXR5IHBvbGljeSB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gdXNlIGZvciBIVFRQUyBjb25uZWN0aW9ucyB3aXRoIHZpZXdlcnMuIFRoZSBzZWN1cml0eSBwb2xpY3kgZGV0ZXJtaW5lcyB0d28gc2V0dGluZ3M6XG4gKiAgICsgIFRoZSBtaW5pbXVtIFNTTC9UTFMgcHJvdG9jb2wgdGhhdCBDbG91ZEZyb250IGNhbiB1c2UgdG8gY29tbXVuaWNhdGUgd2l0aCB2aWV3ZXJzLlxuICogICArICBUaGUgY2lwaGVycyB0aGF0IENsb3VkRnJvbnQgY2FuIHVzZSB0byBlbmNyeXB0IHRoZSBjb250ZW50IHRoYXQgaXQgcmV0dXJucyB0byB2aWV3ZXJzLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZWN1cml0eSBQb2xpY3ldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td2ViLXZhbHVlcy1zcGVjaWZ5Lmh0bWwjRG93bmxvYWREaXN0VmFsdWVzLXNlY3VyaXR5LXBvbGljeSkgYW5kIFtTdXBwb3J0ZWQgUHJvdG9jb2xzIGFuZCBDaXBoZXJzIEJldHdlZW4gVmlld2VycyBhbmQgQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3NlY3VyZS1jb25uZWN0aW9ucy1zdXBwb3J0ZWQtdmlld2VyLXByb3RvY29scy1jaXBoZXJzLmh0bWwjc2VjdXJlLWNvbm5lY3Rpb25zLXN1cHBvcnRlZC1jaXBoZXJzKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgIE9uIHRoZSBDbG91ZEZyb250IGNvbnNvbGUsIHRoaXMgc2V0dGluZyBpcyBjYWxsZWQgKlNlY3VyaXR5IFBvbGljeSouXG4gKiAgIFdoZW4geW91J3JlIHVzaW5nIFNOSSBvbmx5ICh5b3Ugc2V0IGBgU1NMU3VwcG9ydE1ldGhvZGBgIHRvIGBgc25pLW9ubHlgYCksIHlvdSBtdXN0IHNwZWNpZnkgYGBUTFN2MWBgIG9yIGhpZ2hlci4gKEluIENsb3VkRm9ybWF0aW9uLCB0aGUgZmllbGQgbmFtZSBpcyBgYFNzbFN1cHBvcnRNZXRob2RgYC4gTm90ZSB0aGUgZGlmZmVyZW50IGNhcGl0YWxpemF0aW9uLilcbiAqICBJZiB0aGUgZGlzdHJpYnV0aW9uIHVzZXMgdGhlIENsb3VkRnJvbnQgZG9tYWluIG5hbWUgc3VjaCBhcyBgYGQxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0YGAgKHlvdSBzZXQgYGBDbG91ZEZyb250RGVmYXVsdENlcnRpZmljYXRlYGAgdG8gYGB0cnVlYGApLCBDbG91ZEZyb250IGF1dG9tYXRpY2FsbHkgc2V0cyB0aGUgc2VjdXJpdHkgcG9saWN5IHRvIGBgVExTdjFgYCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSB0aGF0IHlvdSBzZXQgaGVyZS5cbiAqL1xuTWluaW11bVByb3RvY29sVmVyc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBJbiBDbG91ZEZvcm1hdGlvbiwgdGhpcyBmaWVsZCBuYW1lIGlzIGBgU3NsU3VwcG9ydE1ldGhvZGBgLiBOb3RlIHRoZSBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24uXG4gKiAgIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyBgYEFsaWFzZXNgYCAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyBvciBDTkFNRXMpLCBzcGVjaWZ5IHdoaWNoIHZpZXdlcnMgdGhlIGRpc3RyaWJ1dGlvbiBhY2NlcHRzIEhUVFBTIGNvbm5lY3Rpb25zIGZyb20uXG4gKiAgICsgIGBgc25pLW9ubHlgYCDigJMgVGhlIGRpc3RyaWJ1dGlvbiBhY2NlcHRzIEhUVFBTIGNvbm5lY3Rpb25zIGZyb20gb25seSB2aWV3ZXJzIHRoYXQgc3VwcG9ydCBbc2VydmVyIG5hbWUgaW5kaWNhdGlvbiAoU05JKV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NlcnZlcl9OYW1lX0luZGljYXRpb24pLiBUaGlzIGlzIHJlY29tbWVuZGVkLiBNb3N0IGJyb3dzZXJzIGFuZCBjbGllbnRzIHN1cHBvcnQgU05JLlxuICogICArICBgYHZpcGBgIOKAkyBUaGUgZGlzdHJpYnV0aW9uIGFjY2VwdHMgSFRUUFMgY29ubmVjdGlvbnMgZnJvbSBhbGwgdmlld2VycyBpbmNsdWRpbmcgdGhvc2UgdGhhdCBkb24ndCBzdXBwb3J0IFNOSS4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQsIGFuZCByZXN1bHRzIGluIGFkZGl0aW9uYWwgbW9udGhseSBjaGFyZ2VzIGZyb20gQ2xvdWRGcm9udC5cbiAqICAgKyAgYGBzdGF0aWMtaXBgYCAtIERvIG5vdCBzcGVjaWZ5IHRoaXMgdmFsdWUgdW5sZXNzIHlvdXIgZGlzdHJpYnV0aW9uIGhhcyBiZWVuIGVuYWJsZWQgZm9yIHRoaXMgZmVhdHVyZSBieSB0aGUgQ2xvdWRGcm9udCB0ZWFtLiBJZiB5b3UgaGF2ZSBhIHVzZSBjYXNlIHRoYXQgcmVxdWlyZXMgc3RhdGljIElQIGFkZHJlc3NlcyBmb3IgYSBkaXN0cmlidXRpb24sIGNvbnRhY3QgQ2xvdWRGcm9udCB0aHJvdWdoIHRoZSBbQ2VudGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3VwcG9ydC9ob21lKS5cbiAqICAgXG4gKiAgSWYgdGhlIGRpc3RyaWJ1dGlvbiB1c2VzIHRoZSBDbG91ZEZyb250IGRvbWFpbiBuYW1lIHN1Y2ggYXMgYGBkMTExMTExYWJjZGVmOC5jbG91ZGZyb250Lm5ldGBgLCBkb24ndCBzZXQgYSB2YWx1ZSBmb3IgdGhpcyBmaWVsZC5cbiAqL1xuU3NsU3VwcG9ydE1ldGhvZD86IHN0cmluZ1xufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGBgVGFnYGAga2V5IGFuZCBgYFRhZ2BgIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIEEgc3RyaW5nIHRoYXQgY29udGFpbnMgYGBUYWdgYCBrZXkuXG4gKiAgVGhlIHN0cmluZyBsZW5ndGggc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMTI4IGNoYXJhY3RlcnMuIFZhbGlkIGNoYXJhY3RlcnMgaW5jbHVkZSBgYGEtemBgLCBgYEEtWmBgLCBgYDAtOWBgLCBzcGFjZSwgYW5kIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgYGBfIC0gLiA6IC8gPSArIEBgYC5cbiAqL1xuS2V5OiBzdHJpbmdcbi8qKlxuICogQSBzdHJpbmcgdGhhdCBjb250YWlucyBhbiBvcHRpb25hbCBgYFRhZ2BgIHZhbHVlLlxuICogIFRoZSBzdHJpbmcgbGVuZ3RoIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDI1NiBjaGFyYWN0ZXJzLiBWYWxpZCBjaGFyYWN0ZXJzIGluY2x1ZGUgYGBhLXpgYCwgYGBBLVpgYCwgYGAwLTlgYCwgc3BhY2UsIGFuZCB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGBgXyAtIC4gOiAvID0gKyBAYGAuXG4gKi9cblZhbHVlOiBzdHJpbmdcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgZGlzdHJpYnV0aW9uIHRlbGxzIENsb3VkRnJvbnQgd2hlcmUgeW91IHdhbnQgY29udGVudCB0byBiZSBkZWxpdmVyZWQgZnJvbSwgYW5kIHRoZSBkZXRhaWxzIGFib3V0IGhvdyB0byB0cmFjayBhbmQgbWFuYWdlIGNvbnRlbnQgZGVsaXZlcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19DTE9VREZST05UX0RJU1RSSUJVVElPTiB7XG5EaXN0cmlidXRpb25Db25maWc6IERpc3RyaWJ1dGlvbkNvbmZpZ1xuRG9tYWluTmFtZT86IHN0cmluZ1xuSWQ/OiBzdHJpbmdcbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgYGBUYWdgYCBlbGVtZW50cy5cbiAqL1xuVGFncz86IFRhZ1tdXG59XG4vKipcbiAqIFRoZSBkaXN0cmlidXRpb24ncyBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3RyaWJ1dGlvbkNvbmZpZyB7XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgQ05BTUVzIChhbHRlcm5hdGUgZG9tYWluIG5hbWVzKSwgaWYgYW55LCBmb3IgdGhpcyBkaXN0cmlidXRpb24uXG4gKi9cbkFsaWFzZXM/OiBzdHJpbmdbXVxuLyoqXG4gKiBJRCBvZiB0aGUgQW55Y2FzdCBzdGF0aWMgSVAgbGlzdCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICovXG5BbnljYXN0SXBMaXN0SWQ/OiBzdHJpbmdcbi8qKlxuICogQW4gYWxpYXMgZm9yIHRoZSBDRiBkaXN0cmlidXRpb24ncyBkb21haW4gbmFtZS5cbiAqICAgVGhpcyBwcm9wZXJ0eSBpcyBsZWdhY3kuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgW0FsaWFzZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWRpc3RyaWJ1dGlvbmNvbmZpZy5odG1sI2Nmbi1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1kaXN0cmlidXRpb25jb25maWctYWxpYXNlcykgaW5zdGVhZC5cbiAqL1xuQ05BTUVzPzogc3RyaW5nW11cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgYGBDYWNoZUJlaGF2aW9yYGAgZWxlbWVudHMuXG4gKi9cbkNhY2hlQmVoYXZpb3JzPzogQ2FjaGVCZWhhdmlvcltdXG4vKipcbiAqIEEgY29tbWVudCB0byBkZXNjcmliZSB0aGUgZGlzdHJpYnV0aW9uLiBUaGUgY29tbWVudCBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMTI4IGNoYXJhY3RlcnMuXG4gKi9cbkNvbW1lbnQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIGNvbm5lY3Rpb24gbW9kZSB0byBmaWx0ZXIgZGlzdHJpYnV0aW9ucyBieS5cbiAqL1xuQ29ubmVjdGlvbk1vZGU/OiAoXCJkaXJlY3RcIiB8IFwidGVuYW50LW9ubHlcIilcbi8qKlxuICogVGhlIGlkZW50aWZpZXIgb2YgYSBjb250aW51b3VzIGRlcGxveW1lbnQgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGBgQ3JlYXRlQ29udGludW91c0RlcGxveW1lbnRQb2xpY3lgYC5cbiAqL1xuQ29udGludW91c0RlcGxveW1lbnRQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRyb2xzIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgIFdoZXRoZXIgQ2xvdWRGcm9udCByZXBsYWNlcyBIVFRQIHN0YXR1cyBjb2RlcyBpbiB0aGUgNHh4IGFuZCA1eHggcmFuZ2Ugd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZXMgYmVmb3JlIHJldHVybmluZyB0aGUgcmVzcG9uc2UgdG8gdGhlIHZpZXdlci5cbiAqICAgKyAgSG93IGxvbmcgQ2xvdWRGcm9udCBjYWNoZXMgSFRUUCBzdGF0dXMgY29kZXMgaW4gdGhlIDR4eCBhbmQgNXh4IHJhbmdlLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjdXN0b20gZXJyb3IgcGFnZXMsIHNlZSBbQ3VzdG9taXppbmcgRXJyb3IgUmVzcG9uc2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY3VzdG9tLWVycm9yLXBhZ2VzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ3VzdG9tRXJyb3JSZXNwb25zZXM/OiBDdXN0b21FcnJvclJlc3BvbnNlW11cbkN1c3RvbU9yaWdpbj86IExlZ2FjeUN1c3RvbU9yaWdpblxuRGVmYXVsdENhY2hlQmVoYXZpb3I6IERlZmF1bHRDYWNoZUJlaGF2aW9yXG4vKipcbiAqIFdoZW4gYSB2aWV3ZXIgcmVxdWVzdHMgdGhlIHJvb3QgVVJMIGZvciB5b3VyIGRpc3RyaWJ1dGlvbiwgdGhlIGRlZmF1bHQgcm9vdCBvYmplY3QgaXMgdGhlIG9iamVjdCB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gcmVxdWVzdCBmcm9tIHlvdXIgb3JpZ2luLiBGb3IgZXhhbXBsZSwgaWYgeW91ciByb290IFVSTCBpcyBgYGh0dHBzOi8vd3d3LmV4YW1wbGUuY29tYGAsIHlvdSBjYW4gc3BlY2lmeSBDbG91ZEZyb250IHRvIHJldHVybiB0aGUgYGBpbmRleC5odG1sYGAgZmlsZSBhcyB0aGUgZGVmYXVsdCByb290IG9iamVjdC4gWW91IGNhbiBzcGVjaWZ5IGEgZGVmYXVsdCByb290IG9iamVjdCBzbyB0aGF0IHZpZXdlcnMgc2VlIGEgc3BlY2lmaWMgZmlsZSBvciBvYmplY3QsIGluc3RlYWQgb2YgYW5vdGhlciBvYmplY3QgaW4geW91ciBkaXN0cmlidXRpb24gKGZvciBleGFtcGxlLCBgYGh0dHBzOi8vd3d3LmV4YW1wbGUuY29tL3Byb2R1Y3QtZGVzY3JpcHRpb24uaHRtbGBgKS4gQSBkZWZhdWx0IHJvb3Qgb2JqZWN0IGF2b2lkcyBleHBvc2luZyB0aGUgY29udGVudHMgb2YgeW91ciBkaXN0cmlidXRpb24uXG4gKiAgWW91IGNhbiBzcGVjaWZ5IHRoZSBvYmplY3QgbmFtZSBvciBhIHBhdGggdG8gdGhlIG9iamVjdCBuYW1lIChmb3IgZXhhbXBsZSwgYGBpbmRleC5odG1sYGAgb3IgYGBleGFtcGxlRm9sZGVyTmFtZS9pbmRleC5odG1sYGApLiBZb3VyIHN0cmluZyBjYW4ndCBiZWdpbiB3aXRoIGEgZm9yd2FyZCBzbGFzaCAoYGAvYGApLiBPbmx5IHNwZWNpZnkgdGhlIG9iamVjdCBuYW1lIG9yIHRoZSBwYXRoIHRvIHRoZSBvYmplY3QuXG4gKiAgSWYgeW91IGRvbid0IHdhbnQgdG8gc3BlY2lmeSBhIGRlZmF1bHQgcm9vdCBvYmplY3Qgd2hlbiB5b3UgY3JlYXRlIGEgZGlzdHJpYnV0aW9uLCBpbmNsdWRlIGFuIGVtcHR5IGBgRGVmYXVsdFJvb3RPYmplY3RgYCBlbGVtZW50LlxuICogIFRvIGRlbGV0ZSB0aGUgZGVmYXVsdCByb290IG9iamVjdCBmcm9tIGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiwgdXBkYXRlIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBhbmQgaW5jbHVkZSBhbiBlbXB0eSBgYERlZmF1bHRSb290T2JqZWN0YGAgZWxlbWVudC5cbiAqICBUbyByZXBsYWNlIHRoZSBkZWZhdWx0IHJvb3Qgb2JqZWN0LCB1cGRhdGUgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGFuZCBzcGVjaWZ5IHRoZSBuZXcgb2JqZWN0LlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZWZhdWx0IHJvb3Qgb2JqZWN0LCBzZWUgW1NwZWNpZnkgYSBkZWZhdWx0IHJvb3Qgb2JqZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRGVmYXVsdFJvb3RPYmplY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5EZWZhdWx0Um9vdE9iamVjdD86IHN0cmluZ1xuLyoqXG4gKiBGcm9tIHRoaXMgZmllbGQsIHlvdSBjYW4gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHNlbGVjdGVkIGRpc3RyaWJ1dGlvbi5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxuLyoqXG4gKiAoT3B0aW9uYWwpIFNwZWNpZnkgdGhlIEhUVFAgdmVyc2lvbihzKSB0aGF0IHlvdSB3YW50IHZpZXdlcnMgdG8gdXNlIHRvIGNvbW11bmljYXRlIHdpdGggQ0YuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBuZXcgZGlzdHJpYnV0aW9ucyBpcyBgYGh0dHAxLjFgYC5cbiAqICBGb3Igdmlld2VycyBhbmQgQ0YgdG8gdXNlIEhUVFAvMiwgdmlld2VycyBtdXN0IHN1cHBvcnQgVExTdjEuMiBvciBsYXRlciwgYW5kIG11c3Qgc3VwcG9ydCBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpLlxuICogIEZvciB2aWV3ZXJzIGFuZCBDRiB0byB1c2UgSFRUUC8zLCB2aWV3ZXJzIG11c3Qgc3VwcG9ydCBUTFN2MS4zIGFuZCBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpLiBDRiBzdXBwb3J0cyBIVFRQLzMgY29ubmVjdGlvbiBtaWdyYXRpb24gdG8gYWxsb3cgdGhlIHZpZXdlciB0byBzd2l0Y2ggbmV0d29ya3Mgd2l0aG91dCBsb3NpbmcgY29ubmVjdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY29ubmVjdGlvbiBtaWdyYXRpb24sIHNlZSBbQ29ubmVjdGlvbiBNaWdyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTAwMC5odG1sI25hbWUtY29ubmVjdGlvbi1taWdyYXRpb24pIGF0IFJGQyA5MDAwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzdXBwb3J0ZWQgVExTdjEuMyBjaXBoZXJzLCBzZWUgW1N1cHBvcnRlZCBwcm90b2NvbHMgYW5kIGNpcGhlcnMgYmV0d2VlbiB2aWV3ZXJzIGFuZCBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvc2VjdXJlLWNvbm5lY3Rpb25zLXN1cHBvcnRlZC12aWV3ZXItcHJvdG9jb2xzLWNpcGhlcnMuaHRtbCkuXG4gKi9cbkh0dHBWZXJzaW9uPzogc3RyaW5nXG4vKipcbiAqIElmIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gcmVzcG9uZCB0byBJUHY2IEROUyByZXF1ZXN0cyB3aXRoIGFuIElQdjYgYWRkcmVzcyBmb3IgeW91ciBkaXN0cmlidXRpb24sIHNwZWNpZnkgYGB0cnVlYGAuIElmIHlvdSBzcGVjaWZ5IGBgZmFsc2VgYCwgQ2xvdWRGcm9udCByZXNwb25kcyB0byBJUHY2IEROUyByZXF1ZXN0cyB3aXRoIHRoZSBETlMgcmVzcG9uc2UgY29kZSBgYE5PRVJST1JgYCBhbmQgd2l0aCBubyBJUCBhZGRyZXNzZXMuIFRoaXMgYWxsb3dzIHZpZXdlcnMgdG8gc3VibWl0IGEgc2Vjb25kIHJlcXVlc3QsIGZvciBhbiBJUHY0IGFkZHJlc3MgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLlxuICogIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgZW5hYmxlIElQdjYgaWYgeW91IGhhdmUgdXNlcnMgb24gSVB2NiBuZXR3b3JrcyB3aG8gd2FudCB0byBhY2Nlc3MgeW91ciBjb250ZW50LiBIb3dldmVyLCBpZiB5b3UncmUgdXNpbmcgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHlvdXIgY29udGVudCwgYW5kIGlmIHlvdSdyZSB1c2luZyBhIGN1c3RvbSBwb2xpY3kgdGhhdCBpbmNsdWRlcyB0aGUgYGBJcEFkZHJlc3NgYCBwYXJhbWV0ZXIgdG8gcmVzdHJpY3QgdGhlIElQIGFkZHJlc3NlcyB0aGF0IGNhbiBhY2Nlc3MgeW91ciBjb250ZW50LCBkb24ndCBlbmFibGUgSVB2Ni4gSWYgeW91IHdhbnQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHNvbWUgY29udGVudCBieSBJUCBhZGRyZXNzIGFuZCBub3QgcmVzdHJpY3QgYWNjZXNzIHRvIG90aGVyIGNvbnRlbnQgKG9yIHJlc3RyaWN0IGFjY2VzcyBidXQgbm90IGJ5IElQIGFkZHJlc3MpLCB5b3UgY2FuIGNyZWF0ZSB0d28gZGlzdHJpYnV0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgYSBTaWduZWQgVVJMIFVzaW5nIGEgQ3VzdG9tIFBvbGljeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3ByaXZhdGUtY29udGVudC1jcmVhdGluZy1zaWduZWQtdXJsLWN1c3RvbS1wb2xpY3kuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSdyZSB1c2luZyBhbiBSNTNBV1NJbnRsb25nIGFsaWFzIHJlc291cmNlIHJlY29yZCBzZXQgdG8gcm91dGUgdHJhZmZpYyB0byB5b3VyIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBzZWNvbmQgYWxpYXMgcmVzb3VyY2UgcmVjb3JkIHNldCB3aGVuIGJvdGggb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZTpcbiAqICAgKyAgWW91IGVuYWJsZSBJUHY2IGZvciB0aGUgZGlzdHJpYnV0aW9uXG4gKiAgICsgIFlvdSdyZSB1c2luZyBhbHRlcm5hdGUgZG9tYWluIG5hbWVzIGluIHRoZSBVUkxzIGZvciB5b3VyIG9iamVjdHNcbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUm91dGluZyBUcmFmZmljIHRvIGFuIEFtYXpvbiBDbG91ZEZyb250IFdlYiBEaXN0cmlidXRpb24gYnkgVXNpbmcgWW91ciBEb21haW4gTmFtZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3JvdXRpbmctdG8tY2xvdWRmcm9udC1kaXN0cmlidXRpb24uaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSBjcmVhdGVkIGEgQ05BTUUgcmVzb3VyY2UgcmVjb3JkIHNldCwgZWl0aGVyIHdpdGggUjUzQVdTSW50bG9uZyBvciB3aXRoIGFub3RoZXIgRE5TIHNlcnZpY2UsIHlvdSBkb24ndCBuZWVkIHRvIG1ha2UgYW55IGNoYW5nZXMuIEEgQ05BTUUgcmVjb3JkIHdpbGwgcm91dGUgdHJhZmZpYyB0byB5b3VyIGRpc3RyaWJ1dGlvbiByZWdhcmRsZXNzIG9mIHRoZSBJUCBhZGRyZXNzIGZvcm1hdCBvZiB0aGUgdmlld2VyIHJlcXVlc3QuXG4gKi9cbklQVjZFbmFibGVkPzogYm9vbGVhblxuTG9nZ2luZz86IExvZ2dpbmdcbk9yaWdpbkdyb3Vwcz86IE9yaWdpbkdyb3Vwc1xuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9yaWdpbnMgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLlxuICogIFNwZWNpZnkgYSB2YWx1ZSBmb3IgZWl0aGVyIHRoZSBgYE9yaWdpbnNgYCBvciBgYE9yaWdpbkdyb3Vwc2BgIHByb3BlcnR5LlxuICovXG5PcmlnaW5zPzogT3JpZ2luW11cbi8qKlxuICogVGhlIHByaWNlIGNsYXNzIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgbWF4aW11bSBwcmljZSB0aGF0IHlvdSB3YW50IHRvIHBheSBmb3IgQ2xvdWRGcm9udCBzZXJ2aWNlLiBJZiB5b3Ugc3BlY2lmeSBgYFByaWNlQ2xhc3NfQWxsYGAsIENsb3VkRnJvbnQgcmVzcG9uZHMgdG8gcmVxdWVzdHMgZm9yIHlvdXIgb2JqZWN0cyBmcm9tIGFsbCBDbG91ZEZyb250IGVkZ2UgbG9jYXRpb25zLlxuICogIElmIHlvdSBzcGVjaWZ5IGEgcHJpY2UgY2xhc3Mgb3RoZXIgdGhhbiBgYFByaWNlQ2xhc3NfQWxsYGAsIENsb3VkRnJvbnQgc2VydmVzIHlvdXIgb2JqZWN0cyBmcm9tIHRoZSBDbG91ZEZyb250IGVkZ2UgbG9jYXRpb24gdGhhdCBoYXMgdGhlIGxvd2VzdCBsYXRlbmN5IGFtb25nIHRoZSBlZGdlIGxvY2F0aW9ucyBpbiB5b3VyIHByaWNlIGNsYXNzLiBWaWV3ZXJzIHdobyBhcmUgaW4gb3IgbmVhciByZWdpb25zIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20geW91ciBzcGVjaWZpZWQgcHJpY2UgY2xhc3MgbWF5IGVuY291bnRlciBzbG93ZXIgcGVyZm9ybWFuY2UuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHJpY2UgY2xhc3Nlcywgc2VlIFtDaG9vc2luZyB0aGUgUHJpY2UgQ2xhc3MgZm9yIGEgQ2xvdWRGcm9udCBEaXN0cmlidXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9QcmljZUNsYXNzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi4gRm9yIGluZm9ybWF0aW9uIGFib3V0IENsb3VkRnJvbnQgcHJpY2luZywgaW5jbHVkaW5nIGhvdyBwcmljZSBjbGFzc2VzIChzdWNoIGFzIFByaWNlIENsYXNzIDEwMCkgbWFwIHRvIENsb3VkRnJvbnQgcmVnaW9ucywgc2VlIFtBbWF6b24gQ2xvdWRGcm9udCBQcmljaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9wcmljaW5nLykuXG4gKi9cblByaWNlQ2xhc3M/OiBzdHJpbmdcblJlc3RyaWN0aW9ucz86IFJlc3RyaWN0aW9uc1xuUzNPcmlnaW4/OiBMZWdhY3lTM09yaWdpblxuLyoqXG4gKiBBIEJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RhZ2luZyBkaXN0cmlidXRpb24uIFdoZW4gdGhpcyB2YWx1ZSBpcyBgYHRydWVgYCwgdGhpcyBpcyBhIHN0YWdpbmcgZGlzdHJpYnV0aW9uLiBXaGVuIHRoaXMgdmFsdWUgaXMgYGBmYWxzZWBgLCB0aGlzIGlzIG5vdCBhIHN0YWdpbmcgZGlzdHJpYnV0aW9uLlxuICovXG5TdGFnaW5nPzogYm9vbGVhblxuLyoqXG4gKiBBIGRpc3RyaWJ1dGlvbiB0ZW5hbnQgY29uZmlndXJhdGlvbi5cbiAqL1xuVGVuYW50Q29uZmlnPzoge1xuUGFyYW1ldGVyRGVmaW5pdGlvbnM/OiBQYXJhbWV0ZXJEZWZpbml0aW9uW11cbn1cblZpZXdlckNlcnRpZmljYXRlPzogVmlld2VyQ2VydGlmaWNhdGVcbi8qKlxuICogQSB1bmlxdWUgaWRlbnRpZmllciB0aGF0IHNwZWNpZmllcyB0aGUgV0FGIHdlYiBBQ0wsIGlmIGFueSwgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBkaXN0cmlidXRpb24uIFRvIHNwZWNpZnkgYSB3ZWIgQUNMIGNyZWF0ZWQgdXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFdBRiwgdXNlIHRoZSBBQ0wgQVJOLCBmb3IgZXhhbXBsZSBgYGFybjphd3M6d2FmdjI6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpnbG9iYWwvd2ViYWNsL0V4YW1wbGVXZWJBQ0wvYTFiMmMzZDQtNTY3OC05MGFiLWNkZWYtRVhBTVBMRTExMTExYGAuIFRvIHNwZWNpZnkgYSB3ZWIgQUNMIGNyZWF0ZWQgdXNpbmcgV0FGIENsYXNzaWMsIHVzZSB0aGUgQUNMIElELCBmb3IgZXhhbXBsZSBgYGExYjJjM2Q0LTU2NzgtOTBhYi1jZGVmLUVYQU1QTEUxMTExMWBgLlxuICogIFdBRiBpcyBhIHdlYiBhcHBsaWNhdGlvbiBmaXJld2FsbCB0aGF0IGxldHMgeW91IG1vbml0b3IgdGhlIEhUVFAgYW5kIEhUVFBTIHJlcXVlc3RzIHRoYXQgYXJlIGZvcndhcmRlZCB0byBDbG91ZEZyb250LCBhbmQgbGV0cyB5b3UgY29udHJvbCBhY2Nlc3MgdG8geW91ciBjb250ZW50LiBCYXNlZCBvbiBjb25kaXRpb25zIHRoYXQgeW91IHNwZWNpZnksIHN1Y2ggYXMgdGhlIElQIGFkZHJlc3NlcyB0aGF0IHJlcXVlc3RzIG9yaWdpbmF0ZSBmcm9tIG9yIHRoZSB2YWx1ZXMgb2YgcXVlcnkgc3RyaW5ncywgQ2xvdWRGcm9udCByZXNwb25kcyB0byByZXF1ZXN0cyBlaXRoZXIgd2l0aCB0aGUgcmVxdWVzdGVkIGNvbnRlbnQgb3Igd2l0aCBhbiBIVFRQIDQwMyBzdGF0dXMgY29kZSAoRm9yYmlkZGVuKS4gWW91IGNhbiBhbHNvIGNvbmZpZ3VyZSBDbG91ZEZyb250IHRvIHJldHVybiBhIGN1c3RvbSBlcnJvciBwYWdlIHdoZW4gYSByZXF1ZXN0IGlzIGJsb2NrZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFdBRiwgc2VlIHRoZSBbRGV2ZWxvcGVyIEd1aWRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vd2FmL2xhdGVzdC9kZXZlbG9wZXJndWlkZS93aGF0LWlzLWF3cy13YWYuaHRtbCkuXG4gKi9cbldlYkFDTElkPzogc3RyaW5nXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgZGVzY3JpYmVzIGhvdyBDbG91ZEZyb250IHByb2Nlc3NlcyByZXF1ZXN0cy5cbiAqICBZb3UgbXVzdCBjcmVhdGUgYXQgbGVhc3QgYXMgbWFueSBjYWNoZSBiZWhhdmlvcnMgKGluY2x1ZGluZyB0aGUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvcikgYXMgeW91IGhhdmUgb3JpZ2lucyBpZiB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHNlcnZlIG9iamVjdHMgZnJvbSBhbGwgb2YgdGhlIG9yaWdpbnMuIEVhY2ggY2FjaGUgYmVoYXZpb3Igc3BlY2lmaWVzIHRoZSBvbmUgb3JpZ2luIGZyb20gd2hpY2ggeW91IHdhbnQgQ2xvdWRGcm9udCB0byBnZXQgb2JqZWN0cy4gSWYgeW91IGhhdmUgdHdvIG9yaWdpbnMgYW5kIG9ubHkgdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IsIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yIHdpbGwgY2F1c2UgQ2xvdWRGcm9udCB0byBnZXQgb2JqZWN0cyBmcm9tIG9uZSBvZiB0aGUgb3JpZ2lucywgYnV0IHRoZSBvdGhlciBvcmlnaW4gaXMgbmV2ZXIgdXNlZC5cbiAqICBGb3IgdGhlIGN1cnJlbnQgcXVvdGEgKGZvcm1lcmx5IGtub3duIGFzIGxpbWl0KSBvbiB0aGUgbnVtYmVyIG9mIGNhY2hlIGJlaGF2aW9ycyB0aGF0IHlvdSBjYW4gYWRkIHRvIGEgZGlzdHJpYnV0aW9uLCBzZWUgW1F1b3Rhc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Nsb3VkZnJvbnQtbGltaXRzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzcGVjaWZ5IGFueSBjYWNoZSBiZWhhdmlvcnMsIGluY2x1ZGUgb25seSBhbiBlbXB0eSBgYENhY2hlQmVoYXZpb3JzYGAgZWxlbWVudC4gRG9uJ3Qgc3BlY2lmeSBhbiBlbXB0eSBpbmRpdmlkdWFsIGBgQ2FjaGVCZWhhdmlvcmBgIGVsZW1lbnQsIGJlY2F1c2UgdGhpcyBpcyBpbnZhbGlkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDYWNoZUJlaGF2aW9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkZnJvbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ2FjaGVCZWhhdmlvcnMuaHRtbCkuIFxuICogIFRvIGRlbGV0ZSBhbGwgY2FjaGUgYmVoYXZpb3JzIGluIGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiwgdXBkYXRlIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBhbmQgaW5jbHVkZSBvbmx5IGFuIGVtcHR5IGBgQ2FjaGVCZWhhdmlvcnNgYCBlbGVtZW50LlxuICogIFRvIGFkZCwgY2hhbmdlLCBvciByZW1vdmUgb25lIG9yIG1vcmUgY2FjaGUgYmVoYXZpb3JzLCB1cGRhdGUgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGFuZCBzcGVjaWZ5IGFsbCBvZiB0aGUgY2FjaGUgYmVoYXZpb3JzIHRoYXQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiB0aGUgdXBkYXRlZCBkaXN0cmlidXRpb24uXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FjaGUgYmVoYXZpb3JzLCBzZWUgW0NhY2hlIEJlaGF2aW9yIFNldHRpbmdzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc0NhY2hlQmVoYXZpb3IpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWNoZUJlaGF2aW9yIHtcbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250cm9scyB3aGljaCBIVFRQIG1ldGhvZHMgQ2xvdWRGcm9udCBwcm9jZXNzZXMgYW5kIGZvcndhcmRzIHRvIHlvdXIgQW1hem9uIFMzIGJ1Y2tldCBvciB5b3VyIGN1c3RvbSBvcmlnaW4uIFRoZXJlIGFyZSB0aHJlZSBjaG9pY2VzOlxuICogICArICBDbG91ZEZyb250IGZvcndhcmRzIG9ubHkgYGBHRVRgYCBhbmQgYGBIRUFEYGAgcmVxdWVzdHMuXG4gKiAgICsgIENsb3VkRnJvbnQgZm9yd2FyZHMgb25seSBgYEdFVGBgLCBgYEhFQURgYCwgYW5kIGBgT1BUSU9OU2BgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGZvcndhcmRzIGBgR0VULCBIRUFELCBPUFRJT05TLCBQVVQsIFBBVENILCBQT1NUYGAsIGFuZCBgYERFTEVURWBgIHJlcXVlc3RzLlxuICogICBcbiAqICBJZiB5b3UgcGljayB0aGUgdGhpcmQgY2hvaWNlLCB5b3UgbWF5IG5lZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHlvdXIgQW1hem9uIFMzIGJ1Y2tldCBvciB0byB5b3VyIGN1c3RvbSBvcmlnaW4gc28gdXNlcnMgY2FuJ3QgcGVyZm9ybSBvcGVyYXRpb25zIHRoYXQgeW91IGRvbid0IHdhbnQgdGhlbSB0by4gRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBub3Qgd2FudCB1c2VycyB0byBoYXZlIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBvYmplY3RzIGZyb20geW91ciBvcmlnaW4uXG4gKi9cbkFsbG93ZWRNZXRob2RzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjYWNoZSBwb2xpY3kgdGhhdCBpcyBhdHRhY2hlZCB0byB0aGlzIGNhY2hlIGJlaGF2aW9yLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBgYENhY2hlQmVoYXZpb3JgYCBtdXN0IGluY2x1ZGUgZWl0aGVyIGEgYGBDYWNoZVBvbGljeUlkYGAgb3IgYGBGb3J3YXJkZWRWYWx1ZXNgYC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGBgQ2FjaGVQb2xpY3lJZGBgLlxuICovXG5DYWNoZVBvbGljeUlkPzogc3RyaW5nXG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hldGhlciBDbG91ZEZyb250IGNhY2hlcyB0aGUgcmVzcG9uc2UgdG8gcmVxdWVzdHMgdXNpbmcgdGhlIHNwZWNpZmllZCBIVFRQIG1ldGhvZHMuIFRoZXJlIGFyZSB0d28gY2hvaWNlczpcbiAqICAgKyAgQ2xvdWRGcm9udCBjYWNoZXMgcmVzcG9uc2VzIHRvIGBgR0VUYGAgYW5kIGBgSEVBRGBgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGNhY2hlcyByZXNwb25zZXMgdG8gYGBHRVRgYCwgYGBIRUFEYGAsIGFuZCBgYE9QVElPTlNgYCByZXF1ZXN0cy5cbiAqICAgXG4gKiAgSWYgeW91IHBpY2sgdGhlIHNlY29uZCBjaG9pY2UgZm9yIHlvdXIgQW1hem9uIFMzIE9yaWdpbiwgeW91IG1heSBuZWVkIHRvIGZvcndhcmQgQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QsIEFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycywgYW5kIE9yaWdpbiBoZWFkZXJzIGZvciB0aGUgcmVzcG9uc2VzIHRvIGJlIGNhY2hlZCBjb3JyZWN0bHkuXG4gKi9cbkNhY2hlZE1ldGhvZHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gYXV0b21hdGljYWxseSBjb21wcmVzcyBjZXJ0YWluIGZpbGVzIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yLiBJZiBzbywgc3BlY2lmeSB0cnVlOyBpZiBub3QsIHNwZWNpZnkgZmFsc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpbmcgQ29tcHJlc3NlZCBGaWxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1NlcnZpbmdDb21wcmVzc2VkRmlsZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Db21wcmVzcz86IGJvb2xlYW5cbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIHRoZSBgYERlZmF1bHRUVExgYCBmaWVsZCBpbiBhIGNhY2hlIHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgZGVmYXVsdCBhbW91bnQgb2YgdGltZSB0aGF0IHlvdSB3YW50IG9iamVjdHMgdG8gc3RheSBpbiBDbG91ZEZyb250IGNhY2hlcyBiZWZvcmUgQ2xvdWRGcm9udCBmb3J3YXJkcyBhbm90aGVyIHJlcXVlc3QgdG8geW91ciBvcmlnaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkLiBUaGUgdmFsdWUgdGhhdCB5b3Ugc3BlY2lmeSBhcHBsaWVzIG9ubHkgd2hlbiB5b3VyIG9yaWdpbiBkb2VzIG5vdCBhZGQgSFRUUCBoZWFkZXJzIHN1Y2ggYXMgYGBDYWNoZS1Db250cm9sIG1heC1hZ2VgYCwgYGBDYWNoZS1Db250cm9sIHMtbWF4YWdlYGAsIGFuZCBgYEV4cGlyZXNgYCB0byBvYmplY3RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNYW5hZ2luZyBIb3cgTG9uZyBDb250ZW50IFN0YXlzIGluIGFuIEVkZ2UgQ2FjaGUgKEV4cGlyYXRpb24pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkRlZmF1bHRUVEw/OiBudW1iZXJcbi8qKlxuICogVGhlIHZhbHVlIG9mIGBgSURgYCBmb3IgdGhlIGZpZWxkLWxldmVsIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gdXNlIGZvciBlbmNyeXB0aW5nIHNwZWNpZmljIGZpZWxkcyBvZiBkYXRhIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yLlxuICovXG5GaWVsZExldmVsRW5jcnlwdGlvbklkPzogc3RyaW5nXG5Gb3J3YXJkZWRWYWx1ZXM/OiBGb3J3YXJkZWRWYWx1ZXNcbi8qKlxuICogQSBsaXN0IG9mIENsb3VkRnJvbnQgZnVuY3Rpb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlIGJlaGF2aW9yLiBDbG91ZEZyb250IGZ1bmN0aW9ucyBtdXN0IGJlIHB1Ymxpc2hlZCB0byB0aGUgYGBMSVZFYGAgc3RhZ2UgdG8gYXNzb2NpYXRlIHRoZW0gd2l0aCBhIGNhY2hlIGJlaGF2aW9yLlxuICovXG5GdW5jdGlvbkFzc29jaWF0aW9ucz86IEZ1bmN0aW9uQXNzb2NpYXRpb25bXVxuR3JwY0NvbmZpZz86IEdycGNDb25maWdcbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgTGFtYmRhQEVkZ2UgZnVuY3Rpb24gYXNzb2NpYXRpb25zIGZvciBhIGNhY2hlIGJlaGF2aW9yLlxuICovXG5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9ucz86IExhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25bXVxuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIGBgTWF4VFRMYGAgZmllbGQgaW4gYSBjYWNoZSBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdGhhdCB5b3Ugd2FudCBvYmplY3RzIHRvIHN0YXkgaW4gQ2xvdWRGcm9udCBjYWNoZXMgYmVmb3JlIENsb3VkRnJvbnQgZm9yd2FyZHMgYW5vdGhlciByZXF1ZXN0IHRvIHlvdXIgb3JpZ2luIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBvYmplY3QgaGFzIGJlZW4gdXBkYXRlZC4gVGhlIHZhbHVlIHRoYXQgeW91IHNwZWNpZnkgYXBwbGllcyBvbmx5IHdoZW4geW91ciBvcmlnaW4gYWRkcyBIVFRQIGhlYWRlcnMgc3VjaCBhcyBgYENhY2hlLUNvbnRyb2wgbWF4LWFnZWBgLCBgYENhY2hlLUNvbnRyb2wgcy1tYXhhZ2VgYCwgYW5kIGBgRXhwaXJlc2BgIHRvIG9iamVjdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIEhvdyBMb25nIENvbnRlbnQgU3RheXMgaW4gYW4gRWRnZSBDYWNoZSAoRXhwaXJhdGlvbildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTWF4VFRMPzogbnVtYmVyXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB0aGUgYGBNaW5UVExgYCBmaWVsZCBpbiBhIGNhY2hlIHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZSB0aGF0IHlvdSB3YW50IG9iamVjdHMgdG8gc3RheSBpbiBDbG91ZEZyb250IGNhY2hlcyBiZWZvcmUgQ2xvdWRGcm9udCBmb3J3YXJkcyBhbm90aGVyIHJlcXVlc3QgdG8geW91ciBvcmlnaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNYW5hZ2luZyBIb3cgTG9uZyBDb250ZW50IFN0YXlzIGluIGFuIEVkZ2UgQ2FjaGUgKEV4cGlyYXRpb24pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgWW91IG11c3Qgc3BlY2lmeSBgYDBgYCBmb3IgYGBNaW5UVExgYCBpZiB5b3UgY29uZmlndXJlIENsb3VkRnJvbnQgdG8gZm9yd2FyZCBhbGwgaGVhZGVycyB0byB5b3VyIG9yaWdpbiAodW5kZXIgYGBIZWFkZXJzYGAsIGlmIHlvdSBzcGVjaWZ5IGBgMWBgIGZvciBgYFF1YW50aXR5YGAgYW5kIGBgKmBgIGZvciBgYE5hbWVgYCkuXG4gKi9cbk1pblRUTD86IG51bWJlclxuLyoqXG4gKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIG9yaWdpbiByZXF1ZXN0IHBvbGljeSB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoaXMgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblJlcXVlc3RQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcGF0dGVybiAoZm9yIGV4YW1wbGUsIGBgaW1hZ2VzLyouanBnYGApIHRoYXQgc3BlY2lmaWVzIHdoaWNoIHJlcXVlc3RzIHRvIGFwcGx5IHRoZSBiZWhhdmlvciB0by4gV2hlbiBDbG91ZEZyb250IHJlY2VpdmVzIGEgdmlld2VyIHJlcXVlc3QsIHRoZSByZXF1ZXN0ZWQgcGF0aCBpcyBjb21wYXJlZCB3aXRoIHBhdGggcGF0dGVybnMgaW4gdGhlIG9yZGVyIGluIHdoaWNoIGNhY2hlIGJlaGF2aW9ycyBhcmUgbGlzdGVkIGluIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgIFlvdSBjYW4gb3B0aW9uYWxseSBpbmNsdWRlIGEgc2xhc2ggKGBgL2BgKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoIHBhdHRlcm4uIEZvciBleGFtcGxlLCBgYC9pbWFnZXMvKi5qcGdgYC4gQ2xvdWRGcm9udCBiZWhhdmlvciBpcyB0aGUgc2FtZSB3aXRoIG9yIHdpdGhvdXQgdGhlIGxlYWRpbmcgYGAvYGAuXG4gKiAgIFRoZSBwYXRoIHBhdHRlcm4gZm9yIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yIGlzIGBgKmBgIGFuZCBjYW5ub3QgYmUgY2hhbmdlZC4gSWYgdGhlIHJlcXVlc3QgZm9yIGFuIG9iamVjdCBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0aCBwYXR0ZXJuIGZvciBhbnkgY2FjaGUgYmVoYXZpb3JzLCBDbG91ZEZyb250IGFwcGxpZXMgdGhlIGJlaGF2aW9yIGluIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1BhdGggUGF0dGVybl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNQYXRoUGF0dGVybikgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5QYXRoUGF0dGVybjogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcmVhbC10aW1lIGxvZyBjb25maWd1cmF0aW9uIHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhpcyBjYWNoZSBiZWhhdmlvci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVhbC10aW1lIGxvZ3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9yZWFsLXRpbWUtbG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblJlYWx0aW1lTG9nQ29uZmlnQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIGZvciBhIHJlc3BvbnNlIGhlYWRlcnMgcG9saWN5LlxuICovXG5SZXNwb25zZUhlYWRlcnNQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB5b3Ugd2FudCB0byBkaXN0cmlidXRlIG1lZGlhIGZpbGVzIGluIHRoZSBNaWNyb3NvZnQgU21vb3RoIFN0cmVhbWluZyBmb3JtYXQgdXNpbmcgdGhlIG9yaWdpbiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlIGJlaGF2aW9yLiBJZiBzbywgc3BlY2lmeSBgYHRydWVgYDsgaWYgbm90LCBzcGVjaWZ5IGBgZmFsc2VgYC4gSWYgeW91IHNwZWNpZnkgYGB0cnVlYGAgZm9yIGBgU21vb3RoU3RyZWFtaW5nYGAsIHlvdSBjYW4gc3RpbGwgZGlzdHJpYnV0ZSBvdGhlciBjb250ZW50IHVzaW5nIHRoaXMgY2FjaGUgYmVoYXZpb3IgaWYgdGhlIGNvbnRlbnQgbWF0Y2hlcyB0aGUgdmFsdWUgb2YgYGBQYXRoUGF0dGVybmBgLlxuICovXG5TbW9vdGhTdHJlYW1pbmc/OiBib29sZWFuXG4vKipcbiAqIFRoZSB2YWx1ZSBvZiBgYElEYGAgZm9yIHRoZSBvcmlnaW4gdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHJvdXRlIHJlcXVlc3RzIHRvIHdoZW4gdGhleSBtYXRjaCB0aGlzIGNhY2hlIGJlaGF2aW9yLlxuICovXG5UYXJnZXRPcmlnaW5JZDogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBrZXkgZ3JvdXBzIHRoYXQgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIHZhbGlkYXRlIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzLlxuICogIFdoZW4gYSBjYWNoZSBiZWhhdmlvciBjb250YWlucyB0cnVzdGVkIGtleSBncm91cHMsIENsb3VkRnJvbnQgcmVxdWlyZXMgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgZm9yIGFsbCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSBjYWNoZSBiZWhhdmlvci4gVGhlIFVSTHMgb3IgY29va2llcyBtdXN0IGJlIHNpZ25lZCB3aXRoIGEgcHJpdmF0ZSBrZXkgd2hvc2UgY29ycmVzcG9uZGluZyBwdWJsaWMga2V5IGlzIGluIHRoZSBrZXkgZ3JvdXAuIFRoZSBzaWduZWQgVVJMIG9yIGNvb2tpZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBwdWJsaWMga2V5IENsb3VkRnJvbnQgc2hvdWxkIHVzZSB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBwcml2YXRlIGNvbnRlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Qcml2YXRlQ29udGVudC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblRydXN0ZWRLZXlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXZSByZWNvbW1lbmQgdXNpbmcgYGBUcnVzdGVkS2V5R3JvdXBzYGAgaW5zdGVhZCBvZiBgYFRydXN0ZWRTaWduZXJzYGAuXG4gKiAgIEEgbGlzdCBvZiBBV1MtYWNjb3VudCBJRHMgd2hvc2UgcHVibGljIGtleXMgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIHZhbGlkYXRlIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzLlxuICogIFdoZW4gYSBjYWNoZSBiZWhhdmlvciBjb250YWlucyB0cnVzdGVkIHNpZ25lcnMsIENsb3VkRnJvbnQgcmVxdWlyZXMgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgZm9yIGFsbCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSBjYWNoZSBiZWhhdmlvci4gVGhlIFVSTHMgb3IgY29va2llcyBtdXN0IGJlIHNpZ25lZCB3aXRoIHRoZSBwcml2YXRlIGtleSBvZiBhIENsb3VkRnJvbnQga2V5IHBhaXIgaW4gdGhlIHRydXN0ZWQgc2lnbmVyJ3MgQVdTLWFjY291bnQuIFRoZSBzaWduZWQgVVJMIG9yIGNvb2tpZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBwdWJsaWMga2V5IENsb3VkRnJvbnQgc2hvdWxkIHVzZSB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBwcml2YXRlIGNvbnRlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Qcml2YXRlQ29udGVudC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblRydXN0ZWRTaWduZXJzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIHByb3RvY29sIHRoYXQgdmlld2VycyBjYW4gdXNlIHRvIGFjY2VzcyB0aGUgZmlsZXMgaW4gdGhlIG9yaWdpbiBzcGVjaWZpZWQgYnkgYGBUYXJnZXRPcmlnaW5JZGBgIHdoZW4gYSByZXF1ZXN0IG1hdGNoZXMgdGhlIHBhdGggcGF0dGVybiBpbiBgYFBhdGhQYXR0ZXJuYGAuIFlvdSBjYW4gc3BlY2lmeSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6XG4gKiAgICsgIGBgYWxsb3ctYWxsYGA6IFZpZXdlcnMgY2FuIHVzZSBIVFRQIG9yIEhUVFBTLlxuICogICArICBgYHJlZGlyZWN0LXRvLWh0dHBzYGA6IElmIGEgdmlld2VyIHN1Ym1pdHMgYW4gSFRUUCByZXF1ZXN0LCBDbG91ZEZyb250IHJldHVybnMgYW4gSFRUUCBzdGF0dXMgY29kZSBvZiAzMDEgKE1vdmVkIFBlcm1hbmVudGx5KSB0byB0aGUgdmlld2VyIGFsb25nIHdpdGggdGhlIEhUVFBTIFVSTC4gVGhlIHZpZXdlciB0aGVuIHJlc3VibWl0cyB0aGUgcmVxdWVzdCB1c2luZyB0aGUgbmV3IFVSTC5cbiAqICAgKyAgYGBodHRwcy1vbmx5YGA6IElmIGEgdmlld2VyIHNlbmRzIGFuIEhUVFAgcmVxdWVzdCwgQ2xvdWRGcm9udCByZXR1cm5zIGFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAzIChGb3JiaWRkZW4pLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCByZXF1aXJpbmcgdGhlIEhUVFBTIHByb3RvY29sLCBzZWUgW1JlcXVpcmluZyBIVFRQUyBCZXR3ZWVuIFZpZXdlcnMgYW5kIENsb3VkRnJvbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1odHRwcy12aWV3ZXJzLXRvLWNsb3VkZnJvbnQuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUaGUgb25seSB3YXkgdG8gZ3VhcmFudGVlIHRoYXQgdmlld2VycyByZXRyaWV2ZSBhbiBvYmplY3QgdGhhdCB3YXMgZmV0Y2hlZCBmcm9tIHRoZSBvcmlnaW4gdXNpbmcgSFRUUFMgaXMgbmV2ZXIgdG8gdXNlIGFueSBvdGhlciBwcm90b2NvbCB0byBmZXRjaCB0aGUgb2JqZWN0LiBJZiB5b3UgaGF2ZSByZWNlbnRseSBjaGFuZ2VkIGZyb20gSFRUUCB0byBIVFRQUywgd2UgcmVjb21tZW5kIHRoYXQgeW91IGNsZWFyIHlvdXIgb2JqZWN0cycgY2FjaGUgYmVjYXVzZSBjYWNoZWQgb2JqZWN0cyBhcmUgcHJvdG9jb2wgYWdub3N0aWMuIFRoYXQgbWVhbnMgdGhhdCBhbiBlZGdlIGxvY2F0aW9uIHdpbGwgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHRoZSBjYWNoZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGN1cnJlbnQgcmVxdWVzdCBwcm90b2NvbCBtYXRjaGVzIHRoZSBwcm90b2NvbCB1c2VkIHByZXZpb3VzbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIENhY2hlIEV4cGlyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuVmlld2VyUHJvdG9jb2xQb2xpY3k6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBjYWNoZSBwb2xpY3kgb3IgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbV29ya2luZyB3aXRoIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvd29ya2luZy13aXRoLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIHZhbHVlcyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIHZhbHVlcyB0byB0aGUgb3JpZ2luIGJ1dCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBgYENhY2hlQmVoYXZpb3JgYCBtdXN0IGluY2x1ZGUgZWl0aGVyIGEgYGBDYWNoZVBvbGljeUlkYGAgb3IgYGBGb3J3YXJkZWRWYWx1ZXNgYC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGBgQ2FjaGVQb2xpY3lJZGBgLlxuICogIEEgY29tcGxleCB0eXBlIHRoYXQgc3BlY2lmaWVzIGhvdyBDbG91ZEZyb250IGhhbmRsZXMgcXVlcnkgc3RyaW5ncywgY29va2llcywgYW5kIEhUVFAgaGVhZGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3J3YXJkZWRWYWx1ZXMge1xuQ29va2llcz86IENvb2tpZXNcbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBoZWFkZXJzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIGhlYWRlcnMgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBBIGNvbXBsZXggdHlwZSB0aGF0IHNwZWNpZmllcyB0aGUgYGBIZWFkZXJzYGAsIGlmIGFueSwgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGZvcndhcmQgdG8gdGhlIG9yaWdpbiBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvciAod2hpdGVsaXN0ZWQgaGVhZGVycykuIEZvciB0aGUgaGVhZGVycyB0aGF0IHlvdSBzcGVjaWZ5LCBDbG91ZEZyb250IGFsc28gY2FjaGVzIHNlcGFyYXRlIHZlcnNpb25zIG9mIGEgc3BlY2lmaWVkIG9iamVjdCB0aGF0IGlzIGJhc2VkIG9uIHRoZSBoZWFkZXIgdmFsdWVzIGluIHZpZXdlciByZXF1ZXN0cy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDYWNoaW5nIENvbnRlbnQgQmFzZWQgb24gUmVxdWVzdCBIZWFkZXJzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvaGVhZGVyLWNhY2hpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5IZWFkZXJzPzogc3RyaW5nW11cbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBxdWVyeSBzdHJpbmdzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIHF1ZXJ5IHN0cmluZ3MgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJbmRpY2F0ZXMgd2hldGhlciB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGZvcndhcmQgcXVlcnkgc3RyaW5ncyB0byB0aGUgb3JpZ2luIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FjaGUgYmVoYXZpb3IgYW5kIGNhY2hlIGJhc2VkIG9uIHRoZSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycy4gQ2xvdWRGcm9udCBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBgYFF1ZXJ5U3RyaW5nYGAgYW5kIG9uIHRoZSB2YWx1ZXMgdGhhdCB5b3Ugc3BlY2lmeSBmb3IgYGBRdWVyeVN0cmluZ0NhY2hlS2V5c2BgLCBpZiBhbnk6XG4gKiAgSWYgeW91IHNwZWNpZnkgdHJ1ZSBmb3IgYGBRdWVyeVN0cmluZ2BgIGFuZCB5b3UgZG9uJ3Qgc3BlY2lmeSBhbnkgdmFsdWVzIGZvciBgYFF1ZXJ5U3RyaW5nQ2FjaGVLZXlzYGAsIENsb3VkRnJvbnQgZm9yd2FyZHMgYWxsIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHRoZSBvcmlnaW4gYW5kIGNhY2hlcyBiYXNlZCBvbiBhbGwgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuIERlcGVuZGluZyBvbiBob3cgbWFueSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBhbmQgdmFsdWVzIHlvdSBoYXZlLCB0aGlzIGNhbiBhZHZlcnNlbHkgYWZmZWN0IHBlcmZvcm1hbmNlIGJlY2F1c2UgQ2xvdWRGcm9udCBtdXN0IGZvcndhcmQgbW9yZSByZXF1ZXN0cyB0byB0aGUgb3JpZ2luLlxuICogIElmIHlvdSBzcGVjaWZ5IHRydWUgZm9yIGBgUXVlcnlTdHJpbmdgYCBhbmQgeW91IHNwZWNpZnkgb25lIG9yIG1vcmUgdmFsdWVzIGZvciBgYFF1ZXJ5U3RyaW5nQ2FjaGVLZXlzYGAsIENsb3VkRnJvbnQgZm9yd2FyZHMgYWxsIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHRoZSBvcmlnaW4sIGJ1dCBpdCBvbmx5IGNhY2hlcyBiYXNlZCBvbiB0aGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgdGhhdCB5b3Ugc3BlY2lmeS5cbiAqICBJZiB5b3Ugc3BlY2lmeSBmYWxzZSBmb3IgYGBRdWVyeVN0cmluZ2BgLCBDbG91ZEZyb250IGRvZXNuJ3QgZm9yd2FyZCBhbnkgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgdG8gdGhlIG9yaWdpbiwgYW5kIGRvZXNuJ3QgY2FjaGUgYmFzZWQgb24gcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ29uZmlndXJpbmcgQ2xvdWRGcm9udCB0byBDYWNoZSBCYXNlZCBvbiBRdWVyeSBTdHJpbmcgUGFyYW1ldGVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1F1ZXJ5U3RyaW5nUGFyYW1ldGVycy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblF1ZXJ5U3RyaW5nOiBib29sZWFuXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgcXVlcnkgc3RyaW5ncyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBxdWVyeSBzdHJpbmdzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgY2FjaGluZyBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvci5cbiAqL1xuUXVlcnlTdHJpbmdDYWNoZUtleXM/OiBzdHJpbmdbXVxufVxuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBjYWNoZSBwb2xpY3kgb3IgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC5cbiAqICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGNvb2tpZXMgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIHNlbmQgY29va2llcyB0byB0aGUgb3JpZ2luIGJ1dCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEEgY29tcGxleCB0eXBlIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBmb3J3YXJkIGNvb2tpZXMgdG8gdGhlIG9yaWdpbiBhbmQsIGlmIHNvLCB3aGljaCBvbmVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBmb3J3YXJkaW5nIGNvb2tpZXMgdG8gdGhlIG9yaWdpbiwgc2VlIFtIb3cgQ2xvdWRGcm9udCBGb3J3YXJkcywgQ2FjaGVzLCBhbmQgTG9ncyBDb29raWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvQ29va2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29va2llcyB7XG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgY29va2llcyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBjb29raWVzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgU3BlY2lmaWVzIHdoaWNoIGNvb2tpZXMgdG8gZm9yd2FyZCB0byB0aGUgb3JpZ2luIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yOiBhbGwsIG5vbmUsIG9yIHRoZSBsaXN0IG9mIGNvb2tpZXMgc3BlY2lmaWVkIGluIHRoZSBgYFdoaXRlbGlzdGVkTmFtZXNgYCBjb21wbGV4IHR5cGUuXG4gKiAgQW1hem9uIFMzIGRvZXNuJ3QgcHJvY2VzcyBjb29raWVzLiBXaGVuIHRoZSBjYWNoZSBiZWhhdmlvciBpcyBmb3J3YXJkaW5nIHJlcXVlc3RzIHRvIGFuIEFtYXpvbiBTMyBvcmlnaW4sIHNwZWNpZnkgbm9uZSBmb3IgdGhlIGBgRm9yd2FyZGBgIGVsZW1lbnQuXG4gKi9cbkZvcndhcmQ6IHN0cmluZ1xuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBjYWNoZSBwb2xpY3kgb3IgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC5cbiAqICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGNvb2tpZXMgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIHNlbmQgY29va2llcyB0byB0aGUgb3JpZ2luIGJ1dCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFJlcXVpcmVkIGlmIHlvdSBzcGVjaWZ5IGBgd2hpdGVsaXN0YGAgZm9yIHRoZSB2YWx1ZSBvZiBgYEZvcndhcmRgYC4gQSBjb21wbGV4IHR5cGUgdGhhdCBzcGVjaWZpZXMgaG93IG1hbnkgZGlmZmVyZW50IGNvb2tpZXMgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBmb3J3YXJkIHRvIHRoZSBvcmlnaW4gZm9yIHRoaXMgY2FjaGUgYmVoYXZpb3IgYW5kLCBpZiB5b3Ugd2FudCB0byBmb3J3YXJkIHNlbGVjdGVkIGNvb2tpZXMsIHRoZSBuYW1lcyBvZiB0aG9zZSBjb29raWVzLlxuICogIElmIHlvdSBzcGVjaWZ5IGBgYWxsYGAgb3IgYGBub25lYGAgZm9yIHRoZSB2YWx1ZSBvZiBgYEZvcndhcmRgYCwgb21pdCBgYFdoaXRlbGlzdGVkTmFtZXNgYC4gSWYgeW91IGNoYW5nZSB0aGUgdmFsdWUgb2YgYGBGb3J3YXJkYGAgZnJvbSBgYHdoaXRlbGlzdGBgIHRvIGBgYWxsYGAgb3IgYGBub25lYGAgYW5kIHlvdSBkb24ndCBkZWxldGUgdGhlIGBgV2hpdGVsaXN0ZWROYW1lc2BgIGVsZW1lbnQgYW5kIGl0cyBjaGlsZCBlbGVtZW50cywgQ2xvdWRGcm9udCBkZWxldGVzIHRoZW0gYXV0b21hdGljYWxseS5cbiAqICBGb3IgdGhlIGN1cnJlbnQgbGltaXQgb24gdGhlIG51bWJlciBvZiBjb29raWUgbmFtZXMgdGhhdCB5b3UgY2FuIHdoaXRlbGlzdCBmb3IgZWFjaCBjYWNoZSBiZWhhdmlvciwgc2VlIFtDbG91ZEZyb250IExpbWl0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dlbmVyYWwvbGF0ZXN0L2dyL3hyZWZhd3Nfc2VydmljZV9saW1pdHMuaHRtbCNsaW1pdHNfY2xvdWRmcm9udCkgaW4gdGhlICpHZW5lcmFsIFJlZmVyZW5jZSouXG4gKi9cbldoaXRlbGlzdGVkTmFtZXM/OiBzdHJpbmdbXVxufVxuLyoqXG4gKiBBIENsb3VkRnJvbnQgZnVuY3Rpb24gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBiZWhhdmlvciBpbiBhIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQXNzb2NpYXRpb24ge1xuLyoqXG4gKiBUaGUgZXZlbnQgdHlwZSBvZiB0aGUgZnVuY3Rpb24sIGVpdGhlciBgYHZpZXdlci1yZXF1ZXN0YGAgb3IgYGB2aWV3ZXItcmVzcG9uc2VgYC4gWW91IGNhbm5vdCB1c2Ugb3JpZ2luLWZhY2luZyBldmVudCB0eXBlcyAoYGBvcmlnaW4tcmVxdWVzdGBgIGFuZCBgYG9yaWdpbi1yZXNwb25zZWBgKSB3aXRoIGEgQ2xvdWRGcm9udCBmdW5jdGlvbi5cbiAqL1xuRXZlbnRUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbkZ1bmN0aW9uQVJOPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBnUlBDIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgY2FjaGUgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JwY0NvbmZpZyB7XG4vKipcbiAqIEVuYWJsZXMgeW91ciBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0byByZWNlaXZlIGdSUEMgcmVxdWVzdHMgYW5kIHRvIHByb3h5IHRoZW0gZGlyZWN0bHkgdG8geW91ciBvcmlnaW5zLlxuICovXG5FbmFibGVkOiBib29sZWFuXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgYSBMYW1iZGFARWRnZSBmdW5jdGlvbiBhc3NvY2lhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uIHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBldmVudCB0eXBlIHRoYXQgdHJpZ2dlcnMgYSBMYW1iZGFARWRnZSBmdW5jdGlvbiBpbnZvY2F0aW9uLiBZb3UgY2FuIHNwZWNpZnkgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gKiAgICsgIGBgdmlld2VyLXJlcXVlc3RgYDogVGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIHdoZW4gQ2xvdWRGcm9udCByZWNlaXZlcyBhIHJlcXVlc3QgZnJvbSBhIHZpZXdlciBhbmQgYmVmb3JlIGl0IGNoZWNrcyB0byBzZWUgd2hldGhlciB0aGUgcmVxdWVzdGVkIG9iamVjdCBpcyBpbiB0aGUgZWRnZSBjYWNoZS5cbiAqICAgKyAgYGBvcmlnaW4tcmVxdWVzdGBgOiBUaGUgZnVuY3Rpb24gZXhlY3V0ZXMgb25seSB3aGVuIENsb3VkRnJvbnQgc2VuZHMgYSByZXF1ZXN0IHRvIHlvdXIgb3JpZ2luLiBXaGVuIHRoZSByZXF1ZXN0ZWQgb2JqZWN0IGlzIGluIHRoZSBlZGdlIGNhY2hlLCB0aGUgZnVuY3Rpb24gZG9lc24ndCBleGVjdXRlLlxuICogICArICBgYG9yaWdpbi1yZXNwb25zZWBgOiBUaGUgZnVuY3Rpb24gZXhlY3V0ZXMgYWZ0ZXIgQ2xvdWRGcm9udCByZWNlaXZlcyBhIHJlc3BvbnNlIGZyb20gdGhlIG9yaWdpbiBhbmQgYmVmb3JlIGl0IGNhY2hlcyB0aGUgb2JqZWN0IGluIHRoZSByZXNwb25zZS4gV2hlbiB0aGUgcmVxdWVzdGVkIG9iamVjdCBpcyBpbiB0aGUgZWRnZSBjYWNoZSwgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgZXhlY3V0ZS5cbiAqICAgKyAgYGB2aWV3ZXItcmVzcG9uc2VgYDogVGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGJlZm9yZSBDbG91ZEZyb250IHJldHVybnMgdGhlIHJlcXVlc3RlZCBvYmplY3QgdG8gdGhlIHZpZXdlci4gVGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgb2JqZWN0IHdhcyBhbHJlYWR5IGluIHRoZSBlZGdlIGNhY2hlLlxuICogIElmIHRoZSBvcmlnaW4gcmV0dXJucyBhbiBIVFRQIHN0YXR1cyBjb2RlIG90aGVyIHRoYW4gSFRUUCAyMDAgKE9LKSwgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgZXhlY3V0ZS5cbiAqL1xuRXZlbnRUeXBlPzogc3RyaW5nXG4vKipcbiAqIEEgZmxhZyB0aGF0IGFsbG93cyBhIExhbWJkYUBFZGdlIGZ1bmN0aW9uIHRvIGhhdmUgcmVhZCBhY2Nlc3MgdG8gdGhlIGJvZHkgY29udGVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQWNjZXNzaW5nIHRoZSBSZXF1ZXN0IEJvZHkgYnkgQ2hvb3NpbmcgdGhlIEluY2x1ZGUgQm9keSBPcHRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9sYW1iZGEtaW5jbHVkZS1ib2R5LWFjY2Vzcy5odG1sKSBpbiB0aGUgQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlLlxuICovXG5JbmNsdWRlQm9keT86IGJvb2xlYW5cbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgTGFtYmRhQEVkZ2UgZnVuY3Rpb24uIFlvdSBtdXN0IHNwZWNpZnkgdGhlIEFSTiBvZiBhIGZ1bmN0aW9uIHZlcnNpb247IHlvdSBjYW4ndCBzcGVjaWZ5IGFuIGFsaWFzIG9yICRMQVRFU1QuXG4gKi9cbkxhbWJkYUZ1bmN0aW9uQVJOPzogc3RyaW5nXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHM6XG4gKiAgICsgIFdoZXRoZXIgQ2xvdWRGcm9udCByZXBsYWNlcyBIVFRQIHN0YXR1cyBjb2RlcyBpbiB0aGUgNHh4IGFuZCA1eHggcmFuZ2Ugd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZXMgYmVmb3JlIHJldHVybmluZyB0aGUgcmVzcG9uc2UgdG8gdGhlIHZpZXdlci5cbiAqICAgKyAgSG93IGxvbmcgQ2xvdWRGcm9udCBjYWNoZXMgSFRUUCBzdGF0dXMgY29kZXMgaW4gdGhlIDR4eCBhbmQgNXh4IHJhbmdlLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjdXN0b20gZXJyb3IgcGFnZXMsIHNlZSBbQ3VzdG9taXppbmcgRXJyb3IgUmVzcG9uc2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY3VzdG9tLWVycm9yLXBhZ2VzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21FcnJvclJlc3BvbnNlIHtcbi8qKlxuICogVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBjYWNoZSB0aGUgSFRUUCBzdGF0dXMgY29kZSBzcGVjaWZpZWQgaW4gYGBFcnJvckNvZGVgYC4gV2hlbiB0aGlzIHRpbWUgcGVyaW9kIGhhcyBlbGFwc2VkLCBDbG91ZEZyb250IHF1ZXJpZXMgeW91ciBvcmlnaW4gdG8gc2VlIHdoZXRoZXIgdGhlIHByb2JsZW0gdGhhdCBjYXVzZWQgdGhlIGVycm9yIGhhcyBiZWVuIHJlc29sdmVkIGFuZCB0aGUgcmVxdWVzdGVkIG9iamVjdCBpcyBub3cgYXZhaWxhYmxlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0N1c3RvbWl6aW5nIEVycm9yIFJlc3BvbnNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2N1c3RvbS1lcnJvci1wYWdlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkVycm9yQ2FjaGluZ01pblRUTD86IG51bWJlclxuLyoqXG4gKiBUaGUgSFRUUCBzdGF0dXMgY29kZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gc3BlY2lmeSBhIGN1c3RvbSBlcnJvciBwYWdlIGFuZC9vciBhIGNhY2hpbmcgZHVyYXRpb24uXG4gKi9cbkVycm9yQ29kZTogbnVtYmVyXG4vKipcbiAqIFRoZSBIVFRQIHN0YXR1cyBjb2RlIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByZXR1cm4gdG8gdGhlIHZpZXdlciBhbG9uZyB3aXRoIHRoZSBjdXN0b20gZXJyb3IgcGFnZS4gVGhlcmUgYXJlIGEgdmFyaWV0eSBvZiByZWFzb25zIHRoYXQgeW91IG1pZ2h0IHdhbnQgQ2xvdWRGcm9udCB0byByZXR1cm4gYSBzdGF0dXMgY29kZSBkaWZmZXJlbnQgZnJvbSB0aGUgc3RhdHVzIGNvZGUgdGhhdCB5b3VyIG9yaWdpbiByZXR1cm5lZCB0byBDbG91ZEZyb250LCBmb3IgZXhhbXBsZTpcbiAqICAgKyAgU29tZSBJbnRlcm5ldCBkZXZpY2VzIChzb21lIGZpcmV3YWxscyBhbmQgY29ycG9yYXRlIHByb3hpZXMsIGZvciBleGFtcGxlKSBpbnRlcmNlcHQgSFRUUCA0eHggYW5kIDV4eCBhbmQgcHJldmVudCB0aGUgcmVzcG9uc2UgZnJvbSBiZWluZyByZXR1cm5lZCB0byB0aGUgdmlld2VyLiBJZiB5b3Ugc3Vic3RpdHV0ZSBgYDIwMGBgLCB0aGUgcmVzcG9uc2UgdHlwaWNhbGx5IHdvbid0IGJlIGludGVyY2VwdGVkLlxuICogICArICBJZiB5b3UgZG9uJ3QgY2FyZSBhYm91dCBkaXN0aW5ndWlzaGluZyBhbW9uZyBkaWZmZXJlbnQgY2xpZW50IGVycm9ycyBvciBzZXJ2ZXIgZXJyb3JzLCB5b3UgY2FuIHNwZWNpZnkgYGA0MDBgYCBvciBgYDUwMGBgIGFzIHRoZSBgYFJlc3BvbnNlQ29kZWBgIGZvciBhbGwgNHh4IG9yIDV4eCBlcnJvcnMuXG4gKiAgICsgIFlvdSBtaWdodCB3YW50IHRvIHJldHVybiBhIGBgMjAwYGAgc3RhdHVzIGNvZGUgKE9LKSBhbmQgc3RhdGljIHdlYnNpdGUgc28geW91ciBjdXN0b21lcnMgZG9uJ3Qga25vdyB0aGF0IHlvdXIgd2Vic2l0ZSBpcyBkb3duLlxuICogICBcbiAqICBJZiB5b3Ugc3BlY2lmeSBhIHZhbHVlIGZvciBgYFJlc3BvbnNlQ29kZWBgLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBSZXNwb25zZVBhZ2VQYXRoYGAuXG4gKi9cblJlc3BvbnNlQ29kZT86IG51bWJlclxuLyoqXG4gKiBUaGUgcGF0aCB0byB0aGUgY3VzdG9tIGVycm9yIHBhZ2UgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHJldHVybiB0byBhIHZpZXdlciB3aGVuIHlvdXIgb3JpZ2luIHJldHVybnMgdGhlIEhUVFAgc3RhdHVzIGNvZGUgc3BlY2lmaWVkIGJ5IGBgRXJyb3JDb2RlYGAsIGZvciBleGFtcGxlLCBgYC80eHgtZXJyb3JzLzQwMy1mb3JiaWRkZW4uaHRtbGBgLiBJZiB5b3Ugd2FudCB0byBzdG9yZSB5b3VyIG9iamVjdHMgYW5kIHlvdXIgY3VzdG9tIGVycm9yIHBhZ2VzIGluIGRpZmZlcmVudCBsb2NhdGlvbnMsIHlvdXIgZGlzdHJpYnV0aW9uIG11c3QgaW5jbHVkZSBhIGNhY2hlIGJlaGF2aW9yIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gKiAgICsgIFRoZSB2YWx1ZSBvZiBgYFBhdGhQYXR0ZXJuYGAgbWF0Y2hlcyB0aGUgcGF0aCB0byB5b3VyIGN1c3RvbSBlcnJvciBtZXNzYWdlcy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IHNhdmVkIGN1c3RvbSBlcnJvciBwYWdlcyBmb3IgNHh4IGVycm9ycyBpbiBhbiBBbWF6b24gUzMgYnVja2V0IGluIGEgZGlyZWN0b3J5IG5hbWVkIGBgLzR4eC1lcnJvcnNgYC4gWW91ciBkaXN0cmlidXRpb24gbXVzdCBpbmNsdWRlIGEgY2FjaGUgYmVoYXZpb3IgZm9yIHdoaWNoIHRoZSBwYXRoIHBhdHRlcm4gcm91dGVzIHJlcXVlc3RzIGZvciB5b3VyIGN1c3RvbSBlcnJvciBwYWdlcyB0byB0aGF0IGxvY2F0aW9uLCBmb3IgZXhhbXBsZSwgYGAvNHh4LWVycm9ycy8qYGAuXG4gKiAgICsgIFRoZSB2YWx1ZSBvZiBgYFRhcmdldE9yaWdpbklkYGAgc3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgYGBJRGBgIGVsZW1lbnQgZm9yIHRoZSBvcmlnaW4gdGhhdCBjb250YWlucyB5b3VyIGN1c3RvbSBlcnJvciBwYWdlcy5cbiAqICAgXG4gKiAgSWYgeW91IHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBSZXNwb25zZVBhZ2VQYXRoYGAsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSBhIHZhbHVlIGZvciBgYFJlc3BvbnNlQ29kZWBgLlxuICogIFdlIHJlY29tbWVuZCB0aGF0IHlvdSBzdG9yZSBjdXN0b20gZXJyb3IgcGFnZXMgaW4gYW4gQW1hem9uIFMzIGJ1Y2tldC4gSWYgeW91IHN0b3JlIGN1c3RvbSBlcnJvciBwYWdlcyBvbiBhbiBIVFRQIHNlcnZlciBhbmQgdGhlIHNlcnZlciBzdGFydHMgdG8gcmV0dXJuIDV4eCBlcnJvcnMsIENsb3VkRnJvbnQgY2FuJ3QgZ2V0IHRoZSBmaWxlcyB0aGF0IHlvdSB3YW50IHRvIHJldHVybiB0byB2aWV3ZXJzIGJlY2F1c2UgdGhlIG9yaWdpbiBzZXJ2ZXIgaXMgdW5hdmFpbGFibGUuXG4gKi9cblJlc3BvbnNlUGFnZVBhdGg/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHVzZXItZGVmaW5lZCBIVFRQIHNlcnZlciB0aGF0IHNlcnZlcyBhcyB0aGUgb3JpZ2luIGZvciBjb250ZW50IHRoYXQgQ0YgZGlzdHJpYnV0ZXMuXG4gKiAgIFRoaXMgcHJvcGVydHkgaXMgbGVnYWN5LiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIFtPcmlnaW5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLW9yaWdpbi5odG1sKSBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUN1c3RvbU9yaWdpbiB7XG4vKipcbiAqIFRoZSBkb21haW4gbmFtZSBhc3NpZ25lZCB0byB5b3VyIENGIGRpc3RyaWJ1dGlvbi5cbiAqL1xuRE5TTmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSBIVFRQIHBvcnQgdGhhdCBDRiB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi4gU3BlY2lmeSB0aGUgSFRUUCBwb3J0IHRoYXQgdGhlIG9yaWdpbiBsaXN0ZW5zIG9uLlxuICovXG5IVFRQUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgSFRUUFMgcG9ydCB0aGF0IENGIHVzZXMgdG8gY29ubmVjdCB0byB0aGUgb3JpZ2luLiBTcGVjaWZ5IHRoZSBIVFRQUyBwb3J0IHRoYXQgdGhlIG9yaWdpbiBsaXN0ZW5zIG9uLlxuICovXG5IVFRQU1BvcnQ/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwcm90b2NvbCAoSFRUUCBvciBIVFRQUykgdGhhdCBDRiB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi5cbiAqL1xuT3JpZ2luUHJvdG9jb2xQb2xpY3k6IHN0cmluZ1xuLyoqXG4gKiBUaGUgbWluaW11bSBTU0wvVExTIHByb3RvY29sIHZlcnNpb24gdGhhdCBDRiB1c2VzIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIHlvdXIgb3JpZ2luIHNlcnZlciBvdmVyIEhUVFBzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01pbmltdW0gT3JpZ2luIFNTTCBQcm90b2NvbF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5TU0xQcm90b2NvbHMpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luU1NMUHJvdG9jb2xzOiBzdHJpbmdbXVxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGRlc2NyaWJlcyB0aGUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvciBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIGBgQ2FjaGVCZWhhdmlvcmBgIGVsZW1lbnQgb3IgaWYgZmlsZXMgZG9uJ3QgbWF0Y2ggYW55IG9mIHRoZSB2YWx1ZXMgb2YgYGBQYXRoUGF0dGVybmBgIGluIGBgQ2FjaGVCZWhhdmlvcmBgIGVsZW1lbnRzLiBZb3UgbXVzdCBjcmVhdGUgZXhhY3RseSBvbmUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0Q2FjaGVCZWhhdmlvciB7XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hpY2ggSFRUUCBtZXRob2RzIENsb3VkRnJvbnQgcHJvY2Vzc2VzIGFuZCBmb3J3YXJkcyB0byB5b3VyIEFtYXpvbiBTMyBidWNrZXQgb3IgeW91ciBjdXN0b20gb3JpZ2luLiBUaGVyZSBhcmUgdGhyZWUgY2hvaWNlczpcbiAqICAgKyAgQ2xvdWRGcm9udCBmb3J3YXJkcyBvbmx5IGBgR0VUYGAgYW5kIGBgSEVBRGBgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGZvcndhcmRzIG9ubHkgYGBHRVRgYCwgYGBIRUFEYGAsIGFuZCBgYE9QVElPTlNgYCByZXF1ZXN0cy5cbiAqICAgKyAgQ2xvdWRGcm9udCBmb3J3YXJkcyBgYEdFVCwgSEVBRCwgT1BUSU9OUywgUFVULCBQQVRDSCwgUE9TVGBgLCBhbmQgYGBERUxFVEVgYCByZXF1ZXN0cy5cbiAqICAgXG4gKiAgSWYgeW91IHBpY2sgdGhlIHRoaXJkIGNob2ljZSwgeW91IG1heSBuZWVkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB5b3VyIEFtYXpvbiBTMyBidWNrZXQgb3IgdG8geW91ciBjdXN0b20gb3JpZ2luIHNvIHVzZXJzIGNhbid0IHBlcmZvcm0gb3BlcmF0aW9ucyB0aGF0IHlvdSBkb24ndCB3YW50IHRoZW0gdG8uIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgbm90IHdhbnQgdXNlcnMgdG8gaGF2ZSBwZXJtaXNzaW9ucyB0byBkZWxldGUgb2JqZWN0cyBmcm9tIHlvdXIgb3JpZ2luLlxuICovXG5BbGxvd2VkTWV0aG9kcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY2FjaGUgcG9saWN5IHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBBIGBgRGVmYXVsdENhY2hlQmVoYXZpb3JgYCBtdXN0IGluY2x1ZGUgZWl0aGVyIGEgYGBDYWNoZVBvbGljeUlkYGAgb3IgYGBGb3J3YXJkZWRWYWx1ZXNgYC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGBgQ2FjaGVQb2xpY3lJZGBgLlxuICovXG5DYWNoZVBvbGljeUlkPzogc3RyaW5nXG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hldGhlciBDbG91ZEZyb250IGNhY2hlcyB0aGUgcmVzcG9uc2UgdG8gcmVxdWVzdHMgdXNpbmcgdGhlIHNwZWNpZmllZCBIVFRQIG1ldGhvZHMuIFRoZXJlIGFyZSB0d28gY2hvaWNlczpcbiAqICAgKyAgQ2xvdWRGcm9udCBjYWNoZXMgcmVzcG9uc2VzIHRvIGBgR0VUYGAgYW5kIGBgSEVBRGBgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGNhY2hlcyByZXNwb25zZXMgdG8gYGBHRVRgYCwgYGBIRUFEYGAsIGFuZCBgYE9QVElPTlNgYCByZXF1ZXN0cy5cbiAqICAgXG4gKiAgSWYgeW91IHBpY2sgdGhlIHNlY29uZCBjaG9pY2UgZm9yIHlvdXIgQW1hem9uIFMzIE9yaWdpbiwgeW91IG1heSBuZWVkIHRvIGZvcndhcmQgQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QsIEFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycywgYW5kIE9yaWdpbiBoZWFkZXJzIGZvciB0aGUgcmVzcG9uc2VzIHRvIGJlIGNhY2hlZCBjb3JyZWN0bHkuXG4gKi9cbkNhY2hlZE1ldGhvZHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gYXV0b21hdGljYWxseSBjb21wcmVzcyBjZXJ0YWluIGZpbGVzIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yLiBJZiBzbywgc3BlY2lmeSBgYHRydWVgYDsgaWYgbm90LCBzcGVjaWZ5IGBgZmFsc2VgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBDb21wcmVzc2VkIEZpbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvU2VydmluZ0NvbXByZXNzZWRGaWxlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkNvbXByZXNzPzogYm9vbGVhblxuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIGBgRGVmYXVsdFRUTGBgIGZpZWxkIGluIGEgY2FjaGUgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtY2FjaGUtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBkZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRoYXQgeW91IHdhbnQgb2JqZWN0cyB0byBzdGF5IGluIENsb3VkRnJvbnQgY2FjaGVzIGJlZm9yZSBDbG91ZEZyb250IGZvcndhcmRzIGFub3RoZXIgcmVxdWVzdCB0byB5b3VyIG9yaWdpbiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgb2JqZWN0IGhhcyBiZWVuIHVwZGF0ZWQuIFRoZSB2YWx1ZSB0aGF0IHlvdSBzcGVjaWZ5IGFwcGxpZXMgb25seSB3aGVuIHlvdXIgb3JpZ2luIGRvZXMgbm90IGFkZCBIVFRQIGhlYWRlcnMgc3VjaCBhcyBgYENhY2hlLUNvbnRyb2wgbWF4LWFnZWBgLCBgYENhY2hlLUNvbnRyb2wgcy1tYXhhZ2VgYCwgYW5kIGBgRXhwaXJlc2BgIHRvIG9iamVjdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIEhvdyBMb25nIENvbnRlbnQgU3RheXMgaW4gYW4gRWRnZSBDYWNoZSAoRXhwaXJhdGlvbildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRGVmYXVsdFRUTD86IG51bWJlclxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYGBJRGBgIGZvciB0aGUgZmllbGQtbGV2ZWwgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byB1c2UgZm9yIGVuY3J5cHRpbmcgc3BlY2lmaWMgZmllbGRzIG9mIGRhdGEgZm9yIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLlxuICovXG5GaWVsZExldmVsRW5jcnlwdGlvbklkPzogc3RyaW5nXG5Gb3J3YXJkZWRWYWx1ZXM/OiBGb3J3YXJkZWRWYWx1ZXMxXG4vKipcbiAqIEEgbGlzdCBvZiBDbG91ZEZyb250IGZ1bmN0aW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWNoZSBiZWhhdmlvci4gWW91ciBmdW5jdGlvbnMgbXVzdCBiZSBwdWJsaXNoZWQgdG8gdGhlIGBgTElWRWBgIHN0YWdlIHRvIGFzc29jaWF0ZSB0aGVtIHdpdGggYSBjYWNoZSBiZWhhdmlvci5cbiAqL1xuRnVuY3Rpb25Bc3NvY2lhdGlvbnM/OiBGdW5jdGlvbkFzc29jaWF0aW9uW11cbkdycGNDb25maWc/OiBHcnBjQ29uZmlnMVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIHplcm8gb3IgbW9yZSBMYW1iZGFARWRnZSBmdW5jdGlvbiBhc3NvY2lhdGlvbnMgZm9yIGEgY2FjaGUgYmVoYXZpb3IuXG4gKi9cbkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zPzogTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbltdXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB0aGUgYGBNYXhUVExgYCBmaWVsZCBpbiBhIGNhY2hlIHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0aGF0IHlvdSB3YW50IG9iamVjdHMgdG8gc3RheSBpbiBDbG91ZEZyb250IGNhY2hlcyBiZWZvcmUgQ2xvdWRGcm9udCBmb3J3YXJkcyBhbm90aGVyIHJlcXVlc3QgdG8geW91ciBvcmlnaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkLiBUaGUgdmFsdWUgdGhhdCB5b3Ugc3BlY2lmeSBhcHBsaWVzIG9ubHkgd2hlbiB5b3VyIG9yaWdpbiBhZGRzIEhUVFAgaGVhZGVycyBzdWNoIGFzIGBgQ2FjaGUtQ29udHJvbCBtYXgtYWdlYGAsIGBgQ2FjaGUtQ29udHJvbCBzLW1heGFnZWBgLCBhbmQgYGBFeHBpcmVzYGAgdG8gb2JqZWN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTWFuYWdpbmcgSG93IExvbmcgQ29udGVudCBTdGF5cyBpbiBhbiBFZGdlIENhY2hlIChFeHBpcmF0aW9uKV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0V4cGlyYXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5NYXhUVEw/OiBudW1iZXJcbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIHRoZSBgYE1pblRUTGBgIGZpZWxkIGluIGEgY2FjaGUgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtY2FjaGUtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoYXQgeW91IHdhbnQgb2JqZWN0cyB0byBzdGF5IGluIENsb3VkRnJvbnQgY2FjaGVzIGJlZm9yZSBDbG91ZEZyb250IGZvcndhcmRzIGFub3RoZXIgcmVxdWVzdCB0byB5b3VyIG9yaWdpbiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgb2JqZWN0IGhhcyBiZWVuIHVwZGF0ZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIEhvdyBMb25nIENvbnRlbnQgU3RheXMgaW4gYW4gRWRnZSBDYWNoZSAoRXhwaXJhdGlvbildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IGBgMGBgIGZvciBgYE1pblRUTGBgIGlmIHlvdSBjb25maWd1cmUgQ2xvdWRGcm9udCB0byBmb3J3YXJkIGFsbCBoZWFkZXJzIHRvIHlvdXIgb3JpZ2luICh1bmRlciBgYEhlYWRlcnNgYCwgaWYgeW91IHNwZWNpZnkgYGAxYGAgZm9yIGBgUXVhbnRpdHlgYCBhbmQgYGAqYGAgZm9yIGBgTmFtZWBgKS5cbiAqL1xuTWluVFRMPzogbnVtYmVyXG4vKipcbiAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgb3JpZ2luIHJlcXVlc3QgcG9saWN5IHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblJlcXVlc3RQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJlYWwtdGltZSBsb2cgY29uZmlndXJhdGlvbiB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoaXMgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JlYWwtdGltZSBsb2dzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcmVhbC10aW1lLWxvZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5SZWFsdGltZUxvZ0NvbmZpZ0Fybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBmb3IgYSByZXNwb25zZSBoZWFkZXJzIHBvbGljeS5cbiAqL1xuUmVzcG9uc2VIZWFkZXJzUG9saWN5SWQ/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgeW91IHdhbnQgdG8gZGlzdHJpYnV0ZSBtZWRpYSBmaWxlcyBpbiB0aGUgTWljcm9zb2Z0IFNtb290aCBTdHJlYW1pbmcgZm9ybWF0IHVzaW5nIHRoZSBvcmlnaW4gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWNoZSBiZWhhdmlvci4gSWYgc28sIHNwZWNpZnkgYGB0cnVlYGA7IGlmIG5vdCwgc3BlY2lmeSBgYGZhbHNlYGAuIElmIHlvdSBzcGVjaWZ5IGBgdHJ1ZWBgIGZvciBgYFNtb290aFN0cmVhbWluZ2BgLCB5b3UgY2FuIHN0aWxsIGRpc3RyaWJ1dGUgb3RoZXIgY29udGVudCB1c2luZyB0aGlzIGNhY2hlIGJlaGF2aW9yIGlmIHRoZSBjb250ZW50IG1hdGNoZXMgdGhlIHZhbHVlIG9mIGBgUGF0aFBhdHRlcm5gYC5cbiAqL1xuU21vb3RoU3RyZWFtaW5nPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYGBJRGBgIGZvciB0aGUgb3JpZ2luIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByb3V0ZSByZXF1ZXN0cyB0byB3aGVuIHRoZXkgdXNlIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLlxuICovXG5UYXJnZXRPcmlnaW5JZDogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBrZXkgZ3JvdXBzIHRoYXQgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIHZhbGlkYXRlIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzLlxuICogIFdoZW4gYSBjYWNoZSBiZWhhdmlvciBjb250YWlucyB0cnVzdGVkIGtleSBncm91cHMsIENsb3VkRnJvbnQgcmVxdWlyZXMgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgZm9yIGFsbCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSBjYWNoZSBiZWhhdmlvci4gVGhlIFVSTHMgb3IgY29va2llcyBtdXN0IGJlIHNpZ25lZCB3aXRoIGEgcHJpdmF0ZSBrZXkgd2hvc2UgY29ycmVzcG9uZGluZyBwdWJsaWMga2V5IGlzIGluIHRoZSBrZXkgZ3JvdXAuIFRoZSBzaWduZWQgVVJMIG9yIGNvb2tpZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBwdWJsaWMga2V5IENsb3VkRnJvbnQgc2hvdWxkIHVzZSB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBwcml2YXRlIGNvbnRlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Qcml2YXRlQ29udGVudC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblRydXN0ZWRLZXlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXZSByZWNvbW1lbmQgdXNpbmcgYGBUcnVzdGVkS2V5R3JvdXBzYGAgaW5zdGVhZCBvZiBgYFRydXN0ZWRTaWduZXJzYGAuXG4gKiAgIEEgbGlzdCBvZiBBV1MtYWNjb3VudCBJRHMgd2hvc2UgcHVibGljIGtleXMgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIHZhbGlkYXRlIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzLlxuICogIFdoZW4gYSBjYWNoZSBiZWhhdmlvciBjb250YWlucyB0cnVzdGVkIHNpZ25lcnMsIENsb3VkRnJvbnQgcmVxdWlyZXMgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgZm9yIGFsbCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSBjYWNoZSBiZWhhdmlvci4gVGhlIFVSTHMgb3IgY29va2llcyBtdXN0IGJlIHNpZ25lZCB3aXRoIHRoZSBwcml2YXRlIGtleSBvZiBhIENsb3VkRnJvbnQga2V5IHBhaXIgaW4gYSB0cnVzdGVkIHNpZ25lcidzIEFXUy1hY2NvdW50LiBUaGUgc2lnbmVkIFVSTCBvciBjb29raWUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggcHVibGljIGtleSBDbG91ZEZyb250IHNob3VsZCB1c2UgdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpbmcgcHJpdmF0ZSBjb250ZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUHJpdmF0ZUNvbnRlbnQuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5UcnVzdGVkU2lnbmVycz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBwcm90b2NvbCB0aGF0IHZpZXdlcnMgY2FuIHVzZSB0byBhY2Nlc3MgdGhlIGZpbGVzIGluIHRoZSBvcmlnaW4gc3BlY2lmaWVkIGJ5IGBgVGFyZ2V0T3JpZ2luSWRgYCB3aGVuIGEgcmVxdWVzdCBtYXRjaGVzIHRoZSBwYXRoIHBhdHRlcm4gaW4gYGBQYXRoUGF0dGVybmBgLiBZb3UgY2FuIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBvcHRpb25zOlxuICogICArICBgYGFsbG93LWFsbGBgOiBWaWV3ZXJzIGNhbiB1c2UgSFRUUCBvciBIVFRQUy5cbiAqICAgKyAgYGByZWRpcmVjdC10by1odHRwc2BgOiBJZiBhIHZpZXdlciBzdWJtaXRzIGFuIEhUVFAgcmVxdWVzdCwgQ2xvdWRGcm9udCByZXR1cm5zIGFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgMzAxIChNb3ZlZCBQZXJtYW5lbnRseSkgdG8gdGhlIHZpZXdlciBhbG9uZyB3aXRoIHRoZSBIVFRQUyBVUkwuIFRoZSB2aWV3ZXIgdGhlbiByZXN1Ym1pdHMgdGhlIHJlcXVlc3QgdXNpbmcgdGhlIG5ldyBVUkwuXG4gKiAgICsgIGBgaHR0cHMtb25seWBgOiBJZiBhIHZpZXdlciBzZW5kcyBhbiBIVFRQIHJlcXVlc3QsIENsb3VkRnJvbnQgcmV0dXJucyBhbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMyAoRm9yYmlkZGVuKS5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcmVxdWlyaW5nIHRoZSBIVFRQUyBwcm90b2NvbCwgc2VlIFtSZXF1aXJpbmcgSFRUUFMgQmV0d2VlbiBWaWV3ZXJzIGFuZCBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctaHR0cHMtdmlld2Vycy10by1jbG91ZGZyb250Lmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhlIG9ubHkgd2F5IHRvIGd1YXJhbnRlZSB0aGF0IHZpZXdlcnMgcmV0cmlldmUgYW4gb2JqZWN0IHRoYXQgd2FzIGZldGNoZWQgZnJvbSB0aGUgb3JpZ2luIHVzaW5nIEhUVFBTIGlzIG5ldmVyIHRvIHVzZSBhbnkgb3RoZXIgcHJvdG9jb2wgdG8gZmV0Y2ggdGhlIG9iamVjdC4gSWYgeW91IGhhdmUgcmVjZW50bHkgY2hhbmdlZCBmcm9tIEhUVFAgdG8gSFRUUFMsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBjbGVhciB5b3VyIG9iamVjdHMnIGNhY2hlIGJlY2F1c2UgY2FjaGVkIG9iamVjdHMgYXJlIHByb3RvY29sIGFnbm9zdGljLiBUaGF0IG1lYW5zIHRoYXQgYW4gZWRnZSBsb2NhdGlvbiB3aWxsIHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgY2FjaGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBjdXJyZW50IHJlcXVlc3QgcHJvdG9jb2wgbWF0Y2hlcyB0aGUgcHJvdG9jb2wgdXNlZCBwcmV2aW91c2x5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNYW5hZ2luZyBDYWNoZSBFeHBpcmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblZpZXdlclByb3RvY29sUG9saWN5OiBzdHJpbmdcbn1cbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1dvcmtpbmcgd2l0aCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3dvcmtpbmctd2l0aC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSB2YWx1ZXMgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCB2YWx1ZXMgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtb3JpZ2luLXJlcXVlc3QtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEEgYGBEZWZhdWx0Q2FjaGVCZWhhdmlvcmBgIG11c3QgaW5jbHVkZSBlaXRoZXIgYSBgYENhY2hlUG9saWN5SWRgYCBvciBgYEZvcndhcmRlZFZhbHVlc2BgLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgYGBDYWNoZVBvbGljeUlkYGAuXG4gKiAgQSBjb21wbGV4IHR5cGUgdGhhdCBzcGVjaWZpZXMgaG93IENsb3VkRnJvbnQgaGFuZGxlcyBxdWVyeSBzdHJpbmdzLCBjb29raWVzLCBhbmQgSFRUUCBoZWFkZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcndhcmRlZFZhbHVlczEge1xuQ29va2llcz86IENvb2tpZXNcbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBoZWFkZXJzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIGhlYWRlcnMgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBBIGNvbXBsZXggdHlwZSB0aGF0IHNwZWNpZmllcyB0aGUgYGBIZWFkZXJzYGAsIGlmIGFueSwgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGZvcndhcmQgdG8gdGhlIG9yaWdpbiBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvciAod2hpdGVsaXN0ZWQgaGVhZGVycykuIEZvciB0aGUgaGVhZGVycyB0aGF0IHlvdSBzcGVjaWZ5LCBDbG91ZEZyb250IGFsc28gY2FjaGVzIHNlcGFyYXRlIHZlcnNpb25zIG9mIGEgc3BlY2lmaWVkIG9iamVjdCB0aGF0IGlzIGJhc2VkIG9uIHRoZSBoZWFkZXIgdmFsdWVzIGluIHZpZXdlciByZXF1ZXN0cy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDYWNoaW5nIENvbnRlbnQgQmFzZWQgb24gUmVxdWVzdCBIZWFkZXJzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvaGVhZGVyLWNhY2hpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5IZWFkZXJzPzogc3RyaW5nW11cbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBxdWVyeSBzdHJpbmdzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIHF1ZXJ5IHN0cmluZ3MgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJbmRpY2F0ZXMgd2hldGhlciB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGZvcndhcmQgcXVlcnkgc3RyaW5ncyB0byB0aGUgb3JpZ2luIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FjaGUgYmVoYXZpb3IgYW5kIGNhY2hlIGJhc2VkIG9uIHRoZSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycy4gQ2xvdWRGcm9udCBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBgYFF1ZXJ5U3RyaW5nYGAgYW5kIG9uIHRoZSB2YWx1ZXMgdGhhdCB5b3Ugc3BlY2lmeSBmb3IgYGBRdWVyeVN0cmluZ0NhY2hlS2V5c2BgLCBpZiBhbnk6XG4gKiAgSWYgeW91IHNwZWNpZnkgdHJ1ZSBmb3IgYGBRdWVyeVN0cmluZ2BgIGFuZCB5b3UgZG9uJ3Qgc3BlY2lmeSBhbnkgdmFsdWVzIGZvciBgYFF1ZXJ5U3RyaW5nQ2FjaGVLZXlzYGAsIENsb3VkRnJvbnQgZm9yd2FyZHMgYWxsIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHRoZSBvcmlnaW4gYW5kIGNhY2hlcyBiYXNlZCBvbiBhbGwgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuIERlcGVuZGluZyBvbiBob3cgbWFueSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBhbmQgdmFsdWVzIHlvdSBoYXZlLCB0aGlzIGNhbiBhZHZlcnNlbHkgYWZmZWN0IHBlcmZvcm1hbmNlIGJlY2F1c2UgQ2xvdWRGcm9udCBtdXN0IGZvcndhcmQgbW9yZSByZXF1ZXN0cyB0byB0aGUgb3JpZ2luLlxuICogIElmIHlvdSBzcGVjaWZ5IHRydWUgZm9yIGBgUXVlcnlTdHJpbmdgYCBhbmQgeW91IHNwZWNpZnkgb25lIG9yIG1vcmUgdmFsdWVzIGZvciBgYFF1ZXJ5U3RyaW5nQ2FjaGVLZXlzYGAsIENsb3VkRnJvbnQgZm9yd2FyZHMgYWxsIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHRoZSBvcmlnaW4sIGJ1dCBpdCBvbmx5IGNhY2hlcyBiYXNlZCBvbiB0aGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgdGhhdCB5b3Ugc3BlY2lmeS5cbiAqICBJZiB5b3Ugc3BlY2lmeSBmYWxzZSBmb3IgYGBRdWVyeVN0cmluZ2BgLCBDbG91ZEZyb250IGRvZXNuJ3QgZm9yd2FyZCBhbnkgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgdG8gdGhlIG9yaWdpbiwgYW5kIGRvZXNuJ3QgY2FjaGUgYmFzZWQgb24gcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ29uZmlndXJpbmcgQ2xvdWRGcm9udCB0byBDYWNoZSBCYXNlZCBvbiBRdWVyeSBTdHJpbmcgUGFyYW1ldGVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1F1ZXJ5U3RyaW5nUGFyYW1ldGVycy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblF1ZXJ5U3RyaW5nOiBib29sZWFuXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgcXVlcnkgc3RyaW5ncyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBxdWVyeSBzdHJpbmdzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgY2FjaGluZyBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvci5cbiAqL1xuUXVlcnlTdHJpbmdDYWNoZUtleXM/OiBzdHJpbmdbXVxufVxuLyoqXG4gKiBUaGUgZ1JQQyBjb25maWd1cmF0aW9uIGZvciB5b3VyIGNhY2hlIGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdycGNDb25maWcxIHtcbi8qKlxuICogRW5hYmxlcyB5b3VyIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJlY2VpdmUgZ1JQQyByZXF1ZXN0cyBhbmQgdG8gcHJveHkgdGhlbSBkaXJlY3RseSB0byB5b3VyIG9yaWdpbnMuXG4gKi9cbkVuYWJsZWQ6IGJvb2xlYW5cbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250cm9scyB3aGV0aGVyIGFjY2VzcyBsb2dzIGFyZSB3cml0dGVuIGZvciB0aGUgZGlzdHJpYnV0aW9uLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGxvZ2dpbmcsIHNlZSBbQWNjZXNzIExvZ3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9BY2Nlc3NMb2dzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dnaW5nIHtcbi8qKlxuICogVGhlIEFtYXpvbiBTMyBidWNrZXQgdG8gc3RvcmUgdGhlIGFjY2VzcyBsb2dzIGluLCBmb3IgZXhhbXBsZSwgYGBhbXpuLXMzLWRlbW8tYnVja2V0LnMzLmFtYXpvbmF3cy5jb21gYC5cbiAqL1xuQnVja2V0Pzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gaW5jbHVkZSBjb29raWVzIGluIGFjY2VzcyBsb2dzLCBzcGVjaWZ5IGBgdHJ1ZWBgIGZvciBgYEluY2x1ZGVDb29raWVzYGAuIElmIHlvdSBjaG9vc2UgdG8gaW5jbHVkZSBjb29raWVzIGluIGxvZ3MsIENsb3VkRnJvbnQgbG9ncyBhbGwgY29va2llcyByZWdhcmRsZXNzIG9mIGhvdyB5b3UgY29uZmlndXJlIHRoZSBjYWNoZSBiZWhhdmlvcnMgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIGNvb2tpZXMgd2hlbiB5b3UgY3JlYXRlIGEgZGlzdHJpYnV0aW9uIG9yIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgaW5jbHVkZSBjb29raWVzIGZvciBhbiBleGlzdGluZyBkaXN0cmlidXRpb24sIHNwZWNpZnkgYGBmYWxzZWBgIGZvciBgYEluY2x1ZGVDb29raWVzYGAuXG4gKi9cbkluY2x1ZGVDb29raWVzPzogYm9vbGVhblxuLyoqXG4gKiBBbiBvcHRpb25hbCBzdHJpbmcgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHByZWZpeCB0byB0aGUgYWNjZXNzIGxvZyBgYGZpbGVuYW1lc2BgIGZvciB0aGlzIGRpc3RyaWJ1dGlvbiwgZm9yIGV4YW1wbGUsIGBgbXlwcmVmaXgvYGAuIElmIHlvdSB3YW50IHRvIGVuYWJsZSBsb2dnaW5nLCBidXQgeW91IGRvbid0IHdhbnQgdG8gc3BlY2lmeSBhIHByZWZpeCwgeW91IHN0aWxsIG11c3QgaW5jbHVkZSBhbiBlbXB0eSBgYFByZWZpeGBgIGVsZW1lbnQgaW4gdGhlIGBgTG9nZ2luZ2BgIGVsZW1lbnQuXG4gKi9cblByZWZpeD86IHN0cmluZ1xufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9yaWdpbiBncm91cHMgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLlxuICogIFNwZWNpZnkgYSB2YWx1ZSBmb3IgZWl0aGVyIHRoZSBgYE9yaWdpbnNgYCBvciBgYE9yaWdpbkdyb3Vwc2BgIHByb3BlcnR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkdyb3VwcyB7XG4vKipcbiAqIFRoZSBpdGVtcyAob3JpZ2luIGdyb3VwcykgaW4gYSBkaXN0cmlidXRpb24uXG4gKi9cbkl0ZW1zPzogT3JpZ2luR3JvdXBbXVxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIG9yaWdpbiBncm91cHMuXG4gKi9cblF1YW50aXR5OiBudW1iZXJcbn1cbi8qKlxuICogQW4gb3JpZ2luIGdyb3VwIGluY2x1ZGVzIHR3byBvcmlnaW5zIChhIHByaW1hcnkgb3JpZ2luIGFuZCBhIHNlY29uZGFyeSBvcmlnaW4gdG8gZmFpbG92ZXIgdG8pIGFuZCBhIGZhaWxvdmVyIGNyaXRlcmlhIHRoYXQgeW91IHNwZWNpZnkuIFlvdSBjcmVhdGUgYW4gb3JpZ2luIGdyb3VwIHRvIHN1cHBvcnQgb3JpZ2luIGZhaWxvdmVyIGluIENsb3VkRnJvbnQuIFdoZW4geW91IGNyZWF0ZSBvciB1cGRhdGUgYSBkaXN0cmlidXRpb24sIHlvdSBjYW4gc3BlY2lmeSB0aGUgb3JpZ2luIGdyb3VwIGluc3RlYWQgb2YgYSBzaW5nbGUgb3JpZ2luLCBhbmQgQ2xvdWRGcm9udCB3aWxsIGZhaWxvdmVyIGZyb20gdGhlIHByaW1hcnkgb3JpZ2luIHRvIHRoZSBzZWNvbmRhcnkgb3JpZ2luIHVuZGVyIHRoZSBmYWlsb3ZlciBjb25kaXRpb25zIHRoYXQgeW91J3ZlIGNob3Nlbi5cbiAqICBPcHRpb25hbGx5LCB5b3UgY2FuIGNob29zZSBzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIHlvdXIgb3JpZ2luIGdyb3VwIHRvIHNwZWNpZnkgaG93IHlvdXIgb3JpZ2lucyBhcmUgc2VsZWN0ZWQgd2hlbiB5b3VyIGRpc3RyaWJ1dGlvbiByb3V0ZXMgdmlld2VyIHJlcXVlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkdyb3VwIHtcbkZhaWxvdmVyQ3JpdGVyaWE6IE9yaWdpbkdyb3VwRmFpbG92ZXJDcml0ZXJpYVxuLyoqXG4gKiBUaGUgb3JpZ2luIGdyb3VwJ3MgSUQuXG4gKi9cbklkOiBzdHJpbmdcbk1lbWJlcnM6IE9yaWdpbkdyb3VwTWVtYmVyc1xuLyoqXG4gKiBUaGUgc2VsZWN0aW9uIGNyaXRlcmlhIGZvciB0aGUgb3JpZ2luIGdyb3VwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGUgYW4gb3JpZ2luIGdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvaGlnaF9hdmFpbGFiaWxpdHlfb3JpZ2luX2ZhaWxvdmVyLmh0bWwjY29uY2VwdF9vcmlnaW5fZ3JvdXBzLmNyZWF0aW5nKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblNlbGVjdGlvbkNyaXRlcmlhPzogKFwiZGVmYXVsdFwiIHwgXCJtZWRpYS1xdWFsaXR5LWJhc2VkXCIpXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZhaWxvdmVyIGNyaXRlcmlhIGZvciBhbiBvcmlnaW4gZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luR3JvdXBGYWlsb3ZlckNyaXRlcmlhIHtcblN0YXR1c0NvZGVzOiBTdGF0dXNDb2Rlc1xufVxuLyoqXG4gKiBUaGUgc3RhdHVzIGNvZGVzIHRoYXQsIHdoZW4gcmV0dXJuZWQgZnJvbSB0aGUgcHJpbWFyeSBvcmlnaW4sIHdpbGwgdHJpZ2dlciBDbG91ZEZyb250IHRvIGZhaWxvdmVyIHRvIHRoZSBzZWNvbmQgb3JpZ2luLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXR1c0NvZGVzIHtcbi8qKlxuICogVGhlIGl0ZW1zIChzdGF0dXMgY29kZXMpIGZvciBhbiBvcmlnaW4gZ3JvdXAuXG4gKi9cbkl0ZW1zOiBudW1iZXJbXVxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIHN0YXR1cyBjb2Rlcy5cbiAqL1xuUXVhbnRpdHk6IG51bWJlclxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5zIGluIGFuIG9yaWdpbiBncm91cC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5Hcm91cE1lbWJlcnMge1xuLyoqXG4gKiBJdGVtcyAob3JpZ2lucykgaW4gYW4gb3JpZ2luIGdyb3VwLlxuICovXG5JdGVtczogT3JpZ2luR3JvdXBNZW1iZXJbXVxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIG9yaWdpbnMgaW4gYW4gb3JpZ2luIGdyb3VwLlxuICovXG5RdWFudGl0eTogbnVtYmVyXG59XG4vKipcbiAqIEFuIG9yaWdpbiBpbiBhbiBvcmlnaW4gZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luR3JvdXBNZW1iZXIge1xuLyoqXG4gKiBUaGUgSUQgZm9yIGFuIG9yaWdpbiBpbiBhbiBvcmlnaW4gZ3JvdXAuXG4gKi9cbk9yaWdpbklkOiBzdHJpbmdcbn1cbi8qKlxuICogQW4gb3JpZ2luLlxuICogIEFuIG9yaWdpbiBpcyB0aGUgbG9jYXRpb24gd2hlcmUgY29udGVudCBpcyBzdG9yZWQsIGFuZCBmcm9tIHdoaWNoIENsb3VkRnJvbnQgZ2V0cyBjb250ZW50IHRvIHNlcnZlIHRvIHZpZXdlcnMuIFRvIHNwZWNpZnkgYW4gb3JpZ2luOlxuICogICArICBVc2UgYGBTM09yaWdpbkNvbmZpZ2BgIHRvIHNwZWNpZnkgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIG5vdCBjb25maWd1cmVkIHdpdGggc3RhdGljIHdlYnNpdGUgaG9zdGluZy5cbiAqICAgKyAgVXNlIGBgVnBjT3JpZ2luQ29uZmlnYGAgdG8gc3BlY2lmeSBhIFZQQyBvcmlnaW4uXG4gKiAgICsgIFVzZSBgYEN1c3RvbU9yaWdpbkNvbmZpZ2BgIHRvIHNwZWNpZnkgYWxsIG90aGVyIGtpbmRzIG9mIG9yaWdpbnMsIGluY2x1ZGluZzpcbiAqICAgKyAgQW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIGNvbmZpZ3VyZWQgd2l0aCBzdGF0aWMgd2Vic2l0ZSBob3N0aW5nXG4gKiAgICsgIEFuIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgbG9hZCBiYWxhbmNlclxuICogICArICBBbiBFTVBsb25nIGVuZHBvaW50XG4gKiAgICsgIEFuIEVNU2xvbmcgY29udGFpbmVyXG4gKiAgICsgIEFueSBvdGhlciBIVFRQIHNlcnZlciwgcnVubmluZyBvbiBhbiBBbWF6b24gRUMyIGluc3RhbmNlIG9yIGFueSBvdGhlciBraW5kIG9mIGhvc3RcbiAqICAgXG4gKiAgIFxuICogIEZvciB0aGUgY3VycmVudCBtYXhpbXVtIG51bWJlciBvZiBvcmlnaW5zIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHBlciBkaXN0cmlidXRpb24sIHNlZSBbR2VuZXJhbCBRdW90YXMgb24gV2ViIERpc3RyaWJ1dGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jbG91ZGZyb250LWxpbWl0cy5odG1sI2xpbWl0cy13ZWItZGlzdHJpYnV0aW9ucykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqIChxdW90YXMgd2VyZSBmb3JtZXJseSByZWZlcnJlZCB0byBhcyBsaW1pdHMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbiB7XG4vKipcbiAqIFRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBDbG91ZEZyb250IGF0dGVtcHRzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi4gVGhlIG1pbmltdW0gbnVtYmVyIGlzIDEsIHRoZSBtYXhpbXVtIGlzIDMsIGFuZCB0aGUgZGVmYXVsdCAoaWYgeW91IGRvbid0IHNwZWNpZnkgb3RoZXJ3aXNlKSBpcyAzLlxuICogIEZvciBhIGN1c3RvbSBvcmlnaW4gKGluY2x1ZGluZyBhbiBBbWF6b24gUzMgYnVja2V0IHRoYXQncyBjb25maWd1cmVkIHdpdGggc3RhdGljIHdlYnNpdGUgaG9zdGluZyksIHRoaXMgdmFsdWUgYWxzbyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IENsb3VkRnJvbnQgYXR0ZW1wdHMgdG8gZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgb3JpZ2luLCBpbiB0aGUgY2FzZSBvZiBhbiBbT3JpZ2luIFJlc3BvbnNlIFRpbWVvdXRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td2ViLXZhbHVlcy1zcGVjaWZ5Lmh0bWwjRG93bmxvYWREaXN0VmFsdWVzT3JpZ2luUmVzcG9uc2VUaW1lb3V0KS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtPcmlnaW4gQ29ubmVjdGlvbiBBdHRlbXB0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNvcmlnaW4tY29ubmVjdGlvbi1hdHRlbXB0cykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Db25uZWN0aW9uQXR0ZW1wdHM/OiBudW1iZXJcbi8qKlxuICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRoYXQgQ2xvdWRGcm9udCB3YWl0cyB3aGVuIHRyeWluZyB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBvcmlnaW4uIFRoZSBtaW5pbXVtIHRpbWVvdXQgaXMgMSBzZWNvbmQsIHRoZSBtYXhpbXVtIGlzIDEwIHNlY29uZHMsIGFuZCB0aGUgZGVmYXVsdCAoaWYgeW91IGRvbid0IHNwZWNpZnkgb3RoZXJ3aXNlKSBpcyAxMCBzZWNvbmRzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW09yaWdpbiBDb25uZWN0aW9uIFRpbWVvdXRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td2ViLXZhbHVlcy1zcGVjaWZ5Lmh0bWwjb3JpZ2luLWNvbm5lY3Rpb24tdGltZW91dCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Db25uZWN0aW9uVGltZW91dD86IG51bWJlclxuUmVzcG9uc2VDb21wbGV0aW9uVGltZW91dD86IG51bWJlclxuQ3VzdG9tT3JpZ2luQ29uZmlnPzogQ3VzdG9tT3JpZ2luQ29uZmlnXG4vKipcbiAqIFRoZSBkb21haW4gbmFtZSBmb3IgdGhlIG9yaWdpbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtPcmlnaW4gRG9tYWluIE5hbWVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td2ViLXZhbHVlcy1zcGVjaWZ5Lmh0bWwjRG93bmxvYWREaXN0VmFsdWVzRG9tYWluTmFtZSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Eb21haW5OYW1lOiBzdHJpbmdcbi8qKlxuICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG9yaWdpbi4gVGhpcyB2YWx1ZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICBVc2UgdGhpcyB2YWx1ZSB0byBzcGVjaWZ5IHRoZSBgYFRhcmdldE9yaWdpbklkYGAgaW4gYSBgYENhY2hlQmVoYXZpb3JgYCBvciBgYERlZmF1bHRDYWNoZUJlaGF2aW9yYGAuXG4gKi9cbklkOiBzdHJpbmdcbi8qKlxuICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIGFuIG9yaWdpbiBhY2Nlc3MgY29udHJvbCBmb3IgdGhpcyBvcmlnaW4uXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVzdHJpY3RpbmcgYWNjZXNzIHRvIGFuIEFtYXpvbiBTMyBvcmlnaW5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9wcml2YXRlLWNvbnRlbnQtcmVzdHJpY3RpbmctYWNjZXNzLXRvLXMzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luQWNjZXNzQ29udHJvbElkPzogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBIVFRQIGhlYWRlciBuYW1lcyBhbmQgdmFsdWVzIHRoYXQgQ2xvdWRGcm9udCBhZGRzIHRvIHRoZSByZXF1ZXN0cyB0aGF0IGl0IHNlbmRzIHRvIHRoZSBvcmlnaW4uXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQWRkaW5nIEN1c3RvbSBIZWFkZXJzIHRvIE9yaWdpbiBSZXF1ZXN0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2FkZC1vcmlnaW4tY3VzdG9tLWhlYWRlcnMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5PcmlnaW5DdXN0b21IZWFkZXJzPzogT3JpZ2luQ3VzdG9tSGVhZGVyW11cbi8qKlxuICogQW4gb3B0aW9uYWwgcGF0aCB0aGF0IENsb3VkRnJvbnQgYXBwZW5kcyB0byB0aGUgb3JpZ2luIGRvbWFpbiBuYW1lIHdoZW4gQ2xvdWRGcm9udCByZXF1ZXN0cyBjb250ZW50IGZyb20gdGhlIG9yaWdpbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtPcmlnaW4gUGF0aF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5QYXRoKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblBhdGg/OiBzdHJpbmdcbk9yaWdpblNoaWVsZD86IE9yaWdpblNoaWVsZFxuUzNPcmlnaW5Db25maWc/OiBTM09yaWdpbkNvbmZpZ1xuVnBjT3JpZ2luQ29uZmlnPzogVnBjT3JpZ2luQ29uZmlnXG59XG4vKipcbiAqIFVzZSB0aGlzIHR5cGUgdG8gc3BlY2lmeSBhbiBvcmlnaW4gdGhhdCBpcyBub3QgYW4gQW1hem9uIFMzIGJ1Y2tldCwgd2l0aCBvbmUgZXhjZXB0aW9uLiBJZiB0aGUgQW1hem9uIFMzIGJ1Y2tldCBpcyBjb25maWd1cmVkIHdpdGggc3RhdGljIHdlYnNpdGUgaG9zdGluZywgdXNlIHRoaXMgdHlwZS4gSWYgdGhlIEFtYXpvbiBTMyBidWNrZXQgaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCBzdGF0aWMgd2Vic2l0ZSBob3N0aW5nLCB1c2UgdGhlIGBgUzNPcmlnaW5Db25maWdgYCB0eXBlIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tT3JpZ2luQ29uZmlnIHtcbi8qKlxuICogVGhlIEhUVFAgcG9ydCB0aGF0IENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uIFNwZWNpZnkgdGhlIEhUVFAgcG9ydCB0aGF0IHRoZSBvcmlnaW4gbGlzdGVucyBvbi5cbiAqL1xuSFRUUFBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIEhUVFBTIHBvcnQgdGhhdCBDbG91ZEZyb250IHVzZXMgdG8gY29ubmVjdCB0byB0aGUgb3JpZ2luLiBTcGVjaWZ5IHRoZSBIVFRQUyBwb3J0IHRoYXQgdGhlIG9yaWdpbiBsaXN0ZW5zIG9uLlxuICovXG5IVFRQU1BvcnQ/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIGhvdyBsb25nLCBpbiBzZWNvbmRzLCBDbG91ZEZyb250IHBlcnNpc3RzIGl0cyBjb25uZWN0aW9uIHRvIHRoZSBvcmlnaW4uIFRoZSBtaW5pbXVtIHRpbWVvdXQgaXMgMSBzZWNvbmQsIHRoZSBtYXhpbXVtIGlzIDYwIHNlY29uZHMsIGFuZCB0aGUgZGVmYXVsdCAoaWYgeW91IGRvbid0IHNwZWNpZnkgb3RoZXJ3aXNlKSBpcyA1IHNlY29uZHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbS2VlcC1hbGl2ZSB0aW1lb3V0IChjdXN0b20gb3JpZ2lucyBvbmx5KV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5LZWVwYWxpdmVUaW1lb3V0KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpbktlZXBhbGl2ZVRpbWVvdXQ/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwcm90b2NvbCAoSFRUUCBvciBIVFRQUykgdGhhdCBDbG91ZEZyb250IHVzZXMgdG8gY29ubmVjdCB0byB0aGUgb3JpZ2luLiBWYWxpZCB2YWx1ZXMgYXJlOlxuICogICArICBgYGh0dHAtb25seWBgIOKAkyBDbG91ZEZyb250IGFsd2F5cyB1c2VzIEhUVFAgdG8gY29ubmVjdCB0byB0aGUgb3JpZ2luLlxuICogICArICBgYG1hdGNoLXZpZXdlcmBgIOKAkyBDbG91ZEZyb250IGNvbm5lY3RzIHRvIHRoZSBvcmlnaW4gdXNpbmcgdGhlIHNhbWUgcHJvdG9jb2wgdGhhdCB0aGUgdmlld2VyIHVzZWQgdG8gY29ubmVjdCB0byBDbG91ZEZyb250LlxuICogICArICBgYGh0dHBzLW9ubHlgYCDigJMgQ2xvdWRGcm9udCBhbHdheXMgdXNlcyBIVFRQUyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uXG4gKi9cbk9yaWdpblByb3RvY29sUG9saWN5OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIGhvdyBsb25nLCBpbiBzZWNvbmRzLCBDbG91ZEZyb250IHdhaXRzIGZvciBhIHJlc3BvbnNlIGZyb20gdGhlIG9yaWdpbi4gVGhpcyBpcyBhbHNvIGtub3duIGFzIHRoZSAqb3JpZ2luIHJlc3BvbnNlIHRpbWVvdXQqLiBUaGUgbWluaW11bSB0aW1lb3V0IGlzIDEgc2Vjb25kLCB0aGUgbWF4aW11bSBpcyA2MCBzZWNvbmRzLCBhbmQgdGhlIGRlZmF1bHQgKGlmIHlvdSBkb24ndCBzcGVjaWZ5IG90aGVyd2lzZSkgaXMgMzAgc2Vjb25kcy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXNwb25zZSB0aW1lb3V0IChjdXN0b20gb3JpZ2lucyBvbmx5KV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5SZXNwb25zZVRpbWVvdXQpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luUmVhZFRpbWVvdXQ/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBtaW5pbXVtIFNTTC9UTFMgcHJvdG9jb2wgdGhhdCBDbG91ZEZyb250IHVzZXMgd2hlbiBjb25uZWN0aW5nIHRvIHlvdXIgb3JpZ2luIG92ZXIgSFRUUFMuIFZhbGlkIHZhbHVlcyBpbmNsdWRlIGBgU1NMdjNgYCwgYGBUTFN2MWBgLCBgYFRMU3YxLjFgYCwgYW5kIGBgVExTdjEuMmBgLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01pbmltdW0gT3JpZ2luIFNTTCBQcm90b2NvbF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5TU0xQcm90b2NvbHMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luU1NMUHJvdG9jb2xzPzogc3RyaW5nW11cbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBgYEhlYWRlck5hbWVgYCBhbmQgYGBIZWFkZXJWYWx1ZWBgIGVsZW1lbnRzLCBpZiBhbnksIGZvciB0aGlzIGRpc3RyaWJ1dGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5DdXN0b21IZWFkZXIge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiBhIGhlYWRlciB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gc2VuZCB0byB5b3VyIG9yaWdpbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQWRkaW5nIEN1c3RvbSBIZWFkZXJzIHRvIE9yaWdpbiBSZXF1ZXN0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2ZvcndhcmQtY3VzdG9tLWhlYWRlcnMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5IZWFkZXJOYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIHZhbHVlIGZvciB0aGUgaGVhZGVyIHRoYXQgeW91IHNwZWNpZmllZCBpbiB0aGUgYGBIZWFkZXJOYW1lYGAgZmllbGQuXG4gKi9cbkhlYWRlclZhbHVlOiBzdHJpbmdcbn1cbi8qKlxuICogQ2xvdWRGcm9udCBPcmlnaW4gU2hpZWxkLiBVc2luZyBPcmlnaW4gU2hpZWxkIGNhbiBoZWxwIHJlZHVjZSB0aGUgbG9hZCBvbiB5b3VyIG9yaWdpbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2luZyBPcmlnaW4gU2hpZWxkXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvb3JpZ2luLXNoaWVsZC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luU2hpZWxkIHtcbi8qKlxuICogQSBmbGFnIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgT3JpZ2luIFNoaWVsZCBpcyBlbmFibGVkLlxuICogIFdoZW4gaXQncyBlbmFibGVkLCBDbG91ZEZyb250IHJvdXRlcyBhbGwgcmVxdWVzdHMgdGhyb3VnaCBPcmlnaW4gU2hpZWxkLCB3aGljaCBjYW4gaGVscCBwcm90ZWN0IHlvdXIgb3JpZ2luLiBXaGVuIGl0J3MgZGlzYWJsZWQsIENsb3VkRnJvbnQgbWlnaHQgc2VuZCByZXF1ZXN0cyBkaXJlY3RseSB0byB5b3VyIG9yaWdpbiBmcm9tIG11bHRpcGxlIGVkZ2UgbG9jYXRpb25zIG9yIHJlZ2lvbmFsIGVkZ2UgY2FjaGVzLlxuICovXG5FbmFibGVkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgQVdTLVJlZ2lvbiBmb3IgT3JpZ2luIFNoaWVsZC5cbiAqICBTcGVjaWZ5IHRoZSBBV1MtUmVnaW9uIHRoYXQgaGFzIHRoZSBsb3dlc3QgbGF0ZW5jeSB0byB5b3VyIG9yaWdpbi4gVG8gc3BlY2lmeSBhIHJlZ2lvbiwgdXNlIHRoZSByZWdpb24gY29kZSwgbm90IHRoZSByZWdpb24gbmFtZS4gRm9yIGV4YW1wbGUsIHNwZWNpZnkgdGhlIFVTIEVhc3QgKE9oaW8pIHJlZ2lvbiBhcyBgYHVzLWVhc3QtMmBgLlxuICogIFdoZW4geW91IGVuYWJsZSBDbG91ZEZyb250IE9yaWdpbiBTaGllbGQsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIEFXUy1SZWdpb24gZm9yIE9yaWdpbiBTaGllbGQuIEZvciB0aGUgbGlzdCBvZiBBV1MtUmVnaW9ucyB0aGF0IHlvdSBjYW4gc3BlY2lmeSwgYW5kIGZvciBoZWxwIGNob29zaW5nIHRoZSBiZXN0IFJlZ2lvbiBmb3IgeW91ciBvcmlnaW4sIHNlZSBbQ2hvb3NpbmcgdGhlIGZvciBPcmlnaW4gU2hpZWxkXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvb3JpZ2luLXNoaWVsZC5odG1sI2Nob29zZS1vcmlnaW4tc2hpZWxkLXJlZ2lvbikgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5PcmlnaW5TaGllbGRSZWdpb24/OiBzdHJpbmdcbn1cbi8qKlxuICogVXNlIHRoaXMgdHlwZSB0byBzcGVjaWZ5IGFuIG9yaWdpbiB0aGF0IGlzIGFuIEFtYXpvbiBTMyBidWNrZXQgdGhhdCBpcyBub3QgY29uZmlndXJlZCB3aXRoIHN0YXRpYyB3ZWJzaXRlIGhvc3RpbmcuIFRvIHNwZWNpZnkgYW55IG90aGVyIHR5cGUgb2Ygb3JpZ2luLCBpbmNsdWRpbmcgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIGNvbmZpZ3VyZWQgd2l0aCBzdGF0aWMgd2Vic2l0ZSBob3N0aW5nLCB1c2UgdGhlIGBgQ3VzdG9tT3JpZ2luQ29uZmlnYGAgdHlwZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFMzT3JpZ2luQ29uZmlnIHtcbi8qKlxuICogSWYgeW91J3JlIHVzaW5nIG9yaWdpbiBhY2Nlc3MgY29udHJvbCAoT0FDKSBpbnN0ZWFkIG9mIG9yaWdpbiBhY2Nlc3MgaWRlbnRpdHksIHNwZWNpZnkgYW4gZW1wdHkgYGBPcmlnaW5BY2Nlc3NJZGVudGl0eWBgIGVsZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Jlc3RyaWN0aW5nIGFjY2VzcyB0byBhbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3ByaXZhdGUtY29udGVudC1yZXN0cmljdGluZy1hY2Nlc3MtdG8tb3JpZ2luLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhlIENsb3VkRnJvbnQgb3JpZ2luIGFjY2VzcyBpZGVudGl0eSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgb3JpZ2luLiBVc2UgYW4gb3JpZ2luIGFjY2VzcyBpZGVudGl0eSB0byBjb25maWd1cmUgdGhlIG9yaWdpbiBzbyB0aGF0IHZpZXdlcnMgY2FuICpvbmx5KiBhY2Nlc3Mgb2JqZWN0cyBpbiBhbiBBbWF6b24gUzMgYnVja2V0IHRocm91Z2ggQ2xvdWRGcm9udC4gVGhlIGZvcm1hdCBvZiB0aGUgdmFsdWUgaXM6XG4gKiAgIGBgb3JpZ2luLWFjY2Vzcy1pZGVudGl0eS9jbG91ZGZyb250L0lELW9mLW9yaWdpbi1hY2Nlc3MtaWRlbnRpdHlgYCBcbiAqICBUaGUgYGBJRC1vZi1vcmlnaW4tYWNjZXNzLWlkZW50aXR5YGAgaXMgdGhlIHZhbHVlIHRoYXQgQ2xvdWRGcm9udCByZXR1cm5lZCBpbiB0aGUgYGBJRGBgIGVsZW1lbnQgd2hlbiB5b3UgY3JlYXRlZCB0aGUgb3JpZ2luIGFjY2VzcyBpZGVudGl0eS5cbiAqICBJZiB5b3Ugd2FudCB2aWV3ZXJzIHRvIGJlIGFibGUgdG8gYWNjZXNzIG9iamVjdHMgdXNpbmcgZWl0aGVyIHRoZSBDbG91ZEZyb250IFVSTCBvciB0aGUgQW1hem9uIFMzIFVSTCwgc3BlY2lmeSBhbiBlbXB0eSBgYE9yaWdpbkFjY2Vzc0lkZW50aXR5YGAgZWxlbWVudC5cbiAqICBUbyBkZWxldGUgdGhlIG9yaWdpbiBhY2Nlc3MgaWRlbnRpdHkgZnJvbSBhbiBleGlzdGluZyBkaXN0cmlidXRpb24sIHVwZGF0ZSB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gYW5kIGluY2x1ZGUgYW4gZW1wdHkgYGBPcmlnaW5BY2Nlc3NJZGVudGl0eWBgIGVsZW1lbnQuXG4gKiAgVG8gcmVwbGFjZSB0aGUgb3JpZ2luIGFjY2VzcyBpZGVudGl0eSwgdXBkYXRlIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBhbmQgc3BlY2lmeSB0aGUgbmV3IG9yaWdpbiBhY2Nlc3MgaWRlbnRpdHkuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbiBhY2Nlc3MgaWRlbnRpdHksIHNlZSBbU2VydmluZyBQcml2YXRlIENvbnRlbnQgdGhyb3VnaCBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUHJpdmF0ZUNvbnRlbnQuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5PcmlnaW5BY2Nlc3NJZGVudGl0eT86IHN0cmluZ1xuT3JpZ2luUmVhZFRpbWVvdXQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIFZQQyBvcmlnaW4gY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNPcmlnaW5Db25maWcge1xuLyoqXG4gKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgcGVyc2lzdHMgaXRzIGNvbm5lY3Rpb24gdG8gdGhlIG9yaWdpbi4gVGhlIG1pbmltdW0gdGltZW91dCBpcyAxIHNlY29uZCwgdGhlIG1heGltdW0gaXMgNjAgc2Vjb25kcywgYW5kIHRoZSBkZWZhdWx0IChpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBvdGhlcndpc2UpIGlzIDUgc2Vjb25kcy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtLZWVwLWFsaXZlIHRpbWVvdXQgKGN1c3RvbSBvcmlnaW5zIG9ubHkpXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpbktlZXBhbGl2ZVRpbWVvdXQpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luS2VlcGFsaXZlVGltZW91dD86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgd2FpdHMgZm9yIGEgcmVzcG9uc2UgZnJvbSB0aGUgb3JpZ2luLiBUaGlzIGlzIGFsc28ga25vd24gYXMgdGhlICpvcmlnaW4gcmVzcG9uc2UgdGltZW91dCouIFRoZSBtaW5pbXVtIHRpbWVvdXQgaXMgMSBzZWNvbmQsIHRoZSBtYXhpbXVtIGlzIDYwIHNlY29uZHMsIGFuZCB0aGUgZGVmYXVsdCAoaWYgeW91IGRvbid0IHNwZWNpZnkgb3RoZXJ3aXNlKSBpcyAzMCBzZWNvbmRzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Jlc3BvbnNlIHRpbWVvdXQgKGN1c3RvbSBvcmlnaW5zIG9ubHkpXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpblJlc3BvbnNlVGltZW91dCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5PcmlnaW5SZWFkVGltZW91dD86IG51bWJlclxuLyoqXG4gKiBUaGUgVlBDIG9yaWdpbiBJRC5cbiAqL1xuVnBjT3JpZ2luSWQ6IHN0cmluZ1xufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGlkZW50aWZpZXMgd2F5cyBpbiB3aGljaCB5b3Ugd2FudCB0byByZXN0cmljdCBkaXN0cmlidXRpb24gb2YgeW91ciBjb250ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RyaWN0aW9ucyB7XG5HZW9SZXN0cmljdGlvbjogR2VvUmVzdHJpY3Rpb25cbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250cm9scyB0aGUgY291bnRyaWVzIGluIHdoaWNoIHlvdXIgY29udGVudCBpcyBkaXN0cmlidXRlZC4gQ0YgZGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgeW91ciB1c2VycyB1c2luZyBgYE1heE1pbmRgYCBHZW9JUCBkYXRhYmFzZXMuIFRvIGRpc2FibGUgZ2VvIHJlc3RyaWN0aW9uLCByZW1vdmUgdGhlIFtSZXN0cmljdGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWRpc3RyaWJ1dGlvbmNvbmZpZy5odG1sI2Nmbi1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1kaXN0cmlidXRpb25jb25maWctcmVzdHJpY3Rpb25zKSBwcm9wZXJ0eSBmcm9tIHlvdXIgc3RhY2sgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VvUmVzdHJpY3Rpb24ge1xuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGEgYGBMb2NhdGlvbmBgIGVsZW1lbnQgZm9yIGVhY2ggY291bnRyeSBpbiB3aGljaCB5b3Ugd2FudCBDbG91ZEZyb250IGVpdGhlciB0byBkaXN0cmlidXRlIHlvdXIgY29udGVudCAoYGB3aGl0ZWxpc3RgYCkgb3Igbm90IGRpc3RyaWJ1dGUgeW91ciBjb250ZW50IChgYGJsYWNrbGlzdGBgKS5cbiAqICBUaGUgYGBMb2NhdGlvbmBgIGVsZW1lbnQgaXMgYSB0d28tbGV0dGVyLCB1cHBlcmNhc2UgY291bnRyeSBjb2RlIGZvciBhIGNvdW50cnkgdGhhdCB5b3Ugd2FudCB0byBpbmNsdWRlIGluIHlvdXIgYGBibGFja2xpc3RgYCBvciBgYHdoaXRlbGlzdGBgLiBJbmNsdWRlIG9uZSBgYExvY2F0aW9uYGAgZWxlbWVudCBmb3IgZWFjaCBjb3VudHJ5LlxuICogIENsb3VkRnJvbnQgYW5kIGBgTWF4TWluZGBgIGJvdGggdXNlIGBgSVNPIDMxNjZgYCBjb3VudHJ5IGNvZGVzLiBGb3IgdGhlIGN1cnJlbnQgbGlzdCBvZiBjb3VudHJpZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNvZGVzLCBzZWUgYGBJU08gMzE2Ni0xLWFscGhhLTJgYCBjb2RlIG9uIHRoZSAqSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiogd2Vic2l0ZS4gWW91IGNhbiBhbHNvIHJlZmVyIHRvIHRoZSBjb3VudHJ5IGxpc3Qgb24gdGhlIENsb3VkRnJvbnQgY29uc29sZSwgd2hpY2ggaW5jbHVkZXMgYm90aCBjb3VudHJ5IG5hbWVzIGFuZCBjb2Rlcy5cbiAqL1xuTG9jYXRpb25zPzogc3RyaW5nW11cbi8qKlxuICogVGhlIG1ldGhvZCB0aGF0IHlvdSB3YW50IHRvIHVzZSB0byByZXN0cmljdCBkaXN0cmlidXRpb24gb2YgeW91ciBjb250ZW50IGJ5IGNvdW50cnk6XG4gKiAgICsgIGBgbm9uZWBgOiBObyBnZW8gcmVzdHJpY3Rpb24gaXMgZW5hYmxlZCwgbWVhbmluZyBhY2Nlc3MgdG8gY29udGVudCBpcyBub3QgcmVzdHJpY3RlZCBieSBjbGllbnQgZ2VvIGxvY2F0aW9uLlxuICogICArICBgYGJsYWNrbGlzdGBgOiBUaGUgYGBMb2NhdGlvbmBgIGVsZW1lbnRzIHNwZWNpZnkgdGhlIGNvdW50cmllcyBpbiB3aGljaCB5b3UgZG9uJ3Qgd2FudCBDbG91ZEZyb250IHRvIGRpc3RyaWJ1dGUgeW91ciBjb250ZW50LlxuICogICArICBgYHdoaXRlbGlzdGBgOiBUaGUgYGBMb2NhdGlvbmBgIGVsZW1lbnRzIHNwZWNpZnkgdGhlIGNvdW50cmllcyBpbiB3aGljaCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGRpc3RyaWJ1dGUgeW91ciBjb250ZW50LlxuICovXG5SZXN0cmljdGlvblR5cGU6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgb3JpZ2luIGFzIGFuIFMzIGJ1Y2tldC5cbiAqICAgVGhpcyBwcm9wZXJ0eSBpcyBsZWdhY3kuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgW09yaWdpbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tb3JpZ2luLmh0bWwpIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWN5UzNPcmlnaW4ge1xuLyoqXG4gKiBUaGUgZG9tYWluIG5hbWUgYXNzaWduZWQgdG8geW91ciBDRiBkaXN0cmlidXRpb24uXG4gKi9cbkROU05hbWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgQ0Ygb3JpZ2luIGFjY2VzcyBpZGVudGl0eSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiBVc2UgYW4gb3JpZ2luIGFjY2VzcyBpZGVudGl0eSB0byBjb25maWd1cmUgdGhlIGRpc3RyaWJ1dGlvbiBzbyB0aGF0IGVuZCB1c2VycyBjYW4gb25seSBhY2Nlc3Mgb2JqZWN0cyBpbiBhbiBTMyB0aHJvdWdoIENGLlxuICogICBUaGlzIHByb3BlcnR5IGlzIGxlZ2FjeS4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBbT3JpZ2luQWNjZXNzQ29udHJvbF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWNsb3VkZnJvbnQtb3JpZ2luYWNjZXNzY29udHJvbC5odG1sKSBpbnN0ZWFkLlxuICovXG5PcmlnaW5BY2Nlc3NJZGVudGl0eT86IHN0cmluZ1xufVxuLyoqXG4gKiBBIGxpc3Qgb2YgcGFyYW1ldGVyIHZhbHVlcyB0byBhZGQgdG8gdGhlIHJlc291cmNlLiBBIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgYXMgYSBrZXktdmFsdWUgcGFpci4gQSB2YWxpZCBwYXJhbWV0ZXIgdmFsdWUgbXVzdCBleGlzdCBmb3IgYW55IHBhcmFtZXRlciB0aGF0IGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiB0aGUgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJEZWZpbml0aW9uIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAqL1xuTmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSB2YWx1ZSB0aGF0IHlvdSBhc3NpZ25lZCB0byB0aGUgcGFyYW1ldGVyLlxuICovXG5EZWZpbml0aW9uOiB7XG5TdHJpbmdTY2hlbWE/OiB7XG5Db21tZW50Pzogc3RyaW5nXG5EZWZhdWx0VmFsdWU/OiBzdHJpbmdcblJlcXVpcmVkOiBib29sZWFuXG59XG59XG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgZGlzdHJpYnV0aW9uJ3MgU1NML1RMUyBjb25maWd1cmF0aW9uIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdmlld2Vycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaWV3ZXJDZXJ0aWZpY2F0ZSB7XG4vKipcbiAqIEluIENsb3VkRm9ybWF0aW9uLCB0aGlzIGZpZWxkIG5hbWUgaXMgYGBBY21DZXJ0aWZpY2F0ZUFybmBgLiBOb3RlIHRoZSBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24uXG4gKiAgIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyBgYEFsaWFzZXNgYCAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyBvciBDTkFNRXMpIGFuZCB0aGUgU1NML1RMUyBjZXJ0aWZpY2F0ZSBpcyBzdG9yZWQgaW4gWyhBQ00pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYWNtL2xhdGVzdC91c2VyZ3VpZGUvYWNtLW92ZXJ2aWV3Lmh0bWwpLCBwcm92aWRlIHRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQUNNIGNlcnRpZmljYXRlLiBDbG91ZEZyb250IG9ubHkgc3VwcG9ydHMgQUNNIGNlcnRpZmljYXRlcyBpbiB0aGUgVVMgRWFzdCAoTi4gVmlyZ2luaWEpIFJlZ2lvbiAoYGB1cy1lYXN0LTFgYCkuXG4gKiAgSWYgeW91IHNwZWNpZnkgYW4gQUNNIGNlcnRpZmljYXRlIEFSTiwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHZhbHVlcyBmb3IgYGBNaW5pbXVtUHJvdG9jb2xWZXJzaW9uYGAgYW5kIGBgU1NMU3VwcG9ydE1ldGhvZGBgLiAoSW4gQ2xvdWRGb3JtYXRpb24sIHRoZSBmaWVsZCBuYW1lIGlzIGBgU3NsU3VwcG9ydE1ldGhvZGBgLiBOb3RlIHRoZSBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24uKVxuICovXG5BY21DZXJ0aWZpY2F0ZUFybj86IHN0cmluZ1xuLyoqXG4gKiBJZiB0aGUgZGlzdHJpYnV0aW9uIHVzZXMgdGhlIENsb3VkRnJvbnQgZG9tYWluIG5hbWUgc3VjaCBhcyBgYGQxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0YGAsIHNldCB0aGlzIGZpZWxkIHRvIGBgdHJ1ZWBgLlxuICogIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyBgYEFsaWFzZXNgYCAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyBvciBDTkFNRXMpLCBvbWl0IHRoaXMgZmllbGQgYW5kIHNwZWNpZnkgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIGZpZWxkczpcbiAqICAgKyAgYGBBY21DZXJ0aWZpY2F0ZUFybmBgIG9yIGBgSWFtQ2VydGlmaWNhdGVJZGBgIChzcGVjaWZ5IGEgdmFsdWUgZm9yIG9uZSwgbm90IGJvdGgpIFxuICogICArICAgYGBNaW5pbXVtUHJvdG9jb2xWZXJzaW9uYGAgXG4gKiAgICsgICBgYFNzbFN1cHBvcnRNZXRob2RgYFxuICovXG5DbG91ZEZyb250RGVmYXVsdENlcnRpZmljYXRlPzogYm9vbGVhblxuLyoqXG4gKiBJbiBDbG91ZEZvcm1hdGlvbiwgdGhpcyBmaWVsZCBuYW1lIGlzIGBgSWFtQ2VydGlmaWNhdGVJZGBgLiBOb3RlIHRoZSBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24uXG4gKiAgIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyBgYEFsaWFzZXNgYCAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyBvciBDTkFNRXMpIGFuZCB0aGUgU1NML1RMUyBjZXJ0aWZpY2F0ZSBpcyBzdG9yZWQgaW4gWyhJQU0pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvaWRfY3JlZGVudGlhbHNfc2VydmVyLWNlcnRzLmh0bWwpLCBwcm92aWRlIHRoZSBJRCBvZiB0aGUgSUFNIGNlcnRpZmljYXRlLlxuICogIElmIHlvdSBzcGVjaWZ5IGFuIElBTSBjZXJ0aWZpY2F0ZSBJRCwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHZhbHVlcyBmb3IgYGBNaW5pbXVtUHJvdG9jb2xWZXJzaW9uYGAgYW5kIGBgU1NMU3VwcG9ydE1ldGhvZGBgLiAoSW4gQ2xvdWRGb3JtYXRpb24sIHRoZSBmaWVsZCBuYW1lIGlzIGBgU3NsU3VwcG9ydE1ldGhvZGBgLiBOb3RlIHRoZSBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24uKVxuICovXG5JYW1DZXJ0aWZpY2F0ZUlkPzogc3RyaW5nXG4vKipcbiAqIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyBgYEFsaWFzZXNgYCAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyBvciBDTkFNRXMpLCBzcGVjaWZ5IHRoZSBzZWN1cml0eSBwb2xpY3kgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgSFRUUFMgY29ubmVjdGlvbnMgd2l0aCB2aWV3ZXJzLiBUaGUgc2VjdXJpdHkgcG9saWN5IGRldGVybWluZXMgdHdvIHNldHRpbmdzOlxuICogICArICBUaGUgbWluaW11bSBTU0wvVExTIHByb3RvY29sIHRoYXQgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIGNvbW11bmljYXRlIHdpdGggdmlld2Vycy5cbiAqICAgKyAgVGhlIGNpcGhlcnMgdGhhdCBDbG91ZEZyb250IGNhbiB1c2UgdG8gZW5jcnlwdCB0aGUgY29udGVudCB0aGF0IGl0IHJldHVybnMgdG8gdmlld2Vycy5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VjdXJpdHkgUG9saWN5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI0Rvd25sb2FkRGlzdFZhbHVlcy1zZWN1cml0eS1wb2xpY3kpIGFuZCBbU3VwcG9ydGVkIFByb3RvY29scyBhbmQgQ2lwaGVycyBCZXR3ZWVuIFZpZXdlcnMgYW5kIENsb3VkRnJvbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9zZWN1cmUtY29ubmVjdGlvbnMtc3VwcG9ydGVkLXZpZXdlci1wcm90b2NvbHMtY2lwaGVycy5odG1sI3NlY3VyZS1jb25uZWN0aW9ucy1zdXBwb3J0ZWQtY2lwaGVycykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBPbiB0aGUgQ2xvdWRGcm9udCBjb25zb2xlLCB0aGlzIHNldHRpbmcgaXMgY2FsbGVkICpTZWN1cml0eSBQb2xpY3kqLlxuICogICBXaGVuIHlvdSdyZSB1c2luZyBTTkkgb25seSAoeW91IHNldCBgYFNTTFN1cHBvcnRNZXRob2RgYCB0byBgYHNuaS1vbmx5YGApLCB5b3UgbXVzdCBzcGVjaWZ5IGBgVExTdjFgYCBvciBoaWdoZXIuIChJbiBDbG91ZEZvcm1hdGlvbiwgdGhlIGZpZWxkIG5hbWUgaXMgYGBTc2xTdXBwb3J0TWV0aG9kYGAuIE5vdGUgdGhlIGRpZmZlcmVudCBjYXBpdGFsaXphdGlvbi4pXG4gKiAgSWYgdGhlIGRpc3RyaWJ1dGlvbiB1c2VzIHRoZSBDbG91ZEZyb250IGRvbWFpbiBuYW1lIHN1Y2ggYXMgYGBkMTExMTExYWJjZGVmOC5jbG91ZGZyb250Lm5ldGBgICh5b3Ugc2V0IGBgQ2xvdWRGcm9udERlZmF1bHRDZXJ0aWZpY2F0ZWBgIHRvIGBgdHJ1ZWBgKSwgQ2xvdWRGcm9udCBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIHNlY3VyaXR5IHBvbGljeSB0byBgYFRMU3YxYGAgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgdGhhdCB5b3Ugc2V0IGhlcmUuXG4gKi9cbk1pbmltdW1Qcm90b2NvbFZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogSW4gQ2xvdWRGb3JtYXRpb24sIHRoaXMgZmllbGQgbmFtZSBpcyBgYFNzbFN1cHBvcnRNZXRob2RgYC4gTm90ZSB0aGUgZGlmZmVyZW50IGNhcGl0YWxpemF0aW9uLlxuICogICBJZiB0aGUgZGlzdHJpYnV0aW9uIHVzZXMgYGBBbGlhc2VzYGAgKGFsdGVybmF0ZSBkb21haW4gbmFtZXMgb3IgQ05BTUVzKSwgc3BlY2lmeSB3aGljaCB2aWV3ZXJzIHRoZSBkaXN0cmlidXRpb24gYWNjZXB0cyBIVFRQUyBjb25uZWN0aW9ucyBmcm9tLlxuICogICArICBgYHNuaS1vbmx5YGAg4oCTIFRoZSBkaXN0cmlidXRpb24gYWNjZXB0cyBIVFRQUyBjb25uZWN0aW9ucyBmcm9tIG9ubHkgdmlld2VycyB0aGF0IHN1cHBvcnQgW3NlcnZlciBuYW1lIGluZGljYXRpb24gKFNOSSldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TZXJ2ZXJfTmFtZV9JbmRpY2F0aW9uKS4gVGhpcyBpcyByZWNvbW1lbmRlZC4gTW9zdCBicm93c2VycyBhbmQgY2xpZW50cyBzdXBwb3J0IFNOSS5cbiAqICAgKyAgYGB2aXBgYCDigJMgVGhlIGRpc3RyaWJ1dGlvbiBhY2NlcHRzIEhUVFBTIGNvbm5lY3Rpb25zIGZyb20gYWxsIHZpZXdlcnMgaW5jbHVkaW5nIHRob3NlIHRoYXQgZG9uJ3Qgc3VwcG9ydCBTTkkuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkLCBhbmQgcmVzdWx0cyBpbiBhZGRpdGlvbmFsIG1vbnRobHkgY2hhcmdlcyBmcm9tIENsb3VkRnJvbnQuXG4gKiAgICsgIGBgc3RhdGljLWlwYGAgLSBEbyBub3Qgc3BlY2lmeSB0aGlzIHZhbHVlIHVubGVzcyB5b3VyIGRpc3RyaWJ1dGlvbiBoYXMgYmVlbiBlbmFibGVkIGZvciB0aGlzIGZlYXR1cmUgYnkgdGhlIENsb3VkRnJvbnQgdGVhbS4gSWYgeW91IGhhdmUgYSB1c2UgY2FzZSB0aGF0IHJlcXVpcmVzIHN0YXRpYyBJUCBhZGRyZXNzZXMgZm9yIGEgZGlzdHJpYnV0aW9uLCBjb250YWN0IENsb3VkRnJvbnQgdGhyb3VnaCB0aGUgW0NlbnRlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N1cHBvcnQvaG9tZSkuXG4gKiAgIFxuICogIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyB0aGUgQ2xvdWRGcm9udCBkb21haW4gbmFtZSBzdWNoIGFzIGBgZDExMTExMWFiY2RlZjguY2xvdWRmcm9udC5uZXRgYCwgZG9uJ3Qgc2V0IGEgdmFsdWUgZm9yIHRoaXMgZmllbGQuXG4gKi9cblNzbFN1cHBvcnRNZXRob2Q/OiBzdHJpbmdcbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBgYFRhZ2BgIGtleSBhbmQgYGBUYWdgYCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBBIHN0cmluZyB0aGF0IGNvbnRhaW5zIGBgVGFnYGAga2V5LlxuICogIFRoZSBzdHJpbmcgbGVuZ3RoIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDEyOCBjaGFyYWN0ZXJzLiBWYWxpZCBjaGFyYWN0ZXJzIGluY2x1ZGUgYGBhLXpgYCwgYGBBLVpgYCwgYGAwLTlgYCwgc3BhY2UsIGFuZCB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGBgXyAtIC4gOiAvID0gKyBAYGAuXG4gKi9cbktleTogc3RyaW5nXG4vKipcbiAqIEEgc3RyaW5nIHRoYXQgY29udGFpbnMgYW4gb3B0aW9uYWwgYGBUYWdgYCB2YWx1ZS5cbiAqICBUaGUgc3RyaW5nIGxlbmd0aCBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAyNTYgY2hhcmFjdGVycy4gVmFsaWQgY2hhcmFjdGVycyBpbmNsdWRlIGBgYS16YGAsIGBgQS1aYGAsIGBgMC05YGAsIHNwYWNlLCBhbmQgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyBgYF8gLSAuIDogLyA9ICsgQGBgLlxuICovXG5WYWx1ZTogc3RyaW5nXG59XG4iXX0=
@@ -131,6 +131,10 @@ export type CommunicationLimitTimeUnit = "DAY";
131
131
  * List of communication limit
132
132
  */
133
133
  export type CommunicationLimitList = CommunicationLimit[];
134
+ /**
135
+ * Enumeration of Instance Limits handling in a Campaign
136
+ */
137
+ export type InstanceLimitsHandling = ("OPT_IN" | "OPT_OUT");
134
138
  /**
135
139
  * Definition of AWS::ConnectCampaignsV2::Campaign Resource Type
136
140
  */
@@ -317,6 +321,7 @@ export interface RestrictedPeriod {
317
321
  */
318
322
  export interface CommunicationLimitsConfig {
319
323
  AllChannelsSubtypes?: CommunicationLimits;
324
+ InstanceLimitsHandling?: InstanceLimitsHandling;
320
325
  }
321
326
  /**
322
327
  * Communication limits
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWNvbm5lY3RjYW1wYWlnbnN2Mi1jYW1wYWlnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1jb25uZWN0Y2FtcGFpZ25zdjItY2FtcGFpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2FtcGFpZ24gbmFtZVxuICovXG5leHBvcnQgdHlwZSBDYW1wYWlnbk5hbWUgPSBzdHJpbmdcbi8qKlxuICogQW1hem9uIENvbm5lY3QgSW5zdGFuY2UgSWRcbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFuY2VJZCA9IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9zc2libGUgdHlwZXMgb2YgY2hhbm5lbCBzdWJ0eXBlIGNvbmZpZyBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCB0eXBlIENoYW5uZWxTdWJ0eXBlQ29uZmlnID0gKENoYW5uZWxTdWJ0eXBlQ29uZmlnMSAmIHtcblRlbGVwaG9ueT86IFRlbGVwaG9ueUNoYW5uZWxTdWJ0eXBlQ29uZmlnXG5TbXM/OiBTbXNDaGFubmVsU3VidHlwZUNvbmZpZ1xuRW1haWw/OiBFbWFpbENoYW5uZWxTdWJ0eXBlQ29uZmlnXG59KVxuZXhwb3J0IHR5cGUgQ2hhbm5lbFN1YnR5cGVDb25maWcxID0ge1xuW2s6IHN0cmluZ106IHVua25vd25cbn1cbi8qKlxuICogQWxsb2NhdGVzIG91dGJvdW5kIGNhcGFjaXR5IGZvciB0aGUgc3BlY2lmaWMgY2hhbm5lbCBvZiB0aGlzIGNhbXBhaWduIGJldHdlZW4gbXVsdGlwbGUgYWN0aXZlIGNhbXBhaWduc1xuICovXG5leHBvcnQgdHlwZSBDYXBhY2l0eSA9IG51bWJlclxuLyoqXG4gKiBUaGUgcXVldWUgZm9yIHRoZSBjYWxsXG4gKi9cbmV4cG9ydCB0eXBlIFF1ZXVlSWQgPSBzdHJpbmdcbi8qKlxuICogVGVsZXBob255IE91dGJvdW5kIE1vZGVcbiAqL1xuZXhwb3J0IHR5cGUgVGVsZXBob255T3V0Ym91bmRNb2RlID0gKHtcblByb2dyZXNzaXZlQ29uZmlnPzogUHJvZ3Jlc3NpdmVDb25maWdcblByZWRpY3RpdmVDb25maWc/OiBQcmVkaWN0aXZlQ29uZmlnXG5BZ2VudGxlc3NDb25maWc/OiBBZ2VudGxlc3NDb25maWdcbn0gJiBUZWxlcGhvbnlPdXRib3VuZE1vZGUxKVxuLyoqXG4gKiBUaGUgYmFuZHdpZHRoIGFsbG9jYXRpb24gb2YgYSBxdWV1ZSByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IHR5cGUgQmFuZHdpZHRoQWxsb2NhdGlvbiA9IG51bWJlclxuZXhwb3J0IHR5cGUgVGVsZXBob255T3V0Ym91bmRNb2RlMSA9IHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59XG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb250YWN0IGZsb3cgZm9yIHRoZSBvdXRib3VuZCBjYWxsXG4gKi9cbmV4cG9ydCB0eXBlIENvbnRhY3RGbG93SWQgPSBzdHJpbmdcbi8qKlxuICogVGhlIHBob25lIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIEFtYXpvbiBDb25uZWN0IGluc3RhbmNlLCBpbiBFLjE2NCBmb3JtYXQuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHNvdXJjZSBwaG9uZSBudW1iZXIsIHlvdSBtdXN0IHNwZWNpZnkgYSBxdWV1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgU291cmNlUGhvbmVOdW1iZXIgPSBzdHJpbmdcbi8qKlxuICogQXJuXG4gKi9cbmV4cG9ydCB0eXBlIEFybiA9IHN0cmluZ1xuLyoqXG4gKiBFbWFpbCBhZGRyZXNzIHVzZWQgZm9yIEVtYWlsIG1lc3NhZ2VzXG4gKi9cbmV4cG9ydCB0eXBlIEVtYWlsQWRkcmVzcyA9IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgc291cmNlIGVtYWlsIGFkZHJlc3MgZGlzcGxheSBuYW1lXG4gKi9cbmV4cG9ydCB0eXBlIFNvdXJjZUVtYWlsQWRkcmVzc0Rpc3BsYXlOYW1lID0gc3RyaW5nXG4vKipcbiAqIFRoZSBwb3NzaWJsZSBzb3VyY2Ugb2YgdGhlIGNhbXBhaWduXG4gKi9cbmV4cG9ydCB0eXBlIFNvdXJjZSA9ICh7XG5DdXN0b21lclByb2ZpbGVzU2VnbWVudEFybj86IEFyblxuRXZlbnRUcmlnZ2VyPzogRXZlbnRUcmlnZ2VyXG59ICYgU291cmNlMSlcbmV4cG9ydCB0eXBlIFNvdXJjZTEgPSB7XG5bazogc3RyaW5nXTogdW5rbm93blxufVxuLyoqXG4gKiBUaW1lc3RhbXAgd2l0aCBubyBVVEMgb2Zmc2V0IG9yIHRpbWV6b25lXG4gKi9cbmV4cG9ydCB0eXBlIFRpbWVTdGFtcCA9IHN0cmluZ1xuLyoqXG4gKiBUaW1lIGR1cmF0aW9uIGluIElTTyA4NjAxIGZvcm1hdFxuICovXG5leHBvcnQgdHlwZSBJc284NjAxRHVyYXRpb24gPSBzdHJpbmdcbi8qKlxuICogVGltZSBab25lIElkIGluIHRoZSBJQU5BIGZvcm1hdFxuICovXG5leHBvcnQgdHlwZSBUaW1lWm9uZSA9IHN0cmluZ1xuLyoqXG4gKiBMb2NhbCBUaW1lWm9uZSBEZXRlY3Rpb24gbWV0aG9kXG4gKi9cbmV4cG9ydCB0eXBlIExvY2FsVGltZVpvbmVEZXRlY3Rpb25UeXBlID0gKFwiWklQX0NPREVcIiB8IFwiQVJFQV9DT0RFXCIpXG4vKipcbiAqIExvY2FsIFRpbWVab25lIERldGVjdGlvbiBtZXRob2QgbGlzdFxuICovXG5leHBvcnQgdHlwZSBMb2NhbFRpbWVab25lRGV0ZWN0aW9uID0gTG9jYWxUaW1lWm9uZURldGVjdGlvblR5cGVbXVxuLyoqXG4gKiBEYXkgb2Ygd2Vla1xuICovXG5leHBvcnQgdHlwZSBEYXlPZldlZWsgPSAoXCJNT05EQVlcIiB8IFwiVFVFU0RBWVwiIHwgXCJXRURORVNEQVlcIiB8IFwiVEhVUlNEQVlcIiB8IFwiRlJJREFZXCIgfCBcIlNBVFVSREFZXCIgfCBcIlNVTkRBWVwiKVxuLyoqXG4gKiBUaW1lIGluIElTTyA4NjAxIGZvcm1hdCwgZS5nLiBUMjM6MTFcbiAqL1xuZXhwb3J0IHR5cGUgSXNvODYwMVRpbWUgPSBzdHJpbmdcbi8qKlxuICogTGlzdCBvZiB0aW1lIHJhbmdlXG4gKi9cbmV4cG9ydCB0eXBlIFRpbWVSYW5nZUxpc3QgPSBUaW1lUmFuZ2VbXVxuLyoqXG4gKiBEYWlseSBIb3VycyBtYXBcbiAqL1xuZXhwb3J0IHR5cGUgRGFpbHlIb3VycyA9IERhaWx5SG91cltdXG4vKipcbiAqIFJlc3RyaWN0ZWQgcGVyaW9kIGNvbmZpZ1xuICovXG5leHBvcnQgdHlwZSBSZXN0cmljdGVkUGVyaW9kcyA9ICh7XG5SZXN0cmljdGVkUGVyaW9kTGlzdD86IFJlc3RyaWN0ZWRQZXJpb2RMaXN0XG59ICYgUmVzdHJpY3RlZFBlcmlvZHMxKVxuLyoqXG4gKiBEYXRlIGluIElTTyA4NjAxIGZvcm1hdCwgZS5nLiAyMDI0LTAxLTAxXG4gKi9cbmV4cG9ydCB0eXBlIElzbzg2MDFEYXRlID0gc3RyaW5nXG4vKipcbiAqIExpc3Qgb2YgcmVzdHJpY3RlZCBwZXJpb2RcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdHJpY3RlZFBlcmlvZExpc3QgPSBSZXN0cmljdGVkUGVyaW9kW11cbmV4cG9ydCB0eXBlIFJlc3RyaWN0ZWRQZXJpb2RzMSA9IHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59XG4vKipcbiAqIFRoZSBjb21tdW5pY2F0aW9uIGxpbWl0IHRpbWUgdW5pdFxuICovXG5leHBvcnQgdHlwZSBDb21tdW5pY2F0aW9uTGltaXRUaW1lVW5pdCA9IFwiREFZXCJcbi8qKlxuICogTGlzdCBvZiBjb21tdW5pY2F0aW9uIGxpbWl0XG4gKi9cbmV4cG9ydCB0eXBlIENvbW11bmljYXRpb25MaW1pdExpc3QgPSBDb21tdW5pY2F0aW9uTGltaXRbXVxuXG4vKipcbiAqIERlZmluaXRpb24gb2YgQVdTOjpDb25uZWN0Q2FtcGFpZ25zVjI6OkNhbXBhaWduIFJlc291cmNlIFR5cGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0NPTk5FQ1RDQU1QQUlHTlNWMl9DQU1QQUlHTiB7XG4vKipcbiAqIEFtYXpvbiBDb25uZWN0IENhbXBhaWduIEFyblxuICovXG5Bcm4/OiBzdHJpbmdcbk5hbWU6IENhbXBhaWduTmFtZVxuQ29ubmVjdEluc3RhbmNlSWQ6IEluc3RhbmNlSWRcbkNoYW5uZWxTdWJ0eXBlQ29uZmlnOiBDaGFubmVsU3VidHlwZUNvbmZpZ1xuU291cmNlPzogU291cmNlXG5Db25uZWN0Q2FtcGFpZ25GbG93QXJuPzogQXJuXG5TY2hlZHVsZT86IFNjaGVkdWxlXG5Db21tdW5pY2F0aW9uVGltZUNvbmZpZz86IENvbW11bmljYXRpb25UaW1lQ29uZmlnXG5Db21tdW5pY2F0aW9uTGltaXRzT3ZlcnJpZGU/OiBDb21tdW5pY2F0aW9uTGltaXRzQ29uZmlnXG4vKipcbiAqIE9uZSBvciBtb3JlIHRhZ3MuXG4gKiBcbiAqIEBtYXhJdGVtcyA1MFxuICovXG5UYWdzPzogVGFnW11cbn1cbi8qKlxuICogVGVsZXBob255IENoYW5uZWwgU3VidHlwZSBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZWxlcGhvbnlDaGFubmVsU3VidHlwZUNvbmZpZyB7XG5DYXBhY2l0eT86IENhcGFjaXR5XG5Db25uZWN0UXVldWVJZD86IFF1ZXVlSWRcbk91dGJvdW5kTW9kZTogVGVsZXBob255T3V0Ym91bmRNb2RlXG5EZWZhdWx0T3V0Ym91bmRDb25maWc6IFRlbGVwaG9ueU91dGJvdW5kQ29uZmlnXG59XG4vKipcbiAqIFByb2dyZXNzaXZlIGNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyZXNzaXZlQ29uZmlnIHtcbkJhbmR3aWR0aEFsbG9jYXRpb246IEJhbmR3aWR0aEFsbG9jYXRpb25cbn1cbi8qKlxuICogUHJlZGljdGl2ZSBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVkaWN0aXZlQ29uZmlnIHtcbkJhbmR3aWR0aEFsbG9jYXRpb246IEJhbmR3aWR0aEFsbG9jYXRpb25cbn1cbi8qKlxuICogQWdlbnRsZXNzIGNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50bGVzc0NvbmZpZyB7XG5cbn1cbi8qKlxuICogRGVmYXVsdCBUZWxlcGhvbmUgT3V0Ym91bmQgY29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVsZXBob255T3V0Ym91bmRDb25maWcge1xuQ29ubmVjdENvbnRhY3RGbG93SWQ6IENvbnRhY3RGbG93SWRcbkNvbm5lY3RTb3VyY2VQaG9uZU51bWJlcj86IFNvdXJjZVBob25lTnVtYmVyXG5BbnN3ZXJNYWNoaW5lRGV0ZWN0aW9uQ29uZmlnPzogQW5zd2VyTWFjaGluZURldGVjdGlvbkNvbmZpZ1xufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiB1c2VkIGZvciBhbnN3ZXJpbmcgbWFjaGluZSBkZXRlY3Rpb24gZHVyaW5nIG91dGJvdW5kIGNhbGxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5zd2VyTWFjaGluZURldGVjdGlvbkNvbmZpZyB7XG4vKipcbiAqIEZsYWcgdG8gZGVjaWRlZCB3aGV0aGVyIG91dGJvdW5kIGNhbGxzIHNob3VsZCBoYXZlIGFuc3dlcmluZyBtYWNoaW5lIGRldGVjdGlvbiBlbmFibGVkIG9yIG5vdFxuICovXG5FbmFibGVBbnN3ZXJNYWNoaW5lRGV0ZWN0aW9uOiBib29sZWFuXG4vKipcbiAqIEVuYWJsZXMgZGV0ZWN0aW9uIG9mIHByb21wdHMgKGUuZy4sIGJlZXAgYWZ0ZXIgYWZ0ZXIgYSB2b2ljZW1haWwgZ3JlZXRpbmcpXG4gKi9cbkF3YWl0QW5zd2VyTWFjaGluZVByb21wdD86IGJvb2xlYW5cbn1cbi8qKlxuICogU01TIENoYW5uZWwgU3VidHlwZSBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbXNDaGFubmVsU3VidHlwZUNvbmZpZyB7XG5DYXBhY2l0eT86IENhcGFjaXR5XG5PdXRib3VuZE1vZGU6IFNtc091dGJvdW5kTW9kZVxuRGVmYXVsdE91dGJvdW5kQ29uZmlnOiBTbXNPdXRib3VuZENvbmZpZ1xufVxuLyoqXG4gKiBTTVMgT3V0Ym91bmQgTW9kZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNtc091dGJvdW5kTW9kZSB7XG5BZ2VudGxlc3NDb25maWc/OiBBZ2VudGxlc3NDb25maWdcbn1cbi8qKlxuICogRGVmYXVsdCBTTVMgb3V0Ym91bmQgY29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU21zT3V0Ym91bmRDb25maWcge1xuQ29ubmVjdFNvdXJjZVBob25lTnVtYmVyQXJuOiBBcm5cbldpc2RvbVRlbXBsYXRlQXJuOiBBcm5cbn1cbi8qKlxuICogRW1haWwgQ2hhbm5lbCBTdWJ0eXBlIGNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsQ2hhbm5lbFN1YnR5cGVDb25maWcge1xuQ2FwYWNpdHk/OiBDYXBhY2l0eVxuT3V0Ym91bmRNb2RlOiBFbWFpbE91dGJvdW5kTW9kZVxuRGVmYXVsdE91dGJvdW5kQ29uZmlnOiBFbWFpbE91dGJvdW5kQ29uZmlnXG59XG4vKipcbiAqIEVtYWlsIE91dGJvdW5kIE1vZGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbE91dGJvdW5kTW9kZSB7XG5BZ2VudGxlc3NDb25maWc/OiBBZ2VudGxlc3NDb25maWdcbn1cbi8qKlxuICogRGVmYXVsdCBTTVMgb3V0Ym91bmQgY29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxPdXRib3VuZENvbmZpZyB7XG5Db25uZWN0U291cmNlRW1haWxBZGRyZXNzOiBFbWFpbEFkZHJlc3NcblNvdXJjZUVtYWlsQWRkcmVzc0Rpc3BsYXlOYW1lPzogU291cmNlRW1haWxBZGRyZXNzRGlzcGxheU5hbWVcbldpc2RvbVRlbXBsYXRlQXJuOiBBcm5cbn1cbi8qKlxuICogVGhlIGV2ZW50IHRyaWdnZXIgb2YgdGhlIGNhbXBhaWduXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRUcmlnZ2VyIHtcbkN1c3RvbWVyUHJvZmlsZXNEb21haW5Bcm4/OiBBcm5cbn1cbi8qKlxuICogQ2FtcGFpZ24gc2NoZWR1bGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZSB7XG5TdGFydFRpbWU6IFRpbWVTdGFtcFxuRW5kVGltZTogVGltZVN0YW1wXG5SZWZyZXNoRnJlcXVlbmN5PzogSXNvODYwMUR1cmF0aW9uXG59XG4vKipcbiAqIENhbXBhaWduIGNvbW11bmljYXRpb24gdGltZSBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tdW5pY2F0aW9uVGltZUNvbmZpZyB7XG5Mb2NhbFRpbWVab25lQ29uZmlnOiBMb2NhbFRpbWVab25lQ29uZmlnXG5UZWxlcGhvbnk/OiBUaW1lV2luZG93XG5TbXM/OiBUaW1lV2luZG93XG5FbWFpbD86IFRpbWVXaW5kb3dcbn1cbi8qKlxuICogTG9jYWwgdGltZSB6b25lIGNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsVGltZVpvbmVDb25maWcge1xuRGVmYXVsdFRpbWVab25lPzogVGltZVpvbmVcbkxvY2FsVGltZVpvbmVEZXRlY3Rpb24/OiBMb2NhbFRpbWVab25lRGV0ZWN0aW9uXG59XG4vKipcbiAqIFRpbWUgd2luZG93IGNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVXaW5kb3cge1xuT3BlbkhvdXJzOiBPcGVuSG91cnNcblJlc3RyaWN0ZWRQZXJpb2RzPzogUmVzdHJpY3RlZFBlcmlvZHNcbn1cbi8qKlxuICogT3BlbiBIb3VycyBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuSG91cnMge1xuRGFpbHlIb3VyczogRGFpbHlIb3Vyc1xufVxuLyoqXG4gKiBEYWlseSBIb3VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFpbHlIb3VyIHtcbktleT86IERheU9mV2Vla1xuVmFsdWU/OiBUaW1lUmFuZ2VMaXN0XG59XG4vKipcbiAqIFRpbWUgcmFuZ2UgaW4gMjQgaG91ciBmb3JtYXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lUmFuZ2Uge1xuU3RhcnRUaW1lOiBJc284NjAxVGltZVxuRW5kVGltZTogSXNvODYwMVRpbWVcbn1cbi8qKlxuICogUmVzdHJpY3RlZCBwZXJpb2RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN0cmljdGVkUGVyaW9kIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgYSByZXN0cmljdGVkIHBlcmlvZFxuICovXG5OYW1lPzogc3RyaW5nXG5TdGFydERhdGU6IElzbzg2MDFEYXRlXG5FbmREYXRlOiBJc284NjAxRGF0ZVxufVxuLyoqXG4gKiBDb21tdW5pY2F0aW9uIGxpbWl0cyBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tdW5pY2F0aW9uTGltaXRzQ29uZmlnIHtcbkFsbENoYW5uZWxzU3VidHlwZXM/OiBDb21tdW5pY2F0aW9uTGltaXRzXG59XG4vKipcbiAqIENvbW11bmljYXRpb24gbGltaXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbXVuaWNhdGlvbkxpbWl0cyB7XG5Db21tdW5pY2F0aW9uTGltaXRMaXN0PzogQ29tbXVuaWNhdGlvbkxpbWl0TGlzdFxufVxuLyoqXG4gKiBDb21tdW5pY2F0aW9uIExpbWl0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbXVuaWNhdGlvbkxpbWl0IHtcbk1heENvdW50UGVyUmVjaXBpZW50OiBudW1iZXJcbkZyZXF1ZW5jeTogbnVtYmVyXG5Vbml0OiBDb21tdW5pY2F0aW9uTGltaXRUaW1lVW5pdFxufVxuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBUaGUga2V5IG5hbWUgb2YgdGhlIHRhZy5cbiAqL1xuS2V5OiBzdHJpbmdcbi8qKlxuICogVGhlIHZhbHVlIGZvciB0aGUgdGFnLlxuICovXG5WYWx1ZTogc3RyaW5nXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWNvbm5lY3RjYW1wYWlnbnN2Mi1jYW1wYWlnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1jb25uZWN0Y2FtcGFpZ25zdjItY2FtcGFpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2FtcGFpZ24gbmFtZVxuICovXG5leHBvcnQgdHlwZSBDYW1wYWlnbk5hbWUgPSBzdHJpbmdcbi8qKlxuICogQW1hem9uIENvbm5lY3QgSW5zdGFuY2UgSWRcbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFuY2VJZCA9IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9zc2libGUgdHlwZXMgb2YgY2hhbm5lbCBzdWJ0eXBlIGNvbmZpZyBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCB0eXBlIENoYW5uZWxTdWJ0eXBlQ29uZmlnID0gKENoYW5uZWxTdWJ0eXBlQ29uZmlnMSAmIHtcblRlbGVwaG9ueT86IFRlbGVwaG9ueUNoYW5uZWxTdWJ0eXBlQ29uZmlnXG5TbXM/OiBTbXNDaGFubmVsU3VidHlwZUNvbmZpZ1xuRW1haWw/OiBFbWFpbENoYW5uZWxTdWJ0eXBlQ29uZmlnXG59KVxuZXhwb3J0IHR5cGUgQ2hhbm5lbFN1YnR5cGVDb25maWcxID0ge1xuW2s6IHN0cmluZ106IHVua25vd25cbn1cbi8qKlxuICogQWxsb2NhdGVzIG91dGJvdW5kIGNhcGFjaXR5IGZvciB0aGUgc3BlY2lmaWMgY2hhbm5lbCBvZiB0aGlzIGNhbXBhaWduIGJldHdlZW4gbXVsdGlwbGUgYWN0aXZlIGNhbXBhaWduc1xuICovXG5leHBvcnQgdHlwZSBDYXBhY2l0eSA9IG51bWJlclxuLyoqXG4gKiBUaGUgcXVldWUgZm9yIHRoZSBjYWxsXG4gKi9cbmV4cG9ydCB0eXBlIFF1ZXVlSWQgPSBzdHJpbmdcbi8qKlxuICogVGVsZXBob255IE91dGJvdW5kIE1vZGVcbiAqL1xuZXhwb3J0IHR5cGUgVGVsZXBob255T3V0Ym91bmRNb2RlID0gKHtcblByb2dyZXNzaXZlQ29uZmlnPzogUHJvZ3Jlc3NpdmVDb25maWdcblByZWRpY3RpdmVDb25maWc/OiBQcmVkaWN0aXZlQ29uZmlnXG5BZ2VudGxlc3NDb25maWc/OiBBZ2VudGxlc3NDb25maWdcbn0gJiBUZWxlcGhvbnlPdXRib3VuZE1vZGUxKVxuLyoqXG4gKiBUaGUgYmFuZHdpZHRoIGFsbG9jYXRpb24gb2YgYSBxdWV1ZSByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IHR5cGUgQmFuZHdpZHRoQWxsb2NhdGlvbiA9IG51bWJlclxuZXhwb3J0IHR5cGUgVGVsZXBob255T3V0Ym91bmRNb2RlMSA9IHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59XG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb250YWN0IGZsb3cgZm9yIHRoZSBvdXRib3VuZCBjYWxsXG4gKi9cbmV4cG9ydCB0eXBlIENvbnRhY3RGbG93SWQgPSBzdHJpbmdcbi8qKlxuICogVGhlIHBob25lIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIEFtYXpvbiBDb25uZWN0IGluc3RhbmNlLCBpbiBFLjE2NCBmb3JtYXQuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHNvdXJjZSBwaG9uZSBudW1iZXIsIHlvdSBtdXN0IHNwZWNpZnkgYSBxdWV1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgU291cmNlUGhvbmVOdW1iZXIgPSBzdHJpbmdcbi8qKlxuICogQXJuXG4gKi9cbmV4cG9ydCB0eXBlIEFybiA9IHN0cmluZ1xuLyoqXG4gKiBFbWFpbCBhZGRyZXNzIHVzZWQgZm9yIEVtYWlsIG1lc3NhZ2VzXG4gKi9cbmV4cG9ydCB0eXBlIEVtYWlsQWRkcmVzcyA9IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgc291cmNlIGVtYWlsIGFkZHJlc3MgZGlzcGxheSBuYW1lXG4gKi9cbmV4cG9ydCB0eXBlIFNvdXJjZUVtYWlsQWRkcmVzc0Rpc3BsYXlOYW1lID0gc3RyaW5nXG4vKipcbiAqIFRoZSBwb3NzaWJsZSBzb3VyY2Ugb2YgdGhlIGNhbXBhaWduXG4gKi9cbmV4cG9ydCB0eXBlIFNvdXJjZSA9ICh7XG5DdXN0b21lclByb2ZpbGVzU2VnbWVudEFybj86IEFyblxuRXZlbnRUcmlnZ2VyPzogRXZlbnRUcmlnZ2VyXG59ICYgU291cmNlMSlcbmV4cG9ydCB0eXBlIFNvdXJjZTEgPSB7XG5bazogc3RyaW5nXTogdW5rbm93blxufVxuLyoqXG4gKiBUaW1lc3RhbXAgd2l0aCBubyBVVEMgb2Zmc2V0IG9yIHRpbWV6b25lXG4gKi9cbmV4cG9ydCB0eXBlIFRpbWVTdGFtcCA9IHN0cmluZ1xuLyoqXG4gKiBUaW1lIGR1cmF0aW9uIGluIElTTyA4NjAxIGZvcm1hdFxuICovXG5leHBvcnQgdHlwZSBJc284NjAxRHVyYXRpb24gPSBzdHJpbmdcbi8qKlxuICogVGltZSBab25lIElkIGluIHRoZSBJQU5BIGZvcm1hdFxuICovXG5leHBvcnQgdHlwZSBUaW1lWm9uZSA9IHN0cmluZ1xuLyoqXG4gKiBMb2NhbCBUaW1lWm9uZSBEZXRlY3Rpb24gbWV0aG9kXG4gKi9cbmV4cG9ydCB0eXBlIExvY2FsVGltZVpvbmVEZXRlY3Rpb25UeXBlID0gKFwiWklQX0NPREVcIiB8IFwiQVJFQV9DT0RFXCIpXG4vKipcbiAqIExvY2FsIFRpbWVab25lIERldGVjdGlvbiBtZXRob2QgbGlzdFxuICovXG5leHBvcnQgdHlwZSBMb2NhbFRpbWVab25lRGV0ZWN0aW9uID0gTG9jYWxUaW1lWm9uZURldGVjdGlvblR5cGVbXVxuLyoqXG4gKiBEYXkgb2Ygd2Vla1xuICovXG5leHBvcnQgdHlwZSBEYXlPZldlZWsgPSAoXCJNT05EQVlcIiB8IFwiVFVFU0RBWVwiIHwgXCJXRURORVNEQVlcIiB8IFwiVEhVUlNEQVlcIiB8IFwiRlJJREFZXCIgfCBcIlNBVFVSREFZXCIgfCBcIlNVTkRBWVwiKVxuLyoqXG4gKiBUaW1lIGluIElTTyA4NjAxIGZvcm1hdCwgZS5nLiBUMjM6MTFcbiAqL1xuZXhwb3J0IHR5cGUgSXNvODYwMVRpbWUgPSBzdHJpbmdcbi8qKlxuICogTGlzdCBvZiB0aW1lIHJhbmdlXG4gKi9cbmV4cG9ydCB0eXBlIFRpbWVSYW5nZUxpc3QgPSBUaW1lUmFuZ2VbXVxuLyoqXG4gKiBEYWlseSBIb3VycyBtYXBcbiAqL1xuZXhwb3J0IHR5cGUgRGFpbHlIb3VycyA9IERhaWx5SG91cltdXG4vKipcbiAqIFJlc3RyaWN0ZWQgcGVyaW9kIGNvbmZpZ1xuICovXG5leHBvcnQgdHlwZSBSZXN0cmljdGVkUGVyaW9kcyA9ICh7XG5SZXN0cmljdGVkUGVyaW9kTGlzdD86IFJlc3RyaWN0ZWRQZXJpb2RMaXN0XG59ICYgUmVzdHJpY3RlZFBlcmlvZHMxKVxuLyoqXG4gKiBEYXRlIGluIElTTyA4NjAxIGZvcm1hdCwgZS5nLiAyMDI0LTAxLTAxXG4gKi9cbmV4cG9ydCB0eXBlIElzbzg2MDFEYXRlID0gc3RyaW5nXG4vKipcbiAqIExpc3Qgb2YgcmVzdHJpY3RlZCBwZXJpb2RcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdHJpY3RlZFBlcmlvZExpc3QgPSBSZXN0cmljdGVkUGVyaW9kW11cbmV4cG9ydCB0eXBlIFJlc3RyaWN0ZWRQZXJpb2RzMSA9IHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59XG4vKipcbiAqIFRoZSBjb21tdW5pY2F0aW9uIGxpbWl0IHRpbWUgdW5pdFxuICovXG5leHBvcnQgdHlwZSBDb21tdW5pY2F0aW9uTGltaXRUaW1lVW5pdCA9IFwiREFZXCJcbi8qKlxuICogTGlzdCBvZiBjb21tdW5pY2F0aW9uIGxpbWl0XG4gKi9cbmV4cG9ydCB0eXBlIENvbW11bmljYXRpb25MaW1pdExpc3QgPSBDb21tdW5pY2F0aW9uTGltaXRbXVxuLyoqXG4gKiBFbnVtZXJhdGlvbiBvZiBJbnN0YW5jZSBMaW1pdHMgaGFuZGxpbmcgaW4gYSBDYW1wYWlnblxuICovXG5leHBvcnQgdHlwZSBJbnN0YW5jZUxpbWl0c0hhbmRsaW5nID0gKFwiT1BUX0lOXCIgfCBcIk9QVF9PVVRcIilcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIEFXUzo6Q29ubmVjdENhbXBhaWduc1YyOjpDYW1wYWlnbiBSZXNvdXJjZSBUeXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19DT05ORUNUQ0FNUEFJR05TVjJfQ0FNUEFJR04ge1xuLyoqXG4gKiBBbWF6b24gQ29ubmVjdCBDYW1wYWlnbiBBcm5cbiAqL1xuQXJuPzogc3RyaW5nXG5OYW1lOiBDYW1wYWlnbk5hbWVcbkNvbm5lY3RJbnN0YW5jZUlkOiBJbnN0YW5jZUlkXG5DaGFubmVsU3VidHlwZUNvbmZpZzogQ2hhbm5lbFN1YnR5cGVDb25maWdcblNvdXJjZT86IFNvdXJjZVxuQ29ubmVjdENhbXBhaWduRmxvd0Fybj86IEFyblxuU2NoZWR1bGU/OiBTY2hlZHVsZVxuQ29tbXVuaWNhdGlvblRpbWVDb25maWc/OiBDb21tdW5pY2F0aW9uVGltZUNvbmZpZ1xuQ29tbXVuaWNhdGlvbkxpbWl0c092ZXJyaWRlPzogQ29tbXVuaWNhdGlvbkxpbWl0c0NvbmZpZ1xuLyoqXG4gKiBPbmUgb3IgbW9yZSB0YWdzLlxuICogXG4gKiBAbWF4SXRlbXMgNTBcbiAqL1xuVGFncz86IFRhZ1tdXG59XG4vKipcbiAqIFRlbGVwaG9ueSBDaGFubmVsIFN1YnR5cGUgY29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVsZXBob255Q2hhbm5lbFN1YnR5cGVDb25maWcge1xuQ2FwYWNpdHk/OiBDYXBhY2l0eVxuQ29ubmVjdFF1ZXVlSWQ/OiBRdWV1ZUlkXG5PdXRib3VuZE1vZGU6IFRlbGVwaG9ueU91dGJvdW5kTW9kZVxuRGVmYXVsdE91dGJvdW5kQ29uZmlnOiBUZWxlcGhvbnlPdXRib3VuZENvbmZpZ1xufVxuLyoqXG4gKiBQcm9ncmVzc2l2ZSBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9ncmVzc2l2ZUNvbmZpZyB7XG5CYW5kd2lkdGhBbGxvY2F0aW9uOiBCYW5kd2lkdGhBbGxvY2F0aW9uXG59XG4vKipcbiAqIFByZWRpY3RpdmUgY29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlZGljdGl2ZUNvbmZpZyB7XG5CYW5kd2lkdGhBbGxvY2F0aW9uOiBCYW5kd2lkdGhBbGxvY2F0aW9uXG59XG4vKipcbiAqIEFnZW50bGVzcyBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZ2VudGxlc3NDb25maWcge1xuXG59XG4vKipcbiAqIERlZmF1bHQgVGVsZXBob25lIE91dGJvdW5kIGNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbGVwaG9ueU91dGJvdW5kQ29uZmlnIHtcbkNvbm5lY3RDb250YWN0Rmxvd0lkOiBDb250YWN0Rmxvd0lkXG5Db25uZWN0U291cmNlUGhvbmVOdW1iZXI/OiBTb3VyY2VQaG9uZU51bWJlclxuQW5zd2VyTWFjaGluZURldGVjdGlvbkNvbmZpZz86IEFuc3dlck1hY2hpbmVEZXRlY3Rpb25Db25maWdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gdXNlZCBmb3IgYW5zd2VyaW5nIG1hY2hpbmUgZGV0ZWN0aW9uIGR1cmluZyBvdXRib3VuZCBjYWxsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFuc3dlck1hY2hpbmVEZXRlY3Rpb25Db25maWcge1xuLyoqXG4gKiBGbGFnIHRvIGRlY2lkZWQgd2hldGhlciBvdXRib3VuZCBjYWxscyBzaG91bGQgaGF2ZSBhbnN3ZXJpbmcgbWFjaGluZSBkZXRlY3Rpb24gZW5hYmxlZCBvciBub3RcbiAqL1xuRW5hYmxlQW5zd2VyTWFjaGluZURldGVjdGlvbjogYm9vbGVhblxuLyoqXG4gKiBFbmFibGVzIGRldGVjdGlvbiBvZiBwcm9tcHRzIChlLmcuLCBiZWVwIGFmdGVyIGFmdGVyIGEgdm9pY2VtYWlsIGdyZWV0aW5nKVxuICovXG5Bd2FpdEFuc3dlck1hY2hpbmVQcm9tcHQ/OiBib29sZWFuXG59XG4vKipcbiAqIFNNUyBDaGFubmVsIFN1YnR5cGUgY29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU21zQ2hhbm5lbFN1YnR5cGVDb25maWcge1xuQ2FwYWNpdHk/OiBDYXBhY2l0eVxuT3V0Ym91bmRNb2RlOiBTbXNPdXRib3VuZE1vZGVcbkRlZmF1bHRPdXRib3VuZENvbmZpZzogU21zT3V0Ym91bmRDb25maWdcbn1cbi8qKlxuICogU01TIE91dGJvdW5kIE1vZGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbXNPdXRib3VuZE1vZGUge1xuQWdlbnRsZXNzQ29uZmlnPzogQWdlbnRsZXNzQ29uZmlnXG59XG4vKipcbiAqIERlZmF1bHQgU01TIG91dGJvdW5kIGNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNtc091dGJvdW5kQ29uZmlnIHtcbkNvbm5lY3RTb3VyY2VQaG9uZU51bWJlckFybjogQXJuXG5XaXNkb21UZW1wbGF0ZUFybjogQXJuXG59XG4vKipcbiAqIEVtYWlsIENoYW5uZWwgU3VidHlwZSBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbENoYW5uZWxTdWJ0eXBlQ29uZmlnIHtcbkNhcGFjaXR5PzogQ2FwYWNpdHlcbk91dGJvdW5kTW9kZTogRW1haWxPdXRib3VuZE1vZGVcbkRlZmF1bHRPdXRib3VuZENvbmZpZzogRW1haWxPdXRib3VuZENvbmZpZ1xufVxuLyoqXG4gKiBFbWFpbCBPdXRib3VuZCBNb2RlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxPdXRib3VuZE1vZGUge1xuQWdlbnRsZXNzQ29uZmlnPzogQWdlbnRsZXNzQ29uZmlnXG59XG4vKipcbiAqIERlZmF1bHQgU01TIG91dGJvdW5kIGNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsT3V0Ym91bmRDb25maWcge1xuQ29ubmVjdFNvdXJjZUVtYWlsQWRkcmVzczogRW1haWxBZGRyZXNzXG5Tb3VyY2VFbWFpbEFkZHJlc3NEaXNwbGF5TmFtZT86IFNvdXJjZUVtYWlsQWRkcmVzc0Rpc3BsYXlOYW1lXG5XaXNkb21UZW1wbGF0ZUFybjogQXJuXG59XG4vKipcbiAqIFRoZSBldmVudCB0cmlnZ2VyIG9mIHRoZSBjYW1wYWlnblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50VHJpZ2dlciB7XG5DdXN0b21lclByb2ZpbGVzRG9tYWluQXJuPzogQXJuXG59XG4vKipcbiAqIENhbXBhaWduIHNjaGVkdWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGUge1xuU3RhcnRUaW1lOiBUaW1lU3RhbXBcbkVuZFRpbWU6IFRpbWVTdGFtcFxuUmVmcmVzaEZyZXF1ZW5jeT86IElzbzg2MDFEdXJhdGlvblxufVxuLyoqXG4gKiBDYW1wYWlnbiBjb21tdW5pY2F0aW9uIHRpbWUgY29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbXVuaWNhdGlvblRpbWVDb25maWcge1xuTG9jYWxUaW1lWm9uZUNvbmZpZzogTG9jYWxUaW1lWm9uZUNvbmZpZ1xuVGVsZXBob255PzogVGltZVdpbmRvd1xuU21zPzogVGltZVdpbmRvd1xuRW1haWw/OiBUaW1lV2luZG93XG59XG4vKipcbiAqIExvY2FsIHRpbWUgem9uZSBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbFRpbWVab25lQ29uZmlnIHtcbkRlZmF1bHRUaW1lWm9uZT86IFRpbWVab25lXG5Mb2NhbFRpbWVab25lRGV0ZWN0aW9uPzogTG9jYWxUaW1lWm9uZURldGVjdGlvblxufVxuLyoqXG4gKiBUaW1lIHdpbmRvdyBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lV2luZG93IHtcbk9wZW5Ib3VyczogT3BlbkhvdXJzXG5SZXN0cmljdGVkUGVyaW9kcz86IFJlc3RyaWN0ZWRQZXJpb2RzXG59XG4vKipcbiAqIE9wZW4gSG91cnMgY29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkhvdXJzIHtcbkRhaWx5SG91cnM6IERhaWx5SG91cnNcbn1cbi8qKlxuICogRGFpbHkgSG91clxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhaWx5SG91ciB7XG5LZXk/OiBEYXlPZldlZWtcblZhbHVlPzogVGltZVJhbmdlTGlzdFxufVxuLyoqXG4gKiBUaW1lIHJhbmdlIGluIDI0IGhvdXIgZm9ybWF0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGltZVJhbmdlIHtcblN0YXJ0VGltZTogSXNvODYwMVRpbWVcbkVuZFRpbWU6IElzbzg2MDFUaW1lXG59XG4vKipcbiAqIFJlc3RyaWN0ZWQgcGVyaW9kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdHJpY3RlZFBlcmlvZCB7XG4vKipcbiAqIFRoZSBuYW1lIG9mIGEgcmVzdHJpY3RlZCBwZXJpb2RcbiAqL1xuTmFtZT86IHN0cmluZ1xuU3RhcnREYXRlOiBJc284NjAxRGF0ZVxuRW5kRGF0ZTogSXNvODYwMURhdGVcbn1cbi8qKlxuICogQ29tbXVuaWNhdGlvbiBsaW1pdHMgY29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbXVuaWNhdGlvbkxpbWl0c0NvbmZpZyB7XG5BbGxDaGFubmVsc1N1YnR5cGVzPzogQ29tbXVuaWNhdGlvbkxpbWl0c1xuSW5zdGFuY2VMaW1pdHNIYW5kbGluZz86IEluc3RhbmNlTGltaXRzSGFuZGxpbmdcbn1cbi8qKlxuICogQ29tbXVuaWNhdGlvbiBsaW1pdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tdW5pY2F0aW9uTGltaXRzIHtcbkNvbW11bmljYXRpb25MaW1pdExpc3Q/OiBDb21tdW5pY2F0aW9uTGltaXRMaXN0XG59XG4vKipcbiAqIENvbW11bmljYXRpb24gTGltaXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tdW5pY2F0aW9uTGltaXQge1xuTWF4Q291bnRQZXJSZWNpcGllbnQ6IG51bWJlclxuRnJlcXVlbmN5OiBudW1iZXJcblVuaXQ6IENvbW11bmljYXRpb25MaW1pdFRpbWVVbml0XG59XG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSBrZXkgbmFtZSBvZiB0aGUgdGFnLlxuICovXG5LZXk6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdmFsdWUgZm9yIHRoZSB0YWcuXG4gKi9cblZhbHVlOiBzdHJpbmdcbn1cbiJdfQ==