@horietakehiro/aws-cdk-utul 0.41.7 → 0.41.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/lib/types/cfn-resource-types/aws-amazonmq-configurationassociation.d.ts +12 -0
  2. package/lib/types/cfn-resource-types/aws-amazonmq-configurationassociation.js +1 -1
  3. package/lib/types/cfn-resource-types/aws-applicationinsights-application.d.ts +1 -1
  4. package/lib/types/cfn-resource-types/aws-applicationinsights-application.js +1 -1
  5. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.d.ts +19 -18
  6. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.js +1 -1
  7. package/lib/types/cfn-resource-types/aws-cassandra-table.d.ts +7 -0
  8. package/lib/types/cfn-resource-types/aws-cassandra-table.js +1 -1
  9. package/lib/types/cfn-resource-types/aws-connect-rule.d.ts +1 -1
  10. package/lib/types/cfn-resource-types/aws-connect-rule.js +1 -1
  11. package/lib/types/cfn-resource-types/aws-connect-user.d.ts +55 -55
  12. package/lib/types/cfn-resource-types/aws-connect-user.js +1 -1
  13. package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.d.ts +105 -105
  14. package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.js +1 -1
  15. package/lib/types/cfn-resource-types/aws-ec2-trafficmirrorsession.d.ts +39 -5
  16. package/lib/types/cfn-resource-types/aws-ec2-trafficmirrorsession.js +1 -1
  17. package/lib/types/cfn-resource-types/aws-gamelift-containerfleet.d.ts +1 -1
  18. package/lib/types/cfn-resource-types/aws-gamelift-containerfleet.js +1 -1
  19. package/lib/types/cfn-resource-types/aws-gamelift-fleet.d.ts +1 -1
  20. package/lib/types/cfn-resource-types/aws-gamelift-fleet.js +1 -1
  21. package/lib/types/cfn-resource-types/aws-kinesisfirehose-deliverystream.d.ts +272 -272
  22. package/lib/types/cfn-resource-types/aws-kinesisfirehose-deliverystream.js +1 -1
  23. package/lib/types/cfn-resource-types/aws-logs-accountpolicy.d.ts +1 -1
  24. package/lib/types/cfn-resource-types/aws-logs-accountpolicy.js +1 -1
  25. package/lib/types/cfn-resource-types/aws-quicksight-datasource.d.ts +13 -11
  26. package/lib/types/cfn-resource-types/aws-quicksight-datasource.js +1 -1
  27. package/lib/types/cfn-resource-types/aws-quicksight-topic.d.ts +150 -131
  28. package/lib/types/cfn-resource-types/aws-quicksight-topic.js +1 -1
  29. package/lib/types/cfn-resource-types/aws-rds-dbcluster.d.ts +5 -0
  30. package/lib/types/cfn-resource-types/aws-rds-dbcluster.js +1 -1
  31. package/lib/types/cfn-resource-types/aws-rds-dbinstance.d.ts +31 -0
  32. package/lib/types/cfn-resource-types/aws-rds-dbinstance.js +1 -1
  33. package/lib/types/cfn-resource-types/aws-route53-hostedzone.d.ts +36 -36
  34. package/lib/types/cfn-resource-types/aws-route53-hostedzone.js +1 -1
  35. package/lib/types/cfn-resource-types/aws-s3-multiregionaccesspoint.d.ts +14 -14
  36. package/lib/types/cfn-resource-types/aws-s3-multiregionaccesspoint.js +1 -1
  37. package/lib/types/cfn-resource-types/aws-s3-storagelens.d.ts +61 -61
  38. package/lib/types/cfn-resource-types/aws-s3-storagelens.js +1 -1
  39. package/lib/types/cfn-resource-types/aws-sagemaker-domain.d.ts +5 -0
  40. package/lib/types/cfn-resource-types/aws-sagemaker-domain.js +1 -1
  41. package/lib/types/cfn-resource-types/aws-sagemaker-space.d.ts +4 -0
  42. package/lib/types/cfn-resource-types/aws-sagemaker-space.js +1 -1
  43. package/lib/types/cfn-resource-types/aws-sagemaker-userprofile.d.ts +5 -0
  44. package/lib/types/cfn-resource-types/aws-sagemaker-userprofile.js +1 -1
  45. package/lib/types/cfn-resource-types/aws-ses-configurationset.d.ts +11 -0
  46. package/lib/types/cfn-resource-types/aws-ses-configurationset.js +1 -1
  47. package/lib/types/cfn-resource-types/aws-ses-dedicatedippool.d.ts +11 -0
  48. package/lib/types/cfn-resource-types/aws-ses-dedicatedippool.js +1 -1
  49. package/lib/types/cfn-resource-types/aws-ses-emailidentity.d.ts +11 -0
  50. package/lib/types/cfn-resource-types/aws-ses-emailidentity.js +1 -1
  51. package/lib/types/cfn-resource-types/aws-ssm-patchbaseline.d.ts +4 -0
  52. package/lib/types/cfn-resource-types/aws-ssm-patchbaseline.js +1 -1
  53. package/lib/types/cfn-resource-types/aws-wisdom-messagetemplate.d.ts +17 -0
  54. package/lib/types/cfn-resource-types/aws-wisdom-messagetemplate.js +1 -1
  55. package/lib/types/cfn-resource-types.d.ts +0 -2
  56. package/lib/types/cfn-resource-types.js +10 -12
  57. package/package.json +1 -1
  58. package/lib/types/cfn-resource-types/aws-opsworkscm-server.d.ts +0 -37
  59. package/lib/types/cfn-resource-types/aws-opsworkscm-server.js +0 -3
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJkcy1kYmNsdXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtcmRzLWRiY2x1c3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgYGBBV1M6OlJEUzo6REJDbHVzdGVyYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gQXVyb3JhIERCIGNsdXN0ZXIgb3IgTXVsdGktQVogREIgY2x1c3Rlci5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjcmVhdGluZyBhbiBBdXJvcmEgREIgY2x1c3Rlciwgc2VlIFtDcmVhdGluZyBhbiBBbWF6b24gQXVyb3JhIERCIGNsdXN0ZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9BdXJvcmEuQ3JlYXRlSW5zdGFuY2UuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIGEgTXVsdGktQVogREIgY2x1c3Rlciwgc2VlIFtDcmVhdGluZyBhIE11bHRpLUFaIERCIGNsdXN0ZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9jcmVhdGUtbXVsdGktYXotZGItY2x1c3Rlci5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgIFlvdSBjYW4gb25seSBjcmVhdGUgdGhpcyByZXNvdXJjZSBpbiBBV1MgUmVnaW9ucyB3aGVyZSBBbWF6b24gQXVyb3JhIG9yIE11bHRpLUFaIERCIGNsdXN0ZXJzIGFyZSBzdXBwb3J0ZWQuXG4gKiAgICAqVXBkYXRpbmcgREIgY2x1c3RlcnMqIFxuICogIFdoZW4gcHJvcGVydGllcyBsYWJlbGVkIFwiKlVwZGF0ZSByZXF1aXJlczoqW1JlcGxhY2VtZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS91c2luZy1jZm4tdXBkYXRpbmctc3RhY2tzLXVwZGF0ZS1iZWhhdmlvcnMuaHRtbCN1cGRhdGUtcmVwbGFjZW1lbnQpXCIgYXJlIHVwZGF0ZWQsIEFXUyBDbG91ZEZvcm1hdGlvbiBmaXJzdCBjcmVhdGVzIGEgcmVwbGFjZW1lbnQgREIgY2x1c3RlciwgdGhlbiBjaGFuZ2VzIHJlZmVyZW5jZXMgZnJvbSBvdGhlciBkZXBlbmRlbnQgcmVzb3VyY2VzIHRvIHBvaW50IHRvIHRoZSByZXBsYWNlbWVudCBEQiBjbHVzdGVyLCBhbmQgZmluYWxseSBkZWxldGVzIHRoZSBvbGQgREIgY2x1c3Rlci5cbiAqICAgV2UgaGlnaGx5IHJlY29tbWVuZCB0aGF0IHlvdSB0YWtlIGEgc25hcHNob3Qgb2YgdGhlIGRhdGFiYXNlIGJlZm9yZSB1cGRhdGluZyB0aGUgc3RhY2suIElmIHlvdSBkb24ndCwgeW91IGxvc2UgdGhlIGRhdGEgd2hlbiBBV1MgQ2xvdWRGb3JtYXRpb24gcmVwbGFjZXMgeW91ciBEQiBjbHVzdGVyLiBUbyBwcmVzZXJ2ZSB5b3VyIGRhdGEsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBwcm9jZWR1cmU6XG4gKiAgIDEuICBEZWFjdGl2YXRlIGFueSBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgdXNpbmcgdGhlIERCIGNsdXN0ZXIgc28gdGhhdCB0aGVyZSdzIG5vIGFjdGl2aXR5IG9uIHRoZSBEQiBpbnN0YW5jZS5cbiAqICAgMS4gIENyZWF0ZSBhIHNuYXBzaG90IG9mIHRoZSBEQiBjbHVzdGVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBhIERCIGNsdXN0ZXIgc25hcHNob3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9VU0VSX0NyZWF0ZVNuYXBzaG90Q2x1c3Rlci5odG1sKS5cbiAqICAgMS4gIElmIHlvdSB3YW50IHRvIHJlc3RvcmUgeW91ciBEQiBjbHVzdGVyIHVzaW5nIGEgREIgY2x1c3RlciBzbmFwc2hvdCwgbW9kaWZ5IHRoZSB1cGRhdGVkIHRlbXBsYXRlIHdpdGggeW91ciBEQiBjbHVzdGVyIGNoYW5nZXMgYW5kIGFkZCB0aGUgYGBTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSB3aXRoIHRoZSBJRCBvZiB0aGUgREIgY2x1c3RlciBzbmFwc2hvdCB0aGF0IHlvdSB3YW50IHRvIHVzZS5cbiAqICBBZnRlciB5b3UgcmVzdG9yZSBhIERCIGNsdXN0ZXIgd2l0aCBhIGBgU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIHlvdSBtdXN0IHNwZWNpZnkgdGhlIHNhbWUgYGBTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSBmb3IgYW55IGZ1dHVyZSB1cGRhdGVzIHRvIHRoZSBEQiBjbHVzdGVyLiBXaGVuIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHkgZm9yIGFuIHVwZGF0ZSwgdGhlIERCIGNsdXN0ZXIgaXMgbm90IHJlc3RvcmVkIGZyb20gdGhlIERCIGNsdXN0ZXIgc25hcHNob3QgYWdhaW4sIGFuZCB0aGUgZGF0YSBpbiB0aGUgZGF0YWJhc2UgaXMgbm90IGNoYW5nZWQuIEhvd2V2ZXIsIGlmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBgYFNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBhbiBlbXB0eSBEQiBjbHVzdGVyIGlzIGNyZWF0ZWQsIGFuZCB0aGUgb3JpZ2luYWwgREIgY2x1c3RlciBpcyBkZWxldGVkLiBJZiB5b3Ugc3BlY2lmeSBhIHByb3BlcnR5IHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzIHNuYXBzaG90IHJlc3RvcmUgcHJvcGVydHksIGEgbmV3IERCIGNsdXN0ZXIgaXMgcmVzdG9yZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGBgU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIGFuZCB0aGUgb3JpZ2luYWwgREIgY2x1c3RlciBpcyBkZWxldGVkLlxuICogICAxLiAgVXBkYXRlIHRoZSBzdGFjay5cbiAqICAgXG4gKiAgIEN1cnJlbnRseSwgd2hlbiB5b3UgYXJlIHVwZGF0aW5nIHRoZSBzdGFjayBmb3IgYW4gQXVyb3JhIFNlcnZlcmxlc3MgREIgY2x1c3RlciwgeW91IGNhbid0IGluY2x1ZGUgY2hhbmdlcyB0byBhbnkgb3RoZXIgcHJvcGVydGllcyB3aGVuIHlvdSBzcGVjaWZ5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6IGBgUHJlZmVycmVkQmFja3VwV2luZG93YGAsIGBgUHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3dgYCwgYW5kIGBgUG9ydGBgLiBUaGlzIGxpbWl0YXRpb24gZG9lc24ndCBhcHBseSB0byBwcm92aXNpb25lZCBEQiBjbHVzdGVycy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1cGRhdGluZyBvdGhlciBwcm9wZXJ0aWVzIG9mIHRoaXMgcmVzb3VyY2UsIHNlZSBgYE1vZGlmeURCQ2x1c3RlcmBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1cGRhdGluZyBzdGFja3MsIHNlZSBbQ2xvdWRGb3JtYXRpb24gU3RhY2tzIFVwZGF0ZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3VzaW5nLWNmbi11cGRhdGluZy1zdGFja3MuaHRtbCkuXG4gKiAgICpEZWxldGluZyBEQiBjbHVzdGVycyogXG4gKiAgVGhlIGRlZmF1bHQgYGBEZWxldGlvblBvbGljeWBgIGZvciBgYEFXUzo6UkRTOjpEQkNsdXN0ZXJgYCByZXNvdXJjZXMgaXMgYGBTbmFwc2hvdGBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgQVdTIENsb3VkRm9ybWF0aW9uIGRlbGV0ZXMgcmVzb3VyY2VzLCBzZWUgW0RlbGV0aW9uUG9saWN5IEF0dHJpYnV0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLWF0dHJpYnV0ZS1kZWxldGlvbnBvbGljeS5odG1sKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX1JEU19EQkNMVVNURVIge1xuRW5kcG9pbnQ/OiBFbmRwb2ludFxuUmVhZEVuZHBvaW50PzogUmVhZEVuZHBvaW50XG4vKipcbiAqIFRoZSBhbW91bnQgb2Ygc3RvcmFnZSBpbiBnaWJpYnl0ZXMgKEdpQikgdG8gYWxsb2NhdGUgdG8gZWFjaCBEQiBpbnN0YW5jZSBpbiB0aGUgTXVsdGktQVogREIgY2x1c3Rlci5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBNdWx0aS1BWiBEQiBjbHVzdGVycyBvbmx5XG4gKiAgVGhpcyBzZXR0aW5nIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIE11bHRpLUFaIERCIGNsdXN0ZXIuXG4gKi9cbkFsbG9jYXRlZFN0b3JhZ2U/OiBudW1iZXJcbi8qKlxuICogUHJvdmlkZXMgYSBsaXN0IG9mIHRoZSBBV1MgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIHJvbGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgREIgY2x1c3Rlci4gSUFNIHJvbGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIERCIGNsdXN0ZXIgZ3JhbnQgcGVybWlzc2lvbiBmb3IgdGhlIERCIGNsdXN0ZXIgdG8gYWNjZXNzIG90aGVyIEFtYXpvbiBXZWIgU2VydmljZXMgb24geW91ciBiZWhhbGYuXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cbkFzc29jaWF0ZWRSb2xlcz86IERCQ2x1c3RlclJvbGVbXVxuLyoqXG4gKiBBIGxpc3Qgb2YgQXZhaWxhYmlsaXR5IFpvbmVzIChBWnMpIHdoZXJlIGluc3RhbmNlcyBpbiB0aGUgREIgY2x1c3RlciBjYW4gYmUgY3JlYXRlZC4gRm9yIGluZm9ybWF0aW9uIG9uIEFXUyBSZWdpb25zIGFuZCBBdmFpbGFiaWxpdHkgWm9uZXMsIHNlZSBbQ2hvb3NpbmcgdGhlIFJlZ2lvbnMgYW5kIEF2YWlsYWJpbGl0eSBab25lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL0NvbmNlcHRzLlJlZ2lvbnNBbmRBdmFpbGFiaWxpdHlab25lcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZSouIFxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuQXZhaWxhYmlsaXR5Wm9uZXM/OiBzdHJpbmdbXVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBtaW5vciBlbmdpbmUgdXBncmFkZXMgYXJlIGFwcGxpZWQgYXV0b21hdGljYWxseSB0byB0aGUgREIgY2x1c3RlciBkdXJpbmcgdGhlIG1haW50ZW5hbmNlIHdpbmRvdy4gQnkgZGVmYXVsdCwgbWlub3IgZW5naW5lIHVwZ3JhZGVzIGFyZSBhcHBsaWVkIGF1dG9tYXRpY2FsbHkuXG4gKiAgVmFsaWQgZm9yIENsdXN0ZXIgVHlwZTogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGF1dG9tYXRpYyBtaW5vciB2ZXJzaW9uIHVwZ3JhZGVzLCBzZWUgW0F1dG9tYXRpY2FsbHkgdXBncmFkaW5nIHRoZSBtaW5vciBlbmdpbmUgdmVyc2lvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfVXBncmFkZURCSW5zdGFuY2UuVXBncmFkaW5nLmh0bWwjVVNFUl9VcGdyYWRlREJJbnN0YW5jZS5VcGdyYWRpbmcuQXV0b01pbm9yVmVyc2lvblVwZ3JhZGVzKS5cbiAqL1xuQXV0b01pbm9yVmVyc2lvblVwZ3JhZGU/OiBib29sZWFuXG4vKipcbiAqIFRoZSB0YXJnZXQgYmFja3RyYWNrIHdpbmRvdywgaW4gc2Vjb25kcy4gVG8gZGlzYWJsZSBiYWNrdHJhY2tpbmcsIHNldCB0aGlzIHZhbHVlIHRvIGBgMGBgLlxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBNeVNRTCBEQiBjbHVzdGVycyBvbmx5XG4gKiAgRGVmYXVsdDogYGAwYGBcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgSWYgc3BlY2lmaWVkLCB0aGlzIHZhbHVlIG11c3QgYmUgc2V0IHRvIGEgbnVtYmVyIGZyb20gMCB0byAyNTksMjAwICg3MiBob3VycykuXG4gKi9cbkJhY2t0cmFja1dpbmRvdz86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGRheXMgZm9yIHdoaWNoIGF1dG9tYXRlZCBiYWNrdXBzIGFyZSByZXRhaW5lZC5cbiAqICBEZWZhdWx0OiAxXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgYSB2YWx1ZSBmcm9tIDEgdG8gMzVcbiAqICAgXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cbkJhY2t1cFJldGVudGlvblBlcmlvZD86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHNjYWxhYmlsaXR5IG1vZGUgb2YgdGhlIEF1cm9yYSBEQiBjbHVzdGVyLiBXaGVuIHNldCB0byBgYGxpbWl0bGVzc2BgLCB0aGUgY2x1c3RlciBvcGVyYXRlcyBhcyBhbiBBdXJvcmEgTGltaXRsZXNzIERhdGFiYXNlLCBhbGxvd2luZyB5b3UgdG8gY3JlYXRlIGEgREIgc2hhcmQgZ3JvdXAgZm9yIGhvcml6b250YWwgc2NhbGluZyAoc2hhcmRpbmcpIGNhcGFiaWxpdGllcy4gV2hlbiBzZXQgdG8gYGBzdGFuZGFyZGBgICh0aGUgZGVmYXVsdCksIHRoZSBjbHVzdGVyIHVzZXMgbm9ybWFsIERCIGluc3RhbmNlIGNyZWF0aW9uLlxuICovXG5DbHVzdGVyU2NhbGFiaWxpdHlUeXBlPzogc3RyaW5nXG4vKipcbiAqIEEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0byBjb3B5IGFsbCB0YWdzIGZyb20gdGhlIERCIGNsdXN0ZXIgdG8gc25hcHNob3RzIG9mIHRoZSBEQiBjbHVzdGVyLiBUaGUgZGVmYXVsdCBpcyBub3QgdG8gY29weSB0aGVtLlxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5Db3B5VGFnc1RvU25hcHNob3Q/OiBib29sZWFuXG4vKipcbiAqIFRoZSBtb2RlIG9mIERhdGFiYXNlIEluc2lnaHRzIHRvIGVuYWJsZSBmb3IgdGhlIERCIGNsdXN0ZXIuXG4gKiAgSWYgeW91IHNldCB0aGlzIHZhbHVlIHRvIGBgYWR2YW5jZWRgYCwgeW91IG11c3QgYWxzbyBzZXQgdGhlIGBgUGVyZm9ybWFuY2VJbnNpZ2h0c0VuYWJsZWRgYCBwYXJhbWV0ZXIgdG8gYGB0cnVlYGAgYW5kIHRoZSBgYFBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb25QZXJpb2RgYCBwYXJhbWV0ZXIgdG8gNDY1LlxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuRGF0YWJhc2VJbnNpZ2h0c01vZGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgeW91ciBkYXRhYmFzZS4gSWYgeW91IGRvbid0IHByb3ZpZGUgYSBuYW1lLCB0aGVuIEFtYXpvbiBSRFMgd29uJ3QgY3JlYXRlIGEgZGF0YWJhc2UgaW4gdGhpcyBEQiBjbHVzdGVyLiBGb3IgbmFtaW5nIGNvbnN0cmFpbnRzLCBzZWUgW05hbWluZyBDb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL0NIQVBfTGltaXRzLmh0bWwjUkRTX0xpbWl0cy5Db25zdHJhaW50cykgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLiBcbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuRGF0YWJhc2VOYW1lPzogc3RyaW5nXG5EQkNsdXN0ZXJBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIGNvbXB1dGUgYW5kIG1lbW9yeSBjYXBhY2l0eSBvZiBlYWNoIERCIGluc3RhbmNlIGluIHRoZSBNdWx0aS1BWiBEQiBjbHVzdGVyLCBmb3IgZXhhbXBsZSBgYGRiLm02Z2QueGxhcmdlYGAuIE5vdCBhbGwgREIgaW5zdGFuY2UgY2xhc3NlcyBhcmUgYXZhaWxhYmxlIGluIGFsbCBBV1MtUmVnaW9ucywgb3IgZm9yIGFsbCBkYXRhYmFzZSBlbmdpbmVzLlxuICogIEZvciB0aGUgZnVsbCBsaXN0IG9mIERCIGluc3RhbmNlIGNsYXNzZXMgYW5kIGF2YWlsYWJpbGl0eSBmb3IgeW91ciBlbmdpbmUsIHNlZSBbREIgaW5zdGFuY2UgY2xhc3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9Db25jZXB0cy5EQkluc3RhbmNlQ2xhc3MuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIFRoaXMgc2V0dGluZyBpcyByZXF1aXJlZCB0byBjcmVhdGUgYSBNdWx0aS1BWiBEQiBjbHVzdGVyLlxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IE11bHRpLUFaIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuREJDbHVzdGVySW5zdGFuY2VDbGFzcz86IHN0cmluZ1xuREJDbHVzdGVyUmVzb3VyY2VJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgREIgcGFyYW1ldGVyIGdyb3VwIHRvIGFwcGx5IHRvIGFsbCBpbnN0YW5jZXMgb2YgdGhlIERCIGNsdXN0ZXIuXG4gKiAgIFdoZW4geW91IGFwcGx5IGEgcGFyYW1ldGVyIGdyb3VwIHVzaW5nIHRoZSBgYERCSW5zdGFuY2VQYXJhbWV0ZXJHcm91cE5hbWVgYCBwYXJhbWV0ZXIsIHRoZSBEQiBjbHVzdGVyIGlzbid0IHJlYm9vdGVkIGF1dG9tYXRpY2FsbHkuIEFsc28sIHBhcmFtZXRlciBjaGFuZ2VzIGFyZSBhcHBsaWVkIGltbWVkaWF0ZWx5IHJhdGhlciB0aGFuIGR1cmluZyB0aGUgbmV4dCBtYWludGVuYW5jZSB3aW5kb3cuXG4gKiAgIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBEQiBjbHVzdGVycyBvbmx5XG4gKiAgRGVmYXVsdDogVGhlIGV4aXN0aW5nIG5hbWUgc2V0dGluZ1xuICogIENvbnN0cmFpbnRzOlxuICogICArICBUaGUgREIgcGFyYW1ldGVyIGdyb3VwIG11c3QgYmUgaW4gdGhlIHNhbWUgREIgcGFyYW1ldGVyIGdyb3VwIGZhbWlseSBhcyB0aGlzIERCIGNsdXN0ZXIuXG4gKiAgICsgIFRoZSBgYERCSW5zdGFuY2VQYXJhbWV0ZXJHcm91cE5hbWVgYCBwYXJhbWV0ZXIgaXMgdmFsaWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgYGBBbGxvd01ham9yVmVyc2lvblVwZ3JhZGVgYCBwYXJhbWV0ZXIgZm9yIGEgbWFqb3IgdmVyc2lvbiB1cGdyYWRlIG9ubHkuXG4gKi9cbkRCSW5zdGFuY2VQYXJhbWV0ZXJHcm91cE5hbWU/OiBzdHJpbmdcbi8qKlxuICogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuXG4gKi9cbkRCU3lzdGVtSWQ/OiBzdHJpbmdcbi8qKlxuICogSWYgeW91IGFyZSBjb25maWd1cmluZyBhbiBBdXJvcmEgZ2xvYmFsIGRhdGFiYXNlIGNsdXN0ZXIgYW5kIHdhbnQgeW91ciBBdXJvcmEgREIgY2x1c3RlciB0byBiZSBhIHNlY29uZGFyeSBtZW1iZXIgaW4gdGhlIGdsb2JhbCBkYXRhYmFzZSBjbHVzdGVyLCBzcGVjaWZ5IHRoZSBnbG9iYWwgY2x1c3RlciBJRCBvZiB0aGUgZ2xvYmFsIGRhdGFiYXNlIGNsdXN0ZXIuIFRvIGRlZmluZSB0aGUgcHJpbWFyeSBkYXRhYmFzZSBjbHVzdGVyIG9mIHRoZSBnbG9iYWwgY2x1c3RlciwgdXNlIHRoZSBbQVdTOjpSRFM6Okdsb2JhbENsdXN0ZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1yZHMtZ2xvYmFsY2x1c3Rlci5odG1sKSByZXNvdXJjZS4gXG4gKiAgIElmIHlvdSBhcmVuJ3QgY29uZmlndXJpbmcgYSBnbG9iYWwgZGF0YWJhc2UgY2x1c3RlciwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBcbiAqICAgVG8gcmVtb3ZlIHRoZSBEQiBjbHVzdGVyIGZyb20gYSBnbG9iYWwgZGF0YWJhc2UgY2x1c3Rlciwgc3BlY2lmeSBhbiBlbXB0eSB2YWx1ZSBmb3IgdGhlIGBgR2xvYmFsQ2x1c3RlcklkZW50aWZpZXJgYCBwcm9wZXJ0eS5cbiAqICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IEF1cm9yYSBnbG9iYWwgZGF0YWJhc2VzLCBzZWUgW1dvcmtpbmcgd2l0aCBBbWF6b24gQXVyb3JhIEdsb2JhbCBEYXRhYmFzZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9hdXJvcmEtZ2xvYmFsLWRhdGFiYXNlLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBvbmx5XG4gKi9cbkdsb2JhbENsdXN0ZXJJZGVudGlmaWVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSBEQiBjbHVzdGVyIGlkZW50aWZpZXIuIFRoaXMgcGFyYW1ldGVyIGlzIHN0b3JlZCBhcyBhIGxvd2VyY2FzZSBzdHJpbmcuXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgY29udGFpbiBmcm9tIDEgdG8gNjMgbGV0dGVycywgbnVtYmVycywgb3IgaHlwaGVucy5cbiAqICAgKyAgRmlyc3QgY2hhcmFjdGVyIG11c3QgYmUgYSBsZXR0ZXIuXG4gKiAgICsgIENhbid0IGVuZCB3aXRoIGEgaHlwaGVuIG9yIGNvbnRhaW4gdHdvIGNvbnNlY3V0aXZlIGh5cGhlbnMuXG4gKiAgIFxuICogIEV4YW1wbGU6IGBgbXktY2x1c3RlcjFgYFxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5EQkNsdXN0ZXJJZGVudGlmaWVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBEQiBjbHVzdGVyIHBhcmFtZXRlciBncm91cCB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIERCIGNsdXN0ZXIuXG4gKiAgIElmIHlvdSBhcHBseSBhIHBhcmFtZXRlciBncm91cCB0byBhbiBleGlzdGluZyBEQiBjbHVzdGVyLCB0aGVuIGl0cyBEQiBpbnN0YW5jZXMgbWlnaHQgbmVlZCB0byByZWJvb3QuIFRoaXMgY2FuIHJlc3VsdCBpbiBhbiBvdXRhZ2Ugd2hpbGUgdGhlIERCIGluc3RhbmNlcyBhcmUgcmVib290aW5nLlxuICogIElmIHlvdSBhcHBseSBhIGNoYW5nZSB0byBwYXJhbWV0ZXIgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIGEgc3RvcHBlZCBEQiBjbHVzdGVyLCB0aGVuIHRoZSB1cGRhdGUgc3RhY2sgd2FpdHMgdW50aWwgdGhlIERCIGNsdXN0ZXIgaXMgc3RhcnRlZC5cbiAqICAgVG8gbGlzdCBhbGwgb2YgdGhlIGF2YWlsYWJsZSBEQiBjbHVzdGVyIHBhcmFtZXRlciBncm91cCBuYW1lcywgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAqICAgYGBhd3MgcmRzIGRlc2NyaWJlLWRiLWNsdXN0ZXItcGFyYW1ldGVyLWdyb3VwcyAtLXF1ZXJ5IFwiREJDbHVzdGVyUGFyYW1ldGVyR3JvdXBzW10uREJDbHVzdGVyUGFyYW1ldGVyR3JvdXBOYW1lXCIgLS1vdXRwdXQgdGV4dGBgIFxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5EQkNsdXN0ZXJQYXJhbWV0ZXJHcm91cE5hbWU/OiBzdHJpbmdcbi8qKlxuICogQSBEQiBzdWJuZXQgZ3JvdXAgdGhhdCB5b3Ugd2FudCB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIERCIGNsdXN0ZXIuIFxuICogIElmIHlvdSBhcmUgcmVzdG9yaW5nIGEgREIgY2x1c3RlciB0byBhIHBvaW50IGluIHRpbWUgd2l0aCBgYFJlc3RvcmVUeXBlYGAgc2V0IHRvIGBgY29weS1vbi13cml0ZWBgLCBhbmQgZG9uJ3Qgc3BlY2lmeSBhIERCIHN1Ym5ldCBncm91cCBuYW1lLCB0aGVuIHRoZSBEQiBjbHVzdGVyIGlzIHJlc3RvcmVkIHdpdGggYSBkZWZhdWx0IERCIHN1Ym5ldCBncm91cC5cbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuREJTdWJuZXRHcm91cE5hbWU/OiBzdHJpbmdcbkRlbGV0ZUF1dG9tYXRlZEJhY2t1cHM/OiBib29sZWFuXG4vKipcbiAqIEEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgREIgY2x1c3RlciBoYXMgZGVsZXRpb24gcHJvdGVjdGlvbiBlbmFibGVkLiBUaGUgZGF0YWJhc2UgY2FuJ3QgYmUgZGVsZXRlZCB3aGVuIGRlbGV0aW9uIHByb3RlY3Rpb24gaXMgZW5hYmxlZC4gQnkgZGVmYXVsdCwgZGVsZXRpb24gcHJvdGVjdGlvbiBpcyBkaXNhYmxlZC5cbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuRGVsZXRpb25Qcm90ZWN0aW9uPzogYm9vbGVhblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhlIGRpcmVjdG9yeSBJRCBvZiB0aGUgQWN0aXZlIERpcmVjdG9yeSB0byBjcmVhdGUgdGhlIERCIGNsdXN0ZXIuXG4gKiAgRm9yIEFtYXpvbiBBdXJvcmEgREIgY2x1c3RlcnMsIEFtYXpvbiBSRFMgY2FuIHVzZSBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiB0byBhdXRoZW50aWNhdGUgdXNlcnMgdGhhdCBjb25uZWN0IHRvIHRoZSBEQiBjbHVzdGVyLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0tlcmJlcm9zIGF1dGhlbnRpY2F0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUva2VyYmVyb3MtYXV0aGVudGljYXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuRG9tYWluPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgSUFNIHJvbGUgdG8gdXNlIHdoZW4gbWFraW5nIEFQSSBjYWxscyB0byB0aGUgRGlyZWN0b3J5IFNlcnZpY2UuXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgb25seVxuICovXG5Eb21haW5JQU1Sb2xlTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlzdCBvZiBsb2cgdHlwZXMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGV4cG9ydGluZyB0byBDbG91ZFdhdGNoIExvZ3MuIFRoZSB2YWx1ZXMgaW4gdGhlIGxpc3QgZGVwZW5kIG9uIHRoZSBEQiBlbmdpbmUgYmVpbmcgdXNlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUHVibGlzaGluZyBEYXRhYmFzZSBMb2dzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9VU0VSX0xvZ0FjY2Vzcy5odG1sI1VTRVJfTG9nQWNjZXNzLlByb2NlZHVyYWwuVXBsb2FkdG9DbG91ZFdhdGNoKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZSouXG4gKiAgICpBdXJvcmEgTXlTUUwqIFxuICogIFZhbGlkIHZhbHVlczogYGBhdWRpdGBgLCBgYGVycm9yYGAsIGBgZ2VuZXJhbGBgLCBgYHNsb3dxdWVyeWBgXG4gKiAgICpBdXJvcmEgUG9zdGdyZVNRTCogXG4gKiAgVmFsaWQgdmFsdWVzOiBgYHBvc3RncmVzcWxgYFxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5FbmFibGVDbG91ZHdhdGNoTG9nc0V4cG9ydHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgdGhpcyBEQiBjbHVzdGVyIHRvIGZvcndhcmQgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGUgcHJpbWFyeSBjbHVzdGVyIG9mIGEgZ2xvYmFsIGNsdXN0ZXIgKEF1cm9yYSBnbG9iYWwgZGF0YWJhc2UpLiBCeSBkZWZhdWx0LCB3cml0ZSBvcGVyYXRpb25zIGFyZSBub3QgYWxsb3dlZCBvbiBBdXJvcmEgREIgY2x1c3RlcnMgdGhhdCBhcmUgc2Vjb25kYXJ5IGNsdXN0ZXJzIGluIGFuIEF1cm9yYSBnbG9iYWwgZGF0YWJhc2UuXG4gKiAgWW91IGNhbiBzZXQgdGhpcyB2YWx1ZSBvbmx5IG9uIEF1cm9yYSBEQiBjbHVzdGVycyB0aGF0IGFyZSBtZW1iZXJzIG9mIGFuIEF1cm9yYSBnbG9iYWwgZGF0YWJhc2UuIFdpdGggdGhpcyBwYXJhbWV0ZXIgZW5hYmxlZCwgYSBzZWNvbmRhcnkgY2x1c3RlciBjYW4gZm9yd2FyZCB3cml0ZXMgdG8gdGhlIGN1cnJlbnQgcHJpbWFyeSBjbHVzdGVyLCBhbmQgdGhlIHJlc3VsdGluZyBjaGFuZ2VzIGFyZSByZXBsaWNhdGVkIGJhY2sgdG8gdGhpcyBjbHVzdGVyLiBGb3IgdGhlIHByaW1hcnkgREIgY2x1c3RlciBvZiBhbiBBdXJvcmEgZ2xvYmFsIGRhdGFiYXNlLCB0aGlzIHZhbHVlIGlzIHVzZWQgaW1tZWRpYXRlbHkgaWYgdGhlIHByaW1hcnkgaXMgZGVtb3RlZCBieSBhIGdsb2JhbCBjbHVzdGVyIEFQSSBvcGVyYXRpb24sIGJ1dCBpdCBkb2VzIG5vdGhpbmcgdW50aWwgdGhlbi5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBBdXJvcmEgREIgY2x1c3RlcnMgb25seVxuICovXG5FbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmc/OiBib29sZWFuXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSB0aGUgSFRUUCBlbmRwb2ludCBmb3IgdGhlIERCIGNsdXN0ZXIuIEJ5IGRlZmF1bHQsIHRoZSBIVFRQIGVuZHBvaW50IGlzbid0IGVuYWJsZWQuXG4gKiAgV2hlbiBlbmFibGVkLCB0aGUgSFRUUCBlbmRwb2ludCBwcm92aWRlcyBhIGNvbm5lY3Rpb25sZXNzIHdlYiBzZXJ2aWNlIEFQSSAoUkRTIERhdGEgQVBJKSBmb3IgcnVubmluZyBTUUwgcXVlcmllcyBvbiB0aGUgREIgY2x1c3Rlci4gWW91IGNhbiBhbHNvIHF1ZXJ5IHlvdXIgZGF0YWJhc2UgZnJvbSBpbnNpZGUgdGhlIFJEUyBjb25zb2xlIHdpdGggdGhlIFJEUyBxdWVyeSBlZGl0b3IuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgUkRTIERhdGEgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvZGF0YS1hcGkuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBEQiBjbHVzdGVycyBvbmx5XG4gKi9cbkVuYWJsZUh0dHBFbmRwb2ludD86IGJvb2xlYW5cbi8qKlxuICogQSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRvIGVuYWJsZSBtYXBwaW5nIG9mIEFXUyBJZGVudGl0eSBhbmQgQWNjZXNzIE1hbmFnZW1lbnQgKElBTSkgYWNjb3VudHMgdG8gZGF0YWJhc2UgYWNjb3VudHMuIEJ5IGRlZmF1bHQsIG1hcHBpbmcgaXMgZGlzYWJsZWQuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSUFNIERhdGFiYXNlIEF1dGhlbnRpY2F0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvVXNpbmdXaXRoUkRTLklBTURCQXV0aC5odG1sKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZS4qXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgb25seVxuICovXG5FbmFibGVJQU1EYXRhYmFzZUF1dGhlbnRpY2F0aW9uPzogYm9vbGVhblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciByZWFkIHJlcGxpY2FzIGNhbiBmb3J3YXJkIHdyaXRlIG9wZXJhdGlvbnMgdG8gdGhlIHdyaXRlciBEQiBpbnN0YW5jZSBpbiB0aGUgREIgY2x1c3Rlci4gQnkgZGVmYXVsdCwgd3JpdGUgb3BlcmF0aW9ucyBhcmVuJ3QgYWxsb3dlZCBvbiByZWFkZXIgREIgaW5zdGFuY2VzLlxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuRW5hYmxlTG9jYWxXcml0ZUZvcndhcmRpbmc/OiBib29sZWFuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSBlbmdpbmUgdG8gYmUgdXNlZCBmb3IgdGhpcyBEQiBjbHVzdGVyLlxuICogIFZhbGlkIFZhbHVlczpcbiAqICAgKyAgIGBgYXVyb3JhLW15c3FsYGAgXG4gKiAgICsgICBgYGF1cm9yYS1wb3N0Z3Jlc3FsYGAgXG4gKiAgICsgICBgYG15c3FsYGAgXG4gKiAgICsgICBgYHBvc3RncmVzYGAgXG4gKiAgIFxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5FbmdpbmU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGxpZmUgY3ljbGUgdHlwZSBmb3IgdGhpcyBEQiBjbHVzdGVyLlxuICogICBCeSBkZWZhdWx0LCB0aGlzIHZhbHVlIGlzIHNldCB0byBgYG9wZW4tc291cmNlLXJkcy1leHRlbmRlZC1zdXBwb3J0YGAsIHdoaWNoIGVucm9sbHMgeW91ciBEQiBjbHVzdGVyIGludG8gQW1hem9uIFJEUyBFeHRlbmRlZCBTdXBwb3J0LiBBdCB0aGUgZW5kIG9mIHN0YW5kYXJkIHN1cHBvcnQsIHlvdSBjYW4gYXZvaWQgY2hhcmdlcyBmb3IgRXh0ZW5kZWQgU3VwcG9ydCBieSBzZXR0aW5nIHRoZSB2YWx1ZSB0byBgYG9wZW4tc291cmNlLXJkcy1leHRlbmRlZC1zdXBwb3J0LWRpc2FibGVkYGAuIEluIHRoaXMgY2FzZSwgY3JlYXRpbmcgdGhlIERCIGNsdXN0ZXIgd2lsbCBmYWlsIGlmIHRoZSBEQiBtYWpvciB2ZXJzaW9uIGlzIHBhc3QgaXRzIGVuZCBvZiBzdGFuZGFyZCBzdXBwb3J0IGRhdGUuXG4gKiAgIFlvdSBjYW4gdXNlIHRoaXMgc2V0dGluZyB0byBlbnJvbGwgeW91ciBEQiBjbHVzdGVyIGludG8gQW1hem9uIFJEUyBFeHRlbmRlZCBTdXBwb3J0LiBXaXRoIFJEUyBFeHRlbmRlZCBTdXBwb3J0LCB5b3UgY2FuIHJ1biB0aGUgc2VsZWN0ZWQgbWFqb3IgZW5naW5lIHZlcnNpb24gb24geW91ciBEQiBjbHVzdGVyIHBhc3QgdGhlIGVuZCBvZiBzdGFuZGFyZCBzdXBwb3J0IGZvciB0aGF0IGVuZ2luZSB2ZXJzaW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6XG4gKiAgICsgIEFtYXpvbiBBdXJvcmEgLSBbQW1hem9uIFJEUyBFeHRlbmRlZCBTdXBwb3J0IHdpdGggQW1hem9uIEF1cm9yYV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL2V4dGVuZGVkLXN1cHBvcnQuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqXG4gKiAgICsgIEFtYXpvbiBSRFMgLSBbQW1hem9uIFJEUyBFeHRlbmRlZCBTdXBwb3J0IHdpdGggQW1hem9uIFJEU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL2V4dGVuZGVkLXN1cHBvcnQuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqXG4gKiAgIFxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqICBWYWxpZCBWYWx1ZXM6IGBgb3Blbi1zb3VyY2UtcmRzLWV4dGVuZGVkLXN1cHBvcnQgfCBvcGVuLXNvdXJjZS1yZHMtZXh0ZW5kZWQtc3VwcG9ydC1kaXNhYmxlZGBgXG4gKiAgRGVmYXVsdDogYGBvcGVuLXNvdXJjZS1yZHMtZXh0ZW5kZWQtc3VwcG9ydGBgXG4gKi9cbkVuZ2luZUxpZmVjeWNsZVN1cHBvcnQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIERCIGVuZ2luZSBtb2RlIG9mIHRoZSBEQiBjbHVzdGVyLCBlaXRoZXIgYGBwcm92aXNpb25lZGBgIG9yIGBgc2VydmVybGVzc2BgLlxuICogIFRoZSBgYHNlcnZlcmxlc3NgYCBlbmdpbmUgbW9kZSBvbmx5IGFwcGxpZXMgZm9yIEF1cm9yYSBTZXJ2ZXJsZXNzIHYxIERCIGNsdXN0ZXJzLiBBdXJvcmEgU2VydmVybGVzcyB2MiBEQiBjbHVzdGVycyB1c2UgdGhlIGBgcHJvdmlzaW9uZWRgYCBlbmdpbmUgbW9kZS5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgbGltaXRhdGlvbnMgYW5kIHJlcXVpcmVtZW50cyBmb3IgU2VydmVybGVzcyBEQiBjbHVzdGVycywgc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqOlxuICogICArICAgW0xpbWl0YXRpb25zIG9mIEF1cm9yYSBTZXJ2ZXJsZXNzIHYxXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvYXVyb3JhLXNlcnZlcmxlc3MuaHRtbCNhdXJvcmEtc2VydmVybGVzcy5saW1pdGF0aW9ucykgXG4gKiAgICsgICBbUmVxdWlyZW1lbnRzIGZvciBBdXJvcmEgU2VydmVybGVzcyB2Ml0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL2F1cm9yYS1zZXJ2ZXJsZXNzLXYyLnJlcXVpcmVtZW50cy5odG1sKSBcbiAqICAgXG4gKiAgVmFsaWQgZm9yIENsdXN0ZXIgVHlwZTogQXVyb3JhIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuRW5naW5lTW9kZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGRhdGFiYXNlIGVuZ2luZSB0byB1c2UuXG4gKiAgVG8gbGlzdCBhbGwgb2YgdGhlIGF2YWlsYWJsZSBlbmdpbmUgdmVyc2lvbnMgZm9yIEF1cm9yYSBNeVNRTCB2ZXJzaW9uIDIgKDUuNy1jb21wYXRpYmxlKSBhbmQgdmVyc2lvbiAzICg4LjAtY29tcGF0aWJsZSksIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gKiAgIGBgYXdzIHJkcyBkZXNjcmliZS1kYi1lbmdpbmUtdmVyc2lvbnMgLS1lbmdpbmUgYXVyb3JhLW15c3FsIC0tcXVlcnkgXCJEQkVuZ2luZVZlcnNpb25zW10uRW5naW5lVmVyc2lvblwiYGAgXG4gKiAgWW91IGNhbiBzdXBwbHkgZWl0aGVyIGBgNS43YGAgb3IgYGA4LjBgYCB0byB1c2UgdGhlIGRlZmF1bHQgZW5naW5lIHZlcnNpb24gZm9yIEF1cm9yYSBNeVNRTCB2ZXJzaW9uIDIgb3IgdmVyc2lvbiAzLCByZXNwZWN0aXZlbHkuXG4gKiAgVG8gbGlzdCBhbGwgb2YgdGhlIGF2YWlsYWJsZSBlbmdpbmUgdmVyc2lvbnMgZm9yIEF1cm9yYSBQb3N0Z3JlU1FMLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOlxuICogICBgYGF3cyByZHMgZGVzY3JpYmUtZGItZW5naW5lLXZlcnNpb25zIC0tZW5naW5lIGF1cm9yYS1wb3N0Z3Jlc3FsIC0tcXVlcnkgXCJEQkVuZ2luZVZlcnNpb25zW10uRW5naW5lVmVyc2lvblwiYGAgXG4gKiAgVG8gbGlzdCBhbGwgb2YgdGhlIGF2YWlsYWJsZSBlbmdpbmUgdmVyc2lvbnMgZm9yIFJEUyBmb3IgTXlTUUwsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gKiAgIGBgYXdzIHJkcyBkZXNjcmliZS1kYi1lbmdpbmUtdmVyc2lvbnMgLS1lbmdpbmUgbXlzcWwgLS1xdWVyeSBcIkRCRW5naW5lVmVyc2lvbnNbXS5FbmdpbmVWZXJzaW9uXCJgYCBcbiAqICBUbyBsaXN0IGFsbCBvZiB0aGUgYXZhaWxhYmxlIGVuZ2luZSB2ZXJzaW9ucyBmb3IgUkRTIGZvciBQb3N0Z3JlU1FMLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOlxuICogICBgYGF3cyByZHMgZGVzY3JpYmUtZGItZW5naW5lLXZlcnNpb25zIC0tZW5naW5lIHBvc3RncmVzIC0tcXVlcnkgXCJEQkVuZ2luZVZlcnNpb25zW10uRW5naW5lVmVyc2lvblwiYGAgXG4gKiAgICpBdXJvcmEgTXlTUUwqIFxuICogIEZvciBpbmZvcm1hdGlvbiwgc2VlIFtEYXRhYmFzZSBlbmdpbmUgdXBkYXRlcyBmb3IgQW1hem9uIEF1cm9yYSBNeVNRTF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL0F1cm9yYU15U1FMLlVwZGF0ZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICogICAqQXVyb3JhIFBvc3RncmVTUUwqIFxuICogIEZvciBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gQXVyb3JhIFBvc3RncmVTUUwgcmVsZWFzZXMgYW5kIGVuZ2luZSB2ZXJzaW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL0F1cm9yYVBvc3RncmVTUUwuVXBkYXRlcy4yMDE4MDMwNS5odG1sKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZSouXG4gKiAgICpNeVNRTCogXG4gKiAgRm9yIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBSRFMgZm9yIE15U1FMXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9NeVNRTC5odG1sI015U1FMLkNvbmNlcHRzLlZlcnNpb25NZ210KSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgICpQb3N0Z3JlU1FMKiBcbiAqICBGb3IgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIFJEUyBmb3IgUG9zdGdyZVNRTF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfUG9zdGdyZVNRTC5odG1sI1Bvc3RncmVTUUwuQ29uY2VwdHMpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuRW5naW5lVmVyc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byBtYW5hZ2UgdGhlIG1hc3RlciB1c2VyIHBhc3N3b3JkIHdpdGggQVdTIFNlY3JldHMgTWFuYWdlci5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtQYXNzd29yZCBtYW5hZ2VtZW50IHdpdGggU2VjcmV0cyBNYW5hZ2VyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvcmRzLXNlY3JldHMtbWFuYWdlci5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSogYW5kIFtQYXNzd29yZCBtYW5hZ2VtZW50IHdpdGggU2VjcmV0cyBNYW5hZ2VyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvcmRzLXNlY3JldHMtbWFuYWdlci5odG1sKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZS4qXG4gKiAgVmFsaWQgZm9yIENsdXN0ZXIgVHlwZTogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICogIENvbnN0cmFpbnRzOlxuICogICArICBDYW4ndCBtYW5hZ2UgdGhlIG1hc3RlciB1c2VyIHBhc3N3b3JkIHdpdGggQVdTIFNlY3JldHMgTWFuYWdlciBpZiBgYE1hc3RlclVzZXJQYXNzd29yZGBgIGlzIHNwZWNpZmllZC5cbiAqL1xuTWFuYWdlTWFzdGVyVXNlclBhc3N3b3JkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgYW1vdW50IG9mIFByb3Zpc2lvbmVkIElPUFMgKGlucHV0L291dHB1dCBvcGVyYXRpb25zIHBlciBzZWNvbmQpIHRvIGJlIGluaXRpYWxseSBhbGxvY2F0ZWQgZm9yIGVhY2ggREIgaW5zdGFuY2UgaW4gdGhlIE11bHRpLUFaIERCIGNsdXN0ZXIuXG4gKiAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHZhbGlkIElPUFMgdmFsdWVzLCBzZWUgW1Byb3Zpc2lvbmVkIElPUFMgc3RvcmFnZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfU3RvcmFnZS5odG1sI1VTRVJfUElPUFMpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBUaGlzIHNldHRpbmcgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIGEgTXVsdGktQVogREIgY2x1c3Rlci5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBNdWx0aS1BWiBEQiBjbHVzdGVycyBvbmx5XG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgYSBtdWx0aXBsZSBiZXR3ZWVuIC41IGFuZCA1MCBvZiB0aGUgc3RvcmFnZSBhbW91bnQgZm9yIHRoZSBEQiBjbHVzdGVyLlxuICovXG5Jb3BzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQVdTIEtNUyBrZXkgdGhhdCBpcyB1c2VkIHRvIGVuY3J5cHQgdGhlIGRhdGFiYXNlIGluc3RhbmNlcyBpbiB0aGUgREIgY2x1c3Rlciwgc3VjaCBhcyBgYGFybjphd3M6a21zOnVzLWVhc3QtMTowMTIzNDU2Nzg5MTA6a2V5L2FiY2QxMjM0LWExMjMtNDU2YS1hMTJiLWExMjNiNGNkNTZlZmBgLiBJZiB5b3UgZW5hYmxlIHRoZSBgYFN0b3JhZ2VFbmNyeXB0ZWRgYCBwcm9wZXJ0eSBidXQgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LCB0aGUgZGVmYXVsdCBLTVMga2V5IGlzIHVzZWQuIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIHlvdSBtdXN0IHNldCB0aGUgYGBTdG9yYWdlRW5jcnlwdGVkYGAgcHJvcGVydHkgdG8gYGB0cnVlYGAuXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIHRoZSBgYFN0b3JhZ2VFbmNyeXB0ZWRgYCBwcm9wZXJ0eSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc25hcHNob3QsIGFuZCBpZiB0aGUgREIgY2x1c3RlciBpcyBlbmNyeXB0ZWQsIHRoZSBzcGVjaWZpZWQgYGBLbXNLZXlJZGBgIHByb3BlcnR5IGlzIHVzZWQuXG4gKiAgSWYgeW91IGNyZWF0ZSBhIHJlYWQgcmVwbGljYSBvZiBhbiBlbmNyeXB0ZWQgREIgY2x1c3RlciBpbiBhbm90aGVyIEFXUyBSZWdpb24sIG1ha2Ugc3VyZSB0byBzZXQgYGBLbXNLZXlJZGBgIHRvIGEgS01TIGtleSBpZGVudGlmaWVyIHRoYXQgaXMgdmFsaWQgaW4gdGhlIGRlc3RpbmF0aW9uIEFXUyBSZWdpb24uIFRoaXMgS01TIGtleSBpcyB1c2VkIHRvIGVuY3J5cHQgdGhlIHJlYWQgcmVwbGljYSBpbiB0aGF0IEFXUyBSZWdpb24uXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cbkttc0tleUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBtYXN0ZXIgdXNlciBmb3IgdGhlIERCIGNsdXN0ZXIuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCQ2x1c3RlcklkZW50aWZpZXJgYCwgYGBTbmFwc2hvdElkZW50aWZpZXJgYCwgb3IgYGBHbG9iYWxDbHVzdGVySWRlbnRpZmllcmBgIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc291cmNlIERCIGNsdXN0ZXIsIHRoZSBzbmFwc2hvdCwgb3IgdGhlIHByaW1hcnkgREIgY2x1c3RlciBmb3IgdGhlIGdsb2JhbCBkYXRhYmFzZSBjbHVzdGVyLCByZXNwZWN0aXZlbHkuXG4gKiAgIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5NYXN0ZXJVc2VybmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbWFzdGVyIHBhc3N3b3JkIGZvciB0aGUgREIgaW5zdGFuY2UuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCQ2x1c3RlcklkZW50aWZpZXJgYCwgYGBTbmFwc2hvdElkZW50aWZpZXJgYCwgb3IgYGBHbG9iYWxDbHVzdGVySWRlbnRpZmllcmBgIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc291cmNlIERCIGNsdXN0ZXIsIHRoZSBzbmFwc2hvdCwgb3IgdGhlIHByaW1hcnkgREIgY2x1c3RlciBmb3IgdGhlIGdsb2JhbCBkYXRhYmFzZSBjbHVzdGVyLCByZXNwZWN0aXZlbHkuXG4gKiAgIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5NYXN0ZXJVc2VyUGFzc3dvcmQ/OiBzdHJpbmdcbk1hc3RlclVzZXJTZWNyZXQ/OiBNYXN0ZXJVc2VyU2VjcmV0XG4vKipcbiAqIFRoZSBpbnRlcnZhbCwgaW4gc2Vjb25kcywgYmV0d2VlbiBwb2ludHMgd2hlbiBFbmhhbmNlZCBNb25pdG9yaW5nIG1ldHJpY3MgYXJlIGNvbGxlY3RlZCBmb3IgdGhlIERCIGNsdXN0ZXIuIFRvIHR1cm4gb2ZmIGNvbGxlY3RpbmcgRW5oYW5jZWQgTW9uaXRvcmluZyBtZXRyaWNzLCBzcGVjaWZ5IGBgMGBgLlxuICogIElmIGBgTW9uaXRvcmluZ1JvbGVBcm5gYCBpcyBzcGVjaWZpZWQsIGFsc28gc2V0IGBgTW9uaXRvcmluZ0ludGVydmFsYGAgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIGBgMGBgLlxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqICBWYWxpZCBWYWx1ZXM6IGBgMCB8IDEgfCA1IHwgMTAgfCAxNSB8IDMwIHwgNjBgYFxuICogIERlZmF1bHQ6IGBgMGBgXG4gKi9cbk1vbml0b3JpbmdJbnRlcnZhbD86IG51bWJlclxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgZm9yIHRoZSBJQU0gcm9sZSB0aGF0IHBlcm1pdHMgUkRTIHRvIHNlbmQgRW5oYW5jZWQgTW9uaXRvcmluZyBtZXRyaWNzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3MuIEFuIGV4YW1wbGUgaXMgYGBhcm46YXdzOmlhbToxMjM0NTY3ODkwMTI6cm9sZS9lbWFjY2Vzc2BgLiBGb3IgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYSBtb25pdG9yaW5nIHJvbGUsIHNlZSBbU2V0dGluZyB1cCBhbmQgZW5hYmxpbmcgRW5oYW5jZWQgTW9uaXRvcmluZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfTW9uaXRvcmluZy5PUy5odG1sI1VTRVJfTW9uaXRvcmluZy5PUy5FbmFibGluZykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIElmIGBgTW9uaXRvcmluZ0ludGVydmFsYGAgaXMgc2V0IHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgYDBgYCwgc3VwcGx5IGEgYGBNb25pdG9yaW5nUm9sZUFybmBgIHZhbHVlLlxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuTW9uaXRvcmluZ1JvbGVBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5ldHdvcmsgdHlwZSBvZiB0aGUgREIgY2x1c3Rlci5cbiAqICBWYWxpZCB2YWx1ZXM6XG4gKiAgICsgICBgYElQVjRgYCBcbiAqICAgKyAgIGBgRFVBTGBgIFxuICogICBcbiAqICBUaGUgbmV0d29yayB0eXBlIGlzIGRldGVybWluZWQgYnkgdGhlIGBgREJTdWJuZXRHcm91cGBgIHNwZWNpZmllZCBmb3IgdGhlIERCIGNsdXN0ZXIuIEEgYGBEQlN1Ym5ldEdyb3VwYGAgY2FuIHN1cHBvcnQgb25seSB0aGUgSVB2NCBwcm90b2NvbCBvciB0aGUgSVB2NCBhbmQgSVB2NiBwcm90b2NvbHMgKGBgRFVBTGBgKS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXb3JraW5nIHdpdGggYSBEQiBpbnN0YW5jZSBpbiBhIFZQQ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL1VTRVJfVlBDLldvcmtpbmdXaXRoUkRTSW5zdGFuY2VpbmFWUEMuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUuKlxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuTmV0d29ya1R5cGU/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdHVybiBvbiBQZXJmb3JtYW5jZSBJbnNpZ2h0cyBmb3IgdGhlIERCIGNsdXN0ZXIuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgQW1hem9uIFBlcmZvcm1hbmNlIEluc2lnaHRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9QZXJmSW5zaWdodHMuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuUGVyZm9ybWFuY2VJbnNpZ2h0c0VuYWJsZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSBBV1MgS01TIGtleSBpZGVudGlmaWVyIGZvciBlbmNyeXB0aW9uIG9mIFBlcmZvcm1hbmNlIEluc2lnaHRzIGRhdGEuXG4gKiAgVGhlIEFXUyBLTVMga2V5IGlkZW50aWZpZXIgaXMgdGhlIGtleSBBUk4sIGtleSBJRCwgYWxpYXMgQVJOLCBvciBhbGlhcyBuYW1lIGZvciB0aGUgS01TIGtleS5cbiAqICBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHZhbHVlIGZvciBgYFBlcmZvcm1hbmNlSW5zaWdodHNLTVNLZXlJZGBgLCB0aGVuIEFtYXpvbiBSRFMgdXNlcyB5b3VyIGRlZmF1bHQgS01TIGtleS4gVGhlcmUgaXMgYSBkZWZhdWx0IEtNUyBrZXkgZm9yIHlvdXIgQVdTLWFjY291bnQuIFlvdXIgQVdTLWFjY291bnQgaGFzIGEgZGlmZmVyZW50IGRlZmF1bHQgS01TIGtleSBmb3IgZWFjaCBBV1MtUmVnaW9uLlxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuUGVyZm9ybWFuY2VJbnNpZ2h0c0ttc0tleUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgZGF5cyB0byByZXRhaW4gUGVyZm9ybWFuY2UgSW5zaWdodHMgZGF0YS4gV2hlbiBjcmVhdGluZyBhIERCIGNsdXN0ZXIgd2l0aG91dCBlbmFibGluZyBQZXJmb3JtYW5jZSBJbnNpZ2h0cywgeW91IGNhbid0IHNwZWNpZnkgdGhlIHBhcmFtZXRlciBgYFBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb25QZXJpb2RgYC5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKiAgVmFsaWQgVmFsdWVzOlxuICogICArICAgYGA3YGAgXG4gKiAgICsgICptb250aCogKiAzMSwgd2hlcmUgKm1vbnRoKiBpcyBhIG51bWJlciBvZiBtb250aHMgZnJvbSAxLTIzLiBFeGFtcGxlczogYGA5M2BgICgzIG1vbnRocyAqIDMxKSwgYGAzNDFgYCAoMTEgbW9udGhzICogMzEpLCBgYDU4OWBgICgxOSBtb250aHMgKiAzMSlcbiAqICAgKyAgIGBgNzMxYGAgXG4gKiAgIFxuICogIERlZmF1bHQ6IGBgN2BgIGRheXNcbiAqICBJZiB5b3Ugc3BlY2lmeSBhIHJldGVudGlvbiBwZXJpb2QgdGhhdCBpc24ndCB2YWxpZCwgc3VjaCBhcyBgYDk0YGAsIEFtYXpvbiBSRFMgaXNzdWVzIGFuIGVycm9yLlxuICovXG5QZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uUGVyaW9kPzogbnVtYmVyXG4vKipcbiAqIFRoZSBwb3J0IG51bWJlciBvbiB3aGljaCB0aGUgREIgaW5zdGFuY2VzIGluIHRoZSBEQiBjbHVzdGVyIGFjY2VwdCBjb25uZWN0aW9ucy5cbiAqICBEZWZhdWx0OlxuICogICArICBXaGVuIGBgRW5naW5lTW9kZWBgIGlzIGBgcHJvdmlzaW9uZWRgYCwgYGAzMzA2YGAgKGZvciBib3RoIEF1cm9yYSBNeVNRTCBhbmQgQXVyb3JhIFBvc3RncmVTUUwpXG4gKiAgICsgIFdoZW4gYGBFbmdpbmVNb2RlYGAgaXMgYGBzZXJ2ZXJsZXNzYGA6XG4gKiAgICsgIGBgMzMwNmBgIHdoZW4gYGBFbmdpbmVgYCBpcyBgYGF1cm9yYWBgIG9yIGBgYXVyb3JhLW15c3FsYGBcbiAqICAgKyAgYGA1NDMyYGAgd2hlbiBgYEVuZ2luZWBgIGlzIGBgYXVyb3JhLXBvc3RncmVzcWxgYFxuICogICBcbiAqICAgXG4gKiAgIFRoZSBgYE5vIGludGVycnVwdGlvbmBgIG9uIHVwZGF0ZSBiZWhhdmlvciBvbmx5IGFwcGxpZXMgdG8gREIgY2x1c3RlcnMuIElmIHlvdSBhcmUgdXBkYXRpbmcgYSBEQiBpbnN0YW5jZSwgc2VlIFtQb3J0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZHMtZGF0YWJhc2UtaW5zdGFuY2UuaHRtbCNjZm4tcmRzLWRiaW5zdGFuY2UtcG9ydCkgZm9yIHRoZSBBV1M6OlJEUzo6REJJbnN0YW5jZSByZXNvdXJjZS5cbiAqICAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cblBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIGRhaWx5IHRpbWUgcmFuZ2UgZHVyaW5nIHdoaWNoIGF1dG9tYXRlZCBiYWNrdXBzIGFyZSBjcmVhdGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCYWNrdXAgV2luZG93XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQXVyb3JhLk1hbmFnaW5nLkJhY2t1cHMuaHRtbCNBdXJvcmEuTWFuYWdpbmcuQmFja3Vwcy5CYWNrdXBXaW5kb3cpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlLipcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSBpbiB0aGUgZm9ybWF0IGBgaGgyNDptaS1oaDI0Om1pYGAuXG4gKiAgICsgIE11c3QgYmUgaW4gVW5pdmVyc2FsIENvb3JkaW5hdGVkIFRpbWUgKFVUQykuXG4gKiAgICsgIE11c3Qgbm90IGNvbmZsaWN0IHdpdGggdGhlIHByZWZlcnJlZCBtYWludGVuYW5jZSB3aW5kb3cuXG4gKiAgICsgIE11c3QgYmUgYXQgbGVhc3QgMzAgbWludXRlcy5cbiAqICAgXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cblByZWZlcnJlZEJhY2t1cFdpbmRvdz86IHN0cmluZ1xuLyoqXG4gKiBUaGUgd2Vla2x5IHRpbWUgcmFuZ2UgZHVyaW5nIHdoaWNoIHN5c3RlbSBtYWludGVuYW5jZSBjYW4gb2NjdXIsIGluIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lIChVVEMpLlxuICogIEZvcm1hdDogYGBkZGQ6aGgyNDptaS1kZGQ6aGgyNDptaWBgXG4gKiAgVGhlIGRlZmF1bHQgaXMgYSAzMC1taW51dGUgd2luZG93IHNlbGVjdGVkIGF0IHJhbmRvbSBmcm9tIGFuIDgtaG91ciBibG9jayBvZiB0aW1lIGZvciBlYWNoIEFXUyBSZWdpb24sIG9jY3VycmluZyBvbiBhIHJhbmRvbSBkYXkgb2YgdGhlIHdlZWsuIFRvIHNlZSB0aGUgdGltZSBibG9ja3MgYXZhaWxhYmxlLCBzZWUgW01haW50YWluaW5nIGFuIEFtYXpvbiBBdXJvcmEgREIgY2x1c3Rlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL1VTRVJfVXBncmFkZURCSW5zdGFuY2UuTWFpbnRlbmFuY2UuaHRtbCNBZGp1c3RpbmdUaGVNYWludGVuYW5jZVdpbmRvdy5BdXJvcmEpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlLipcbiAqICBWYWxpZCBEYXlzOiBNb24sIFR1ZSwgV2VkLCBUaHUsIEZyaSwgU2F0LCBTdW4uXG4gKiAgQ29uc3RyYWludHM6IE1pbmltdW0gMzAtbWludXRlIHdpbmRvdy5cbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuUHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIERCIGNsdXN0ZXIgaXMgcHVibGljbHkgYWNjZXNzaWJsZS5cbiAqICBXaGVuIHRoZSBEQiBjbHVzdGVyIGlzIHB1YmxpY2x5IGFjY2Vzc2libGUgYW5kIHlvdSBjb25uZWN0IGZyb20gb3V0c2lkZSBvZiB0aGUgREIgY2x1c3RlcidzIHZpcnR1YWwgcHJpdmF0ZSBjbG91ZCAoVlBDKSwgaXRzIERvbWFpbiBOYW1lIFN5c3RlbSAoRE5TKSBlbmRwb2ludCByZXNvbHZlcyB0byB0aGUgcHVibGljIElQIGFkZHJlc3MuIFdoZW4geW91IGNvbm5lY3QgZnJvbSB3aXRoaW4gdGhlIHNhbWUgVlBDIGFzIHRoZSBEQiBjbHVzdGVyLCB0aGUgZW5kcG9pbnQgcmVzb2x2ZXMgdG8gdGhlIHByaXZhdGUgSVAgYWRkcmVzcy4gQWNjZXNzIHRvIHRoZSBEQiBjbHVzdGVyIGlzIHVsdGltYXRlbHkgY29udHJvbGxlZCBieSB0aGUgc2VjdXJpdHkgZ3JvdXAgaXQgdXNlcy4gVGhhdCBwdWJsaWMgYWNjZXNzIGlzbid0IHBlcm1pdHRlZCBpZiB0aGUgc2VjdXJpdHkgZ3JvdXAgYXNzaWduZWQgdG8gdGhlIERCIGNsdXN0ZXIgZG9lc24ndCBwZXJtaXQgaXQuXG4gKiAgV2hlbiB0aGUgREIgY2x1c3RlciBpc24ndCBwdWJsaWNseSBhY2Nlc3NpYmxlLCBpdCBpcyBhbiBpbnRlcm5hbCBEQiBjbHVzdGVyIHdpdGggYSBETlMgbmFtZSB0aGF0IHJlc29sdmVzIHRvIGEgcHJpdmF0ZSBJUCBhZGRyZXNzLlxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IE11bHRpLUFaIERCIGNsdXN0ZXJzIG9ubHlcbiAqICBEZWZhdWx0OiBUaGUgZGVmYXVsdCBiZWhhdmlvciB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYGBEQlN1Ym5ldEdyb3VwTmFtZWBgIGlzIHNwZWNpZmllZC5cbiAqICBJZiBgYERCU3VibmV0R3JvdXBOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCBhbmQgYGBQdWJsaWNseUFjY2Vzc2libGVgYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBmb2xsb3dpbmcgYXBwbGllczpcbiAqICAgKyAgSWYgdGhlIGRlZmF1bHQgVlBDIGluIHRoZSB0YXJnZXQgUmVnaW9uIGRvZXNu4oCZdCBoYXZlIGFuIGludGVybmV0IGdhdGV3YXkgYXR0YWNoZWQgdG8gaXQsIHRoZSBEQiBjbHVzdGVyIGlzIHByaXZhdGUuXG4gKiAgICsgIElmIHRoZSBkZWZhdWx0IFZQQyBpbiB0aGUgdGFyZ2V0IFJlZ2lvbiBoYXMgYW4gaW50ZXJuZXQgZ2F0ZXdheSBhdHRhY2hlZCB0byBpdCwgdGhlIERCIGNsdXN0ZXIgaXMgcHVibGljLlxuICogICBcbiAqICBJZiBgYERCU3VibmV0R3JvdXBOYW1lYGAgaXMgc3BlY2lmaWVkLCBhbmQgYGBQdWJsaWNseUFjY2Vzc2libGVgYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBmb2xsb3dpbmcgYXBwbGllczpcbiAqICAgKyAgSWYgdGhlIHN1Ym5ldHMgYXJlIHBhcnQgb2YgYSBWUEMgdGhhdCBkb2VzbuKAmXQgaGF2ZSBhbiBpbnRlcm5ldCBnYXRld2F5IGF0dGFjaGVkIHRvIGl0LCB0aGUgREIgY2x1c3RlciBpcyBwcml2YXRlLlxuICogICArICBJZiB0aGUgc3VibmV0cyBhcmUgcGFydCBvZiBhIFZQQyB0aGF0IGhhcyBhbiBpbnRlcm5ldCBnYXRld2F5IGF0dGFjaGVkIHRvIGl0LCB0aGUgREIgY2x1c3RlciBpcyBwdWJsaWMuXG4gKi9cblB1YmxpY2x5QWNjZXNzaWJsZT86IGJvb2xlYW5cbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzb3VyY2UgREIgaW5zdGFuY2Ugb3IgREIgY2x1c3RlciBpZiB0aGlzIERCIGNsdXN0ZXIgaXMgY3JlYXRlZCBhcyBhIHJlYWQgcmVwbGljYS5cbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBvbmx5XG4gKi9cblJlcGxpY2F0aW9uU291cmNlSWRlbnRpZmllcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgZGF0ZSBhbmQgdGltZSB0byByZXN0b3JlIHRoZSBEQiBjbHVzdGVyIHRvLlxuICogIFZhbGlkIFZhbHVlczogVmFsdWUgbXVzdCBiZSBhIHRpbWUgaW4gVW5pdmVyc2FsIENvb3JkaW5hdGVkIFRpbWUgKFVUQykgZm9ybWF0XG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgYmVmb3JlIHRoZSBsYXRlc3QgcmVzdG9yYWJsZSB0aW1lIGZvciB0aGUgREIgaW5zdGFuY2VcbiAqICAgKyAgTXVzdCBiZSBzcGVjaWZpZWQgaWYgYGBVc2VMYXRlc3RSZXN0b3JhYmxlVGltZWBgIHBhcmFtZXRlciBpc24ndCBwcm92aWRlZFxuICogICArICBDYW4ndCBiZSBzcGVjaWZpZWQgaWYgdGhlIGBgVXNlTGF0ZXN0UmVzdG9yYWJsZVRpbWVgYCBwYXJhbWV0ZXIgaXMgZW5hYmxlZFxuICogICArICBDYW4ndCBiZSBzcGVjaWZpZWQgaWYgdGhlIGBgUmVzdG9yZVR5cGVgYCBwYXJhbWV0ZXIgaXMgYGBjb3B5LW9uLXdyaXRlYGBcbiAqICAgXG4gKiAgVGhpcyBwcm9wZXJ0eSBtdXN0IGJlIHVzZWQgd2l0aCBgYFNvdXJjZURCQ2x1c3RlcklkZW50aWZpZXJgYCBwcm9wZXJ0eS4gVGhlIHJlc3VsdGluZyBjbHVzdGVyIHdpbGwgaGF2ZSB0aGUgaWRlbnRpZmllciB0aGF0IG1hdGNoZXMgdGhlIHZhbHVlIG9mIHRoZSBgYERCY2x1c3RlcklkZW50aWZpZXJgYCBwcm9wZXJ0eS5cbiAqICBFeGFtcGxlOiBgYDIwMTUtMDMtMDdUMjM6NDU6MDBaYGBcbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuUmVzdG9yZVRvVGltZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdHlwZSBvZiByZXN0b3JlIHRvIGJlIHBlcmZvcm1lZC4gWW91IGNhbiBzcGVjaWZ5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiAqICAgKyAgYGBmdWxsLWNvcHlgYCAtIFRoZSBuZXcgREIgY2x1c3RlciBpcyByZXN0b3JlZCBhcyBhIGZ1bGwgY29weSBvZiB0aGUgc291cmNlIERCIGNsdXN0ZXIuXG4gKiAgICsgIGBgY29weS1vbi13cml0ZWBgIC0gVGhlIG5ldyBEQiBjbHVzdGVyIGlzIHJlc3RvcmVkIGFzIGEgY2xvbmUgb2YgdGhlIHNvdXJjZSBEQiBjbHVzdGVyLlxuICogICBcbiAqICBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIGBgUmVzdG9yZVR5cGVgYCB2YWx1ZSwgdGhlbiB0aGUgbmV3IERCIGNsdXN0ZXIgaXMgcmVzdG9yZWQgYXMgYSBmdWxsIGNvcHkgb2YgdGhlIHNvdXJjZSBEQiBjbHVzdGVyLlxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5SZXN0b3JlVHlwZT86IHN0cmluZ1xuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24/OiBTZXJ2ZXJsZXNzVjJTY2FsaW5nQ29uZmlndXJhdGlvblxuU2NhbGluZ0NvbmZpZ3VyYXRpb24/OiBTY2FsaW5nQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIERCIHNuYXBzaG90IG9yIERCIGNsdXN0ZXIgc25hcHNob3QgdG8gcmVzdG9yZSBmcm9tLlxuICogIFlvdSBjYW4gdXNlIGVpdGhlciB0aGUgbmFtZSBvciB0aGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgdG8gc3BlY2lmeSBhIERCIGNsdXN0ZXIgc25hcHNob3QuIEhvd2V2ZXIsIHlvdSBjYW4gdXNlIG9ubHkgdGhlIEFSTiB0byBzcGVjaWZ5IGEgREIgc25hcHNob3QuXG4gKiAgQWZ0ZXIgeW91IHJlc3RvcmUgYSBEQiBjbHVzdGVyIHdpdGggYSBgYFNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBzYW1lIGBgU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkgZm9yIGFueSBmdXR1cmUgdXBkYXRlcyB0byB0aGUgREIgY2x1c3Rlci4gV2hlbiB5b3Ugc3BlY2lmeSB0aGlzIHByb3BlcnR5IGZvciBhbiB1cGRhdGUsIHRoZSBEQiBjbHVzdGVyIGlzIG5vdCByZXN0b3JlZCBmcm9tIHRoZSBzbmFwc2hvdCBhZ2FpbiwgYW5kIHRoZSBkYXRhIGluIHRoZSBkYXRhYmFzZSBpcyBub3QgY2hhbmdlZC4gSG93ZXZlciwgaWYgeW91IGRvbid0IHNwZWNpZnkgdGhlIGBgU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIGFuIGVtcHR5IERCIGNsdXN0ZXIgaXMgY3JlYXRlZCwgYW5kIHRoZSBvcmlnaW5hbCBEQiBjbHVzdGVyIGlzIGRlbGV0ZWQuIElmIHlvdSBzcGVjaWZ5IGEgcHJvcGVydHkgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgc25hcHNob3QgcmVzdG9yZSBwcm9wZXJ0eSwgYSBuZXcgREIgY2x1c3RlciBpcyByZXN0b3JlZCBmcm9tIHRoZSBzcGVjaWZpZWQgYGBTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgYW5kIHRoZSBvcmlnaW5hbCBEQiBjbHVzdGVyIGlzIGRlbGV0ZWQuXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkgdG8gcmVzdG9yZSBhIERCIGNsdXN0ZXIgKGFzIG9wcG9zZWQgdG8gc3BlY2lmeWluZyBpdCBmb3IgREIgY2x1c3RlciB1cGRhdGVzKSwgdGhlbiBkb24ndCBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqICAgKyAgIGBgR2xvYmFsQ2x1c3RlcklkZW50aWZpZXJgYCBcbiAqICAgKyAgIGBgTWFzdGVyVXNlcm5hbWVgYCBcbiAqICAgKyAgIGBgTWFzdGVyVXNlclBhc3N3b3JkYGAgXG4gKiAgICsgICBgYFJlcGxpY2F0aW9uU291cmNlSWRlbnRpZmllcmBgIFxuICogICArICAgYGBSZXN0b3JlVHlwZWBgIFxuICogICArICAgYGBTb3VyY2VEQkNsdXN0ZXJJZGVudGlmaWVyYGAgXG4gKiAgICsgICBgYFNvdXJjZVJlZ2lvbmBgIFxuICogICArICBgYFN0b3JhZ2VFbmNyeXB0ZWRgYCAoZm9yIGFuIGVuY3J5cHRlZCBzbmFwc2hvdClcbiAqICAgKyAgIGBgVXNlTGF0ZXN0UmVzdG9yYWJsZVRpbWVgYCBcbiAqICAgXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgbWF0Y2ggdGhlIGlkZW50aWZpZXIgb2YgYW4gZXhpc3RpbmcgU25hcHNob3QuXG4gKiAgIFxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5TbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogV2hlbiByZXN0b3JpbmcgYSBEQiBjbHVzdGVyIHRvIGEgcG9pbnQgaW4gdGltZSwgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHNvdXJjZSBEQiBjbHVzdGVyIGZyb20gd2hpY2ggdG8gcmVzdG9yZS5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBtYXRjaCB0aGUgaWRlbnRpZmllciBvZiBhbiBleGlzdGluZyBEQkNsdXN0ZXIuXG4gKiAgIFxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5Tb3VyY2VEQkNsdXN0ZXJJZGVudGlmaWVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBV1MgUmVnaW9uIHdoaWNoIGNvbnRhaW5zIHRoZSBzb3VyY2UgREIgY2x1c3RlciB3aGVuIHJlcGxpY2F0aW5nIGEgREIgY2x1c3Rlci4gRm9yIGV4YW1wbGUsIGBgdXMtZWFzdC0xYGAuIFxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuU291cmNlUmVnaW9uPzogc3RyaW5nXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBEQiBjbHVzdGVyIGlzIGVuY3J5cHRlZC5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBLbXNLZXlJZGBgIHByb3BlcnR5LCB0aGVuIHlvdSBtdXN0IGVuYWJsZSBlbmNyeXB0aW9uLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCQ2x1c3RlcklkZW50aWZpZXJgYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNvdXJjZSBEQiBjbHVzdGVyLCBhbmQgaWYgdGhlIERCIGNsdXN0ZXIgaXMgZW5jcnlwdGVkLCB0aGUgc3BlY2lmaWVkIGBgS21zS2V5SWRgYCBwcm9wZXJ0eSBpcyB1c2VkLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNuYXBzaG90SWRlbnRpZmllcmBgIGFuZCB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IGlzIGVuY3J5cHRlZCwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNuYXBzaG90LCBhbmQgdGhlIHNwZWNpZmllZCBgYEttc0tleUlkYGAgcHJvcGVydHkgaXMgdXNlZC5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBTbmFwc2hvdElkZW50aWZpZXJgYCBhbmQgdGhlIHNwZWNpZmllZCBzbmFwc2hvdCBpc24ndCBlbmNyeXB0ZWQsIHlvdSBjYW4gdXNlIHRoaXMgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGF0IHRoZSByZXN0b3JlZCBEQiBjbHVzdGVyIGlzIGVuY3J5cHRlZC4gU3BlY2lmeSB0aGUgYGBLbXNLZXlJZGBgIHByb3BlcnR5IGZvciB0aGUgS01TIGtleSB0byB1c2UgZm9yIGVuY3J5cHRpb24uIElmIHlvdSBkb24ndCB3YW50IHRoZSByZXN0b3JlZCBEQiBjbHVzdGVyIHRvIGJlIGVuY3J5cHRlZCwgdGhlbiBkb24ndCBzZXQgdGhpcyBwcm9wZXJ0eSBvciBzZXQgaXQgdG8gYGBmYWxzZWBgLlxuICogICBJZiB5b3Ugc3BlY2lmeSBib3RoIHRoZSBgYFN0b3JhZ2VFbmNyeXB0ZWRgYCBhbmQgYGBTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0aWVzIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgYGBLbXNLZXlJZGBgIHByb3BlcnR5LCB0aGVuIHRoZSByZXN0b3JlZCBEQiBjbHVzdGVyIGluaGVyaXRzIHRoZSBlbmNyeXB0aW9uIHNldHRpbmdzIGZyb20gdGhlIERCIHNuYXBzaG90IHRoYXQgcHJvdmlkZS5cbiAqICAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cblN0b3JhZ2VFbmNyeXB0ZWQ/OiBib29sZWFuXG5TdG9yYWdlVGhyb3VnaHB1dD86IG51bWJlclxuLyoqXG4gKiBUaGUgc3RvcmFnZSB0eXBlIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBEQiBjbHVzdGVyLlxuICogIEZvciBpbmZvcm1hdGlvbiBvbiBzdG9yYWdlIHR5cGVzIGZvciBBdXJvcmEgREIgY2x1c3RlcnMsIHNlZSBbU3RvcmFnZSBjb25maWd1cmF0aW9ucyBmb3IgQW1hem9uIEF1cm9yYSBEQiBjbHVzdGVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL0F1cm9yYS5PdmVydmlldy5TdG9yYWdlUmVsaWFiaWxpdHkuaHRtbCNhdXJvcmEtc3RvcmFnZS10eXBlKS4gRm9yIGluZm9ybWF0aW9uIG9uIHN0b3JhZ2UgdHlwZXMgZm9yIE11bHRpLUFaIERCIGNsdXN0ZXJzLCBzZWUgW1NldHRpbmdzIGZvciBjcmVhdGluZyBNdWx0aS1BWiBEQiBjbHVzdGVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL2NyZWF0ZS1tdWx0aS1hei1kYi1jbHVzdGVyLmh0bWwjY3JlYXRlLW11bHRpLWF6LWRiLWNsdXN0ZXItc2V0dGluZ3MpLlxuICogIFRoaXMgc2V0dGluZyBpcyByZXF1aXJlZCB0byBjcmVhdGUgYSBNdWx0aS1BWiBEQiBjbHVzdGVyLlxuICogIFdoZW4gc3BlY2lmaWVkIGZvciBhIE11bHRpLUFaIERCIGNsdXN0ZXIsIGEgdmFsdWUgZm9yIHRoZSBgYElvcHNgYCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQuXG4gKiAgVmFsaWQgZm9yIENsdXN0ZXIgVHlwZTogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICogIFZhbGlkIFZhbHVlczpcbiAqICAgKyAgQXVyb3JhIERCIGNsdXN0ZXJzIC0gYGBhdXJvcmEgfCBhdXJvcmEtaW9wdDFgYFxuICogICArICBNdWx0aS1BWiBEQiBjbHVzdGVycyAtIGBgaW8xIHwgaW8yIHwgZ3AzYGBcbiAqICAgXG4gKiAgRGVmYXVsdDpcbiAqICAgKyAgQXVyb3JhIERCIGNsdXN0ZXJzIC0gYGBhdXJvcmFgYFxuICogICArICBNdWx0aS1BWiBEQiBjbHVzdGVycyAtIGBgaW8xYGBcbiAqICAgXG4gKiAgIFdoZW4geW91IGNyZWF0ZSBhbiBBdXJvcmEgREIgY2x1c3RlciB3aXRoIHRoZSBzdG9yYWdlIHR5cGUgc2V0IHRvIGBgYXVyb3JhLWlvcHQxYGAsIHRoZSBzdG9yYWdlIHR5cGUgaXMgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlLiBUaGUgc3RvcmFnZSB0eXBlIGlzbid0IHJldHVybmVkIHdoZW4geW91IHNldCBpdCB0byBgYGF1cm9yYWBgLlxuICovXG5TdG9yYWdlVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBUYWdzIHRvIGFzc2lnbiB0byB0aGUgREIgY2x1c3Rlci5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKiBcbiAqIEBtYXhJdGVtcyA1MFxuICovXG5UYWdzPzogVGFnW11cbi8qKlxuICogQSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRvIHJlc3RvcmUgdGhlIERCIGNsdXN0ZXIgdG8gdGhlIGxhdGVzdCByZXN0b3JhYmxlIGJhY2t1cCB0aW1lLiBCeSBkZWZhdWx0LCB0aGUgREIgY2x1c3RlciBpcyBub3QgcmVzdG9yZWQgdG8gdGhlIGxhdGVzdCByZXN0b3JhYmxlIGJhY2t1cCB0aW1lLiBcbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuVXNlTGF0ZXN0UmVzdG9yYWJsZVRpbWU/OiBib29sZWFuXG4vKipcbiAqIEEgbGlzdCBvZiBFQzIgVlBDIHNlY3VyaXR5IGdyb3VwcyB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIERCIGNsdXN0ZXIuXG4gKiAgSWYgeW91IHBsYW4gdG8gdXBkYXRlIHRoZSByZXNvdXJjZSwgZG9uJ3Qgc3BlY2lmeSBWUEMgc2VjdXJpdHkgZ3JvdXBzIGluIGEgc2hhcmVkIFZQQy5cbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuVnBjU2VjdXJpdHlHcm91cElkcz86IHN0cmluZ1tdXG59XG5leHBvcnQgaW50ZXJmYWNlIEVuZHBvaW50IHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb25uZWN0aW9uIGVuZHBvaW50IGZvciB0aGUgcHJpbWFyeSBpbnN0YW5jZSBvZiB0aGUgREIgY2x1c3Rlci5cbiAqL1xuQWRkcmVzcz86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHBvcnQgdGhhdCB0aGUgZGF0YWJhc2UgZW5naW5lIGlzIGxpc3RlbmluZyBvbi5cbiAqL1xuUG9ydD86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBSZWFkRW5kcG9pbnQge1xuLyoqXG4gKiBUaGUgaG9zdCBhZGRyZXNzIG9mIHRoZSByZWFkZXIgZW5kcG9pbnQuXG4gKi9cbkFkZHJlc3M/OiBzdHJpbmdcbn1cbi8qKlxuICogRGVzY3JpYmVzIGFuIEFXUyBJZGVudGl0eSBhbmQgQWNjZXNzIE1hbmFnZW1lbnQgKElBTSkgcm9sZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIERCIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgREJDbHVzdGVyUm9sZSB7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgQVdTIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSByb2xlLiBJQU0gcm9sZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgREIgY2x1c3RlciBncmFudCBwZXJtaXNzaW9uIGZvciB0aGUgREIgY2x1c3RlciB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiBGb3IgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGZlYXR1cmUgbmFtZXMsIHNlZSB0aGUgYGBTdXBwb3J0ZWRGZWF0dXJlTmFtZXNgYCBkZXNjcmlwdGlvbiBpbiBbREJFbmdpbmVWZXJzaW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RCRW5naW5lVmVyc2lvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgQVBJIFJlZmVyZW5jZSouXG4gKi9cbkZlYXR1cmVOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIERCIGNsdXN0ZXIuXG4gKi9cblJvbGVBcm46IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgc2VjcmV0IG1hbmFnZWQgYnkgUkRTIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgZm9yIHRoZSBtYXN0ZXIgdXNlciBwYXNzd29yZC5cbiAqICAgV2hlbiB5b3UgcmVzdG9yZSBhIERCIGNsdXN0ZXIgZnJvbSBhIHNuYXBzaG90LCBBbWF6b24gUkRTIGdlbmVyYXRlcyBhIG5ldyBzZWNyZXQgaW5zdGVhZCBvZiByZXVzaW5nIHRoZSBzZWNyZXQgc3BlY2lmaWVkIGluIHRoZSBgYFNlY3JldEFybmBgIHByb3BlcnR5LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcmVzdG9yZWQgREIgY2x1c3RlciBpcyBzZWN1cmVseSBtYW5hZ2VkIHdpdGggYSBkZWRpY2F0ZWQgc2VjcmV0LiBUbyBtYWludGFpbiBjb25zaXN0ZW50IGludGVncmF0aW9uIHdpdGggeW91ciBhcHBsaWNhdGlvbiwgeW91IG1pZ2h0IG5lZWQgdG8gdXBkYXRlIHJlc291cmNlIGNvbmZpZ3VyYXRpb25zIHRvIHJlZmVyZW5jZSB0aGUgbmV3bHkgY3JlYXRlZCBzZWNyZXQuXG4gKiAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Bhc3N3b3JkIG1hbmFnZW1lbnQgd2l0aCBTZWNyZXRzIE1hbmFnZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9yZHMtc2VjcmV0cy1tYW5hZ2VyLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKiBhbmQgW1Bhc3N3b3JkIG1hbmFnZW1lbnQgd2l0aCBTZWNyZXRzIE1hbmFnZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9yZHMtc2VjcmV0cy1tYW5hZ2VyLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlLipcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0ZXJVc2VyU2VjcmV0IHtcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZWNyZXQuIFRoaXMgcGFyYW1ldGVyIGlzIGEgcmV0dXJuIHZhbHVlIHRoYXQgeW91IGNhbiByZXRyaWV2ZSB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgaW50cmluc2ljIGZ1bmN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXR1cm4gdmFsdWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtcmRzLWRiY2x1c3Rlci5odG1sI2F3cy1yZXNvdXJjZS1yZHMtZGJjbHVzdGVyLXJldHVybi12YWx1ZXMpLlxuICovXG5TZWNyZXRBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFXUyBLTVMga2V5IGlkZW50aWZpZXIgdGhhdCBpcyB1c2VkIHRvIGVuY3J5cHQgdGhlIHNlY3JldC5cbiAqL1xuS21zS2V5SWQ/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHNjYWxpbmcgY29uZmlndXJhdGlvbiBvZiBhbiBBdXJvcmEgU2VydmVybGVzcyBWMiBEQiBjbHVzdGVyLiBcbiAqICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgc3VwcG9ydGVkIGZvciBBdXJvcmEgU2VydmVybGVzcyB2Mi4gRm9yIEF1cm9yYSBTZXJ2ZXJsZXNzIHYxLCBVc2UgdGhlIGBgU2NhbGluZ0NvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eS5cbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBTZXJ2ZXJsZXNzIHYyIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzVjJTY2FsaW5nQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiBBdXJvcmEgY2FwYWNpdHkgdW5pdHMgKEFDVXMpIGZvciBhIERCIGluc3RhbmNlIGluIGFuIEF1cm9yYSBTZXJ2ZXJsZXNzIHYyIGNsdXN0ZXIuIFlvdSBjYW4gc3BlY2lmeSBBQ1UgdmFsdWVzIGluIGhhbGYtc3RlcCBpbmNyZW1lbnRzLCBzdWNoIGFzIDgsIDguNSwgOSwgYW5kIHNvIG9uLiBGb3IgQXVyb3JhIHZlcnNpb25zIHRoYXQgc3VwcG9ydCB0aGUgQXVyb3JhIFNlcnZlcmxlc3MgdjIgYXV0by1wYXVzZSBmZWF0dXJlLCB0aGUgc21hbGxlc3QgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSBpcyAwLiBGb3IgdmVyc2lvbnMgdGhhdCBkb24ndCBzdXBwb3J0IEF1cm9yYSBTZXJ2ZXJsZXNzIHYyIGF1dG8tcGF1c2UsIHRoZSBzbWFsbGVzdCB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIGlzIDAuNS5cbiAqL1xuTWluQ2FwYWNpdHk/OiBudW1iZXJcbi8qKlxuICogVGhlIG1heGltdW0gbnVtYmVyIG9mIEF1cm9yYSBjYXBhY2l0eSB1bml0cyAoQUNVcykgZm9yIGEgREIgaW5zdGFuY2UgaW4gYW4gQXVyb3JhIFNlcnZlcmxlc3MgdjIgY2x1c3Rlci4gWW91IGNhbiBzcGVjaWZ5IEFDVSB2YWx1ZXMgaW4gaGFsZi1zdGVwIGluY3JlbWVudHMsIHN1Y2ggYXMgNDAsIDQwLjUsIDQxLCBhbmQgc28gb24uIFRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgeW91IGNhbiB1c2UgaXMgMTI4LlxuICogIFRoZSBtYXhpbXVtIGNhcGFjaXR5IG11c3QgYmUgaGlnaGVyIHRoYW4gMC41IEFDVXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0Nob29zaW5nIHRoZSBtYXhpbXVtIEF1cm9yYSBTZXJ2ZXJsZXNzIHYyIGNhcGFjaXR5IHNldHRpbmcgZm9yIGEgY2x1c3Rlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL2F1cm9yYS1zZXJ2ZXJsZXNzLXYyLnNldHRpbmctY2FwYWNpdHkuaHRtbCNhdXJvcmEtc2VydmVybGVzcy12Mi5tYXhfY2FwYWNpdHlfY29uc2lkZXJhdGlvbnMpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICBBdXJvcmEgYXV0b21hdGljYWxseSBzZXRzIGNlcnRhaW4gcGFyYW1ldGVycyBmb3IgQXVyb3JhIFNlcnZlcmxlc3MgVjIgREIgaW5zdGFuY2VzIHRvIHZhbHVlcyB0aGF0IGRlcGVuZCBvbiB0aGUgbWF4aW11bSBBQ1UgdmFsdWUgaW4gdGhlIGNhcGFjaXR5IHJhbmdlLiBXaGVuIHlvdSB1cGRhdGUgdGhlIG1heGltdW0gY2FwYWNpdHkgdmFsdWUsIHRoZSBgYFBhcmFtZXRlckFwcGx5U3RhdHVzYGAgdmFsdWUgZm9yIHRoZSBEQiBpbnN0YW5jZSBjaGFuZ2VzIHRvIGBgcGVuZGluZy1yZWJvb3RgYC4gWW91IGNhbiB1cGRhdGUgdGhlIHBhcmFtZXRlciB2YWx1ZXMgYnkgcmVib290aW5nIHRoZSBEQiBpbnN0YW5jZSBhZnRlciBjaGFuZ2luZyB0aGUgY2FwYWNpdHkgcmFuZ2UuXG4gKi9cbk1heENhcGFjaXR5PzogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYW4gQXVyb3JhIFNlcnZlcmxlc3MgdjIgREIgaW5zdGFuY2UgbXVzdCBiZSBpZGxlIGJlZm9yZSBBdXJvcmEgYXR0ZW1wdHMgdG8gYXV0b21hdGljYWxseSBwYXVzZSBpdC4gXG4gKiAgU3BlY2lmeSBhIHZhbHVlIGJldHdlZW4gMzAwIHNlY29uZHMgKGZpdmUgbWludXRlcykgYW5kIDg2LDQwMCBzZWNvbmRzIChvbmUgZGF5KS4gVGhlIGRlZmF1bHQgaXMgMzAwIHNlY29uZHMuXG4gKi9cblNlY29uZHNVbnRpbEF1dG9QYXVzZT86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgc2NhbGluZyBjb25maWd1cmF0aW9uIG9mIGFuIEF1cm9yYSBTZXJ2ZXJsZXNzIHYxIERCIGNsdXN0ZXIuXG4gKiAgVGhpcyBwcm9wZXJ0eSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgQXVyb3JhIFNlcnZlcmxlc3MgdjEuIEZvciBBdXJvcmEgU2VydmVybGVzcyB2MiwgVXNlIHRoZSBgYFNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uYGAgcHJvcGVydHkuXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgU2VydmVybGVzcyB2MSBEQiBjbHVzdGVycyBvbmx5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NhbGluZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0byBhbGxvdyBvciBkaXNhbGxvdyBhdXRvbWF0aWMgcGF1c2UgZm9yIGFuIEF1cm9yYSBEQiBjbHVzdGVyIGluIGBgc2VydmVybGVzc2BgIERCIGVuZ2luZSBtb2RlLiBBIERCIGNsdXN0ZXIgY2FuIGJlIHBhdXNlZCBvbmx5IHdoZW4gaXQncyBpZGxlIChpdCBoYXMgbm8gY29ubmVjdGlvbnMpLlxuICogICBJZiBhIERCIGNsdXN0ZXIgaXMgcGF1c2VkIGZvciBtb3JlIHRoYW4gc2V2ZW4gZGF5cywgdGhlIERCIGNsdXN0ZXIgbWlnaHQgYmUgYmFja2VkIHVwIHdpdGggYSBzbmFwc2hvdC4gSW4gdGhpcyBjYXNlLCB0aGUgREIgY2x1c3RlciBpcyByZXN0b3JlZCB3aGVuIHRoZXJlIGlzIGEgcmVxdWVzdCB0byBjb25uZWN0IHRvIGl0LlxuICovXG5BdXRvUGF1c2U/OiBib29sZWFuXG4vKipcbiAqIFRoZSBtYXhpbXVtIGNhcGFjaXR5IGZvciBhbiBBdXJvcmEgREIgY2x1c3RlciBpbiBgYHNlcnZlcmxlc3NgYCBEQiBlbmdpbmUgbW9kZS5cbiAqICBGb3IgQXVyb3JhIE15U1FMLCB2YWxpZCBjYXBhY2l0eSB2YWx1ZXMgYXJlIGBgMWBgLCBgYDJgYCwgYGA0YGAsIGBgOGBgLCBgYDE2YGAsIGBgMzJgYCwgYGA2NGBgLCBgYDEyOGBgLCBhbmQgYGAyNTZgYC5cbiAqICBGb3IgQXVyb3JhIFBvc3RncmVTUUwsIHZhbGlkIGNhcGFjaXR5IHZhbHVlcyBhcmUgYGAyYGAsIGBgNGBgLCBgYDhgYCwgYGAxNmBgLCBgYDMyYGAsIGBgNjRgYCwgYGAxOTJgYCwgYW5kIGBgMzg0YGAuXG4gKiAgVGhlIG1heGltdW0gY2FwYWNpdHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbmltdW0gY2FwYWNpdHkuXG4gKi9cbk1heENhcGFjaXR5PzogbnVtYmVyXG4vKipcbiAqIFRoZSBtaW5pbXVtIGNhcGFjaXR5IGZvciBhbiBBdXJvcmEgREIgY2x1c3RlciBpbiBgYHNlcnZlcmxlc3NgYCBEQiBlbmdpbmUgbW9kZS5cbiAqICBGb3IgQXVyb3JhIE15U1FMLCB2YWxpZCBjYXBhY2l0eSB2YWx1ZXMgYXJlIGBgMWBgLCBgYDJgYCwgYGA0YGAsIGBgOGBgLCBgYDE2YGAsIGBgMzJgYCwgYGA2NGBgLCBgYDEyOGBgLCBhbmQgYGAyNTZgYC5cbiAqICBGb3IgQXVyb3JhIFBvc3RncmVTUUwsIHZhbGlkIGNhcGFjaXR5IHZhbHVlcyBhcmUgYGAyYGAsIGBgNGBgLCBgYDhgYCwgYGAxNmBgLCBgYDMyYGAsIGBgNjRgYCwgYGAxOTJgYCwgYW5kIGBgMzg0YGAuXG4gKiAgVGhlIG1pbmltdW0gY2FwYWNpdHkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1heGltdW0gY2FwYWNpdHkuXG4gKi9cbk1pbkNhcGFjaXR5PzogbnVtYmVyXG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSwgaW4gc2Vjb25kcywgdGhhdCBBdXJvcmEgU2VydmVybGVzcyB2MSB0cmllcyB0byBmaW5kIGEgc2NhbGluZyBwb2ludCB0byBwZXJmb3JtIHNlYW1sZXNzIHNjYWxpbmcgYmVmb3JlIGVuZm9yY2luZyB0aGUgdGltZW91dCBhY3Rpb24uIFRoZSBkZWZhdWx0IGlzIDMwMC5cbiAqICBTcGVjaWZ5IGEgdmFsdWUgYmV0d2VlbiA2MCBhbmQgNjAwIHNlY29uZHMuXG4gKi9cblNlY29uZHNCZWZvcmVUaW1lb3V0PzogbnVtYmVyXG4vKipcbiAqIFRoZSB0aW1lLCBpbiBzZWNvbmRzLCBiZWZvcmUgYW4gQXVyb3JhIERCIGNsdXN0ZXIgaW4gYGBzZXJ2ZXJsZXNzYGAgbW9kZSBpcyBwYXVzZWQuXG4gKiAgU3BlY2lmeSBhIHZhbHVlIGJldHdlZW4gMzAwIGFuZCA4Niw0MDAgc2Vjb25kcy5cbiAqL1xuU2Vjb25kc1VudGlsQXV0b1BhdXNlPzogbnVtYmVyXG4vKipcbiAqIFRoZSBhY3Rpb24gdG8gdGFrZSB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQsIGVpdGhlciBgYEZvcmNlQXBwbHlDYXBhY2l0eUNoYW5nZWBgIG9yIGBgUm9sbGJhY2tDYXBhY2l0eUNoYW5nZWBgLlxuICogIGBgRm9yY2VBcHBseUNhcGFjaXR5Q2hhbmdlYGAgc2V0cyB0aGUgY2FwYWNpdHkgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBhcyBzb29uIGFzIHBvc3NpYmxlLlxuICogIGBgUm9sbGJhY2tDYXBhY2l0eUNoYW5nZWBgLCB0aGUgZGVmYXVsdCwgaWdub3JlcyB0aGUgY2FwYWNpdHkgY2hhbmdlIGlmIGEgc2NhbGluZyBwb2ludCBpc24ndCBmb3VuZCBpbiB0aGUgdGltZW91dCBwZXJpb2QuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IGBgRm9yY2VBcHBseUNhcGFjaXR5Q2hhbmdlYGAsIGNvbm5lY3Rpb25zIHRoYXQgcHJldmVudCBBdXJvcmEgU2VydmVybGVzcyB2MSBmcm9tIGZpbmRpbmcgYSBzY2FsaW5nIHBvaW50IG1pZ2h0IGJlIGRyb3BwZWQuXG4gKiAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0F1dG9zY2FsaW5nIGZvciBBdXJvcmEgU2VydmVybGVzcyB2MV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL2F1cm9yYS1zZXJ2ZXJsZXNzLmhvdy1pdC13b3Jrcy5odG1sI2F1cm9yYS1zZXJ2ZXJsZXNzLmhvdy1pdC13b3Jrcy5hdXRvLXNjYWxpbmcpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqL1xuVGltZW91dEFjdGlvbj86IHN0cmluZ1xufVxuLyoqXG4gKiBNZXRhZGF0YSBhc3NpZ25lZCB0byBhbiBBbWF6b24gUkRTIHJlc291cmNlIGNvbnNpc3Rpbmcgb2YgYSBrZXktdmFsdWUgcGFpci5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYWdnaW5nIEFtYXpvbiBSRFMgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9UYWdnaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKiBvciBbVGFnZ2luZyBBbWF6b24gQXVyb3JhIGFuZCBBbWF6b24gUkRTIHJlc291cmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL1VTRVJfVGFnZ2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogQSBrZXkgaXMgdGhlIHJlcXVpcmVkIG5hbWUgb2YgdGhlIHRhZy4gVGhlIHN0cmluZyB2YWx1ZSBjYW4gYmUgZnJvbSAxIHRvIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW4ndCBiZSBwcmVmaXhlZCB3aXRoIGBgYXdzOmBgIG9yIGBgcmRzOmBgLiBUaGUgc3RyaW5nIGNhbiBvbmx5IGNvbnRhaW4gb25seSB0aGUgc2V0IG9mIFVuaWNvZGUgbGV0dGVycywgZGlnaXRzLCB3aGl0ZS1zcGFjZSwgJ18nLCAnLicsICc6JywgJy8nLCAnPScsICcrJywgJy0nLCAnQCcgKEphdmEgcmVnZXg6IFwiXihbXFxcXHB7TH1cXFxccHtafVxcXFxwe059Xy46Lz0rXFxcXC1AXSopJFwiKS5cbiAqL1xuS2V5OiBzdHJpbmdcbi8qKlxuICogQSB2YWx1ZSBpcyB0aGUgb3B0aW9uYWwgdmFsdWUgb2YgdGhlIHRhZy4gVGhlIHN0cmluZyB2YWx1ZSBjYW4gYmUgZnJvbSAxIHRvIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW4ndCBiZSBwcmVmaXhlZCB3aXRoIGBgYXdzOmBgIG9yIGBgcmRzOmBgLiBUaGUgc3RyaW5nIGNhbiBvbmx5IGNvbnRhaW4gb25seSB0aGUgc2V0IG9mIFVuaWNvZGUgbGV0dGVycywgZGlnaXRzLCB3aGl0ZS1zcGFjZSwgJ18nLCAnLicsICc6JywgJy8nLCAnPScsICcrJywgJy0nLCAnQCcgKEphdmEgcmVnZXg6IFwiXihbXFxcXHB7TH1cXFxccHtafVxcXFxwe059Xy46Lz0rXFxcXC1AXSopJFwiKS5cbiAqL1xuVmFsdWU/OiBzdHJpbmdcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJkcy1kYmNsdXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtcmRzLWRiY2x1c3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgYGBBV1M6OlJEUzo6REJDbHVzdGVyYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gQXVyb3JhIERCIGNsdXN0ZXIgb3IgTXVsdGktQVogREIgY2x1c3Rlci5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjcmVhdGluZyBhbiBBdXJvcmEgREIgY2x1c3Rlciwgc2VlIFtDcmVhdGluZyBhbiBBbWF6b24gQXVyb3JhIERCIGNsdXN0ZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9BdXJvcmEuQ3JlYXRlSW5zdGFuY2UuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIGEgTXVsdGktQVogREIgY2x1c3Rlciwgc2VlIFtDcmVhdGluZyBhIE11bHRpLUFaIERCIGNsdXN0ZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9jcmVhdGUtbXVsdGktYXotZGItY2x1c3Rlci5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgIFlvdSBjYW4gb25seSBjcmVhdGUgdGhpcyByZXNvdXJjZSBpbiBBV1MgUmVnaW9ucyB3aGVyZSBBbWF6b24gQXVyb3JhIG9yIE11bHRpLUFaIERCIGNsdXN0ZXJzIGFyZSBzdXBwb3J0ZWQuXG4gKiAgICAqVXBkYXRpbmcgREIgY2x1c3RlcnMqIFxuICogIFdoZW4gcHJvcGVydGllcyBsYWJlbGVkIFwiKlVwZGF0ZSByZXF1aXJlczoqW1JlcGxhY2VtZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS91c2luZy1jZm4tdXBkYXRpbmctc3RhY2tzLXVwZGF0ZS1iZWhhdmlvcnMuaHRtbCN1cGRhdGUtcmVwbGFjZW1lbnQpXCIgYXJlIHVwZGF0ZWQsIEFXUyBDbG91ZEZvcm1hdGlvbiBmaXJzdCBjcmVhdGVzIGEgcmVwbGFjZW1lbnQgREIgY2x1c3RlciwgdGhlbiBjaGFuZ2VzIHJlZmVyZW5jZXMgZnJvbSBvdGhlciBkZXBlbmRlbnQgcmVzb3VyY2VzIHRvIHBvaW50IHRvIHRoZSByZXBsYWNlbWVudCBEQiBjbHVzdGVyLCBhbmQgZmluYWxseSBkZWxldGVzIHRoZSBvbGQgREIgY2x1c3Rlci5cbiAqICAgV2UgaGlnaGx5IHJlY29tbWVuZCB0aGF0IHlvdSB0YWtlIGEgc25hcHNob3Qgb2YgdGhlIGRhdGFiYXNlIGJlZm9yZSB1cGRhdGluZyB0aGUgc3RhY2suIElmIHlvdSBkb24ndCwgeW91IGxvc2UgdGhlIGRhdGEgd2hlbiBBV1MgQ2xvdWRGb3JtYXRpb24gcmVwbGFjZXMgeW91ciBEQiBjbHVzdGVyLiBUbyBwcmVzZXJ2ZSB5b3VyIGRhdGEsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBwcm9jZWR1cmU6XG4gKiAgIDEuICBEZWFjdGl2YXRlIGFueSBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgdXNpbmcgdGhlIERCIGNsdXN0ZXIgc28gdGhhdCB0aGVyZSdzIG5vIGFjdGl2aXR5IG9uIHRoZSBEQiBpbnN0YW5jZS5cbiAqICAgMS4gIENyZWF0ZSBhIHNuYXBzaG90IG9mIHRoZSBEQiBjbHVzdGVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBhIERCIGNsdXN0ZXIgc25hcHNob3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9VU0VSX0NyZWF0ZVNuYXBzaG90Q2x1c3Rlci5odG1sKS5cbiAqICAgMS4gIElmIHlvdSB3YW50IHRvIHJlc3RvcmUgeW91ciBEQiBjbHVzdGVyIHVzaW5nIGEgREIgY2x1c3RlciBzbmFwc2hvdCwgbW9kaWZ5IHRoZSB1cGRhdGVkIHRlbXBsYXRlIHdpdGggeW91ciBEQiBjbHVzdGVyIGNoYW5nZXMgYW5kIGFkZCB0aGUgYGBTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSB3aXRoIHRoZSBJRCBvZiB0aGUgREIgY2x1c3RlciBzbmFwc2hvdCB0aGF0IHlvdSB3YW50IHRvIHVzZS5cbiAqICBBZnRlciB5b3UgcmVzdG9yZSBhIERCIGNsdXN0ZXIgd2l0aCBhIGBgU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIHlvdSBtdXN0IHNwZWNpZnkgdGhlIHNhbWUgYGBTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSBmb3IgYW55IGZ1dHVyZSB1cGRhdGVzIHRvIHRoZSBEQiBjbHVzdGVyLiBXaGVuIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHkgZm9yIGFuIHVwZGF0ZSwgdGhlIERCIGNsdXN0ZXIgaXMgbm90IHJlc3RvcmVkIGZyb20gdGhlIERCIGNsdXN0ZXIgc25hcHNob3QgYWdhaW4sIGFuZCB0aGUgZGF0YSBpbiB0aGUgZGF0YWJhc2UgaXMgbm90IGNoYW5nZWQuIEhvd2V2ZXIsIGlmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBgYFNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBhbiBlbXB0eSBEQiBjbHVzdGVyIGlzIGNyZWF0ZWQsIGFuZCB0aGUgb3JpZ2luYWwgREIgY2x1c3RlciBpcyBkZWxldGVkLiBJZiB5b3Ugc3BlY2lmeSBhIHByb3BlcnR5IHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzIHNuYXBzaG90IHJlc3RvcmUgcHJvcGVydHksIGEgbmV3IERCIGNsdXN0ZXIgaXMgcmVzdG9yZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGBgU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIGFuZCB0aGUgb3JpZ2luYWwgREIgY2x1c3RlciBpcyBkZWxldGVkLlxuICogICAxLiAgVXBkYXRlIHRoZSBzdGFjay5cbiAqICAgXG4gKiAgIEN1cnJlbnRseSwgd2hlbiB5b3UgYXJlIHVwZGF0aW5nIHRoZSBzdGFjayBmb3IgYW4gQXVyb3JhIFNlcnZlcmxlc3MgREIgY2x1c3RlciwgeW91IGNhbid0IGluY2x1ZGUgY2hhbmdlcyB0byBhbnkgb3RoZXIgcHJvcGVydGllcyB3aGVuIHlvdSBzcGVjaWZ5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6IGBgUHJlZmVycmVkQmFja3VwV2luZG93YGAsIGBgUHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3dgYCwgYW5kIGBgUG9ydGBgLiBUaGlzIGxpbWl0YXRpb24gZG9lc24ndCBhcHBseSB0byBwcm92aXNpb25lZCBEQiBjbHVzdGVycy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1cGRhdGluZyBvdGhlciBwcm9wZXJ0aWVzIG9mIHRoaXMgcmVzb3VyY2UsIHNlZSBgYE1vZGlmeURCQ2x1c3RlcmBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1cGRhdGluZyBzdGFja3MsIHNlZSBbQ2xvdWRGb3JtYXRpb24gU3RhY2tzIFVwZGF0ZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3VzaW5nLWNmbi11cGRhdGluZy1zdGFja3MuaHRtbCkuXG4gKiAgICpEZWxldGluZyBEQiBjbHVzdGVycyogXG4gKiAgVGhlIGRlZmF1bHQgYGBEZWxldGlvblBvbGljeWBgIGZvciBgYEFXUzo6UkRTOjpEQkNsdXN0ZXJgYCByZXNvdXJjZXMgaXMgYGBTbmFwc2hvdGBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgQVdTIENsb3VkRm9ybWF0aW9uIGRlbGV0ZXMgcmVzb3VyY2VzLCBzZWUgW0RlbGV0aW9uUG9saWN5IEF0dHJpYnV0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLWF0dHJpYnV0ZS1kZWxldGlvbnBvbGljeS5odG1sKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX1JEU19EQkNMVVNURVIge1xuRW5kcG9pbnQ/OiBFbmRwb2ludFxuUmVhZEVuZHBvaW50PzogUmVhZEVuZHBvaW50XG4vKipcbiAqIFRoZSBhbW91bnQgb2Ygc3RvcmFnZSBpbiBnaWJpYnl0ZXMgKEdpQikgdG8gYWxsb2NhdGUgdG8gZWFjaCBEQiBpbnN0YW5jZSBpbiB0aGUgTXVsdGktQVogREIgY2x1c3Rlci5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBNdWx0aS1BWiBEQiBjbHVzdGVycyBvbmx5XG4gKiAgVGhpcyBzZXR0aW5nIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIE11bHRpLUFaIERCIGNsdXN0ZXIuXG4gKi9cbkFsbG9jYXRlZFN0b3JhZ2U/OiBudW1iZXJcbi8qKlxuICogUHJvdmlkZXMgYSBsaXN0IG9mIHRoZSBBV1MgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIHJvbGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgREIgY2x1c3Rlci4gSUFNIHJvbGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIERCIGNsdXN0ZXIgZ3JhbnQgcGVybWlzc2lvbiBmb3IgdGhlIERCIGNsdXN0ZXIgdG8gYWNjZXNzIG90aGVyIEFtYXpvbiBXZWIgU2VydmljZXMgb24geW91ciBiZWhhbGYuXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cbkFzc29jaWF0ZWRSb2xlcz86IERCQ2x1c3RlclJvbGVbXVxuLyoqXG4gKiBBIGxpc3Qgb2YgQXZhaWxhYmlsaXR5IFpvbmVzIChBWnMpIHdoZXJlIGluc3RhbmNlcyBpbiB0aGUgREIgY2x1c3RlciBjYW4gYmUgY3JlYXRlZC4gRm9yIGluZm9ybWF0aW9uIG9uIEFXUyBSZWdpb25zIGFuZCBBdmFpbGFiaWxpdHkgWm9uZXMsIHNlZSBbQ2hvb3NpbmcgdGhlIFJlZ2lvbnMgYW5kIEF2YWlsYWJpbGl0eSBab25lc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL0NvbmNlcHRzLlJlZ2lvbnNBbmRBdmFpbGFiaWxpdHlab25lcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZSouIFxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuQXZhaWxhYmlsaXR5Wm9uZXM/OiBzdHJpbmdbXVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBtaW5vciBlbmdpbmUgdXBncmFkZXMgYXJlIGFwcGxpZWQgYXV0b21hdGljYWxseSB0byB0aGUgREIgY2x1c3RlciBkdXJpbmcgdGhlIG1haW50ZW5hbmNlIHdpbmRvdy4gQnkgZGVmYXVsdCwgbWlub3IgZW5naW5lIHVwZ3JhZGVzIGFyZSBhcHBsaWVkIGF1dG9tYXRpY2FsbHkuXG4gKiAgVmFsaWQgZm9yIENsdXN0ZXIgVHlwZTogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGF1dG9tYXRpYyBtaW5vciB2ZXJzaW9uIHVwZ3JhZGVzLCBzZWUgW0F1dG9tYXRpY2FsbHkgdXBncmFkaW5nIHRoZSBtaW5vciBlbmdpbmUgdmVyc2lvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfVXBncmFkZURCSW5zdGFuY2UuVXBncmFkaW5nLmh0bWwjVVNFUl9VcGdyYWRlREJJbnN0YW5jZS5VcGdyYWRpbmcuQXV0b01pbm9yVmVyc2lvblVwZ3JhZGVzKS5cbiAqL1xuQXV0b01pbm9yVmVyc2lvblVwZ3JhZGU/OiBib29sZWFuXG4vKipcbiAqIFRoZSB0YXJnZXQgYmFja3RyYWNrIHdpbmRvdywgaW4gc2Vjb25kcy4gVG8gZGlzYWJsZSBiYWNrdHJhY2tpbmcsIHNldCB0aGlzIHZhbHVlIHRvIGBgMGBgLlxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBNeVNRTCBEQiBjbHVzdGVycyBvbmx5XG4gKiAgRGVmYXVsdDogYGAwYGBcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgSWYgc3BlY2lmaWVkLCB0aGlzIHZhbHVlIG11c3QgYmUgc2V0IHRvIGEgbnVtYmVyIGZyb20gMCB0byAyNTksMjAwICg3MiBob3VycykuXG4gKi9cbkJhY2t0cmFja1dpbmRvdz86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGRheXMgZm9yIHdoaWNoIGF1dG9tYXRlZCBiYWNrdXBzIGFyZSByZXRhaW5lZC5cbiAqICBEZWZhdWx0OiAxXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgYSB2YWx1ZSBmcm9tIDEgdG8gMzVcbiAqICAgXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cbkJhY2t1cFJldGVudGlvblBlcmlvZD86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHNjYWxhYmlsaXR5IG1vZGUgb2YgdGhlIEF1cm9yYSBEQiBjbHVzdGVyLiBXaGVuIHNldCB0byBgYGxpbWl0bGVzc2BgLCB0aGUgY2x1c3RlciBvcGVyYXRlcyBhcyBhbiBBdXJvcmEgTGltaXRsZXNzIERhdGFiYXNlLCBhbGxvd2luZyB5b3UgdG8gY3JlYXRlIGEgREIgc2hhcmQgZ3JvdXAgZm9yIGhvcml6b250YWwgc2NhbGluZyAoc2hhcmRpbmcpIGNhcGFiaWxpdGllcy4gV2hlbiBzZXQgdG8gYGBzdGFuZGFyZGBgICh0aGUgZGVmYXVsdCksIHRoZSBjbHVzdGVyIHVzZXMgbm9ybWFsIERCIGluc3RhbmNlIGNyZWF0aW9uLlxuICogICpJbXBvcnRhbnQ6KiBBdXRvbWF0ZWQgYmFja3VwIHJldGVudGlvbiBpc24ndCBzdXBwb3J0ZWQgd2l0aCBBdXJvcmEgTGltaXRsZXNzIERhdGFiYXNlIGNsdXN0ZXJzLiBJZiB5b3Ugc2V0IHRoaXMgcHJvcGVydHkgdG8gYGBsaW1pdGxlc3NgYCwgeW91IGNhbm5vdCBzZXQgYGBEZWxldGVBdXRvbWF0ZWRCYWNrdXBzYGAgdG8gYGBmYWxzZWBgLiBUbyBjcmVhdGUgYSBiYWNrdXAsIHVzZSBtYW51YWwgc25hcHNob3RzIGluc3RlYWQuXG4gKi9cbkNsdXN0ZXJTY2FsYWJpbGl0eVR5cGU/OiBzdHJpbmdcbi8qKlxuICogQSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRvIGNvcHkgYWxsIHRhZ3MgZnJvbSB0aGUgREIgY2x1c3RlciB0byBzbmFwc2hvdHMgb2YgdGhlIERCIGNsdXN0ZXIuIFRoZSBkZWZhdWx0IGlzIG5vdCB0byBjb3B5IHRoZW0uXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cbkNvcHlUYWdzVG9TbmFwc2hvdD86IGJvb2xlYW5cbi8qKlxuICogVGhlIG1vZGUgb2YgRGF0YWJhc2UgSW5zaWdodHMgdG8gZW5hYmxlIGZvciB0aGUgREIgY2x1c3Rlci5cbiAqICBJZiB5b3Ugc2V0IHRoaXMgdmFsdWUgdG8gYGBhZHZhbmNlZGBgLCB5b3UgbXVzdCBhbHNvIHNldCB0aGUgYGBQZXJmb3JtYW5jZUluc2lnaHRzRW5hYmxlZGBgIHBhcmFtZXRlciB0byBgYHRydWVgYCBhbmQgdGhlIGBgUGVyZm9ybWFuY2VJbnNpZ2h0c1JldGVudGlvblBlcmlvZGBgIHBhcmFtZXRlciB0byA0NjUuXG4gKiAgVmFsaWQgZm9yIENsdXN0ZXIgVHlwZTogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5EYXRhYmFzZUluc2lnaHRzTW9kZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB5b3VyIGRhdGFiYXNlLiBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBhIG5hbWUsIHRoZW4gQW1hem9uIFJEUyB3b24ndCBjcmVhdGUgYSBkYXRhYmFzZSBpbiB0aGlzIERCIGNsdXN0ZXIuIEZvciBuYW1pbmcgY29uc3RyYWludHMsIHNlZSBbTmFtaW5nIENvbnN0cmFpbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQ0hBUF9MaW1pdHMuaHRtbCNSRFNfTGltaXRzLkNvbnN0cmFpbnRzKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZSouIFxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5EYXRhYmFzZU5hbWU/OiBzdHJpbmdcbkRCQ2x1c3RlckFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgY29tcHV0ZSBhbmQgbWVtb3J5IGNhcGFjaXR5IG9mIGVhY2ggREIgaW5zdGFuY2UgaW4gdGhlIE11bHRpLUFaIERCIGNsdXN0ZXIsIGZvciBleGFtcGxlIGBgZGIubTZnZC54bGFyZ2VgYC4gTm90IGFsbCBEQiBpbnN0YW5jZSBjbGFzc2VzIGFyZSBhdmFpbGFibGUgaW4gYWxsIEFXUy1SZWdpb25zLCBvciBmb3IgYWxsIGRhdGFiYXNlIGVuZ2luZXMuXG4gKiAgRm9yIHRoZSBmdWxsIGxpc3Qgb2YgREIgaW5zdGFuY2UgY2xhc3NlcyBhbmQgYXZhaWxhYmlsaXR5IGZvciB5b3VyIGVuZ2luZSwgc2VlIFtEQiBpbnN0YW5jZSBjbGFzc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NvbmNlcHRzLkRCSW5zdGFuY2VDbGFzcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVGhpcyBzZXR0aW5nIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIE11bHRpLUFaIERCIGNsdXN0ZXIuXG4gKiAgVmFsaWQgZm9yIENsdXN0ZXIgVHlwZTogTXVsdGktQVogREIgY2x1c3RlcnMgb25seVxuICovXG5EQkNsdXN0ZXJJbnN0YW5jZUNsYXNzPzogc3RyaW5nXG5EQkNsdXN0ZXJSZXNvdXJjZUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBEQiBwYXJhbWV0ZXIgZ3JvdXAgdG8gYXBwbHkgdG8gYWxsIGluc3RhbmNlcyBvZiB0aGUgREIgY2x1c3Rlci5cbiAqICAgV2hlbiB5b3UgYXBwbHkgYSBwYXJhbWV0ZXIgZ3JvdXAgdXNpbmcgdGhlIGBgREJJbnN0YW5jZVBhcmFtZXRlckdyb3VwTmFtZWBgIHBhcmFtZXRlciwgdGhlIERCIGNsdXN0ZXIgaXNuJ3QgcmVib290ZWQgYXV0b21hdGljYWxseS4gQWxzbywgcGFyYW1ldGVyIGNoYW5nZXMgYXJlIGFwcGxpZWQgaW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gZHVyaW5nIHRoZSBuZXh0IG1haW50ZW5hbmNlIHdpbmRvdy5cbiAqICAgVmFsaWQgZm9yIENsdXN0ZXIgVHlwZTogQXVyb3JhIERCIGNsdXN0ZXJzIG9ubHlcbiAqICBEZWZhdWx0OiBUaGUgZXhpc3RpbmcgbmFtZSBzZXR0aW5nXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIFRoZSBEQiBwYXJhbWV0ZXIgZ3JvdXAgbXVzdCBiZSBpbiB0aGUgc2FtZSBEQiBwYXJhbWV0ZXIgZ3JvdXAgZmFtaWx5IGFzIHRoaXMgREIgY2x1c3Rlci5cbiAqICAgKyAgVGhlIGBgREJJbnN0YW5jZVBhcmFtZXRlckdyb3VwTmFtZWBgIHBhcmFtZXRlciBpcyB2YWxpZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBgYEFsbG93TWFqb3JWZXJzaW9uVXBncmFkZWBgIHBhcmFtZXRlciBmb3IgYSBtYWpvciB2ZXJzaW9uIHVwZ3JhZGUgb25seS5cbiAqL1xuREJJbnN0YW5jZVBhcmFtZXRlckdyb3VwTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS5cbiAqL1xuREJTeXN0ZW1JZD86IHN0cmluZ1xuLyoqXG4gKiBJZiB5b3UgYXJlIGNvbmZpZ3VyaW5nIGFuIEF1cm9yYSBnbG9iYWwgZGF0YWJhc2UgY2x1c3RlciBhbmQgd2FudCB5b3VyIEF1cm9yYSBEQiBjbHVzdGVyIHRvIGJlIGEgc2Vjb25kYXJ5IG1lbWJlciBpbiB0aGUgZ2xvYmFsIGRhdGFiYXNlIGNsdXN0ZXIsIHNwZWNpZnkgdGhlIGdsb2JhbCBjbHVzdGVyIElEIG9mIHRoZSBnbG9iYWwgZGF0YWJhc2UgY2x1c3Rlci4gVG8gZGVmaW5lIHRoZSBwcmltYXJ5IGRhdGFiYXNlIGNsdXN0ZXIgb2YgdGhlIGdsb2JhbCBjbHVzdGVyLCB1c2UgdGhlIFtBV1M6OlJEUzo6R2xvYmFsQ2x1c3Rlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLXJkcy1nbG9iYWxjbHVzdGVyLmh0bWwpIHJlc291cmNlLiBcbiAqICAgSWYgeW91IGFyZW4ndCBjb25maWd1cmluZyBhIGdsb2JhbCBkYXRhYmFzZSBjbHVzdGVyLCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFxuICogICBUbyByZW1vdmUgdGhlIERCIGNsdXN0ZXIgZnJvbSBhIGdsb2JhbCBkYXRhYmFzZSBjbHVzdGVyLCBzcGVjaWZ5IGFuIGVtcHR5IHZhbHVlIGZvciB0aGUgYGBHbG9iYWxDbHVzdGVySWRlbnRpZmllcmBgIHByb3BlcnR5LlxuICogICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgQXVyb3JhIGdsb2JhbCBkYXRhYmFzZXMsIHNlZSBbV29ya2luZyB3aXRoIEFtYXpvbiBBdXJvcmEgR2xvYmFsIERhdGFiYXNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL2F1cm9yYS1nbG9iYWwtZGF0YWJhc2UuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuR2xvYmFsQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlIERCIGNsdXN0ZXIgaWRlbnRpZmllci4gVGhpcyBwYXJhbWV0ZXIgaXMgc3RvcmVkIGFzIGEgbG93ZXJjYXNlIHN0cmluZy5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBjb250YWluIGZyb20gMSB0byA2MyBsZXR0ZXJzLCBudW1iZXJzLCBvciBoeXBoZW5zLlxuICogICArICBGaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxldHRlci5cbiAqICAgKyAgQ2FuJ3QgZW5kIHdpdGggYSBoeXBoZW4gb3IgY29udGFpbiB0d28gY29uc2VjdXRpdmUgaHlwaGVucy5cbiAqICAgXG4gKiAgRXhhbXBsZTogYGBteS1jbHVzdGVyMWBgXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cbkRCQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIERCIGNsdXN0ZXIgcGFyYW1ldGVyIGdyb3VwIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgREIgY2x1c3Rlci5cbiAqICAgSWYgeW91IGFwcGx5IGEgcGFyYW1ldGVyIGdyb3VwIHRvIGFuIGV4aXN0aW5nIERCIGNsdXN0ZXIsIHRoZW4gaXRzIERCIGluc3RhbmNlcyBtaWdodCBuZWVkIHRvIHJlYm9vdC4gVGhpcyBjYW4gcmVzdWx0IGluIGFuIG91dGFnZSB3aGlsZSB0aGUgREIgaW5zdGFuY2VzIGFyZSByZWJvb3RpbmcuXG4gKiAgSWYgeW91IGFwcGx5IGEgY2hhbmdlIHRvIHBhcmFtZXRlciBncm91cCBhc3NvY2lhdGVkIHdpdGggYSBzdG9wcGVkIERCIGNsdXN0ZXIsIHRoZW4gdGhlIHVwZGF0ZSBzdGFjayB3YWl0cyB1bnRpbCB0aGUgREIgY2x1c3RlciBpcyBzdGFydGVkLlxuICogICBUbyBsaXN0IGFsbCBvZiB0aGUgYXZhaWxhYmxlIERCIGNsdXN0ZXIgcGFyYW1ldGVyIGdyb3VwIG5hbWVzLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOlxuICogICBgYGF3cyByZHMgZGVzY3JpYmUtZGItY2x1c3Rlci1wYXJhbWV0ZXItZ3JvdXBzIC0tcXVlcnkgXCJEQkNsdXN0ZXJQYXJhbWV0ZXJHcm91cHNbXS5EQkNsdXN0ZXJQYXJhbWV0ZXJHcm91cE5hbWVcIiAtLW91dHB1dCB0ZXh0YGAgXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cbkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBBIERCIHN1Ym5ldCBncm91cCB0aGF0IHlvdSB3YW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgREIgY2x1c3Rlci4gXG4gKiAgSWYgeW91IGFyZSByZXN0b3JpbmcgYSBEQiBjbHVzdGVyIHRvIGEgcG9pbnQgaW4gdGltZSB3aXRoIGBgUmVzdG9yZVR5cGVgYCBzZXQgdG8gYGBjb3B5LW9uLXdyaXRlYGAsIGFuZCBkb24ndCBzcGVjaWZ5IGEgREIgc3VibmV0IGdyb3VwIG5hbWUsIHRoZW4gdGhlIERCIGNsdXN0ZXIgaXMgcmVzdG9yZWQgd2l0aCBhIGRlZmF1bHQgREIgc3VibmV0IGdyb3VwLlxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5EQlN1Ym5ldEdyb3VwTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byByZW1vdmUgYXV0b21hdGVkIGJhY2t1cHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIERCIGNsdXN0ZXIgaXMgZGVsZXRlZC4gVGhpcyBwYXJhbWV0ZXIgaXNuJ3QgY2FzZS1zZW5zaXRpdmUuIFRoZSBkZWZhdWx0IGlzIHRvIHJlbW92ZSBhdXRvbWF0ZWQgYmFja3VwcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgREIgY2x1c3RlciBpcyBkZWxldGVkLCB1bmxlc3MgdGhlIEFXUyBCYWNrdXAgcG9saWN5IHNwZWNpZmllcyBhIHBvaW50LWluLXRpbWUgcmVzdG9yZSBydWxlLlxuICovXG5EZWxldGVBdXRvbWF0ZWRCYWNrdXBzPzogYm9vbGVhblxuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIERCIGNsdXN0ZXIgaGFzIGRlbGV0aW9uIHByb3RlY3Rpb24gZW5hYmxlZC4gVGhlIGRhdGFiYXNlIGNhbid0IGJlIGRlbGV0ZWQgd2hlbiBkZWxldGlvbiBwcm90ZWN0aW9uIGlzIGVuYWJsZWQuIEJ5IGRlZmF1bHQsIGRlbGV0aW9uIHByb3RlY3Rpb24gaXMgZGlzYWJsZWQuXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cbkRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW5cbi8qKlxuICogSW5kaWNhdGVzIHRoZSBkaXJlY3RvcnkgSUQgb2YgdGhlIEFjdGl2ZSBEaXJlY3RvcnkgdG8gY3JlYXRlIHRoZSBEQiBjbHVzdGVyLlxuICogIEZvciBBbWF6b24gQXVyb3JhIERCIGNsdXN0ZXJzLCBBbWF6b24gUkRTIGNhbiB1c2UgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gdG8gYXV0aGVudGljYXRlIHVzZXJzIHRoYXQgY29ubmVjdCB0byB0aGUgREIgY2x1c3Rlci5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtLZXJiZXJvcyBhdXRoZW50aWNhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL2tlcmJlcm9zLWF1dGhlbnRpY2F0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBvbmx5XG4gKi9cbkRvbWFpbj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIElBTSByb2xlIHRvIHVzZSB3aGVuIG1ha2luZyBBUEkgY2FsbHMgdG8gdGhlIERpcmVjdG9yeSBTZXJ2aWNlLlxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuRG9tYWluSUFNUm9sZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGxpc3Qgb2YgbG9nIHR5cGVzIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciBleHBvcnRpbmcgdG8gQ2xvdWRXYXRjaCBMb2dzLiBUaGUgdmFsdWVzIGluIHRoZSBsaXN0IGRlcGVuZCBvbiB0aGUgREIgZW5naW5lIGJlaW5nIHVzZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1B1Ymxpc2hpbmcgRGF0YWJhc2UgTG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvVVNFUl9Mb2dBY2Nlc3MuaHRtbCNVU0VSX0xvZ0FjY2Vzcy5Qcm9jZWR1cmFsLlVwbG9hZHRvQ2xvdWRXYXRjaCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICogICAqQXVyb3JhIE15U1FMKiBcbiAqICBWYWxpZCB2YWx1ZXM6IGBgYXVkaXRgYCwgYGBlcnJvcmBgLCBgYGdlbmVyYWxgYCwgYGBzbG93cXVlcnlgYFxuICogICAqQXVyb3JhIFBvc3RncmVTUUwqIFxuICogIFZhbGlkIHZhbHVlczogYGBwb3N0Z3Jlc3FsYGBcbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuRW5hYmxlQ2xvdWR3YXRjaExvZ3NFeHBvcnRzPzogc3RyaW5nW11cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5hYmxlIHRoaXMgREIgY2x1c3RlciB0byBmb3J3YXJkIHdyaXRlIG9wZXJhdGlvbnMgdG8gdGhlIHByaW1hcnkgY2x1c3RlciBvZiBhIGdsb2JhbCBjbHVzdGVyIChBdXJvcmEgZ2xvYmFsIGRhdGFiYXNlKS4gQnkgZGVmYXVsdCwgd3JpdGUgb3BlcmF0aW9ucyBhcmUgbm90IGFsbG93ZWQgb24gQXVyb3JhIERCIGNsdXN0ZXJzIHRoYXQgYXJlIHNlY29uZGFyeSBjbHVzdGVycyBpbiBhbiBBdXJvcmEgZ2xvYmFsIGRhdGFiYXNlLlxuICogIFlvdSBjYW4gc2V0IHRoaXMgdmFsdWUgb25seSBvbiBBdXJvcmEgREIgY2x1c3RlcnMgdGhhdCBhcmUgbWVtYmVycyBvZiBhbiBBdXJvcmEgZ2xvYmFsIGRhdGFiYXNlLiBXaXRoIHRoaXMgcGFyYW1ldGVyIGVuYWJsZWQsIGEgc2Vjb25kYXJ5IGNsdXN0ZXIgY2FuIGZvcndhcmQgd3JpdGVzIHRvIHRoZSBjdXJyZW50IHByaW1hcnkgY2x1c3RlciwgYW5kIHRoZSByZXN1bHRpbmcgY2hhbmdlcyBhcmUgcmVwbGljYXRlZCBiYWNrIHRvIHRoaXMgY2x1c3Rlci4gRm9yIHRoZSBwcmltYXJ5IERCIGNsdXN0ZXIgb2YgYW4gQXVyb3JhIGdsb2JhbCBkYXRhYmFzZSwgdGhpcyB2YWx1ZSBpcyB1c2VkIGltbWVkaWF0ZWx5IGlmIHRoZSBwcmltYXJ5IGlzIGRlbW90ZWQgYnkgYSBnbG9iYWwgY2x1c3RlciBBUEkgb3BlcmF0aW9uLCBidXQgaXQgZG9lcyBub3RoaW5nIHVudGlsIHRoZW4uXG4gKiAgVmFsaWQgZm9yIENsdXN0ZXIgVHlwZTogQXVyb3JhIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuRW5hYmxlR2xvYmFsV3JpdGVGb3J3YXJkaW5nPzogYm9vbGVhblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgdGhlIEhUVFAgZW5kcG9pbnQgZm9yIHRoZSBEQiBjbHVzdGVyLiBCeSBkZWZhdWx0LCB0aGUgSFRUUCBlbmRwb2ludCBpc24ndCBlbmFibGVkLlxuICogIFdoZW4gZW5hYmxlZCwgdGhlIEhUVFAgZW5kcG9pbnQgcHJvdmlkZXMgYSBjb25uZWN0aW9ubGVzcyB3ZWIgc2VydmljZSBBUEkgKFJEUyBEYXRhIEFQSSkgZm9yIHJ1bm5pbmcgU1FMIHF1ZXJpZXMgb24gdGhlIERCIGNsdXN0ZXIuIFlvdSBjYW4gYWxzbyBxdWVyeSB5b3VyIGRhdGFiYXNlIGZyb20gaW5zaWRlIHRoZSBSRFMgY29uc29sZSB3aXRoIHRoZSBSRFMgcXVlcnkgZWRpdG9yLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIFJEUyBEYXRhIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL2RhdGEtYXBpLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBBdXJvcmEgREIgY2x1c3RlcnMgb25seVxuICovXG5FbmFibGVIdHRwRW5kcG9pbnQ/OiBib29sZWFuXG4vKipcbiAqIEEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0byBlbmFibGUgbWFwcGluZyBvZiBBV1MgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIGFjY291bnRzIHRvIGRhdGFiYXNlIGFjY291bnRzLiBCeSBkZWZhdWx0LCBtYXBwaW5nIGlzIGRpc2FibGVkLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0lBTSBEYXRhYmFzZSBBdXRoZW50aWNhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL1VzaW5nV2l0aFJEUy5JQU1EQkF1dGguaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUuKlxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuRW5hYmxlSUFNRGF0YWJhc2VBdXRoZW50aWNhdGlvbj86IGJvb2xlYW5cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgcmVhZCByZXBsaWNhcyBjYW4gZm9yd2FyZCB3cml0ZSBvcGVyYXRpb25zIHRvIHRoZSB3cml0ZXIgREIgaW5zdGFuY2UgaW4gdGhlIERCIGNsdXN0ZXIuIEJ5IGRlZmF1bHQsIHdyaXRlIG9wZXJhdGlvbnMgYXJlbid0IGFsbG93ZWQgb24gcmVhZGVyIERCIGluc3RhbmNlcy5cbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBvbmx5XG4gKi9cbkVuYWJsZUxvY2FsV3JpdGVGb3J3YXJkaW5nPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgZW5naW5lIHRvIGJlIHVzZWQgZm9yIHRoaXMgREIgY2x1c3Rlci5cbiAqICBWYWxpZCBWYWx1ZXM6XG4gKiAgICsgICBgYGF1cm9yYS1teXNxbGBgIFxuICogICArICAgYGBhdXJvcmEtcG9zdGdyZXNxbGBgIFxuICogICArICAgYGBteXNxbGBgIFxuICogICArICAgYGBwb3N0Z3Jlc2BgIFxuICogICBcbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuRW5naW5lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBsaWZlIGN5Y2xlIHR5cGUgZm9yIHRoaXMgREIgY2x1c3Rlci5cbiAqICAgQnkgZGVmYXVsdCwgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gYGBvcGVuLXNvdXJjZS1yZHMtZXh0ZW5kZWQtc3VwcG9ydGBgLCB3aGljaCBlbnJvbGxzIHlvdXIgREIgY2x1c3RlciBpbnRvIEFtYXpvbiBSRFMgRXh0ZW5kZWQgU3VwcG9ydC4gQXQgdGhlIGVuZCBvZiBzdGFuZGFyZCBzdXBwb3J0LCB5b3UgY2FuIGF2b2lkIGNoYXJnZXMgZm9yIEV4dGVuZGVkIFN1cHBvcnQgYnkgc2V0dGluZyB0aGUgdmFsdWUgdG8gYGBvcGVuLXNvdXJjZS1yZHMtZXh0ZW5kZWQtc3VwcG9ydC1kaXNhYmxlZGBgLiBJbiB0aGlzIGNhc2UsIGNyZWF0aW5nIHRoZSBEQiBjbHVzdGVyIHdpbGwgZmFpbCBpZiB0aGUgREIgbWFqb3IgdmVyc2lvbiBpcyBwYXN0IGl0cyBlbmQgb2Ygc3RhbmRhcmQgc3VwcG9ydCBkYXRlLlxuICogICBZb3UgY2FuIHVzZSB0aGlzIHNldHRpbmcgdG8gZW5yb2xsIHlvdXIgREIgY2x1c3RlciBpbnRvIEFtYXpvbiBSRFMgRXh0ZW5kZWQgU3VwcG9ydC4gV2l0aCBSRFMgRXh0ZW5kZWQgU3VwcG9ydCwgeW91IGNhbiBydW4gdGhlIHNlbGVjdGVkIG1ham9yIGVuZ2luZSB2ZXJzaW9uIG9uIHlvdXIgREIgY2x1c3RlciBwYXN0IHRoZSBlbmQgb2Ygc3RhbmRhcmQgc3VwcG9ydCBmb3IgdGhhdCBlbmdpbmUgdmVyc2lvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOlxuICogICArICBBbWF6b24gQXVyb3JhIC0gW0FtYXpvbiBSRFMgRXh0ZW5kZWQgU3VwcG9ydCB3aXRoIEFtYXpvbiBBdXJvcmFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9leHRlbmRlZC1zdXBwb3J0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKlxuICogICArICBBbWF6b24gUkRTIC0gW0FtYXpvbiBSRFMgRXh0ZW5kZWQgU3VwcG9ydCB3aXRoIEFtYXpvbiBSRFNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9leHRlbmRlZC1zdXBwb3J0Lmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKlxuICogICBcbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKiAgVmFsaWQgVmFsdWVzOiBgYG9wZW4tc291cmNlLXJkcy1leHRlbmRlZC1zdXBwb3J0IHwgb3Blbi1zb3VyY2UtcmRzLWV4dGVuZGVkLXN1cHBvcnQtZGlzYWJsZWRgYFxuICogIERlZmF1bHQ6IGBgb3Blbi1zb3VyY2UtcmRzLWV4dGVuZGVkLXN1cHBvcnRgYFxuICovXG5FbmdpbmVMaWZlY3ljbGVTdXBwb3J0Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBEQiBlbmdpbmUgbW9kZSBvZiB0aGUgREIgY2x1c3RlciwgZWl0aGVyIGBgcHJvdmlzaW9uZWRgYCBvciBgYHNlcnZlcmxlc3NgYC5cbiAqICBUaGUgYGBzZXJ2ZXJsZXNzYGAgZW5naW5lIG1vZGUgb25seSBhcHBsaWVzIGZvciBBdXJvcmEgU2VydmVybGVzcyB2MSBEQiBjbHVzdGVycy4gQXVyb3JhIFNlcnZlcmxlc3MgdjIgREIgY2x1c3RlcnMgdXNlIHRoZSBgYHByb3Zpc2lvbmVkYGAgZW5naW5lIG1vZGUuXG4gKiAgRm9yIGluZm9ybWF0aW9uIGFib3V0IGxpbWl0YXRpb25zIGFuZCByZXF1aXJlbWVudHMgZm9yIFNlcnZlcmxlc3MgREIgY2x1c3RlcnMsIHNlZSB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKjpcbiAqICAgKyAgIFtMaW1pdGF0aW9ucyBvZiBBdXJvcmEgU2VydmVybGVzcyB2MV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL2F1cm9yYS1zZXJ2ZXJsZXNzLmh0bWwjYXVyb3JhLXNlcnZlcmxlc3MubGltaXRhdGlvbnMpIFxuICogICArICAgW1JlcXVpcmVtZW50cyBmb3IgQXVyb3JhIFNlcnZlcmxlc3MgdjJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9hdXJvcmEtc2VydmVybGVzcy12Mi5yZXF1aXJlbWVudHMuaHRtbCkgXG4gKiAgIFxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBEQiBjbHVzdGVycyBvbmx5XG4gKi9cbkVuZ2luZU1vZGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBkYXRhYmFzZSBlbmdpbmUgdG8gdXNlLlxuICogIFRvIGxpc3QgYWxsIG9mIHRoZSBhdmFpbGFibGUgZW5naW5lIHZlcnNpb25zIGZvciBBdXJvcmEgTXlTUUwgdmVyc2lvbiAyICg1LjctY29tcGF0aWJsZSkgYW5kIHZlcnNpb24gMyAoOC4wLWNvbXBhdGlibGUpLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOlxuICogICBgYGF3cyByZHMgZGVzY3JpYmUtZGItZW5naW5lLXZlcnNpb25zIC0tZW5naW5lIGF1cm9yYS1teXNxbCAtLXF1ZXJ5IFwiREJFbmdpbmVWZXJzaW9uc1tdLkVuZ2luZVZlcnNpb25cImBgIFxuICogIFlvdSBjYW4gc3VwcGx5IGVpdGhlciBgYDUuN2BgIG9yIGBgOC4wYGAgdG8gdXNlIHRoZSBkZWZhdWx0IGVuZ2luZSB2ZXJzaW9uIGZvciBBdXJvcmEgTXlTUUwgdmVyc2lvbiAyIG9yIHZlcnNpb24gMywgcmVzcGVjdGl2ZWx5LlxuICogIFRvIGxpc3QgYWxsIG9mIHRoZSBhdmFpbGFibGUgZW5naW5lIHZlcnNpb25zIGZvciBBdXJvcmEgUG9zdGdyZVNRTCwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAqICAgYGBhd3MgcmRzIGRlc2NyaWJlLWRiLWVuZ2luZS12ZXJzaW9ucyAtLWVuZ2luZSBhdXJvcmEtcG9zdGdyZXNxbCAtLXF1ZXJ5IFwiREJFbmdpbmVWZXJzaW9uc1tdLkVuZ2luZVZlcnNpb25cImBgIFxuICogIFRvIGxpc3QgYWxsIG9mIHRoZSBhdmFpbGFibGUgZW5naW5lIHZlcnNpb25zIGZvciBSRFMgZm9yIE15U1FMLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOlxuICogICBgYGF3cyByZHMgZGVzY3JpYmUtZGItZW5naW5lLXZlcnNpb25zIC0tZW5naW5lIG15c3FsIC0tcXVlcnkgXCJEQkVuZ2luZVZlcnNpb25zW10uRW5naW5lVmVyc2lvblwiYGAgXG4gKiAgVG8gbGlzdCBhbGwgb2YgdGhlIGF2YWlsYWJsZSBlbmdpbmUgdmVyc2lvbnMgZm9yIFJEUyBmb3IgUG9zdGdyZVNRTCwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAqICAgYGBhd3MgcmRzIGRlc2NyaWJlLWRiLWVuZ2luZS12ZXJzaW9ucyAtLWVuZ2luZSBwb3N0Z3JlcyAtLXF1ZXJ5IFwiREJFbmdpbmVWZXJzaW9uc1tdLkVuZ2luZVZlcnNpb25cImBgIFxuICogICAqQXVyb3JhIE15U1FMKiBcbiAqICBGb3IgaW5mb3JtYXRpb24sIHNlZSBbRGF0YWJhc2UgZW5naW5lIHVwZGF0ZXMgZm9yIEFtYXpvbiBBdXJvcmEgTXlTUUxdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9BdXJvcmFNeVNRTC5VcGRhdGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICAgKkF1cm9yYSBQb3N0Z3JlU1FMKiBcbiAqICBGb3IgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEF1cm9yYSBQb3N0Z3JlU1FMIHJlbGVhc2VzIGFuZCBlbmdpbmUgdmVyc2lvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9BdXJvcmFQb3N0Z3JlU1FMLlVwZGF0ZXMuMjAxODAzMDUuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICogICAqTXlTUUwqIFxuICogIEZvciBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gUkRTIGZvciBNeVNRTF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfTXlTUUwuaHRtbCNNeVNRTC5Db25jZXB0cy5WZXJzaW9uTWdtdCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogICAqUG9zdGdyZVNRTCogXG4gKiAgRm9yIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBSRFMgZm9yIFBvc3RncmVTUUxdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX1Bvc3RncmVTUUwuaHRtbCNQb3N0Z3JlU1FMLkNvbmNlcHRzKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cbkVuZ2luZVZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gbWFuYWdlIHRoZSBtYXN0ZXIgdXNlciBwYXNzd29yZCB3aXRoIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUGFzc3dvcmQgbWFuYWdlbWVudCB3aXRoIFNlY3JldHMgTWFuYWdlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL3Jkcy1zZWNyZXRzLW1hbmFnZXIuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqIGFuZCBbUGFzc3dvcmQgbWFuYWdlbWVudCB3aXRoIFNlY3JldHMgTWFuYWdlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL3Jkcy1zZWNyZXRzLW1hbmFnZXIuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUuKlxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgQ2FuJ3QgbWFuYWdlIHRoZSBtYXN0ZXIgdXNlciBwYXNzd29yZCB3aXRoIEFXUyBTZWNyZXRzIE1hbmFnZXIgaWYgYGBNYXN0ZXJVc2VyUGFzc3dvcmRgYCBpcyBzcGVjaWZpZWQuXG4gKi9cbk1hbmFnZU1hc3RlclVzZXJQYXNzd29yZD86IGJvb2xlYW5cbi8qKlxuICogVGhlIGFtb3VudCBvZiBQcm92aXNpb25lZCBJT1BTIChpbnB1dC9vdXRwdXQgb3BlcmF0aW9ucyBwZXIgc2Vjb25kKSB0byBiZSBpbml0aWFsbHkgYWxsb2NhdGVkIGZvciBlYWNoIERCIGluc3RhbmNlIGluIHRoZSBNdWx0aS1BWiBEQiBjbHVzdGVyLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCB2YWxpZCBJT1BTIHZhbHVlcywgc2VlIFtQcm92aXNpb25lZCBJT1BTIHN0b3JhZ2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX1N0b3JhZ2UuaHRtbCNVU0VSX1BJT1BTKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVGhpcyBzZXR0aW5nIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIE11bHRpLUFaIERCIGNsdXN0ZXIuXG4gKiAgVmFsaWQgZm9yIENsdXN0ZXIgVHlwZTogTXVsdGktQVogREIgY2x1c3RlcnMgb25seVxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIGEgbXVsdGlwbGUgYmV0d2VlbiAuNSBhbmQgNTAgb2YgdGhlIHN0b3JhZ2UgYW1vdW50IGZvciB0aGUgREIgY2x1c3Rlci5cbiAqL1xuSW9wcz86IG51bWJlclxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEFXUyBLTVMga2V5IHRoYXQgaXMgdXNlZCB0byBlbmNyeXB0IHRoZSBkYXRhYmFzZSBpbnN0YW5jZXMgaW4gdGhlIERCIGNsdXN0ZXIsIHN1Y2ggYXMgYGBhcm46YXdzOmttczp1cy1lYXN0LTE6MDEyMzQ1Njc4OTEwOmtleS9hYmNkMTIzNC1hMTIzLTQ1NmEtYTEyYi1hMTIzYjRjZDU2ZWZgYC4gSWYgeW91IGVuYWJsZSB0aGUgYGBTdG9yYWdlRW5jcnlwdGVkYGAgcHJvcGVydHkgYnV0IGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSwgdGhlIGRlZmF1bHQgS01TIGtleSBpcyB1c2VkLiBJZiB5b3Ugc3BlY2lmeSB0aGlzIHByb3BlcnR5LCB5b3UgbXVzdCBzZXQgdGhlIGBgU3RvcmFnZUVuY3J5cHRlZGBgIHByb3BlcnR5IHRvIGBgdHJ1ZWBgLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCB0aGUgYGBTdG9yYWdlRW5jcnlwdGVkYGAgcHJvcGVydHkgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNuYXBzaG90LCBhbmQgaWYgdGhlIERCIGNsdXN0ZXIgaXMgZW5jcnlwdGVkLCB0aGUgc3BlY2lmaWVkIGBgS21zS2V5SWRgYCBwcm9wZXJ0eSBpcyB1c2VkLlxuICogIElmIHlvdSBjcmVhdGUgYSByZWFkIHJlcGxpY2Egb2YgYW4gZW5jcnlwdGVkIERCIGNsdXN0ZXIgaW4gYW5vdGhlciBBV1MgUmVnaW9uLCBtYWtlIHN1cmUgdG8gc2V0IGBgS21zS2V5SWRgYCB0byBhIEtNUyBrZXkgaWRlbnRpZmllciB0aGF0IGlzIHZhbGlkIGluIHRoZSBkZXN0aW5hdGlvbiBBV1MgUmVnaW9uLiBUaGlzIEtNUyBrZXkgaXMgdXNlZCB0byBlbmNyeXB0IHRoZSByZWFkIHJlcGxpY2EgaW4gdGhhdCBBV1MgUmVnaW9uLlxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5LbXNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWFzdGVyIHVzZXIgZm9yIHRoZSBEQiBjbHVzdGVyLlxuICogICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBTb3VyY2VEQkNsdXN0ZXJJZGVudGlmaWVyYGAsIGBgU25hcHNob3RJZGVudGlmaWVyYGAsIG9yIGBgR2xvYmFsQ2x1c3RlcklkZW50aWZpZXJgYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNvdXJjZSBEQiBjbHVzdGVyLCB0aGUgc25hcHNob3QsIG9yIHRoZSBwcmltYXJ5IERCIGNsdXN0ZXIgZm9yIHRoZSBnbG9iYWwgZGF0YWJhc2UgY2x1c3RlciwgcmVzcGVjdGl2ZWx5LlxuICogICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuTWFzdGVyVXNlcm5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG1hc3RlciBwYXNzd29yZCBmb3IgdGhlIERCIGluc3RhbmNlLlxuICogICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBTb3VyY2VEQkNsdXN0ZXJJZGVudGlmaWVyYGAsIGBgU25hcHNob3RJZGVudGlmaWVyYGAsIG9yIGBgR2xvYmFsQ2x1c3RlcklkZW50aWZpZXJgYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNvdXJjZSBEQiBjbHVzdGVyLCB0aGUgc25hcHNob3QsIG9yIHRoZSBwcmltYXJ5IERCIGNsdXN0ZXIgZm9yIHRoZSBnbG9iYWwgZGF0YWJhc2UgY2x1c3RlciwgcmVzcGVjdGl2ZWx5LlxuICogICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuTWFzdGVyVXNlclBhc3N3b3JkPzogc3RyaW5nXG5NYXN0ZXJVc2VyU2VjcmV0PzogTWFzdGVyVXNlclNlY3JldFxuLyoqXG4gKiBUaGUgaW50ZXJ2YWwsIGluIHNlY29uZHMsIGJldHdlZW4gcG9pbnRzIHdoZW4gRW5oYW5jZWQgTW9uaXRvcmluZyBtZXRyaWNzIGFyZSBjb2xsZWN0ZWQgZm9yIHRoZSBEQiBjbHVzdGVyLiBUbyB0dXJuIG9mZiBjb2xsZWN0aW5nIEVuaGFuY2VkIE1vbml0b3JpbmcgbWV0cmljcywgc3BlY2lmeSBgYDBgYC5cbiAqICBJZiBgYE1vbml0b3JpbmdSb2xlQXJuYGAgaXMgc3BlY2lmaWVkLCBhbHNvIHNldCBgYE1vbml0b3JpbmdJbnRlcnZhbGBgIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgYDBgYC5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKiAgVmFsaWQgVmFsdWVzOiBgYDAgfCAxIHwgNSB8IDEwIHwgMTUgfCAzMCB8IDYwYGBcbiAqICBEZWZhdWx0OiBgYDBgYFxuICovXG5Nb25pdG9yaW5nSW50ZXJ2YWw/OiBudW1iZXJcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIGZvciB0aGUgSUFNIHJvbGUgdGhhdCBwZXJtaXRzIFJEUyB0byBzZW5kIEVuaGFuY2VkIE1vbml0b3JpbmcgbWV0cmljcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzLiBBbiBleGFtcGxlIGlzIGBgYXJuOmF3czppYW06MTIzNDU2Nzg5MDEyOnJvbGUvZW1hY2Nlc3NgYC4gRm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIGEgbW9uaXRvcmluZyByb2xlLCBzZWUgW1NldHRpbmcgdXAgYW5kIGVuYWJsaW5nIEVuaGFuY2VkIE1vbml0b3JpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX01vbml0b3JpbmcuT1MuaHRtbCNVU0VSX01vbml0b3JpbmcuT1MuRW5hYmxpbmcpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBJZiBgYE1vbml0b3JpbmdJbnRlcnZhbGBgIGlzIHNldCB0byBhIHZhbHVlIG90aGVyIHRoYW4gYGAwYGAsIHN1cHBseSBhIGBgTW9uaXRvcmluZ1JvbGVBcm5gYCB2YWx1ZS5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cbk1vbml0b3JpbmdSb2xlQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuZXR3b3JrIHR5cGUgb2YgdGhlIERCIGNsdXN0ZXIuXG4gKiAgVmFsaWQgdmFsdWVzOlxuICogICArICAgYGBJUFY0YGAgXG4gKiAgICsgICBgYERVQUxgYCBcbiAqICAgXG4gKiAgVGhlIG5ldHdvcmsgdHlwZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBgYERCU3VibmV0R3JvdXBgYCBzcGVjaWZpZWQgZm9yIHRoZSBEQiBjbHVzdGVyLiBBIGBgREJTdWJuZXRHcm91cGBgIGNhbiBzdXBwb3J0IG9ubHkgdGhlIElQdjQgcHJvdG9jb2wgb3IgdGhlIElQdjQgYW5kIElQdjYgcHJvdG9jb2xzIChgYERVQUxgYCkuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbV29ya2luZyB3aXRoIGEgREIgaW5zdGFuY2UgaW4gYSBWUENdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9VU0VSX1ZQQy5Xb3JraW5nV2l0aFJEU0luc3RhbmNlaW5hVlBDLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlLipcbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBvbmx5XG4gKi9cbk5ldHdvcmtUeXBlPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHR1cm4gb24gUGVyZm9ybWFuY2UgSW5zaWdodHMgZm9yIHRoZSBEQiBjbHVzdGVyLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIEFtYXpvbiBQZXJmb3JtYW5jZSBJbnNpZ2h0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfUGVyZkluc2lnaHRzLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cblBlcmZvcm1hbmNlSW5zaWdodHNFbmFibGVkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgQVdTIEtNUyBrZXkgaWRlbnRpZmllciBmb3IgZW5jcnlwdGlvbiBvZiBQZXJmb3JtYW5jZSBJbnNpZ2h0cyBkYXRhLlxuICogIFRoZSBBV1MgS01TIGtleSBpZGVudGlmaWVyIGlzIHRoZSBrZXkgQVJOLCBrZXkgSUQsIGFsaWFzIEFSTiwgb3IgYWxpYXMgbmFtZSBmb3IgdGhlIEtNUyBrZXkuXG4gKiAgSWYgeW91IGRvbid0IHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBQZXJmb3JtYW5jZUluc2lnaHRzS01TS2V5SWRgYCwgdGhlbiBBbWF6b24gUkRTIHVzZXMgeW91ciBkZWZhdWx0IEtNUyBrZXkuIFRoZXJlIGlzIGEgZGVmYXVsdCBLTVMga2V5IGZvciB5b3VyIEFXUy1hY2NvdW50LiBZb3VyIEFXUy1hY2NvdW50IGhhcyBhIGRpZmZlcmVudCBkZWZhdWx0IEtNUyBrZXkgZm9yIGVhY2ggQVdTLVJlZ2lvbi5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cblBlcmZvcm1hbmNlSW5zaWdodHNLbXNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGRheXMgdG8gcmV0YWluIFBlcmZvcm1hbmNlIEluc2lnaHRzIGRhdGEuIFdoZW4gY3JlYXRpbmcgYSBEQiBjbHVzdGVyIHdpdGhvdXQgZW5hYmxpbmcgUGVyZm9ybWFuY2UgSW5zaWdodHMsIHlvdSBjYW4ndCBzcGVjaWZ5IHRoZSBwYXJhbWV0ZXIgYGBQZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uUGVyaW9kYGAuXG4gKiAgVmFsaWQgZm9yIENsdXN0ZXIgVHlwZTogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICogIFZhbGlkIFZhbHVlczpcbiAqICAgKyAgIGBgN2BgIFxuICogICArICAqbW9udGgqICogMzEsIHdoZXJlICptb250aCogaXMgYSBudW1iZXIgb2YgbW9udGhzIGZyb20gMS0yMy4gRXhhbXBsZXM6IGBgOTNgYCAoMyBtb250aHMgKiAzMSksIGBgMzQxYGAgKDExIG1vbnRocyAqIDMxKSwgYGA1ODlgYCAoMTkgbW9udGhzICogMzEpXG4gKiAgICsgICBgYDczMWBgIFxuICogICBcbiAqICBEZWZhdWx0OiBgYDdgYCBkYXlzXG4gKiAgSWYgeW91IHNwZWNpZnkgYSByZXRlbnRpb24gcGVyaW9kIHRoYXQgaXNuJ3QgdmFsaWQsIHN1Y2ggYXMgYGA5NGBgLCBBbWF6b24gUkRTIGlzc3VlcyBhbiBlcnJvci5cbiAqL1xuUGVyZm9ybWFuY2VJbnNpZ2h0c1JldGVudGlvblBlcmlvZD86IG51bWJlclxuLyoqXG4gKiBUaGUgcG9ydCBudW1iZXIgb24gd2hpY2ggdGhlIERCIGluc3RhbmNlcyBpbiB0aGUgREIgY2x1c3RlciBhY2NlcHQgY29ubmVjdGlvbnMuXG4gKiAgRGVmYXVsdDpcbiAqICAgKyAgV2hlbiBgYEVuZ2luZU1vZGVgYCBpcyBgYHByb3Zpc2lvbmVkYGAsIGBgMzMwNmBgIChmb3IgYm90aCBBdXJvcmEgTXlTUUwgYW5kIEF1cm9yYSBQb3N0Z3JlU1FMKVxuICogICArICBXaGVuIGBgRW5naW5lTW9kZWBgIGlzIGBgc2VydmVybGVzc2BgOlxuICogICArICBgYDMzMDZgYCB3aGVuIGBgRW5naW5lYGAgaXMgYGBhdXJvcmFgYCBvciBgYGF1cm9yYS1teXNxbGBgXG4gKiAgICsgIGBgNTQzMmBgIHdoZW4gYGBFbmdpbmVgYCBpcyBgYGF1cm9yYS1wb3N0Z3Jlc3FsYGBcbiAqICAgXG4gKiAgIFxuICogICBUaGUgYGBObyBpbnRlcnJ1cHRpb25gYCBvbiB1cGRhdGUgYmVoYXZpb3Igb25seSBhcHBsaWVzIHRvIERCIGNsdXN0ZXJzLiBJZiB5b3UgYXJlIHVwZGF0aW5nIGEgREIgaW5zdGFuY2UsIHNlZSBbUG9ydF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmRzLWRhdGFiYXNlLWluc3RhbmNlLmh0bWwjY2ZuLXJkcy1kYmluc3RhbmNlLXBvcnQpIGZvciB0aGUgQVdTOjpSRFM6OkRCSW5zdGFuY2UgcmVzb3VyY2UuXG4gKiAgIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5Qb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBkYWlseSB0aW1lIHJhbmdlIGR1cmluZyB3aGljaCBhdXRvbWF0ZWQgYmFja3VwcyBhcmUgY3JlYXRlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQmFja3VwIFdpbmRvd10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL0F1cm9yYS5NYW5hZ2luZy5CYWNrdXBzLmh0bWwjQXVyb3JhLk1hbmFnaW5nLkJhY2t1cHMuQmFja3VwV2luZG93KSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZS4qXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgaW4gdGhlIGZvcm1hdCBgYGhoMjQ6bWktaGgyNDptaWBgLlxuICogICArICBNdXN0IGJlIGluIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lIChVVEMpLlxuICogICArICBNdXN0IG5vdCBjb25mbGljdCB3aXRoIHRoZSBwcmVmZXJyZWQgbWFpbnRlbmFuY2Ugd2luZG93LlxuICogICArICBNdXN0IGJlIGF0IGxlYXN0IDMwIG1pbnV0ZXMuXG4gKiAgIFxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5QcmVmZXJyZWRCYWNrdXBXaW5kb3c/OiBzdHJpbmdcbi8qKlxuICogVGhlIHdlZWtseSB0aW1lIHJhbmdlIGR1cmluZyB3aGljaCBzeXN0ZW0gbWFpbnRlbmFuY2UgY2FuIG9jY3VyLCBpbiBVbml2ZXJzYWwgQ29vcmRpbmF0ZWQgVGltZSAoVVRDKS5cbiAqICBGb3JtYXQ6IGBgZGRkOmhoMjQ6bWktZGRkOmhoMjQ6bWlgYFxuICogIFRoZSBkZWZhdWx0IGlzIGEgMzAtbWludXRlIHdpbmRvdyBzZWxlY3RlZCBhdCByYW5kb20gZnJvbSBhbiA4LWhvdXIgYmxvY2sgb2YgdGltZSBmb3IgZWFjaCBBV1MgUmVnaW9uLCBvY2N1cnJpbmcgb24gYSByYW5kb20gZGF5IG9mIHRoZSB3ZWVrLiBUbyBzZWUgdGhlIHRpbWUgYmxvY2tzIGF2YWlsYWJsZSwgc2VlIFtNYWludGFpbmluZyBhbiBBbWF6b24gQXVyb3JhIERCIGNsdXN0ZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9VU0VSX1VwZ3JhZGVEQkluc3RhbmNlLk1haW50ZW5hbmNlLmh0bWwjQWRqdXN0aW5nVGhlTWFpbnRlbmFuY2VXaW5kb3cuQXVyb3JhKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZS4qXG4gKiAgVmFsaWQgRGF5czogTW9uLCBUdWUsIFdlZCwgVGh1LCBGcmksIFNhdCwgU3VuLlxuICogIENvbnN0cmFpbnRzOiBNaW5pbXVtIDMwLW1pbnV0ZSB3aW5kb3cuXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cblByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93Pzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBEQiBjbHVzdGVyIGlzIHB1YmxpY2x5IGFjY2Vzc2libGUuXG4gKiAgV2hlbiB0aGUgREIgY2x1c3RlciBpcyBwdWJsaWNseSBhY2Nlc3NpYmxlIGFuZCB5b3UgY29ubmVjdCBmcm9tIG91dHNpZGUgb2YgdGhlIERCIGNsdXN0ZXIncyB2aXJ0dWFsIHByaXZhdGUgY2xvdWQgKFZQQyksIGl0cyBEb21haW4gTmFtZSBTeXN0ZW0gKEROUykgZW5kcG9pbnQgcmVzb2x2ZXMgdG8gdGhlIHB1YmxpYyBJUCBhZGRyZXNzLiBXaGVuIHlvdSBjb25uZWN0IGZyb20gd2l0aGluIHRoZSBzYW1lIFZQQyBhcyB0aGUgREIgY2x1c3RlciwgdGhlIGVuZHBvaW50IHJlc29sdmVzIHRvIHRoZSBwcml2YXRlIElQIGFkZHJlc3MuIEFjY2VzcyB0byB0aGUgREIgY2x1c3RlciBpcyB1bHRpbWF0ZWx5IGNvbnRyb2xsZWQgYnkgdGhlIHNlY3VyaXR5IGdyb3VwIGl0IHVzZXMuIFRoYXQgcHVibGljIGFjY2VzcyBpc24ndCBwZXJtaXR0ZWQgaWYgdGhlIHNlY3VyaXR5IGdyb3VwIGFzc2lnbmVkIHRvIHRoZSBEQiBjbHVzdGVyIGRvZXNuJ3QgcGVybWl0IGl0LlxuICogIFdoZW4gdGhlIERCIGNsdXN0ZXIgaXNuJ3QgcHVibGljbHkgYWNjZXNzaWJsZSwgaXQgaXMgYW4gaW50ZXJuYWwgREIgY2x1c3RlciB3aXRoIGEgRE5TIG5hbWUgdGhhdCByZXNvbHZlcyB0byBhIHByaXZhdGUgSVAgYWRkcmVzcy5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBNdWx0aS1BWiBEQiBjbHVzdGVycyBvbmx5XG4gKiAgRGVmYXVsdDogVGhlIGRlZmF1bHQgYmVoYXZpb3IgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGV0aGVyIGBgREJTdWJuZXRHcm91cE5hbWVgYCBpcyBzcGVjaWZpZWQuXG4gKiAgSWYgYGBEQlN1Ym5ldEdyb3VwTmFtZWBgIGlzbid0IHNwZWNpZmllZCwgYW5kIGBgUHVibGljbHlBY2Nlc3NpYmxlYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgZm9sbG93aW5nIGFwcGxpZXM6XG4gKiAgICsgIElmIHRoZSBkZWZhdWx0IFZQQyBpbiB0aGUgdGFyZ2V0IFJlZ2lvbiBkb2VzbuKAmXQgaGF2ZSBhbiBpbnRlcm5ldCBnYXRld2F5IGF0dGFjaGVkIHRvIGl0LCB0aGUgREIgY2x1c3RlciBpcyBwcml2YXRlLlxuICogICArICBJZiB0aGUgZGVmYXVsdCBWUEMgaW4gdGhlIHRhcmdldCBSZWdpb24gaGFzIGFuIGludGVybmV0IGdhdGV3YXkgYXR0YWNoZWQgdG8gaXQsIHRoZSBEQiBjbHVzdGVyIGlzIHB1YmxpYy5cbiAqICAgXG4gKiAgSWYgYGBEQlN1Ym5ldEdyb3VwTmFtZWBgIGlzIHNwZWNpZmllZCwgYW5kIGBgUHVibGljbHlBY2Nlc3NpYmxlYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgZm9sbG93aW5nIGFwcGxpZXM6XG4gKiAgICsgIElmIHRoZSBzdWJuZXRzIGFyZSBwYXJ0IG9mIGEgVlBDIHRoYXQgZG9lc27igJl0IGhhdmUgYW4gaW50ZXJuZXQgZ2F0ZXdheSBhdHRhY2hlZCB0byBpdCwgdGhlIERCIGNsdXN0ZXIgaXMgcHJpdmF0ZS5cbiAqICAgKyAgSWYgdGhlIHN1Ym5ldHMgYXJlIHBhcnQgb2YgYSBWUEMgdGhhdCBoYXMgYW4gaW50ZXJuZXQgZ2F0ZXdheSBhdHRhY2hlZCB0byBpdCwgdGhlIERCIGNsdXN0ZXIgaXMgcHVibGljLlxuICovXG5QdWJsaWNseUFjY2Vzc2libGU/OiBib29sZWFuXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc291cmNlIERCIGluc3RhbmNlIG9yIERCIGNsdXN0ZXIgaWYgdGhpcyBEQiBjbHVzdGVyIGlzIGNyZWF0ZWQgYXMgYSByZWFkIHJlcGxpY2EuXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgb25seVxuICovXG5SZXBsaWNhdGlvblNvdXJjZUlkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlIGRhdGUgYW5kIHRpbWUgdG8gcmVzdG9yZSB0aGUgREIgY2x1c3RlciB0by5cbiAqICBWYWxpZCBWYWx1ZXM6IFZhbHVlIG11c3QgYmUgYSB0aW1lIGluIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lIChVVEMpIGZvcm1hdFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIGJlZm9yZSB0aGUgbGF0ZXN0IHJlc3RvcmFibGUgdGltZSBmb3IgdGhlIERCIGluc3RhbmNlXG4gKiAgICsgIE11c3QgYmUgc3BlY2lmaWVkIGlmIGBgVXNlTGF0ZXN0UmVzdG9yYWJsZVRpbWVgYCBwYXJhbWV0ZXIgaXNuJ3QgcHJvdmlkZWRcbiAqICAgKyAgQ2FuJ3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYFVzZUxhdGVzdFJlc3RvcmFibGVUaW1lYGAgcGFyYW1ldGVyIGlzIGVuYWJsZWRcbiAqICAgKyAgQ2FuJ3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYFJlc3RvcmVUeXBlYGAgcGFyYW1ldGVyIGlzIGBgY29weS1vbi13cml0ZWBgXG4gKiAgIFxuICogIFRoaXMgcHJvcGVydHkgbXVzdCBiZSB1c2VkIHdpdGggYGBTb3VyY2VEQkNsdXN0ZXJJZGVudGlmaWVyYGAgcHJvcGVydHkuIFRoZSByZXN1bHRpbmcgY2x1c3RlciB3aWxsIGhhdmUgdGhlIGlkZW50aWZpZXIgdGhhdCBtYXRjaGVzIHRoZSB2YWx1ZSBvZiB0aGUgYGBEQmNsdXN0ZXJJZGVudGlmaWVyYGAgcHJvcGVydHkuXG4gKiAgRXhhbXBsZTogYGAyMDE1LTAzLTA3VDIzOjQ1OjAwWmBgXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cblJlc3RvcmVUb1RpbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgcmVzdG9yZSB0byBiZSBwZXJmb3JtZWQuIFlvdSBjYW4gc3BlY2lmeSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gKiAgICsgIGBgZnVsbC1jb3B5YGAgLSBUaGUgbmV3IERCIGNsdXN0ZXIgaXMgcmVzdG9yZWQgYXMgYSBmdWxsIGNvcHkgb2YgdGhlIHNvdXJjZSBEQiBjbHVzdGVyLlxuICogICArICBgYGNvcHktb24td3JpdGVgYCAtIFRoZSBuZXcgREIgY2x1c3RlciBpcyByZXN0b3JlZCBhcyBhIGNsb25lIG9mIHRoZSBzb3VyY2UgREIgY2x1c3Rlci5cbiAqICAgXG4gKiAgSWYgeW91IGRvbid0IHNwZWNpZnkgYSBgYFJlc3RvcmVUeXBlYGAgdmFsdWUsIHRoZW4gdGhlIG5ldyBEQiBjbHVzdGVyIGlzIHJlc3RvcmVkIGFzIGEgZnVsbCBjb3B5IG9mIHRoZSBzb3VyY2UgREIgY2x1c3Rlci5cbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuUmVzdG9yZVR5cGU/OiBzdHJpbmdcblNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uPzogU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb25cblNjYWxpbmdDb25maWd1cmF0aW9uPzogU2NhbGluZ0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBEQiBzbmFwc2hvdCBvciBEQiBjbHVzdGVyIHNuYXBzaG90IHRvIHJlc3RvcmUgZnJvbS5cbiAqICBZb3UgY2FuIHVzZSBlaXRoZXIgdGhlIG5hbWUgb3IgdGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIHRvIHNwZWNpZnkgYSBEQiBjbHVzdGVyIHNuYXBzaG90LiBIb3dldmVyLCB5b3UgY2FuIHVzZSBvbmx5IHRoZSBBUk4gdG8gc3BlY2lmeSBhIERCIHNuYXBzaG90LlxuICogIEFmdGVyIHlvdSByZXN0b3JlIGEgREIgY2x1c3RlciB3aXRoIGEgYGBTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgeW91IG11c3Qgc3BlY2lmeSB0aGUgc2FtZSBgYFNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5IGZvciBhbnkgZnV0dXJlIHVwZGF0ZXMgdG8gdGhlIERCIGNsdXN0ZXIuIFdoZW4geW91IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSBmb3IgYW4gdXBkYXRlLCB0aGUgREIgY2x1c3RlciBpcyBub3QgcmVzdG9yZWQgZnJvbSB0aGUgc25hcHNob3QgYWdhaW4sIGFuZCB0aGUgZGF0YSBpbiB0aGUgZGF0YWJhc2UgaXMgbm90IGNoYW5nZWQuIEhvd2V2ZXIsIGlmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBgYFNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBhbiBlbXB0eSBEQiBjbHVzdGVyIGlzIGNyZWF0ZWQsIGFuZCB0aGUgb3JpZ2luYWwgREIgY2x1c3RlciBpcyBkZWxldGVkLiBJZiB5b3Ugc3BlY2lmeSBhIHByb3BlcnR5IHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzIHNuYXBzaG90IHJlc3RvcmUgcHJvcGVydHksIGEgbmV3IERCIGNsdXN0ZXIgaXMgcmVzdG9yZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGBgU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIGFuZCB0aGUgb3JpZ2luYWwgREIgY2x1c3RlciBpcyBkZWxldGVkLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5IHRvIHJlc3RvcmUgYSBEQiBjbHVzdGVyIChhcyBvcHBvc2VkIHRvIHNwZWNpZnlpbmcgaXQgZm9yIERCIGNsdXN0ZXIgdXBkYXRlcyksIHRoZW4gZG9uJ3Qgc3BlY2lmeSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiAgICsgICBgYEdsb2JhbENsdXN0ZXJJZGVudGlmaWVyYGAgXG4gKiAgICsgICBgYE1hc3RlclVzZXJuYW1lYGAgXG4gKiAgICsgICBgYE1hc3RlclVzZXJQYXNzd29yZGBgIFxuICogICArICAgYGBSZXBsaWNhdGlvblNvdXJjZUlkZW50aWZpZXJgYCBcbiAqICAgKyAgIGBgUmVzdG9yZVR5cGVgYCBcbiAqICAgKyAgIGBgU291cmNlREJDbHVzdGVySWRlbnRpZmllcmBgIFxuICogICArICAgYGBTb3VyY2VSZWdpb25gYCBcbiAqICAgKyAgYGBTdG9yYWdlRW5jcnlwdGVkYGAgKGZvciBhbiBlbmNyeXB0ZWQgc25hcHNob3QpXG4gKiAgICsgICBgYFVzZUxhdGVzdFJlc3RvcmFibGVUaW1lYGAgXG4gKiAgIFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IG1hdGNoIHRoZSBpZGVudGlmaWVyIG9mIGFuIGV4aXN0aW5nIFNuYXBzaG90LlxuICogICBcbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuU25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nXG4vKipcbiAqIFdoZW4gcmVzdG9yaW5nIGEgREIgY2x1c3RlciB0byBhIHBvaW50IGluIHRpbWUsIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBzb3VyY2UgREIgY2x1c3RlciBmcm9tIHdoaWNoIHRvIHJlc3RvcmUuXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgbWF0Y2ggdGhlIGlkZW50aWZpZXIgb2YgYW4gZXhpc3RpbmcgREJDbHVzdGVyLlxuICogICArICBDYW5ub3QgYmUgc3BlY2lmaWVkIGlmIGBgU291cmNlRGJDbHVzdGVyUmVzb3VyY2VJZGBgIGlzIHNwZWNpZmllZC4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYGBTb3VyY2VEQkNsdXN0ZXJJZGVudGlmaWVyYGAgb3IgYGBTb3VyY2VEYkNsdXN0ZXJSZXNvdXJjZUlkYGAsIGJ1dCBub3QgYm90aC5cbiAqICAgXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKi9cblNvdXJjZURCQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFXUyBSZWdpb24gd2hpY2ggY29udGFpbnMgdGhlIHNvdXJjZSBEQiBjbHVzdGVyIHdoZW4gcmVwbGljYXRpbmcgYSBEQiBjbHVzdGVyLiBGb3IgZXhhbXBsZSwgYGB1cy1lYXN0LTFgYC4gXG4gKiAgVmFsaWQgZm9yOiBBdXJvcmEgREIgY2x1c3RlcnMgb25seVxuICovXG5Tb3VyY2VSZWdpb24/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIERCIGNsdXN0ZXIgaXMgZW5jcnlwdGVkLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYEttc0tleUlkYGAgcHJvcGVydHksIHRoZW4geW91IG11c3QgZW5hYmxlIGVuY3J5cHRpb24uXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgU291cmNlREJDbHVzdGVySWRlbnRpZmllcmBgIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc291cmNlIERCIGNsdXN0ZXIsIGFuZCBpZiB0aGUgREIgY2x1c3RlciBpcyBlbmNyeXB0ZWQsIHRoZSBzcGVjaWZpZWQgYGBLbXNLZXlJZGBgIHByb3BlcnR5IGlzIHVzZWQuXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgU25hcHNob3RJZGVudGlmaWVyYGAgYW5kIHRoZSBzcGVjaWZpZWQgc25hcHNob3QgaXMgZW5jcnlwdGVkLCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc25hcHNob3QsIGFuZCB0aGUgc3BlY2lmaWVkIGBgS21zS2V5SWRgYCBwcm9wZXJ0eSBpcyB1c2VkLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNuYXBzaG90SWRlbnRpZmllcmBgIGFuZCB0aGUgc3BlY2lmaWVkIHNuYXBzaG90IGlzbid0IGVuY3J5cHRlZCwgeW91IGNhbiB1c2UgdGhpcyBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoYXQgdGhlIHJlc3RvcmVkIERCIGNsdXN0ZXIgaXMgZW5jcnlwdGVkLiBTcGVjaWZ5IHRoZSBgYEttc0tleUlkYGAgcHJvcGVydHkgZm9yIHRoZSBLTVMga2V5IHRvIHVzZSBmb3IgZW5jcnlwdGlvbi4gSWYgeW91IGRvbid0IHdhbnQgdGhlIHJlc3RvcmVkIERCIGNsdXN0ZXIgdG8gYmUgZW5jcnlwdGVkLCB0aGVuIGRvbid0IHNldCB0aGlzIHByb3BlcnR5IG9yIHNldCBpdCB0byBgYGZhbHNlYGAuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IGJvdGggdGhlIGBgU3RvcmFnZUVuY3J5cHRlZGBgIGFuZCBgYFNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnRpZXMgd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBgYEttc0tleUlkYGAgcHJvcGVydHksIHRoZW4gdGhlIHJlc3RvcmVkIERCIGNsdXN0ZXIgaW5oZXJpdHMgdGhlIGVuY3J5cHRpb24gc2V0dGluZ3MgZnJvbSB0aGUgREIgc25hcHNob3QgdGhhdCBwcm92aWRlLlxuICogICBWYWxpZCBmb3I6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqL1xuU3RvcmFnZUVuY3J5cHRlZD86IGJvb2xlYW5cblN0b3JhZ2VUaHJvdWdocHV0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBzdG9yYWdlIHR5cGUgdG8gYXNzb2NpYXRlIHdpdGggdGhlIERCIGNsdXN0ZXIuXG4gKiAgRm9yIGluZm9ybWF0aW9uIG9uIHN0b3JhZ2UgdHlwZXMgZm9yIEF1cm9yYSBEQiBjbHVzdGVycywgc2VlIFtTdG9yYWdlIGNvbmZpZ3VyYXRpb25zIGZvciBBbWF6b24gQXVyb3JhIERCIGNsdXN0ZXJzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQXVyb3JhLk92ZXJ2aWV3LlN0b3JhZ2VSZWxpYWJpbGl0eS5odG1sI2F1cm9yYS1zdG9yYWdlLXR5cGUpLiBGb3IgaW5mb3JtYXRpb24gb24gc3RvcmFnZSB0eXBlcyBmb3IgTXVsdGktQVogREIgY2x1c3RlcnMsIHNlZSBbU2V0dGluZ3MgZm9yIGNyZWF0aW5nIE11bHRpLUFaIERCIGNsdXN0ZXJzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvY3JlYXRlLW11bHRpLWF6LWRiLWNsdXN0ZXIuaHRtbCNjcmVhdGUtbXVsdGktYXotZGItY2x1c3Rlci1zZXR0aW5ncykuXG4gKiAgVGhpcyBzZXR0aW5nIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIE11bHRpLUFaIERCIGNsdXN0ZXIuXG4gKiAgV2hlbiBzcGVjaWZpZWQgZm9yIGEgTXVsdGktQVogREIgY2x1c3RlciwgYSB2YWx1ZSBmb3IgdGhlIGBgSW9wc2BgIHBhcmFtZXRlciBpcyByZXF1aXJlZC5cbiAqICBWYWxpZCBmb3IgQ2x1c3RlciBUeXBlOiBBdXJvcmEgREIgY2x1c3RlcnMgYW5kIE11bHRpLUFaIERCIGNsdXN0ZXJzXG4gKiAgVmFsaWQgVmFsdWVzOlxuICogICArICBBdXJvcmEgREIgY2x1c3RlcnMgLSBgYGF1cm9yYSB8IGF1cm9yYS1pb3B0MWBgXG4gKiAgICsgIE11bHRpLUFaIERCIGNsdXN0ZXJzIC0gYGBpbzEgfCBpbzIgfCBncDNgYFxuICogICBcbiAqICBEZWZhdWx0OlxuICogICArICBBdXJvcmEgREIgY2x1c3RlcnMgLSBgYGF1cm9yYWBgXG4gKiAgICsgIE11bHRpLUFaIERCIGNsdXN0ZXJzIC0gYGBpbzFgYFxuICogICBcbiAqICAgV2hlbiB5b3UgY3JlYXRlIGFuIEF1cm9yYSBEQiBjbHVzdGVyIHdpdGggdGhlIHN0b3JhZ2UgdHlwZSBzZXQgdG8gYGBhdXJvcmEtaW9wdDFgYCwgdGhlIHN0b3JhZ2UgdHlwZSBpcyByZXR1cm5lZCBpbiB0aGUgcmVzcG9uc2UuIFRoZSBzdG9yYWdlIHR5cGUgaXNuJ3QgcmV0dXJuZWQgd2hlbiB5b3Ugc2V0IGl0IHRvIGBgYXVyb3JhYGAuXG4gKi9cblN0b3JhZ2VUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRhZ3MgdG8gYXNzaWduIHRvIHRoZSBEQiBjbHVzdGVyLlxuICogIFZhbGlkIGZvciBDbHVzdGVyIFR5cGU6IEF1cm9yYSBEQiBjbHVzdGVycyBhbmQgTXVsdGktQVogREIgY2x1c3RlcnNcbiAqIFxuICogQG1heEl0ZW1zIDUwXG4gKi9cblRhZ3M/OiBUYWdbXVxuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdG8gcmVzdG9yZSB0aGUgREIgY2x1c3RlciB0byB0aGUgbGF0ZXN0IHJlc3RvcmFibGUgYmFja3VwIHRpbWUuIEJ5IGRlZmF1bHQsIHRoZSBEQiBjbHVzdGVyIGlzIG5vdCByZXN0b3JlZCB0byB0aGUgbGF0ZXN0IHJlc3RvcmFibGUgYmFja3VwIHRpbWUuIFxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5Vc2VMYXRlc3RSZXN0b3JhYmxlVGltZT86IGJvb2xlYW5cbi8qKlxuICogQSBsaXN0IG9mIEVDMiBWUEMgc2VjdXJpdHkgZ3JvdXBzIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgREIgY2x1c3Rlci5cbiAqICBJZiB5b3UgcGxhbiB0byB1cGRhdGUgdGhlIHJlc291cmNlLCBkb24ndCBzcGVjaWZ5IFZQQyBzZWN1cml0eSBncm91cHMgaW4gYSBzaGFyZWQgVlBDLlxuICogIFZhbGlkIGZvcjogQXVyb3JhIERCIGNsdXN0ZXJzIGFuZCBNdWx0aS1BWiBEQiBjbHVzdGVyc1xuICovXG5WcGNTZWN1cml0eUdyb3VwSWRzPzogc3RyaW5nW11cbn1cbmV4cG9ydCBpbnRlcmZhY2UgRW5kcG9pbnQge1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGNvbm5lY3Rpb24gZW5kcG9pbnQgZm9yIHRoZSBwcmltYXJ5IGluc3RhbmNlIG9mIHRoZSBEQiBjbHVzdGVyLlxuICovXG5BZGRyZXNzPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgcG9ydCB0aGF0IHRoZSBkYXRhYmFzZSBlbmdpbmUgaXMgbGlzdGVuaW5nIG9uLlxuICovXG5Qb3J0Pzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFJlYWRFbmRwb2ludCB7XG4vKipcbiAqIFRoZSBob3N0IGFkZHJlc3Mgb2YgdGhlIHJlYWRlciBlbmRwb2ludC5cbiAqL1xuQWRkcmVzcz86IHN0cmluZ1xufVxuLyoqXG4gKiBEZXNjcmliZXMgYW4gQVdTIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSByb2xlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgREIgY2x1c3Rlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEQkNsdXN0ZXJSb2xlIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBBV1MgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIHJvbGUuIElBTSByb2xlcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBEQiBjbHVzdGVyIGdyYW50IHBlcm1pc3Npb24gZm9yIHRoZSBEQiBjbHVzdGVyIHRvIGFjY2VzcyBvdGhlciBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuIEZvciB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZmVhdHVyZSBuYW1lcywgc2VlIHRoZSBgYFN1cHBvcnRlZEZlYXR1cmVOYW1lc2BgIGRlc2NyaXB0aW9uIGluIFtEQkVuZ2luZVZlcnNpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfREJFbmdpbmVWZXJzaW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuRmVhdHVyZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgREIgY2x1c3Rlci5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBzZWNyZXQgbWFuYWdlZCBieSBSRFMgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBmb3IgdGhlIG1hc3RlciB1c2VyIHBhc3N3b3JkLlxuICogICBXaGVuIHlvdSByZXN0b3JlIGEgREIgY2x1c3RlciBmcm9tIGEgc25hcHNob3QsIEFtYXpvbiBSRFMgZ2VuZXJhdGVzIGEgbmV3IHNlY3JldCBpbnN0ZWFkIG9mIHJldXNpbmcgdGhlIHNlY3JldCBzcGVjaWZpZWQgaW4gdGhlIGBgU2VjcmV0QXJuYGAgcHJvcGVydHkuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSByZXN0b3JlZCBEQiBjbHVzdGVyIGlzIHNlY3VyZWx5IG1hbmFnZWQgd2l0aCBhIGRlZGljYXRlZCBzZWNyZXQuIFRvIG1haW50YWluIGNvbnNpc3RlbnQgaW50ZWdyYXRpb24gd2l0aCB5b3VyIGFwcGxpY2F0aW9uLCB5b3UgbWlnaHQgbmVlZCB0byB1cGRhdGUgcmVzb3VyY2UgY29uZmlndXJhdGlvbnMgdG8gcmVmZXJlbmNlIHRoZSBuZXdseSBjcmVhdGVkIHNlY3JldC5cbiAqICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUGFzc3dvcmQgbWFuYWdlbWVudCB3aXRoIFNlY3JldHMgTWFuYWdlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL3Jkcy1zZWNyZXRzLW1hbmFnZXIuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqIGFuZCBbUGFzc3dvcmQgbWFuYWdlbWVudCB3aXRoIFNlY3JldHMgTWFuYWdlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL3Jkcy1zZWNyZXRzLW1hbmFnZXIuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUuKlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hc3RlclVzZXJTZWNyZXQge1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHNlY3JldC4gVGhpcyBwYXJhbWV0ZXIgaXMgYSByZXR1cm4gdmFsdWUgdGhhdCB5b3UgY2FuIHJldHJpZXZlIHVzaW5nIHRoZSBgYEZuOjpHZXRBdHRgYCBpbnRyaW5zaWMgZnVuY3Rpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JldHVybiB2YWx1ZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1yZHMtZGJjbHVzdGVyLmh0bWwjYXdzLXJlc291cmNlLXJkcy1kYmNsdXN0ZXItcmV0dXJuLXZhbHVlcykuXG4gKi9cblNlY3JldEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVdTIEtNUyBrZXkgaWRlbnRpZmllciB0aGF0IGlzIHVzZWQgdG8gZW5jcnlwdCB0aGUgc2VjcmV0LlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgc2NhbGluZyBjb25maWd1cmF0aW9uIG9mIGFuIEF1cm9yYSBTZXJ2ZXJsZXNzIFYyIERCIGNsdXN0ZXIuIFxuICogIFRoaXMgcHJvcGVydHkgaXMgb25seSBzdXBwb3J0ZWQgZm9yIEF1cm9yYSBTZXJ2ZXJsZXNzIHYyLiBGb3IgQXVyb3JhIFNlcnZlcmxlc3MgdjEsIFVzZSB0aGUgYGBTY2FsaW5nQ29uZmlndXJhdGlvbmBgIHByb3BlcnR5LlxuICogIFZhbGlkIGZvcjogQXVyb3JhIFNlcnZlcmxlc3MgdjIgREIgY2x1c3RlcnMgb25seVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIEF1cm9yYSBjYXBhY2l0eSB1bml0cyAoQUNVcykgZm9yIGEgREIgaW5zdGFuY2UgaW4gYW4gQXVyb3JhIFNlcnZlcmxlc3MgdjIgY2x1c3Rlci4gWW91IGNhbiBzcGVjaWZ5IEFDVSB2YWx1ZXMgaW4gaGFsZi1zdGVwIGluY3JlbWVudHMsIHN1Y2ggYXMgOCwgOC41LCA5LCBhbmQgc28gb24uIEZvciBBdXJvcmEgdmVyc2lvbnMgdGhhdCBzdXBwb3J0IHRoZSBBdXJvcmEgU2VydmVybGVzcyB2MiBhdXRvLXBhdXNlIGZlYXR1cmUsIHRoZSBzbWFsbGVzdCB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIGlzIDAuIEZvciB2ZXJzaW9ucyB0aGF0IGRvbid0IHN1cHBvcnQgQXVyb3JhIFNlcnZlcmxlc3MgdjIgYXV0by1wYXVzZSwgdGhlIHNtYWxsZXN0IHZhbHVlIHRoYXQgeW91IGNhbiB1c2UgaXMgMC41LlxuICovXG5NaW5DYXBhY2l0eT86IG51bWJlclxuLyoqXG4gKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgQXVyb3JhIGNhcGFjaXR5IHVuaXRzIChBQ1VzKSBmb3IgYSBEQiBpbnN0YW5jZSBpbiBhbiBBdXJvcmEgU2VydmVybGVzcyB2MiBjbHVzdGVyLiBZb3UgY2FuIHNwZWNpZnkgQUNVIHZhbHVlcyBpbiBoYWxmLXN0ZXAgaW5jcmVtZW50cywgc3VjaCBhcyA0MCwgNDAuNSwgNDEsIGFuZCBzbyBvbi4gVGhlIGxhcmdlc3QgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSBpcyAxMjguXG4gKiAgVGhlIG1heGltdW0gY2FwYWNpdHkgbXVzdCBiZSBoaWdoZXIgdGhhbiAwLjUgQUNVcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2hvb3NpbmcgdGhlIG1heGltdW0gQXVyb3JhIFNlcnZlcmxlc3MgdjIgY2FwYWNpdHkgc2V0dGluZyBmb3IgYSBjbHVzdGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvYXVyb3JhLXNlcnZlcmxlc3MtdjIuc2V0dGluZy1jYXBhY2l0eS5odG1sI2F1cm9yYS1zZXJ2ZXJsZXNzLXYyLm1heF9jYXBhY2l0eV9jb25zaWRlcmF0aW9ucykgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICogIEF1cm9yYSBhdXRvbWF0aWNhbGx5IHNldHMgY2VydGFpbiBwYXJhbWV0ZXJzIGZvciBBdXJvcmEgU2VydmVybGVzcyBWMiBEQiBpbnN0YW5jZXMgdG8gdmFsdWVzIHRoYXQgZGVwZW5kIG9uIHRoZSBtYXhpbXVtIEFDVSB2YWx1ZSBpbiB0aGUgY2FwYWNpdHkgcmFuZ2UuIFdoZW4geW91IHVwZGF0ZSB0aGUgbWF4aW11bSBjYXBhY2l0eSB2YWx1ZSwgdGhlIGBgUGFyYW1ldGVyQXBwbHlTdGF0dXNgYCB2YWx1ZSBmb3IgdGhlIERCIGluc3RhbmNlIGNoYW5nZXMgdG8gYGBwZW5kaW5nLXJlYm9vdGBgLiBZb3UgY2FuIHVwZGF0ZSB0aGUgcGFyYW1ldGVyIHZhbHVlcyBieSByZWJvb3RpbmcgdGhlIERCIGluc3RhbmNlIGFmdGVyIGNoYW5naW5nIHRoZSBjYXBhY2l0eSByYW5nZS5cbiAqL1xuTWF4Q2FwYWNpdHk/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBhbiBBdXJvcmEgU2VydmVybGVzcyB2MiBEQiBpbnN0YW5jZSBtdXN0IGJlIGlkbGUgYmVmb3JlIEF1cm9yYSBhdHRlbXB0cyB0byBhdXRvbWF0aWNhbGx5IHBhdXNlIGl0LiBcbiAqICBTcGVjaWZ5IGEgdmFsdWUgYmV0d2VlbiAzMDAgc2Vjb25kcyAoZml2ZSBtaW51dGVzKSBhbmQgODYsNDAwIHNlY29uZHMgKG9uZSBkYXkpLiBUaGUgZGVmYXVsdCBpcyAzMDAgc2Vjb25kcy5cbiAqL1xuU2Vjb25kc1VudGlsQXV0b1BhdXNlPzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBzY2FsaW5nIGNvbmZpZ3VyYXRpb24gb2YgYW4gQXVyb3JhIFNlcnZlcmxlc3MgdjEgREIgY2x1c3Rlci5cbiAqICBUaGlzIHByb3BlcnR5IGlzIG9ubHkgc3VwcG9ydGVkIGZvciBBdXJvcmEgU2VydmVybGVzcyB2MS4gRm9yIEF1cm9yYSBTZXJ2ZXJsZXNzIHYyLCBVc2UgdGhlIGBgU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eS5cbiAqICBWYWxpZCBmb3I6IEF1cm9yYSBTZXJ2ZXJsZXNzIHYxIERCIGNsdXN0ZXJzIG9ubHlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2FsaW5nQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGFsbG93IG9yIGRpc2FsbG93IGF1dG9tYXRpYyBwYXVzZSBmb3IgYW4gQXVyb3JhIERCIGNsdXN0ZXIgaW4gYGBzZXJ2ZXJsZXNzYGAgREIgZW5naW5lIG1vZGUuIEEgREIgY2x1c3RlciBjYW4gYmUgcGF1c2VkIG9ubHkgd2hlbiBpdCdzIGlkbGUgKGl0IGhhcyBubyBjb25uZWN0aW9ucykuXG4gKiAgIElmIGEgREIgY2x1c3RlciBpcyBwYXVzZWQgZm9yIG1vcmUgdGhhbiBzZXZlbiBkYXlzLCB0aGUgREIgY2x1c3RlciBtaWdodCBiZSBiYWNrZWQgdXAgd2l0aCBhIHNuYXBzaG90LiBJbiB0aGlzIGNhc2UsIHRoZSBEQiBjbHVzdGVyIGlzIHJlc3RvcmVkIHdoZW4gdGhlcmUgaXMgYSByZXF1ZXN0IHRvIGNvbm5lY3QgdG8gaXQuXG4gKi9cbkF1dG9QYXVzZT86IGJvb2xlYW5cbi8qKlxuICogVGhlIG1heGltdW0gY2FwYWNpdHkgZm9yIGFuIEF1cm9yYSBEQiBjbHVzdGVyIGluIGBgc2VydmVybGVzc2BgIERCIGVuZ2luZSBtb2RlLlxuICogIEZvciBBdXJvcmEgTXlTUUwsIHZhbGlkIGNhcGFjaXR5IHZhbHVlcyBhcmUgYGAxYGAsIGBgMmBgLCBgYDRgYCwgYGA4YGAsIGBgMTZgYCwgYGAzMmBgLCBgYDY0YGAsIGBgMTI4YGAsIGFuZCBgYDI1NmBgLlxuICogIEZvciBBdXJvcmEgUG9zdGdyZVNRTCwgdmFsaWQgY2FwYWNpdHkgdmFsdWVzIGFyZSBgYDJgYCwgYGA0YGAsIGBgOGBgLCBgYDE2YGAsIGBgMzJgYCwgYGA2NGBgLCBgYDE5MmBgLCBhbmQgYGAzODRgYC5cbiAqICBUaGUgbWF4aW11bSBjYXBhY2l0eSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbWluaW11bSBjYXBhY2l0eS5cbiAqL1xuTWF4Q2FwYWNpdHk/OiBudW1iZXJcbi8qKlxuICogVGhlIG1pbmltdW0gY2FwYWNpdHkgZm9yIGFuIEF1cm9yYSBEQiBjbHVzdGVyIGluIGBgc2VydmVybGVzc2BgIERCIGVuZ2luZSBtb2RlLlxuICogIEZvciBBdXJvcmEgTXlTUUwsIHZhbGlkIGNhcGFjaXR5IHZhbHVlcyBhcmUgYGAxYGAsIGBgMmBgLCBgYDRgYCwgYGA4YGAsIGBgMTZgYCwgYGAzMmBgLCBgYDY0YGAsIGBgMTI4YGAsIGFuZCBgYDI1NmBgLlxuICogIEZvciBBdXJvcmEgUG9zdGdyZVNRTCwgdmFsaWQgY2FwYWNpdHkgdmFsdWVzIGFyZSBgYDJgYCwgYGA0YGAsIGBgOGBgLCBgYDE2YGAsIGBgMzJgYCwgYGA2NGBgLCBgYDE5MmBgLCBhbmQgYGAzODRgYC5cbiAqICBUaGUgbWluaW11bSBjYXBhY2l0eSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWF4aW11bSBjYXBhY2l0eS5cbiAqL1xuTWluQ2FwYWNpdHk/OiBudW1iZXJcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IEF1cm9yYSBTZXJ2ZXJsZXNzIHYxIHRyaWVzIHRvIGZpbmQgYSBzY2FsaW5nIHBvaW50IHRvIHBlcmZvcm0gc2VhbWxlc3Mgc2NhbGluZyBiZWZvcmUgZW5mb3JjaW5nIHRoZSB0aW1lb3V0IGFjdGlvbi4gVGhlIGRlZmF1bHQgaXMgMzAwLlxuICogIFNwZWNpZnkgYSB2YWx1ZSBiZXR3ZWVuIDYwIGFuZCA2MDAgc2Vjb25kcy5cbiAqL1xuU2Vjb25kc0JlZm9yZVRpbWVvdXQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHRpbWUsIGluIHNlY29uZHMsIGJlZm9yZSBhbiBBdXJvcmEgREIgY2x1c3RlciBpbiBgYHNlcnZlcmxlc3NgYCBtb2RlIGlzIHBhdXNlZC5cbiAqICBTcGVjaWZ5IGEgdmFsdWUgYmV0d2VlbiAzMDAgYW5kIDg2LDQwMCBzZWNvbmRzLlxuICovXG5TZWNvbmRzVW50aWxBdXRvUGF1c2U/OiBudW1iZXJcbi8qKlxuICogVGhlIGFjdGlvbiB0byB0YWtlIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZCwgZWl0aGVyIGBgRm9yY2VBcHBseUNhcGFjaXR5Q2hhbmdlYGAgb3IgYGBSb2xsYmFja0NhcGFjaXR5Q2hhbmdlYGAuXG4gKiAgYGBGb3JjZUFwcGx5Q2FwYWNpdHlDaGFuZ2VgYCBzZXRzIHRoZSBjYXBhY2l0eSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGFzIHNvb24gYXMgcG9zc2libGUuXG4gKiAgYGBSb2xsYmFja0NhcGFjaXR5Q2hhbmdlYGAsIHRoZSBkZWZhdWx0LCBpZ25vcmVzIHRoZSBjYXBhY2l0eSBjaGFuZ2UgaWYgYSBzY2FsaW5nIHBvaW50IGlzbid0IGZvdW5kIGluIHRoZSB0aW1lb3V0IHBlcmlvZC5cbiAqICAgSWYgeW91IHNwZWNpZnkgYGBGb3JjZUFwcGx5Q2FwYWNpdHlDaGFuZ2VgYCwgY29ubmVjdGlvbnMgdGhhdCBwcmV2ZW50IEF1cm9yYSBTZXJ2ZXJsZXNzIHYxIGZyb20gZmluZGluZyBhIHNjYWxpbmcgcG9pbnQgbWlnaHQgYmUgZHJvcHBlZC5cbiAqICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQXV0b3NjYWxpbmcgZm9yIEF1cm9yYSBTZXJ2ZXJsZXNzIHYxXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvYXVyb3JhLXNlcnZlcmxlc3MuaG93LWl0LXdvcmtzLmh0bWwjYXVyb3JhLXNlcnZlcmxlc3MuaG93LWl0LXdvcmtzLmF1dG8tc2NhbGluZykgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICovXG5UaW1lb3V0QWN0aW9uPzogc3RyaW5nXG59XG4vKipcbiAqIE1ldGFkYXRhIGFzc2lnbmVkIHRvIGFuIEFtYXpvbiBSRFMgcmVzb3VyY2UgY29uc2lzdGluZyBvZiBhIGtleS12YWx1ZSBwYWlyLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1RhZ2dpbmcgQW1hem9uIFJEUyByZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1RhZ2dpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqIG9yIFtUYWdnaW5nIEFtYXpvbiBBdXJvcmEgYW5kIEFtYXpvbiBSRFMgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvVVNFUl9UYWdnaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBBIGtleSBpcyB0aGUgcmVxdWlyZWQgbmFtZSBvZiB0aGUgdGFnLiBUaGUgc3RyaW5nIHZhbHVlIGNhbiBiZSBmcm9tIDEgdG8gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbid0IGJlIHByZWZpeGVkIHdpdGggYGBhd3M6YGAgb3IgYGByZHM6YGAuIFRoZSBzdHJpbmcgY2FuIG9ubHkgY29udGFpbiBvbmx5IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlLXNwYWNlLCAnXycsICcuJywgJzonLCAnLycsICc9JywgJysnLCAnLScsICdAJyAoSmF2YSByZWdleDogXCJeKFtcXFxccHtMfVxcXFxwe1p9XFxcXHB7Tn1fLjovPStcXFxcLUBdKikkXCIpLlxuICovXG5LZXk6IHN0cmluZ1xuLyoqXG4gKiBBIHZhbHVlIGlzIHRoZSBvcHRpb25hbCB2YWx1ZSBvZiB0aGUgdGFnLiBUaGUgc3RyaW5nIHZhbHVlIGNhbiBiZSBmcm9tIDEgdG8gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbid0IGJlIHByZWZpeGVkIHdpdGggYGBhd3M6YGAgb3IgYGByZHM6YGAuIFRoZSBzdHJpbmcgY2FuIG9ubHkgY29udGFpbiBvbmx5IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlLXNwYWNlLCAnXycsICcuJywgJzonLCAnLycsICc9JywgJysnLCAnLScsICdAJyAoSmF2YSByZWdleDogXCJeKFtcXFxccHtMfVxcXFxwe1p9XFxcXHB7Tn1fLjovPStcXFxcLUBdKikkXCIpLlxuICovXG5WYWx1ZT86IHN0cmluZ1xufVxuIl19
@@ -120,6 +120,16 @@ export interface _AWS_RDS_DBINSTANCE {
120
120
  * + Can't be set to 0 if the DB instance is a source to read replicas
121
121
  */
122
122
  BackupRetentionPeriod?: number;
123
+ /**
124
+ * The location for storing automated backups and manual snapshots.
125
+ * Valid Values:
126
+ * + ``local`` (Dedicated Local Zone)
127
+ * + ``outposts`` (AWS Outposts)
128
+ * + ``region`` (AWS-Region)
129
+ *
130
+ * Default: ``region``
131
+ * For more information, see [Working with Amazon RDS on Outposts](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html) in the *Amazon RDS User Guide*.
132
+ */
123
133
  BackupTarget?: string;
124
134
  /**
125
135
  * The identifier of the CA certificate for this DB instance.
@@ -192,6 +202,7 @@ export interface _AWS_RDS_DBINSTANCE {
192
202
  * If you specify a name, you can't perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.
193
203
  */
194
204
  DBInstanceIdentifier?: string;
205
+ DBInstanceStatus?: string;
195
206
  DbiResourceId?: string;
196
207
  /**
197
208
  * The meaning of this parameter differs according to the database engine you use.
@@ -454,6 +465,7 @@ export interface _AWS_RDS_DBINSTANCE {
454
465
  * + Can't manage the master user password with AWS Secrets Manager if ``MasterUserPassword`` is specified.
455
466
  */
456
467
  ManageMasterUserPassword?: boolean;
468
+ InstanceCreateTime?: string;
457
469
  /**
458
470
  * The number of I/O operations per second (IOPS) that the database provisions. The value must be equal to or greater than 1000.
459
471
  * If you specify this property, you must follow the range of allowed ratios of your requested IOPS rate to the amount of storage that you allocate (IOPS to allocated storage). For example, you can provision an Oracle database instance with 1000 IOPS and 200 GiB of storage (a ratio of 5:1), or specify 2000 IOPS with 200 GiB of storage (a ratio of 10:1). For more information, see [Amazon RDS Provisioned IOPS Storage to Improve Performance](https://docs.aws.amazon.com/AmazonRDS/latest/DeveloperGuide/CHAP_Storage.html#USER_PIOPS) in the *Amazon RDS User Guide*.
@@ -463,6 +475,7 @@ export interface _AWS_RDS_DBINSTANCE {
463
475
  * + For RDS for SQL Server - Must be a multiple between 1 and 50 of the storage amount for the DB instance.
464
476
  */
465
477
  Iops?: number;
478
+ IsStorageConfigUpgradeAvailable?: boolean;
466
479
  /**
467
480
  * The ARN of the AWS KMS key that's used to encrypt the DB instance, such as ``arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef``. If you enable the StorageEncrypted property but don't specify this property, AWS CloudFormation uses the default KMS key. If you specify this property, you must set the StorageEncrypted property to true.
468
481
  * If you specify the ``SourceDBInstanceIdentifier`` or ``SourceDbiResourceId`` property, don't specify this property. The value is inherited from the source DB instance, and if the DB instance is encrypted, the specified ``KmsKeyId`` property is used. However, if the source DB instance is in a different AWS Region, you must specify a KMS key ID.
@@ -474,6 +487,7 @@ export interface _AWS_RDS_DBINSTANCE {
474
487
  * Not applicable. The KMS key identifier is managed by the DB cluster.
475
488
  */
476
489
  KmsKeyId?: string;
490
+ LatestRestorableTime?: string;
477
491
  /**
478
492
  * License model information for this DB instance.
479
493
  * Valid Values:
@@ -489,6 +503,7 @@ export interface _AWS_RDS_DBINSTANCE {
489
503
  * If you've specified ``DBSecurityGroups`` and then you update the license model, AWS CloudFormation replaces the underlying DB instance. This will incur some interruptions to database availability.
490
504
  */
491
505
  LicenseModel?: string;
506
+ ListenerEndpoint?: Endpoint1;
492
507
  /**
493
508
  * The master user name for the DB instance.
494
509
  * If you specify the ``SourceDBInstanceIdentifier`` or ``DBSnapshotIdentifier`` property, don't specify this property. The value is inherited from the source DB instance or snapshot.
@@ -669,6 +684,8 @@ export interface _AWS_RDS_DBINSTANCE {
669
684
  * The default behavior value depends on your VPC setup and the database subnet group. For more information, see the ``PubliclyAccessible`` parameter in the [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) in the *Amazon RDS API Reference*.
670
685
  */
671
686
  PubliclyAccessible?: boolean;
687
+ ReadReplicaDBClusterIdentifiers?: string[];
688
+ ReadReplicaDBInstanceIdentifiers?: string[];
672
689
  /**
673
690
  * The open mode of an Oracle read replica. For more information, see [Working with Oracle Read Replicas for Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html) in the *Amazon RDS User Guide*.
674
691
  * This setting is only supported in RDS for Oracle.
@@ -823,6 +840,20 @@ export interface Endpoint {
823
840
  */
824
841
  HostedZoneId?: string;
825
842
  }
843
+ export interface Endpoint1 {
844
+ /**
845
+ * Specifies the DNS address of the DB instance.
846
+ */
847
+ Address?: string;
848
+ /**
849
+ * Specifies the port that the database engine is listening on.
850
+ */
851
+ Port?: string;
852
+ /**
853
+ * Specifies the ID that Amazon Route 53 assigns when you create a hosted zone.
854
+ */
855
+ HostedZoneId?: string;
856
+ }
826
857
  /**
827
858
  * The secret managed by RDS in AWS Secrets Manager for the master user password.
828
859
  * For more information, see [Password management with Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html) in the *Amazon RDS User Guide.*