@horietakehiro/aws-cdk-utul 0.10.2 → 0.11.3

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 (199) hide show
  1. package/lib/stack-manager.d.ts +41 -0
  2. package/lib/stack-manager.js +132 -0
  3. package/lib/types/cfn-resource-types/aws-amazonmq-configuration.d.ts +35 -5
  4. package/lib/types/cfn-resource-types/aws-amazonmq-configuration.js +1 -1
  5. package/lib/types/cfn-resource-types/aws-apigateway-vpclink.d.ts +0 -9
  6. package/lib/types/cfn-resource-types/aws-apigateway-vpclink.js +1 -1
  7. package/lib/types/cfn-resource-types/aws-apigatewayv2-domainname.d.ts +2 -2
  8. package/lib/types/cfn-resource-types/aws-apigatewayv2-domainname.js +1 -1
  9. package/lib/types/cfn-resource-types/aws-appconfig-deploymentstrategy.d.ts +56 -8
  10. package/lib/types/cfn-resource-types/aws-appconfig-deploymentstrategy.js +1 -1
  11. package/lib/types/cfn-resource-types/aws-appsync-datasource.d.ts +151 -31
  12. package/lib/types/cfn-resource-types/aws-appsync-datasource.js +1 -1
  13. package/lib/types/cfn-resource-types/aws-appsync-graphqlapi.d.ts +225 -36
  14. package/lib/types/cfn-resource-types/aws-appsync-graphqlapi.js +1 -1
  15. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.d.ts +6 -1
  16. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.js +1 -1
  17. package/lib/types/cfn-resource-types/aws-b2bi-capability.d.ts +2 -0
  18. package/lib/types/cfn-resource-types/aws-b2bi-capability.js +1 -1
  19. package/lib/types/cfn-resource-types/aws-b2bi-partnership.d.ts +37 -1
  20. package/lib/types/cfn-resource-types/aws-b2bi-partnership.js +1 -1
  21. package/lib/types/cfn-resource-types/aws-b2bi-transformer.d.ts +41 -4
  22. package/lib/types/cfn-resource-types/aws-b2bi-transformer.js +1 -1
  23. package/lib/types/cfn-resource-types/aws-backup-logicallyairgappedbackupvault.d.ts +28 -0
  24. package/lib/types/cfn-resource-types/aws-backup-logicallyairgappedbackupvault.js +3 -0
  25. package/lib/types/cfn-resource-types/aws-bedrock-agent.d.ts +1 -1
  26. package/lib/types/cfn-resource-types/aws-bedrock-agent.js +1 -1
  27. package/lib/types/cfn-resource-types/aws-bedrock-flow.d.ts +17 -6
  28. package/lib/types/cfn-resource-types/aws-bedrock-flow.js +1 -1
  29. package/lib/types/cfn-resource-types/aws-bedrock-flowversion.d.ts +17 -6
  30. package/lib/types/cfn-resource-types/aws-bedrock-flowversion.js +1 -1
  31. package/lib/types/cfn-resource-types/aws-bedrock-prompt.d.ts +3 -7
  32. package/lib/types/cfn-resource-types/aws-bedrock-prompt.js +1 -1
  33. package/lib/types/cfn-resource-types/aws-bedrock-promptversion.d.ts +4 -8
  34. package/lib/types/cfn-resource-types/aws-bedrock-promptversion.js +1 -1
  35. package/lib/types/cfn-resource-types/aws-cloudformation-customresource.d.ts +2 -1
  36. package/lib/types/cfn-resource-types/aws-cloudformation-customresource.js +1 -1
  37. package/lib/types/cfn-resource-types/aws-codepipeline-pipeline.d.ts +23 -2
  38. package/lib/types/cfn-resource-types/aws-codepipeline-pipeline.js +1 -1
  39. package/lib/types/cfn-resource-types/aws-cognito-userpool.d.ts +2 -0
  40. package/lib/types/cfn-resource-types/aws-cognito-userpool.js +1 -1
  41. package/lib/types/cfn-resource-types/aws-cognito-userpoolidentityprovider.d.ts +15 -8
  42. package/lib/types/cfn-resource-types/aws-cognito-userpoolidentityprovider.js +1 -1
  43. package/lib/types/cfn-resource-types/aws-connect-contactflow.d.ts +1 -1
  44. package/lib/types/cfn-resource-types/aws-connect-contactflow.js +1 -1
  45. package/lib/types/cfn-resource-types/aws-connect-hoursofoperation.d.ts +18 -18
  46. package/lib/types/cfn-resource-types/aws-connect-hoursofoperation.js +1 -1
  47. package/lib/types/cfn-resource-types/aws-datasync-task.d.ts +96 -96
  48. package/lib/types/cfn-resource-types/aws-datasync-task.js +1 -1
  49. package/lib/types/cfn-resource-types/aws-dms-datamigration.d.ts +90 -0
  50. package/lib/types/cfn-resource-types/aws-dms-datamigration.js +3 -0
  51. package/lib/types/cfn-resource-types/aws-dms-replicationinstance.d.ts +1 -0
  52. package/lib/types/cfn-resource-types/aws-dms-replicationinstance.js +1 -1
  53. package/lib/types/cfn-resource-types/aws-ec2-capacityreservation.d.ts +1 -0
  54. package/lib/types/cfn-resource-types/aws-ec2-capacityreservation.js +1 -1
  55. package/lib/types/cfn-resource-types/aws-ec2-eip.d.ts +2 -0
  56. package/lib/types/cfn-resource-types/aws-ec2-eip.js +1 -1
  57. package/lib/types/cfn-resource-types/aws-ec2-natgateway.d.ts +1 -1
  58. package/lib/types/cfn-resource-types/aws-ec2-natgateway.js +1 -1
  59. package/lib/types/cfn-resource-types/aws-ec2-transitgateway.d.ts +6 -5
  60. package/lib/types/cfn-resource-types/aws-ec2-transitgateway.js +1 -1
  61. package/lib/types/cfn-resource-types/aws-ec2-transitgatewayattachment.d.ts +4 -0
  62. package/lib/types/cfn-resource-types/aws-ec2-transitgatewayattachment.js +1 -1
  63. package/lib/types/cfn-resource-types/aws-ec2-transitgatewayvpcattachment.d.ts +14 -10
  64. package/lib/types/cfn-resource-types/aws-ec2-transitgatewayvpcattachment.js +1 -1
  65. package/lib/types/cfn-resource-types/aws-ec2-vpc.d.ts +1 -1
  66. package/lib/types/cfn-resource-types/aws-ec2-vpc.js +1 -1
  67. package/lib/types/cfn-resource-types/aws-ec2-vpcendpoint.d.ts +2 -1
  68. package/lib/types/cfn-resource-types/aws-ec2-vpcendpoint.js +1 -1
  69. package/lib/types/cfn-resource-types/aws-ec2-vpcendpointconnectionnotification.d.ts +8 -8
  70. package/lib/types/cfn-resource-types/aws-ec2-vpcendpointconnectionnotification.js +1 -1
  71. package/lib/types/cfn-resource-types/aws-ec2-vpnconnection.d.ts +213 -3
  72. package/lib/types/cfn-resource-types/aws-ec2-vpnconnection.js +1 -1
  73. package/lib/types/cfn-resource-types/aws-ecs-capacityprovider.d.ts +1 -1
  74. package/lib/types/cfn-resource-types/aws-ecs-capacityprovider.js +1 -1
  75. package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +10 -1
  76. package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
  77. package/lib/types/cfn-resource-types/aws-ecs-taskset.d.ts +57 -51
  78. package/lib/types/cfn-resource-types/aws-ecs-taskset.js +1 -1
  79. package/lib/types/cfn-resource-types/aws-eks-cluster.d.ts +11 -1
  80. package/lib/types/cfn-resource-types/aws-eks-cluster.js +1 -1
  81. package/lib/types/cfn-resource-types/aws-elasticache-globalreplicationgroup.d.ts +4 -0
  82. package/lib/types/cfn-resource-types/aws-elasticache-globalreplicationgroup.js +1 -1
  83. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-listener.d.ts +79 -63
  84. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-listener.js +1 -1
  85. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-listenerrule.d.ts +65 -63
  86. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-listenerrule.js +1 -1
  87. package/lib/types/cfn-resource-types/aws-emr-cluster.d.ts +35 -14
  88. package/lib/types/cfn-resource-types/aws-emr-cluster.js +1 -1
  89. package/lib/types/cfn-resource-types/aws-emr-instancefleetconfig.d.ts +21 -0
  90. package/lib/types/cfn-resource-types/aws-emr-instancefleetconfig.js +1 -1
  91. package/lib/types/cfn-resource-types/aws-fis-experimenttemplate.d.ts +81 -81
  92. package/lib/types/cfn-resource-types/aws-fis-experimenttemplate.js +1 -1
  93. package/lib/types/cfn-resource-types/aws-gamelift-containergroupdefinition.d.ts +19 -0
  94. package/lib/types/cfn-resource-types/aws-gamelift-containergroupdefinition.js +1 -1
  95. package/lib/types/cfn-resource-types/aws-glue-crawler.d.ts +179 -1
  96. package/lib/types/cfn-resource-types/aws-glue-crawler.js +1 -1
  97. package/lib/types/cfn-resource-types/aws-glue-job.d.ts +96 -6
  98. package/lib/types/cfn-resource-types/aws-glue-job.js +1 -1
  99. package/lib/types/cfn-resource-types/aws-glue-schema.d.ts +1 -1
  100. package/lib/types/cfn-resource-types/aws-glue-schema.js +1 -1
  101. package/lib/types/cfn-resource-types/aws-glue-usageprofile.d.ts +64 -0
  102. package/lib/types/cfn-resource-types/aws-glue-usageprofile.js +3 -0
  103. package/lib/types/cfn-resource-types/aws-iam-policy.d.ts +4 -1
  104. package/lib/types/cfn-resource-types/aws-iam-policy.js +1 -1
  105. package/lib/types/cfn-resource-types/aws-iam-role.d.ts +3 -2
  106. package/lib/types/cfn-resource-types/aws-iam-role.js +1 -1
  107. package/lib/types/cfn-resource-types/aws-imagebuilder-component.d.ts +1 -1
  108. package/lib/types/cfn-resource-types/aws-imagebuilder-component.js +1 -1
  109. package/lib/types/cfn-resource-types/aws-imagebuilder-infrastructureconfiguration.d.ts +22 -0
  110. package/lib/types/cfn-resource-types/aws-imagebuilder-infrastructureconfiguration.js +1 -1
  111. package/lib/types/cfn-resource-types/aws-iot-domainconfiguration.d.ts +6 -0
  112. package/lib/types/cfn-resource-types/aws-iot-domainconfiguration.js +1 -1
  113. package/lib/types/cfn-resource-types/aws-iotevents-alarmmodel.d.ts +195 -79
  114. package/lib/types/cfn-resource-types/aws-iotevents-alarmmodel.js +1 -1
  115. package/lib/types/cfn-resource-types/aws-iotevents-detectormodel.d.ts +177 -85
  116. package/lib/types/cfn-resource-types/aws-iotevents-detectormodel.js +1 -1
  117. package/lib/types/cfn-resource-types/aws-iotevents-input.d.ts +9 -11
  118. package/lib/types/cfn-resource-types/aws-iotevents-input.js +1 -1
  119. package/lib/types/cfn-resource-types/aws-ivs-encoderconfiguration.d.ts +2 -2
  120. package/lib/types/cfn-resource-types/aws-ivs-encoderconfiguration.js +1 -1
  121. package/lib/types/cfn-resource-types/aws-kinesis-resourcepolicy.d.ts +17 -0
  122. package/lib/types/cfn-resource-types/aws-kinesis-resourcepolicy.js +3 -0
  123. package/lib/types/cfn-resource-types/aws-lakeformation-principalpermissions.d.ts +1 -1
  124. package/lib/types/cfn-resource-types/aws-lakeformation-principalpermissions.js +1 -1
  125. package/lib/types/cfn-resource-types/aws-lakeformation-tag.d.ts +1 -1
  126. package/lib/types/cfn-resource-types/aws-lakeformation-tag.js +1 -1
  127. package/lib/types/cfn-resource-types/aws-lambda-eventsourcemapping.d.ts +115 -108
  128. package/lib/types/cfn-resource-types/aws-lambda-eventsourcemapping.js +1 -1
  129. package/lib/types/cfn-resource-types/aws-medialive-channel.d.ts +2 -0
  130. package/lib/types/cfn-resource-types/aws-medialive-channel.js +1 -1
  131. package/lib/types/cfn-resource-types/aws-memorydb-cluster.d.ts +4 -0
  132. package/lib/types/cfn-resource-types/aws-memorydb-cluster.js +1 -1
  133. package/lib/types/cfn-resource-types/aws-networkfirewall-firewallpolicy.d.ts +3 -0
  134. package/lib/types/cfn-resource-types/aws-networkfirewall-firewallpolicy.js +1 -1
  135. package/lib/types/cfn-resource-types/aws-organizations-policy.d.ts +2 -2
  136. package/lib/types/cfn-resource-types/aws-organizations-policy.js +1 -1
  137. package/lib/types/cfn-resource-types/aws-qbusiness-webexperience.d.ts +6 -0
  138. package/lib/types/cfn-resource-types/aws-qbusiness-webexperience.js +1 -1
  139. package/lib/types/cfn-resource-types/aws-quicksight-analysis.d.ts +13 -0
  140. package/lib/types/cfn-resource-types/aws-quicksight-analysis.js +1 -1
  141. package/lib/types/cfn-resource-types/aws-quicksight-dashboard.d.ts +13 -0
  142. package/lib/types/cfn-resource-types/aws-quicksight-dashboard.js +1 -1
  143. package/lib/types/cfn-resource-types/aws-quicksight-dataset.d.ts +2 -2
  144. package/lib/types/cfn-resource-types/aws-quicksight-dataset.js +1 -1
  145. package/lib/types/cfn-resource-types/aws-quicksight-datasource.d.ts +247 -242
  146. package/lib/types/cfn-resource-types/aws-quicksight-datasource.js +1 -1
  147. package/lib/types/cfn-resource-types/aws-quicksight-folder.d.ts +79 -0
  148. package/lib/types/cfn-resource-types/aws-quicksight-folder.js +3 -0
  149. package/lib/types/cfn-resource-types/aws-quicksight-template.d.ts +8 -0
  150. package/lib/types/cfn-resource-types/aws-quicksight-template.js +1 -1
  151. package/lib/types/cfn-resource-types/aws-rds-dbcluster.d.ts +366 -366
  152. package/lib/types/cfn-resource-types/aws-rds-dbcluster.js +1 -1
  153. package/lib/types/cfn-resource-types/aws-rds-dbinstance.d.ts +1 -4
  154. package/lib/types/cfn-resource-types/aws-rds-dbinstance.js +1 -1
  155. package/lib/types/cfn-resource-types/aws-rds-globalcluster.d.ts +19 -0
  156. package/lib/types/cfn-resource-types/aws-rds-globalcluster.js +1 -1
  157. package/lib/types/cfn-resource-types/aws-redshift-integration.d.ts +61 -0
  158. package/lib/types/cfn-resource-types/aws-redshift-integration.js +3 -0
  159. package/lib/types/cfn-resource-types/aws-refactorspaces-environment.d.ts +2 -2
  160. package/lib/types/cfn-resource-types/aws-refactorspaces-environment.js +1 -1
  161. package/lib/types/cfn-resource-types/aws-route53profiles-profileassociation.d.ts +1 -1
  162. package/lib/types/cfn-resource-types/aws-route53profiles-profileassociation.js +1 -1
  163. package/lib/types/cfn-resource-types/aws-route53resolver-resolverrule.d.ts +4 -4
  164. package/lib/types/cfn-resource-types/aws-route53resolver-resolverrule.js +1 -1
  165. package/lib/types/cfn-resource-types/aws-s3-bucket.d.ts +599 -591
  166. package/lib/types/cfn-resource-types/aws-s3-bucket.js +1 -1
  167. package/lib/types/cfn-resource-types/aws-s3express-directorybucket.d.ts +34 -3
  168. package/lib/types/cfn-resource-types/aws-s3express-directorybucket.js +1 -1
  169. package/lib/types/cfn-resource-types/aws-sagemaker-domain.d.ts +8 -0
  170. package/lib/types/cfn-resource-types/aws-sagemaker-domain.js +1 -1
  171. package/lib/types/cfn-resource-types/aws-sagemaker-endpoint.d.ts +137 -20
  172. package/lib/types/cfn-resource-types/aws-sagemaker-endpoint.js +1 -1
  173. package/lib/types/cfn-resource-types/aws-secretsmanager-secret.d.ts +1 -1
  174. package/lib/types/cfn-resource-types/aws-secretsmanager-secret.js +1 -1
  175. package/lib/types/cfn-resource-types/aws-securityhub-automationrule.d.ts +4 -4
  176. package/lib/types/cfn-resource-types/aws-securityhub-automationrule.js +1 -1
  177. package/lib/types/cfn-resource-types/aws-securityhub-findingaggregator.d.ts +2 -2
  178. package/lib/types/cfn-resource-types/aws-securityhub-findingaggregator.js +1 -1
  179. package/lib/types/cfn-resource-types/aws-ses-mailmanagerruleset.d.ts +4 -1
  180. package/lib/types/cfn-resource-types/aws-ses-mailmanagerruleset.js +1 -1
  181. package/lib/types/cfn-resource-types/aws-sns-topic.d.ts +2 -6
  182. package/lib/types/cfn-resource-types/aws-sns-topic.js +1 -1
  183. package/lib/types/cfn-resource-types/aws-sqs-queue.d.ts +12 -12
  184. package/lib/types/cfn-resource-types/aws-sqs-queue.js +1 -1
  185. package/lib/types/cfn-resource-types/aws-sqs-queuepolicy.d.ts +1 -3
  186. package/lib/types/cfn-resource-types/aws-sqs-queuepolicy.js +1 -1
  187. package/lib/types/cfn-resource-types/aws-ssmquicksetup-configurationmanager.d.ts +1 -1
  188. package/lib/types/cfn-resource-types/aws-ssmquicksetup-configurationmanager.js +1 -1
  189. package/lib/types/cfn-resource-types/aws-transfer-server.d.ts +70 -36
  190. package/lib/types/cfn-resource-types/aws-transfer-server.js +1 -1
  191. package/lib/types/cfn-resource-types/aws-wisdom-aiprompt.d.ts +34 -0
  192. package/lib/types/cfn-resource-types/aws-wisdom-aiprompt.js +3 -0
  193. package/lib/types/cfn-resource-types/aws-wisdom-knowledgebase.d.ts +1 -1
  194. package/lib/types/cfn-resource-types/aws-wisdom-knowledgebase.js +1 -1
  195. package/lib/types/cfn-resource-types/aws-workspacesweb-identityprovider.d.ts +9 -0
  196. package/lib/types/cfn-resource-types/aws-workspacesweb-identityprovider.js +1 -1
  197. package/lib/types/cfn-resource-types.d.ts +14 -0
  198. package/lib/types/cfn-resource-types.js +40 -26
  199. package/package.json +11 -7
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJkcy1kYmluc3RhbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXJkcy1kYmluc3RhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6UkRTOjpEQkluc3RhbmNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gREIgaW5zdGFuY2UuIFRoZSBuZXcgREIgaW5zdGFuY2UgY2FuIGJlIGFuIFJEUyBEQiBpbnN0YW5jZSwgb3IgaXQgY2FuIGJlIGEgREIgaW5zdGFuY2UgaW4gYW4gQXVyb3JhIERCIGNsdXN0ZXIuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW4gUkRTIERCIGluc3RhbmNlLCBzZWUgW0NyZWF0aW5nIGFuIEFtYXpvbiBSRFMgREIgaW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX0NyZWF0ZURCSW5zdGFuY2UuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIGEgREIgaW5zdGFuY2UgaW4gYW4gQXVyb3JhIERCIGNsdXN0ZXIsIHNlZSBbQ3JlYXRpbmcgYW4gQW1hem9uIEF1cm9yYSBEQiBjbHVzdGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQXVyb3JhLkNyZWF0ZUluc3RhbmNlLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICBJZiB5b3UgaW1wb3J0IGFuIGV4aXN0aW5nIERCIGluc3RhbmNlLCBhbmQgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24gZG9lc24ndCBtYXRjaCB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIERCIGluc3RhbmNlLCBBV1MgQ2xvdWRGb3JtYXRpb24gYXBwbGllcyB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgZHVyaW5nIHRoZSBpbXBvcnQgb3BlcmF0aW9uLlxuICogICBJZiBhIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQgb3IgcmVwbGFjZWQgZHVyaW5nIGFuIHVwZGF0ZSwgQVdTIENsb3VkRm9ybWF0aW9uIGRlbGV0ZXMgYWxsIGF1dG9tYXRlZCBzbmFwc2hvdHMuIEhvd2V2ZXIsIGl0IHJldGFpbnMgbWFudWFsIERCIHNuYXBzaG90cy4gRHVyaW5nIGFuIHVwZGF0ZSB0aGF0IHJlcXVpcmVzIHJlcGxhY2VtZW50LCB5b3UgY2FuIGFwcGx5IGEgc3RhY2sgcG9saWN5IHRvIHByZXZlbnQgREIgaW5zdGFuY2VzIGZyb20gYmVpbmcgcmVwbGFjZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1ByZXZlbnQgVXBkYXRlcyB0byBTdGFjayBSZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3Byb3RlY3Qtc3RhY2stcmVzb3VyY2VzLmh0bWwpLlxuICogICAgKlVwZGF0aW5nIERCIGluc3RhbmNlcyogXG4gKiAgV2hlbiBwcm9wZXJ0aWVzIGxhYmVsZWQgXCIqVXBkYXRlIHJlcXVpcmVzOiogW1JlcGxhY2VtZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS91c2luZy1jZm4tdXBkYXRpbmctc3RhY2tzLXVwZGF0ZS1iZWhhdmlvcnMuaHRtbCN1cGRhdGUtcmVwbGFjZW1lbnQpXCIgYXJlIHVwZGF0ZWQsIEFXUyBDbG91ZEZvcm1hdGlvbiBmaXJzdCBjcmVhdGVzIGEgcmVwbGFjZW1lbnQgREIgaW5zdGFuY2UsIHRoZW4gY2hhbmdlcyByZWZlcmVuY2VzIGZyb20gb3RoZXIgZGVwZW5kZW50IHJlc291cmNlcyB0byBwb2ludCB0byB0aGUgcmVwbGFjZW1lbnQgREIgaW5zdGFuY2UsIGFuZCBmaW5hbGx5IGRlbGV0ZXMgdGhlIG9sZCBEQiBpbnN0YW5jZS5cbiAqICAgV2UgaGlnaGx5IHJlY29tbWVuZCB0aGF0IHlvdSB0YWtlIGEgc25hcHNob3Qgb2YgdGhlIGRhdGFiYXNlIGJlZm9yZSB1cGRhdGluZyB0aGUgc3RhY2suIElmIHlvdSBkb24ndCwgeW91IGxvc2UgdGhlIGRhdGEgd2hlbiBBV1MgQ2xvdWRGb3JtYXRpb24gcmVwbGFjZXMgeW91ciBEQiBpbnN0YW5jZS4gVG8gcHJlc2VydmUgeW91ciBkYXRhLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlOlxuICogICAxLiAgRGVhY3RpdmF0ZSBhbnkgYXBwbGljYXRpb25zIHRoYXQgYXJlIHVzaW5nIHRoZSBEQiBpbnN0YW5jZSBzbyB0aGF0IHRoZXJlJ3Mgbm8gYWN0aXZpdHkgb24gdGhlIERCIGluc3RhbmNlLlxuICogICAxLiAgQ3JlYXRlIGEgc25hcHNob3Qgb2YgdGhlIERCIGluc3RhbmNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBhIERCIFNuYXBzaG90XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9DcmVhdGVTbmFwc2hvdC5odG1sKS5cbiAqICAgMS4gIElmIHlvdSB3YW50IHRvIHJlc3RvcmUgeW91ciBpbnN0YW5jZSB1c2luZyBhIERCIHNuYXBzaG90LCBtb2RpZnkgdGhlIHVwZGF0ZWQgdGVtcGxhdGUgd2l0aCB5b3VyIERCIGluc3RhbmNlIGNoYW5nZXMgYW5kIGFkZCB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5IHdpdGggdGhlIElEIG9mIHRoZSBEQiBzbmFwc2hvdCB0aGF0IHlvdSB3YW50IHRvIHVzZS5cbiAqICBBZnRlciB5b3UgcmVzdG9yZSBhIERCIGluc3RhbmNlIHdpdGggYSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIHlvdSBjYW4gZGVsZXRlIHRoZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkuIFdoZW4geW91IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSBmb3IgYW4gdXBkYXRlLCB0aGUgREIgaW5zdGFuY2UgaXMgbm90IHJlc3RvcmVkIGZyb20gdGhlIERCIHNuYXBzaG90IGFnYWluLCBhbmQgdGhlIGRhdGEgaW4gdGhlIGRhdGFiYXNlIGlzIG5vdCBjaGFuZ2VkLiBIb3dldmVyLCBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBhbiBlbXB0eSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLCBhbmQgdGhlIG9yaWdpbmFsIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQuIElmIHlvdSBzcGVjaWZ5IGEgcHJvcGVydHkgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgc25hcHNob3QgcmVzdG9yZSBwcm9wZXJ0eSwgYSBuZXcgREIgaW5zdGFuY2UgaXMgcmVzdG9yZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgYW5kIHRoZSBvcmlnaW5hbCBEQiBpbnN0YW5jZSBpcyBkZWxldGVkLlxuICogICAxLiAgVXBkYXRlIHRoZSBzdGFjay5cbiAqICAgXG4gKiAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVwZGF0aW5nIG90aGVyIHByb3BlcnRpZXMgb2YgdGhpcyByZXNvdXJjZSwgc2VlIGBgTW9kaWZ5REJJbnN0YW5jZWBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1cGRhdGluZyBzdGFja3MsIHNlZSBbQ2xvdWRGb3JtYXRpb24gU3RhY2tzIFVwZGF0ZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3VzaW5nLWNmbi11cGRhdGluZy1zdGFja3MuaHRtbCkuXG4gKiAgICpEZWxldGluZyBEQiBpbnN0YW5jZXMqIFxuICogIEZvciBEQiBpbnN0YW5jZXMgdGhhdCBhcmUgcGFydCBvZiBhbiBBdXJvcmEgREIgY2x1c3RlciwgeW91IGNhbiBzZXQgYSBkZWxldGlvbiBwb2xpY3kgZm9yIHlvdXIgREIgaW5zdGFuY2UgdG8gY29udHJvbCBob3cgQVdTIENsb3VkRm9ybWF0aW9uIGhhbmRsZXMgdGhlIERCIGluc3RhbmNlIHdoZW4gdGhlIHN0YWNrIGlzIGRlbGV0ZWQuIEZvciBBbWF6b24gUkRTIERCIGluc3RhbmNlcywgeW91IGNhbiBjaG9vc2UgdG8gKnJldGFpbiogdGhlIERCIGluc3RhbmNlLCB0byAqZGVsZXRlKiB0aGUgREIgaW5zdGFuY2UsIG9yIHRvICpjcmVhdGUgYSBzbmFwc2hvdCogb2YgdGhlIERCIGluc3RhbmNlLiBUaGUgZGVmYXVsdCBBV1MgQ2xvdWRGb3JtYXRpb24gYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgYGBEQkNsdXN0ZXJJZGVudGlmaWVyYGAgcHJvcGVydHk6XG4gKiAgIDEuICBGb3IgYGBBV1M6OlJEUzo6REJJbnN0YW5jZWBgIHJlc291cmNlcyB0aGF0IGRvbid0IHNwZWNpZnkgdGhlIGBgREJDbHVzdGVySWRlbnRpZmllcmBgIHByb3BlcnR5LCBBV1MgQ2xvdWRGb3JtYXRpb24gc2F2ZXMgYSBzbmFwc2hvdCBvZiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgIDEuICAgRm9yIGBgQVdTOjpSRFM6OkRCSW5zdGFuY2VgYCByZXNvdXJjZXMgdGhhdCBkbyBzcGVjaWZ5IHRoZSBgYERCQ2x1c3RlcklkZW50aWZpZXJgYCBwcm9wZXJ0eSwgQVdTIENsb3VkRm9ybWF0aW9uIGRlbGV0ZXMgdGhlIERCIGluc3RhbmNlLlxuICogICBcbiAqICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRGVsZXRpb25Qb2xpY3kgQXR0cmlidXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtYXR0cmlidXRlLWRlbGV0aW9ucG9saWN5Lmh0bWwpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfUkRTX0RCSU5TVEFOQ0Uge1xuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHN0b3JhZ2UgaW4gZ2liaWJ5dGVzIChHaUIpIHRvIGJlIGluaXRpYWxseSBhbGxvY2F0ZWQgZm9yIHRoZSBkYXRhYmFzZSBpbnN0YW5jZS5cbiAqICAgSWYgYW55IHZhbHVlIGlzIHNldCBpbiB0aGUgYGBJb3BzYGAgcGFyYW1ldGVyLCBgYEFsbG9jYXRlZFN0b3JhZ2VgYCBtdXN0IGJlIGF0IGxlYXN0IDEwMCBHaUIsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBtaW5pbXVtIElvcHMgdmFsdWUgb2YgMSwwMDAuIElmIHlvdSBpbmNyZWFzZSB0aGUgYGBJb3BzYGAgdmFsdWUgKGluIDEsMDAwIElPUFMgaW5jcmVtZW50cyksIHRoZW4geW91IG11c3QgYWxzbyBpbmNyZWFzZSB0aGUgYGBBbGxvY2F0ZWRTdG9yYWdlYGAgdmFsdWUgKGluIDEwMC1HaUIgaW5jcmVtZW50cykuIFxuICogICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBBdXJvcmEgY2x1c3RlciB2b2x1bWVzIGF1dG9tYXRpY2FsbHkgZ3JvdyBhcyB0aGUgYW1vdW50IG9mIGRhdGEgaW4geW91ciBkYXRhYmFzZSBpbmNyZWFzZXMsIHRob3VnaCB5b3UgYXJlIG9ubHkgY2hhcmdlZCBmb3IgdGhlIHNwYWNlIHRoYXQgeW91IHVzZSBpbiBhbiBBdXJvcmEgY2x1c3RlciB2b2x1bWUuXG4gKiAgICpEYjIqIFxuICogIENvbnN0cmFpbnRzIHRvIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSBmb3IgZWFjaCBzdG9yYWdlIHR5cGUgYXJlIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSAoU1NEKSBzdG9yYWdlIChncDMpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byA2NDAwMC5cbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBzdG9yYWdlIChpbzEpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxMDAgdG8gNjQwMDAuXG4gKiAgIFxuICogICAqTXlTUUwqIFxuICogIENvbnN0cmFpbnRzIHRvIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSBmb3IgZWFjaCBzdG9yYWdlIHR5cGUgYXJlIHRoZSBmb2xsb3dpbmc6IFxuICogICArICBHZW5lcmFsIFB1cnBvc2UgKFNTRCkgc3RvcmFnZSAoZ3AyKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMjAgdG8gNjU1MzYuXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgc3RvcmFnZSAoaW8xKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMTAwIHRvIDY1NTM2LlxuICogICArICBNYWduZXRpYyBzdG9yYWdlIChzdGFuZGFyZCk6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDUgdG8gMzA3Mi5cbiAqICAgXG4gKiAgICpNYXJpYURCKiBcbiAqICBDb25zdHJhaW50cyB0byB0aGUgYW1vdW50IG9mIHN0b3JhZ2UgZm9yIGVhY2ggc3RvcmFnZSB0eXBlIGFyZSB0aGUgZm9sbG93aW5nOiBcbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIChTU0QpIHN0b3JhZ2UgKGdwMik6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDY1NTM2LlxuICogICArICBQcm92aXNpb25lZCBJT1BTIHN0b3JhZ2UgKGlvMSk6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDEwMCB0byA2NTUzNi5cbiAqICAgKyAgTWFnbmV0aWMgc3RvcmFnZSAoc3RhbmRhcmQpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSA1IHRvIDMwNzIuXG4gKiAgIFxuICogICAqUG9zdGdyZVNRTCogXG4gKiAgQ29uc3RyYWludHMgdG8gdGhlIGFtb3VudCBvZiBzdG9yYWdlIGZvciBlYWNoIHN0b3JhZ2UgdHlwZSBhcmUgdGhlIGZvbGxvd2luZzogXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSAoU1NEKSBzdG9yYWdlIChncDIpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byA2NTUzNi5cbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBzdG9yYWdlIChpbzEpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxMDAgdG8gNjU1MzYuXG4gKiAgICsgIE1hZ25ldGljIHN0b3JhZ2UgKHN0YW5kYXJkKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gNSB0byAzMDcyLlxuICogICBcbiAqICAgKk9yYWNsZSogXG4gKiAgQ29uc3RyYWludHMgdG8gdGhlIGFtb3VudCBvZiBzdG9yYWdlIGZvciBlYWNoIHN0b3JhZ2UgdHlwZSBhcmUgdGhlIGZvbGxvd2luZzogXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSAoU1NEKSBzdG9yYWdlIChncDIpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byA2NTUzNi5cbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBzdG9yYWdlIChpbzEpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxMDAgdG8gNjU1MzYuXG4gKiAgICsgIE1hZ25ldGljIHN0b3JhZ2UgKHN0YW5kYXJkKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMTAgdG8gMzA3Mi5cbiAqICAgXG4gKiAgICpTUUwgU2VydmVyKiBcbiAqICBDb25zdHJhaW50cyB0byB0aGUgYW1vdW50IG9mIHN0b3JhZ2UgZm9yIGVhY2ggc3RvcmFnZSB0eXBlIGFyZSB0aGUgZm9sbG93aW5nOiBcbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIChTU0QpIHN0b3JhZ2UgKGdwMik6XG4gKiAgICsgIEVudGVycHJpc2UgYW5kIFN0YW5kYXJkIGVkaXRpb25zOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byAxNjM4NC5cbiAqICAgKyAgV2ViIGFuZCBFeHByZXNzIGVkaXRpb25zOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byAxNjM4NC5cbiAqICAgXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgc3RvcmFnZSAoaW8xKTpcbiAqICAgKyAgRW50ZXJwcmlzZSBhbmQgU3RhbmRhcmQgZWRpdGlvbnM6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDE2Mzg0LlxuICogICArICBXZWIgYW5kIEV4cHJlc3MgZWRpdGlvbnM6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDE2Mzg0LlxuICogICBcbiAqICAgKyAgTWFnbmV0aWMgc3RvcmFnZSAoc3RhbmRhcmQpOlxuICogICArICBFbnRlcnByaXNlIGFuZCBTdGFuZGFyZCBlZGl0aW9uczogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMjAgdG8gMTAyNC5cbiAqICAgKyAgV2ViIGFuZCBFeHByZXNzIGVkaXRpb25zOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byAxMDI0LlxuICovXG5BbGxvY2F0ZWRTdG9yYWdlPzogc3RyaW5nXG4vKipcbiAqIEEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBtYWpvciB2ZXJzaW9uIHVwZ3JhZGVzIGFyZSBhbGxvd2VkLiBDaGFuZ2luZyB0aGlzIHBhcmFtZXRlciBkb2Vzbid0IHJlc3VsdCBpbiBhbiBvdXRhZ2UgYW5kIHRoZSBjaGFuZ2UgaXMgYXN5bmNocm9ub3VzbHkgYXBwbGllZCBhcyBzb29uIGFzIHBvc3NpYmxlLlxuICogIENvbnN0cmFpbnRzOiBNYWpvciB2ZXJzaW9uIHVwZ3JhZGVzIG11c3QgYmUgYWxsb3dlZCB3aGVuIHNwZWNpZnlpbmcgYSB2YWx1ZSBmb3IgdGhlIGBgRW5naW5lVmVyc2lvbmBgIHBhcmFtZXRlciB0aGF0IGlzIGEgZGlmZmVyZW50IG1ham9yIHZlcnNpb24gdGhhbiB0aGUgREIgaW5zdGFuY2UncyBjdXJyZW50IHZlcnNpb24uXG4gKi9cbkFsbG93TWFqb3JWZXJzaW9uVXBncmFkZT86IGJvb2xlYW5cbi8qKlxuICogVGhlIElBTWxvbmcgKElBTSkgcm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBEQiBpbnN0YW5jZS4gXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIGFzc29jaWF0ZWQgcm9sZXMgYXJlIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKi9cbkFzc29jaWF0ZWRSb2xlcz86IERCSW5zdGFuY2VSb2xlW11cbi8qKlxuICogQSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIG1pbm9yIGVuZ2luZSB1cGdyYWRlcyBhcmUgYXBwbGllZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSBEQiBpbnN0YW5jZSBkdXJpbmcgdGhlIG1haW50ZW5hbmNlIHdpbmRvdy4gQnkgZGVmYXVsdCwgbWlub3IgZW5naW5lIHVwZ3JhZGVzIGFyZSBhcHBsaWVkIGF1dG9tYXRpY2FsbHkuXG4gKi9cbkF1dG9NaW5vclZlcnNpb25VcGdyYWRlPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgQVdTLVJlZ2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGF1dG9tYXRlZCBiYWNrdXAuXG4gKi9cbkF1dG9tYXRpY0JhY2t1cFJlcGxpY2F0aW9uUmVnaW9uPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBV1MgS01TIGtleSBpZGVudGlmaWVyIGZvciBlbmNyeXB0aW9uIG9mIHRoZSByZXBsaWNhdGVkIGF1dG9tYXRlZCBiYWNrdXBzLiBUaGUgS01TIGtleSBJRCBpcyB0aGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgZm9yIHRoZSBLTVMgZW5jcnlwdGlvbiBrZXkgaW4gdGhlIGRlc3RpbmF0aW9uIEFXUy1SZWdpb24sIGZvciBleGFtcGxlLCBgYGFybjphd3M6a21zOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6a2V5L0FLSUFJT1NGT0ROTjdFWEFNUExFYGAuXG4gKi9cbkF1dG9tYXRpY0JhY2t1cFJlcGxpY2F0aW9uS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIEF2YWlsYWJpbGl0eSBab25lIChBWikgd2hlcmUgdGhlIGRhdGFiYXNlIHdpbGwgYmUgY3JlYXRlZC4gRm9yIGluZm9ybWF0aW9uIG9uIEFXUy1SZWdpb25zIGFuZCBBdmFpbGFiaWxpdHkgWm9uZXMsIHNlZSBbUmVnaW9ucyBhbmQgQXZhaWxhYmlsaXR5IFpvbmVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ29uY2VwdHMuUmVnaW9uc0FuZEF2YWlsYWJpbGl0eVpvbmVzLmh0bWwpLlxuICogIEZvciBBbWF6b24gQXVyb3JhLCBlYWNoIEF1cm9yYSBEQiBjbHVzdGVyIGhvc3RzIGNvcGllcyBvZiBpdHMgc3RvcmFnZSBpbiB0aHJlZSBzZXBhcmF0ZSBBdmFpbGFiaWxpdHkgWm9uZXMuIFNwZWNpZnkgb25lIG9mIHRoZXNlIEF2YWlsYWJpbGl0eSBab25lcy4gQXVyb3JhIGF1dG9tYXRpY2FsbHkgY2hvb3NlcyBhbiBhcHByb3ByaWF0ZSBBdmFpbGFiaWxpdHkgWm9uZSBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBvbmUuXG4gKiAgRGVmYXVsdDogQSByYW5kb20sIHN5c3RlbS1jaG9zZW4gQXZhaWxhYmlsaXR5IFpvbmUgaW4gdGhlIGVuZHBvaW50J3MgQVdTLVJlZ2lvbi5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgVGhlIGBgQXZhaWxhYmlsaXR5Wm9uZWBgIHBhcmFtZXRlciBjYW4ndCBiZSBzcGVjaWZpZWQgaWYgdGhlIERCIGluc3RhbmNlIGlzIGEgTXVsdGktQVogZGVwbG95bWVudC5cbiAqICAgKyAgVGhlIHNwZWNpZmllZCBBdmFpbGFiaWxpdHkgWm9uZSBtdXN0IGJlIGluIHRoZSBzYW1lIEFXUy1SZWdpb24gYXMgdGhlIGN1cnJlbnQgZW5kcG9pbnQuXG4gKiAgIFxuICogIEV4YW1wbGU6IGBgdXMtZWFzdC0xZGBgXG4gKi9cbkF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG51bWJlciBvZiBkYXlzIGZvciB3aGljaCBhdXRvbWF0ZWQgYmFja3VwcyBhcmUgcmV0YWluZWQuIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gYSBwb3NpdGl2ZSBudW1iZXIgZW5hYmxlcyBiYWNrdXBzLiBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDAgZGlzYWJsZXMgYXV0b21hdGVkIGJhY2t1cHMuXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIHJldGVudGlvbiBwZXJpb2QgZm9yIGF1dG9tYXRlZCBiYWNrdXBzIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKiAgRGVmYXVsdDogMVxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIGEgdmFsdWUgZnJvbSAwIHRvIDM1XG4gKiAgICsgIENhbid0IGJlIHNldCB0byAwIGlmIHRoZSBEQiBpbnN0YW5jZSBpcyBhIHNvdXJjZSB0byByZWFkIHJlcGxpY2FzXG4gKi9cbkJhY2t1cFJldGVudGlvblBlcmlvZD86IG51bWJlclxuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgQ0EgY2VydGlmaWNhdGUgZm9yIHRoaXMgREIgaW5zdGFuY2UuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgU1NML1RMUyB0byBlbmNyeXB0IGEgY29ubmVjdGlvbiB0byBhIERCIGluc3RhbmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVXNpbmdXaXRoUkRTLlNTTC5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSogYW5kIFtVc2luZyBTU0wvVExTIHRvIGVuY3J5cHQgYSBjb25uZWN0aW9uIHRvIGEgREIgY2x1c3Rlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL1VzaW5nV2l0aFJEUy5TU0wuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICovXG5DQUNlcnRpZmljYXRlSWRlbnRpZmllcj86IHN0cmluZ1xuQ2VydGlmaWNhdGVEZXRhaWxzPzogQ2VydGlmaWNhdGVEZXRhaWxzXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBEQiBpbnN0YW5jZSBpcyByZXN0YXJ0ZWQgd2hlbiB5b3Ugcm90YXRlIHlvdXIgU1NML1RMUyBjZXJ0aWZpY2F0ZS5cbiAqICBCeSBkZWZhdWx0LCB0aGUgREIgaW5zdGFuY2UgaXMgcmVzdGFydGVkIHdoZW4geW91IHJvdGF0ZSB5b3VyIFNTTC9UTFMgY2VydGlmaWNhdGUuIFRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgdXBkYXRlZCB1bnRpbCB0aGUgREIgaW5zdGFuY2UgaXMgcmVzdGFydGVkLlxuICogICBTZXQgdGhpcyBwYXJhbWV0ZXIgb25seSBpZiB5b3UgYXJlICpub3QqIHVzaW5nIFNTTC9UTFMgdG8gY29ubmVjdCB0byB0aGUgREIgaW5zdGFuY2UuXG4gKiAgIElmIHlvdSBhcmUgdXNpbmcgU1NML1RMUyB0byBjb25uZWN0IHRvIHRoZSBEQiBpbnN0YW5jZSwgZm9sbG93IHRoZSBhcHByb3ByaWF0ZSBpbnN0cnVjdGlvbnMgZm9yIHlvdXIgREIgZW5naW5lIHRvIHJvdGF0ZSB5b3VyIFNTTC9UTFMgY2VydGlmaWNhdGU6XG4gKiAgICsgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHJvdGF0aW5nIHlvdXIgU1NML1RMUyBjZXJ0aWZpY2F0ZSBmb3IgUkRTIERCIGVuZ2luZXMsIHNlZSBbUm90YXRpbmcgWW91ciBTU0wvVExTIENlcnRpZmljYXRlLl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VzaW5nV2l0aFJEUy5TU0wtY2VydGlmaWNhdGUtcm90YXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKiBcbiAqICAgKyAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcm90YXRpbmcgeW91ciBTU0wvVExTIGNlcnRpZmljYXRlIGZvciBBdXJvcmEgREIgZW5naW5lcywgc2VlIFtSb3RhdGluZyBZb3VyIFNTTC9UTFMgQ2VydGlmaWNhdGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9Vc2luZ1dpdGhSRFMuU1NMLWNlcnRpZmljYXRlLXJvdGF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICAgXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZXMuXG4gKi9cbkNlcnRpZmljYXRlUm90YXRpb25SZXN0YXJ0PzogYm9vbGVhblxuLyoqXG4gKiBGb3Igc3VwcG9ydGVkIGVuZ2luZXMsIGluZGljYXRlcyB0aGF0IHRoZSBEQiBpbnN0YW5jZSBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIHNldC5cbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBUaGUgY2hhcmFjdGVyIHNldCBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBV1M6OlJEUzo6REJDbHVzdGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtcmRzLWRiY2x1c3Rlci5odG1sKS5cbiAqL1xuQ2hhcmFjdGVyU2V0TmFtZT86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byBjb3B5IHRhZ3MgZnJvbSB0aGUgREIgaW5zdGFuY2UgdG8gc25hcHNob3RzIG9mIHRoZSBEQiBpbnN0YW5jZS4gQnkgZGVmYXVsdCwgdGFncyBhcmUgbm90IGNvcGllZC5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBBbWF6b24gQXVyb3JhIERCIGluc3RhbmNlcy4gQ29weWluZyB0YWdzIHRvIHNuYXBzaG90cyBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLiBTZXR0aW5nIHRoaXMgdmFsdWUgZm9yIGFuIEF1cm9yYSBEQiBpbnN0YW5jZSBoYXMgbm8gZWZmZWN0IG9uIHRoZSBEQiBjbHVzdGVyIHNldHRpbmcuXG4gKi9cbkNvcHlUYWdzVG9TbmFwc2hvdD86IGJvb2xlYW5cbi8qKlxuICogVGhlIGluc3RhbmNlIHByb2ZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1bmRlcmx5aW5nIEFtYXpvbiBFQzIgaW5zdGFuY2Ugb2YgYW4gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZS5cbiAqICBUaGlzIHNldHRpbmcgaXMgcmVxdWlyZWQgZm9yIFJEUyBDdXN0b20uXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIFRoZSBwcm9maWxlIG11c3QgZXhpc3QgaW4geW91ciBhY2NvdW50LlxuICogICArICBUaGUgcHJvZmlsZSBtdXN0IGhhdmUgYW4gSUFNIHJvbGUgdGhhdCBBbWF6b24gRUMyIGhhcyBwZXJtaXNzaW9ucyB0byBhc3N1bWUuXG4gKiAgICsgIFRoZSBpbnN0YW5jZSBwcm9maWxlIG5hbWUgYW5kIHRoZSBhc3NvY2lhdGVkIElBTSByb2xlIG5hbWUgbXVzdCBzdGFydCB3aXRoIHRoZSBwcmVmaXggYGBBV1NSRFNDdXN0b21gYC5cbiAqICAgXG4gKiAgRm9yIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciB0aGUgSUFNIHJvbGUsIHNlZSBbQ29uZmlndXJlIElBTSBhbmQgeW91ciBWUENdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9jdXN0b20tc2V0dXAtb3JjbC5odG1sI2N1c3RvbS1zZXR1cC1vcmNsLmlhbS12cGMpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqL1xuQ3VzdG9tSUFNSW5zdGFuY2VQcm9maWxlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBEQiBjbHVzdGVyIHRoYXQgdGhpcyBEQiBpbnN0YW5jZSB3aWxsIGJlbG9uZyB0by5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqL1xuREJDbHVzdGVySWRlbnRpZmllcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIE11bHRpLUFaIERCIGNsdXN0ZXIgc25hcHNob3QgdG8gcmVzdG9yZSBmcm9tLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE11bHRpLUFaIERCIGNsdXN0ZXJzLCBzZWUgW011bHRpLUFaIERCIGNsdXN0ZXIgZGVwbG95bWVudHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9tdWx0aS1hei1kYi1jbHVzdGVycy1jb25jZXB0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgbWF0Y2ggdGhlIGlkZW50aWZpZXIgb2YgYW4gZXhpc3RpbmcgTXVsdGktQVogREIgY2x1c3RlciBzbmFwc2hvdC5cbiAqICAgKyAgQ2FuJ3QgYmUgc3BlY2lmaWVkIHdoZW4gYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIGlzIHNwZWNpZmllZC5cbiAqICAgKyAgTXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgaXNuJ3Qgc3BlY2lmaWVkLlxuICogICArICBJZiB5b3UgYXJlIHJlc3RvcmluZyBmcm9tIGEgc2hhcmVkIG1hbnVhbCBNdWx0aS1BWiBEQiBjbHVzdGVyIHNuYXBzaG90LCB0aGUgYGBEQkNsdXN0ZXJTbmFwc2hvdElkZW50aWZpZXJgYCBtdXN0IGJlIHRoZSBBUk4gb2YgdGhlIHNoYXJlZCBzbmFwc2hvdC5cbiAqICAgKyAgQ2FuJ3QgYmUgdGhlIGlkZW50aWZpZXIgb2YgYW4gQXVyb3JhIERCIGNsdXN0ZXIgc25hcHNob3QuXG4gKi9cbkRCQ2x1c3RlclNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZ1xuREJJbnN0YW5jZUFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgY29tcHV0ZSBhbmQgbWVtb3J5IGNhcGFjaXR5IG9mIHRoZSBEQiBpbnN0YW5jZSwgZm9yIGV4YW1wbGUgYGBkYi5tNS5sYXJnZWBgLiBOb3QgYWxsIERCIGluc3RhbmNlIGNsYXNzZXMgYXJlIGF2YWlsYWJsZSBpbiBhbGwgQVdTLVJlZ2lvbnMsIG9yIGZvciBhbGwgZGF0YWJhc2UgZW5naW5lcy4gRm9yIHRoZSBmdWxsIGxpc3Qgb2YgREIgaW5zdGFuY2UgY2xhc3NlcywgYW5kIGF2YWlsYWJpbGl0eSBmb3IgeW91ciBlbmdpbmUsIHNlZSBbREIgaW5zdGFuY2UgY2xhc3Nlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NvbmNlcHRzLkRCSW5zdGFuY2VDbGFzcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSogb3IgW0F1cm9yYSBEQiBpbnN0YW5jZSBjbGFzc2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQ29uY2VwdHMuREJJbnN0YW5jZUNsYXNzLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqL1xuREJJbnN0YW5jZUNsYXNzPzogc3RyaW5nXG4vKipcbiAqIEEgbmFtZSBmb3IgdGhlIERCIGluc3RhbmNlLiBJZiB5b3Ugc3BlY2lmeSBhIG5hbWUsIEFXUyBDbG91ZEZvcm1hdGlvbiBjb252ZXJ0cyBpdCB0byBsb3dlcmNhc2UuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgbmFtZSwgQVdTIENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlcyBhIHVuaXF1ZSBwaHlzaWNhbCBJRCBhbmQgdXNlcyB0aGF0IElEIGZvciB0aGUgREIgaW5zdGFuY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW05hbWUgVHlwZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtbmFtZS5odG1sKS5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY29uc3RyYWludHMgdGhhdCBhcHBseSB0byBEQiBpbnN0YW5jZSBpZGVudGlmaWVycywgc2VlIFtOYW1pbmcgY29uc3RyYWludHMgaW4gQW1hem9uIFJEU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfTGltaXRzLmh0bWwjUkRTX0xpbWl0cy5Db25zdHJhaW50cykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogICBJZiB5b3Ugc3BlY2lmeSBhIG5hbWUsIHlvdSBjYW4ndCBwZXJmb3JtIHVwZGF0ZXMgdGhhdCByZXF1aXJlIHJlcGxhY2VtZW50IG9mIHRoaXMgcmVzb3VyY2UuIFlvdSBjYW4gcGVyZm9ybSB1cGRhdGVzIHRoYXQgcmVxdWlyZSBubyBvciBzb21lIGludGVycnVwdGlvbi4gSWYgeW91IG11c3QgcmVwbGFjZSB0aGUgcmVzb3VyY2UsIHNwZWNpZnkgYSBuZXcgbmFtZS5cbiAqL1xuREJJbnN0YW5jZUlkZW50aWZpZXI/OiBzdHJpbmdcbkRiaVJlc291cmNlSWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIG1lYW5pbmcgb2YgdGhpcyBwYXJhbWV0ZXIgZGlmZmVycyBhY2NvcmRpbmcgdG8gdGhlIGRhdGFiYXNlIGVuZ2luZSB5b3UgdXNlLlxuICogICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCB0aGlzIHByb3BlcnR5IG9ubHkgYXBwbGllcyB0byBSRFMgZm9yIE9yYWNsZS5cbiAqICAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIGRhdGFiYXNlIG5hbWUgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqICAgKkRiMiogXG4gKiAgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIHRvIGNyZWF0ZSB3aGVuIHRoZSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLiBJZiB0aGlzIHBhcmFtZXRlciBpc24ndCBzcGVjaWZpZWQsIG5vIGRhdGFiYXNlIGlzIGNyZWF0ZWQgaW4gdGhlIERCIGluc3RhbmNlLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGNvbnRhaW4gMSB0byA2NCBsZXR0ZXJzIG9yIG51bWJlcnMuXG4gKiAgICsgIE11c3QgYmVnaW4gd2l0aCBhIGxldHRlci4gU3Vic2VxdWVudCBjaGFyYWN0ZXJzIGNhbiBiZSBsZXR0ZXJzLCB1bmRlcnNjb3Jlcywgb3IgZGlnaXRzICgwLTkpLlxuICogICArICBDYW4ndCBiZSBhIHdvcmQgcmVzZXJ2ZWQgYnkgdGhlIHNwZWNpZmllZCBkYXRhYmFzZSBlbmdpbmUuXG4gKiAgIFxuICogICAqTXlTUUwqIFxuICogIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0byBjcmVhdGUgd2hlbiB0aGUgREIgaW5zdGFuY2UgaXMgY3JlYXRlZC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgbm8gZGF0YWJhc2UgaXMgY3JlYXRlZCBpbiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgY29udGFpbiAxIHRvIDY0IGxldHRlcnMgb3IgbnVtYmVycy5cbiAqICAgKyAgQ2FuJ3QgYmUgYSB3b3JkIHJlc2VydmVkIGJ5IHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UgZW5naW5lXG4gKiAgIFxuICogICAqTWFyaWFEQiogXG4gKiAgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIHRvIGNyZWF0ZSB3aGVuIHRoZSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCBubyBkYXRhYmFzZSBpcyBjcmVhdGVkIGluIHRoZSBEQiBpbnN0YW5jZS5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBjb250YWluIDEgdG8gNjQgbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBDYW4ndCBiZSBhIHdvcmQgcmVzZXJ2ZWQgYnkgdGhlIHNwZWNpZmllZCBkYXRhYmFzZSBlbmdpbmVcbiAqICAgXG4gKiAgICpQb3N0Z3JlU1FMKiBcbiAqICBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgdG8gY3JlYXRlIHdoZW4gdGhlIERCIGluc3RhbmNlIGlzIGNyZWF0ZWQuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGBgcG9zdGdyZXNgYCBkYXRhYmFzZSBpcyBjcmVhdGVkIGluIHRoZSBEQiBpbnN0YW5jZS5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyLiBTdWJzZXF1ZW50IGNoYXJhY3RlcnMgY2FuIGJlIGxldHRlcnMsIHVuZGVyc2NvcmVzLCBvciBkaWdpdHMgKDAtOSkuXG4gKiAgICsgIE11c3QgY29udGFpbiAxIHRvIDYzIGNoYXJhY3RlcnMuXG4gKiAgICsgIENhbid0IGJlIGEgd29yZCByZXNlcnZlZCBieSB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlIGVuZ2luZVxuICogICBcbiAqICAgKk9yYWNsZSogXG4gKiAgVGhlIE9yYWNsZSBTeXN0ZW0gSUQgKFNJRCkgb2YgdGhlIGNyZWF0ZWQgREIgaW5zdGFuY2UuIElmIHlvdSBzcGVjaWZ5IGBgbnVsbGBgLCB0aGUgZGVmYXVsdCB2YWx1ZSBgYE9SQ0xgYCBpcyB1c2VkLiBZb3UgY2FuJ3Qgc3BlY2lmeSB0aGUgc3RyaW5nIE5VTEwsIG9yIGFueSBvdGhlciByZXNlcnZlZCB3b3JkLCBmb3IgYGBEQk5hbWVgYC4gXG4gKiAgRGVmYXVsdDogYGBPUkNMYGAgXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIENhbid0IGJlIGxvbmdlciB0aGFuIDggY2hhcmFjdGVyc1xuICogICBcbiAqICAgKlNRTCBTZXJ2ZXIqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBNdXN0IGJlIG51bGwuXG4gKi9cbkRCTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiBhbiBleGlzdGluZyBEQiBwYXJhbWV0ZXIgZ3JvdXAgb3IgYSByZWZlcmVuY2UgdG8gYW4gW0FXUzo6UkRTOjpEQlBhcmFtZXRlckdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZHMtZGJwYXJhbWV0ZXJncm91cC5odG1sKSByZXNvdXJjZSBjcmVhdGVkIGluIHRoZSB0ZW1wbGF0ZS5cbiAqICBUbyBsaXN0IGFsbCBvZiB0aGUgYXZhaWxhYmxlIERCIHBhcmFtZXRlciBncm91cCBuYW1lcywgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAqICAgYGBhd3MgcmRzIGRlc2NyaWJlLWRiLXBhcmFtZXRlci1ncm91cHMgLS1xdWVyeSBcIkRCUGFyYW1ldGVyR3JvdXBzW10uREJQYXJhbWV0ZXJHcm91cE5hbWVcIiAtLW91dHB1dCB0ZXh0YGAgXG4gKiAgIElmIGFueSBvZiB0aGUgZGF0YSBtZW1iZXJzIG9mIHRoZSByZWZlcmVuY2VkIHBhcmFtZXRlciBncm91cCBhcmUgY2hhbmdlZCBkdXJpbmcgYW4gdXBkYXRlLCB0aGUgREIgaW5zdGFuY2UgbWlnaHQgbmVlZCB0byBiZSByZXN0YXJ0ZWQsIHdoaWNoIGNhdXNlcyBzb21lIGludGVycnVwdGlvbi4gSWYgdGhlIHBhcmFtZXRlciBncm91cCBjb250YWlucyBzdGF0aWMgcGFyYW1ldGVycywgd2hldGhlciB0aGV5IHdlcmUgY2hhbmdlZCBvciBub3QsIGFuIHVwZGF0ZSB0cmlnZ2VycyBhIHJlYm9vdC5cbiAqICAgSWYgeW91IGRvbid0IHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBEQlBhcmFtZXRlckdyb3VwTmFtZWBgIHByb3BlcnR5LCB0aGUgZGVmYXVsdCBEQiBwYXJhbWV0ZXIgZ3JvdXAgZm9yIHRoZSBzcGVjaWZpZWQgZW5naW5lIGFuZCBlbmdpbmUgdmVyc2lvbiBpcyB1c2VkLlxuICovXG5EQlBhcmFtZXRlckdyb3VwTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBBIGxpc3Qgb2YgdGhlIERCIHNlY3VyaXR5IGdyb3VwcyB0byBhc3NpZ24gdG8gdGhlIERCIGluc3RhbmNlLiBUaGUgbGlzdCBjYW4gaW5jbHVkZSBib3RoIHRoZSBuYW1lIG9mIGV4aXN0aW5nIERCIHNlY3VyaXR5IGdyb3VwcyBvciByZWZlcmVuY2VzIHRvIEFXUzo6UkRTOjpEQlNlY3VyaXR5R3JvdXAgcmVzb3VyY2VzIGNyZWF0ZWQgaW4gdGhlIHRlbXBsYXRlLlxuICogICBJZiB5b3Ugc2V0IERCU2VjdXJpdHlHcm91cHMsIHlvdSBtdXN0IG5vdCBzZXQgVlBDU2VjdXJpdHlHcm91cHMsIGFuZCB2aWNlIHZlcnNhLiBBbHNvLCBub3RlIHRoYXQgdGhlIERCU2VjdXJpdHlHcm91cHMgcHJvcGVydHkgZXhpc3RzIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgcmVnaW9ucyBhbmQgaXMgbm8gbG9uZ2VyIHJlY29tbWVuZGVkIGZvciBwcm92aWRpbmcgc2VjdXJpdHkgaW5mb3JtYXRpb24gdG8gYW4gUkRTIERCIGluc3RhbmNlLiBJbnN0ZWFkLCB1c2UgVlBDU2VjdXJpdHlHcm91cHMuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIEFXUyBDbG91ZEZvcm1hdGlvbiBzZW5kcyBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyAoaWYgc3BlY2lmaWVkKSB0byBBbWF6b24gUkRTIGR1cmluZyBjcmVhdGUgb3BlcmF0aW9uczpcbiAqICAgKyAgIGBgQWxsb2NhdGVkU3RvcmFnZWBgIFxuICogICArICAgYGBBdXRvTWlub3JWZXJzaW9uVXBncmFkZWBgIFxuICogICArICAgYGBBdmFpbGFiaWxpdHlab25lYGAgXG4gKiAgICsgICBgYEJhY2t1cFJldGVudGlvblBlcmlvZGBgIFxuICogICArICAgYGBDaGFyYWN0ZXJTZXROYW1lYGAgXG4gKiAgICsgICBgYERCSW5zdGFuY2VDbGFzc2BgIFxuICogICArICAgYGBEQk5hbWVgYCBcbiAqICAgKyAgIGBgREJQYXJhbWV0ZXJHcm91cE5hbWVgYCBcbiAqICAgKyAgIGBgREJTZWN1cml0eUdyb3Vwc2BgIFxuICogICArICAgYGBEQlN1Ym5ldEdyb3VwTmFtZWBgIFxuICogICArICAgYGBFbmdpbmVgYCBcbiAqICAgKyAgIGBgRW5naW5lVmVyc2lvbmBgIFxuICogICArICAgYGBJb3BzYGAgXG4gKiAgICsgICBgYExpY2Vuc2VNb2RlbGBgIFxuICogICArICAgYGBNYXN0ZXJVc2VybmFtZWBgIFxuICogICArICAgYGBNYXN0ZXJVc2VyUGFzc3dvcmRgYCBcbiAqICAgKyAgIGBgTXVsdGlBWmBgIFxuICogICArICAgYGBPcHRpb25Hcm91cE5hbWVgYCBcbiAqICAgKyAgIGBgUHJlZmVycmVkQmFja3VwV2luZG93YGAgXG4gKiAgICsgICBgYFByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93YGAgXG4gKiAgIFxuICogIEFsbCBvdGhlciBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVkLiBTcGVjaWZ5IGEgdmlydHVhbCBwcml2YXRlIGNsb3VkIChWUEMpIHNlY3VyaXR5IGdyb3VwIGlmIHlvdSB3YW50IHRvIHN1Ym1pdCBvdGhlciBwcm9wZXJ0aWVzLCBzdWNoIGFzIGBgU3RvcmFnZVR5cGVgYCwgYGBTdG9yYWdlRW5jcnlwdGVkYGAsIG9yIGBgS21zS2V5SWRgYC4gSWYgeW91J3JlIGFscmVhZHkgdXNpbmcgdGhlIGBgREJTZWN1cml0eUdyb3Vwc2BgIHByb3BlcnR5LCB5b3UgY2FuJ3QgdXNlIHRoZXNlIG90aGVyIHByb3BlcnRpZXMgYnkgdXBkYXRpbmcgeW91ciBEQiBpbnN0YW5jZSB0byB1c2UgYSBWUEMgc2VjdXJpdHkgZ3JvdXAuIFlvdSBtdXN0IHJlY3JlYXRlIHRoZSBEQiBpbnN0YW5jZS5cbiAqL1xuREJTZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBuYW1lIG9yIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBEQiBzbmFwc2hvdCB0aGF0J3MgdXNlZCB0byByZXN0b3JlIHRoZSBEQiBpbnN0YW5jZS4gSWYgeW91J3JlIHJlc3RvcmluZyBmcm9tIGEgc2hhcmVkIG1hbnVhbCBEQiBzbmFwc2hvdCwgeW91IG11c3Qgc3BlY2lmeSB0aGUgQVJOIG9mIHRoZSBzbmFwc2hvdC5cbiAqICBCeSBzcGVjaWZ5aW5nIHRoaXMgcHJvcGVydHksIHlvdSBjYW4gY3JlYXRlIGEgREIgaW5zdGFuY2UgZnJvbSB0aGUgc3BlY2lmaWVkIERCIHNuYXBzaG90LiBJZiB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5IGlzIGFuIGVtcHR5IHN0cmluZyBvciB0aGUgYGBBV1M6OlJEUzo6REJJbnN0YW5jZWBgIGRlY2xhcmF0aW9uIGhhcyBubyBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIGEgbmV3IGRhdGFiYXNlLiBJZiB0aGUgcHJvcGVydHkgY29udGFpbnMgYSB2YWx1ZSAob3RoZXIgdGhhbiBhbiBlbXB0eSBzdHJpbmcpLCBBV1MgQ2xvdWRGb3JtYXRpb24gY3JlYXRlcyBhIGRhdGFiYXNlIGZyb20gdGhlIHNwZWNpZmllZCBzbmFwc2hvdC4gSWYgYSBzbmFwc2hvdCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBkb2Vzbid0IGV4aXN0LCBBV1MgQ2xvdWRGb3JtYXRpb24gY2FuJ3QgY3JlYXRlIHRoZSBkYXRhYmFzZSBhbmQgaXQgcm9sbHMgYmFjayB0aGUgc3RhY2suXG4gKiAgU29tZSBEQiBpbnN0YW5jZSBwcm9wZXJ0aWVzIGFyZW4ndCB2YWxpZCB3aGVuIHlvdSByZXN0b3JlIGZyb20gYSBzbmFwc2hvdCwgc3VjaCBhcyB0aGUgYGBNYXN0ZXJVc2VybmFtZWBgIGFuZCBgYE1hc3RlclVzZXJQYXNzd29yZGBgIHByb3BlcnRpZXMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvcGVydGllcyB0aGF0IHlvdSBjYW4gc3BlY2lmeSwgc2VlIHRoZSBgYFJlc3RvcmVEQkluc3RhbmNlRnJvbURCU25hcHNob3RgYCBhY3Rpb24gaW4gdGhlICpBbWF6b24gUkRTIEFQSSBSZWZlcmVuY2UqLlxuICogIEFmdGVyIHlvdSByZXN0b3JlIGEgREIgaW5zdGFuY2Ugd2l0aCBhIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgeW91IG11c3Qgc3BlY2lmeSB0aGUgc2FtZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkgZm9yIGFueSBmdXR1cmUgdXBkYXRlcyB0byB0aGUgREIgaW5zdGFuY2UuIFdoZW4geW91IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSBmb3IgYW4gdXBkYXRlLCB0aGUgREIgaW5zdGFuY2UgaXMgbm90IHJlc3RvcmVkIGZyb20gdGhlIERCIHNuYXBzaG90IGFnYWluLCBhbmQgdGhlIGRhdGEgaW4gdGhlIGRhdGFiYXNlIGlzIG5vdCBjaGFuZ2VkLiBIb3dldmVyLCBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBhbiBlbXB0eSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLCBhbmQgdGhlIG9yaWdpbmFsIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQuIElmIHlvdSBzcGVjaWZ5IGEgcHJvcGVydHkgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgc25hcHNob3QgcmVzdG9yZSBwcm9wZXJ0eSwgYSBuZXcgREIgaW5zdGFuY2UgaXMgcmVzdG9yZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgYW5kIHRoZSBvcmlnaW5hbCBEQiBpbnN0YW5jZSBpcyBkZWxldGVkLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkgdG8gcmVzdG9yZSBhIERCIGluc3RhbmNlIChhcyBvcHBvc2VkIHRvIHNwZWNpZnlpbmcgaXQgZm9yIERCIGluc3RhbmNlIHVwZGF0ZXMpLCB0aGVuIGRvbid0IHNwZWNpZnkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICArICAgYGBDaGFyYWN0ZXJTZXROYW1lYGAgXG4gKiAgICsgICBgYERCQ2x1c3RlcklkZW50aWZpZXJgYCBcbiAqICAgKyAgIGBgREJOYW1lYGAgXG4gKiAgICsgICBgYERlbGV0ZUF1dG9tYXRlZEJhY2t1cHNgYCBcbiAqICAgKyAgIGBgS21zS2V5SWRgYCBcbiAqICAgKyAgIGBgTWFzdGVyVXNlcm5hbWVgYCBcbiAqICAgKyAgIGBgTWFzdGVyVXNlclBhc3N3b3JkYGAgXG4gKiAgICsgICBgYFBlcmZvcm1hbmNlSW5zaWdodHNLTVNLZXlJZGBgIFxuICogICArICAgYGBQZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uUGVyaW9kYGAgXG4gKiAgICsgICBgYFByb21vdGlvblRpZXJgYCBcbiAqICAgKyAgIGBgU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXJgYCBcbiAqICAgKyAgIGBgU291cmNlUmVnaW9uYGAgXG4gKiAgICsgICBgYFN0b3JhZ2VFbmNyeXB0ZWRgYCAoZm9yIGFuIGVuY3J5cHRlZCBzbmFwc2hvdClcbiAqICAgKyAgIGBgVGltZXpvbmVgYCBcbiAqICAgXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gU25hcHNob3QgcmVzdG9yZSBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICovXG5EQlNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZ1xuLyoqXG4gKiBBIERCIHN1Ym5ldCBncm91cCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgREIgaW5zdGFuY2UuIElmIHlvdSB1cGRhdGUgdGhpcyB2YWx1ZSwgdGhlIG5ldyBzdWJuZXQgZ3JvdXAgbXVzdCBiZSBhIHN1Ym5ldCBncm91cCBpbiBhIG5ldyBWUEMuIFxuICogIElmIHRoZXJlJ3Mgbm8gREIgc3VibmV0IGdyb3VwLCB0aGVuIHRoZSBEQiBpbnN0YW5jZSBpc24ndCBhIFZQQyBEQiBpbnN0YW5jZS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyBBbWF6b24gUkRTIGluIGEgVlBDLCBzZWUgW0FtYXpvbiBWUEMgYW5kIEFtYXpvbiBSRFNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1ZQQy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouIFxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIEFtYXpvbiBBdXJvcmEgREIgaW5zdGFuY2VzLiBUaGUgREIgc3VibmV0IGdyb3VwIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuIElmIHNwZWNpZmllZCwgdGhlIHNldHRpbmcgbXVzdCBtYXRjaCB0aGUgREIgY2x1c3RlciBzZXR0aW5nLlxuICovXG5EQlN1Ym5ldEdyb3VwTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgT3JhY2xlIHN5c3RlbSBpZGVudGlmaWVyIChTSUQpLCB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUgT3JhY2xlIGRhdGFiYXNlIGluc3RhbmNlIHRoYXQgbWFuYWdlcyB5b3VyIGRhdGFiYXNlIGZpbGVzLiBJbiB0aGlzIGNvbnRleHQsIHRoZSB0ZXJtIFwiT3JhY2xlIGRhdGFiYXNlIGluc3RhbmNlXCIgcmVmZXJzIGV4Y2x1c2l2ZWx5IHRvIHRoZSBzeXN0ZW0gZ2xvYmFsIGFyZWEgKFNHQSkgYW5kIE9yYWNsZSBiYWNrZ3JvdW5kIHByb2Nlc3Nlcy4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBTSUQsIHRoZSB2YWx1ZSBkZWZhdWx0cyB0byBgYFJEU0NEQmBgLiBUaGUgT3JhY2xlIFNJRCBpcyBhbHNvIHRoZSBuYW1lIG9mIHlvdXIgQ0RCLlxuICovXG5EQlN5c3RlbUlkPzogc3RyaW5nXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBEQiBpbnN0YW5jZSBoYXMgYSBkZWRpY2F0ZWQgbG9nIHZvbHVtZSAoRExWKSBlbmFibGVkLlxuICovXG5EZWRpY2F0ZWRMb2dWb2x1bWU/OiBib29sZWFuXG4vKipcbiAqIEEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0byByZW1vdmUgYXV0b21hdGVkIGJhY2t1cHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQuIFRoaXMgcGFyYW1ldGVyIGlzbid0IGNhc2Utc2Vuc2l0aXZlLiBUaGUgZGVmYXVsdCBpcyB0byByZW1vdmUgYXV0b21hdGVkIGJhY2t1cHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQuXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gV2hlbiB5b3UgZGVsZXRlIGEgREIgY2x1c3RlciwgYWxsIGF1dG9tYXRlZCBiYWNrdXBzIGZvciB0aGF0IERCIGNsdXN0ZXIgYXJlIGRlbGV0ZWQgYW5kIGNhbid0IGJlIHJlY292ZXJlZC4gTWFudWFsIERCIGNsdXN0ZXIgc25hcHNob3RzIG9mIHRoZSBEQiBjbHVzdGVyIGFyZSBub3QgZGVsZXRlZC5cbiAqL1xuRGVsZXRlQXV0b21hdGVkQmFja3Vwcz86IGJvb2xlYW5cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGhhcyBkZWxldGlvbiBwcm90ZWN0aW9uIGVuYWJsZWQuIFRoZSBkYXRhYmFzZSBjYW4ndCBiZSBkZWxldGVkIHdoZW4gZGVsZXRpb24gcHJvdGVjdGlvbiBpcyBlbmFibGVkLiBCeSBkZWZhdWx0LCBkZWxldGlvbiBwcm90ZWN0aW9uIGlzbid0IGVuYWJsZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0RlbGV0aW5nIGEgREIgSW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX0RlbGV0ZUluc3RhbmNlLmh0bWwpLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIEFtYXpvbiBBdXJvcmEgREIgaW5zdGFuY2VzLiBZb3UgY2FuIGVuYWJsZSBvciBkaXNhYmxlIGRlbGV0aW9uIHByb3RlY3Rpb24gZm9yIHRoZSBEQiBjbHVzdGVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGBgQ3JlYXRlREJDbHVzdGVyYGAuIERCIGluc3RhbmNlcyBpbiBhIERCIGNsdXN0ZXIgY2FuIGJlIGRlbGV0ZWQgZXZlbiB3aGVuIGRlbGV0aW9uIHByb3RlY3Rpb24gaXMgZW5hYmxlZCBmb3IgdGhlIERCIGNsdXN0ZXIuXG4gKi9cbkRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW5cbi8qKlxuICogVGhlIEFjdGl2ZSBEaXJlY3RvcnkgZGlyZWN0b3J5IElEIHRvIGNyZWF0ZSB0aGUgREIgaW5zdGFuY2UgaW4uIEN1cnJlbnRseSwgb25seSBEYjIsIE15U1FMLCBNaWNyb3NvZnQgU1FMIFNlcnZlciwgT3JhY2xlLCBhbmQgUG9zdGdyZVNRTCBEQiBpbnN0YW5jZXMgY2FuIGJlIGNyZWF0ZWQgaW4gYW4gQWN0aXZlIERpcmVjdG9yeSBEb21haW4uXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbS2VyYmVyb3MgQXV0aGVudGljYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9rZXJiZXJvcy1hdXRoZW50aWNhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKi9cbkRvbWFpbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIGZvciB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCB3aXRoIHRoZSBjcmVkZW50aWFscyBmb3IgdGhlIHVzZXIgam9pbmluZyB0aGUgZG9tYWluLlxuICogIEV4YW1wbGU6IGBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjpyZWdpb246YWNjb3VudC1udW1iZXI6c2VjcmV0Om15c2VsZm1hbmFnZWRBRHRlc3RzZWNyZXQtMTIzNDU2YGBcbiAqL1xuRG9tYWluQXV0aFNlY3JldEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSVB2NCBETlMgSVAgYWRkcmVzc2VzIG9mIHlvdXIgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IEFjdGl2ZSBEaXJlY3RvcnkgZG9tYWluIGNvbnRyb2xsZXJzLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBUd28gSVAgYWRkcmVzc2VzIG11c3QgYmUgcHJvdmlkZWQuIElmIHRoZXJlIGlzbid0IGEgc2Vjb25kYXJ5IGRvbWFpbiBjb250cm9sbGVyLCB1c2UgdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHByaW1hcnkgZG9tYWluIGNvbnRyb2xsZXIgZm9yIGJvdGggZW50cmllcyBpbiB0aGUgbGlzdC5cbiAqICAgXG4gKiAgRXhhbXBsZTogYGAxMjMuMTI0LjEyNS4xMjYsMjM0LjIzNS4yMzYuMjM3YGBcbiAqL1xuRG9tYWluRG5zSXBzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSAoRlFETikgb2YgYW4gQWN0aXZlIERpcmVjdG9yeSBkb21haW4uXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIENhbid0IGJlIGxvbmdlciB0aGFuIDY0IGNoYXJhY3RlcnMuXG4gKiAgIFxuICogIEV4YW1wbGU6IGBgbXltYW5hZ2VkQUR0ZXN0Lm15bWFuYWdlZEFELm15ZG9tYWluYGBcbiAqL1xuRG9tYWluRnFkbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgSUFNIHJvbGUgdG8gdXNlIHdoZW4gbWFraW5nIEFQSSBjYWxscyB0byB0aGUgRGlyZWN0b3J5IFNlcnZpY2UuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGZvbGxvd2luZyBEQiBpbnN0YW5jZXM6XG4gKiAgICsgIEFtYXpvbiBBdXJvcmEgKFRoZSBkb21haW4gaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4pXG4gKiAgICsgIFJEUyBDdXN0b21cbiAqL1xuRG9tYWluSUFNUm9sZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFjdGl2ZSBEaXJlY3Rvcnkgb3JnYW5pemF0aW9uYWwgdW5pdCBmb3IgeW91ciBEQiBpbnN0YW5jZSB0byBqb2luLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIGluIHRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgZm9ybWF0LlxuICogICArICBDYW4ndCBiZSBsb25nZXIgdGhhbiA2NCBjaGFyYWN0ZXJzLlxuICogICBcbiAqICBFeGFtcGxlOiBgYE9VPW15bWFuYWdlZEFEdGVzdE9VLERDPW15bWFuYWdlZEFEdGVzdCxEQz1teW1hbmFnZWRBRCxEQz1teWRvbWFpbmBgXG4gKi9cbkRvbWFpbk91Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBsaXN0IG9mIGxvZyB0eXBlcyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgZXhwb3J0aW5nIHRvIENsb3VkV2F0Y2ggTG9ncy4gVGhlIHZhbHVlcyBpbiB0aGUgbGlzdCBkZXBlbmQgb24gdGhlIERCIGVuZ2luZSBiZWluZyB1c2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtQdWJsaXNoaW5nIERhdGFiYXNlIExvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggTG9nc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfTG9nQWNjZXNzLmh0bWwjVVNFUl9Mb2dBY2Nlc3MuUHJvY2VkdXJhbC5VcGxvYWR0b0Nsb3VkV2F0Y2gpIGluIHRoZSAqQW1hem9uIFJlbGF0aW9uYWwgRGF0YWJhc2UgU2VydmljZSBVc2VyIEd1aWRlKi5cbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBDbG91ZFdhdGNoIExvZ3MgZXhwb3J0cyBhcmUgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4gXG4gKiAgICpEYjIqIFxuICogIFZhbGlkIHZhbHVlczogYGBkaWFnLmxvZ2BgLCBgYG5vdGlmeS5sb2dgYCBcbiAqICAgKk1hcmlhREIqIFxuICogIFZhbGlkIHZhbHVlczogYGBhdWRpdGBgLCBgYGVycm9yYGAsIGBgZ2VuZXJhbGBgLCBgYHNsb3dxdWVyeWBgIFxuICogICAqTWljcm9zb2Z0IFNRTCBTZXJ2ZXIqIFxuICogIFZhbGlkIHZhbHVlczogYGBhZ2VudGBgLCBgYGVycm9yYGAgXG4gKiAgICpNeVNRTCogXG4gKiAgVmFsaWQgdmFsdWVzOiBgYGF1ZGl0YGAsIGBgZXJyb3JgYCwgYGBnZW5lcmFsYGAsIGBgc2xvd3F1ZXJ5YGAgXG4gKiAgICpPcmFjbGUqIFxuICogIFZhbGlkIHZhbHVlczogYGBhbGVydGBgLCBgYGF1ZGl0YGAsIGBgbGlzdGVuZXJgYCwgYGB0cmFjZWBgLCBgYG9lbWFnZW50YGAgXG4gKiAgICpQb3N0Z3JlU1FMKiBcbiAqICBWYWxpZCB2YWx1ZXM6IGBgcG9zdGdyZXNxbGBgLCBgYHVwZ3JhZGVgYFxuICovXG5FbmFibGVDbG91ZHdhdGNoTG9nc0V4cG9ydHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdG8gZW5hYmxlIG1hcHBpbmcgb2YgQVdTIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSBhY2NvdW50cyB0byBkYXRhYmFzZSBhY2NvdW50cy4gQnkgZGVmYXVsdCwgbWFwcGluZyBpcyBkaXNhYmxlZC5cbiAqICBUaGlzIHByb3BlcnR5IGlzIHN1cHBvcnRlZCBmb3IgUkRTIGZvciBNYXJpYURCLCBSRFMgZm9yIE15U1FMLCBhbmQgUkRTIGZvciBQb3N0Z3JlU1FMLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJQU0gRGF0YWJhc2UgQXV0aGVudGljYXRpb24gZm9yIE1hcmlhREIsIE15U1FMLCBhbmQgUG9zdGdyZVNRTF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VzaW5nV2l0aFJEUy5JQU1EQkF1dGguaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKiBcbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBNYXBwaW5nIEFXUyBJQU0gYWNjb3VudHMgdG8gZGF0YWJhc2UgYWNjb3VudHMgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqL1xuRW5hYmxlSUFNRGF0YWJhc2VBdXRoZW50aWNhdGlvbj86IGJvb2xlYW5cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5hYmxlIFBlcmZvcm1hbmNlIEluc2lnaHRzIGZvciB0aGUgREIgaW5zdGFuY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIEFtYXpvbiBQZXJmb3JtYW5jZSBJbnNpZ2h0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfUGVyZkluc2lnaHRzLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqL1xuRW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cz86IGJvb2xlYW5cbkVuZHBvaW50PzogRW5kcG9pbnRcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIGVuZ2luZSB0byB1c2UgZm9yIHRoaXMgREIgaW5zdGFuY2UuIE5vdCBldmVyeSBkYXRhYmFzZSBlbmdpbmUgaXMgYXZhaWxhYmxlIGluIGV2ZXJ5IEFXUyBSZWdpb24uXG4gKiAgVGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCB3aGVuIGNyZWF0aW5nIGEgREIgaW5zdGFuY2UuXG4gKiAgIFlvdSBjYW4gY29udmVydCBhbiBPcmFjbGUgZGF0YWJhc2UgZnJvbSB0aGUgbm9uLUNEQiBhcmNoaXRlY3R1cmUgdG8gdGhlIGNvbnRhaW5lciBkYXRhYmFzZSAoQ0RCKSBhcmNoaXRlY3R1cmUgYnkgdXBkYXRpbmcgdGhlIGBgRW5naW5lYGAgdmFsdWUgaW4geW91ciB0ZW1wbGF0ZXMgZnJvbSBgYG9yYWNsZS1lZWBgIHRvIGBgb3JhY2xlLWVlLWNkYmBgIG9yIGZyb20gYGBvcmFjbGUtc2UyYGAgdG8gYGBvcmFjbGUtc2UyLWNkYmBgLiBDb252ZXJ0aW5nIHRvIHRoZSBDREIgYXJjaGl0ZWN0dXJlIHJlcXVpcmVzIGFuIGludGVycnVwdGlvbi5cbiAqICAgVmFsaWQgVmFsdWVzOlxuICogICArICAgYGBhdXJvcmEtbXlzcWxgYCAoZm9yIEF1cm9yYSBNeVNRTCBEQiBpbnN0YW5jZXMpXG4gKiAgICsgICBgYGF1cm9yYS1wb3N0Z3Jlc3FsYGAgKGZvciBBdXJvcmEgUG9zdGdyZVNRTCBEQiBpbnN0YW5jZXMpXG4gKiAgICsgICBgYGN1c3RvbS1vcmFjbGUtZWVgYCAoZm9yIFJEUyBDdXN0b20gZm9yIE9yYWNsZSBEQiBpbnN0YW5jZXMpXG4gKiAgICsgICBgYGN1c3RvbS1vcmFjbGUtZWUtY2RiYGAgKGZvciBSRFMgQ3VzdG9tIGZvciBPcmFjbGUgREIgaW5zdGFuY2VzKVxuICogICArICAgYGBjdXN0b20tc3Fsc2VydmVyLWVlYGAgKGZvciBSRFMgQ3VzdG9tIGZvciBTUUwgU2VydmVyIERCIGluc3RhbmNlcylcbiAqICAgKyAgIGBgY3VzdG9tLXNxbHNlcnZlci1zZWBgIChmb3IgUkRTIEN1c3RvbSBmb3IgU1FMIFNlcnZlciBEQiBpbnN0YW5jZXMpXG4gKiAgICsgICBgYGN1c3RvbS1zcWxzZXJ2ZXItd2ViYGAgKGZvciBSRFMgQ3VzdG9tIGZvciBTUUwgU2VydmVyIERCIGluc3RhbmNlcylcbiAqICAgKyAgIGBgZGIyLWFlYGAgXG4gKiAgICsgICBgYGRiMi1zZWBgIFxuICogICArICAgYGBtYXJpYWRiYGAgXG4gKiAgICsgICBgYG15c3FsYGAgXG4gKiAgICsgICBgYG9yYWNsZS1lZWBgIFxuICogICArICAgYGBvcmFjbGUtZWUtY2RiYGAgXG4gKiAgICsgICBgYG9yYWNsZS1zZTJgYCBcbiAqICAgKyAgIGBgb3JhY2xlLXNlMi1jZGJgYCBcbiAqICAgKyAgIGBgcG9zdGdyZXNgYCBcbiAqICAgKyAgIGBgc3Fsc2VydmVyLWVlYGAgXG4gKiAgICsgICBgYHNxbHNlcnZlci1zZWBgIFxuICogICArICAgYGBzcWxzZXJ2ZXItZXhgYCBcbiAqICAgKyAgIGBgc3Fsc2VydmVyLXdlYmBgXG4gKi9cbkVuZ2luZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlmZSBjeWNsZSB0eXBlIGZvciB0aGlzIERCIGluc3RhbmNlLlxuICogICBCeSBkZWZhdWx0LCB0aGlzIHZhbHVlIGlzIHNldCB0byBgYG9wZW4tc291cmNlLXJkcy1leHRlbmRlZC1zdXBwb3J0YGAsIHdoaWNoIGVucm9sbHMgeW91ciBEQiBpbnN0YW5jZSBpbnRvIEFtYXpvbiBSRFMgRXh0ZW5kZWQgU3VwcG9ydC4gQXQgdGhlIGVuZCBvZiBzdGFuZGFyZCBzdXBwb3J0LCB5b3UgY2FuIGF2b2lkIGNoYXJnZXMgZm9yIEV4dGVuZGVkIFN1cHBvcnQgYnkgc2V0dGluZyB0aGUgdmFsdWUgdG8gYGBvcGVuLXNvdXJjZS1yZHMtZXh0ZW5kZWQtc3VwcG9ydC1kaXNhYmxlZGBgLiBJbiB0aGlzIGNhc2UsIGNyZWF0aW5nIHRoZSBEQiBpbnN0YW5jZSB3aWxsIGZhaWwgaWYgdGhlIERCIG1ham9yIHZlcnNpb24gaXMgcGFzdCBpdHMgZW5kIG9mIHN0YW5kYXJkIHN1cHBvcnQgZGF0ZS5cbiAqICAgVGhpcyBzZXR0aW5nIGFwcGxpZXMgb25seSB0byBSRFMgZm9yIE15U1FMIGFuZCBSRFMgZm9yIFBvc3RncmVTUUwuIEZvciBBbWF6b24gQXVyb3JhIERCIGluc3RhbmNlcywgdGhlIGxpZmUgY3ljbGUgdHlwZSBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICogIFlvdSBjYW4gdXNlIHRoaXMgc2V0dGluZyB0byBlbnJvbGwgeW91ciBEQiBpbnN0YW5jZSBpbnRvIEFtYXpvbiBSRFMgRXh0ZW5kZWQgU3VwcG9ydC4gV2l0aCBSRFMgRXh0ZW5kZWQgU3VwcG9ydCwgeW91IGNhbiBydW4gdGhlIHNlbGVjdGVkIG1ham9yIGVuZ2luZSB2ZXJzaW9uIG9uIHlvdXIgREIgaW5zdGFuY2UgcGFzdCB0aGUgZW5kIG9mIHN0YW5kYXJkIHN1cHBvcnQgZm9yIHRoYXQgZW5naW5lIHZlcnNpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIEFtYXpvbiBSRFMgRXh0ZW5kZWQgU3VwcG9ydF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL2V4dGVuZGVkLXN1cHBvcnQuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIFZhbGlkIFZhbHVlczogYGBvcGVuLXNvdXJjZS1yZHMtZXh0ZW5kZWQtc3VwcG9ydCB8IG9wZW4tc291cmNlLXJkcy1leHRlbmRlZC1zdXBwb3J0LWRpc2FibGVkYGAgXG4gKiAgRGVmYXVsdDogYGBvcGVuLXNvdXJjZS1yZHMtZXh0ZW5kZWQtc3VwcG9ydGBgXG4gKi9cbkVuZ2luZUxpZmVjeWNsZVN1cHBvcnQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBkYXRhYmFzZSBlbmdpbmUgdG8gdXNlLlxuICogIEZvciBhIGxpc3Qgb2YgdmFsaWQgZW5naW5lIHZlcnNpb25zLCB1c2UgdGhlIGBgRGVzY3JpYmVEQkVuZ2luZVZlcnNpb25zYGAgYWN0aW9uLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBkYXRhYmFzZSBlbmdpbmVzIGFuZCBsaW5rcyB0byBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSB3aXRoIEFtYXpvbiBSRFMuIE5vdCBldmVyeSBkYXRhYmFzZSBlbmdpbmUgaXMgYXZhaWxhYmxlIGZvciBldmVyeSBBV1MgUmVnaW9uLlxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZGF0YWJhc2UgZW5naW5lIHRvIGJlIHVzZWQgYnkgdGhlIERCIGluc3RhbmNlIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKiAgICpEYjIqIFxuICogIFNlZSBbQW1hem9uIFJEUyBmb3IgRGIyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9EYjIuaHRtbCNEYjIuQ29uY2VwdHMuVmVyc2lvbk1nbXQpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLiogXG4gKiAgICpNYXJpYURCKiBcbiAqICBTZWUgW01hcmlhREIgb24gQW1hem9uIFJEUyBWZXJzaW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfTWFyaWFEQi5odG1sI01hcmlhREIuQ29uY2VwdHMuVmVyc2lvbk1nbXQpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLiogXG4gKiAgICpNaWNyb3NvZnQgU1FMIFNlcnZlciogXG4gKiAgU2VlIFtNaWNyb3NvZnQgU1FMIFNlcnZlciBWZXJzaW9ucyBvbiBBbWF6b24gUkRTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9TUUxTZXJ2ZXIuaHRtbCNTUUxTZXJ2ZXIuQ29uY2VwdHMuR2VuZXJhbC5WZXJzaW9uU3VwcG9ydCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKiBcbiAqICAgKk15U1FMKiBcbiAqICBTZWUgW015U1FMIG9uIEFtYXpvbiBSRFMgVmVyc2lvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX015U1FMLmh0bWwjTXlTUUwuQ29uY2VwdHMuVmVyc2lvbk1nbXQpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLiogXG4gKiAgICpPcmFjbGUqIFxuICogIFNlZSBbT3JhY2xlIERhdGFiYXNlIEVuZ2luZSBSZWxlYXNlIE5vdGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQXBwZW5kaXguT3JhY2xlLlBhdGNoQ29tcG9zaXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKiBcbiAqICAgKlBvc3RncmVTUUwqIFxuICogIFNlZSBbU3VwcG9ydGVkIFBvc3RncmVTUUwgRGF0YWJhc2UgVmVyc2lvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX1Bvc3RncmVTUUwuaHRtbCNQb3N0Z3JlU1FMLkNvbmNlcHRzLkdlbmVyYWwuREJWZXJzaW9ucykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKlxuICovXG5FbmdpbmVWZXJzaW9uPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIG1hbmFnZSB0aGUgbWFzdGVyIHVzZXIgcGFzc3dvcmQgd2l0aCBBV1MgU2VjcmV0cyBNYW5hZ2VyLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Bhc3N3b3JkIG1hbmFnZW1lbnQgd2l0aCBTZWNyZXRzIE1hbmFnZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9yZHMtc2VjcmV0cy1tYW5hZ2VyLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLiogXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIENhbid0IG1hbmFnZSB0aGUgbWFzdGVyIHVzZXIgcGFzc3dvcmQgd2l0aCBBV1MgU2VjcmV0cyBNYW5hZ2VyIGlmIGBgTWFzdGVyVXNlclBhc3N3b3JkYGAgaXMgc3BlY2lmaWVkLlxuICovXG5NYW5hZ2VNYXN0ZXJVc2VyUGFzc3dvcmQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgSS9PIG9wZXJhdGlvbnMgcGVyIHNlY29uZCAoSU9QUykgdGhhdCB0aGUgZGF0YWJhc2UgcHJvdmlzaW9ucy4gVGhlIHZhbHVlIG11c3QgYmUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDEwMDAuIFxuICogIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIHlvdSBtdXN0IGZvbGxvdyB0aGUgcmFuZ2Ugb2YgYWxsb3dlZCByYXRpb3Mgb2YgeW91ciByZXF1ZXN0ZWQgSU9QUyByYXRlIHRvIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSB0aGF0IHlvdSBhbGxvY2F0ZSAoSU9QUyB0byBhbGxvY2F0ZWQgc3RvcmFnZSkuIEZvciBleGFtcGxlLCB5b3UgY2FuIHByb3Zpc2lvbiBhbiBPcmFjbGUgZGF0YWJhc2UgaW5zdGFuY2Ugd2l0aCAxMDAwIElPUFMgYW5kIDIwMCBHaUIgb2Ygc3RvcmFnZSAoYSByYXRpbyBvZiA1OjEpLCBvciBzcGVjaWZ5IDIwMDAgSU9QUyB3aXRoIDIwMCBHaUIgb2Ygc3RvcmFnZSAoYSByYXRpbyBvZiAxMDoxKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIFJEUyBQcm92aXNpb25lZCBJT1BTIFN0b3JhZ2UgdG8gSW1wcm92ZSBQZXJmb3JtYW5jZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWwjVVNFUl9QSU9QUykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogICBJZiB5b3Ugc3BlY2lmeSBgYGlvMWBgIGZvciB0aGUgYGBTdG9yYWdlVHlwZWBgIHByb3BlcnR5LCB0aGVuIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgYGBJb3BzYGAgcHJvcGVydHkuXG4gKiAgIENvbnN0cmFpbnRzOlxuICogICArICBGb3IgUkRTIGZvciBEYjIsIE1hcmlhREIsIE15U1FMLCBPcmFjbGUsIGFuZCBQb3N0Z3JlU1FMIC0gTXVzdCBiZSBhIG11bHRpcGxlIGJldHdlZW4gLjUgYW5kIDUwIG9mIHRoZSBzdG9yYWdlIGFtb3VudCBmb3IgdGhlIERCIGluc3RhbmNlLlxuICogICArICBGb3IgUkRTIGZvciBTUUwgU2VydmVyIC0gTXVzdCBiZSBhIG11bHRpcGxlIGJldHdlZW4gMSBhbmQgNTAgb2YgdGhlIHN0b3JhZ2UgYW1vdW50IGZvciB0aGUgREIgaW5zdGFuY2UuXG4gKi9cbklvcHM/OiBudW1iZXJcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgQVdTIEtNUyBrZXkgdGhhdCdzIHVzZWQgdG8gZW5jcnlwdCB0aGUgREIgaW5zdGFuY2UsIHN1Y2ggYXMgYGBhcm46YXdzOmttczp1cy1lYXN0LTE6MDEyMzQ1Njc4OTEwOmtleS9hYmNkMTIzNC1hMTIzLTQ1NmEtYTEyYi1hMTIzYjRjZDU2ZWZgYC4gSWYgeW91IGVuYWJsZSB0aGUgU3RvcmFnZUVuY3J5cHRlZCBwcm9wZXJ0eSBidXQgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LCBBV1MgQ2xvdWRGb3JtYXRpb24gdXNlcyB0aGUgZGVmYXVsdCBLTVMga2V5LiBJZiB5b3Ugc3BlY2lmeSB0aGlzIHByb3BlcnR5LCB5b3UgbXVzdCBzZXQgdGhlIFN0b3JhZ2VFbmNyeXB0ZWQgcHJvcGVydHkgdG8gdHJ1ZS4gXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXJgYCBvciBgYFNvdXJjZURiaVJlc291cmNlSWRgYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNvdXJjZSBEQiBpbnN0YW5jZSwgYW5kIGlmIHRoZSBEQiBpbnN0YW5jZSBpcyBlbmNyeXB0ZWQsIHRoZSBzcGVjaWZpZWQgYGBLbXNLZXlJZGBgIHByb3BlcnR5IGlzIHVzZWQuIEhvd2V2ZXIsIGlmIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UgaXMgaW4gYSBkaWZmZXJlbnQgQVdTIFJlZ2lvbiwgeW91IG11c3Qgc3BlY2lmeSBhIEtNUyBrZXkgSUQuXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgU291cmNlREJJbnN0YW5jZUF1dG9tYXRlZEJhY2t1cHNBcm5gYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNvdXJjZSBEQiBpbnN0YW5jZSBhdXRvbWF0ZWQgYmFja3VwLCBhbmQgaWYgdGhlIGF1dG9tYXRlZCBiYWNrdXAgaXMgZW5jcnlwdGVkLCB0aGUgc3BlY2lmaWVkIGBgS21zS2V5SWRgYCBwcm9wZXJ0eSBpcyB1c2VkLlxuICogIElmIHlvdSBjcmVhdGUgYW4gZW5jcnlwdGVkIHJlYWQgcmVwbGljYSBpbiBhIGRpZmZlcmVudCBBV1MgUmVnaW9uLCB0aGVuIHlvdSBtdXN0IHNwZWNpZnkgYSBLTVMga2V5IGZvciB0aGUgZGVzdGluYXRpb24gQVdTIFJlZ2lvbi4gS01TIGVuY3J5cHRpb24ga2V5cyBhcmUgc3BlY2lmaWMgdG8gdGhlIHJlZ2lvbiB0aGF0IHRoZXkncmUgY3JlYXRlZCBpbiwgYW5kIHlvdSBjYW4ndCB1c2UgZW5jcnlwdGlvbiBrZXlzIGZyb20gb25lIHJlZ2lvbiBpbiBhbm90aGVyIHJlZ2lvbi5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSBgYFN0b3JhZ2VFbmNyeXB0ZWRgYCBwcm9wZXJ0eSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc25hcHNob3QuIElmIHRoZSBEQiBpbnN0YW5jZSBpcyBlbmNyeXB0ZWQsIHRoZSBzcGVjaWZpZWQgYGBLbXNLZXlJZGBgIHByb3BlcnR5IGlzIGFsc28gaW5oZXJpdGVkIGZyb20gdGhlIHNuYXBzaG90LlxuICogIElmIHlvdSBzcGVjaWZ5IGBgREJTZWN1cml0eUdyb3Vwc2BgLCBBV1MgQ2xvdWRGb3JtYXRpb24gaWdub3JlcyB0aGlzIHByb3BlcnR5LiBUbyBzcGVjaWZ5IGJvdGggYSBzZWN1cml0eSBncm91cCBhbmQgdGhpcyBwcm9wZXJ0eSwgeW91IG11c3QgdXNlIGEgVlBDIHNlY3VyaXR5IGdyb3VwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBBbWF6b24gUkRTIGFuZCBWUEMsIHNlZSBbVXNpbmcgQW1hem9uIFJEUyB3aXRoIEFtYXpvbiBWUENdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1ZQQy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIEtNUyBrZXkgaWRlbnRpZmllciBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBMaWNlbnNlIG1vZGVsIGluZm9ybWF0aW9uIGZvciB0aGlzIERCIGluc3RhbmNlLlxuICogICBWYWxpZCBWYWx1ZXM6XG4gKiAgICsgIEF1cm9yYSBNeVNRTCAtIGBgZ2VuZXJhbC1wdWJsaWMtbGljZW5zZWBgIFxuICogICArICBBdXJvcmEgUG9zdGdyZVNRTCAtIGBgcG9zdGdyZXNxbC1saWNlbnNlYGAgXG4gKiAgICsgIFJEUyBmb3IgRGIyIC0gYGBicmluZy15b3VyLW93bi1saWNlbnNlYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFJEUyBmb3IgRGIyIGxpY2Vuc2luZywgc2VlIFtdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9kYjItbGljZW5zaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLiogXG4gKiAgICsgIFJEUyBmb3IgTWFyaWFEQiAtIGBgZ2VuZXJhbC1wdWJsaWMtbGljZW5zZWBgIFxuICogICArICBSRFMgZm9yIE1pY3Jvc29mdCBTUUwgU2VydmVyIC0gYGBsaWNlbnNlLWluY2x1ZGVkYGAgXG4gKiAgICsgIFJEUyBmb3IgTXlTUUwgLSBgYGdlbmVyYWwtcHVibGljLWxpY2Vuc2VgYCBcbiAqICAgKyAgUkRTIGZvciBPcmFjbGUgLSBgYGJyaW5nLXlvdXItb3duLWxpY2Vuc2VgYCBvciBgYGxpY2Vuc2UtaW5jbHVkZWRgYCBcbiAqICAgKyAgUkRTIGZvciBQb3N0Z3JlU1FMIC0gYGBwb3N0Z3Jlc3FsLWxpY2Vuc2VgYCBcbiAqICAgXG4gKiAgIElmIHlvdSd2ZSBzcGVjaWZpZWQgYGBEQlNlY3VyaXR5R3JvdXBzYGAgYW5kIHRoZW4geW91IHVwZGF0ZSB0aGUgbGljZW5zZSBtb2RlbCwgQVdTIENsb3VkRm9ybWF0aW9uIHJlcGxhY2VzIHRoZSB1bmRlcmx5aW5nIERCIGluc3RhbmNlLiBUaGlzIHdpbGwgaW5jdXIgc29tZSBpbnRlcnJ1cHRpb25zIHRvIGRhdGFiYXNlIGF2YWlsYWJpbGl0eS5cbiAqL1xuTGljZW5zZU1vZGVsPzogc3RyaW5nXG4vKipcbiAqIFRoZSBtYXN0ZXIgdXNlciBuYW1lIGZvciB0aGUgREIgaW5zdGFuY2UuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgb3IgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc291cmNlIERCIGluc3RhbmNlIG9yIHNuYXBzaG90LlxuICogIFdoZW4gbWlncmF0aW5nIGEgc2VsZi1tYW5hZ2VkIERiMiBkYXRhYmFzZSwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB0aGUgc2FtZSBtYXN0ZXIgdXNlcm5hbWUgYXMgeW91ciBzZWxmLW1hbmFnZWQgRGIyIGluc3RhbmNlIG5hbWUuXG4gKiAgICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSBuYW1lIGZvciB0aGUgbWFzdGVyIHVzZXIgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4gXG4gKiAgICpSRFMgZm9yIERiMiogXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgMSB0byAxNiBsZXR0ZXJzIG9yIG51bWJlcnMuXG4gKiAgICsgIEZpcnN0IGNoYXJhY3RlciBtdXN0IGJlIGEgbGV0dGVyLlxuICogICArICBDYW4ndCBiZSBhIHJlc2VydmVkIHdvcmQgZm9yIHRoZSBjaG9zZW4gZGF0YWJhc2UgZW5naW5lLlxuICogICBcbiAqICAgKlJEUyBmb3IgTWFyaWFEQiogXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgMSB0byAxNiBsZXR0ZXJzIG9yIG51bWJlcnMuXG4gKiAgICsgIENhbid0IGJlIGEgcmVzZXJ2ZWQgd29yZCBmb3IgdGhlIGNob3NlbiBkYXRhYmFzZSBlbmdpbmUuXG4gKiAgIFxuICogICAqUkRTIGZvciBNaWNyb3NvZnQgU1FMIFNlcnZlciogXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgMSB0byAxMjggbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBGaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxldHRlci5cbiAqICAgKyAgQ2FuJ3QgYmUgYSByZXNlcnZlZCB3b3JkIGZvciB0aGUgY2hvc2VuIGRhdGFiYXNlIGVuZ2luZS5cbiAqICAgXG4gKiAgICpSRFMgZm9yIE15U1FMKiBcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSAxIHRvIDE2IGxldHRlcnMgb3IgbnVtYmVycy5cbiAqICAgKyAgRmlyc3QgY2hhcmFjdGVyIG11c3QgYmUgYSBsZXR0ZXIuXG4gKiAgICsgIENhbid0IGJlIGEgcmVzZXJ2ZWQgd29yZCBmb3IgdGhlIGNob3NlbiBkYXRhYmFzZSBlbmdpbmUuXG4gKiAgIFxuICogICAqUkRTIGZvciBPcmFjbGUqIFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIDEgdG8gMzAgbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBGaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxldHRlci5cbiAqICAgKyAgQ2FuJ3QgYmUgYSByZXNlcnZlZCB3b3JkIGZvciB0aGUgY2hvc2VuIGRhdGFiYXNlIGVuZ2luZS5cbiAqICAgXG4gKiAgICpSRFMgZm9yIFBvc3RncmVTUUwqIFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIDEgdG8gNjMgbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBGaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxldHRlci5cbiAqICAgKyAgQ2FuJ3QgYmUgYSByZXNlcnZlZCB3b3JkIGZvciB0aGUgY2hvc2VuIGRhdGFiYXNlIGVuZ2luZS5cbiAqL1xuTWFzdGVyVXNlcm5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBhc3N3b3JkIGZvciB0aGUgbWFzdGVyIHVzZXIuIFRoZSBwYXNzd29yZCBjYW4gaW5jbHVkZSBhbnkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgXCIvXCIsIFwiXCJcIiwgb3IgXCJAXCIuXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIHBhc3N3b3JkIGZvciB0aGUgbWFzdGVyIHVzZXIgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqICAgKlJEUyBmb3IgRGIyKiBcbiAqICBNdXN0IGNvbnRhaW4gZnJvbSA4IHRvIDI1NSBjaGFyYWN0ZXJzLlxuICogICAqUkRTIGZvciBNYXJpYURCKiBcbiAqICBDb25zdHJhaW50czogTXVzdCBjb250YWluIGZyb20gOCB0byA0MSBjaGFyYWN0ZXJzLlxuICogICAqUkRTIGZvciBNaWNyb3NvZnQgU1FMIFNlcnZlciogXG4gKiAgQ29uc3RyYWludHM6IE11c3QgY29udGFpbiBmcm9tIDggdG8gMTI4IGNoYXJhY3RlcnMuXG4gKiAgICpSRFMgZm9yIE15U1FMKiBcbiAqICBDb25zdHJhaW50czogTXVzdCBjb250YWluIGZyb20gOCB0byA0MSBjaGFyYWN0ZXJzLlxuICogICAqUkRTIGZvciBPcmFjbGUqIFxuICogIENvbnN0cmFpbnRzOiBNdXN0IGNvbnRhaW4gZnJvbSA4IHRvIDMwIGNoYXJhY3RlcnMuXG4gKiAgICpSRFMgZm9yIFBvc3RncmVTUUwqIFxuICogIENvbnN0cmFpbnRzOiBNdXN0IGNvbnRhaW4gZnJvbSA4IHRvIDEyOCBjaGFyYWN0ZXJzLlxuICovXG5NYXN0ZXJVc2VyUGFzc3dvcmQ/OiBzdHJpbmdcbk1hc3RlclVzZXJTZWNyZXQ/OiBNYXN0ZXJVc2VyU2VjcmV0XG4vKipcbiAqIFRoZSB1cHBlciBsaW1pdCBpbiBnaWJpYnl0ZXMgKEdpQikgdG8gd2hpY2ggQW1hem9uIFJEUyBjYW4gYXV0b21hdGljYWxseSBzY2FsZSB0aGUgc3RvcmFnZSBvZiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBzZXR0aW5nLCBpbmNsdWRpbmcgbGltaXRhdGlvbnMgdGhhdCBhcHBseSB0byBpdCwgc2VlIFtNYW5hZ2luZyBjYXBhY2l0eSBhdXRvbWF0aWNhbGx5IHdpdGggQW1hem9uIFJEUyBzdG9yYWdlIGF1dG9zY2FsaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9QSU9QUy5TdG9yYWdlVHlwZXMuaHRtbCNVU0VSX1BJT1BTLkF1dG9zY2FsaW5nKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGZvbGxvd2luZyBEQiBpbnN0YW5jZXM6XG4gKiAgICsgIEFtYXpvbiBBdXJvcmEgKFN0b3JhZ2UgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4pXG4gKiAgICsgIFJEUyBDdXN0b21cbiAqL1xuTWF4QWxsb2NhdGVkU3RvcmFnZT86IG51bWJlclxuLyoqXG4gKiBUaGUgaW50ZXJ2YWwsIGluIHNlY29uZHMsIGJldHdlZW4gcG9pbnRzIHdoZW4gRW5oYW5jZWQgTW9uaXRvcmluZyBtZXRyaWNzIGFyZSBjb2xsZWN0ZWQgZm9yIHRoZSBEQiBpbnN0YW5jZS4gVG8gZGlzYWJsZSBjb2xsZWN0aW9uIG9mIEVuaGFuY2VkIE1vbml0b3JpbmcgbWV0cmljcywgc3BlY2lmeSBgYDBgYC5cbiAqICBJZiBgYE1vbml0b3JpbmdSb2xlQXJuYGAgaXMgc3BlY2lmaWVkLCB0aGVuIHlvdSBtdXN0IHNldCBgYE1vbml0b3JpbmdJbnRlcnZhbGBgIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgYDBgYC5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqICBWYWxpZCBWYWx1ZXM6IGBgMCB8IDEgfCA1IHwgMTAgfCAxNSB8IDMwIHwgNjBgYCBcbiAqICBEZWZhdWx0OiBgYDBgYFxuICovXG5Nb25pdG9yaW5nSW50ZXJ2YWw/OiBudW1iZXJcbi8qKlxuICogVGhlIEFSTiBmb3IgdGhlIElBTSByb2xlIHRoYXQgcGVybWl0cyBSRFMgdG8gc2VuZCBlbmhhbmNlZCBtb25pdG9yaW5nIG1ldHJpY3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggTG9ncy4gRm9yIGV4YW1wbGUsIGBgYXJuOmF3czppYW06MTIzNDU2Nzg5MDEyOnJvbGUvZW1hY2Nlc3NgYC4gRm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIGEgbW9uaXRvcmluZyByb2xlLCBzZWUgW1NldHRpbmcgVXAgYW5kIEVuYWJsaW5nIEVuaGFuY2VkIE1vbml0b3JpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX01vbml0b3JpbmcuT1MuaHRtbCNVU0VSX01vbml0b3JpbmcuT1MuRW5hYmxpbmcpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBJZiBgYE1vbml0b3JpbmdJbnRlcnZhbGBgIGlzIHNldCB0byBhIHZhbHVlIG90aGVyIHRoYW4gYGAwYGAsIHRoZW4geW91IG11c3Qgc3VwcGx5IGEgYGBNb25pdG9yaW5nUm9sZUFybmBgIHZhbHVlLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIFJEUyBDdXN0b20gREIgaW5zdGFuY2VzLlxuICovXG5Nb25pdG9yaW5nUm9sZUFybj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgREIgaW5zdGFuY2UgaXMgYSBNdWx0aS1BWiBkZXBsb3ltZW50LiBZb3UgY2FuJ3Qgc2V0IHRoZSBgYEF2YWlsYWJpbGl0eVpvbmVgYCBwYXJhbWV0ZXIgaWYgdGhlIERCIGluc3RhbmNlIGlzIGEgTXVsdGktQVogZGVwbG95bWVudC5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byB0aGUgZm9sbG93aW5nIERCIGluc3RhbmNlczpcbiAqICAgKyAgQW1hem9uIEF1cm9yYSAoREIgaW5zdGFuY2UgQXZhaWxhYmlsaXR5IFpvbmVzIChBWnMpIGFyZSBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLilcbiAqICAgKyAgUkRTIEN1c3RvbVxuICovXG5NdWx0aUFaPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgTkNIQVIgY2hhcmFjdGVyIHNldCBmb3IgdGhlIE9yYWNsZSBEQiBpbnN0YW5jZS5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqL1xuTmNoYXJDaGFyYWN0ZXJTZXROYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuZXR3b3JrIHR5cGUgb2YgdGhlIERCIGluc3RhbmNlLlxuICogIFZhbGlkIHZhbHVlczpcbiAqICAgKyAgIGBgSVBWNGBgIFxuICogICArICAgYGBEVUFMYGAgXG4gKiAgIFxuICogIFRoZSBuZXR3b3JrIHR5cGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYGBEQlN1Ym5ldEdyb3VwYGAgc3BlY2lmaWVkIGZvciB0aGUgREIgaW5zdGFuY2UuIEEgYGBEQlN1Ym5ldEdyb3VwYGAgY2FuIHN1cHBvcnQgb25seSB0aGUgSVB2NCBwcm90b2NvbCBvciB0aGUgSVB2NCBhbmQgSVB2NiBwcm90b2NvbHMgKGBgRFVBTGBgKS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXb3JraW5nIHdpdGggYSBEQiBpbnN0YW5jZSBpbiBhIFZQQ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfVlBDLldvcmtpbmdXaXRoUkRTSW5zdGFuY2VpbmFWUEMuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKlxuICovXG5OZXR3b3JrVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgREIgaW5zdGFuY2Ugc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbiBncm91cC5cbiAqICBQZXJtYW5lbnQgb3B0aW9ucywgc3VjaCBhcyB0aGUgVERFIG9wdGlvbiBmb3IgT3JhY2xlIEFkdmFuY2VkIFNlY3VyaXR5IFRERSwgY2FuJ3QgYmUgcmVtb3ZlZCBmcm9tIGFuIG9wdGlvbiBncm91cC4gQWxzbywgdGhhdCBvcHRpb24gZ3JvdXAgY2FuJ3QgYmUgcmVtb3ZlZCBmcm9tIGEgREIgaW5zdGFuY2Ugb25jZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBEQiBpbnN0YW5jZS5cbiAqL1xuT3B0aW9uR3JvdXBOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBV1MgS01TIGtleSBpZGVudGlmaWVyIGZvciBlbmNyeXB0aW9uIG9mIFBlcmZvcm1hbmNlIEluc2lnaHRzIGRhdGEuXG4gKiAgVGhlIEtNUyBrZXkgaWRlbnRpZmllciBpcyB0aGUga2V5IEFSTiwga2V5IElELCBhbGlhcyBBUk4sIG9yIGFsaWFzIG5hbWUgZm9yIHRoZSBLTVMga2V5LlxuICogIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHZhbHVlIGZvciBgYFBlcmZvcm1hbmNlSW5zaWdodHNLTVNLZXlJZGBgLCB0aGVuIEFtYXpvbiBSRFMgdXNlcyB5b3VyIGRlZmF1bHQgS01TIGtleS4gVGhlcmUgaXMgYSBkZWZhdWx0IEtNUyBrZXkgZm9yIHlvdXIgQVdTIGFjY291bnQuIFlvdXIgQVdTIGFjY291bnQgaGFzIGEgZGlmZmVyZW50IGRlZmF1bHQgS01TIGtleSBmb3IgZWFjaCBBV1MgUmVnaW9uLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCBlbmFibGluZyBQZXJmb3JtYW5jZSBJbnNpZ2h0cywgc2VlIFtFbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZHMtZGF0YWJhc2UtaW5zdGFuY2UuaHRtbCNjZm4tcmRzLWRiaW5zdGFuY2UtZW5hYmxlcGVyZm9ybWFuY2VpbnNpZ2h0cykuXG4gKi9cblBlcmZvcm1hbmNlSW5zaWdodHNLTVNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGRheXMgdG8gcmV0YWluIFBlcmZvcm1hbmNlIEluc2lnaHRzIGRhdGEuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZXMuXG4gKiAgVmFsaWQgVmFsdWVzOlxuICogICArICAgYGA3YGAgXG4gKiAgICsgICAqbW9udGgqICogMzEsIHdoZXJlICptb250aCogaXMgYSBudW1iZXIgb2YgbW9udGhzIGZyb20gMS0yMy4gRXhhbXBsZXM6IGBgOTNgYCAoMyBtb250aHMgKiAzMSksIGBgMzQxYGAgKDExIG1vbnRocyAqIDMxKSwgYGA1ODlgYCAoMTkgbW9udGhzICogMzEpXG4gKiAgICsgICBgYDczMWBgIFxuICogICBcbiAqICBEZWZhdWx0OiBgYDdgYCBkYXlzXG4gKiAgSWYgeW91IHNwZWNpZnkgYSByZXRlbnRpb24gcGVyaW9kIHRoYXQgaXNuJ3QgdmFsaWQsIHN1Y2ggYXMgYGA5NGBgLCBBbWF6b24gUkRTIHJldHVybnMgYW4gZXJyb3IuXG4gKi9cblBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb25QZXJpb2Q/OiBudW1iZXJcbi8qKlxuICogVGhlIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRoZSBkYXRhYmFzZSBhY2NlcHRzIGNvbm5lY3Rpb25zLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIEF1cm9yYSBEQiBpbnN0YW5jZXMuIFRoZSBwb3J0IG51bWJlciBpcyBtYW5hZ2VkIGJ5IHRoZSBjbHVzdGVyLlxuICogIFZhbGlkIFZhbHVlczogYGAxMTUwLTY1NTM1YGAgXG4gKiAgRGVmYXVsdDpcbiAqICAgKyAgUkRTIGZvciBEYjIgLSBgYDUwMDAwYGAgXG4gKiAgICsgIFJEUyBmb3IgTWFyaWFEQiAtIGBgMzMwNmBgIFxuICogICArICBSRFMgZm9yIE1pY3Jvc29mdCBTUUwgU2VydmVyIC0gYGAxNDMzYGAgXG4gKiAgICsgIFJEUyBmb3IgTXlTUUwgLSBgYDMzMDZgYCBcbiAqICAgKyAgUkRTIGZvciBPcmFjbGUgLSBgYDE1MjFgYCBcbiAqICAgKyAgUkRTIGZvciBQb3N0Z3JlU1FMIC0gYGA1NDMyYGAgXG4gKiAgIFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBGb3IgUkRTIGZvciBNaWNyb3NvZnQgU1FMIFNlcnZlciwgdGhlIHZhbHVlIGNhbid0IGJlIGBgMTIzNGBgLCBgYDE0MzRgYCwgYGAzMjYwYGAsIGBgMzM0M2BgLCBgYDMzODlgYCwgYGA0NzAwMWBgLCBvciBgYDQ5MTUyLTQ5MTU2YGAuXG4gKi9cblBvcnQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIGRhaWx5IHRpbWUgcmFuZ2UgZHVyaW5nIHdoaWNoIGF1dG9tYXRlZCBiYWNrdXBzIGFyZSBjcmVhdGVkIGlmIGF1dG9tYXRlZCBiYWNrdXBzIGFyZSBlbmFibGVkLCB1c2luZyB0aGUgYGBCYWNrdXBSZXRlbnRpb25QZXJpb2RgYCBwYXJhbWV0ZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JhY2t1cCBXaW5kb3ddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1dvcmtpbmdXaXRoQXV0b21hdGVkQmFja3Vwcy5odG1sI1VTRVJfV29ya2luZ1dpdGhBdXRvbWF0ZWRCYWNrdXBzLkJhY2t1cFdpbmRvdykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKiBcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSBpbiB0aGUgZm9ybWF0IGBgaGgyNDptaS1oaDI0Om1pYGAuXG4gKiAgICsgIE11c3QgYmUgaW4gVW5pdmVyc2FsIENvb3JkaW5hdGVkIFRpbWUgKFVUQykuXG4gKiAgICsgIE11c3Qgbm90IGNvbmZsaWN0IHdpdGggdGhlIHByZWZlcnJlZCBtYWludGVuYW5jZSB3aW5kb3cuXG4gKiAgICsgIE11c3QgYmUgYXQgbGVhc3QgMzAgbWludXRlcy5cbiAqICAgXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIGRhaWx5IHRpbWUgcmFuZ2UgZm9yIGNyZWF0aW5nIGF1dG9tYXRlZCBiYWNrdXBzIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKi9cblByZWZlcnJlZEJhY2t1cFdpbmRvdz86IHN0cmluZ1xuLyoqXG4gKiBUaGUgd2Vla2x5IHRpbWUgcmFuZ2UgZHVyaW5nIHdoaWNoIHN5c3RlbSBtYWludGVuYW5jZSBjYW4gb2NjdXIsIGluIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lIChVVEMpLlxuICogIEZvcm1hdDogYGBkZGQ6aGgyNDptaS1kZGQ6aGgyNDptaWBgIFxuICogIFRoZSBkZWZhdWx0IGlzIGEgMzAtbWludXRlIHdpbmRvdyBzZWxlY3RlZCBhdCByYW5kb20gZnJvbSBhbiA4LWhvdXIgYmxvY2sgb2YgdGltZSBmb3IgZWFjaCBBV1MgUmVnaW9uLCBvY2N1cnJpbmcgb24gYSByYW5kb20gZGF5IG9mIHRoZSB3ZWVrLiBUbyBzZWUgdGhlIHRpbWUgYmxvY2tzIGF2YWlsYWJsZSwgc2VlIFtBZGp1c3RpbmcgdGhlIFByZWZlcnJlZCBEQiBJbnN0YW5jZSBNYWludGVuYW5jZSBXaW5kb3ddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1VwZ3JhZGVEQkluc3RhbmNlLk1haW50ZW5hbmNlLmh0bWwjQWRqdXN0aW5nVGhlTWFpbnRlbmFuY2VXaW5kb3cpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLiogXG4gKiAgIFRoaXMgcHJvcGVydHkgYXBwbGllcyB3aGVuIEFXUyBDbG91ZEZvcm1hdGlvbiBpbml0aWFsbHkgY3JlYXRlcyB0aGUgREIgaW5zdGFuY2UuIElmIHlvdSB1c2UgQVdTIENsb3VkRm9ybWF0aW9uIHRvIHVwZGF0ZSB0aGUgREIgaW5zdGFuY2UsIHRob3NlIHVwZGF0ZXMgYXJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuXG4gKiAgIENvbnN0cmFpbnRzOiBNaW5pbXVtIDMwLW1pbnV0ZSB3aW5kb3cuXG4gKi9cblByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgQ1BVIGNvcmVzIGFuZCB0aGUgbnVtYmVyIG9mIHRocmVhZHMgcGVyIGNvcmUgZm9yIHRoZSBEQiBpbnN0YW5jZSBjbGFzcyBvZiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gQW1hem9uIEF1cm9yYSBvciBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqL1xuUHJvY2Vzc29yRmVhdHVyZXM/OiBQcm9jZXNzb3JGZWF0dXJlW11cbi8qKlxuICogVGhlIG9yZGVyIG9mIHByaW9yaXR5IGluIHdoaWNoIGFuIEF1cm9yYSBSZXBsaWNhIGlzIHByb21vdGVkIHRvIHRoZSBwcmltYXJ5IGluc3RhbmNlIGFmdGVyIGEgZmFpbHVyZSBvZiB0aGUgZXhpc3RpbmcgcHJpbWFyeSBpbnN0YW5jZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRmF1bHQgVG9sZXJhbmNlIGZvciBhbiBBdXJvcmEgREIgQ2x1c3Rlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL0NvbmNlcHRzLkF1cm9yYUhpZ2hBdmFpbGFiaWxpdHkuaHRtbCNBdXJvcmEuTWFuYWdpbmcuRmF1bHRUb2xlcmFuY2UpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqICBEZWZhdWx0OiBgYDFgYCBcbiAqICBWYWxpZCBWYWx1ZXM6IGBgMCAtIDE1YGBcbiAqL1xuUHJvbW90aW9uVGllcj86IG51bWJlclxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgREIgaW5zdGFuY2UgaXMgYW4gaW50ZXJuZXQtZmFjaW5nIGluc3RhbmNlLiBJZiB5b3Ugc3BlY2lmeSB0cnVlLCBBV1MgQ2xvdWRGb3JtYXRpb24gY3JlYXRlcyBhbiBpbnN0YW5jZSB3aXRoIGEgcHVibGljbHkgcmVzb2x2YWJsZSBETlMgbmFtZSwgd2hpY2ggcmVzb2x2ZXMgdG8gYSBwdWJsaWMgSVAgYWRkcmVzcy4gSWYgeW91IHNwZWNpZnkgZmFsc2UsIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIGFuIGludGVybmFsIGluc3RhbmNlIHdpdGggYSBETlMgbmFtZSB0aGF0IHJlc29sdmVzIHRvIGEgcHJpdmF0ZSBJUCBhZGRyZXNzLiBcbiAqICBUaGUgZGVmYXVsdCBiZWhhdmlvciB2YWx1ZSBkZXBlbmRzIG9uIHlvdXIgVlBDIHNldHVwIGFuZCB0aGUgZGF0YWJhc2Ugc3VibmV0IGdyb3VwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBgYFB1YmxpY2x5QWNjZXNzaWJsZWBgIHBhcmFtZXRlciBpbiB0aGUgW0NyZWF0ZURCSW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlREJJbnN0YW5jZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgQVBJIFJlZmVyZW5jZSouXG4gKi9cblB1YmxpY2x5QWNjZXNzaWJsZT86IGJvb2xlYW5cbi8qKlxuICogVGhlIG9wZW4gbW9kZSBvZiBhbiBPcmFjbGUgcmVhZCByZXBsaWNhLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXb3JraW5nIHdpdGggT3JhY2xlIFJlYWQgUmVwbGljYXMgZm9yIEFtYXpvbiBSRFNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9vcmFjbGUtcmVhZC1yZXBsaWNhcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVGhpcyBzZXR0aW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIFJEUyBmb3IgT3JhY2xlLlxuICogIERlZmF1bHQ6IGBgb3Blbi1yZWFkLW9ubHlgYCBcbiAqICBWYWxpZCBWYWx1ZXM6IGBgb3Blbi1yZWFkLW9ubHlgYCBvciBgYG1vdW50ZWRgYFxuICovXG5SZXBsaWNhTW9kZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgZGF0ZSBhbmQgdGltZSB0byByZXN0b3JlIGZyb20uIFRoaXMgcGFyYW1ldGVyIGFwcGxpZXMgdG8gcG9pbnQtaW4tdGltZSByZWNvdmVyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVzdG9yaW5nIGEgREIgaW5zdGFuY2UgdG8gYSBzcGVjaWZpZWQgdGltZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfUElULmh0bWwpIGluIHRoZSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgYSB0aW1lIGluIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lIChVVEMpIGZvcm1hdC5cbiAqICAgKyAgTXVzdCBiZSBiZWZvcmUgdGhlIGxhdGVzdCByZXN0b3JhYmxlIHRpbWUgZm9yIHRoZSBEQiBpbnN0YW5jZS5cbiAqICAgKyAgQ2FuJ3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYFVzZUxhdGVzdFJlc3RvcmFibGVUaW1lYGAgcGFyYW1ldGVyIGlzIGVuYWJsZWQuXG4gKiAgIFxuICogIEV4YW1wbGU6IGBgMjAwOS0wOS0wN1QyMzo0NTowMFpgYFxuICovXG5SZXN0b3JlVGltZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgTXVsdGktQVogREIgY2x1c3RlciB0aGF0IHdpbGwgYWN0IGFzIHRoZSBzb3VyY2UgZm9yIHRoZSByZWFkIHJlcGxpY2EuIEVhY2ggREIgY2x1c3RlciBjYW4gaGF2ZSB1cCB0byAxNSByZWFkIHJlcGxpY2FzLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIHRoZSBpZGVudGlmaWVyIG9mIGFuIGV4aXN0aW5nIE11bHRpLUFaIERCIGNsdXN0ZXIuXG4gKiAgICsgIENhbid0IGJlIHNwZWNpZmllZCBpZiB0aGUgYGBTb3VyY2VEQkluc3RhbmNlSWRlbnRpZmllcmBgIHBhcmFtZXRlciBpcyBhbHNvIHNwZWNpZmllZC5cbiAqICAgKyAgVGhlIHNwZWNpZmllZCBEQiBjbHVzdGVyIG11c3QgaGF2ZSBhdXRvbWF0aWMgYmFja3VwcyBlbmFibGVkLCB0aGF0IGlzLCBpdHMgYmFja3VwIHJldGVudGlvbiBwZXJpb2QgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC5cbiAqICAgKyAgVGhlIHNvdXJjZSBEQiBjbHVzdGVyIG11c3QgYmUgaW4gdGhlIHNhbWUgQVdTLVJlZ2lvbiBhcyB0aGUgcmVhZCByZXBsaWNhLiBDcm9zcy1SZWdpb24gcmVwbGljYXRpb24gaXNuJ3Qgc3VwcG9ydGVkLlxuICovXG5Tb3VyY2VEQkNsdXN0ZXJJZGVudGlmaWVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSByZXNvdXJjZSBJRCBvZiB0aGUgc291cmNlIERCIGluc3RhbmNlIGZyb20gd2hpY2ggdG8gcmVzdG9yZS5cbiAqL1xuU291cmNlRGJpUmVzb3VyY2VJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJlcGxpY2F0ZWQgYXV0b21hdGVkIGJhY2t1cHMgZnJvbSB3aGljaCB0byByZXN0b3JlLCBmb3IgZXhhbXBsZSwgYGBhcm46YXdzOnJkczp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmF1dG8tYmFja3VwOmFiLUwySUpDRVhKUDdYUTdIT0o0U0lFWEFNUExFYGAuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbS5cbiAqL1xuU291cmNlREJJbnN0YW5jZUF1dG9tYXRlZEJhY2t1cHNBcm4/OiBzdHJpbmdcbi8qKlxuICogSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgcmVhZCByZXBsaWNhIERCIGluc3RhbmNlLCBzcGVjaWZ5IHRoZSBJRCBvZiB0aGUgc291cmNlIERCIGluc3RhbmNlLiBFYWNoIERCIGluc3RhbmNlIGNhbiBoYXZlIGEgbGltaXRlZCBudW1iZXIgb2YgcmVhZCByZXBsaWNhcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbV29ya2luZyB3aXRoIFJlYWQgUmVwbGljYXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1VTRVJfUmVhZFJlcGwuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCBjb25zdHJhaW50cyB0aGF0IGFwcGx5IHRvIERCIGluc3RhbmNlIGlkZW50aWZpZXJzLCBzZWUgW05hbWluZyBjb25zdHJhaW50cyBpbiBBbWF6b24gUkRTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9MaW1pdHMuaHRtbCNSRFNfTGltaXRzLkNvbnN0cmFpbnRzKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVGhlIGBgU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXJgYCBwcm9wZXJ0eSBkZXRlcm1pbmVzIHdoZXRoZXIgYSBEQiBpbnN0YW5jZSBpcyBhIHJlYWQgcmVwbGljYS4gSWYgeW91IHJlbW92ZSB0aGUgYGBTb3VyY2VEQkluc3RhbmNlSWRlbnRpZmllcmBgIHByb3BlcnR5IGZyb20geW91ciB0ZW1wbGF0ZSBhbmQgdGhlbiB1cGRhdGUgeW91ciBzdGFjaywgQVdTIENsb3VkRm9ybWF0aW9uIHByb21vdGVzIHRoZSByZWFkIHJlcGxpY2EgdG8gYSBzdGFuZGFsb25lIERCIGluc3RhbmNlLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFVzZUxhdGVzdFJlc3RvcmFibGVUaW1lYGAgb3IgYGBSZXN0b3JlVGltZWBgIHByb3BlcnRpZXMgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgYGBTb3VyY2VEQkluc3RhbmNlSWRlbnRpZmllcmBgIHByb3BlcnR5LCBSRFMgcmVzdG9yZXMgdGhlIERCIGluc3RhbmNlIHRvIHRoZSByZXF1ZXN0ZWQgcG9pbnQgaW4gdGltZSwgdGhlcmVieSBjcmVhdGluZyBhIG5ldyBEQiBpbnN0YW5jZS5cbiAqICAgICsgIElmIHlvdSBzcGVjaWZ5IGEgc291cmNlIERCIGluc3RhbmNlIHRoYXQgdXNlcyBWUEMgc2VjdXJpdHkgZ3JvdXBzLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3Ugc3BlY2lmeSB0aGUgYGBWUENTZWN1cml0eUdyb3Vwc2BgIHByb3BlcnR5LiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgcHJvcGVydHksIHRoZSByZWFkIHJlcGxpY2EgaW5oZXJpdHMgdGhlIHZhbHVlIG9mIHRoZSBgYFZQQ1NlY3VyaXR5R3JvdXBzYGAgcHJvcGVydHkgZnJvbSB0aGUgc291cmNlIERCIHdoZW4geW91IGNyZWF0ZSB0aGUgcmVwbGljYS4gSG93ZXZlciwgaWYgeW91IHVwZGF0ZSB0aGUgc3RhY2ssIEFXUyBDbG91ZEZvcm1hdGlvbiByZXZlcnRzIHRoZSByZXBsaWNhJ3MgYGBWUENTZWN1cml0eUdyb3Vwc2BgIHByb3BlcnR5IHRvIHRoZSBkZWZhdWx0IHZhbHVlIGJlY2F1c2UgaXQncyBub3QgZGVmaW5lZCBpbiB0aGUgc3RhY2sncyB0ZW1wbGF0ZS4gVGhpcyBjaGFuZ2UgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBpc3N1ZXMuXG4gKiAgICsgIFJlYWQgcmVwbGljYXMgZG9uJ3Qgc3VwcG9ydCBkZWxldGlvbiBwb2xpY2llcy4gQVdTIENsb3VkRm9ybWF0aW9uIGlnbm9yZXMgYW55IGRlbGV0aW9uIHBvbGljeSB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIGEgcmVhZCByZXBsaWNhLlxuICogICArICBJZiB5b3Ugc3BlY2lmeSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAsIGRvbid0IHNwZWNpZnkgdGhlIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eS4gWW91IGNhbid0IGNyZWF0ZSBhIHJlYWQgcmVwbGljYSBmcm9tIGEgc25hcHNob3QuXG4gKiAgICsgIERvbid0IHNldCB0aGUgYGBCYWNrdXBSZXRlbnRpb25QZXJpb2RgYCwgYGBEQk5hbWVgYCwgYGBNYXN0ZXJVc2VybmFtZWBgLCBgYE1hc3RlclVzZXJQYXNzd29yZGBgLCBhbmQgYGBQcmVmZXJyZWRCYWNrdXBXaW5kb3dgYCBwcm9wZXJ0aWVzLiBUaGUgZGF0YWJhc2UgYXR0cmlidXRlcyBhcmUgaW5oZXJpdGVkIGZyb20gdGhlIHNvdXJjZSBEQiBpbnN0YW5jZSwgYW5kIGJhY2t1cHMgYXJlIGRpc2FibGVkIGZvciByZWFkIHJlcGxpY2FzLlxuICogICArICBJZiB0aGUgc291cmNlIERCIGluc3RhbmNlIGlzIGluIGEgZGlmZmVyZW50IHJlZ2lvbiB0aGFuIHRoZSByZWFkIHJlcGxpY2EsIHNwZWNpZnkgdGhlIHNvdXJjZSByZWdpb24gaW4gYGBTb3VyY2VSZWdpb25gYCwgYW5kIHNwZWNpZnkgYW4gQVJOIGZvciBhIHZhbGlkIERCIGluc3RhbmNlIGluIGBgU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXJgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ29uc3RydWN0aW5nIGEgQW1hem9uIFJEUyBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfVGFnZ2luZy5odG1sI1VTRVJfVGFnZ2luZy5BUk4pIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICAgKyAgRm9yIERCIGluc3RhbmNlcyBpbiBBbWF6b24gQXVyb3JhIGNsdXN0ZXJzLCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIEFtYXpvbiBSRFMgYXV0b21hdGljYWxseSBhc3NpZ25zIHdyaXRlciBhbmQgcmVhZGVyIERCIGluc3RhbmNlcy5cbiAqL1xuU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSByZWdpb24gdGhhdCBjb250YWlucyB0aGUgc291cmNlIERCIGluc3RhbmNlIGZvciB0aGUgcmVhZCByZXBsaWNhLlxuICovXG5Tb3VyY2VSZWdpb24/OiBzdHJpbmdcbi8qKlxuICogQSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBEQiBpbnN0YW5jZSBpcyBlbmNyeXB0ZWQuIEJ5IGRlZmF1bHQsIGl0IGlzbid0IGVuY3J5cHRlZC5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBLbXNLZXlJZGBgIHByb3BlcnR5LCB0aGVuIHlvdSBtdXN0IGVuYWJsZSBlbmNyeXB0aW9uLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgb3IgYGBTb3VyY2VEYmlSZXNvdXJjZUlkYGAgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gVGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UsIGFuZCBpZiB0aGUgREIgaW5zdGFuY2UgaXMgZW5jcnlwdGVkLCB0aGUgc3BlY2lmaWVkIGBgS21zS2V5SWRgYCBwcm9wZXJ0eSBpcyB1c2VkLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCSW5zdGFuY2VBdXRvbWF0ZWRCYWNrdXBzQXJuYGAgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gVGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UgYXV0b21hdGVkIGJhY2t1cC4gXG4gKiAgSWYgeW91IHNwZWNpZnkgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc25hcHNob3QuXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIGVuY3J5cHRpb24gZm9yIERCIGluc3RhbmNlcyBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICovXG5TdG9yYWdlRW5jcnlwdGVkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgc3RvcmFnZSB0eXBlIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBEQiBpbnN0YW5jZS5cbiAqICBJZiB5b3Ugc3BlY2lmeSBgYGlvMWBgLCBgYGlvMmBgLCBvciBgYGdwM2BgLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgYSB2YWx1ZSBmb3IgdGhlIGBgSW9wc2BgIHBhcmFtZXRlci5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBBbWF6b24gQXVyb3JhIERCIGluc3RhbmNlcy4gU3RvcmFnZSBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICogIFZhbGlkIFZhbHVlczogYGBncDIgfCBncDMgfCBpbzEgfCBpbzIgfCBzdGFuZGFyZGBgIFxuICogIERlZmF1bHQ6IGBgaW8xYGAsIGlmIHRoZSBgYElvcHNgYCBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLiBPdGhlcndpc2UsIGBgZ3AyYGAuXG4gKi9cblN0b3JhZ2VUeXBlPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgc3RvcmFnZSB0aHJvdWdocHV0IHZhbHVlIGZvciB0aGUgREIgaW5zdGFuY2UuIFRoaXMgc2V0dGluZyBhcHBsaWVzIG9ubHkgdG8gdGhlIGBgZ3AzYGAgc3RvcmFnZSB0eXBlLiBcbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIG9yIEFtYXpvbiBBdXJvcmEuXG4gKi9cblN0b3JhZ2VUaHJvdWdocHV0PzogbnVtYmVyXG4vKipcbiAqIFRhZ3MgdG8gYXNzaWduIHRvIHRoZSBEQiBpbnN0YW5jZS5cbiAqL1xuVGFncz86IFRhZ1tdXG5UZGVDcmVkZW50aWFsQXJuPzogc3RyaW5nXG5UZGVDcmVkZW50aWFsUGFzc3dvcmQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHRpbWUgem9uZSBvZiB0aGUgREIgaW5zdGFuY2UuIFRoZSB0aW1lIHpvbmUgcGFyYW1ldGVyIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgb25seSBieSBbUkRTIGZvciBEYjJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9kYjItdGltZS16b25lKSBhbmQgW1JEUyBmb3IgU1FMIFNlcnZlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfU1FMU2VydmVyLmh0bWwjU1FMU2VydmVyLkNvbmNlcHRzLkdlbmVyYWwuVGltZVpvbmUpLlxuICovXG5UaW1lem9uZT86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgREIgaW5zdGFuY2UgY2xhc3Mgb2YgdGhlIERCIGluc3RhbmNlIHVzZXMgaXRzIGRlZmF1bHQgcHJvY2Vzc29yIGZlYXR1cmVzLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIFJEUyBDdXN0b20gREIgaW5zdGFuY2VzLlxuICovXG5Vc2VEZWZhdWx0UHJvY2Vzc29yRmVhdHVyZXM/OiBib29sZWFuXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBEQiBpbnN0YW5jZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBsYXRlc3QgYmFja3VwIHRpbWUuIEJ5IGRlZmF1bHQsIHRoZSBEQiBpbnN0YW5jZSBpc24ndCByZXN0b3JlZCBmcm9tIHRoZSBsYXRlc3QgYmFja3VwIHRpbWUuIFRoaXMgcGFyYW1ldGVyIGFwcGxpZXMgdG8gcG9pbnQtaW4tdGltZSByZWNvdmVyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVzdG9yaW5nIGEgREIgaW5zdGFuY2UgdG8gYSBzcGVjaWZpZWQgdGltZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfUElULmh0bWwpIGluIHRoZSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIENhbid0IGJlIHNwZWNpZmllZCBpZiB0aGUgYGBSZXN0b3JlVGltZWBgIHBhcmFtZXRlciBpcyBwcm92aWRlZC5cbiAqL1xuVXNlTGF0ZXN0UmVzdG9yYWJsZVRpbWU/OiBib29sZWFuXG4vKipcbiAqIEEgbGlzdCBvZiB0aGUgVlBDIHNlY3VyaXR5IGdyb3VwIElEcyB0byBhc3NpZ24gdG8gdGhlIERCIGluc3RhbmNlLiBUaGUgbGlzdCBjYW4gaW5jbHVkZSBib3RoIHRoZSBwaHlzaWNhbCBJRHMgb2YgZXhpc3RpbmcgVlBDIHNlY3VyaXR5IGdyb3VwcyBhbmQgcmVmZXJlbmNlcyB0byBbQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1zZWN1cml0eS1ncm91cC5odG1sKSByZXNvdXJjZXMgY3JlYXRlZCBpbiB0aGUgdGVtcGxhdGUuXG4gKiAgSWYgeW91IHBsYW4gdG8gdXBkYXRlIHRoZSByZXNvdXJjZSwgZG9uJ3Qgc3BlY2lmeSBWUEMgc2VjdXJpdHkgZ3JvdXBzIGluIGEgc2hhcmVkIFZQQy5cbiAqICAgSWYgeW91IHNldCBgYFZQQ1NlY3VyaXR5R3JvdXBzYGAsIHlvdSBtdXN0IG5vdCBzZXQgW0RCU2VjdXJpdHlHcm91cHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS8vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZHMtZGF0YWJhc2UtaW5zdGFuY2UuaHRtbCNjZm4tcmRzLWRiaW5zdGFuY2UtZGJzZWN1cml0eWdyb3VwcyksIGFuZCB2aWNlIHZlcnNhLlxuICogICBZb3UgY2FuIG1pZ3JhdGUgYSBEQiBpbnN0YW5jZSBpbiB5b3VyIHN0YWNrIGZyb20gYW4gUkRTIERCIHNlY3VyaXR5IGdyb3VwIHRvIGEgVlBDIHNlY3VyaXR5IGdyb3VwLCBidXQga2VlcCB0aGUgZm9sbG93aW5nIGluIG1pbmQ6XG4gKiAgICsgIFlvdSBjYW4ndCByZXZlcnQgdG8gdXNpbmcgYW4gUkRTIHNlY3VyaXR5IGdyb3VwIGFmdGVyIHlvdSBlc3RhYmxpc2ggYSBWUEMgc2VjdXJpdHkgZ3JvdXAgbWVtYmVyc2hpcC5cbiAqICAgKyAgV2hlbiB5b3UgbWlncmF0ZSB5b3VyIERCIGluc3RhbmNlIHRvIFZQQyBzZWN1cml0eSBncm91cHMsIGlmIHlvdXIgc3RhY2sgdXBkYXRlIHJvbGxzIGJhY2sgYmVjYXVzZSB0aGUgREIgaW5zdGFuY2UgdXBkYXRlIGZhaWxzIG9yIGJlY2F1c2UgYW4gdXBkYXRlIGZhaWxzIGluIGFub3RoZXIgQVdTIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLCB0aGUgcm9sbGJhY2sgZmFpbHMgYmVjYXVzZSBpdCBjYW4ndCByZXZlcnQgdG8gYW4gUkRTIHNlY3VyaXR5IGdyb3VwLlxuICogICArICBUbyB1c2UgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgYXZhaWxhYmxlIHdoZW4geW91IHVzZSBhIFZQQyBzZWN1cml0eSBncm91cCwgeW91IG11c3QgcmVjcmVhdGUgdGhlIERCIGluc3RhbmNlLiBJZiB5b3UgZG9uJ3QsIEFXUyBDbG91ZEZvcm1hdGlvbiBzdWJtaXRzIG9ubHkgdGhlIHByb3BlcnR5IHZhbHVlcyB0aGF0IGFyZSBsaXN0ZWQgaW4gdGhlIFtEQlNlY3VyaXR5R3JvdXBzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZHMtZGF0YWJhc2UtaW5zdGFuY2UuaHRtbCNjZm4tcmRzLWRiaW5zdGFuY2UtZGJzZWN1cml0eWdyb3VwcykgcHJvcGVydHkuXG4gKiAgIFxuICogICBUbyBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgbWlncmF0ZSB5b3VyIERCIGluc3RhbmNlIHRvIHVzaW5nIFZQQyBzZWN1cml0eSBncm91cHMgb25seSB3aGVuIHRoYXQgaXMgdGhlIG9ubHkgY2hhbmdlIGluIHlvdXIgc3RhY2sgdGVtcGxhdGUuIFxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSBhc3NvY2lhdGVkIGxpc3Qgb2YgRUMyIFZQQyBzZWN1cml0eSBncm91cHMgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4gSWYgc3BlY2lmaWVkLCB0aGUgc2V0dGluZyBtdXN0IG1hdGNoIHRoZSBEQiBjbHVzdGVyIHNldHRpbmcuXG4gKi9cblZQQ1NlY3VyaXR5R3JvdXBzPzogc3RyaW5nW11cbn1cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgYW4gQVdTIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSByb2xlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgREIgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgREJJbnN0YW5jZVJvbGUge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgZmVhdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIEFXUyBJZGVudGl0eSBhbmQgQWNjZXNzIE1hbmFnZW1lbnQgKElBTSkgcm9sZS4gSUFNIHJvbGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIERCIGluc3RhbmNlIGdyYW50IHBlcm1pc3Npb24gZm9yIHRoZSBEQiBpbnN0YW5jZSB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiBGb3IgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGZlYXR1cmUgbmFtZXMsIHNlZSB0aGUgYGBTdXBwb3J0ZWRGZWF0dXJlTmFtZXNgYCBkZXNjcmlwdGlvbiBpbiBbREJFbmdpbmVWZXJzaW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RCRW5naW5lVmVyc2lvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgQVBJIFJlZmVyZW5jZSouXG4gKi9cbkZlYXR1cmVOYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgREIgaW5zdGFuY2UuXG4gKi9cblJvbGVBcm46IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBvZiB0aGUgREIgaW5zdGFuY2UncyBzZXJ2ZXIgY2VydGlmaWNhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VydGlmaWNhdGVEZXRhaWxzIHtcbi8qKlxuICogVGhlIENBIGlkZW50aWZpZXIgb2YgdGhlIENBIGNlcnRpZmljYXRlIHVzZWQgZm9yIHRoZSBEQiBpbnN0YW5jZSdzIHNlcnZlciBjZXJ0aWZpY2F0ZS5cbiAqL1xuQ0FJZGVudGlmaWVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSBleHBpcmF0aW9uIGRhdGUgb2YgdGhlIERCIGluc3RhbmNl4oCZcyBzZXJ2ZXIgY2VydGlmaWNhdGUuXG4gKi9cblZhbGlkVGlsbD86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29ubmVjdGlvbiBlbmRwb2ludCBmb3IgdGhlIERCIGluc3RhbmNlLlxuICogICBUaGUgZW5kcG9pbnQgbWlnaHQgbm90IGJlIHNob3duIGZvciBpbnN0YW5jZXMgd2l0aCB0aGUgc3RhdHVzIG9mIGBgY3JlYXRpbmdgYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmRwb2ludCB7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgRE5TIGFkZHJlc3Mgb2YgdGhlIERCIGluc3RhbmNlLlxuICovXG5BZGRyZXNzPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgcG9ydCB0aGF0IHRoZSBkYXRhYmFzZSBlbmdpbmUgaXMgbGlzdGVuaW5nIG9uLlxuICovXG5Qb3J0Pzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgSUQgdGhhdCBBbWF6b24gUm91dGUgNTMgYXNzaWducyB3aGVuIHlvdSBjcmVhdGUgYSBob3N0ZWQgem9uZS5cbiAqL1xuSG9zdGVkWm9uZUlkPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBzZWNyZXQgbWFuYWdlZCBieSBSRFMgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBmb3IgdGhlIG1hc3RlciB1c2VyIHBhc3N3b3JkLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Bhc3N3b3JkIG1hbmFnZW1lbnQgd2l0aCBTZWNyZXRzIE1hbmFnZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9yZHMtc2VjcmV0cy1tYW5hZ2VyLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLipcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0ZXJVc2VyU2VjcmV0IHtcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZWNyZXQuIFRoaXMgcGFyYW1ldGVyIGlzIGEgcmV0dXJuIHZhbHVlIHRoYXQgeW91IGNhbiByZXRyaWV2ZSB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgaW50cmluc2ljIGZ1bmN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXR1cm4gdmFsdWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtcmRzLWRiaW5zdGFuY2UuaHRtbCNhd3MtcmVzb3VyY2UtcmRzLWRiaW5zdGFuY2UtcmV0dXJuLXZhbHVlcykuXG4gKi9cblNlY3JldEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVdTIEtNUyBrZXkgaWRlbnRpZmllciB0aGF0IGlzIHVzZWQgdG8gZW5jcnlwdCB0aGUgc2VjcmV0LlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYGBQcm9jZXNzb3JGZWF0dXJlYGAgcHJvcGVydHkgdHlwZSBzcGVjaWZpZXMgdGhlIHByb2Nlc3NvciBmZWF0dXJlcyBvZiBhIERCIGluc3RhbmNlIGNsYXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NvckZlYXR1cmUge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcHJvY2Vzc29yIGZlYXR1cmUuIFZhbGlkIG5hbWVzIGFyZSBgYGNvcmVDb3VudGBgIGFuZCBgYHRocmVhZHNQZXJDb3JlYGAuXG4gKi9cbk5hbWU/OiAoXCJjb3JlQ291bnRcIiB8IFwidGhyZWFkc1BlckNvcmVcIilcbi8qKlxuICogVGhlIHZhbHVlIG9mIGEgcHJvY2Vzc29yIGZlYXR1cmUuXG4gKi9cblZhbHVlPzogc3RyaW5nXG59XG4vKipcbiAqIE1ldGFkYXRhIGFzc2lnbmVkIHRvIGFuIEFtYXpvbiBSRFMgcmVzb3VyY2UgY29uc2lzdGluZyBvZiBhIGtleS12YWx1ZSBwYWlyLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1RhZ2dpbmcgQW1hem9uIFJEUyByZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1RhZ2dpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqIG9yIFtUYWdnaW5nIEFtYXpvbiBBdXJvcmEgYW5kIEFtYXpvbiBSRFMgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvVVNFUl9UYWdnaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBBIGtleSBpcyB0aGUgcmVxdWlyZWQgbmFtZSBvZiB0aGUgdGFnLiBUaGUgc3RyaW5nIHZhbHVlIGNhbiBiZSBmcm9tIDEgdG8gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbid0IGJlIHByZWZpeGVkIHdpdGggYGBhd3M6YGAgb3IgYGByZHM6YGAuIFRoZSBzdHJpbmcgY2FuIG9ubHkgY29udGFpbiBvbmx5IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlLXNwYWNlLCAnXycsICcuJywgJzonLCAnLycsICc9JywgJysnLCAnLScsICdAJyAoSmF2YSByZWdleDogXCJeKFtcXFxccHtMfVxcXFxwe1p9XFxcXHB7Tn1fLjovPStcXFxcLUBdKikkXCIpLlxuICovXG5LZXk6IHN0cmluZ1xuLyoqXG4gKiBBIHZhbHVlIGlzIHRoZSBvcHRpb25hbCB2YWx1ZSBvZiB0aGUgdGFnLiBUaGUgc3RyaW5nIHZhbHVlIGNhbiBiZSBmcm9tIDEgdG8gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbid0IGJlIHByZWZpeGVkIHdpdGggYGBhd3M6YGAgb3IgYGByZHM6YGAuIFRoZSBzdHJpbmcgY2FuIG9ubHkgY29udGFpbiBvbmx5IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlLXNwYWNlLCAnXycsICcuJywgJzonLCAnLycsICc9JywgJysnLCAnLScsICdAJyAoSmF2YSByZWdleDogXCJeKFtcXFxccHtMfVxcXFxwe1p9XFxcXHB7Tn1fLjovPStcXFxcLUBdKikkXCIpLlxuICovXG5WYWx1ZT86IHN0cmluZ1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJkcy1kYmluc3RhbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXJkcy1kYmluc3RhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6UkRTOjpEQkluc3RhbmNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gREIgaW5zdGFuY2UuIFRoZSBuZXcgREIgaW5zdGFuY2UgY2FuIGJlIGFuIFJEUyBEQiBpbnN0YW5jZSwgb3IgaXQgY2FuIGJlIGEgREIgaW5zdGFuY2UgaW4gYW4gQXVyb3JhIERCIGNsdXN0ZXIuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW4gUkRTIERCIGluc3RhbmNlLCBzZWUgW0NyZWF0aW5nIGFuIEFtYXpvbiBSRFMgREIgaW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX0NyZWF0ZURCSW5zdGFuY2UuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIGEgREIgaW5zdGFuY2UgaW4gYW4gQXVyb3JhIERCIGNsdXN0ZXIsIHNlZSBbQ3JlYXRpbmcgYW4gQW1hem9uIEF1cm9yYSBEQiBjbHVzdGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQXVyb3JhLkNyZWF0ZUluc3RhbmNlLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICBJZiB5b3UgaW1wb3J0IGFuIGV4aXN0aW5nIERCIGluc3RhbmNlLCBhbmQgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24gZG9lc24ndCBtYXRjaCB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIERCIGluc3RhbmNlLCBBV1MgQ2xvdWRGb3JtYXRpb24gYXBwbGllcyB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgZHVyaW5nIHRoZSBpbXBvcnQgb3BlcmF0aW9uLlxuICogICBJZiBhIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQgb3IgcmVwbGFjZWQgZHVyaW5nIGFuIHVwZGF0ZSwgQVdTIENsb3VkRm9ybWF0aW9uIGRlbGV0ZXMgYWxsIGF1dG9tYXRlZCBzbmFwc2hvdHMuIEhvd2V2ZXIsIGl0IHJldGFpbnMgbWFudWFsIERCIHNuYXBzaG90cy4gRHVyaW5nIGFuIHVwZGF0ZSB0aGF0IHJlcXVpcmVzIHJlcGxhY2VtZW50LCB5b3UgY2FuIGFwcGx5IGEgc3RhY2sgcG9saWN5IHRvIHByZXZlbnQgREIgaW5zdGFuY2VzIGZyb20gYmVpbmcgcmVwbGFjZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1ByZXZlbnQgVXBkYXRlcyB0byBTdGFjayBSZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3Byb3RlY3Qtc3RhY2stcmVzb3VyY2VzLmh0bWwpLlxuICogICAgKlVwZGF0aW5nIERCIGluc3RhbmNlcyogXG4gKiAgV2hlbiBwcm9wZXJ0aWVzIGxhYmVsZWQgXCIqVXBkYXRlIHJlcXVpcmVzOiogW1JlcGxhY2VtZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS91c2luZy1jZm4tdXBkYXRpbmctc3RhY2tzLXVwZGF0ZS1iZWhhdmlvcnMuaHRtbCN1cGRhdGUtcmVwbGFjZW1lbnQpXCIgYXJlIHVwZGF0ZWQsIEFXUyBDbG91ZEZvcm1hdGlvbiBmaXJzdCBjcmVhdGVzIGEgcmVwbGFjZW1lbnQgREIgaW5zdGFuY2UsIHRoZW4gY2hhbmdlcyByZWZlcmVuY2VzIGZyb20gb3RoZXIgZGVwZW5kZW50IHJlc291cmNlcyB0byBwb2ludCB0byB0aGUgcmVwbGFjZW1lbnQgREIgaW5zdGFuY2UsIGFuZCBmaW5hbGx5IGRlbGV0ZXMgdGhlIG9sZCBEQiBpbnN0YW5jZS5cbiAqICAgV2UgaGlnaGx5IHJlY29tbWVuZCB0aGF0IHlvdSB0YWtlIGEgc25hcHNob3Qgb2YgdGhlIGRhdGFiYXNlIGJlZm9yZSB1cGRhdGluZyB0aGUgc3RhY2suIElmIHlvdSBkb24ndCwgeW91IGxvc2UgdGhlIGRhdGEgd2hlbiBBV1MgQ2xvdWRGb3JtYXRpb24gcmVwbGFjZXMgeW91ciBEQiBpbnN0YW5jZS4gVG8gcHJlc2VydmUgeW91ciBkYXRhLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlOlxuICogICAxLiAgRGVhY3RpdmF0ZSBhbnkgYXBwbGljYXRpb25zIHRoYXQgYXJlIHVzaW5nIHRoZSBEQiBpbnN0YW5jZSBzbyB0aGF0IHRoZXJlJ3Mgbm8gYWN0aXZpdHkgb24gdGhlIERCIGluc3RhbmNlLlxuICogICAxLiAgQ3JlYXRlIGEgc25hcHNob3Qgb2YgdGhlIERCIGluc3RhbmNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBhIERCIFNuYXBzaG90XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9DcmVhdGVTbmFwc2hvdC5odG1sKS5cbiAqICAgMS4gIElmIHlvdSB3YW50IHRvIHJlc3RvcmUgeW91ciBpbnN0YW5jZSB1c2luZyBhIERCIHNuYXBzaG90LCBtb2RpZnkgdGhlIHVwZGF0ZWQgdGVtcGxhdGUgd2l0aCB5b3VyIERCIGluc3RhbmNlIGNoYW5nZXMgYW5kIGFkZCB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5IHdpdGggdGhlIElEIG9mIHRoZSBEQiBzbmFwc2hvdCB0aGF0IHlvdSB3YW50IHRvIHVzZS5cbiAqICBBZnRlciB5b3UgcmVzdG9yZSBhIERCIGluc3RhbmNlIHdpdGggYSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIHlvdSBjYW4gZGVsZXRlIHRoZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkuIFdoZW4geW91IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSBmb3IgYW4gdXBkYXRlLCB0aGUgREIgaW5zdGFuY2UgaXMgbm90IHJlc3RvcmVkIGZyb20gdGhlIERCIHNuYXBzaG90IGFnYWluLCBhbmQgdGhlIGRhdGEgaW4gdGhlIGRhdGFiYXNlIGlzIG5vdCBjaGFuZ2VkLiBIb3dldmVyLCBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBhbiBlbXB0eSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLCBhbmQgdGhlIG9yaWdpbmFsIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQuIElmIHlvdSBzcGVjaWZ5IGEgcHJvcGVydHkgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgc25hcHNob3QgcmVzdG9yZSBwcm9wZXJ0eSwgYSBuZXcgREIgaW5zdGFuY2UgaXMgcmVzdG9yZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgYW5kIHRoZSBvcmlnaW5hbCBEQiBpbnN0YW5jZSBpcyBkZWxldGVkLlxuICogICAxLiAgVXBkYXRlIHRoZSBzdGFjay5cbiAqICAgXG4gKiAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVwZGF0aW5nIG90aGVyIHByb3BlcnRpZXMgb2YgdGhpcyByZXNvdXJjZSwgc2VlIGBgTW9kaWZ5REJJbnN0YW5jZWBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1cGRhdGluZyBzdGFja3MsIHNlZSBbQ2xvdWRGb3JtYXRpb24gU3RhY2tzIFVwZGF0ZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3VzaW5nLWNmbi11cGRhdGluZy1zdGFja3MuaHRtbCkuXG4gKiAgICpEZWxldGluZyBEQiBpbnN0YW5jZXMqIFxuICogIEZvciBEQiBpbnN0YW5jZXMgdGhhdCBhcmUgcGFydCBvZiBhbiBBdXJvcmEgREIgY2x1c3RlciwgeW91IGNhbiBzZXQgYSBkZWxldGlvbiBwb2xpY3kgZm9yIHlvdXIgREIgaW5zdGFuY2UgdG8gY29udHJvbCBob3cgQVdTIENsb3VkRm9ybWF0aW9uIGhhbmRsZXMgdGhlIERCIGluc3RhbmNlIHdoZW4gdGhlIHN0YWNrIGlzIGRlbGV0ZWQuIEZvciBBbWF6b24gUkRTIERCIGluc3RhbmNlcywgeW91IGNhbiBjaG9vc2UgdG8gKnJldGFpbiogdGhlIERCIGluc3RhbmNlLCB0byAqZGVsZXRlKiB0aGUgREIgaW5zdGFuY2UsIG9yIHRvICpjcmVhdGUgYSBzbmFwc2hvdCogb2YgdGhlIERCIGluc3RhbmNlLiBUaGUgZGVmYXVsdCBBV1MgQ2xvdWRGb3JtYXRpb24gYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgYGBEQkNsdXN0ZXJJZGVudGlmaWVyYGAgcHJvcGVydHk6XG4gKiAgIDEuICBGb3IgYGBBV1M6OlJEUzo6REJJbnN0YW5jZWBgIHJlc291cmNlcyB0aGF0IGRvbid0IHNwZWNpZnkgdGhlIGBgREJDbHVzdGVySWRlbnRpZmllcmBgIHByb3BlcnR5LCBBV1MgQ2xvdWRGb3JtYXRpb24gc2F2ZXMgYSBzbmFwc2hvdCBvZiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgIDEuICAgRm9yIGBgQVdTOjpSRFM6OkRCSW5zdGFuY2VgYCByZXNvdXJjZXMgdGhhdCBkbyBzcGVjaWZ5IHRoZSBgYERCQ2x1c3RlcklkZW50aWZpZXJgYCBwcm9wZXJ0eSwgQVdTIENsb3VkRm9ybWF0aW9uIGRlbGV0ZXMgdGhlIERCIGluc3RhbmNlLlxuICogICBcbiAqICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRGVsZXRpb25Qb2xpY3kgQXR0cmlidXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtYXR0cmlidXRlLWRlbGV0aW9ucG9saWN5Lmh0bWwpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfUkRTX0RCSU5TVEFOQ0Uge1xuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHN0b3JhZ2UgaW4gZ2liaWJ5dGVzIChHaUIpIHRvIGJlIGluaXRpYWxseSBhbGxvY2F0ZWQgZm9yIHRoZSBkYXRhYmFzZSBpbnN0YW5jZS5cbiAqICAgSWYgYW55IHZhbHVlIGlzIHNldCBpbiB0aGUgYGBJb3BzYGAgcGFyYW1ldGVyLCBgYEFsbG9jYXRlZFN0b3JhZ2VgYCBtdXN0IGJlIGF0IGxlYXN0IDEwMCBHaUIsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBtaW5pbXVtIElvcHMgdmFsdWUgb2YgMSwwMDAuIElmIHlvdSBpbmNyZWFzZSB0aGUgYGBJb3BzYGAgdmFsdWUgKGluIDEsMDAwIElPUFMgaW5jcmVtZW50cyksIHRoZW4geW91IG11c3QgYWxzbyBpbmNyZWFzZSB0aGUgYGBBbGxvY2F0ZWRTdG9yYWdlYGAgdmFsdWUgKGluIDEwMC1HaUIgaW5jcmVtZW50cykuIFxuICogICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBBdXJvcmEgY2x1c3RlciB2b2x1bWVzIGF1dG9tYXRpY2FsbHkgZ3JvdyBhcyB0aGUgYW1vdW50IG9mIGRhdGEgaW4geW91ciBkYXRhYmFzZSBpbmNyZWFzZXMsIHRob3VnaCB5b3UgYXJlIG9ubHkgY2hhcmdlZCBmb3IgdGhlIHNwYWNlIHRoYXQgeW91IHVzZSBpbiBhbiBBdXJvcmEgY2x1c3RlciB2b2x1bWUuXG4gKiAgICpEYjIqIFxuICogIENvbnN0cmFpbnRzIHRvIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSBmb3IgZWFjaCBzdG9yYWdlIHR5cGUgYXJlIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSAoU1NEKSBzdG9yYWdlIChncDMpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byA2NDAwMC5cbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBzdG9yYWdlIChpbzEpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxMDAgdG8gNjQwMDAuXG4gKiAgIFxuICogICAqTXlTUUwqIFxuICogIENvbnN0cmFpbnRzIHRvIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSBmb3IgZWFjaCBzdG9yYWdlIHR5cGUgYXJlIHRoZSBmb2xsb3dpbmc6IFxuICogICArICBHZW5lcmFsIFB1cnBvc2UgKFNTRCkgc3RvcmFnZSAoZ3AyKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMjAgdG8gNjU1MzYuXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgc3RvcmFnZSAoaW8xKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMTAwIHRvIDY1NTM2LlxuICogICArICBNYWduZXRpYyBzdG9yYWdlIChzdGFuZGFyZCk6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDUgdG8gMzA3Mi5cbiAqICAgXG4gKiAgICpNYXJpYURCKiBcbiAqICBDb25zdHJhaW50cyB0byB0aGUgYW1vdW50IG9mIHN0b3JhZ2UgZm9yIGVhY2ggc3RvcmFnZSB0eXBlIGFyZSB0aGUgZm9sbG93aW5nOiBcbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIChTU0QpIHN0b3JhZ2UgKGdwMik6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDY1NTM2LlxuICogICArICBQcm92aXNpb25lZCBJT1BTIHN0b3JhZ2UgKGlvMSk6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDEwMCB0byA2NTUzNi5cbiAqICAgKyAgTWFnbmV0aWMgc3RvcmFnZSAoc3RhbmRhcmQpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSA1IHRvIDMwNzIuXG4gKiAgIFxuICogICAqUG9zdGdyZVNRTCogXG4gKiAgQ29uc3RyYWludHMgdG8gdGhlIGFtb3VudCBvZiBzdG9yYWdlIGZvciBlYWNoIHN0b3JhZ2UgdHlwZSBhcmUgdGhlIGZvbGxvd2luZzogXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSAoU1NEKSBzdG9yYWdlIChncDIpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byA2NTUzNi5cbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBzdG9yYWdlIChpbzEpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxMDAgdG8gNjU1MzYuXG4gKiAgICsgIE1hZ25ldGljIHN0b3JhZ2UgKHN0YW5kYXJkKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gNSB0byAzMDcyLlxuICogICBcbiAqICAgKk9yYWNsZSogXG4gKiAgQ29uc3RyYWludHMgdG8gdGhlIGFtb3VudCBvZiBzdG9yYWdlIGZvciBlYWNoIHN0b3JhZ2UgdHlwZSBhcmUgdGhlIGZvbGxvd2luZzogXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSAoU1NEKSBzdG9yYWdlIChncDIpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byA2NTUzNi5cbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBzdG9yYWdlIChpbzEpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxMDAgdG8gNjU1MzYuXG4gKiAgICsgIE1hZ25ldGljIHN0b3JhZ2UgKHN0YW5kYXJkKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMTAgdG8gMzA3Mi5cbiAqICAgXG4gKiAgICpTUUwgU2VydmVyKiBcbiAqICBDb25zdHJhaW50cyB0byB0aGUgYW1vdW50IG9mIHN0b3JhZ2UgZm9yIGVhY2ggc3RvcmFnZSB0eXBlIGFyZSB0aGUgZm9sbG93aW5nOiBcbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIChTU0QpIHN0b3JhZ2UgKGdwMik6XG4gKiAgICsgIEVudGVycHJpc2UgYW5kIFN0YW5kYXJkIGVkaXRpb25zOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byAxNjM4NC5cbiAqICAgKyAgV2ViIGFuZCBFeHByZXNzIGVkaXRpb25zOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byAxNjM4NC5cbiAqICAgXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgc3RvcmFnZSAoaW8xKTpcbiAqICAgKyAgRW50ZXJwcmlzZSBhbmQgU3RhbmRhcmQgZWRpdGlvbnM6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDE2Mzg0LlxuICogICArICBXZWIgYW5kIEV4cHJlc3MgZWRpdGlvbnM6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDE2Mzg0LlxuICogICBcbiAqICAgKyAgTWFnbmV0aWMgc3RvcmFnZSAoc3RhbmRhcmQpOlxuICogICArICBFbnRlcnByaXNlIGFuZCBTdGFuZGFyZCBlZGl0aW9uczogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMjAgdG8gMTAyNC5cbiAqICAgKyAgV2ViIGFuZCBFeHByZXNzIGVkaXRpb25zOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byAxMDI0LlxuICovXG5BbGxvY2F0ZWRTdG9yYWdlPzogc3RyaW5nXG4vKipcbiAqIEEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBtYWpvciB2ZXJzaW9uIHVwZ3JhZGVzIGFyZSBhbGxvd2VkLiBDaGFuZ2luZyB0aGlzIHBhcmFtZXRlciBkb2Vzbid0IHJlc3VsdCBpbiBhbiBvdXRhZ2UgYW5kIHRoZSBjaGFuZ2UgaXMgYXN5bmNocm9ub3VzbHkgYXBwbGllZCBhcyBzb29uIGFzIHBvc3NpYmxlLlxuICogIENvbnN0cmFpbnRzOiBNYWpvciB2ZXJzaW9uIHVwZ3JhZGVzIG11c3QgYmUgYWxsb3dlZCB3aGVuIHNwZWNpZnlpbmcgYSB2YWx1ZSBmb3IgdGhlIGBgRW5naW5lVmVyc2lvbmBgIHBhcmFtZXRlciB0aGF0IGlzIGEgZGlmZmVyZW50IG1ham9yIHZlcnNpb24gdGhhbiB0aGUgREIgaW5zdGFuY2UncyBjdXJyZW50IHZlcnNpb24uXG4gKi9cbkFsbG93TWFqb3JWZXJzaW9uVXBncmFkZT86IGJvb2xlYW5cbi8qKlxuICogVGhlIElBTWxvbmcgKElBTSkgcm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBEQiBpbnN0YW5jZS4gXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIGFzc29jaWF0ZWQgcm9sZXMgYXJlIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKi9cbkFzc29jaWF0ZWRSb2xlcz86IERCSW5zdGFuY2VSb2xlW11cbi8qKlxuICogQSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIG1pbm9yIGVuZ2luZSB1cGdyYWRlcyBhcmUgYXBwbGllZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSBEQiBpbnN0YW5jZSBkdXJpbmcgdGhlIG1haW50ZW5hbmNlIHdpbmRvdy4gQnkgZGVmYXVsdCwgbWlub3IgZW5naW5lIHVwZ3JhZGVzIGFyZSBhcHBsaWVkIGF1dG9tYXRpY2FsbHkuXG4gKi9cbkF1dG9NaW5vclZlcnNpb25VcGdyYWRlPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgQVdTLVJlZ2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGF1dG9tYXRlZCBiYWNrdXAuXG4gKi9cbkF1dG9tYXRpY0JhY2t1cFJlcGxpY2F0aW9uUmVnaW9uPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBV1MgS01TIGtleSBpZGVudGlmaWVyIGZvciBlbmNyeXB0aW9uIG9mIHRoZSByZXBsaWNhdGVkIGF1dG9tYXRlZCBiYWNrdXBzLiBUaGUgS01TIGtleSBJRCBpcyB0aGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgZm9yIHRoZSBLTVMgZW5jcnlwdGlvbiBrZXkgaW4gdGhlIGRlc3RpbmF0aW9uIEFXUy1SZWdpb24sIGZvciBleGFtcGxlLCBgYGFybjphd3M6a21zOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6a2V5L0FLSUFJT1NGT0ROTjdFWEFNUExFYGAuXG4gKi9cbkF1dG9tYXRpY0JhY2t1cFJlcGxpY2F0aW9uS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIEF2YWlsYWJpbGl0eSBab25lIChBWikgd2hlcmUgdGhlIGRhdGFiYXNlIHdpbGwgYmUgY3JlYXRlZC4gRm9yIGluZm9ybWF0aW9uIG9uIEFXUy1SZWdpb25zIGFuZCBBdmFpbGFiaWxpdHkgWm9uZXMsIHNlZSBbUmVnaW9ucyBhbmQgQXZhaWxhYmlsaXR5IFpvbmVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ29uY2VwdHMuUmVnaW9uc0FuZEF2YWlsYWJpbGl0eVpvbmVzLmh0bWwpLlxuICogIEZvciBBbWF6b24gQXVyb3JhLCBlYWNoIEF1cm9yYSBEQiBjbHVzdGVyIGhvc3RzIGNvcGllcyBvZiBpdHMgc3RvcmFnZSBpbiB0aHJlZSBzZXBhcmF0ZSBBdmFpbGFiaWxpdHkgWm9uZXMuIFNwZWNpZnkgb25lIG9mIHRoZXNlIEF2YWlsYWJpbGl0eSBab25lcy4gQXVyb3JhIGF1dG9tYXRpY2FsbHkgY2hvb3NlcyBhbiBhcHByb3ByaWF0ZSBBdmFpbGFiaWxpdHkgWm9uZSBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBvbmUuXG4gKiAgRGVmYXVsdDogQSByYW5kb20sIHN5c3RlbS1jaG9zZW4gQXZhaWxhYmlsaXR5IFpvbmUgaW4gdGhlIGVuZHBvaW50J3MgQVdTLVJlZ2lvbi5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgVGhlIGBgQXZhaWxhYmlsaXR5Wm9uZWBgIHBhcmFtZXRlciBjYW4ndCBiZSBzcGVjaWZpZWQgaWYgdGhlIERCIGluc3RhbmNlIGlzIGEgTXVsdGktQVogZGVwbG95bWVudC5cbiAqICAgKyAgVGhlIHNwZWNpZmllZCBBdmFpbGFiaWxpdHkgWm9uZSBtdXN0IGJlIGluIHRoZSBzYW1lIEFXUy1SZWdpb24gYXMgdGhlIGN1cnJlbnQgZW5kcG9pbnQuXG4gKiAgIFxuICogIEV4YW1wbGU6IGBgdXMtZWFzdC0xZGBgXG4gKi9cbkF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG51bWJlciBvZiBkYXlzIGZvciB3aGljaCBhdXRvbWF0ZWQgYmFja3VwcyBhcmUgcmV0YWluZWQuIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gYSBwb3NpdGl2ZSBudW1iZXIgZW5hYmxlcyBiYWNrdXBzLiBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDAgZGlzYWJsZXMgYXV0b21hdGVkIGJhY2t1cHMuXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIHJldGVudGlvbiBwZXJpb2QgZm9yIGF1dG9tYXRlZCBiYWNrdXBzIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKiAgRGVmYXVsdDogMVxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIGEgdmFsdWUgZnJvbSAwIHRvIDM1XG4gKiAgICsgIENhbid0IGJlIHNldCB0byAwIGlmIHRoZSBEQiBpbnN0YW5jZSBpcyBhIHNvdXJjZSB0byByZWFkIHJlcGxpY2FzXG4gKi9cbkJhY2t1cFJldGVudGlvblBlcmlvZD86IG51bWJlclxuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgQ0EgY2VydGlmaWNhdGUgZm9yIHRoaXMgREIgaW5zdGFuY2UuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgU1NML1RMUyB0byBlbmNyeXB0IGEgY29ubmVjdGlvbiB0byBhIERCIGluc3RhbmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVXNpbmdXaXRoUkRTLlNTTC5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSogYW5kIFtVc2luZyBTU0wvVExTIHRvIGVuY3J5cHQgYSBjb25uZWN0aW9uIHRvIGEgREIgY2x1c3Rlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL1VzaW5nV2l0aFJEUy5TU0wuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICovXG5DQUNlcnRpZmljYXRlSWRlbnRpZmllcj86IHN0cmluZ1xuQ2VydGlmaWNhdGVEZXRhaWxzPzogQ2VydGlmaWNhdGVEZXRhaWxzXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBEQiBpbnN0YW5jZSBpcyByZXN0YXJ0ZWQgd2hlbiB5b3Ugcm90YXRlIHlvdXIgU1NML1RMUyBjZXJ0aWZpY2F0ZS5cbiAqICBCeSBkZWZhdWx0LCB0aGUgREIgaW5zdGFuY2UgaXMgcmVzdGFydGVkIHdoZW4geW91IHJvdGF0ZSB5b3VyIFNTTC9UTFMgY2VydGlmaWNhdGUuIFRoZSBjZXJ0aWZpY2F0ZSBpcyBub3QgdXBkYXRlZCB1bnRpbCB0aGUgREIgaW5zdGFuY2UgaXMgcmVzdGFydGVkLlxuICogICBTZXQgdGhpcyBwYXJhbWV0ZXIgb25seSBpZiB5b3UgYXJlICpub3QqIHVzaW5nIFNTTC9UTFMgdG8gY29ubmVjdCB0byB0aGUgREIgaW5zdGFuY2UuXG4gKiAgIElmIHlvdSBhcmUgdXNpbmcgU1NML1RMUyB0byBjb25uZWN0IHRvIHRoZSBEQiBpbnN0YW5jZSwgZm9sbG93IHRoZSBhcHByb3ByaWF0ZSBpbnN0cnVjdGlvbnMgZm9yIHlvdXIgREIgZW5naW5lIHRvIHJvdGF0ZSB5b3VyIFNTTC9UTFMgY2VydGlmaWNhdGU6XG4gKiAgICsgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHJvdGF0aW5nIHlvdXIgU1NML1RMUyBjZXJ0aWZpY2F0ZSBmb3IgUkRTIERCIGVuZ2luZXMsIHNlZSBbUm90YXRpbmcgWW91ciBTU0wvVExTIENlcnRpZmljYXRlLl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VzaW5nV2l0aFJEUy5TU0wtY2VydGlmaWNhdGUtcm90YXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKiBcbiAqICAgKyAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcm90YXRpbmcgeW91ciBTU0wvVExTIGNlcnRpZmljYXRlIGZvciBBdXJvcmEgREIgZW5naW5lcywgc2VlIFtSb3RhdGluZyBZb3VyIFNTTC9UTFMgQ2VydGlmaWNhdGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9Vc2luZ1dpdGhSRFMuU1NMLWNlcnRpZmljYXRlLXJvdGF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICAgXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZXMuXG4gKi9cbkNlcnRpZmljYXRlUm90YXRpb25SZXN0YXJ0PzogYm9vbGVhblxuLyoqXG4gKiBGb3Igc3VwcG9ydGVkIGVuZ2luZXMsIGluZGljYXRlcyB0aGF0IHRoZSBEQiBpbnN0YW5jZSBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIHNldC5cbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBUaGUgY2hhcmFjdGVyIHNldCBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBV1M6OlJEUzo6REJDbHVzdGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtcmRzLWRiY2x1c3Rlci5odG1sKS5cbiAqL1xuQ2hhcmFjdGVyU2V0TmFtZT86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byBjb3B5IHRhZ3MgZnJvbSB0aGUgREIgaW5zdGFuY2UgdG8gc25hcHNob3RzIG9mIHRoZSBEQiBpbnN0YW5jZS4gQnkgZGVmYXVsdCwgdGFncyBhcmUgbm90IGNvcGllZC5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBBbWF6b24gQXVyb3JhIERCIGluc3RhbmNlcy4gQ29weWluZyB0YWdzIHRvIHNuYXBzaG90cyBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLiBTZXR0aW5nIHRoaXMgdmFsdWUgZm9yIGFuIEF1cm9yYSBEQiBpbnN0YW5jZSBoYXMgbm8gZWZmZWN0IG9uIHRoZSBEQiBjbHVzdGVyIHNldHRpbmcuXG4gKi9cbkNvcHlUYWdzVG9TbmFwc2hvdD86IGJvb2xlYW5cbi8qKlxuICogVGhlIGluc3RhbmNlIHByb2ZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1bmRlcmx5aW5nIEFtYXpvbiBFQzIgaW5zdGFuY2Ugb2YgYW4gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZS5cbiAqICBUaGlzIHNldHRpbmcgaXMgcmVxdWlyZWQgZm9yIFJEUyBDdXN0b20uXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIFRoZSBwcm9maWxlIG11c3QgZXhpc3QgaW4geW91ciBhY2NvdW50LlxuICogICArICBUaGUgcHJvZmlsZSBtdXN0IGhhdmUgYW4gSUFNIHJvbGUgdGhhdCBBbWF6b24gRUMyIGhhcyBwZXJtaXNzaW9ucyB0byBhc3N1bWUuXG4gKiAgICsgIFRoZSBpbnN0YW5jZSBwcm9maWxlIG5hbWUgYW5kIHRoZSBhc3NvY2lhdGVkIElBTSByb2xlIG5hbWUgbXVzdCBzdGFydCB3aXRoIHRoZSBwcmVmaXggYGBBV1NSRFNDdXN0b21gYC5cbiAqICAgXG4gKiAgRm9yIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciB0aGUgSUFNIHJvbGUsIHNlZSBbQ29uZmlndXJlIElBTSBhbmQgeW91ciBWUENdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9jdXN0b20tc2V0dXAtb3JjbC5odG1sI2N1c3RvbS1zZXR1cC1vcmNsLmlhbS12cGMpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqL1xuQ3VzdG9tSUFNSW5zdGFuY2VQcm9maWxlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBEQiBjbHVzdGVyIHRoYXQgdGhpcyBEQiBpbnN0YW5jZSB3aWxsIGJlbG9uZyB0by5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqL1xuREJDbHVzdGVySWRlbnRpZmllcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIE11bHRpLUFaIERCIGNsdXN0ZXIgc25hcHNob3QgdG8gcmVzdG9yZSBmcm9tLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE11bHRpLUFaIERCIGNsdXN0ZXJzLCBzZWUgW011bHRpLUFaIERCIGNsdXN0ZXIgZGVwbG95bWVudHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9tdWx0aS1hei1kYi1jbHVzdGVycy1jb25jZXB0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgbWF0Y2ggdGhlIGlkZW50aWZpZXIgb2YgYW4gZXhpc3RpbmcgTXVsdGktQVogREIgY2x1c3RlciBzbmFwc2hvdC5cbiAqICAgKyAgQ2FuJ3QgYmUgc3BlY2lmaWVkIHdoZW4gYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIGlzIHNwZWNpZmllZC5cbiAqICAgKyAgTXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgaXNuJ3Qgc3BlY2lmaWVkLlxuICogICArICBJZiB5b3UgYXJlIHJlc3RvcmluZyBmcm9tIGEgc2hhcmVkIG1hbnVhbCBNdWx0aS1BWiBEQiBjbHVzdGVyIHNuYXBzaG90LCB0aGUgYGBEQkNsdXN0ZXJTbmFwc2hvdElkZW50aWZpZXJgYCBtdXN0IGJlIHRoZSBBUk4gb2YgdGhlIHNoYXJlZCBzbmFwc2hvdC5cbiAqICAgKyAgQ2FuJ3QgYmUgdGhlIGlkZW50aWZpZXIgb2YgYW4gQXVyb3JhIERCIGNsdXN0ZXIgc25hcHNob3QuXG4gKi9cbkRCQ2x1c3RlclNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZ1xuREJJbnN0YW5jZUFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgY29tcHV0ZSBhbmQgbWVtb3J5IGNhcGFjaXR5IG9mIHRoZSBEQiBpbnN0YW5jZSwgZm9yIGV4YW1wbGUgYGBkYi5tNS5sYXJnZWBgLiBOb3QgYWxsIERCIGluc3RhbmNlIGNsYXNzZXMgYXJlIGF2YWlsYWJsZSBpbiBhbGwgQVdTLVJlZ2lvbnMsIG9yIGZvciBhbGwgZGF0YWJhc2UgZW5naW5lcy4gRm9yIHRoZSBmdWxsIGxpc3Qgb2YgREIgaW5zdGFuY2UgY2xhc3NlcywgYW5kIGF2YWlsYWJpbGl0eSBmb3IgeW91ciBlbmdpbmUsIHNlZSBbREIgaW5zdGFuY2UgY2xhc3Nlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NvbmNlcHRzLkRCSW5zdGFuY2VDbGFzcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSogb3IgW0F1cm9yYSBEQiBpbnN0YW5jZSBjbGFzc2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQ29uY2VwdHMuREJJbnN0YW5jZUNsYXNzLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqL1xuREJJbnN0YW5jZUNsYXNzPzogc3RyaW5nXG4vKipcbiAqIEEgbmFtZSBmb3IgdGhlIERCIGluc3RhbmNlLiBJZiB5b3Ugc3BlY2lmeSBhIG5hbWUsIEFXUyBDbG91ZEZvcm1hdGlvbiBjb252ZXJ0cyBpdCB0byBsb3dlcmNhc2UuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgbmFtZSwgQVdTIENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlcyBhIHVuaXF1ZSBwaHlzaWNhbCBJRCBhbmQgdXNlcyB0aGF0IElEIGZvciB0aGUgREIgaW5zdGFuY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW05hbWUgVHlwZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtbmFtZS5odG1sKS5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY29uc3RyYWludHMgdGhhdCBhcHBseSB0byBEQiBpbnN0YW5jZSBpZGVudGlmaWVycywgc2VlIFtOYW1pbmcgY29uc3RyYWludHMgaW4gQW1hem9uIFJEU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfTGltaXRzLmh0bWwjUkRTX0xpbWl0cy5Db25zdHJhaW50cykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogICBJZiB5b3Ugc3BlY2lmeSBhIG5hbWUsIHlvdSBjYW4ndCBwZXJmb3JtIHVwZGF0ZXMgdGhhdCByZXF1aXJlIHJlcGxhY2VtZW50IG9mIHRoaXMgcmVzb3VyY2UuIFlvdSBjYW4gcGVyZm9ybSB1cGRhdGVzIHRoYXQgcmVxdWlyZSBubyBvciBzb21lIGludGVycnVwdGlvbi4gSWYgeW91IG11c3QgcmVwbGFjZSB0aGUgcmVzb3VyY2UsIHNwZWNpZnkgYSBuZXcgbmFtZS5cbiAqL1xuREJJbnN0YW5jZUlkZW50aWZpZXI/OiBzdHJpbmdcbkRiaVJlc291cmNlSWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIG1lYW5pbmcgb2YgdGhpcyBwYXJhbWV0ZXIgZGlmZmVycyBhY2NvcmRpbmcgdG8gdGhlIGRhdGFiYXNlIGVuZ2luZSB5b3UgdXNlLlxuICogICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCB0aGlzIHByb3BlcnR5IG9ubHkgYXBwbGllcyB0byBSRFMgZm9yIE9yYWNsZS5cbiAqICAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIGRhdGFiYXNlIG5hbWUgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqICAgKkRiMiogXG4gKiAgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIHRvIGNyZWF0ZSB3aGVuIHRoZSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLiBJZiB0aGlzIHBhcmFtZXRlciBpc24ndCBzcGVjaWZpZWQsIG5vIGRhdGFiYXNlIGlzIGNyZWF0ZWQgaW4gdGhlIERCIGluc3RhbmNlLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGNvbnRhaW4gMSB0byA2NCBsZXR0ZXJzIG9yIG51bWJlcnMuXG4gKiAgICsgIE11c3QgYmVnaW4gd2l0aCBhIGxldHRlci4gU3Vic2VxdWVudCBjaGFyYWN0ZXJzIGNhbiBiZSBsZXR0ZXJzLCB1bmRlcnNjb3Jlcywgb3IgZGlnaXRzICgwLTkpLlxuICogICArICBDYW4ndCBiZSBhIHdvcmQgcmVzZXJ2ZWQgYnkgdGhlIHNwZWNpZmllZCBkYXRhYmFzZSBlbmdpbmUuXG4gKiAgIFxuICogICAqTXlTUUwqIFxuICogIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0byBjcmVhdGUgd2hlbiB0aGUgREIgaW5zdGFuY2UgaXMgY3JlYXRlZC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgbm8gZGF0YWJhc2UgaXMgY3JlYXRlZCBpbiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgY29udGFpbiAxIHRvIDY0IGxldHRlcnMgb3IgbnVtYmVycy5cbiAqICAgKyAgQ2FuJ3QgYmUgYSB3b3JkIHJlc2VydmVkIGJ5IHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UgZW5naW5lXG4gKiAgIFxuICogICAqTWFyaWFEQiogXG4gKiAgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIHRvIGNyZWF0ZSB3aGVuIHRoZSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCBubyBkYXRhYmFzZSBpcyBjcmVhdGVkIGluIHRoZSBEQiBpbnN0YW5jZS5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBjb250YWluIDEgdG8gNjQgbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBDYW4ndCBiZSBhIHdvcmQgcmVzZXJ2ZWQgYnkgdGhlIHNwZWNpZmllZCBkYXRhYmFzZSBlbmdpbmVcbiAqICAgXG4gKiAgICpQb3N0Z3JlU1FMKiBcbiAqICBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgdG8gY3JlYXRlIHdoZW4gdGhlIERCIGluc3RhbmNlIGlzIGNyZWF0ZWQuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGBgcG9zdGdyZXNgYCBkYXRhYmFzZSBpcyBjcmVhdGVkIGluIHRoZSBEQiBpbnN0YW5jZS5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyLiBTdWJzZXF1ZW50IGNoYXJhY3RlcnMgY2FuIGJlIGxldHRlcnMsIHVuZGVyc2NvcmVzLCBvciBkaWdpdHMgKDAtOSkuXG4gKiAgICsgIE11c3QgY29udGFpbiAxIHRvIDYzIGNoYXJhY3RlcnMuXG4gKiAgICsgIENhbid0IGJlIGEgd29yZCByZXNlcnZlZCBieSB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlIGVuZ2luZVxuICogICBcbiAqICAgKk9yYWNsZSogXG4gKiAgVGhlIE9yYWNsZSBTeXN0ZW0gSUQgKFNJRCkgb2YgdGhlIGNyZWF0ZWQgREIgaW5zdGFuY2UuIElmIHlvdSBzcGVjaWZ5IGBgbnVsbGBgLCB0aGUgZGVmYXVsdCB2YWx1ZSBgYE9SQ0xgYCBpcyB1c2VkLiBZb3UgY2FuJ3Qgc3BlY2lmeSB0aGUgc3RyaW5nIE5VTEwsIG9yIGFueSBvdGhlciByZXNlcnZlZCB3b3JkLCBmb3IgYGBEQk5hbWVgYC4gXG4gKiAgRGVmYXVsdDogYGBPUkNMYGAgXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIENhbid0IGJlIGxvbmdlciB0aGFuIDggY2hhcmFjdGVyc1xuICogICBcbiAqICAgKlNRTCBTZXJ2ZXIqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBNdXN0IGJlIG51bGwuXG4gKi9cbkRCTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiBhbiBleGlzdGluZyBEQiBwYXJhbWV0ZXIgZ3JvdXAgb3IgYSByZWZlcmVuY2UgdG8gYW4gW0FXUzo6UkRTOjpEQlBhcmFtZXRlckdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZHMtZGJwYXJhbWV0ZXJncm91cC5odG1sKSByZXNvdXJjZSBjcmVhdGVkIGluIHRoZSB0ZW1wbGF0ZS5cbiAqICBUbyBsaXN0IGFsbCBvZiB0aGUgYXZhaWxhYmxlIERCIHBhcmFtZXRlciBncm91cCBuYW1lcywgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAqICAgYGBhd3MgcmRzIGRlc2NyaWJlLWRiLXBhcmFtZXRlci1ncm91cHMgLS1xdWVyeSBcIkRCUGFyYW1ldGVyR3JvdXBzW10uREJQYXJhbWV0ZXJHcm91cE5hbWVcIiAtLW91dHB1dCB0ZXh0YGAgXG4gKiAgIElmIGFueSBvZiB0aGUgZGF0YSBtZW1iZXJzIG9mIHRoZSByZWZlcmVuY2VkIHBhcmFtZXRlciBncm91cCBhcmUgY2hhbmdlZCBkdXJpbmcgYW4gdXBkYXRlLCB0aGUgREIgaW5zdGFuY2UgbWlnaHQgbmVlZCB0byBiZSByZXN0YXJ0ZWQsIHdoaWNoIGNhdXNlcyBzb21lIGludGVycnVwdGlvbi4gSWYgdGhlIHBhcmFtZXRlciBncm91cCBjb250YWlucyBzdGF0aWMgcGFyYW1ldGVycywgd2hldGhlciB0aGV5IHdlcmUgY2hhbmdlZCBvciBub3QsIGFuIHVwZGF0ZSB0cmlnZ2VycyBhIHJlYm9vdC5cbiAqICAgSWYgeW91IGRvbid0IHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBEQlBhcmFtZXRlckdyb3VwTmFtZWBgIHByb3BlcnR5LCB0aGUgZGVmYXVsdCBEQiBwYXJhbWV0ZXIgZ3JvdXAgZm9yIHRoZSBzcGVjaWZpZWQgZW5naW5lIGFuZCBlbmdpbmUgdmVyc2lvbiBpcyB1c2VkLlxuICovXG5EQlBhcmFtZXRlckdyb3VwTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBBIGxpc3Qgb2YgdGhlIERCIHNlY3VyaXR5IGdyb3VwcyB0byBhc3NpZ24gdG8gdGhlIERCIGluc3RhbmNlLiBUaGUgbGlzdCBjYW4gaW5jbHVkZSBib3RoIHRoZSBuYW1lIG9mIGV4aXN0aW5nIERCIHNlY3VyaXR5IGdyb3VwcyBvciByZWZlcmVuY2VzIHRvIEFXUzo6UkRTOjpEQlNlY3VyaXR5R3JvdXAgcmVzb3VyY2VzIGNyZWF0ZWQgaW4gdGhlIHRlbXBsYXRlLlxuICogICBJZiB5b3Ugc2V0IERCU2VjdXJpdHlHcm91cHMsIHlvdSBtdXN0IG5vdCBzZXQgVlBDU2VjdXJpdHlHcm91cHMsIGFuZCB2aWNlIHZlcnNhLiBBbHNvLCBub3RlIHRoYXQgdGhlIERCU2VjdXJpdHlHcm91cHMgcHJvcGVydHkgZXhpc3RzIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgcmVnaW9ucyBhbmQgaXMgbm8gbG9uZ2VyIHJlY29tbWVuZGVkIGZvciBwcm92aWRpbmcgc2VjdXJpdHkgaW5mb3JtYXRpb24gdG8gYW4gUkRTIERCIGluc3RhbmNlLiBJbnN0ZWFkLCB1c2UgVlBDU2VjdXJpdHlHcm91cHMuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIEFXUyBDbG91ZEZvcm1hdGlvbiBzZW5kcyBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyAoaWYgc3BlY2lmaWVkKSB0byBBbWF6b24gUkRTIGR1cmluZyBjcmVhdGUgb3BlcmF0aW9uczpcbiAqICAgKyAgIGBgQWxsb2NhdGVkU3RvcmFnZWBgIFxuICogICArICAgYGBBdXRvTWlub3JWZXJzaW9uVXBncmFkZWBgIFxuICogICArICAgYGBBdmFpbGFiaWxpdHlab25lYGAgXG4gKiAgICsgICBgYEJhY2t1cFJldGVudGlvblBlcmlvZGBgIFxuICogICArICAgYGBDaGFyYWN0ZXJTZXROYW1lYGAgXG4gKiAgICsgICBgYERCSW5zdGFuY2VDbGFzc2BgIFxuICogICArICAgYGBEQk5hbWVgYCBcbiAqICAgKyAgIGBgREJQYXJhbWV0ZXJHcm91cE5hbWVgYCBcbiAqICAgKyAgIGBgREJTZWN1cml0eUdyb3Vwc2BgIFxuICogICArICAgYGBEQlN1Ym5ldEdyb3VwTmFtZWBgIFxuICogICArICAgYGBFbmdpbmVgYCBcbiAqICAgKyAgIGBgRW5naW5lVmVyc2lvbmBgIFxuICogICArICAgYGBJb3BzYGAgXG4gKiAgICsgICBgYExpY2Vuc2VNb2RlbGBgIFxuICogICArICAgYGBNYXN0ZXJVc2VybmFtZWBgIFxuICogICArICAgYGBNYXN0ZXJVc2VyUGFzc3dvcmRgYCBcbiAqICAgKyAgIGBgTXVsdGlBWmBgIFxuICogICArICAgYGBPcHRpb25Hcm91cE5hbWVgYCBcbiAqICAgKyAgIGBgUHJlZmVycmVkQmFja3VwV2luZG93YGAgXG4gKiAgICsgICBgYFByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93YGAgXG4gKiAgIFxuICogIEFsbCBvdGhlciBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVkLiBTcGVjaWZ5IGEgdmlydHVhbCBwcml2YXRlIGNsb3VkIChWUEMpIHNlY3VyaXR5IGdyb3VwIGlmIHlvdSB3YW50IHRvIHN1Ym1pdCBvdGhlciBwcm9wZXJ0aWVzLCBzdWNoIGFzIGBgU3RvcmFnZVR5cGVgYCwgYGBTdG9yYWdlRW5jcnlwdGVkYGAsIG9yIGBgS21zS2V5SWRgYC4gSWYgeW91J3JlIGFscmVhZHkgdXNpbmcgdGhlIGBgREJTZWN1cml0eUdyb3Vwc2BgIHByb3BlcnR5LCB5b3UgY2FuJ3QgdXNlIHRoZXNlIG90aGVyIHByb3BlcnRpZXMgYnkgdXBkYXRpbmcgeW91ciBEQiBpbnN0YW5jZSB0byB1c2UgYSBWUEMgc2VjdXJpdHkgZ3JvdXAuIFlvdSBtdXN0IHJlY3JlYXRlIHRoZSBEQiBpbnN0YW5jZS5cbiAqL1xuREJTZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBuYW1lIG9yIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBEQiBzbmFwc2hvdCB0aGF0J3MgdXNlZCB0byByZXN0b3JlIHRoZSBEQiBpbnN0YW5jZS4gSWYgeW91J3JlIHJlc3RvcmluZyBmcm9tIGEgc2hhcmVkIG1hbnVhbCBEQiBzbmFwc2hvdCwgeW91IG11c3Qgc3BlY2lmeSB0aGUgQVJOIG9mIHRoZSBzbmFwc2hvdC5cbiAqICBCeSBzcGVjaWZ5aW5nIHRoaXMgcHJvcGVydHksIHlvdSBjYW4gY3JlYXRlIGEgREIgaW5zdGFuY2UgZnJvbSB0aGUgc3BlY2lmaWVkIERCIHNuYXBzaG90LiBJZiB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5IGlzIGFuIGVtcHR5IHN0cmluZyBvciB0aGUgYGBBV1M6OlJEUzo6REJJbnN0YW5jZWBgIGRlY2xhcmF0aW9uIGhhcyBubyBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIGEgbmV3IGRhdGFiYXNlLiBJZiB0aGUgcHJvcGVydHkgY29udGFpbnMgYSB2YWx1ZSAob3RoZXIgdGhhbiBhbiBlbXB0eSBzdHJpbmcpLCBBV1MgQ2xvdWRGb3JtYXRpb24gY3JlYXRlcyBhIGRhdGFiYXNlIGZyb20gdGhlIHNwZWNpZmllZCBzbmFwc2hvdC4gSWYgYSBzbmFwc2hvdCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBkb2Vzbid0IGV4aXN0LCBBV1MgQ2xvdWRGb3JtYXRpb24gY2FuJ3QgY3JlYXRlIHRoZSBkYXRhYmFzZSBhbmQgaXQgcm9sbHMgYmFjayB0aGUgc3RhY2suXG4gKiAgU29tZSBEQiBpbnN0YW5jZSBwcm9wZXJ0aWVzIGFyZW4ndCB2YWxpZCB3aGVuIHlvdSByZXN0b3JlIGZyb20gYSBzbmFwc2hvdCwgc3VjaCBhcyB0aGUgYGBNYXN0ZXJVc2VybmFtZWBgIGFuZCBgYE1hc3RlclVzZXJQYXNzd29yZGBgIHByb3BlcnRpZXMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvcGVydGllcyB0aGF0IHlvdSBjYW4gc3BlY2lmeSwgc2VlIHRoZSBgYFJlc3RvcmVEQkluc3RhbmNlRnJvbURCU25hcHNob3RgYCBhY3Rpb24gaW4gdGhlICpBbWF6b24gUkRTIEFQSSBSZWZlcmVuY2UqLlxuICogIEFmdGVyIHlvdSByZXN0b3JlIGEgREIgaW5zdGFuY2Ugd2l0aCBhIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgeW91IG11c3Qgc3BlY2lmeSB0aGUgc2FtZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkgZm9yIGFueSBmdXR1cmUgdXBkYXRlcyB0byB0aGUgREIgaW5zdGFuY2UuIFdoZW4geW91IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSBmb3IgYW4gdXBkYXRlLCB0aGUgREIgaW5zdGFuY2UgaXMgbm90IHJlc3RvcmVkIGZyb20gdGhlIERCIHNuYXBzaG90IGFnYWluLCBhbmQgdGhlIGRhdGEgaW4gdGhlIGRhdGFiYXNlIGlzIG5vdCBjaGFuZ2VkLiBIb3dldmVyLCBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBhbiBlbXB0eSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLCBhbmQgdGhlIG9yaWdpbmFsIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQuIElmIHlvdSBzcGVjaWZ5IGEgcHJvcGVydHkgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgc25hcHNob3QgcmVzdG9yZSBwcm9wZXJ0eSwgYSBuZXcgREIgaW5zdGFuY2UgaXMgcmVzdG9yZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgYW5kIHRoZSBvcmlnaW5hbCBEQiBpbnN0YW5jZSBpcyBkZWxldGVkLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkgdG8gcmVzdG9yZSBhIERCIGluc3RhbmNlIChhcyBvcHBvc2VkIHRvIHNwZWNpZnlpbmcgaXQgZm9yIERCIGluc3RhbmNlIHVwZGF0ZXMpLCB0aGVuIGRvbid0IHNwZWNpZnkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICArICAgYGBDaGFyYWN0ZXJTZXROYW1lYGAgXG4gKiAgICsgICBgYERCQ2x1c3RlcklkZW50aWZpZXJgYCBcbiAqICAgKyAgIGBgREJOYW1lYGAgXG4gKiAgICsgICBgYEttc0tleUlkYGAgXG4gKiAgICsgICBgYE1hc3RlclVzZXJuYW1lYGAgXG4gKiAgICsgICBgYE1hc3RlclVzZXJQYXNzd29yZGBgIFxuICogICArICAgYGBQcm9tb3Rpb25UaWVyYGAgXG4gKiAgICsgICBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgXG4gKiAgICsgICBgYFNvdXJjZVJlZ2lvbmBgIFxuICogICArICAgYGBTdG9yYWdlRW5jcnlwdGVkYGAgKGZvciBhbiB1bmVuY3J5cHRlZCBzbmFwc2hvdClcbiAqICAgKyAgIGBgVGltZXpvbmVgYCBcbiAqICAgXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gU25hcHNob3QgcmVzdG9yZSBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICovXG5EQlNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZ1xuLyoqXG4gKiBBIERCIHN1Ym5ldCBncm91cCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgREIgaW5zdGFuY2UuIElmIHlvdSB1cGRhdGUgdGhpcyB2YWx1ZSwgdGhlIG5ldyBzdWJuZXQgZ3JvdXAgbXVzdCBiZSBhIHN1Ym5ldCBncm91cCBpbiBhIG5ldyBWUEMuIFxuICogIElmIHRoZXJlJ3Mgbm8gREIgc3VibmV0IGdyb3VwLCB0aGVuIHRoZSBEQiBpbnN0YW5jZSBpc24ndCBhIFZQQyBEQiBpbnN0YW5jZS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyBBbWF6b24gUkRTIGluIGEgVlBDLCBzZWUgW0FtYXpvbiBWUEMgYW5kIEFtYXpvbiBSRFNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1ZQQy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouIFxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIEFtYXpvbiBBdXJvcmEgREIgaW5zdGFuY2VzLiBUaGUgREIgc3VibmV0IGdyb3VwIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuIElmIHNwZWNpZmllZCwgdGhlIHNldHRpbmcgbXVzdCBtYXRjaCB0aGUgREIgY2x1c3RlciBzZXR0aW5nLlxuICovXG5EQlN1Ym5ldEdyb3VwTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgT3JhY2xlIHN5c3RlbSBpZGVudGlmaWVyIChTSUQpLCB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUgT3JhY2xlIGRhdGFiYXNlIGluc3RhbmNlIHRoYXQgbWFuYWdlcyB5b3VyIGRhdGFiYXNlIGZpbGVzLiBJbiB0aGlzIGNvbnRleHQsIHRoZSB0ZXJtIFwiT3JhY2xlIGRhdGFiYXNlIGluc3RhbmNlXCIgcmVmZXJzIGV4Y2x1c2l2ZWx5IHRvIHRoZSBzeXN0ZW0gZ2xvYmFsIGFyZWEgKFNHQSkgYW5kIE9yYWNsZSBiYWNrZ3JvdW5kIHByb2Nlc3Nlcy4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBTSUQsIHRoZSB2YWx1ZSBkZWZhdWx0cyB0byBgYFJEU0NEQmBgLiBUaGUgT3JhY2xlIFNJRCBpcyBhbHNvIHRoZSBuYW1lIG9mIHlvdXIgQ0RCLlxuICovXG5EQlN5c3RlbUlkPzogc3RyaW5nXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBEQiBpbnN0YW5jZSBoYXMgYSBkZWRpY2F0ZWQgbG9nIHZvbHVtZSAoRExWKSBlbmFibGVkLlxuICovXG5EZWRpY2F0ZWRMb2dWb2x1bWU/OiBib29sZWFuXG4vKipcbiAqIEEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0byByZW1vdmUgYXV0b21hdGVkIGJhY2t1cHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQuIFRoaXMgcGFyYW1ldGVyIGlzbid0IGNhc2Utc2Vuc2l0aXZlLiBUaGUgZGVmYXVsdCBpcyB0byByZW1vdmUgYXV0b21hdGVkIGJhY2t1cHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQuXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gV2hlbiB5b3UgZGVsZXRlIGEgREIgY2x1c3RlciwgYWxsIGF1dG9tYXRlZCBiYWNrdXBzIGZvciB0aGF0IERCIGNsdXN0ZXIgYXJlIGRlbGV0ZWQgYW5kIGNhbid0IGJlIHJlY292ZXJlZC4gTWFudWFsIERCIGNsdXN0ZXIgc25hcHNob3RzIG9mIHRoZSBEQiBjbHVzdGVyIGFyZSBub3QgZGVsZXRlZC5cbiAqL1xuRGVsZXRlQXV0b21hdGVkQmFja3Vwcz86IGJvb2xlYW5cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGhhcyBkZWxldGlvbiBwcm90ZWN0aW9uIGVuYWJsZWQuIFRoZSBkYXRhYmFzZSBjYW4ndCBiZSBkZWxldGVkIHdoZW4gZGVsZXRpb24gcHJvdGVjdGlvbiBpcyBlbmFibGVkLiBCeSBkZWZhdWx0LCBkZWxldGlvbiBwcm90ZWN0aW9uIGlzbid0IGVuYWJsZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0RlbGV0aW5nIGEgREIgSW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX0RlbGV0ZUluc3RhbmNlLmh0bWwpLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIEFtYXpvbiBBdXJvcmEgREIgaW5zdGFuY2VzLiBZb3UgY2FuIGVuYWJsZSBvciBkaXNhYmxlIGRlbGV0aW9uIHByb3RlY3Rpb24gZm9yIHRoZSBEQiBjbHVzdGVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGBgQ3JlYXRlREJDbHVzdGVyYGAuIERCIGluc3RhbmNlcyBpbiBhIERCIGNsdXN0ZXIgY2FuIGJlIGRlbGV0ZWQgZXZlbiB3aGVuIGRlbGV0aW9uIHByb3RlY3Rpb24gaXMgZW5hYmxlZCBmb3IgdGhlIERCIGNsdXN0ZXIuXG4gKi9cbkRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW5cbi8qKlxuICogVGhlIEFjdGl2ZSBEaXJlY3RvcnkgZGlyZWN0b3J5IElEIHRvIGNyZWF0ZSB0aGUgREIgaW5zdGFuY2UgaW4uIEN1cnJlbnRseSwgb25seSBEYjIsIE15U1FMLCBNaWNyb3NvZnQgU1FMIFNlcnZlciwgT3JhY2xlLCBhbmQgUG9zdGdyZVNRTCBEQiBpbnN0YW5jZXMgY2FuIGJlIGNyZWF0ZWQgaW4gYW4gQWN0aXZlIERpcmVjdG9yeSBEb21haW4uXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbS2VyYmVyb3MgQXV0aGVudGljYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9rZXJiZXJvcy1hdXRoZW50aWNhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKi9cbkRvbWFpbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIGZvciB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCB3aXRoIHRoZSBjcmVkZW50aWFscyBmb3IgdGhlIHVzZXIgam9pbmluZyB0aGUgZG9tYWluLlxuICogIEV4YW1wbGU6IGBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjpyZWdpb246YWNjb3VudC1udW1iZXI6c2VjcmV0Om15c2VsZm1hbmFnZWRBRHRlc3RzZWNyZXQtMTIzNDU2YGBcbiAqL1xuRG9tYWluQXV0aFNlY3JldEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSVB2NCBETlMgSVAgYWRkcmVzc2VzIG9mIHlvdXIgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IEFjdGl2ZSBEaXJlY3RvcnkgZG9tYWluIGNvbnRyb2xsZXJzLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBUd28gSVAgYWRkcmVzc2VzIG11c3QgYmUgcHJvdmlkZWQuIElmIHRoZXJlIGlzbid0IGEgc2Vjb25kYXJ5IGRvbWFpbiBjb250cm9sbGVyLCB1c2UgdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHByaW1hcnkgZG9tYWluIGNvbnRyb2xsZXIgZm9yIGJvdGggZW50cmllcyBpbiB0aGUgbGlzdC5cbiAqICAgXG4gKiAgRXhhbXBsZTogYGAxMjMuMTI0LjEyNS4xMjYsMjM0LjIzNS4yMzYuMjM3YGBcbiAqL1xuRG9tYWluRG5zSXBzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSAoRlFETikgb2YgYW4gQWN0aXZlIERpcmVjdG9yeSBkb21haW4uXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIENhbid0IGJlIGxvbmdlciB0aGFuIDY0IGNoYXJhY3RlcnMuXG4gKiAgIFxuICogIEV4YW1wbGU6IGBgbXltYW5hZ2VkQUR0ZXN0Lm15bWFuYWdlZEFELm15ZG9tYWluYGBcbiAqL1xuRG9tYWluRnFkbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgSUFNIHJvbGUgdG8gdXNlIHdoZW4gbWFraW5nIEFQSSBjYWxscyB0byB0aGUgRGlyZWN0b3J5IFNlcnZpY2UuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGZvbGxvd2luZyBEQiBpbnN0YW5jZXM6XG4gKiAgICsgIEFtYXpvbiBBdXJvcmEgKFRoZSBkb21haW4gaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4pXG4gKiAgICsgIFJEUyBDdXN0b21cbiAqL1xuRG9tYWluSUFNUm9sZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFjdGl2ZSBEaXJlY3Rvcnkgb3JnYW5pemF0aW9uYWwgdW5pdCBmb3IgeW91ciBEQiBpbnN0YW5jZSB0byBqb2luLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIGluIHRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgZm9ybWF0LlxuICogICArICBDYW4ndCBiZSBsb25nZXIgdGhhbiA2NCBjaGFyYWN0ZXJzLlxuICogICBcbiAqICBFeGFtcGxlOiBgYE9VPW15bWFuYWdlZEFEdGVzdE9VLERDPW15bWFuYWdlZEFEdGVzdCxEQz1teW1hbmFnZWRBRCxEQz1teWRvbWFpbmBgXG4gKi9cbkRvbWFpbk91Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBsaXN0IG9mIGxvZyB0eXBlcyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgZXhwb3J0aW5nIHRvIENsb3VkV2F0Y2ggTG9ncy4gVGhlIHZhbHVlcyBpbiB0aGUgbGlzdCBkZXBlbmQgb24gdGhlIERCIGVuZ2luZSBiZWluZyB1c2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtQdWJsaXNoaW5nIERhdGFiYXNlIExvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggTG9nc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfTG9nQWNjZXNzLmh0bWwjVVNFUl9Mb2dBY2Nlc3MuUHJvY2VkdXJhbC5VcGxvYWR0b0Nsb3VkV2F0Y2gpIGluIHRoZSAqQW1hem9uIFJlbGF0aW9uYWwgRGF0YWJhc2UgU2VydmljZSBVc2VyIEd1aWRlKi5cbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBDbG91ZFdhdGNoIExvZ3MgZXhwb3J0cyBhcmUgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4gXG4gKiAgICpEYjIqIFxuICogIFZhbGlkIHZhbHVlczogYGBkaWFnLmxvZ2BgLCBgYG5vdGlmeS5sb2dgYCBcbiAqICAgKk1hcmlhREIqIFxuICogIFZhbGlkIHZhbHVlczogYGBhdWRpdGBgLCBgYGVycm9yYGAsIGBgZ2VuZXJhbGBgLCBgYHNsb3dxdWVyeWBgIFxuICogICAqTWljcm9zb2Z0IFNRTCBTZXJ2ZXIqIFxuICogIFZhbGlkIHZhbHVlczogYGBhZ2VudGBgLCBgYGVycm9yYGAgXG4gKiAgICpNeVNRTCogXG4gKiAgVmFsaWQgdmFsdWVzOiBgYGF1ZGl0YGAsIGBgZXJyb3JgYCwgYGBnZW5lcmFsYGAsIGBgc2xvd3F1ZXJ5YGAgXG4gKiAgICpPcmFjbGUqIFxuICogIFZhbGlkIHZhbHVlczogYGBhbGVydGBgLCBgYGF1ZGl0YGAsIGBgbGlzdGVuZXJgYCwgYGB0cmFjZWBgLCBgYG9lbWFnZW50YGAgXG4gKiAgICpQb3N0Z3JlU1FMKiBcbiAqICBWYWxpZCB2YWx1ZXM6IGBgcG9zdGdyZXNxbGBgLCBgYHVwZ3JhZGVgYFxuICovXG5FbmFibGVDbG91ZHdhdGNoTG9nc0V4cG9ydHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdG8gZW5hYmxlIG1hcHBpbmcgb2YgQVdTIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSBhY2NvdW50cyB0byBkYXRhYmFzZSBhY2NvdW50cy4gQnkgZGVmYXVsdCwgbWFwcGluZyBpcyBkaXNhYmxlZC5cbiAqICBUaGlzIHByb3BlcnR5IGlzIHN1cHBvcnRlZCBmb3IgUkRTIGZvciBNYXJpYURCLCBSRFMgZm9yIE15U1FMLCBhbmQgUkRTIGZvciBQb3N0Z3JlU1FMLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJQU0gRGF0YWJhc2UgQXV0aGVudGljYXRpb24gZm9yIE1hcmlhREIsIE15U1FMLCBhbmQgUG9zdGdyZVNRTF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VzaW5nV2l0aFJEUy5JQU1EQkF1dGguaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKiBcbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBNYXBwaW5nIEFXUyBJQU0gYWNjb3VudHMgdG8gZGF0YWJhc2UgYWNjb3VudHMgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqL1xuRW5hYmxlSUFNRGF0YWJhc2VBdXRoZW50aWNhdGlvbj86IGJvb2xlYW5cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5hYmxlIFBlcmZvcm1hbmNlIEluc2lnaHRzIGZvciB0aGUgREIgaW5zdGFuY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIEFtYXpvbiBQZXJmb3JtYW5jZSBJbnNpZ2h0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfUGVyZkluc2lnaHRzLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqL1xuRW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cz86IGJvb2xlYW5cbkVuZHBvaW50PzogRW5kcG9pbnRcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIGVuZ2luZSB0byB1c2UgZm9yIHRoaXMgREIgaW5zdGFuY2UuIE5vdCBldmVyeSBkYXRhYmFzZSBlbmdpbmUgaXMgYXZhaWxhYmxlIGluIGV2ZXJ5IEFXUyBSZWdpb24uXG4gKiAgVGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCB3aGVuIGNyZWF0aW5nIGEgREIgaW5zdGFuY2UuXG4gKiAgIFlvdSBjYW4gY29udmVydCBhbiBPcmFjbGUgZGF0YWJhc2UgZnJvbSB0aGUgbm9uLUNEQiBhcmNoaXRlY3R1cmUgdG8gdGhlIGNvbnRhaW5lciBkYXRhYmFzZSAoQ0RCKSBhcmNoaXRlY3R1cmUgYnkgdXBkYXRpbmcgdGhlIGBgRW5naW5lYGAgdmFsdWUgaW4geW91ciB0ZW1wbGF0ZXMgZnJvbSBgYG9yYWNsZS1lZWBgIHRvIGBgb3JhY2xlLWVlLWNkYmBgIG9yIGZyb20gYGBvcmFjbGUtc2UyYGAgdG8gYGBvcmFjbGUtc2UyLWNkYmBgLiBDb252ZXJ0aW5nIHRvIHRoZSBDREIgYXJjaGl0ZWN0dXJlIHJlcXVpcmVzIGFuIGludGVycnVwdGlvbi5cbiAqICAgVmFsaWQgVmFsdWVzOlxuICogICArICAgYGBhdXJvcmEtbXlzcWxgYCAoZm9yIEF1cm9yYSBNeVNRTCBEQiBpbnN0YW5jZXMpXG4gKiAgICsgICBgYGF1cm9yYS1wb3N0Z3Jlc3FsYGAgKGZvciBBdXJvcmEgUG9zdGdyZVNRTCBEQiBpbnN0YW5jZXMpXG4gKiAgICsgICBgYGN1c3RvbS1vcmFjbGUtZWVgYCAoZm9yIFJEUyBDdXN0b20gZm9yIE9yYWNsZSBEQiBpbnN0YW5jZXMpXG4gKiAgICsgICBgYGN1c3RvbS1vcmFjbGUtZWUtY2RiYGAgKGZvciBSRFMgQ3VzdG9tIGZvciBPcmFjbGUgREIgaW5zdGFuY2VzKVxuICogICArICAgYGBjdXN0b20tc3Fsc2VydmVyLWVlYGAgKGZvciBSRFMgQ3VzdG9tIGZvciBTUUwgU2VydmVyIERCIGluc3RhbmNlcylcbiAqICAgKyAgIGBgY3VzdG9tLXNxbHNlcnZlci1zZWBgIChmb3IgUkRTIEN1c3RvbSBmb3IgU1FMIFNlcnZlciBEQiBpbnN0YW5jZXMpXG4gKiAgICsgICBgYGN1c3RvbS1zcWxzZXJ2ZXItd2ViYGAgKGZvciBSRFMgQ3VzdG9tIGZvciBTUUwgU2VydmVyIERCIGluc3RhbmNlcylcbiAqICAgKyAgIGBgZGIyLWFlYGAgXG4gKiAgICsgICBgYGRiMi1zZWBgIFxuICogICArICAgYGBtYXJpYWRiYGAgXG4gKiAgICsgICBgYG15c3FsYGAgXG4gKiAgICsgICBgYG9yYWNsZS1lZWBgIFxuICogICArICAgYGBvcmFjbGUtZWUtY2RiYGAgXG4gKiAgICsgICBgYG9yYWNsZS1zZTJgYCBcbiAqICAgKyAgIGBgb3JhY2xlLXNlMi1jZGJgYCBcbiAqICAgKyAgIGBgcG9zdGdyZXNgYCBcbiAqICAgKyAgIGBgc3Fsc2VydmVyLWVlYGAgXG4gKiAgICsgICBgYHNxbHNlcnZlci1zZWBgIFxuICogICArICAgYGBzcWxzZXJ2ZXItZXhgYCBcbiAqICAgKyAgIGBgc3Fsc2VydmVyLXdlYmBgXG4gKi9cbkVuZ2luZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlmZSBjeWNsZSB0eXBlIGZvciB0aGlzIERCIGluc3RhbmNlLlxuICogICBCeSBkZWZhdWx0LCB0aGlzIHZhbHVlIGlzIHNldCB0byBgYG9wZW4tc291cmNlLXJkcy1leHRlbmRlZC1zdXBwb3J0YGAsIHdoaWNoIGVucm9sbHMgeW91ciBEQiBpbnN0YW5jZSBpbnRvIEFtYXpvbiBSRFMgRXh0ZW5kZWQgU3VwcG9ydC4gQXQgdGhlIGVuZCBvZiBzdGFuZGFyZCBzdXBwb3J0LCB5b3UgY2FuIGF2b2lkIGNoYXJnZXMgZm9yIEV4dGVuZGVkIFN1cHBvcnQgYnkgc2V0dGluZyB0aGUgdmFsdWUgdG8gYGBvcGVuLXNvdXJjZS1yZHMtZXh0ZW5kZWQtc3VwcG9ydC1kaXNhYmxlZGBgLiBJbiB0aGlzIGNhc2UsIGNyZWF0aW5nIHRoZSBEQiBpbnN0YW5jZSB3aWxsIGZhaWwgaWYgdGhlIERCIG1ham9yIHZlcnNpb24gaXMgcGFzdCBpdHMgZW5kIG9mIHN0YW5kYXJkIHN1cHBvcnQgZGF0ZS5cbiAqICAgVGhpcyBzZXR0aW5nIGFwcGxpZXMgb25seSB0byBSRFMgZm9yIE15U1FMIGFuZCBSRFMgZm9yIFBvc3RncmVTUUwuIEZvciBBbWF6b24gQXVyb3JhIERCIGluc3RhbmNlcywgdGhlIGxpZmUgY3ljbGUgdHlwZSBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICogIFlvdSBjYW4gdXNlIHRoaXMgc2V0dGluZyB0byBlbnJvbGwgeW91ciBEQiBpbnN0YW5jZSBpbnRvIEFtYXpvbiBSRFMgRXh0ZW5kZWQgU3VwcG9ydC4gV2l0aCBSRFMgRXh0ZW5kZWQgU3VwcG9ydCwgeW91IGNhbiBydW4gdGhlIHNlbGVjdGVkIG1ham9yIGVuZ2luZSB2ZXJzaW9uIG9uIHlvdXIgREIgaW5zdGFuY2UgcGFzdCB0aGUgZW5kIG9mIHN0YW5kYXJkIHN1cHBvcnQgZm9yIHRoYXQgZW5naW5lIHZlcnNpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIEFtYXpvbiBSRFMgRXh0ZW5kZWQgU3VwcG9ydF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL2V4dGVuZGVkLXN1cHBvcnQuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIFZhbGlkIFZhbHVlczogYGBvcGVuLXNvdXJjZS1yZHMtZXh0ZW5kZWQtc3VwcG9ydCB8IG9wZW4tc291cmNlLXJkcy1leHRlbmRlZC1zdXBwb3J0LWRpc2FibGVkYGAgXG4gKiAgRGVmYXVsdDogYGBvcGVuLXNvdXJjZS1yZHMtZXh0ZW5kZWQtc3VwcG9ydGBgXG4gKi9cbkVuZ2luZUxpZmVjeWNsZVN1cHBvcnQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBkYXRhYmFzZSBlbmdpbmUgdG8gdXNlLlxuICogIEZvciBhIGxpc3Qgb2YgdmFsaWQgZW5naW5lIHZlcnNpb25zLCB1c2UgdGhlIGBgRGVzY3JpYmVEQkVuZ2luZVZlcnNpb25zYGAgYWN0aW9uLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBkYXRhYmFzZSBlbmdpbmVzIGFuZCBsaW5rcyB0byBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSB3aXRoIEFtYXpvbiBSRFMuIE5vdCBldmVyeSBkYXRhYmFzZSBlbmdpbmUgaXMgYXZhaWxhYmxlIGZvciBldmVyeSBBV1MgUmVnaW9uLlxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZGF0YWJhc2UgZW5naW5lIHRvIGJlIHVzZWQgYnkgdGhlIERCIGluc3RhbmNlIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKiAgICpEYjIqIFxuICogIFNlZSBbQW1hem9uIFJEUyBmb3IgRGIyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9EYjIuaHRtbCNEYjIuQ29uY2VwdHMuVmVyc2lvbk1nbXQpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLiogXG4gKiAgICpNYXJpYURCKiBcbiAqICBTZWUgW01hcmlhREIgb24gQW1hem9uIFJEUyBWZXJzaW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfTWFyaWFEQi5odG1sI01hcmlhREIuQ29uY2VwdHMuVmVyc2lvbk1nbXQpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLiogXG4gKiAgICpNaWNyb3NvZnQgU1FMIFNlcnZlciogXG4gKiAgU2VlIFtNaWNyb3NvZnQgU1FMIFNlcnZlciBWZXJzaW9ucyBvbiBBbWF6b24gUkRTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9TUUxTZXJ2ZXIuaHRtbCNTUUxTZXJ2ZXIuQ29uY2VwdHMuR2VuZXJhbC5WZXJzaW9uU3VwcG9ydCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKiBcbiAqICAgKk15U1FMKiBcbiAqICBTZWUgW015U1FMIG9uIEFtYXpvbiBSRFMgVmVyc2lvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX015U1FMLmh0bWwjTXlTUUwuQ29uY2VwdHMuVmVyc2lvbk1nbXQpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLiogXG4gKiAgICpPcmFjbGUqIFxuICogIFNlZSBbT3JhY2xlIERhdGFiYXNlIEVuZ2luZSBSZWxlYXNlIE5vdGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQXBwZW5kaXguT3JhY2xlLlBhdGNoQ29tcG9zaXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKiBcbiAqICAgKlBvc3RncmVTUUwqIFxuICogIFNlZSBbU3VwcG9ydGVkIFBvc3RncmVTUUwgRGF0YWJhc2UgVmVyc2lvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX1Bvc3RncmVTUUwuaHRtbCNQb3N0Z3JlU1FMLkNvbmNlcHRzLkdlbmVyYWwuREJWZXJzaW9ucykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKlxuICovXG5FbmdpbmVWZXJzaW9uPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIG1hbmFnZSB0aGUgbWFzdGVyIHVzZXIgcGFzc3dvcmQgd2l0aCBBV1MgU2VjcmV0cyBNYW5hZ2VyLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Bhc3N3b3JkIG1hbmFnZW1lbnQgd2l0aCBTZWNyZXRzIE1hbmFnZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9yZHMtc2VjcmV0cy1tYW5hZ2VyLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLiogXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIENhbid0IG1hbmFnZSB0aGUgbWFzdGVyIHVzZXIgcGFzc3dvcmQgd2l0aCBBV1MgU2VjcmV0cyBNYW5hZ2VyIGlmIGBgTWFzdGVyVXNlclBhc3N3b3JkYGAgaXMgc3BlY2lmaWVkLlxuICovXG5NYW5hZ2VNYXN0ZXJVc2VyUGFzc3dvcmQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgSS9PIG9wZXJhdGlvbnMgcGVyIHNlY29uZCAoSU9QUykgdGhhdCB0aGUgZGF0YWJhc2UgcHJvdmlzaW9ucy4gVGhlIHZhbHVlIG11c3QgYmUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDEwMDAuIFxuICogIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIHlvdSBtdXN0IGZvbGxvdyB0aGUgcmFuZ2Ugb2YgYWxsb3dlZCByYXRpb3Mgb2YgeW91ciByZXF1ZXN0ZWQgSU9QUyByYXRlIHRvIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSB0aGF0IHlvdSBhbGxvY2F0ZSAoSU9QUyB0byBhbGxvY2F0ZWQgc3RvcmFnZSkuIEZvciBleGFtcGxlLCB5b3UgY2FuIHByb3Zpc2lvbiBhbiBPcmFjbGUgZGF0YWJhc2UgaW5zdGFuY2Ugd2l0aCAxMDAwIElPUFMgYW5kIDIwMCBHaUIgb2Ygc3RvcmFnZSAoYSByYXRpbyBvZiA1OjEpLCBvciBzcGVjaWZ5IDIwMDAgSU9QUyB3aXRoIDIwMCBHaUIgb2Ygc3RvcmFnZSAoYSByYXRpbyBvZiAxMDoxKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIFJEUyBQcm92aXNpb25lZCBJT1BTIFN0b3JhZ2UgdG8gSW1wcm92ZSBQZXJmb3JtYW5jZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWwjVVNFUl9QSU9QUykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogICBJZiB5b3Ugc3BlY2lmeSBgYGlvMWBgIGZvciB0aGUgYGBTdG9yYWdlVHlwZWBgIHByb3BlcnR5LCB0aGVuIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgYGBJb3BzYGAgcHJvcGVydHkuXG4gKiAgIENvbnN0cmFpbnRzOlxuICogICArICBGb3IgUkRTIGZvciBEYjIsIE1hcmlhREIsIE15U1FMLCBPcmFjbGUsIGFuZCBQb3N0Z3JlU1FMIC0gTXVzdCBiZSBhIG11bHRpcGxlIGJldHdlZW4gLjUgYW5kIDUwIG9mIHRoZSBzdG9yYWdlIGFtb3VudCBmb3IgdGhlIERCIGluc3RhbmNlLlxuICogICArICBGb3IgUkRTIGZvciBTUUwgU2VydmVyIC0gTXVzdCBiZSBhIG11bHRpcGxlIGJldHdlZW4gMSBhbmQgNTAgb2YgdGhlIHN0b3JhZ2UgYW1vdW50IGZvciB0aGUgREIgaW5zdGFuY2UuXG4gKi9cbklvcHM/OiBudW1iZXJcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgQVdTIEtNUyBrZXkgdGhhdCdzIHVzZWQgdG8gZW5jcnlwdCB0aGUgREIgaW5zdGFuY2UsIHN1Y2ggYXMgYGBhcm46YXdzOmttczp1cy1lYXN0LTE6MDEyMzQ1Njc4OTEwOmtleS9hYmNkMTIzNC1hMTIzLTQ1NmEtYTEyYi1hMTIzYjRjZDU2ZWZgYC4gSWYgeW91IGVuYWJsZSB0aGUgU3RvcmFnZUVuY3J5cHRlZCBwcm9wZXJ0eSBidXQgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LCBBV1MgQ2xvdWRGb3JtYXRpb24gdXNlcyB0aGUgZGVmYXVsdCBLTVMga2V5LiBJZiB5b3Ugc3BlY2lmeSB0aGlzIHByb3BlcnR5LCB5b3UgbXVzdCBzZXQgdGhlIFN0b3JhZ2VFbmNyeXB0ZWQgcHJvcGVydHkgdG8gdHJ1ZS4gXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXJgYCBvciBgYFNvdXJjZURiaVJlc291cmNlSWRgYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNvdXJjZSBEQiBpbnN0YW5jZSwgYW5kIGlmIHRoZSBEQiBpbnN0YW5jZSBpcyBlbmNyeXB0ZWQsIHRoZSBzcGVjaWZpZWQgYGBLbXNLZXlJZGBgIHByb3BlcnR5IGlzIHVzZWQuIEhvd2V2ZXIsIGlmIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UgaXMgaW4gYSBkaWZmZXJlbnQgQVdTIFJlZ2lvbiwgeW91IG11c3Qgc3BlY2lmeSBhIEtNUyBrZXkgSUQuXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgU291cmNlREJJbnN0YW5jZUF1dG9tYXRlZEJhY2t1cHNBcm5gYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNvdXJjZSBEQiBpbnN0YW5jZSBhdXRvbWF0ZWQgYmFja3VwLCBhbmQgaWYgdGhlIGF1dG9tYXRlZCBiYWNrdXAgaXMgZW5jcnlwdGVkLCB0aGUgc3BlY2lmaWVkIGBgS21zS2V5SWRgYCBwcm9wZXJ0eSBpcyB1c2VkLlxuICogIElmIHlvdSBjcmVhdGUgYW4gZW5jcnlwdGVkIHJlYWQgcmVwbGljYSBpbiBhIGRpZmZlcmVudCBBV1MgUmVnaW9uLCB0aGVuIHlvdSBtdXN0IHNwZWNpZnkgYSBLTVMga2V5IGZvciB0aGUgZGVzdGluYXRpb24gQVdTIFJlZ2lvbi4gS01TIGVuY3J5cHRpb24ga2V5cyBhcmUgc3BlY2lmaWMgdG8gdGhlIHJlZ2lvbiB0aGF0IHRoZXkncmUgY3JlYXRlZCBpbiwgYW5kIHlvdSBjYW4ndCB1c2UgZW5jcnlwdGlvbiBrZXlzIGZyb20gb25lIHJlZ2lvbiBpbiBhbm90aGVyIHJlZ2lvbi5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSBgYFN0b3JhZ2VFbmNyeXB0ZWRgYCBwcm9wZXJ0eSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc25hcHNob3QuIElmIHRoZSBEQiBpbnN0YW5jZSBpcyBlbmNyeXB0ZWQsIHRoZSBzcGVjaWZpZWQgYGBLbXNLZXlJZGBgIHByb3BlcnR5IGlzIGFsc28gaW5oZXJpdGVkIGZyb20gdGhlIHNuYXBzaG90LlxuICogIElmIHlvdSBzcGVjaWZ5IGBgREJTZWN1cml0eUdyb3Vwc2BgLCBBV1MgQ2xvdWRGb3JtYXRpb24gaWdub3JlcyB0aGlzIHByb3BlcnR5LiBUbyBzcGVjaWZ5IGJvdGggYSBzZWN1cml0eSBncm91cCBhbmQgdGhpcyBwcm9wZXJ0eSwgeW91IG11c3QgdXNlIGEgVlBDIHNlY3VyaXR5IGdyb3VwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBBbWF6b24gUkRTIGFuZCBWUEMsIHNlZSBbVXNpbmcgQW1hem9uIFJEUyB3aXRoIEFtYXpvbiBWUENdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1ZQQy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIEtNUyBrZXkgaWRlbnRpZmllciBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBMaWNlbnNlIG1vZGVsIGluZm9ybWF0aW9uIGZvciB0aGlzIERCIGluc3RhbmNlLlxuICogICBWYWxpZCBWYWx1ZXM6XG4gKiAgICsgIEF1cm9yYSBNeVNRTCAtIGBgZ2VuZXJhbC1wdWJsaWMtbGljZW5zZWBgIFxuICogICArICBBdXJvcmEgUG9zdGdyZVNRTCAtIGBgcG9zdGdyZXNxbC1saWNlbnNlYGAgXG4gKiAgICsgIFJEUyBmb3IgRGIyIC0gYGBicmluZy15b3VyLW93bi1saWNlbnNlYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFJEUyBmb3IgRGIyIGxpY2Vuc2luZywgc2VlIFtdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9kYjItbGljZW5zaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLiogXG4gKiAgICsgIFJEUyBmb3IgTWFyaWFEQiAtIGBgZ2VuZXJhbC1wdWJsaWMtbGljZW5zZWBgIFxuICogICArICBSRFMgZm9yIE1pY3Jvc29mdCBTUUwgU2VydmVyIC0gYGBsaWNlbnNlLWluY2x1ZGVkYGAgXG4gKiAgICsgIFJEUyBmb3IgTXlTUUwgLSBgYGdlbmVyYWwtcHVibGljLWxpY2Vuc2VgYCBcbiAqICAgKyAgUkRTIGZvciBPcmFjbGUgLSBgYGJyaW5nLXlvdXItb3duLWxpY2Vuc2VgYCBvciBgYGxpY2Vuc2UtaW5jbHVkZWRgYCBcbiAqICAgKyAgUkRTIGZvciBQb3N0Z3JlU1FMIC0gYGBwb3N0Z3Jlc3FsLWxpY2Vuc2VgYCBcbiAqICAgXG4gKiAgIElmIHlvdSd2ZSBzcGVjaWZpZWQgYGBEQlNlY3VyaXR5R3JvdXBzYGAgYW5kIHRoZW4geW91IHVwZGF0ZSB0aGUgbGljZW5zZSBtb2RlbCwgQVdTIENsb3VkRm9ybWF0aW9uIHJlcGxhY2VzIHRoZSB1bmRlcmx5aW5nIERCIGluc3RhbmNlLiBUaGlzIHdpbGwgaW5jdXIgc29tZSBpbnRlcnJ1cHRpb25zIHRvIGRhdGFiYXNlIGF2YWlsYWJpbGl0eS5cbiAqL1xuTGljZW5zZU1vZGVsPzogc3RyaW5nXG4vKipcbiAqIFRoZSBtYXN0ZXIgdXNlciBuYW1lIGZvciB0aGUgREIgaW5zdGFuY2UuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgb3IgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc291cmNlIERCIGluc3RhbmNlIG9yIHNuYXBzaG90LlxuICogIFdoZW4gbWlncmF0aW5nIGEgc2VsZi1tYW5hZ2VkIERiMiBkYXRhYmFzZSwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB0aGUgc2FtZSBtYXN0ZXIgdXNlcm5hbWUgYXMgeW91ciBzZWxmLW1hbmFnZWQgRGIyIGluc3RhbmNlIG5hbWUuXG4gKiAgICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSBuYW1lIGZvciB0aGUgbWFzdGVyIHVzZXIgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4gXG4gKiAgICpSRFMgZm9yIERiMiogXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgMSB0byAxNiBsZXR0ZXJzIG9yIG51bWJlcnMuXG4gKiAgICsgIEZpcnN0IGNoYXJhY3RlciBtdXN0IGJlIGEgbGV0dGVyLlxuICogICArICBDYW4ndCBiZSBhIHJlc2VydmVkIHdvcmQgZm9yIHRoZSBjaG9zZW4gZGF0YWJhc2UgZW5naW5lLlxuICogICBcbiAqICAgKlJEUyBmb3IgTWFyaWFEQiogXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgMSB0byAxNiBsZXR0ZXJzIG9yIG51bWJlcnMuXG4gKiAgICsgIENhbid0IGJlIGEgcmVzZXJ2ZWQgd29yZCBmb3IgdGhlIGNob3NlbiBkYXRhYmFzZSBlbmdpbmUuXG4gKiAgIFxuICogICAqUkRTIGZvciBNaWNyb3NvZnQgU1FMIFNlcnZlciogXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgMSB0byAxMjggbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBGaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxldHRlci5cbiAqICAgKyAgQ2FuJ3QgYmUgYSByZXNlcnZlZCB3b3JkIGZvciB0aGUgY2hvc2VuIGRhdGFiYXNlIGVuZ2luZS5cbiAqICAgXG4gKiAgICpSRFMgZm9yIE15U1FMKiBcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSAxIHRvIDE2IGxldHRlcnMgb3IgbnVtYmVycy5cbiAqICAgKyAgRmlyc3QgY2hhcmFjdGVyIG11c3QgYmUgYSBsZXR0ZXIuXG4gKiAgICsgIENhbid0IGJlIGEgcmVzZXJ2ZWQgd29yZCBmb3IgdGhlIGNob3NlbiBkYXRhYmFzZSBlbmdpbmUuXG4gKiAgIFxuICogICAqUkRTIGZvciBPcmFjbGUqIFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIDEgdG8gMzAgbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBGaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxldHRlci5cbiAqICAgKyAgQ2FuJ3QgYmUgYSByZXNlcnZlZCB3b3JkIGZvciB0aGUgY2hvc2VuIGRhdGFiYXNlIGVuZ2luZS5cbiAqICAgXG4gKiAgICpSRFMgZm9yIFBvc3RncmVTUUwqIFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIDEgdG8gNjMgbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBGaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxldHRlci5cbiAqICAgKyAgQ2FuJ3QgYmUgYSByZXNlcnZlZCB3b3JkIGZvciB0aGUgY2hvc2VuIGRhdGFiYXNlIGVuZ2luZS5cbiAqL1xuTWFzdGVyVXNlcm5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBhc3N3b3JkIGZvciB0aGUgbWFzdGVyIHVzZXIuIFRoZSBwYXNzd29yZCBjYW4gaW5jbHVkZSBhbnkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgXCIvXCIsIFwiXCJcIiwgb3IgXCJAXCIuXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIHBhc3N3b3JkIGZvciB0aGUgbWFzdGVyIHVzZXIgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqICAgKlJEUyBmb3IgRGIyKiBcbiAqICBNdXN0IGNvbnRhaW4gZnJvbSA4IHRvIDI1NSBjaGFyYWN0ZXJzLlxuICogICAqUkRTIGZvciBNYXJpYURCKiBcbiAqICBDb25zdHJhaW50czogTXVzdCBjb250YWluIGZyb20gOCB0byA0MSBjaGFyYWN0ZXJzLlxuICogICAqUkRTIGZvciBNaWNyb3NvZnQgU1FMIFNlcnZlciogXG4gKiAgQ29uc3RyYWludHM6IE11c3QgY29udGFpbiBmcm9tIDggdG8gMTI4IGNoYXJhY3RlcnMuXG4gKiAgICpSRFMgZm9yIE15U1FMKiBcbiAqICBDb25zdHJhaW50czogTXVzdCBjb250YWluIGZyb20gOCB0byA0MSBjaGFyYWN0ZXJzLlxuICogICAqUkRTIGZvciBPcmFjbGUqIFxuICogIENvbnN0cmFpbnRzOiBNdXN0IGNvbnRhaW4gZnJvbSA4IHRvIDMwIGNoYXJhY3RlcnMuXG4gKiAgICpSRFMgZm9yIFBvc3RncmVTUUwqIFxuICogIENvbnN0cmFpbnRzOiBNdXN0IGNvbnRhaW4gZnJvbSA4IHRvIDEyOCBjaGFyYWN0ZXJzLlxuICovXG5NYXN0ZXJVc2VyUGFzc3dvcmQ/OiBzdHJpbmdcbk1hc3RlclVzZXJTZWNyZXQ/OiBNYXN0ZXJVc2VyU2VjcmV0XG4vKipcbiAqIFRoZSB1cHBlciBsaW1pdCBpbiBnaWJpYnl0ZXMgKEdpQikgdG8gd2hpY2ggQW1hem9uIFJEUyBjYW4gYXV0b21hdGljYWxseSBzY2FsZSB0aGUgc3RvcmFnZSBvZiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBzZXR0aW5nLCBpbmNsdWRpbmcgbGltaXRhdGlvbnMgdGhhdCBhcHBseSB0byBpdCwgc2VlIFtNYW5hZ2luZyBjYXBhY2l0eSBhdXRvbWF0aWNhbGx5IHdpdGggQW1hem9uIFJEUyBzdG9yYWdlIGF1dG9zY2FsaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9QSU9QUy5TdG9yYWdlVHlwZXMuaHRtbCNVU0VSX1BJT1BTLkF1dG9zY2FsaW5nKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGZvbGxvd2luZyBEQiBpbnN0YW5jZXM6XG4gKiAgICsgIEFtYXpvbiBBdXJvcmEgKFN0b3JhZ2UgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4pXG4gKiAgICsgIFJEUyBDdXN0b21cbiAqL1xuTWF4QWxsb2NhdGVkU3RvcmFnZT86IG51bWJlclxuLyoqXG4gKiBUaGUgaW50ZXJ2YWwsIGluIHNlY29uZHMsIGJldHdlZW4gcG9pbnRzIHdoZW4gRW5oYW5jZWQgTW9uaXRvcmluZyBtZXRyaWNzIGFyZSBjb2xsZWN0ZWQgZm9yIHRoZSBEQiBpbnN0YW5jZS4gVG8gZGlzYWJsZSBjb2xsZWN0aW9uIG9mIEVuaGFuY2VkIE1vbml0b3JpbmcgbWV0cmljcywgc3BlY2lmeSBgYDBgYC5cbiAqICBJZiBgYE1vbml0b3JpbmdSb2xlQXJuYGAgaXMgc3BlY2lmaWVkLCB0aGVuIHlvdSBtdXN0IHNldCBgYE1vbml0b3JpbmdJbnRlcnZhbGBgIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgYDBgYC5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqICBWYWxpZCBWYWx1ZXM6IGBgMCB8IDEgfCA1IHwgMTAgfCAxNSB8IDMwIHwgNjBgYCBcbiAqICBEZWZhdWx0OiBgYDBgYFxuICovXG5Nb25pdG9yaW5nSW50ZXJ2YWw/OiBudW1iZXJcbi8qKlxuICogVGhlIEFSTiBmb3IgdGhlIElBTSByb2xlIHRoYXQgcGVybWl0cyBSRFMgdG8gc2VuZCBlbmhhbmNlZCBtb25pdG9yaW5nIG1ldHJpY3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggTG9ncy4gRm9yIGV4YW1wbGUsIGBgYXJuOmF3czppYW06MTIzNDU2Nzg5MDEyOnJvbGUvZW1hY2Nlc3NgYC4gRm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIGEgbW9uaXRvcmluZyByb2xlLCBzZWUgW1NldHRpbmcgVXAgYW5kIEVuYWJsaW5nIEVuaGFuY2VkIE1vbml0b3JpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX01vbml0b3JpbmcuT1MuaHRtbCNVU0VSX01vbml0b3JpbmcuT1MuRW5hYmxpbmcpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBJZiBgYE1vbml0b3JpbmdJbnRlcnZhbGBgIGlzIHNldCB0byBhIHZhbHVlIG90aGVyIHRoYW4gYGAwYGAsIHRoZW4geW91IG11c3Qgc3VwcGx5IGEgYGBNb25pdG9yaW5nUm9sZUFybmBgIHZhbHVlLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIFJEUyBDdXN0b20gREIgaW5zdGFuY2VzLlxuICovXG5Nb25pdG9yaW5nUm9sZUFybj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgREIgaW5zdGFuY2UgaXMgYSBNdWx0aS1BWiBkZXBsb3ltZW50LiBZb3UgY2FuJ3Qgc2V0IHRoZSBgYEF2YWlsYWJpbGl0eVpvbmVgYCBwYXJhbWV0ZXIgaWYgdGhlIERCIGluc3RhbmNlIGlzIGEgTXVsdGktQVogZGVwbG95bWVudC5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byB0aGUgZm9sbG93aW5nIERCIGluc3RhbmNlczpcbiAqICAgKyAgQW1hem9uIEF1cm9yYSAoREIgaW5zdGFuY2UgQXZhaWxhYmlsaXR5IFpvbmVzIChBWnMpIGFyZSBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLilcbiAqICAgKyAgUkRTIEN1c3RvbVxuICovXG5NdWx0aUFaPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgTkNIQVIgY2hhcmFjdGVyIHNldCBmb3IgdGhlIE9yYWNsZSBEQiBpbnN0YW5jZS5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqL1xuTmNoYXJDaGFyYWN0ZXJTZXROYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuZXR3b3JrIHR5cGUgb2YgdGhlIERCIGluc3RhbmNlLlxuICogIFZhbGlkIHZhbHVlczpcbiAqICAgKyAgIGBgSVBWNGBgIFxuICogICArICAgYGBEVUFMYGAgXG4gKiAgIFxuICogIFRoZSBuZXR3b3JrIHR5cGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYGBEQlN1Ym5ldEdyb3VwYGAgc3BlY2lmaWVkIGZvciB0aGUgREIgaW5zdGFuY2UuIEEgYGBEQlN1Ym5ldEdyb3VwYGAgY2FuIHN1cHBvcnQgb25seSB0aGUgSVB2NCBwcm90b2NvbCBvciB0aGUgSVB2NCBhbmQgSVB2NiBwcm90b2NvbHMgKGBgRFVBTGBgKS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXb3JraW5nIHdpdGggYSBEQiBpbnN0YW5jZSBpbiBhIFZQQ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfVlBDLldvcmtpbmdXaXRoUkRTSW5zdGFuY2VpbmFWUEMuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKlxuICovXG5OZXR3b3JrVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgREIgaW5zdGFuY2Ugc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbiBncm91cC5cbiAqICBQZXJtYW5lbnQgb3B0aW9ucywgc3VjaCBhcyB0aGUgVERFIG9wdGlvbiBmb3IgT3JhY2xlIEFkdmFuY2VkIFNlY3VyaXR5IFRERSwgY2FuJ3QgYmUgcmVtb3ZlZCBmcm9tIGFuIG9wdGlvbiBncm91cC4gQWxzbywgdGhhdCBvcHRpb24gZ3JvdXAgY2FuJ3QgYmUgcmVtb3ZlZCBmcm9tIGEgREIgaW5zdGFuY2Ugb25jZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBEQiBpbnN0YW5jZS5cbiAqL1xuT3B0aW9uR3JvdXBOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBV1MgS01TIGtleSBpZGVudGlmaWVyIGZvciBlbmNyeXB0aW9uIG9mIFBlcmZvcm1hbmNlIEluc2lnaHRzIGRhdGEuXG4gKiAgVGhlIEtNUyBrZXkgaWRlbnRpZmllciBpcyB0aGUga2V5IEFSTiwga2V5IElELCBhbGlhcyBBUk4sIG9yIGFsaWFzIG5hbWUgZm9yIHRoZSBLTVMga2V5LlxuICogIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHZhbHVlIGZvciBgYFBlcmZvcm1hbmNlSW5zaWdodHNLTVNLZXlJZGBgLCB0aGVuIEFtYXpvbiBSRFMgdXNlcyB5b3VyIGRlZmF1bHQgS01TIGtleS4gVGhlcmUgaXMgYSBkZWZhdWx0IEtNUyBrZXkgZm9yIHlvdXIgQVdTIGFjY291bnQuIFlvdXIgQVdTIGFjY291bnQgaGFzIGEgZGlmZmVyZW50IGRlZmF1bHQgS01TIGtleSBmb3IgZWFjaCBBV1MgUmVnaW9uLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCBlbmFibGluZyBQZXJmb3JtYW5jZSBJbnNpZ2h0cywgc2VlIFtFbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZHMtZGF0YWJhc2UtaW5zdGFuY2UuaHRtbCNjZm4tcmRzLWRiaW5zdGFuY2UtZW5hYmxlcGVyZm9ybWFuY2VpbnNpZ2h0cykuXG4gKi9cblBlcmZvcm1hbmNlSW5zaWdodHNLTVNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGRheXMgdG8gcmV0YWluIFBlcmZvcm1hbmNlIEluc2lnaHRzIGRhdGEuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZXMuXG4gKiAgVmFsaWQgVmFsdWVzOlxuICogICArICAgYGA3YGAgXG4gKiAgICsgICAqbW9udGgqICogMzEsIHdoZXJlICptb250aCogaXMgYSBudW1iZXIgb2YgbW9udGhzIGZyb20gMS0yMy4gRXhhbXBsZXM6IGBgOTNgYCAoMyBtb250aHMgKiAzMSksIGBgMzQxYGAgKDExIG1vbnRocyAqIDMxKSwgYGA1ODlgYCAoMTkgbW9udGhzICogMzEpXG4gKiAgICsgICBgYDczMWBgIFxuICogICBcbiAqICBEZWZhdWx0OiBgYDdgYCBkYXlzXG4gKiAgSWYgeW91IHNwZWNpZnkgYSByZXRlbnRpb24gcGVyaW9kIHRoYXQgaXNuJ3QgdmFsaWQsIHN1Y2ggYXMgYGA5NGBgLCBBbWF6b24gUkRTIHJldHVybnMgYW4gZXJyb3IuXG4gKi9cblBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb25QZXJpb2Q/OiBudW1iZXJcbi8qKlxuICogVGhlIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRoZSBkYXRhYmFzZSBhY2NlcHRzIGNvbm5lY3Rpb25zLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIEF1cm9yYSBEQiBpbnN0YW5jZXMuIFRoZSBwb3J0IG51bWJlciBpcyBtYW5hZ2VkIGJ5IHRoZSBjbHVzdGVyLlxuICogIFZhbGlkIFZhbHVlczogYGAxMTUwLTY1NTM1YGAgXG4gKiAgRGVmYXVsdDpcbiAqICAgKyAgUkRTIGZvciBEYjIgLSBgYDUwMDAwYGAgXG4gKiAgICsgIFJEUyBmb3IgTWFyaWFEQiAtIGBgMzMwNmBgIFxuICogICArICBSRFMgZm9yIE1pY3Jvc29mdCBTUUwgU2VydmVyIC0gYGAxNDMzYGAgXG4gKiAgICsgIFJEUyBmb3IgTXlTUUwgLSBgYDMzMDZgYCBcbiAqICAgKyAgUkRTIGZvciBPcmFjbGUgLSBgYDE1MjFgYCBcbiAqICAgKyAgUkRTIGZvciBQb3N0Z3JlU1FMIC0gYGA1NDMyYGAgXG4gKiAgIFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBGb3IgUkRTIGZvciBNaWNyb3NvZnQgU1FMIFNlcnZlciwgdGhlIHZhbHVlIGNhbid0IGJlIGBgMTIzNGBgLCBgYDE0MzRgYCwgYGAzMjYwYGAsIGBgMzM0M2BgLCBgYDMzODlgYCwgYGA0NzAwMWBgLCBvciBgYDQ5MTUyLTQ5MTU2YGAuXG4gKi9cblBvcnQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIGRhaWx5IHRpbWUgcmFuZ2UgZHVyaW5nIHdoaWNoIGF1dG9tYXRlZCBiYWNrdXBzIGFyZSBjcmVhdGVkIGlmIGF1dG9tYXRlZCBiYWNrdXBzIGFyZSBlbmFibGVkLCB1c2luZyB0aGUgYGBCYWNrdXBSZXRlbnRpb25QZXJpb2RgYCBwYXJhbWV0ZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JhY2t1cCBXaW5kb3ddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1dvcmtpbmdXaXRoQXV0b21hdGVkQmFja3Vwcy5odG1sI1VTRVJfV29ya2luZ1dpdGhBdXRvbWF0ZWRCYWNrdXBzLkJhY2t1cFdpbmRvdykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKiBcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSBpbiB0aGUgZm9ybWF0IGBgaGgyNDptaS1oaDI0Om1pYGAuXG4gKiAgICsgIE11c3QgYmUgaW4gVW5pdmVyc2FsIENvb3JkaW5hdGVkIFRpbWUgKFVUQykuXG4gKiAgICsgIE11c3Qgbm90IGNvbmZsaWN0IHdpdGggdGhlIHByZWZlcnJlZCBtYWludGVuYW5jZSB3aW5kb3cuXG4gKiAgICsgIE11c3QgYmUgYXQgbGVhc3QgMzAgbWludXRlcy5cbiAqICAgXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIGRhaWx5IHRpbWUgcmFuZ2UgZm9yIGNyZWF0aW5nIGF1dG9tYXRlZCBiYWNrdXBzIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKi9cblByZWZlcnJlZEJhY2t1cFdpbmRvdz86IHN0cmluZ1xuLyoqXG4gKiBUaGUgd2Vla2x5IHRpbWUgcmFuZ2UgZHVyaW5nIHdoaWNoIHN5c3RlbSBtYWludGVuYW5jZSBjYW4gb2NjdXIsIGluIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lIChVVEMpLlxuICogIEZvcm1hdDogYGBkZGQ6aGgyNDptaS1kZGQ6aGgyNDptaWBgIFxuICogIFRoZSBkZWZhdWx0IGlzIGEgMzAtbWludXRlIHdpbmRvdyBzZWxlY3RlZCBhdCByYW5kb20gZnJvbSBhbiA4LWhvdXIgYmxvY2sgb2YgdGltZSBmb3IgZWFjaCBBV1MgUmVnaW9uLCBvY2N1cnJpbmcgb24gYSByYW5kb20gZGF5IG9mIHRoZSB3ZWVrLiBUbyBzZWUgdGhlIHRpbWUgYmxvY2tzIGF2YWlsYWJsZSwgc2VlIFtBZGp1c3RpbmcgdGhlIFByZWZlcnJlZCBEQiBJbnN0YW5jZSBNYWludGVuYW5jZSBXaW5kb3ddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1VwZ3JhZGVEQkluc3RhbmNlLk1haW50ZW5hbmNlLmh0bWwjQWRqdXN0aW5nVGhlTWFpbnRlbmFuY2VXaW5kb3cpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLiogXG4gKiAgIFRoaXMgcHJvcGVydHkgYXBwbGllcyB3aGVuIEFXUyBDbG91ZEZvcm1hdGlvbiBpbml0aWFsbHkgY3JlYXRlcyB0aGUgREIgaW5zdGFuY2UuIElmIHlvdSB1c2UgQVdTIENsb3VkRm9ybWF0aW9uIHRvIHVwZGF0ZSB0aGUgREIgaW5zdGFuY2UsIHRob3NlIHVwZGF0ZXMgYXJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuXG4gKiAgIENvbnN0cmFpbnRzOiBNaW5pbXVtIDMwLW1pbnV0ZSB3aW5kb3cuXG4gKi9cblByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgQ1BVIGNvcmVzIGFuZCB0aGUgbnVtYmVyIG9mIHRocmVhZHMgcGVyIGNvcmUgZm9yIHRoZSBEQiBpbnN0YW5jZSBjbGFzcyBvZiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gQW1hem9uIEF1cm9yYSBvciBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqL1xuUHJvY2Vzc29yRmVhdHVyZXM/OiBQcm9jZXNzb3JGZWF0dXJlW11cbi8qKlxuICogVGhlIG9yZGVyIG9mIHByaW9yaXR5IGluIHdoaWNoIGFuIEF1cm9yYSBSZXBsaWNhIGlzIHByb21vdGVkIHRvIHRoZSBwcmltYXJ5IGluc3RhbmNlIGFmdGVyIGEgZmFpbHVyZSBvZiB0aGUgZXhpc3RpbmcgcHJpbWFyeSBpbnN0YW5jZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRmF1bHQgVG9sZXJhbmNlIGZvciBhbiBBdXJvcmEgREIgQ2x1c3Rlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL0NvbmNlcHRzLkF1cm9yYUhpZ2hBdmFpbGFiaWxpdHkuaHRtbCNBdXJvcmEuTWFuYWdpbmcuRmF1bHRUb2xlcmFuY2UpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqICBEZWZhdWx0OiBgYDFgYCBcbiAqICBWYWxpZCBWYWx1ZXM6IGBgMCAtIDE1YGBcbiAqL1xuUHJvbW90aW9uVGllcj86IG51bWJlclxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgREIgaW5zdGFuY2UgaXMgYW4gaW50ZXJuZXQtZmFjaW5nIGluc3RhbmNlLiBJZiB5b3Ugc3BlY2lmeSB0cnVlLCBBV1MgQ2xvdWRGb3JtYXRpb24gY3JlYXRlcyBhbiBpbnN0YW5jZSB3aXRoIGEgcHVibGljbHkgcmVzb2x2YWJsZSBETlMgbmFtZSwgd2hpY2ggcmVzb2x2ZXMgdG8gYSBwdWJsaWMgSVAgYWRkcmVzcy4gSWYgeW91IHNwZWNpZnkgZmFsc2UsIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIGFuIGludGVybmFsIGluc3RhbmNlIHdpdGggYSBETlMgbmFtZSB0aGF0IHJlc29sdmVzIHRvIGEgcHJpdmF0ZSBJUCBhZGRyZXNzLiBcbiAqICBUaGUgZGVmYXVsdCBiZWhhdmlvciB2YWx1ZSBkZXBlbmRzIG9uIHlvdXIgVlBDIHNldHVwIGFuZCB0aGUgZGF0YWJhc2Ugc3VibmV0IGdyb3VwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBgYFB1YmxpY2x5QWNjZXNzaWJsZWBgIHBhcmFtZXRlciBpbiB0aGUgW0NyZWF0ZURCSW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlREJJbnN0YW5jZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgQVBJIFJlZmVyZW5jZSouXG4gKi9cblB1YmxpY2x5QWNjZXNzaWJsZT86IGJvb2xlYW5cbi8qKlxuICogVGhlIG9wZW4gbW9kZSBvZiBhbiBPcmFjbGUgcmVhZCByZXBsaWNhLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXb3JraW5nIHdpdGggT3JhY2xlIFJlYWQgUmVwbGljYXMgZm9yIEFtYXpvbiBSRFNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9vcmFjbGUtcmVhZC1yZXBsaWNhcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVGhpcyBzZXR0aW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIFJEUyBmb3IgT3JhY2xlLlxuICogIERlZmF1bHQ6IGBgb3Blbi1yZWFkLW9ubHlgYCBcbiAqICBWYWxpZCBWYWx1ZXM6IGBgb3Blbi1yZWFkLW9ubHlgYCBvciBgYG1vdW50ZWRgYFxuICovXG5SZXBsaWNhTW9kZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgZGF0ZSBhbmQgdGltZSB0byByZXN0b3JlIGZyb20uIFRoaXMgcGFyYW1ldGVyIGFwcGxpZXMgdG8gcG9pbnQtaW4tdGltZSByZWNvdmVyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVzdG9yaW5nIGEgREIgaW5zdGFuY2UgdG8gYSBzcGVjaWZpZWQgdGltZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfUElULmh0bWwpIGluIHRoZSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgYSB0aW1lIGluIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lIChVVEMpIGZvcm1hdC5cbiAqICAgKyAgTXVzdCBiZSBiZWZvcmUgdGhlIGxhdGVzdCByZXN0b3JhYmxlIHRpbWUgZm9yIHRoZSBEQiBpbnN0YW5jZS5cbiAqICAgKyAgQ2FuJ3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYFVzZUxhdGVzdFJlc3RvcmFibGVUaW1lYGAgcGFyYW1ldGVyIGlzIGVuYWJsZWQuXG4gKiAgIFxuICogIEV4YW1wbGU6IGBgMjAwOS0wOS0wN1QyMzo0NTowMFpgYFxuICovXG5SZXN0b3JlVGltZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgTXVsdGktQVogREIgY2x1c3RlciB0aGF0IHdpbGwgYWN0IGFzIHRoZSBzb3VyY2UgZm9yIHRoZSByZWFkIHJlcGxpY2EuIEVhY2ggREIgY2x1c3RlciBjYW4gaGF2ZSB1cCB0byAxNSByZWFkIHJlcGxpY2FzLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIHRoZSBpZGVudGlmaWVyIG9mIGFuIGV4aXN0aW5nIE11bHRpLUFaIERCIGNsdXN0ZXIuXG4gKiAgICsgIENhbid0IGJlIHNwZWNpZmllZCBpZiB0aGUgYGBTb3VyY2VEQkluc3RhbmNlSWRlbnRpZmllcmBgIHBhcmFtZXRlciBpcyBhbHNvIHNwZWNpZmllZC5cbiAqICAgKyAgVGhlIHNwZWNpZmllZCBEQiBjbHVzdGVyIG11c3QgaGF2ZSBhdXRvbWF0aWMgYmFja3VwcyBlbmFibGVkLCB0aGF0IGlzLCBpdHMgYmFja3VwIHJldGVudGlvbiBwZXJpb2QgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC5cbiAqICAgKyAgVGhlIHNvdXJjZSBEQiBjbHVzdGVyIG11c3QgYmUgaW4gdGhlIHNhbWUgQVdTLVJlZ2lvbiBhcyB0aGUgcmVhZCByZXBsaWNhLiBDcm9zcy1SZWdpb24gcmVwbGljYXRpb24gaXNuJ3Qgc3VwcG9ydGVkLlxuICovXG5Tb3VyY2VEQkNsdXN0ZXJJZGVudGlmaWVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSByZXNvdXJjZSBJRCBvZiB0aGUgc291cmNlIERCIGluc3RhbmNlIGZyb20gd2hpY2ggdG8gcmVzdG9yZS5cbiAqL1xuU291cmNlRGJpUmVzb3VyY2VJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJlcGxpY2F0ZWQgYXV0b21hdGVkIGJhY2t1cHMgZnJvbSB3aGljaCB0byByZXN0b3JlLCBmb3IgZXhhbXBsZSwgYGBhcm46YXdzOnJkczp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmF1dG8tYmFja3VwOmFiLUwySUpDRVhKUDdYUTdIT0o0U0lFWEFNUExFYGAuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbS5cbiAqL1xuU291cmNlREJJbnN0YW5jZUF1dG9tYXRlZEJhY2t1cHNBcm4/OiBzdHJpbmdcbi8qKlxuICogSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgcmVhZCByZXBsaWNhIERCIGluc3RhbmNlLCBzcGVjaWZ5IHRoZSBJRCBvZiB0aGUgc291cmNlIERCIGluc3RhbmNlLiBFYWNoIERCIGluc3RhbmNlIGNhbiBoYXZlIGEgbGltaXRlZCBudW1iZXIgb2YgcmVhZCByZXBsaWNhcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbV29ya2luZyB3aXRoIFJlYWQgUmVwbGljYXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1VTRVJfUmVhZFJlcGwuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCBjb25zdHJhaW50cyB0aGF0IGFwcGx5IHRvIERCIGluc3RhbmNlIGlkZW50aWZpZXJzLCBzZWUgW05hbWluZyBjb25zdHJhaW50cyBpbiBBbWF6b24gUkRTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9MaW1pdHMuaHRtbCNSRFNfTGltaXRzLkNvbnN0cmFpbnRzKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVGhlIGBgU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXJgYCBwcm9wZXJ0eSBkZXRlcm1pbmVzIHdoZXRoZXIgYSBEQiBpbnN0YW5jZSBpcyBhIHJlYWQgcmVwbGljYS4gSWYgeW91IHJlbW92ZSB0aGUgYGBTb3VyY2VEQkluc3RhbmNlSWRlbnRpZmllcmBgIHByb3BlcnR5IGZyb20geW91ciB0ZW1wbGF0ZSBhbmQgdGhlbiB1cGRhdGUgeW91ciBzdGFjaywgQVdTIENsb3VkRm9ybWF0aW9uIHByb21vdGVzIHRoZSByZWFkIHJlcGxpY2EgdG8gYSBzdGFuZGFsb25lIERCIGluc3RhbmNlLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFVzZUxhdGVzdFJlc3RvcmFibGVUaW1lYGAgb3IgYGBSZXN0b3JlVGltZWBgIHByb3BlcnRpZXMgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgYGBTb3VyY2VEQkluc3RhbmNlSWRlbnRpZmllcmBgIHByb3BlcnR5LCBSRFMgcmVzdG9yZXMgdGhlIERCIGluc3RhbmNlIHRvIHRoZSByZXF1ZXN0ZWQgcG9pbnQgaW4gdGltZSwgdGhlcmVieSBjcmVhdGluZyBhIG5ldyBEQiBpbnN0YW5jZS5cbiAqICAgICsgIElmIHlvdSBzcGVjaWZ5IGEgc291cmNlIERCIGluc3RhbmNlIHRoYXQgdXNlcyBWUEMgc2VjdXJpdHkgZ3JvdXBzLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3Ugc3BlY2lmeSB0aGUgYGBWUENTZWN1cml0eUdyb3Vwc2BgIHByb3BlcnR5LiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgcHJvcGVydHksIHRoZSByZWFkIHJlcGxpY2EgaW5oZXJpdHMgdGhlIHZhbHVlIG9mIHRoZSBgYFZQQ1NlY3VyaXR5R3JvdXBzYGAgcHJvcGVydHkgZnJvbSB0aGUgc291cmNlIERCIHdoZW4geW91IGNyZWF0ZSB0aGUgcmVwbGljYS4gSG93ZXZlciwgaWYgeW91IHVwZGF0ZSB0aGUgc3RhY2ssIEFXUyBDbG91ZEZvcm1hdGlvbiByZXZlcnRzIHRoZSByZXBsaWNhJ3MgYGBWUENTZWN1cml0eUdyb3Vwc2BgIHByb3BlcnR5IHRvIHRoZSBkZWZhdWx0IHZhbHVlIGJlY2F1c2UgaXQncyBub3QgZGVmaW5lZCBpbiB0aGUgc3RhY2sncyB0ZW1wbGF0ZS4gVGhpcyBjaGFuZ2UgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBpc3N1ZXMuXG4gKiAgICsgIFJlYWQgcmVwbGljYXMgZG9uJ3Qgc3VwcG9ydCBkZWxldGlvbiBwb2xpY2llcy4gQVdTIENsb3VkRm9ybWF0aW9uIGlnbm9yZXMgYW55IGRlbGV0aW9uIHBvbGljeSB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIGEgcmVhZCByZXBsaWNhLlxuICogICArICBJZiB5b3Ugc3BlY2lmeSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAsIGRvbid0IHNwZWNpZnkgdGhlIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eS4gWW91IGNhbid0IGNyZWF0ZSBhIHJlYWQgcmVwbGljYSBmcm9tIGEgc25hcHNob3QuXG4gKiAgICsgIERvbid0IHNldCB0aGUgYGBCYWNrdXBSZXRlbnRpb25QZXJpb2RgYCwgYGBEQk5hbWVgYCwgYGBNYXN0ZXJVc2VybmFtZWBgLCBgYE1hc3RlclVzZXJQYXNzd29yZGBgLCBhbmQgYGBQcmVmZXJyZWRCYWNrdXBXaW5kb3dgYCBwcm9wZXJ0aWVzLiBUaGUgZGF0YWJhc2UgYXR0cmlidXRlcyBhcmUgaW5oZXJpdGVkIGZyb20gdGhlIHNvdXJjZSBEQiBpbnN0YW5jZSwgYW5kIGJhY2t1cHMgYXJlIGRpc2FibGVkIGZvciByZWFkIHJlcGxpY2FzLlxuICogICArICBJZiB0aGUgc291cmNlIERCIGluc3RhbmNlIGlzIGluIGEgZGlmZmVyZW50IHJlZ2lvbiB0aGFuIHRoZSByZWFkIHJlcGxpY2EsIHNwZWNpZnkgdGhlIHNvdXJjZSByZWdpb24gaW4gYGBTb3VyY2VSZWdpb25gYCwgYW5kIHNwZWNpZnkgYW4gQVJOIGZvciBhIHZhbGlkIERCIGluc3RhbmNlIGluIGBgU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXJgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ29uc3RydWN0aW5nIGEgQW1hem9uIFJEUyBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfVGFnZ2luZy5odG1sI1VTRVJfVGFnZ2luZy5BUk4pIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICAgKyAgRm9yIERCIGluc3RhbmNlcyBpbiBBbWF6b24gQXVyb3JhIGNsdXN0ZXJzLCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIEFtYXpvbiBSRFMgYXV0b21hdGljYWxseSBhc3NpZ25zIHdyaXRlciBhbmQgcmVhZGVyIERCIGluc3RhbmNlcy5cbiAqL1xuU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSByZWdpb24gdGhhdCBjb250YWlucyB0aGUgc291cmNlIERCIGluc3RhbmNlIGZvciB0aGUgcmVhZCByZXBsaWNhLlxuICovXG5Tb3VyY2VSZWdpb24/OiBzdHJpbmdcbi8qKlxuICogQSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBEQiBpbnN0YW5jZSBpcyBlbmNyeXB0ZWQuIEJ5IGRlZmF1bHQsIGl0IGlzbid0IGVuY3J5cHRlZC5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBLbXNLZXlJZGBgIHByb3BlcnR5LCB0aGVuIHlvdSBtdXN0IGVuYWJsZSBlbmNyeXB0aW9uLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgb3IgYGBTb3VyY2VEYmlSZXNvdXJjZUlkYGAgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gVGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UsIGFuZCBpZiB0aGUgREIgaW5zdGFuY2UgaXMgZW5jcnlwdGVkLCB0aGUgc3BlY2lmaWVkIGBgS21zS2V5SWRgYCBwcm9wZXJ0eSBpcyB1c2VkLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCSW5zdGFuY2VBdXRvbWF0ZWRCYWNrdXBzQXJuYGAgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gVGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UgYXV0b21hdGVkIGJhY2t1cC4gXG4gKiAgSWYgeW91IHNwZWNpZnkgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc25hcHNob3QuXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIGVuY3J5cHRpb24gZm9yIERCIGluc3RhbmNlcyBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICovXG5TdG9yYWdlRW5jcnlwdGVkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgc3RvcmFnZSB0eXBlIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBEQiBpbnN0YW5jZS5cbiAqICBJZiB5b3Ugc3BlY2lmeSBgYGlvMWBgLCBgYGlvMmBgLCBvciBgYGdwM2BgLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgYSB2YWx1ZSBmb3IgdGhlIGBgSW9wc2BgIHBhcmFtZXRlci5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBBbWF6b24gQXVyb3JhIERCIGluc3RhbmNlcy4gU3RvcmFnZSBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICogIFZhbGlkIFZhbHVlczogYGBncDIgfCBncDMgfCBpbzEgfCBpbzIgfCBzdGFuZGFyZGBgIFxuICogIERlZmF1bHQ6IGBgaW8xYGAsIGlmIHRoZSBgYElvcHNgYCBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLiBPdGhlcndpc2UsIGBgZ3AyYGAuXG4gKi9cblN0b3JhZ2VUeXBlPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgc3RvcmFnZSB0aHJvdWdocHV0IHZhbHVlIGZvciB0aGUgREIgaW5zdGFuY2UuIFRoaXMgc2V0dGluZyBhcHBsaWVzIG9ubHkgdG8gdGhlIGBgZ3AzYGAgc3RvcmFnZSB0eXBlLiBcbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIG9yIEFtYXpvbiBBdXJvcmEuXG4gKi9cblN0b3JhZ2VUaHJvdWdocHV0PzogbnVtYmVyXG4vKipcbiAqIFRhZ3MgdG8gYXNzaWduIHRvIHRoZSBEQiBpbnN0YW5jZS5cbiAqL1xuVGFncz86IFRhZ1tdXG5UZGVDcmVkZW50aWFsQXJuPzogc3RyaW5nXG5UZGVDcmVkZW50aWFsUGFzc3dvcmQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHRpbWUgem9uZSBvZiB0aGUgREIgaW5zdGFuY2UuIFRoZSB0aW1lIHpvbmUgcGFyYW1ldGVyIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgb25seSBieSBbUkRTIGZvciBEYjJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9kYjItdGltZS16b25lKSBhbmQgW1JEUyBmb3IgU1FMIFNlcnZlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfU1FMU2VydmVyLmh0bWwjU1FMU2VydmVyLkNvbmNlcHRzLkdlbmVyYWwuVGltZVpvbmUpLlxuICovXG5UaW1lem9uZT86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgREIgaW5zdGFuY2UgY2xhc3Mgb2YgdGhlIERCIGluc3RhbmNlIHVzZXMgaXRzIGRlZmF1bHQgcHJvY2Vzc29yIGZlYXR1cmVzLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIFJEUyBDdXN0b20gREIgaW5zdGFuY2VzLlxuICovXG5Vc2VEZWZhdWx0UHJvY2Vzc29yRmVhdHVyZXM/OiBib29sZWFuXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBEQiBpbnN0YW5jZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBsYXRlc3QgYmFja3VwIHRpbWUuIEJ5IGRlZmF1bHQsIHRoZSBEQiBpbnN0YW5jZSBpc24ndCByZXN0b3JlZCBmcm9tIHRoZSBsYXRlc3QgYmFja3VwIHRpbWUuIFRoaXMgcGFyYW1ldGVyIGFwcGxpZXMgdG8gcG9pbnQtaW4tdGltZSByZWNvdmVyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVzdG9yaW5nIGEgREIgaW5zdGFuY2UgdG8gYSBzcGVjaWZpZWQgdGltZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfUElULmh0bWwpIGluIHRoZSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIENhbid0IGJlIHNwZWNpZmllZCBpZiB0aGUgYGBSZXN0b3JlVGltZWBgIHBhcmFtZXRlciBpcyBwcm92aWRlZC5cbiAqL1xuVXNlTGF0ZXN0UmVzdG9yYWJsZVRpbWU/OiBib29sZWFuXG4vKipcbiAqIEEgbGlzdCBvZiB0aGUgVlBDIHNlY3VyaXR5IGdyb3VwIElEcyB0byBhc3NpZ24gdG8gdGhlIERCIGluc3RhbmNlLiBUaGUgbGlzdCBjYW4gaW5jbHVkZSBib3RoIHRoZSBwaHlzaWNhbCBJRHMgb2YgZXhpc3RpbmcgVlBDIHNlY3VyaXR5IGdyb3VwcyBhbmQgcmVmZXJlbmNlcyB0byBbQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1zZWN1cml0eS1ncm91cC5odG1sKSByZXNvdXJjZXMgY3JlYXRlZCBpbiB0aGUgdGVtcGxhdGUuXG4gKiAgSWYgeW91IHBsYW4gdG8gdXBkYXRlIHRoZSByZXNvdXJjZSwgZG9uJ3Qgc3BlY2lmeSBWUEMgc2VjdXJpdHkgZ3JvdXBzIGluIGEgc2hhcmVkIFZQQy5cbiAqICAgSWYgeW91IHNldCBgYFZQQ1NlY3VyaXR5R3JvdXBzYGAsIHlvdSBtdXN0IG5vdCBzZXQgW0RCU2VjdXJpdHlHcm91cHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS8vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZHMtZGF0YWJhc2UtaW5zdGFuY2UuaHRtbCNjZm4tcmRzLWRiaW5zdGFuY2UtZGJzZWN1cml0eWdyb3VwcyksIGFuZCB2aWNlIHZlcnNhLlxuICogICBZb3UgY2FuIG1pZ3JhdGUgYSBEQiBpbnN0YW5jZSBpbiB5b3VyIHN0YWNrIGZyb20gYW4gUkRTIERCIHNlY3VyaXR5IGdyb3VwIHRvIGEgVlBDIHNlY3VyaXR5IGdyb3VwLCBidXQga2VlcCB0aGUgZm9sbG93aW5nIGluIG1pbmQ6XG4gKiAgICsgIFlvdSBjYW4ndCByZXZlcnQgdG8gdXNpbmcgYW4gUkRTIHNlY3VyaXR5IGdyb3VwIGFmdGVyIHlvdSBlc3RhYmxpc2ggYSBWUEMgc2VjdXJpdHkgZ3JvdXAgbWVtYmVyc2hpcC5cbiAqICAgKyAgV2hlbiB5b3UgbWlncmF0ZSB5b3VyIERCIGluc3RhbmNlIHRvIFZQQyBzZWN1cml0eSBncm91cHMsIGlmIHlvdXIgc3RhY2sgdXBkYXRlIHJvbGxzIGJhY2sgYmVjYXVzZSB0aGUgREIgaW5zdGFuY2UgdXBkYXRlIGZhaWxzIG9yIGJlY2F1c2UgYW4gdXBkYXRlIGZhaWxzIGluIGFub3RoZXIgQVdTIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLCB0aGUgcm9sbGJhY2sgZmFpbHMgYmVjYXVzZSBpdCBjYW4ndCByZXZlcnQgdG8gYW4gUkRTIHNlY3VyaXR5IGdyb3VwLlxuICogICArICBUbyB1c2UgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgYXZhaWxhYmxlIHdoZW4geW91IHVzZSBhIFZQQyBzZWN1cml0eSBncm91cCwgeW91IG11c3QgcmVjcmVhdGUgdGhlIERCIGluc3RhbmNlLiBJZiB5b3UgZG9uJ3QsIEFXUyBDbG91ZEZvcm1hdGlvbiBzdWJtaXRzIG9ubHkgdGhlIHByb3BlcnR5IHZhbHVlcyB0aGF0IGFyZSBsaXN0ZWQgaW4gdGhlIFtEQlNlY3VyaXR5R3JvdXBzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZHMtZGF0YWJhc2UtaW5zdGFuY2UuaHRtbCNjZm4tcmRzLWRiaW5zdGFuY2UtZGJzZWN1cml0eWdyb3VwcykgcHJvcGVydHkuXG4gKiAgIFxuICogICBUbyBhdm9pZCB0aGlzIHNpdHVhdGlvbiwgbWlncmF0ZSB5b3VyIERCIGluc3RhbmNlIHRvIHVzaW5nIFZQQyBzZWN1cml0eSBncm91cHMgb25seSB3aGVuIHRoYXQgaXMgdGhlIG9ubHkgY2hhbmdlIGluIHlvdXIgc3RhY2sgdGVtcGxhdGUuIFxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSBhc3NvY2lhdGVkIGxpc3Qgb2YgRUMyIFZQQyBzZWN1cml0eSBncm91cHMgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4gSWYgc3BlY2lmaWVkLCB0aGUgc2V0dGluZyBtdXN0IG1hdGNoIHRoZSBEQiBjbHVzdGVyIHNldHRpbmcuXG4gKi9cblZQQ1NlY3VyaXR5R3JvdXBzPzogc3RyaW5nW11cbn1cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgYW4gQVdTIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSByb2xlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgREIgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgREJJbnN0YW5jZVJvbGUge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgZmVhdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIEFXUyBJZGVudGl0eSBhbmQgQWNjZXNzIE1hbmFnZW1lbnQgKElBTSkgcm9sZS4gSUFNIHJvbGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIERCIGluc3RhbmNlIGdyYW50IHBlcm1pc3Npb24gZm9yIHRoZSBEQiBpbnN0YW5jZSB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiBGb3IgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGZlYXR1cmUgbmFtZXMsIHNlZSB0aGUgYGBTdXBwb3J0ZWRGZWF0dXJlTmFtZXNgYCBkZXNjcmlwdGlvbiBpbiBbREJFbmdpbmVWZXJzaW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RCRW5naW5lVmVyc2lvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgQVBJIFJlZmVyZW5jZSouXG4gKi9cbkZlYXR1cmVOYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgREIgaW5zdGFuY2UuXG4gKi9cblJvbGVBcm46IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBvZiB0aGUgREIgaW5zdGFuY2UncyBzZXJ2ZXIgY2VydGlmaWNhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VydGlmaWNhdGVEZXRhaWxzIHtcbi8qKlxuICogVGhlIENBIGlkZW50aWZpZXIgb2YgdGhlIENBIGNlcnRpZmljYXRlIHVzZWQgZm9yIHRoZSBEQiBpbnN0YW5jZSdzIHNlcnZlciBjZXJ0aWZpY2F0ZS5cbiAqL1xuQ0FJZGVudGlmaWVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSBleHBpcmF0aW9uIGRhdGUgb2YgdGhlIERCIGluc3RhbmNl4oCZcyBzZXJ2ZXIgY2VydGlmaWNhdGUuXG4gKi9cblZhbGlkVGlsbD86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29ubmVjdGlvbiBlbmRwb2ludCBmb3IgdGhlIERCIGluc3RhbmNlLlxuICogICBUaGUgZW5kcG9pbnQgbWlnaHQgbm90IGJlIHNob3duIGZvciBpbnN0YW5jZXMgd2l0aCB0aGUgc3RhdHVzIG9mIGBgY3JlYXRpbmdgYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmRwb2ludCB7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgRE5TIGFkZHJlc3Mgb2YgdGhlIERCIGluc3RhbmNlLlxuICovXG5BZGRyZXNzPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgcG9ydCB0aGF0IHRoZSBkYXRhYmFzZSBlbmdpbmUgaXMgbGlzdGVuaW5nIG9uLlxuICovXG5Qb3J0Pzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgSUQgdGhhdCBBbWF6b24gUm91dGUgNTMgYXNzaWducyB3aGVuIHlvdSBjcmVhdGUgYSBob3N0ZWQgem9uZS5cbiAqL1xuSG9zdGVkWm9uZUlkPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBzZWNyZXQgbWFuYWdlZCBieSBSRFMgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBmb3IgdGhlIG1hc3RlciB1c2VyIHBhc3N3b3JkLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Bhc3N3b3JkIG1hbmFnZW1lbnQgd2l0aCBTZWNyZXRzIE1hbmFnZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9yZHMtc2VjcmV0cy1tYW5hZ2VyLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLipcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0ZXJVc2VyU2VjcmV0IHtcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZWNyZXQuIFRoaXMgcGFyYW1ldGVyIGlzIGEgcmV0dXJuIHZhbHVlIHRoYXQgeW91IGNhbiByZXRyaWV2ZSB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgaW50cmluc2ljIGZ1bmN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXR1cm4gdmFsdWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtcmRzLWRiaW5zdGFuY2UuaHRtbCNhd3MtcmVzb3VyY2UtcmRzLWRiaW5zdGFuY2UtcmV0dXJuLXZhbHVlcykuXG4gKi9cblNlY3JldEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVdTIEtNUyBrZXkgaWRlbnRpZmllciB0aGF0IGlzIHVzZWQgdG8gZW5jcnlwdCB0aGUgc2VjcmV0LlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYGBQcm9jZXNzb3JGZWF0dXJlYGAgcHJvcGVydHkgdHlwZSBzcGVjaWZpZXMgdGhlIHByb2Nlc3NvciBmZWF0dXJlcyBvZiBhIERCIGluc3RhbmNlIGNsYXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NvckZlYXR1cmUge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcHJvY2Vzc29yIGZlYXR1cmUuIFZhbGlkIG5hbWVzIGFyZSBgYGNvcmVDb3VudGBgIGFuZCBgYHRocmVhZHNQZXJDb3JlYGAuXG4gKi9cbk5hbWU/OiAoXCJjb3JlQ291bnRcIiB8IFwidGhyZWFkc1BlckNvcmVcIilcbi8qKlxuICogVGhlIHZhbHVlIG9mIGEgcHJvY2Vzc29yIGZlYXR1cmUuXG4gKi9cblZhbHVlPzogc3RyaW5nXG59XG4vKipcbiAqIE1ldGFkYXRhIGFzc2lnbmVkIHRvIGFuIEFtYXpvbiBSRFMgcmVzb3VyY2UgY29uc2lzdGluZyBvZiBhIGtleS12YWx1ZSBwYWlyLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1RhZ2dpbmcgQW1hem9uIFJEUyByZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1RhZ2dpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqIG9yIFtUYWdnaW5nIEFtYXpvbiBBdXJvcmEgYW5kIEFtYXpvbiBSRFMgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvVVNFUl9UYWdnaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBBIGtleSBpcyB0aGUgcmVxdWlyZWQgbmFtZSBvZiB0aGUgdGFnLiBUaGUgc3RyaW5nIHZhbHVlIGNhbiBiZSBmcm9tIDEgdG8gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbid0IGJlIHByZWZpeGVkIHdpdGggYGBhd3M6YGAgb3IgYGByZHM6YGAuIFRoZSBzdHJpbmcgY2FuIG9ubHkgY29udGFpbiBvbmx5IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlLXNwYWNlLCAnXycsICcuJywgJzonLCAnLycsICc9JywgJysnLCAnLScsICdAJyAoSmF2YSByZWdleDogXCJeKFtcXFxccHtMfVxcXFxwe1p9XFxcXHB7Tn1fLjovPStcXFxcLUBdKikkXCIpLlxuICovXG5LZXk6IHN0cmluZ1xuLyoqXG4gKiBBIHZhbHVlIGlzIHRoZSBvcHRpb25hbCB2YWx1ZSBvZiB0aGUgdGFnLiBUaGUgc3RyaW5nIHZhbHVlIGNhbiBiZSBmcm9tIDEgdG8gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbid0IGJlIHByZWZpeGVkIHdpdGggYGBhd3M6YGAgb3IgYGByZHM6YGAuIFRoZSBzdHJpbmcgY2FuIG9ubHkgY29udGFpbiBvbmx5IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlLXNwYWNlLCAnXycsICcuJywgJzonLCAnLycsICc9JywgJysnLCAnLScsICdAJyAoSmF2YSByZWdleDogXCJeKFtcXFxccHtMfVxcXFxwe1p9XFxcXHB7Tn1fLjovPStcXFxcLUBdKikkXCIpLlxuICovXG5WYWx1ZT86IHN0cmluZ1xufVxuIl19
@@ -7,6 +7,12 @@ export type _AWS_RDS_GLOBALCLUSTER = ({
7
7
  * If you specify the SourceDBClusterIdentifier property, don't specify this property. The value is inherited from the cluster.
8
8
  */
9
9
  Engine?: ("aurora" | "aurora-mysql" | "aurora-postgresql");
10
+ /**
11
+ * An array of key-value pairs to apply to this resource.
12
+ *
13
+ * @maxItems 50
14
+ */
15
+ Tags?: Tag[];
10
16
  /**
11
17
  * The life cycle type of the global cluster. You can use this setting to enroll your global cluster into Amazon RDS Extended Support.
12
18
  */
@@ -37,3 +43,16 @@ export type _AWS_RDS_GLOBALCLUSTER = ({
37
43
  } & {
38
44
  [k: string]: unknown;
39
45
  });
46
+ /**
47
+ * A key-value pair to associate with a resource.
48
+ */
49
+ export interface Tag {
50
+ /**
51
+ * The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.
52
+ */
53
+ Key: string;
54
+ /**
55
+ * The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.
56
+ */
57
+ Value?: string;
58
+ }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJkcy1nbG9iYWxjbHVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXJkcy1nbG9iYWxjbHVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc291cmNlIFR5cGUgZGVmaW5pdGlvbiBmb3IgQVdTOjpSRFM6Okdsb2JhbENsdXN0ZXJcbiAqL1xuZXhwb3J0IHR5cGUgX0FXU19SRFNfR0xPQkFMQ0xVU1RFUiA9ICh7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSBlbmdpbmUgdG8gYmUgdXNlZCBmb3IgdGhpcyBEQiBjbHVzdGVyLiBWYWxpZCBWYWx1ZXM6IGF1cm9yYSAoZm9yIE15U1FMIDUuNi1jb21wYXRpYmxlIEF1cm9yYSksIGF1cm9yYS1teXNxbCAoZm9yIE15U1FMIDUuNy1jb21wYXRpYmxlIEF1cm9yYSkuXG4gKiBJZiB5b3Ugc3BlY2lmeSB0aGUgU291cmNlREJDbHVzdGVySWRlbnRpZmllciBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIGNsdXN0ZXIuXG4gKi9cbkVuZ2luZT86IChcImF1cm9yYVwiIHwgXCJhdXJvcmEtbXlzcWxcIiB8IFwiYXVyb3JhLXBvc3RncmVzcWxcIilcbi8qKlxuICogVGhlIGxpZmUgY3ljbGUgdHlwZSBvZiB0aGUgZ2xvYmFsIGNsdXN0ZXIuIFlvdSBjYW4gdXNlIHRoaXMgc2V0dGluZyB0byBlbnJvbGwgeW91ciBnbG9iYWwgY2x1c3RlciBpbnRvIEFtYXpvbiBSRFMgRXh0ZW5kZWQgU3VwcG9ydC5cbiAqL1xuRW5naW5lTGlmZWN5Y2xlU3VwcG9ydD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGRhdGFiYXNlIGVuZ2luZSB0byB1c2UuIElmIHlvdSBzcGVjaWZ5IHRoZSBTb3VyY2VEQkNsdXN0ZXJJZGVudGlmaWVyIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgY2x1c3Rlci5cbiAqL1xuRW5naW5lVmVyc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgZGVsZXRpb24gcHJvdGVjdGlvbiBzZXR0aW5nIGZvciB0aGUgbmV3IGdsb2JhbCBkYXRhYmFzZS4gVGhlIGdsb2JhbCBkYXRhYmFzZSBjYW4ndCBiZSBkZWxldGVkIHdoZW4gZGVsZXRpb24gcHJvdGVjdGlvbiBpcyBlbmFibGVkLlxuICovXG5EZWxldGlvblByb3RlY3Rpb24/OiBib29sZWFuXG4vKipcbiAqIFRoZSBjbHVzdGVyIGlkZW50aWZpZXIgb2YgdGhlIG5ldyBnbG9iYWwgZGF0YWJhc2UgY2x1c3Rlci4gVGhpcyBwYXJhbWV0ZXIgaXMgc3RvcmVkIGFzIGEgbG93ZXJjYXNlIHN0cmluZy5cbiAqL1xuR2xvYmFsQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIHRvIHVzZSBhcyB0aGUgcHJpbWFyeSBjbHVzdGVyIG9mIHRoZSBnbG9iYWwgZGF0YWJhc2UuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBUaGlzIHBhcmFtZXRlciBpcyBzdG9yZWQgYXMgYSBsb3dlcmNhc2Ugc3RyaW5nLlxuICovXG5Tb3VyY2VEQkNsdXN0ZXJJZGVudGlmaWVyPzogKHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59ICYgc3RyaW5nKVxuLyoqXG4gKiAgVGhlIHN0b3JhZ2UgZW5jcnlwdGlvbiBzZXR0aW5nIGZvciB0aGUgbmV3IGdsb2JhbCBkYXRhYmFzZSBjbHVzdGVyLlxuICogSWYgeW91IHNwZWNpZnkgdGhlIFNvdXJjZURCQ2x1c3RlcklkZW50aWZpZXIgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gVGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBjbHVzdGVyLlxuICovXG5TdG9yYWdlRW5jcnlwdGVkPzogYm9vbGVhblxufSAmIHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59KVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJkcy1nbG9iYWxjbHVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXJkcy1nbG9iYWxjbHVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc291cmNlIFR5cGUgZGVmaW5pdGlvbiBmb3IgQVdTOjpSRFM6Okdsb2JhbENsdXN0ZXJcbiAqL1xuZXhwb3J0IHR5cGUgX0FXU19SRFNfR0xPQkFMQ0xVU1RFUiA9ICh7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSBlbmdpbmUgdG8gYmUgdXNlZCBmb3IgdGhpcyBEQiBjbHVzdGVyLiBWYWxpZCBWYWx1ZXM6IGF1cm9yYSAoZm9yIE15U1FMIDUuNi1jb21wYXRpYmxlIEF1cm9yYSksIGF1cm9yYS1teXNxbCAoZm9yIE15U1FMIDUuNy1jb21wYXRpYmxlIEF1cm9yYSkuXG4gKiBJZiB5b3Ugc3BlY2lmeSB0aGUgU291cmNlREJDbHVzdGVySWRlbnRpZmllciBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIGNsdXN0ZXIuXG4gKi9cbkVuZ2luZT86IChcImF1cm9yYVwiIHwgXCJhdXJvcmEtbXlzcWxcIiB8IFwiYXVyb3JhLXBvc3RncmVzcWxcIilcbi8qKlxuICogQW4gYXJyYXkgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFwcGx5IHRvIHRoaXMgcmVzb3VyY2UuXG4gKiBcbiAqIEBtYXhJdGVtcyA1MFxuICovXG5UYWdzPzogVGFnW11cbi8qKlxuICogVGhlIGxpZmUgY3ljbGUgdHlwZSBvZiB0aGUgZ2xvYmFsIGNsdXN0ZXIuIFlvdSBjYW4gdXNlIHRoaXMgc2V0dGluZyB0byBlbnJvbGwgeW91ciBnbG9iYWwgY2x1c3RlciBpbnRvIEFtYXpvbiBSRFMgRXh0ZW5kZWQgU3VwcG9ydC5cbiAqL1xuRW5naW5lTGlmZWN5Y2xlU3VwcG9ydD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGRhdGFiYXNlIGVuZ2luZSB0byB1c2UuIElmIHlvdSBzcGVjaWZ5IHRoZSBTb3VyY2VEQkNsdXN0ZXJJZGVudGlmaWVyIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgY2x1c3Rlci5cbiAqL1xuRW5naW5lVmVyc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgZGVsZXRpb24gcHJvdGVjdGlvbiBzZXR0aW5nIGZvciB0aGUgbmV3IGdsb2JhbCBkYXRhYmFzZS4gVGhlIGdsb2JhbCBkYXRhYmFzZSBjYW4ndCBiZSBkZWxldGVkIHdoZW4gZGVsZXRpb24gcHJvdGVjdGlvbiBpcyBlbmFibGVkLlxuICovXG5EZWxldGlvblByb3RlY3Rpb24/OiBib29sZWFuXG4vKipcbiAqIFRoZSBjbHVzdGVyIGlkZW50aWZpZXIgb2YgdGhlIG5ldyBnbG9iYWwgZGF0YWJhc2UgY2x1c3Rlci4gVGhpcyBwYXJhbWV0ZXIgaXMgc3RvcmVkIGFzIGEgbG93ZXJjYXNlIHN0cmluZy5cbiAqL1xuR2xvYmFsQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIHRvIHVzZSBhcyB0aGUgcHJpbWFyeSBjbHVzdGVyIG9mIHRoZSBnbG9iYWwgZGF0YWJhc2UuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBUaGlzIHBhcmFtZXRlciBpcyBzdG9yZWQgYXMgYSBsb3dlcmNhc2Ugc3RyaW5nLlxuICovXG5Tb3VyY2VEQkNsdXN0ZXJJZGVudGlmaWVyPzogKHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59ICYgc3RyaW5nKVxuLyoqXG4gKiAgVGhlIHN0b3JhZ2UgZW5jcnlwdGlvbiBzZXR0aW5nIGZvciB0aGUgbmV3IGdsb2JhbCBkYXRhYmFzZSBjbHVzdGVyLlxuICogSWYgeW91IHNwZWNpZnkgdGhlIFNvdXJjZURCQ2x1c3RlcklkZW50aWZpZXIgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gVGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBjbHVzdGVyLlxuICovXG5TdG9yYWdlRW5jcnlwdGVkPzogYm9vbGVhblxufSAmIHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59KVxuXG4vKipcbiAqIEEga2V5LXZhbHVlIHBhaXIgdG8gYXNzb2NpYXRlIHdpdGggYSByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBUaGUga2V5IG5hbWUgb2YgdGhlIHRhZy4gWW91IGNhbiBzcGVjaWZ5IGEgdmFsdWUgdGhhdCBpcyAxIHRvIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3QgYmUgcHJlZml4ZWQgd2l0aCBhd3M6LiBZb3UgY2FuIHVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiB0aGUgc2V0IG9mIFVuaWNvZGUgbGV0dGVycywgZGlnaXRzLCB3aGl0ZXNwYWNlLCBfLCAuLCAvLCA9LCArLCBhbmQgLS4gXG4gKi9cbktleTogc3RyaW5nXG4vKipcbiAqIFRoZSB2YWx1ZSBmb3IgdGhlIHRhZy4gWW91IGNhbiBzcGVjaWZ5IGEgdmFsdWUgdGhhdCBpcyAwIHRvIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3QgYmUgcHJlZml4ZWQgd2l0aCBhd3M6LiBZb3UgY2FuIHVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiB0aGUgc2V0IG9mIFVuaWNvZGUgbGV0dGVycywgZGlnaXRzLCB3aGl0ZXNwYWNlLCBfLCAuLCAvLCA9LCArLCBhbmQgLS4gXG4gKi9cblZhbHVlPzogc3RyaW5nXG59XG4iXX0=
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Integration from a source AWS service to a Redshift cluster
3
+ */
4
+ export interface _AWS_REDSHIFT_INTEGRATION {
5
+ /**
6
+ * The Amazon Resource Name (ARN) of the integration.
7
+ */
8
+ IntegrationArn?: string;
9
+ /**
10
+ * The name of the integration.
11
+ */
12
+ IntegrationName?: string;
13
+ /**
14
+ * The Amazon Resource Name (ARN) of the database to use as the source for replication, for example, arn:aws:dynamodb:us-east-2:123412341234:table/dynamotable
15
+ */
16
+ SourceArn: string;
17
+ /**
18
+ * The Amazon Resource Name (ARN) of the Redshift data warehouse to use as the target for replication, for example, arn:aws:redshift:us-east-2:123412341234:namespace:e43aab3e-10a3-4ec4-83d4-f227ff9bfbcf
19
+ */
20
+ TargetArn: string;
21
+ /**
22
+ * An array of key-value pairs to apply to this resource.
23
+ *
24
+ * @maxItems 50
25
+ */
26
+ Tags?: Tag[];
27
+ /**
28
+ * The time (UTC) when the integration was created.
29
+ */
30
+ CreateTime?: string;
31
+ /**
32
+ * An KMS key identifier for the key to use to encrypt the integration. If you don't specify an encryption key, the default AWS owned KMS key is used.
33
+ */
34
+ KMSKeyId?: ({
35
+ [k: string]: unknown;
36
+ } & string);
37
+ AdditionalEncryptionContext?: EncryptionContextMap;
38
+ }
39
+ /**
40
+ * A key-value pair to associate with a resource.
41
+ */
42
+ export interface Tag {
43
+ /**
44
+ * The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.
45
+ */
46
+ Key: string;
47
+ /**
48
+ * The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.
49
+ */
50
+ Value?: string;
51
+ }
52
+ /**
53
+ * An optional set of non-secret key–value pairs that contains additional contextual information about the data.
54
+ */
55
+ export interface EncryptionContextMap {
56
+ /**
57
+ * This interface was referenced by `EncryptionContextMap`'s JSON-Schema definition
58
+ * via the `patternProperty` "^[\s\S]*$".
59
+ */
60
+ [k: string]: string;
61
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJlZHNoaWZ0LWludGVncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXJlZHNoaWZ0LWludGVncmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVncmF0aW9uIGZyb20gYSBzb3VyY2UgQVdTIHNlcnZpY2UgdG8gYSBSZWRzaGlmdCBjbHVzdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19SRURTSElGVF9JTlRFR1JBVElPTiB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgaW50ZWdyYXRpb24uXG4gKi9cbkludGVncmF0aW9uQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBpbnRlZ3JhdGlvbi5cbiAqL1xuSW50ZWdyYXRpb25OYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgZGF0YWJhc2UgdG8gdXNlIGFzIHRoZSBzb3VyY2UgZm9yIHJlcGxpY2F0aW9uLCBmb3IgZXhhbXBsZSwgYXJuOmF3czpkeW5hbW9kYjp1cy1lYXN0LTI6MTIzNDEyMzQxMjM0OnRhYmxlL2R5bmFtb3RhYmxlXG4gKi9cblNvdXJjZUFybjogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgUmVkc2hpZnQgZGF0YSB3YXJlaG91c2UgdG8gdXNlIGFzIHRoZSB0YXJnZXQgZm9yIHJlcGxpY2F0aW9uLCBmb3IgZXhhbXBsZSwgYXJuOmF3czpyZWRzaGlmdDp1cy1lYXN0LTI6MTIzNDEyMzQxMjM0Om5hbWVzcGFjZTplNDNhYWIzZS0xMGEzLTRlYzQtODNkNC1mMjI3ZmY5YmZiY2ZcbiAqL1xuVGFyZ2V0QXJuOiBzdHJpbmdcbi8qKlxuICogQW4gYXJyYXkgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFwcGx5IHRvIHRoaXMgcmVzb3VyY2UuXG4gKiBcbiAqIEBtYXhJdGVtcyA1MFxuICovXG5UYWdzPzogVGFnW11cbi8qKlxuICogVGhlIHRpbWUgKFVUQykgd2hlbiB0aGUgaW50ZWdyYXRpb24gd2FzIGNyZWF0ZWQuXG4gKi9cbkNyZWF0ZVRpbWU/OiBzdHJpbmdcbi8qKlxuICogQW4gS01TIGtleSBpZGVudGlmaWVyIGZvciB0aGUga2V5IHRvIHVzZSB0byBlbmNyeXB0IHRoZSBpbnRlZ3JhdGlvbi4gSWYgeW91IGRvbid0IHNwZWNpZnkgYW4gZW5jcnlwdGlvbiBrZXksIHRoZSBkZWZhdWx0IEFXUyBvd25lZCBLTVMga2V5IGlzIHVzZWQuXG4gKi9cbktNU0tleUlkPzogKHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59ICYgc3RyaW5nKVxuQWRkaXRpb25hbEVuY3J5cHRpb25Db250ZXh0PzogRW5jcnlwdGlvbkNvbnRleHRNYXBcbn1cbi8qKlxuICogQSBrZXktdmFsdWUgcGFpciB0byBhc3NvY2lhdGUgd2l0aCBhIHJlc291cmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSBrZXkgbmFtZSBvZiB0aGUgdGFnLiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSB0aGF0IGlzIDEgdG8gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGF3czouIFlvdSBjYW4gdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlc3BhY2UsIF8sIC4sIC8sID0sICssIGFuZCAtLiBcbiAqL1xuS2V5OiBzdHJpbmdcbi8qKlxuICogVGhlIHZhbHVlIGZvciB0aGUgdGFnLiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSB0aGF0IGlzIDAgdG8gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGF3czouIFlvdSBjYW4gdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlc3BhY2UsIF8sIC4sIC8sID0sICssIGFuZCAtLiBcbiAqL1xuVmFsdWU/OiBzdHJpbmdcbn1cbi8qKlxuICogQW4gb3B0aW9uYWwgc2V0IG9mIG5vbi1zZWNyZXQga2V54oCTdmFsdWUgcGFpcnMgdGhhdCBjb250YWlucyBhZGRpdGlvbmFsIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5jcnlwdGlvbkNvbnRleHRNYXAge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgRW5jcnlwdGlvbkNvbnRleHRNYXBgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIl5bXFxzXFxTXSokXCIuXG4gKi9cbltrOiBzdHJpbmddOiBzdHJpbmdcbn1cbiJdfQ==
@@ -5,8 +5,8 @@ export type NetworkFabricType = ("TRANSIT_GATEWAY" | "NONE");
5
5
  export interface _AWS_REFACTORSPACES_ENVIRONMENT {
6
6
  Description?: string;
7
7
  EnvironmentIdentifier?: string;
8
- Name: string;
9
- NetworkFabricType: NetworkFabricType;
8
+ Name?: string;
9
+ NetworkFabricType?: NetworkFabricType;
10
10
  Arn?: string;
11
11
  TransitGatewayId?: string;
12
12
  /**
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJlZmFjdG9yc3BhY2VzLWVudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXJlZmFjdG9yc3BhY2VzLWVudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBOZXR3b3JrRmFicmljVHlwZSA9IChcIlRSQU5TSVRfR0FURVdBWVwiIHwgXCJOT05FXCIpXG5cbi8qKlxuICogRGVmaW5pdGlvbiBvZiBBV1M6OlJlZmFjdG9yU3BhY2VzOjpFbnZpcm9ubWVudCBSZXNvdXJjZSBUeXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19SRUZBQ1RPUlNQQUNFU19FTlZJUk9OTUVOVCB7XG5EZXNjcmlwdGlvbj86IHN0cmluZ1xuRW52aXJvbm1lbnRJZGVudGlmaWVyPzogc3RyaW5nXG5OYW1lOiBzdHJpbmdcbk5ldHdvcmtGYWJyaWNUeXBlOiBOZXR3b3JrRmFicmljVHlwZVxuQXJuPzogc3RyaW5nXG5UcmFuc2l0R2F0ZXdheUlkPzogc3RyaW5nXG4vKipcbiAqIE1ldGFkYXRhIHRoYXQgeW91IGNhbiBhc3NpZ24gdG8gaGVscCBvcmdhbml6ZSB0aGUgZnJhbWV3b3JrcyB0aGF0IHlvdSBjcmVhdGUuIEVhY2ggdGFnIGlzIGEga2V5LXZhbHVlIHBhaXIuXG4gKi9cblRhZ3M/OiBUYWdbXVxufVxuLyoqXG4gKiBBIGxhYmVsIGZvciB0YWdnaW5nIEVudmlyb25tZW50IHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogQSBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSB0aGlzIHRhZ1xuICovXG5LZXk6IHN0cmluZ1xuLyoqXG4gKiBBIHN0cmluZyBjb250YWluaW5nIHRoZSB2YWx1ZSBmb3IgdGhlIHRhZ1xuICovXG5WYWx1ZTogc3RyaW5nXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJlZmFjdG9yc3BhY2VzLWVudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXJlZmFjdG9yc3BhY2VzLWVudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBOZXR3b3JrRmFicmljVHlwZSA9IChcIlRSQU5TSVRfR0FURVdBWVwiIHwgXCJOT05FXCIpXG5cbi8qKlxuICogRGVmaW5pdGlvbiBvZiBBV1M6OlJlZmFjdG9yU3BhY2VzOjpFbnZpcm9ubWVudCBSZXNvdXJjZSBUeXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19SRUZBQ1RPUlNQQUNFU19FTlZJUk9OTUVOVCB7XG5EZXNjcmlwdGlvbj86IHN0cmluZ1xuRW52aXJvbm1lbnRJZGVudGlmaWVyPzogc3RyaW5nXG5OYW1lPzogc3RyaW5nXG5OZXR3b3JrRmFicmljVHlwZT86IE5ldHdvcmtGYWJyaWNUeXBlXG5Bcm4/OiBzdHJpbmdcblRyYW5zaXRHYXRld2F5SWQ/OiBzdHJpbmdcbi8qKlxuICogTWV0YWRhdGEgdGhhdCB5b3UgY2FuIGFzc2lnbiB0byBoZWxwIG9yZ2FuaXplIHRoZSBmcmFtZXdvcmtzIHRoYXQgeW91IGNyZWF0ZS4gRWFjaCB0YWcgaXMgYSBrZXktdmFsdWUgcGFpci5cbiAqL1xuVGFncz86IFRhZ1tdXG59XG4vKipcbiAqIEEgbGFiZWwgZm9yIHRhZ2dpbmcgRW52aXJvbm1lbnQgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBBIHN0cmluZyB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgdGFnXG4gKi9cbktleTogc3RyaW5nXG4vKipcbiAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHZhbHVlIGZvciB0aGUgdGFnXG4gKi9cblZhbHVlOiBzdHJpbmdcbn1cbiJdfQ==
@@ -23,7 +23,7 @@ export interface _AWS_ROUTE53PROFILES_PROFILEASSOCIATION {
23
23
  */
24
24
  Tags?: Tag[];
25
25
  /**
26
- * The Amazon Resource Name (ARN) of the profile association.
26
+ * The Amazon Resource Name (ARN) of the profile association.
27
27
  */
28
28
  Arn?: string;
29
29
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJvdXRlNTNwcm9maWxlcy1wcm9maWxlYXNzb2NpYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3Mtcm91dGU1M3Byb2ZpbGVzLXByb2ZpbGVhc3NvY2lhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvdXJjZSBUeXBlIGRlZmluaXRpb24gZm9yIEFXUzo6Um91dGU1M1Byb2ZpbGVzOjpQcm9maWxlQXNzb2NpYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX1JPVVRFNTNQUk9GSUxFU19QUk9GSUxFQVNTT0NJQVRJT04ge1xuLyoqXG4gKiBUaGUgcmVzb3VyY2UgdGhhdCB5b3UgYXNzb2NpYXRlZCB0aGUgIHByb2ZpbGUgd2l0aC5cbiAqL1xuUmVzb3VyY2VJZDogc3RyaW5nXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgIHByb2ZpbGUgdGhhdCB5b3UgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZSB0aGF0IGlzIHNwZWNpZmllZCBieSBSZXNvdXJjZUlkLlxuICovXG5Qcm9maWxlSWQ6IHN0cmluZ1xuLyoqXG4gKiBQcmltYXJ5IElkZW50aWZpZXIgZm9yICBQcm9maWxlIEFzc29jaWF0aW9uXG4gKi9cbklkPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIGFuIGFzc29jaWF0aW9uIGJldHdlZW4gYSAgUHJvZmlsZSBhbmQgYSBWUEMuXG4gKi9cbk5hbWU6IHN0cmluZ1xuLyoqXG4gKiBBbiBhcnJheSBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYXBwbHkgdG8gdGhpcyByZXNvdXJjZS5cbiAqL1xuVGFncz86IFRhZ1tdXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgIHByb2ZpbGUgYXNzb2NpYXRpb24uXG4gKi9cbkFybj86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBUaGUga2V5IG5hbWUgb2YgdGhlIHRhZy4gWW91IGNhbiBzcGVjaWZ5IGEgdmFsdWUgdGhhdCBpcyAxIHRvIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3QgYmUgcHJlZml4ZWQgd2l0aCBhd3M6LiBZb3UgY2FuIHVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiB0aGUgc2V0IG9mIFVuaWNvZGUgbGV0dGVycywgZGlnaXRzLCB3aGl0ZXNwYWNlLCBfLCAuLCAvLCA9LCArLCBhbmQgLS5cbiAqL1xuS2V5OiBzdHJpbmdcbi8qKlxuICogVGhlIHZhbHVlIGZvciB0aGUgdGFnLiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSB0aGF0IGlzIDAgdG8gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGF3czouIFlvdSBjYW4gdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlc3BhY2UsIF8sIC4sIC8sID0sICssIGFuZCAtLlxuICovXG5WYWx1ZTogc3RyaW5nXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJvdXRlNTNwcm9maWxlcy1wcm9maWxlYXNzb2NpYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3Mtcm91dGU1M3Byb2ZpbGVzLXByb2ZpbGVhc3NvY2lhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvdXJjZSBUeXBlIGRlZmluaXRpb24gZm9yIEFXUzo6Um91dGU1M1Byb2ZpbGVzOjpQcm9maWxlQXNzb2NpYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX1JPVVRFNTNQUk9GSUxFU19QUk9GSUxFQVNTT0NJQVRJT04ge1xuLyoqXG4gKiBUaGUgcmVzb3VyY2UgdGhhdCB5b3UgYXNzb2NpYXRlZCB0aGUgIHByb2ZpbGUgd2l0aC5cbiAqL1xuUmVzb3VyY2VJZDogc3RyaW5nXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgIHByb2ZpbGUgdGhhdCB5b3UgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZSB0aGF0IGlzIHNwZWNpZmllZCBieSBSZXNvdXJjZUlkLlxuICovXG5Qcm9maWxlSWQ6IHN0cmluZ1xuLyoqXG4gKiBQcmltYXJ5IElkZW50aWZpZXIgZm9yICBQcm9maWxlIEFzc29jaWF0aW9uXG4gKi9cbklkPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIGFuIGFzc29jaWF0aW9uIGJldHdlZW4gYSAgUHJvZmlsZSBhbmQgYSBWUEMuXG4gKi9cbk5hbWU6IHN0cmluZ1xuLyoqXG4gKiBBbiBhcnJheSBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYXBwbHkgdG8gdGhpcyByZXNvdXJjZS5cbiAqL1xuVGFncz86IFRhZ1tdXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcHJvZmlsZSBhc3NvY2lhdGlvbi5cbiAqL1xuQXJuPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSBrZXkgbmFtZSBvZiB0aGUgdGFnLiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSB0aGF0IGlzIDEgdG8gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGF3czouIFlvdSBjYW4gdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlc3BhY2UsIF8sIC4sIC8sID0sICssIGFuZCAtLlxuICovXG5LZXk6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdmFsdWUgZm9yIHRoZSB0YWcuIFlvdSBjYW4gc3BlY2lmeSBhIHZhbHVlIHRoYXQgaXMgMCB0byAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIGxlbmd0aCBhbmQgY2Fubm90IGJlIHByZWZpeGVkIHdpdGggYXdzOi4gWW91IGNhbiB1c2UgYW55IG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogdGhlIHNldCBvZiBVbmljb2RlIGxldHRlcnMsIGRpZ2l0cywgd2hpdGVzcGFjZSwgXywgLiwgLywgPSwgKywgYW5kIC0uXG4gKi9cblZhbHVlOiBzdHJpbmdcbn1cbiJdfQ==
@@ -22,10 +22,6 @@ export interface _AWS_ROUTE53RESOLVER_RESOLVERRULE {
22
22
  * The Amazon Resource Name (ARN) of the resolver rule.
23
23
  */
24
24
  Arn?: string;
25
- /**
26
- * The name server domain for queries to be delegated to if a query matches the delegation record.
27
- */
28
- DelegationRecord?: string;
29
25
  /**
30
26
  * An array of key-value pairs to apply to this resource.
31
27
  */
@@ -66,4 +62,8 @@ export interface TargetAddress {
66
62
  * The protocol that you want to use to forward DNS queries.
67
63
  */
68
64
  Protocol?: ("Do53" | "DoH");
65
+ /**
66
+ * The SNI of the target name servers for DoH/DoH-FIPS outbound endpoints
67
+ */
68
+ ServerNameIndication?: string;
69
69
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJvdXRlNTNyZXNvbHZlci1yZXNvbHZlcnJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3Mtcm91dGU1M3Jlc29sdmVyLXJlc29sdmVycnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvdXJjZSBUeXBlIGRlZmluaXRpb24gZm9yIEFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclJ1bGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX1JPVVRFNTNSRVNPTFZFUl9SRVNPTFZFUlJVTEUge1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGVuZHBvaW50IHRoYXQgdGhlIHJ1bGUgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICovXG5SZXNvbHZlckVuZHBvaW50SWQ/OiBzdHJpbmdcbi8qKlxuICogRE5TIHF1ZXJpZXMgZm9yIHRoaXMgZG9tYWluIG5hbWUgYXJlIGZvcndhcmRlZCB0byB0aGUgSVAgYWRkcmVzc2VzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiBUYXJnZXRJcHNcbiAqL1xuRG9tYWluTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBXaGVuIHlvdSB3YW50IHRvIGZvcndhcmQgRE5TIHF1ZXJpZXMgZm9yIHNwZWNpZmllZCBkb21haW4gbmFtZSB0byByZXNvbHZlcnMgb24geW91ciBuZXR3b3JrLCBzcGVjaWZ5IEZPUldBUkQuIFdoZW4geW91IGhhdmUgYSBmb3J3YXJkaW5nIHJ1bGUgdG8gZm9yd2FyZCBETlMgcXVlcmllcyBmb3IgYSBkb21haW4gdG8geW91ciBuZXR3b3JrIGFuZCB5b3Ugd2FudCBSZXNvbHZlciB0byBwcm9jZXNzIHF1ZXJpZXMgZm9yIGEgc3ViZG9tYWluIG9mIHRoYXQgZG9tYWluLCBzcGVjaWZ5IFNZU1RFTS5cbiAqL1xuUnVsZVR5cGU6IChcIkZPUldBUkRcIiB8IFwiU1lTVEVNXCIgfCBcIlJFQ1VSU0lWRVwiIHwgXCJERUxFR0FURVwiKVxuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGVuZHBvaW50IHRoYXQgdGhlIHJ1bGUgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICovXG5SZXNvbHZlclJ1bGVJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJlc29sdmVyIHJ1bGUuXG4gKi9cbkFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBzZXJ2ZXIgZG9tYWluIGZvciBxdWVyaWVzIHRvIGJlIGRlbGVnYXRlZCB0byBpZiBhIHF1ZXJ5IG1hdGNoZXMgdGhlIGRlbGVnYXRpb24gcmVjb3JkLlxuICovXG5EZWxlZ2F0aW9uUmVjb3JkPzogc3RyaW5nXG4vKipcbiAqIEFuIGFycmF5IG9mIGtleS12YWx1ZSBwYWlycyB0byBhcHBseSB0byB0aGlzIHJlc291cmNlLlxuICovXG5UYWdzPzogVGFnW11cbi8qKlxuICogQW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgSVAgYWRkcmVzc2VzIGFuZCBwb3J0cyB0aGF0IGFuIG91dGJvdW5kIGVuZHBvaW50IGZvcndhcmRzIEROUyBxdWVyaWVzIHRvLiBUeXBpY2FsbHksIHRoZXNlIGFyZSB0aGUgSVAgYWRkcmVzc2VzIG9mIEROUyByZXNvbHZlcnMgb24geW91ciBuZXR3b3JrLiBTcGVjaWZ5IElQdjQgYWRkcmVzc2VzLiBJUHY2IGlzIG5vdCBzdXBwb3J0ZWQuXG4gKi9cblRhcmdldElwcz86IFRhcmdldEFkZHJlc3NbXVxuLyoqXG4gKiBUaGUgbmFtZSBmb3IgdGhlIFJlc29sdmVyIHJ1bGVcbiAqL1xuTmFtZT86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBUaGUgdmFsdWUgZm9yIHRoZSB0YWcuIFlvdSBjYW4gc3BlY2lmeSBhIHZhbHVlIHRoYXQgaXMgMCB0byAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIGxlbmd0aCBhbmQgY2Fubm90IGJlIHByZWZpeGVkIHdpdGggYXdzOi4gWW91IGNhbiB1c2UgYW55IG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogdGhlIHNldCBvZiBVbmljb2RlIGxldHRlcnMsIGRpZ2l0cywgd2hpdGVzcGFjZSwgXywgLiwgLywgPSwgKywgYW5kIC0uXG4gKi9cblZhbHVlOiBzdHJpbmdcbi8qKlxuICogVGhlIGtleSBuYW1lIG9mIHRoZSB0YWcuIFlvdSBjYW4gc3BlY2lmeSBhIHZhbHVlIHRoYXQgaXMgMSB0byAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIGxlbmd0aCBhbmQgY2Fubm90IGJlIHByZWZpeGVkIHdpdGggYXdzOi4gWW91IGNhbiB1c2UgYW55IG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogdGhlIHNldCBvZiBVbmljb2RlIGxldHRlcnMsIGRpZ2l0cywgd2hpdGVzcGFjZSwgXywgLiwgLywgPSwgKywgYW5kIC0uXG4gKi9cbktleTogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldEFkZHJlc3Mge1xuLyoqXG4gKiBPbmUgSVB2NiBhZGRyZXNzIHRoYXQgeW91IHdhbnQgdG8gZm9yd2FyZCBETlMgcXVlcmllcyB0by4gWW91IGNhbiBzcGVjaWZ5IG9ubHkgSVB2NiBhZGRyZXNzZXMuIFxuICovXG5JcHY2Pzogc3RyaW5nXG4vKipcbiAqIE9uZSBJUCBhZGRyZXNzIHRoYXQgeW91IHdhbnQgdG8gZm9yd2FyZCBETlMgcXVlcmllcyB0by4gWW91IGNhbiBzcGVjaWZ5IG9ubHkgSVB2NCBhZGRyZXNzZXMuIFxuICovXG5JcD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCBhdCBJcCB0aGF0IHlvdSB3YW50IHRvIGZvcndhcmQgRE5TIHF1ZXJpZXMgdG8uIFxuICovXG5Qb3J0Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBwcm90b2NvbCB0aGF0IHlvdSB3YW50IHRvIHVzZSB0byBmb3J3YXJkIEROUyBxdWVyaWVzLiBcbiAqL1xuUHJvdG9jb2w/OiAoXCJEbzUzXCIgfCBcIkRvSFwiKVxufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJvdXRlNTNyZXNvbHZlci1yZXNvbHZlcnJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3Mtcm91dGU1M3Jlc29sdmVyLXJlc29sdmVycnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvdXJjZSBUeXBlIGRlZmluaXRpb24gZm9yIEFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclJ1bGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX1JPVVRFNTNSRVNPTFZFUl9SRVNPTFZFUlJVTEUge1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGVuZHBvaW50IHRoYXQgdGhlIHJ1bGUgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICovXG5SZXNvbHZlckVuZHBvaW50SWQ/OiBzdHJpbmdcbi8qKlxuICogRE5TIHF1ZXJpZXMgZm9yIHRoaXMgZG9tYWluIG5hbWUgYXJlIGZvcndhcmRlZCB0byB0aGUgSVAgYWRkcmVzc2VzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiBUYXJnZXRJcHNcbiAqL1xuRG9tYWluTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBXaGVuIHlvdSB3YW50IHRvIGZvcndhcmQgRE5TIHF1ZXJpZXMgZm9yIHNwZWNpZmllZCBkb21haW4gbmFtZSB0byByZXNvbHZlcnMgb24geW91ciBuZXR3b3JrLCBzcGVjaWZ5IEZPUldBUkQuIFdoZW4geW91IGhhdmUgYSBmb3J3YXJkaW5nIHJ1bGUgdG8gZm9yd2FyZCBETlMgcXVlcmllcyBmb3IgYSBkb21haW4gdG8geW91ciBuZXR3b3JrIGFuZCB5b3Ugd2FudCBSZXNvbHZlciB0byBwcm9jZXNzIHF1ZXJpZXMgZm9yIGEgc3ViZG9tYWluIG9mIHRoYXQgZG9tYWluLCBzcGVjaWZ5IFNZU1RFTS5cbiAqL1xuUnVsZVR5cGU6IChcIkZPUldBUkRcIiB8IFwiU1lTVEVNXCIgfCBcIlJFQ1VSU0lWRVwiIHwgXCJERUxFR0FURVwiKVxuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGVuZHBvaW50IHRoYXQgdGhlIHJ1bGUgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICovXG5SZXNvbHZlclJ1bGVJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJlc29sdmVyIHJ1bGUuXG4gKi9cbkFybj86IHN0cmluZ1xuLyoqXG4gKiBBbiBhcnJheSBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYXBwbHkgdG8gdGhpcyByZXNvdXJjZS5cbiAqL1xuVGFncz86IFRhZ1tdXG4vKipcbiAqIEFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIElQIGFkZHJlc3NlcyBhbmQgcG9ydHMgdGhhdCBhbiBvdXRib3VuZCBlbmRwb2ludCBmb3J3YXJkcyBETlMgcXVlcmllcyB0by4gVHlwaWNhbGx5LCB0aGVzZSBhcmUgdGhlIElQIGFkZHJlc3NlcyBvZiBETlMgcmVzb2x2ZXJzIG9uIHlvdXIgbmV0d29yay4gU3BlY2lmeSBJUHY0IGFkZHJlc3Nlcy4gSVB2NiBpcyBub3Qgc3VwcG9ydGVkLlxuICovXG5UYXJnZXRJcHM/OiBUYXJnZXRBZGRyZXNzW11cbi8qKlxuICogVGhlIG5hbWUgZm9yIHRoZSBSZXNvbHZlciBydWxlXG4gKi9cbk5hbWU/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVGhlIHZhbHVlIGZvciB0aGUgdGFnLiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSB0aGF0IGlzIDAgdG8gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGF3czouIFlvdSBjYW4gdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlc3BhY2UsIF8sIC4sIC8sID0sICssIGFuZCAtLlxuICovXG5WYWx1ZTogc3RyaW5nXG4vKipcbiAqIFRoZSBrZXkgbmFtZSBvZiB0aGUgdGFnLiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSB0aGF0IGlzIDEgdG8gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGF3czouIFlvdSBjYW4gdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlc3BhY2UsIF8sIC4sIC8sID0sICssIGFuZCAtLlxuICovXG5LZXk6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRBZGRyZXNzIHtcbi8qKlxuICogT25lIElQdjYgYWRkcmVzcyB0aGF0IHlvdSB3YW50IHRvIGZvcndhcmQgRE5TIHF1ZXJpZXMgdG8uIFlvdSBjYW4gc3BlY2lmeSBvbmx5IElQdjYgYWRkcmVzc2VzLiBcbiAqL1xuSXB2Nj86IHN0cmluZ1xuLyoqXG4gKiBPbmUgSVAgYWRkcmVzcyB0aGF0IHlvdSB3YW50IHRvIGZvcndhcmQgRE5TIHF1ZXJpZXMgdG8uIFlvdSBjYW4gc3BlY2lmeSBvbmx5IElQdjQgYWRkcmVzc2VzLiBcbiAqL1xuSXA/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgYXQgSXAgdGhhdCB5b3Ugd2FudCB0byBmb3J3YXJkIEROUyBxdWVyaWVzIHRvLiBcbiAqL1xuUG9ydD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcHJvdG9jb2wgdGhhdCB5b3Ugd2FudCB0byB1c2UgdG8gZm9yd2FyZCBETlMgcXVlcmllcy4gXG4gKi9cblByb3RvY29sPzogKFwiRG81M1wiIHwgXCJEb0hcIilcbi8qKlxuICogVGhlIFNOSSBvZiB0aGUgdGFyZ2V0IG5hbWUgc2VydmVycyBmb3IgRG9IL0RvSC1GSVBTIG91dGJvdW5kIGVuZHBvaW50c1xuICovXG5TZXJ2ZXJOYW1lSW5kaWNhdGlvbj86IHN0cmluZ1xufVxuIl19