@horietakehiro/aws-cdk-utul 0.12.0 → 0.20.0

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 (135) hide show
  1. package/index.d.ts +0 -1
  2. package/index.js +3 -3
  3. package/lib/assertions.d.ts +114 -2
  4. package/lib/assertions.js +121 -5
  5. package/lib/stack-manager.d.ts +0 -41
  6. package/lib/stack-manager.js +188 -131
  7. package/lib/typed-resource.d.ts +6 -5
  8. package/lib/typed-resource.js +1 -1
  9. package/lib/types/cfn-resource-types/aws-apigateway-account.d.ts +0 -3
  10. package/lib/types/cfn-resource-types/aws-apigateway-account.js +1 -1
  11. package/lib/types/cfn-resource-types/aws-apigateway-apikey.d.ts +0 -27
  12. package/lib/types/cfn-resource-types/aws-apigateway-apikey.js +1 -1
  13. package/lib/types/cfn-resource-types/aws-apigateway-authorizer.d.ts +0 -30
  14. package/lib/types/cfn-resource-types/aws-apigateway-authorizer.js +1 -1
  15. package/lib/types/cfn-resource-types/aws-apigateway-basepathmapping.d.ts +0 -12
  16. package/lib/types/cfn-resource-types/aws-apigateway-basepathmapping.js +1 -1
  17. package/lib/types/cfn-resource-types/aws-apigateway-clientcertificate.d.ts +0 -6
  18. package/lib/types/cfn-resource-types/aws-apigateway-clientcertificate.js +1 -1
  19. package/lib/types/cfn-resource-types/aws-apigateway-deployment.d.ts +0 -63
  20. package/lib/types/cfn-resource-types/aws-apigateway-deployment.js +1 -1
  21. package/lib/types/cfn-resource-types/aws-apigateway-documentationpart.d.ts +0 -24
  22. package/lib/types/cfn-resource-types/aws-apigateway-documentationpart.js +1 -1
  23. package/lib/types/cfn-resource-types/aws-apigateway-documentationversion.d.ts +0 -9
  24. package/lib/types/cfn-resource-types/aws-apigateway-documentationversion.js +1 -1
  25. package/lib/types/cfn-resource-types/aws-apigateway-gatewayresponse.d.ts +0 -15
  26. package/lib/types/cfn-resource-types/aws-apigateway-gatewayresponse.js +1 -1
  27. package/lib/types/cfn-resource-types/aws-apigateway-method.d.ts +0 -109
  28. package/lib/types/cfn-resource-types/aws-apigateway-method.js +1 -1
  29. package/lib/types/cfn-resource-types/aws-apigateway-model.d.ts +0 -12
  30. package/lib/types/cfn-resource-types/aws-apigateway-model.js +1 -1
  31. package/lib/types/cfn-resource-types/aws-apigateway-requestvalidator.d.ts +0 -12
  32. package/lib/types/cfn-resource-types/aws-apigateway-requestvalidator.js +1 -1
  33. package/lib/types/cfn-resource-types/aws-apigateway-resource.d.ts +0 -9
  34. package/lib/types/cfn-resource-types/aws-apigateway-resource.js +1 -1
  35. package/lib/types/cfn-resource-types/aws-apigateway-restapi.d.ts +0 -33
  36. package/lib/types/cfn-resource-types/aws-apigateway-restapi.js +1 -1
  37. package/lib/types/cfn-resource-types/aws-apigateway-stage.d.ts +0 -75
  38. package/lib/types/cfn-resource-types/aws-apigateway-stage.js +1 -1
  39. package/lib/types/cfn-resource-types/aws-apigateway-usageplan.d.ts +0 -48
  40. package/lib/types/cfn-resource-types/aws-apigateway-usageplan.js +1 -1
  41. package/lib/types/cfn-resource-types/aws-apigateway-usageplankey.d.ts +0 -3
  42. package/lib/types/cfn-resource-types/aws-apigateway-usageplankey.js +1 -1
  43. package/lib/types/cfn-resource-types/aws-appsync-api.d.ts +123 -0
  44. package/lib/types/cfn-resource-types/aws-appsync-api.js +3 -0
  45. package/lib/types/cfn-resource-types/aws-appsync-channelnamespace.d.ts +66 -0
  46. package/lib/types/cfn-resource-types/aws-appsync-channelnamespace.js +3 -0
  47. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.d.ts +30 -0
  48. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.js +1 -1
  49. package/lib/types/cfn-resource-types/aws-bedrock-applicationinferenceprofile.d.ts +82 -0
  50. package/lib/types/cfn-resource-types/aws-bedrock-applicationinferenceprofile.js +3 -0
  51. package/lib/types/cfn-resource-types/aws-cleanrooms-analysistemplate.d.ts +1 -1
  52. package/lib/types/cfn-resource-types/aws-cleanrooms-analysistemplate.js +1 -1
  53. package/lib/types/cfn-resource-types/aws-cleanrooms-collaboration.d.ts +2 -0
  54. package/lib/types/cfn-resource-types/aws-cleanrooms-collaboration.js +1 -1
  55. package/lib/types/cfn-resource-types/aws-cleanrooms-membership.d.ts +1 -0
  56. package/lib/types/cfn-resource-types/aws-cleanrooms-membership.js +1 -1
  57. package/lib/types/cfn-resource-types/aws-codebuild-fleet.d.ts +28 -1
  58. package/lib/types/cfn-resource-types/aws-codebuild-fleet.js +1 -1
  59. package/lib/types/cfn-resource-types/aws-cognito-userpool.d.ts +94 -94
  60. package/lib/types/cfn-resource-types/aws-cognito-userpool.js +1 -1
  61. package/lib/types/cfn-resource-types/aws-datasync-task.d.ts +100 -96
  62. package/lib/types/cfn-resource-types/aws-datasync-task.js +1 -1
  63. package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.d.ts +96 -96
  64. package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.js +1 -1
  65. package/lib/types/cfn-resource-types/aws-ec2-securitygroupvpcassociation.d.ts +25 -0
  66. package/lib/types/cfn-resource-types/aws-ec2-securitygroupvpcassociation.js +3 -0
  67. package/lib/types/cfn-resource-types/aws-ec2-vpnconnection.d.ts +1 -1
  68. package/lib/types/cfn-resource-types/aws-ec2-vpnconnection.js +1 -1
  69. package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +5 -4
  70. package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
  71. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-loadbalancer.d.ts +17 -14
  72. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-loadbalancer.js +1 -1
  73. package/lib/types/cfn-resource-types/aws-events-connection.d.ts +26 -26
  74. package/lib/types/cfn-resource-types/aws-events-connection.js +1 -1
  75. package/lib/types/cfn-resource-types/aws-gamelift-containergroupdefinition.d.ts +4 -179
  76. package/lib/types/cfn-resource-types/aws-gamelift-containergroupdefinition.js +1 -1
  77. package/lib/types/cfn-resource-types/aws-gamelift-fleet.d.ts +1 -42
  78. package/lib/types/cfn-resource-types/aws-gamelift-fleet.js +1 -1
  79. package/lib/types/cfn-resource-types/aws-inspectorv2-cisscanconfiguration.d.ts +1 -1
  80. package/lib/types/cfn-resource-types/aws-inspectorv2-cisscanconfiguration.js +1 -1
  81. package/lib/types/cfn-resource-types/aws-iotwireless-wirelessdeviceimporttask.d.ts +12 -1
  82. package/lib/types/cfn-resource-types/aws-iotwireless-wirelessdeviceimporttask.js +1 -1
  83. package/lib/types/cfn-resource-types/aws-lambda-function.d.ts +24 -4
  84. package/lib/types/cfn-resource-types/aws-lambda-function.js +1 -1
  85. package/lib/types/cfn-resource-types/aws-lambda-version.d.ts +1 -9
  86. package/lib/types/cfn-resource-types/aws-lambda-version.js +1 -1
  87. package/lib/types/cfn-resource-types/aws-logs-delivery.d.ts +20 -0
  88. package/lib/types/cfn-resource-types/aws-logs-delivery.js +1 -1
  89. package/lib/types/cfn-resource-types/aws-logs-deliverydestination.d.ts +4 -0
  90. package/lib/types/cfn-resource-types/aws-logs-deliverydestination.js +1 -1
  91. package/lib/types/cfn-resource-types/aws-m2-application.d.ts +1 -1
  92. package/lib/types/cfn-resource-types/aws-m2-application.js +1 -1
  93. package/lib/types/cfn-resource-types/aws-mediapackagev2-originendpoint.d.ts +19 -0
  94. package/lib/types/cfn-resource-types/aws-mediapackagev2-originendpoint.js +1 -1
  95. package/lib/types/cfn-resource-types/aws-nimblestudio-launchprofile.d.ts +23 -143
  96. package/lib/types/cfn-resource-types/aws-nimblestudio-launchprofile.js +1 -1
  97. package/lib/types/cfn-resource-types/aws-nimblestudio-streamingimage.d.ts +16 -46
  98. package/lib/types/cfn-resource-types/aws-nimblestudio-streamingimage.js +1 -1
  99. package/lib/types/cfn-resource-types/aws-nimblestudio-studio.d.ts +15 -47
  100. package/lib/types/cfn-resource-types/aws-nimblestudio-studio.js +1 -1
  101. package/lib/types/cfn-resource-types/aws-nimblestudio-studiocomponent.d.ts +36 -163
  102. package/lib/types/cfn-resource-types/aws-nimblestudio-studiocomponent.js +1 -1
  103. package/lib/types/cfn-resource-types/aws-opensearchservice-application.d.ts +89 -0
  104. package/lib/types/cfn-resource-types/aws-opensearchservice-application.js +3 -0
  105. package/lib/types/cfn-resource-types/aws-opensearchservice-domain.d.ts +30 -0
  106. package/lib/types/cfn-resource-types/aws-opensearchservice-domain.js +1 -1
  107. package/lib/types/cfn-resource-types/aws-quicksight-analysis.d.ts +1 -1
  108. package/lib/types/cfn-resource-types/aws-quicksight-analysis.js +1 -1
  109. package/lib/types/cfn-resource-types/aws-quicksight-dashboard.d.ts +1 -1
  110. package/lib/types/cfn-resource-types/aws-quicksight-dashboard.js +1 -1
  111. package/lib/types/cfn-resource-types/aws-quicksight-datasource.d.ts +22 -9
  112. package/lib/types/cfn-resource-types/aws-quicksight-datasource.js +1 -1
  113. package/lib/types/cfn-resource-types/aws-quicksight-template.d.ts +1 -1
  114. package/lib/types/cfn-resource-types/aws-quicksight-template.js +1 -1
  115. package/lib/types/cfn-resource-types/aws-rds-dbcluster.d.ts +372 -371
  116. package/lib/types/cfn-resource-types/aws-rds-dbcluster.js +1 -1
  117. package/lib/types/cfn-resource-types/aws-rds-dbshardgroup.d.ts +56 -0
  118. package/lib/types/cfn-resource-types/aws-rds-dbshardgroup.js +3 -0
  119. package/lib/types/cfn-resource-types/aws-sagemaker-studiolifecycleconfig.d.ts +2 -2
  120. package/lib/types/cfn-resource-types/aws-sagemaker-studiolifecycleconfig.js +1 -1
  121. package/lib/types/cfn-resource-types/aws-secretsmanager-rotationschedule.d.ts +71 -11
  122. package/lib/types/cfn-resource-types/aws-secretsmanager-rotationschedule.js +1 -1
  123. package/lib/types/cfn-resource-types/aws-ses-configurationset.d.ts +4 -0
  124. package/lib/types/cfn-resource-types/aws-ses-configurationset.js +1 -1
  125. package/lib/types/cfn-resource-types/aws-transfer-user.d.ts +28 -14
  126. package/lib/types/cfn-resource-types/aws-transfer-user.js +1 -1
  127. package/lib/types/cfn-resource-types/aws-wisdom-aiagent.d.ts +76 -0
  128. package/lib/types/cfn-resource-types/aws-wisdom-aiagent.js +3 -0
  129. package/lib/types/cfn-resource-types/aws-wisdom-aiagentversion.d.ts +12 -0
  130. package/lib/types/cfn-resource-types/aws-wisdom-aiagentversion.js +3 -0
  131. package/lib/types/cfn-resource-types/aws-wisdom-aipromptversion.d.ts +12 -0
  132. package/lib/types/cfn-resource-types/aws-wisdom-aipromptversion.js +3 -0
  133. package/lib/types/cfn-resource-types.d.ts +19 -1
  134. package/lib/types/cfn-resource-types.js +45 -27
  135. package/package.json +1 -1
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWR5bmFtb2RiLWdsb2JhbHRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWR5bmFtb2RiLWdsb2JhbHRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZlcnNpb246IE5vbmUuIFJlc291cmNlIFR5cGUgZGVmaW5pdGlvbiBmb3IgQVdTOjpEeW5hbW9EQjo6R2xvYmFsVGFibGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0RZTkFNT0RCX0dMT0JBTFRBQkxFIHtcbkFybj86IHN0cmluZ1xuU3RyZWFtQXJuPzogc3RyaW5nXG4vKipcbiAqIEBtaW5JdGVtcyAxXG4gKi9cbkF0dHJpYnV0ZURlZmluaXRpb25zOiBBdHRyaWJ1dGVEZWZpbml0aW9uW11cbkJpbGxpbmdNb2RlPzogc3RyaW5nXG5HbG9iYWxTZWNvbmRhcnlJbmRleGVzPzogR2xvYmFsU2Vjb25kYXJ5SW5kZXhbXVxuLyoqXG4gKiBAbWluSXRlbXMgMVxuICogQG1heEl0ZW1zIDJcbiAqL1xuS2V5U2NoZW1hOiBLZXlTY2hlbWFbXVxuTG9jYWxTZWNvbmRhcnlJbmRleGVzPzogTG9jYWxTZWNvbmRhcnlJbmRleFtdXG5Xcml0ZVByb3Zpc2lvbmVkVGhyb3VnaHB1dFNldHRpbmdzPzogV3JpdGVQcm92aXNpb25lZFRocm91Z2hwdXRTZXR0aW5nc1xuV3JpdGVPbkRlbWFuZFRocm91Z2hwdXRTZXR0aW5ncz86IFdyaXRlT25EZW1hbmRUaHJvdWdocHV0U2V0dGluZ3Ncbi8qKlxuICogQG1pbkl0ZW1zIDFcbiAqL1xuUmVwbGljYXM6IFJlcGxpY2FTcGVjaWZpY2F0aW9uW11cblNTRVNwZWNpZmljYXRpb24/OiBTU0VTcGVjaWZpY2F0aW9uXG5TdHJlYW1TcGVjaWZpY2F0aW9uPzogU3RyZWFtU3BlY2lmaWNhdGlvblxuVGFibGVOYW1lPzogc3RyaW5nXG5UYWJsZUlkPzogc3RyaW5nXG5UaW1lVG9MaXZlU3BlY2lmaWNhdGlvbj86IFRpbWVUb0xpdmVTcGVjaWZpY2F0aW9uXG59XG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZURlZmluaXRpb24ge1xuQXR0cmlidXRlTmFtZTogc3RyaW5nXG5BdHRyaWJ1dGVUeXBlOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2xvYmFsU2Vjb25kYXJ5SW5kZXgge1xuSW5kZXhOYW1lOiBzdHJpbmdcbi8qKlxuICogQG1pbkl0ZW1zIDFcbiAqIEBtYXhJdGVtcyAyXG4gKi9cbktleVNjaGVtYTogS2V5U2NoZW1hW11cblByb2plY3Rpb246IFByb2plY3Rpb25cbldyaXRlUHJvdmlzaW9uZWRUaHJvdWdocHV0U2V0dGluZ3M/OiBXcml0ZVByb3Zpc2lvbmVkVGhyb3VnaHB1dFNldHRpbmdzXG5Xcml0ZU9uRGVtYW5kVGhyb3VnaHB1dFNldHRpbmdzPzogV3JpdGVPbkRlbWFuZFRocm91Z2hwdXRTZXR0aW5nc1xufVxuZXhwb3J0IGludGVyZmFjZSBLZXlTY2hlbWEge1xuQXR0cmlidXRlTmFtZTogc3RyaW5nXG5LZXlUeXBlOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdGlvbiB7XG4vKipcbiAqIEBtYXhJdGVtcyAyMFxuICovXG5Ob25LZXlBdHRyaWJ1dGVzPzogc3RyaW5nW11cblByb2plY3Rpb25UeXBlPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlUHJvdmlzaW9uZWRUaHJvdWdocHV0U2V0dGluZ3Mge1xuV3JpdGVDYXBhY2l0eUF1dG9TY2FsaW5nU2V0dGluZ3M/OiBDYXBhY2l0eUF1dG9TY2FsaW5nU2V0dGluZ3Ncbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwYWNpdHlBdXRvU2NhbGluZ1NldHRpbmdzIHtcbk1pbkNhcGFjaXR5OiBudW1iZXJcbk1heENhcGFjaXR5OiBudW1iZXJcblNlZWRDYXBhY2l0eT86IG51bWJlclxuVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5Q29uZmlndXJhdGlvbjogVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5Q29uZmlndXJhdGlvblxufVxuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3lDb25maWd1cmF0aW9uIHtcbkRpc2FibGVTY2FsZUluPzogYm9vbGVhblxuU2NhbGVJbkNvb2xkb3duPzogbnVtYmVyXG5TY2FsZU91dENvb2xkb3duPzogbnVtYmVyXG5UYXJnZXRWYWx1ZTogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlT25EZW1hbmRUaHJvdWdocHV0U2V0dGluZ3Mge1xuTWF4V3JpdGVSZXF1ZXN0VW5pdHM/OiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxTZWNvbmRhcnlJbmRleCB7XG5JbmRleE5hbWU6IHN0cmluZ1xuLyoqXG4gKiBAbWF4SXRlbXMgMlxuICovXG5LZXlTY2hlbWE6IEtleVNjaGVtYVtdXG5Qcm9qZWN0aW9uOiBQcm9qZWN0aW9uXG59XG5leHBvcnQgaW50ZXJmYWNlIFJlcGxpY2FTcGVjaWZpY2F0aW9uIHtcblJlZ2lvbjogc3RyaW5nXG5HbG9iYWxTZWNvbmRhcnlJbmRleGVzPzogUmVwbGljYUdsb2JhbFNlY29uZGFyeUluZGV4U3BlY2lmaWNhdGlvbltdXG5Db250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbj86IENvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uXG5Qb2ludEluVGltZVJlY292ZXJ5U3BlY2lmaWNhdGlvbj86IFBvaW50SW5UaW1lUmVjb3ZlcnlTcGVjaWZpY2F0aW9uXG5UYWJsZUNsYXNzPzogc3RyaW5nXG5EZWxldGlvblByb3RlY3Rpb25FbmFibGVkPzogYm9vbGVhblxuU1NFU3BlY2lmaWNhdGlvbj86IFJlcGxpY2FTU0VTcGVjaWZpY2F0aW9uXG5UYWdzPzogVGFnW11cblJlYWRQcm92aXNpb25lZFRocm91Z2hwdXRTZXR0aW5ncz86IFJlYWRQcm92aXNpb25lZFRocm91Z2hwdXRTZXR0aW5nc1xuUmVhZE9uRGVtYW5kVGhyb3VnaHB1dFNldHRpbmdzPzogUmVhZE9uRGVtYW5kVGhyb3VnaHB1dFNldHRpbmdzXG5LaW5lc2lzU3RyZWFtU3BlY2lmaWNhdGlvbj86IEtpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uXG5SZXNvdXJjZVBvbGljeT86IFJlc291cmNlUG9saWN5XG5SZXBsaWNhU3RyZWFtU3BlY2lmaWNhdGlvbj86IFJlcGxpY2FTdHJlYW1TcGVjaWZpY2F0aW9uXG59XG5leHBvcnQgaW50ZXJmYWNlIFJlcGxpY2FHbG9iYWxTZWNvbmRhcnlJbmRleFNwZWNpZmljYXRpb24ge1xuSW5kZXhOYW1lOiBzdHJpbmdcbkNvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uPzogQ29udHJpYnV0b3JJbnNpZ2h0c1NwZWNpZmljYXRpb25cblJlYWRQcm92aXNpb25lZFRocm91Z2hwdXRTZXR0aW5ncz86IFJlYWRQcm92aXNpb25lZFRocm91Z2hwdXRTZXR0aW5nc1xuUmVhZE9uRGVtYW5kVGhyb3VnaHB1dFNldHRpbmdzPzogUmVhZE9uRGVtYW5kVGhyb3VnaHB1dFNldHRpbmdzXG59XG5leHBvcnQgaW50ZXJmYWNlIENvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uIHtcbkVuYWJsZWQ6IGJvb2xlYW5cbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZFByb3Zpc2lvbmVkVGhyb3VnaHB1dFNldHRpbmdzIHtcblJlYWRDYXBhY2l0eVVuaXRzPzogbnVtYmVyXG5SZWFkQ2FwYWNpdHlBdXRvU2NhbGluZ1NldHRpbmdzPzogQ2FwYWNpdHlBdXRvU2NhbGluZ1NldHRpbmdzXG59XG5leHBvcnQgaW50ZXJmYWNlIFJlYWRPbkRlbWFuZFRocm91Z2hwdXRTZXR0aW5ncyB7XG5NYXhSZWFkUmVxdWVzdFVuaXRzPzogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIFBvaW50SW5UaW1lUmVjb3ZlcnlTcGVjaWZpY2F0aW9uIHtcblBvaW50SW5UaW1lUmVjb3ZlcnlFbmFibGVkPzogYm9vbGVhblxufVxuZXhwb3J0IGludGVyZmFjZSBSZXBsaWNhU1NFU3BlY2lmaWNhdGlvbiB7XG5LTVNNYXN0ZXJLZXlJZDogKHtcbltrOiBzdHJpbmddOiB1bmtub3duXG59ICYgc3RyaW5nKVxufVxuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuS2V5OiBzdHJpbmdcblZhbHVlOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24ge1xuU3RyZWFtQXJuOiBzdHJpbmdcbkFwcHJveGltYXRlQ3JlYXRpb25EYXRlVGltZVByZWNpc2lvbj86IChcIk1JQ1JPU0VDT05EXCIgfCBcIk1JTExJU0VDT05EXCIpXG59XG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUG9saWN5IHtcblBvbGljeURvY3VtZW50OiB7XG5bazogc3RyaW5nXTogdW5rbm93blxufVxufVxuZXhwb3J0IGludGVyZmFjZSBSZXBsaWNhU3RyZWFtU3BlY2lmaWNhdGlvbiB7XG5SZXNvdXJjZVBvbGljeTogUmVzb3VyY2VQb2xpY3lcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU1NFU3BlY2lmaWNhdGlvbiB7XG5TU0VFbmFibGVkOiBib29sZWFuXG5TU0VUeXBlPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbVNwZWNpZmljYXRpb24ge1xuU3RyZWFtVmlld1R5cGU6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBUaW1lVG9MaXZlU3BlY2lmaWNhdGlvbiB7XG5BdHRyaWJ1dGVOYW1lPzogc3RyaW5nXG5FbmFibGVkOiBib29sZWFuXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWR5bmFtb2RiLWdsb2JhbHRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWR5bmFtb2RiLWdsb2JhbHRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZlcnNpb246IE5vbmUuIFJlc291cmNlIFR5cGUgZGVmaW5pdGlvbiBmb3IgQVdTOjpEeW5hbW9EQjo6R2xvYmFsVGFibGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0RZTkFNT0RCX0dMT0JBTFRBQkxFIHtcblRhYmxlSWQ/OiBzdHJpbmdcblNTRVNwZWNpZmljYXRpb24/OiBTU0VTcGVjaWZpY2F0aW9uXG5TdHJlYW1TcGVjaWZpY2F0aW9uPzogU3RyZWFtU3BlY2lmaWNhdGlvblxuLyoqXG4gKiBAbWluSXRlbXMgMVxuICovXG5SZXBsaWNhczogUmVwbGljYVNwZWNpZmljYXRpb25bXVxuV3JpdGVQcm92aXNpb25lZFRocm91Z2hwdXRTZXR0aW5ncz86IFdyaXRlUHJvdmlzaW9uZWRUaHJvdWdocHV0U2V0dGluZ3NcbldyaXRlT25EZW1hbmRUaHJvdWdocHV0U2V0dGluZ3M/OiBXcml0ZU9uRGVtYW5kVGhyb3VnaHB1dFNldHRpbmdzXG5UYWJsZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogQG1pbkl0ZW1zIDFcbiAqL1xuQXR0cmlidXRlRGVmaW5pdGlvbnM6IEF0dHJpYnV0ZURlZmluaXRpb25bXVxuQmlsbGluZ01vZGU/OiBzdHJpbmdcbkdsb2JhbFNlY29uZGFyeUluZGV4ZXM/OiBHbG9iYWxTZWNvbmRhcnlJbmRleFtdXG4vKipcbiAqIEBtaW5JdGVtcyAxXG4gKiBAbWF4SXRlbXMgMlxuICovXG5LZXlTY2hlbWE6IEtleVNjaGVtYVtdXG5Mb2NhbFNlY29uZGFyeUluZGV4ZXM/OiBMb2NhbFNlY29uZGFyeUluZGV4W11cbkFybj86IHN0cmluZ1xuU3RyZWFtQXJuPzogc3RyaW5nXG5UaW1lVG9MaXZlU3BlY2lmaWNhdGlvbj86IFRpbWVUb0xpdmVTcGVjaWZpY2F0aW9uXG59XG5leHBvcnQgaW50ZXJmYWNlIFNTRVNwZWNpZmljYXRpb24ge1xuU1NFRW5hYmxlZDogYm9vbGVhblxuU1NFVHlwZT86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1TcGVjaWZpY2F0aW9uIHtcblN0cmVhbVZpZXdUeXBlOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGljYVNwZWNpZmljYXRpb24ge1xuU1NFU3BlY2lmaWNhdGlvbj86IFJlcGxpY2FTU0VTcGVjaWZpY2F0aW9uXG5LaW5lc2lzU3RyZWFtU3BlY2lmaWNhdGlvbj86IEtpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uXG5Db250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbj86IENvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uXG5Qb2ludEluVGltZVJlY292ZXJ5U3BlY2lmaWNhdGlvbj86IFBvaW50SW5UaW1lUmVjb3ZlcnlTcGVjaWZpY2F0aW9uXG5SZXBsaWNhU3RyZWFtU3BlY2lmaWNhdGlvbj86IFJlcGxpY2FTdHJlYW1TcGVjaWZpY2F0aW9uXG5HbG9iYWxTZWNvbmRhcnlJbmRleGVzPzogUmVwbGljYUdsb2JhbFNlY29uZGFyeUluZGV4U3BlY2lmaWNhdGlvbltdXG5SZWdpb246IHN0cmluZ1xuUmVzb3VyY2VQb2xpY3k/OiBSZXNvdXJjZVBvbGljeVxuUmVhZFByb3Zpc2lvbmVkVGhyb3VnaHB1dFNldHRpbmdzPzogUmVhZFByb3Zpc2lvbmVkVGhyb3VnaHB1dFNldHRpbmdzXG5UYWJsZUNsYXNzPzogc3RyaW5nXG5EZWxldGlvblByb3RlY3Rpb25FbmFibGVkPzogYm9vbGVhblxuVGFncz86IFRhZ1tdXG5SZWFkT25EZW1hbmRUaHJvdWdocHV0U2V0dGluZ3M/OiBSZWFkT25EZW1hbmRUaHJvdWdocHV0U2V0dGluZ3Ncbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGljYVNTRVNwZWNpZmljYXRpb24ge1xuS01TTWFzdGVyS2V5SWQ6ICh7XG5bazogc3RyaW5nXTogdW5rbm93blxufSAmIHN0cmluZylcbn1cbmV4cG9ydCBpbnRlcmZhY2UgS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24ge1xuQXBwcm94aW1hdGVDcmVhdGlvbkRhdGVUaW1lUHJlY2lzaW9uPzogKFwiTUlDUk9TRUNPTkRcIiB8IFwiTUlMTElTRUNPTkRcIilcblN0cmVhbUFybjogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIENvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uIHtcbkVuYWJsZWQ6IGJvb2xlYW5cbn1cbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnRJblRpbWVSZWNvdmVyeVNwZWNpZmljYXRpb24ge1xuUG9pbnRJblRpbWVSZWNvdmVyeUVuYWJsZWQ/OiBib29sZWFuXG59XG5leHBvcnQgaW50ZXJmYWNlIFJlcGxpY2FTdHJlYW1TcGVjaWZpY2F0aW9uIHtcblJlc291cmNlUG9saWN5OiBSZXNvdXJjZVBvbGljeVxufVxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVBvbGljeSB7XG5Qb2xpY3lEb2N1bWVudDoge1xuW2s6IHN0cmluZ106IHVua25vd25cbn1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGljYUdsb2JhbFNlY29uZGFyeUluZGV4U3BlY2lmaWNhdGlvbiB7XG5JbmRleE5hbWU6IHN0cmluZ1xuQ29udHJpYnV0b3JJbnNpZ2h0c1NwZWNpZmljYXRpb24/OiBDb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvblxuUmVhZFByb3Zpc2lvbmVkVGhyb3VnaHB1dFNldHRpbmdzPzogUmVhZFByb3Zpc2lvbmVkVGhyb3VnaHB1dFNldHRpbmdzXG5SZWFkT25EZW1hbmRUaHJvdWdocHV0U2V0dGluZ3M/OiBSZWFkT25EZW1hbmRUaHJvdWdocHV0U2V0dGluZ3Ncbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZFByb3Zpc2lvbmVkVGhyb3VnaHB1dFNldHRpbmdzIHtcblJlYWRDYXBhY2l0eVVuaXRzPzogbnVtYmVyXG5SZWFkQ2FwYWNpdHlBdXRvU2NhbGluZ1NldHRpbmdzPzogQ2FwYWNpdHlBdXRvU2NhbGluZ1NldHRpbmdzXG59XG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXR5QXV0b1NjYWxpbmdTZXR0aW5ncyB7XG5NaW5DYXBhY2l0eTogbnVtYmVyXG5TZWVkQ2FwYWNpdHk/OiBudW1iZXJcblRhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeUNvbmZpZ3VyYXRpb246IFRhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeUNvbmZpZ3VyYXRpb25cbk1heENhcGFjaXR5OiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5Q29uZmlndXJhdGlvbiB7XG5TY2FsZU91dENvb2xkb3duPzogbnVtYmVyXG5UYXJnZXRWYWx1ZTogbnVtYmVyXG5EaXNhYmxlU2NhbGVJbj86IGJvb2xlYW5cblNjYWxlSW5Db29sZG93bj86IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBSZWFkT25EZW1hbmRUaHJvdWdocHV0U2V0dGluZ3Mge1xuTWF4UmVhZFJlcXVlc3RVbml0cz86IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuVmFsdWU6IHN0cmluZ1xuS2V5OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVQcm92aXNpb25lZFRocm91Z2hwdXRTZXR0aW5ncyB7XG5Xcml0ZUNhcGFjaXR5QXV0b1NjYWxpbmdTZXR0aW5ncz86IENhcGFjaXR5QXV0b1NjYWxpbmdTZXR0aW5nc1xufVxuZXhwb3J0IGludGVyZmFjZSBXcml0ZU9uRGVtYW5kVGhyb3VnaHB1dFNldHRpbmdzIHtcbk1heFdyaXRlUmVxdWVzdFVuaXRzPzogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZURlZmluaXRpb24ge1xuQXR0cmlidXRlVHlwZTogc3RyaW5nXG5BdHRyaWJ1dGVOYW1lOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2xvYmFsU2Vjb25kYXJ5SW5kZXgge1xuSW5kZXhOYW1lOiBzdHJpbmdcblByb2plY3Rpb246IFByb2plY3Rpb25cbi8qKlxuICogQG1pbkl0ZW1zIDFcbiAqIEBtYXhJdGVtcyAyXG4gKi9cbktleVNjaGVtYTogS2V5U2NoZW1hW11cbldyaXRlUHJvdmlzaW9uZWRUaHJvdWdocHV0U2V0dGluZ3M/OiBXcml0ZVByb3Zpc2lvbmVkVGhyb3VnaHB1dFNldHRpbmdzXG5Xcml0ZU9uRGVtYW5kVGhyb3VnaHB1dFNldHRpbmdzPzogV3JpdGVPbkRlbWFuZFRocm91Z2hwdXRTZXR0aW5nc1xufVxuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0aW9uIHtcbi8qKlxuICogQG1heEl0ZW1zIDIwXG4gKi9cbk5vbktleUF0dHJpYnV0ZXM/OiBzdHJpbmdbXVxuUHJvamVjdGlvblR5cGU/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgS2V5U2NoZW1hIHtcbktleVR5cGU6IHN0cmluZ1xuQXR0cmlidXRlTmFtZTogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIExvY2FsU2Vjb25kYXJ5SW5kZXgge1xuSW5kZXhOYW1lOiBzdHJpbmdcblByb2plY3Rpb246IFByb2plY3Rpb25cbi8qKlxuICogQG1heEl0ZW1zIDJcbiAqL1xuS2V5U2NoZW1hOiBLZXlTY2hlbWFbXVxufVxuZXhwb3J0IGludGVyZmFjZSBUaW1lVG9MaXZlU3BlY2lmaWNhdGlvbiB7XG5FbmFibGVkOiBib29sZWFuXG5BdHRyaWJ1dGVOYW1lPzogc3RyaW5nXG59XG4iXX0=
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Resource type definition for the AWS::EC2::SecurityGroupVpcAssociation resource
3
+ */
4
+ export interface _AWS_EC2_SECURITYGROUPVPCASSOCIATION {
5
+ /**
6
+ * The group ID of the specified security group.
7
+ */
8
+ GroupId: string;
9
+ /**
10
+ * The ID of the VPC in the security group vpc association.
11
+ */
12
+ VpcId: string;
13
+ /**
14
+ * The owner of the VPC in the security group vpc association.
15
+ */
16
+ VpcOwnerId?: string;
17
+ /**
18
+ * The state of the security group vpc association.
19
+ */
20
+ State?: ("associating" | "associated" | "association-failed" | "disassociating" | "disassociated" | "disassociation-failed");
21
+ /**
22
+ * The reason for the state of the security group vpc association.
23
+ */
24
+ StateReason?: string;
25
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjMi1zZWN1cml0eWdyb3VwdnBjYXNzb2NpYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtZWMyLXNlY3VyaXR5Z3JvdXB2cGNhc3NvY2lhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXNvdXJjZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFZwY0Fzc29jaWF0aW9uIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19FQzJfU0VDVVJJVFlHUk9VUFZQQ0FTU09DSUFUSU9OIHtcbi8qKlxuICogVGhlIGdyb3VwIElEIG9mIHRoZSBzcGVjaWZpZWQgc2VjdXJpdHkgZ3JvdXAuXG4gKi9cbkdyb3VwSWQ6IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIFZQQyBpbiB0aGUgc2VjdXJpdHkgZ3JvdXAgdnBjIGFzc29jaWF0aW9uLlxuICovXG5WcGNJZDogc3RyaW5nXG4vKipcbiAqIFRoZSBvd25lciBvZiB0aGUgVlBDIGluIHRoZSBzZWN1cml0eSBncm91cCB2cGMgYXNzb2NpYXRpb24uXG4gKi9cblZwY093bmVySWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHN0YXRlIG9mIHRoZSBzZWN1cml0eSBncm91cCB2cGMgYXNzb2NpYXRpb24uXG4gKi9cblN0YXRlPzogKFwiYXNzb2NpYXRpbmdcIiB8IFwiYXNzb2NpYXRlZFwiIHwgXCJhc3NvY2lhdGlvbi1mYWlsZWRcIiB8IFwiZGlzYXNzb2NpYXRpbmdcIiB8IFwiZGlzYXNzb2NpYXRlZFwiIHwgXCJkaXNhc3NvY2lhdGlvbi1mYWlsZWRcIilcbi8qKlxuICogVGhlIHJlYXNvbiBmb3IgdGhlIHN0YXRlIG9mIHRoZSBzZWN1cml0eSBncm91cCB2cGMgYXNzb2NpYXRpb24uXG4gKi9cblN0YXRlUmVhc29uPzogc3RyaW5nXG59XG4iXX0=
@@ -210,7 +210,7 @@ export interface Phase2DHGroupNumbersRequestListValue {
210
210
  /**
211
211
  * The Diffie-Hellmann group number.
212
212
  */
213
- Value?: (2 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24);
213
+ Value?: (2 | 5 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24);
214
214
  }
215
215
  /**
216
216
  * The IKE version that is permitted for the VPN tunnel.
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjMi12cG5jb25uZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjMi12cG5jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNwZWNpZmllcyBhIFZQTiBjb25uZWN0aW9uIGJldHdlZW4gYSB2aXJ0dWFsIHByaXZhdGUgZ2F0ZXdheSBhbmQgYSBWUE4gY3VzdG9tZXIgZ2F0ZXdheSBvciBhIHRyYW5zaXQgZ2F0ZXdheSBhbmQgYSBWUE4gY3VzdG9tZXIgZ2F0ZXdheS5cbiAqICBUbyBzcGVjaWZ5IGEgVlBOIGNvbm5lY3Rpb24gYmV0d2VlbiBhIHRyYW5zaXQgZ2F0ZXdheSBhbmQgY3VzdG9tZXIgZ2F0ZXdheSwgdXNlIHRoZSBgYFRyYW5zaXRHYXRld2F5SWRgYCBhbmQgYGBDdXN0b21lckdhdGV3YXlJZGBgIHByb3BlcnRpZXMuXG4gKiAgVG8gc3BlY2lmeSBhIFZQTiBjb25uZWN0aW9uIGJldHdlZW4gYSB2aXJ0dWFsIHByaXZhdGUgZ2F0ZXdheSBhbmQgY3VzdG9tZXIgZ2F0ZXdheSwgdXNlIHRoZSBgYFZwbkdhdGV3YXlJZGBgIGFuZCBgYEN1c3RvbWVyR2F0ZXdheUlkYGAgcHJvcGVydGllcy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cG4vbGF0ZXN0L3Myc3Zwbi9WUENfVlBOLmh0bWwpIGluIHRoZSAqVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19FQzJfVlBOQ09OTkVDVElPTiB7XG4vKipcbiAqIFRoZSBJUHY2IENJRFIgb24gdGhlIEFXUyBzaWRlIG9mIHRoZSBWUE4gY29ubmVjdGlvbi5cbiAqICBEZWZhdWx0OiBgYDo6LzBgYFxuICovXG5SZW1vdGVJcHY2TmV0d29ya0NpZHI/OiBzdHJpbmdcbi8qKlxuICogVGhlIElQdjQgQ0lEUiBvbiB0aGUgQVdTIHNpZGUgb2YgdGhlIFZQTiBjb25uZWN0aW9uLlxuICogIERlZmF1bHQ6IGBgMC4wLjAuMC8wYGBcbiAqL1xuUmVtb3RlSXB2NE5ldHdvcmtDaWRyPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0dW5uZWwgb3B0aW9ucyBmb3IgdGhlIFZQTiBjb25uZWN0aW9uLlxuICovXG5WcG5UdW5uZWxPcHRpb25zU3BlY2lmaWNhdGlvbnM/OiBWcG5UdW5uZWxPcHRpb25zU3BlY2lmaWNhdGlvbltdXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheSBhdCB5b3VyIGVuZCBvZiB0aGUgVlBOIGNvbm5lY3Rpb24uXG4gKi9cbkN1c3RvbWVyR2F0ZXdheUlkOiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgSVB2NCBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoZSBvdXRzaWRlIGludGVyZmFjZSBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheSBkZXZpY2UuXG4gKiAgVmFsaWQgdmFsdWVzOiBgYFByaXZhdGVJcHY0YGAgfCBgYFB1YmxpY0lwdjRgYCBcbiAqICBEZWZhdWx0OiBgYFB1YmxpY0lwdjRgYFxuICovXG5PdXRzaWRlSXBBZGRyZXNzVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgVlBOIGNvbm5lY3Rpb24gdXNlcyBzdGF0aWMgcm91dGVzIG9ubHkuIFN0YXRpYyByb3V0ZXMgbXVzdCBiZSB1c2VkIGZvciBkZXZpY2VzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBCR1AuXG4gKiAgSWYgeW91IGFyZSBjcmVhdGluZyBhIFZQTiBjb25uZWN0aW9uIGZvciBhIGRldmljZSB0aGF0IGRvZXMgbm90IHN1cHBvcnQgQm9yZGVyIEdhdGV3YXkgUHJvdG9jb2wgKEJHUCksIHlvdSBtdXN0IHNwZWNpZnkgYGB0cnVlYGAuXG4gKi9cblN0YXRpY1JvdXRlc09ubHk/OiBib29sZWFuXG4vKipcbiAqIEluZGljYXRlIHdoZXRoZXIgdG8gZW5hYmxlIGFjY2VsZXJhdGlvbiBmb3IgdGhlIFZQTiBjb25uZWN0aW9uLlxuICogIERlZmF1bHQ6IGBgZmFsc2VgYFxuICovXG5FbmFibGVBY2NlbGVyYXRpb24/OiBib29sZWFuXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgdHJhbnNpdCBnYXRld2F5IGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBOIGNvbm5lY3Rpb24uXG4gKiAgWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYGBUcmFuc2l0R2F0ZXdheUlkYGAgb3IgYGBWcG5HYXRld2F5SWRgYCwgYnV0IG5vdCBib3RoLlxuICovXG5UcmFuc2l0R2F0ZXdheUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0eXBlIG9mIFZQTiBjb25uZWN0aW9uLlxuICovXG5UeXBlOiBzdHJpbmdcbi8qKlxuICogVGhlIElQdjQgQ0lEUiBvbiB0aGUgY3VzdG9tZXIgZ2F0ZXdheSAob24tcHJlbWlzZXMpIHNpZGUgb2YgdGhlIFZQTiBjb25uZWN0aW9uLlxuICogIERlZmF1bHQ6IGBgMC4wLjAuMC8wYGBcbiAqL1xuTG9jYWxJcHY0TmV0d29ya0NpZHI/OiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSB2aXJ0dWFsIHByaXZhdGUgZ2F0ZXdheSBhdCB0aGUgQVdTIHNpZGUgb2YgdGhlIFZQTiBjb25uZWN0aW9uLlxuICogIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGBgVHJhbnNpdEdhdGV3YXlJZGBgIG9yIGBgVnBuR2F0ZXdheUlkYGAsIGJ1dCBub3QgYm90aC5cbiAqL1xuVnBuR2F0ZXdheUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0cmFuc2l0IGdhdGV3YXkgYXR0YWNobWVudCBJRCB0byB1c2UgZm9yIHRoZSBWUE4gdHVubmVsLlxuICogIFJlcXVpcmVkIGlmIGBgT3V0c2lkZUlwQWRkcmVzc1R5cGVgYCBpcyBzZXQgdG8gYGBQcml2YXRlSXB2NGBgLlxuICovXG5UcmFuc3BvcnRUcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnRJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSVB2NiBDSURSIG9uIHRoZSBjdXN0b21lciBnYXRld2F5IChvbi1wcmVtaXNlcykgc2lkZSBvZiB0aGUgVlBOIGNvbm5lY3Rpb24uXG4gKiAgRGVmYXVsdDogYGA6Oi8wYGBcbiAqL1xuTG9jYWxJcHY2TmV0d29ya0NpZHI/OiBzdHJpbmdcblZwbkNvbm5lY3Rpb25JZD86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBWUE4gdHVubmVscyBwcm9jZXNzIElQdjQgb3IgSVB2NiB0cmFmZmljLlxuICogIERlZmF1bHQ6IGBgaXB2NGBgXG4gKi9cblR1bm5lbEluc2lkZUlwVmVyc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBBbnkgdGFncyBhc3NpZ25lZCB0byB0aGUgVlBOIGNvbm5lY3Rpb24uXG4gKi9cblRhZ3M/OiBUYWdbXVxufVxuLyoqXG4gKiBUaGUgdHVubmVsIG9wdGlvbnMgZm9yIGEgc2luZ2xlIFZQTiB0dW5uZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBuVHVubmVsT3B0aW9uc1NwZWNpZmljYXRpb24ge1xuLyoqXG4gKiBPbmUgb3IgbW9yZSBlbmNyeXB0aW9uIGFsZ29yaXRobXMgdGhhdCBhcmUgcGVybWl0dGVkIGZvciB0aGUgVlBOIHR1bm5lbCBmb3IgcGhhc2UgMiBJS0UgbmVnb3RpYXRpb25zLlxuICogIFZhbGlkIHZhbHVlczogYGBBRVMxMjhgYCB8IGBgQUVTMjU2YGAgfCBgYEFFUzEyOC1HQ00tMTZgYCB8IGBgQUVTMjU2LUdDTS0xNmBgXG4gKi9cblBoYXNlMkVuY3J5cHRpb25BbGdvcml0aG1zPzogUGhhc2UyRW5jcnlwdGlvbkFsZ29yaXRobXNSZXF1ZXN0TGlzdFZhbHVlW11cbi8qKlxuICogT25lIG9yIG1vcmUgRGlmZmllLUhlbGxtYW4gZ3JvdXAgbnVtYmVycyB0aGF0IGFyZSBwZXJtaXR0ZWQgZm9yIHRoZSBWUE4gdHVubmVsIGZvciBwaGFzZSAyIElLRSBuZWdvdGlhdGlvbnMuXG4gKiAgVmFsaWQgdmFsdWVzOiBgYDJgYCB8IGBgNWBgIHwgYGAxNGBgIHwgYGAxNWBgIHwgYGAxNmBgIHwgYGAxN2BgIHwgYGAxOGBgIHwgYGAxOWBgIHwgYGAyMGBgIHwgYGAyMWBgIHwgYGAyMmBgIHwgYGAyM2BgIHwgYGAyNGBgXG4gKi9cblBoYXNlMkRIR3JvdXBOdW1iZXJzPzogUGhhc2UyREhHcm91cE51bWJlcnNSZXF1ZXN0TGlzdFZhbHVlW11cbi8qKlxuICogVGhlIHJhbmdlIG9mIGluc2lkZSBJUHY2IGFkZHJlc3NlcyBmb3IgdGhlIHR1bm5lbC4gQW55IHNwZWNpZmllZCBDSURSIGJsb2NrcyBtdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgYWxsIFZQTiBjb25uZWN0aW9ucyB0aGF0IHVzZSB0aGUgc2FtZSB0cmFuc2l0IGdhdGV3YXkuXG4gKiAgQ29uc3RyYWludHM6IEEgc2l6ZSAvMTI2IENJRFIgYmxvY2sgZnJvbSB0aGUgbG9jYWwgYGBmZDAwOjovOGBgIHJhbmdlLlxuICovXG5UdW5uZWxJbnNpZGVJcHY2Q2lkcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYWN0aW9uIHRvIHRha2Ugd2hlbiB0aGUgZXN0YWJsaXNoaW5nIHRoZSB0dW5uZWwgZm9yIHRoZSBWUE4gY29ubmVjdGlvbi4gQnkgZGVmYXVsdCwgeW91ciBjdXN0b21lciBnYXRld2F5IGRldmljZSBtdXN0IGluaXRpYXRlIHRoZSBJS0UgbmVnb3RpYXRpb24gYW5kIGJyaW5nIHVwIHRoZSB0dW5uZWwuIFNwZWNpZnkgYGBzdGFydGBgIGZvciBBV1MgdG8gaW5pdGlhdGUgdGhlIElLRSBuZWdvdGlhdGlvbi5cbiAqICBWYWxpZCBWYWx1ZXM6IGBgYWRkYGAgfCBgYHN0YXJ0YGAgXG4gKiAgRGVmYXVsdDogYGBhZGRgYFxuICovXG5TdGFydHVwQWN0aW9uPzogKFwiYWRkXCIgfCBcInN0YXJ0XCIpXG4vKipcbiAqIFRoZSByYW5nZSBvZiBpbnNpZGUgSVAgYWRkcmVzc2VzIGZvciB0aGUgdHVubmVsLiBBbnkgc3BlY2lmaWVkIENJRFIgYmxvY2tzIG11c3QgYmUgdW5pcXVlIGFjcm9zcyBhbGwgVlBOIGNvbm5lY3Rpb25zIHRoYXQgdXNlIHRoZSBzYW1lIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5LiBcbiAqICBDb25zdHJhaW50czogQSBzaXplIC8zMCBDSURSIGJsb2NrIGZyb20gdGhlIGBgMTY5LjI1NC4wLjAvMTZgYCByYW5nZS4gVGhlIGZvbGxvd2luZyBDSURSIGJsb2NrcyBhcmUgcmVzZXJ2ZWQgYW5kIGNhbm5vdCBiZSB1c2VkOlxuICogICArICAgYGAxNjkuMjU0LjAuMC8zMGBgIFxuICogICArICAgYGAxNjkuMjU0LjEuMC8zMGBgIFxuICogICArICAgYGAxNjkuMjU0LjIuMC8zMGBgIFxuICogICArICAgYGAxNjkuMjU0LjMuMC8zMGBgIFxuICogICArICAgYGAxNjkuMjU0LjQuMC8zMGBgIFxuICogICArICAgYGAxNjkuMjU0LjUuMC8zMGBgIFxuICogICArICAgYGAxNjkuMjU0LjE2OS4yNTIvMzBgYFxuICovXG5UdW5uZWxJbnNpZGVDaWRyPzogc3RyaW5nXG4vKipcbiAqIFRoZSBJS0UgdmVyc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIGZvciB0aGUgVlBOIHR1bm5lbC5cbiAqICBWYWxpZCB2YWx1ZXM6IGBgaWtldjFgYCB8IGBgaWtldjJgYFxuICovXG5JS0VWZXJzaW9ucz86IElLRVZlcnNpb25zUmVxdWVzdExpc3RWYWx1ZVtdXG5Mb2dPcHRpb25zPzogVnBuVHVubmVsTG9nT3B0aW9uc1NwZWNpZmljYXRpb25cbi8qKlxuICogT25lIG9yIG1vcmUgRGlmZmllLUhlbGxtYW4gZ3JvdXAgbnVtYmVycyB0aGF0IGFyZSBwZXJtaXR0ZWQgZm9yIHRoZSBWUE4gdHVubmVsIGZvciBwaGFzZSAxIElLRSBuZWdvdGlhdGlvbnMuXG4gKiAgVmFsaWQgdmFsdWVzOiBgYDJgYCB8IGBgMTRgYCB8IGBgMTVgYCB8IGBgMTZgYCB8IGBgMTdgYCB8IGBgMThgYCB8IGBgMTlgYCB8IGBgMjBgYCB8IGBgMjFgYCB8IGBgMjJgYCB8IGBgMjNgYCB8IGBgMjRgYFxuICovXG5QaGFzZTFESEdyb3VwTnVtYmVycz86IFBoYXNlMURIR3JvdXBOdW1iZXJzUmVxdWVzdExpc3RWYWx1ZVtdXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgcGFja2V0cyBpbiBhbiBJS0UgcmVwbGF5IHdpbmRvdy5cbiAqICBDb25zdHJhaW50czogQSB2YWx1ZSBiZXR3ZWVuIDY0IGFuZCAyMDQ4LlxuICogIERlZmF1bHQ6IGBgMTAyNGBgXG4gKi9cblJlcGxheVdpbmRvd1NpemU/OiBudW1iZXJcbi8qKlxuICogVHVybiBvbiBvciBvZmYgdHVubmVsIGVuZHBvaW50IGxpZmVjeWNsZSBjb250cm9sIGZlYXR1cmUuXG4gKi9cbkVuYWJsZVR1bm5lbExpZmVjeWNsZUNvbnRyb2w/OiBib29sZWFuXG4vKipcbiAqIFRoZSBtYXJnaW4gdGltZSwgaW4gc2Vjb25kcywgYmVmb3JlIHRoZSBwaGFzZSAyIGxpZmV0aW1lIGV4cGlyZXMsIGR1cmluZyB3aGljaCB0aGUgQVdTIHNpZGUgb2YgdGhlIFZQTiBjb25uZWN0aW9uIHBlcmZvcm1zIGFuIElLRSByZWtleS4gVGhlIGV4YWN0IHRpbWUgb2YgdGhlIHJla2V5IGlzIHJhbmRvbWx5IHNlbGVjdGVkIGJhc2VkIG9uIHRoZSB2YWx1ZSBmb3IgYGBSZWtleUZ1enpQZXJjZW50YWdlYGAuXG4gKiAgQ29uc3RyYWludHM6IEEgdmFsdWUgYmV0d2VlbiA2MCBhbmQgaGFsZiBvZiBgYFBoYXNlMkxpZmV0aW1lU2Vjb25kc2BgLlxuICogIERlZmF1bHQ6IGBgMjcwYGBcbiAqL1xuUmVrZXlNYXJnaW5UaW1lU2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBUaGUgYWN0aW9uIHRvIHRha2UgYWZ0ZXIgRFBEIHRpbWVvdXQgb2NjdXJzLiBTcGVjaWZ5IGBgcmVzdGFydGBgIHRvIHJlc3RhcnQgdGhlIElLRSBpbml0aWF0aW9uLiBTcGVjaWZ5IGBgY2xlYXJgYCB0byBlbmQgdGhlIElLRSBzZXNzaW9uLlxuICogIFZhbGlkIFZhbHVlczogYGBjbGVhcmBgIHwgYGBub25lYGAgfCBgYHJlc3RhcnRgYCBcbiAqICBEZWZhdWx0OiBgYGNsZWFyYGBcbiAqL1xuRFBEVGltZW91dEFjdGlvbj86IChcImNsZWFyXCIgfCBcIm5vbmVcIiB8IFwicmVzdGFydFwiKVxuLyoqXG4gKiBUaGUgbGlmZXRpbWUgZm9yIHBoYXNlIDIgb2YgdGhlIElLRSBuZWdvdGlhdGlvbiwgaW4gc2Vjb25kcy5cbiAqICBDb25zdHJhaW50czogQSB2YWx1ZSBiZXR3ZWVuIDkwMCBhbmQgMyw2MDAuIFRoZSB2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgdmFsdWUgZm9yIGBgUGhhc2UxTGlmZXRpbWVTZWNvbmRzYGAuXG4gKiAgRGVmYXVsdDogYGAzNjAwYGBcbiAqL1xuUGhhc2UyTGlmZXRpbWVTZWNvbmRzPzogbnVtYmVyXG4vKipcbiAqIE9uZSBvciBtb3JlIGludGVncml0eSBhbGdvcml0aG1zIHRoYXQgYXJlIHBlcm1pdHRlZCBmb3IgdGhlIFZQTiB0dW5uZWwgZm9yIHBoYXNlIDIgSUtFIG5lZ290aWF0aW9ucy5cbiAqICBWYWxpZCB2YWx1ZXM6IGBgU0hBMWBgIHwgYGBTSEEyLTI1NmBgIHwgYGBTSEEyLTM4NGBgIHwgYGBTSEEyLTUxMmBgXG4gKi9cblBoYXNlMkludGVncml0eUFsZ29yaXRobXM/OiBQaGFzZTJJbnRlZ3JpdHlBbGdvcml0aG1zUmVxdWVzdExpc3RWYWx1ZVtdXG4vKipcbiAqIE9uZSBvciBtb3JlIGludGVncml0eSBhbGdvcml0aG1zIHRoYXQgYXJlIHBlcm1pdHRlZCBmb3IgdGhlIFZQTiB0dW5uZWwgZm9yIHBoYXNlIDEgSUtFIG5lZ290aWF0aW9ucy5cbiAqICBWYWxpZCB2YWx1ZXM6IGBgU0hBMWBgIHwgYGBTSEEyLTI1NmBgIHwgYGBTSEEyLTM4NGBgIHwgYGBTSEEyLTUxMmBgXG4gKi9cblBoYXNlMUludGVncml0eUFsZ29yaXRobXM/OiBQaGFzZTFJbnRlZ3JpdHlBbGdvcml0aG1zUmVxdWVzdExpc3RWYWx1ZVtdXG4vKipcbiAqIFRoZSBwcmUtc2hhcmVkIGtleSAoUFNLKSB0byBlc3RhYmxpc2ggaW5pdGlhbCBhdXRoZW50aWNhdGlvbiBiZXR3ZWVuIHRoZSB2aXJ0dWFsIHByaXZhdGUgZ2F0ZXdheSBhbmQgY3VzdG9tZXIgZ2F0ZXdheS5cbiAqICBDb25zdHJhaW50czogQWxsb3dlZCBjaGFyYWN0ZXJzIGFyZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgcGVyaW9kcyAoLiksIGFuZCB1bmRlcnNjb3JlcyAoXykuIE11c3QgYmUgYmV0d2VlbiA4IGFuZCA2NCBjaGFyYWN0ZXJzIGluIGxlbmd0aCBhbmQgY2Fubm90IHN0YXJ0IHdpdGggemVybyAoMCkuXG4gKi9cblByZVNoYXJlZEtleT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlmZXRpbWUgZm9yIHBoYXNlIDEgb2YgdGhlIElLRSBuZWdvdGlhdGlvbiwgaW4gc2Vjb25kcy5cbiAqICBDb25zdHJhaW50czogQSB2YWx1ZSBiZXR3ZWVuIDkwMCBhbmQgMjgsODAwLlxuICogIERlZmF1bHQ6IGBgMjg4MDBgYFxuICovXG5QaGFzZTFMaWZldGltZVNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogVGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHJla2V5IHdpbmRvdyAoZGV0ZXJtaW5lZCBieSBgYFJla2V5TWFyZ2luVGltZVNlY29uZHNgYCkgZHVyaW5nIHdoaWNoIHRoZSByZWtleSB0aW1lIGlzIHJhbmRvbWx5IHNlbGVjdGVkLlxuICogIENvbnN0cmFpbnRzOiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwLlxuICogIERlZmF1bHQ6IGBgMTAwYGBcbiAqL1xuUmVrZXlGdXp6UGVyY2VudGFnZT86IG51bWJlclxuLyoqXG4gKiBPbmUgb3IgbW9yZSBlbmNyeXB0aW9uIGFsZ29yaXRobXMgdGhhdCBhcmUgcGVybWl0dGVkIGZvciB0aGUgVlBOIHR1bm5lbCBmb3IgcGhhc2UgMSBJS0UgbmVnb3RpYXRpb25zLlxuICogIFZhbGlkIHZhbHVlczogYGBBRVMxMjhgYCB8IGBgQUVTMjU2YGAgfCBgYEFFUzEyOC1HQ00tMTZgYCB8IGBgQUVTMjU2LUdDTS0xNmBgXG4gKi9cblBoYXNlMUVuY3J5cHRpb25BbGdvcml0aG1zPzogUGhhc2UxRW5jcnlwdGlvbkFsZ29yaXRobXNSZXF1ZXN0TGlzdFZhbHVlW11cbi8qKlxuICogVGhlIG51bWJlciBvZiBzZWNvbmRzIGFmdGVyIHdoaWNoIGEgRFBEIHRpbWVvdXQgb2NjdXJzLlxuICogIENvbnN0cmFpbnRzOiBBIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAzMC5cbiAqICBEZWZhdWx0OiBgYDMwYGBcbiAqL1xuRFBEVGltZW91dFNlY29uZHM/OiBudW1iZXJcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobSBmb3IgdGhlIFZQTiB0dW5uZWwgZm9yIHBoYXNlIDIgSUtFIG5lZ290aWF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaGFzZTJFbmNyeXB0aW9uQWxnb3JpdGhtc1JlcXVlc3RMaXN0VmFsdWUge1xuLyoqXG4gKiBUaGUgZW5jcnlwdGlvbiBhbGdvcml0aG0uXG4gKi9cblZhbHVlPzogKFwiQUVTMTI4XCIgfCBcIkFFUzI1NlwiIHwgXCJBRVMxMjgtR0NNLTE2XCIgfCBcIkFFUzI1Ni1HQ00tMTZcIilcbn1cbi8qKlxuICogU3BlY2lmaWVzIGEgRGlmZmllLUhlbGxtYW4gZ3JvdXAgbnVtYmVyIGZvciB0aGUgVlBOIHR1bm5lbCBmb3IgcGhhc2UgMiBJS0UgbmVnb3RpYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBoYXNlMkRIR3JvdXBOdW1iZXJzUmVxdWVzdExpc3RWYWx1ZSB7XG4vKipcbiAqIFRoZSBEaWZmaWUtSGVsbG1hbm4gZ3JvdXAgbnVtYmVyLlxuICovXG5WYWx1ZT86ICgyIHwgMTQgfCAxNSB8IDE2IHwgMTcgfCAxOCB8IDE5IHwgMjAgfCAyMSB8IDIyIHwgMjMgfCAyNClcbn1cbi8qKlxuICogVGhlIElLRSB2ZXJzaW9uIHRoYXQgaXMgcGVybWl0dGVkIGZvciB0aGUgVlBOIHR1bm5lbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJS0VWZXJzaW9uc1JlcXVlc3RMaXN0VmFsdWUge1xuLyoqXG4gKiBUaGUgSUtFIHZlcnNpb24uXG4gKi9cblZhbHVlPzogKFwiaWtldjFcIiB8IFwiaWtldjJcIilcbn1cbi8qKlxuICogT3B0aW9ucyBmb3IgbG9nZ2luZyBWUE4gdHVubmVsIGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwblR1bm5lbExvZ09wdGlvbnNTcGVjaWZpY2F0aW9uIHtcbkNsb3Vkd2F0Y2hMb2dPcHRpb25zPzogQ2xvdWR3YXRjaExvZ09wdGlvbnNTcGVjaWZpY2F0aW9uXG59XG4vKipcbiAqIE9wdGlvbnMgZm9yIHNlbmRpbmcgVlBOIHR1bm5lbCBsb2dzIHRvIENsb3VkV2F0Y2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWR3YXRjaExvZ09wdGlvbnNTcGVjaWZpY2F0aW9uIHtcbi8qKlxuICogRW5hYmxlIG9yIGRpc2FibGUgVlBOIHR1bm5lbCBsb2dnaW5nIGZlYXR1cmUuIERlZmF1bHQgdmFsdWUgaXMgYGBGYWxzZWBgLlxuICogIFZhbGlkIHZhbHVlczogYGBUcnVlYGAgfCBgYEZhbHNlYGBcbiAqL1xuTG9nRW5hYmxlZD86IGJvb2xlYW5cbi8qKlxuICogU2V0IGxvZyBmb3JtYXQuIERlZmF1bHQgZm9ybWF0IGlzIGBganNvbmBgLlxuICogIFZhbGlkIHZhbHVlczogYGBqc29uYGAgfCBgYHRleHRgYFxuICovXG5Mb2dPdXRwdXRGb3JtYXQ/OiAoXCJqc29uXCIgfCBcInRleHRcIilcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBDbG91ZFdhdGNoIGxvZyBncm91cCB0byBzZW5kIGxvZ3MgdG8uXG4gKi9cbkxvZ0dyb3VwQXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFNwZWNpZmllcyBhIERpZmZpZS1IZWxsbWFuIGdyb3VwIG51bWJlciBmb3IgdGhlIFZQTiB0dW5uZWwgZm9yIHBoYXNlIDEgSUtFIG5lZ290aWF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaGFzZTFESEdyb3VwTnVtYmVyc1JlcXVlc3RMaXN0VmFsdWUge1xuLyoqXG4gKiBUaGUgRGlmZmllLUhlbGxtYW5uIGdyb3VwIG51bWJlci5cbiAqL1xuVmFsdWU/OiAoMiB8IDE0IHwgMTUgfCAxNiB8IDE3IHwgMTggfCAxOSB8IDIwIHwgMjEgfCAyMiB8IDIzIHwgMjQpXG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgaW50ZWdyaXR5IGFsZ29yaXRobSBmb3IgdGhlIFZQTiB0dW5uZWwgZm9yIHBoYXNlIDIgSUtFIG5lZ290aWF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaGFzZTJJbnRlZ3JpdHlBbGdvcml0aG1zUmVxdWVzdExpc3RWYWx1ZSB7XG4vKipcbiAqIFRoZSBpbnRlZ3JpdHkgYWxnb3JpdGhtLlxuICovXG5WYWx1ZT86IChcIlNIQTFcIiB8IFwiU0hBMi0yNTZcIiB8IFwiU0hBMi0zODRcIiB8IFwiU0hBMi01MTJcIilcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBpbnRlZ3JpdHkgYWxnb3JpdGhtIGZvciB0aGUgVlBOIHR1bm5lbCBmb3IgcGhhc2UgMSBJS0UgbmVnb3RpYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBoYXNlMUludGVncml0eUFsZ29yaXRobXNSZXF1ZXN0TGlzdFZhbHVlIHtcbi8qKlxuICogVGhlIHZhbHVlIGZvciB0aGUgaW50ZWdyaXR5IGFsZ29yaXRobS5cbiAqL1xuVmFsdWU/OiAoXCJTSEExXCIgfCBcIlNIQTItMjU2XCIgfCBcIlNIQTItMzg0XCIgfCBcIlNIQTItNTEyXCIpXG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgZW5jcnlwdGlvbiBhbGdvcml0aG0gZm9yIHRoZSBWUE4gdHVubmVsIGZvciBwaGFzZSAxIElLRSBuZWdvdGlhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGhhc2UxRW5jcnlwdGlvbkFsZ29yaXRobXNSZXF1ZXN0TGlzdFZhbHVlIHtcbi8qKlxuICogVGhlIHZhbHVlIGZvciB0aGUgZW5jcnlwdGlvbiBhbGdvcml0aG0uXG4gKi9cblZhbHVlPzogKFwiQUVTMTI4XCIgfCBcIkFFUzI1NlwiIHwgXCJBRVMxMjgtR0NNLTE2XCIgfCBcIkFFUzI1Ni1HQ00tMTZcIilcbn1cbi8qKlxuICogU3BlY2lmaWVzIGEgdGFnLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXNvdXJjZSB0YWdzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZXNvdXJjZS10YWdzLmh0bWwpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSB0YWcgdmFsdWUuXG4gKi9cblZhbHVlOiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZyBrZXkuXG4gKi9cbktleTogc3RyaW5nXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjMi12cG5jb25uZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjMi12cG5jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNwZWNpZmllcyBhIFZQTiBjb25uZWN0aW9uIGJldHdlZW4gYSB2aXJ0dWFsIHByaXZhdGUgZ2F0ZXdheSBhbmQgYSBWUE4gY3VzdG9tZXIgZ2F0ZXdheSBvciBhIHRyYW5zaXQgZ2F0ZXdheSBhbmQgYSBWUE4gY3VzdG9tZXIgZ2F0ZXdheS5cbiAqICBUbyBzcGVjaWZ5IGEgVlBOIGNvbm5lY3Rpb24gYmV0d2VlbiBhIHRyYW5zaXQgZ2F0ZXdheSBhbmQgY3VzdG9tZXIgZ2F0ZXdheSwgdXNlIHRoZSBgYFRyYW5zaXRHYXRld2F5SWRgYCBhbmQgYGBDdXN0b21lckdhdGV3YXlJZGBgIHByb3BlcnRpZXMuXG4gKiAgVG8gc3BlY2lmeSBhIFZQTiBjb25uZWN0aW9uIGJldHdlZW4gYSB2aXJ0dWFsIHByaXZhdGUgZ2F0ZXdheSBhbmQgY3VzdG9tZXIgZ2F0ZXdheSwgdXNlIHRoZSBgYFZwbkdhdGV3YXlJZGBgIGFuZCBgYEN1c3RvbWVyR2F0ZXdheUlkYGAgcHJvcGVydGllcy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cG4vbGF0ZXN0L3Myc3Zwbi9WUENfVlBOLmh0bWwpIGluIHRoZSAqVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19FQzJfVlBOQ09OTkVDVElPTiB7XG4vKipcbiAqIFRoZSBJUHY2IENJRFIgb24gdGhlIEFXUyBzaWRlIG9mIHRoZSBWUE4gY29ubmVjdGlvbi5cbiAqICBEZWZhdWx0OiBgYDo6LzBgYFxuICovXG5SZW1vdGVJcHY2TmV0d29ya0NpZHI/OiBzdHJpbmdcbi8qKlxuICogVGhlIElQdjQgQ0lEUiBvbiB0aGUgQVdTIHNpZGUgb2YgdGhlIFZQTiBjb25uZWN0aW9uLlxuICogIERlZmF1bHQ6IGBgMC4wLjAuMC8wYGBcbiAqL1xuUmVtb3RlSXB2NE5ldHdvcmtDaWRyPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0dW5uZWwgb3B0aW9ucyBmb3IgdGhlIFZQTiBjb25uZWN0aW9uLlxuICovXG5WcG5UdW5uZWxPcHRpb25zU3BlY2lmaWNhdGlvbnM/OiBWcG5UdW5uZWxPcHRpb25zU3BlY2lmaWNhdGlvbltdXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheSBhdCB5b3VyIGVuZCBvZiB0aGUgVlBOIGNvbm5lY3Rpb24uXG4gKi9cbkN1c3RvbWVyR2F0ZXdheUlkOiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgSVB2NCBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoZSBvdXRzaWRlIGludGVyZmFjZSBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheSBkZXZpY2UuXG4gKiAgVmFsaWQgdmFsdWVzOiBgYFByaXZhdGVJcHY0YGAgfCBgYFB1YmxpY0lwdjRgYCBcbiAqICBEZWZhdWx0OiBgYFB1YmxpY0lwdjRgYFxuICovXG5PdXRzaWRlSXBBZGRyZXNzVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgVlBOIGNvbm5lY3Rpb24gdXNlcyBzdGF0aWMgcm91dGVzIG9ubHkuIFN0YXRpYyByb3V0ZXMgbXVzdCBiZSB1c2VkIGZvciBkZXZpY2VzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBCR1AuXG4gKiAgSWYgeW91IGFyZSBjcmVhdGluZyBhIFZQTiBjb25uZWN0aW9uIGZvciBhIGRldmljZSB0aGF0IGRvZXMgbm90IHN1cHBvcnQgQm9yZGVyIEdhdGV3YXkgUHJvdG9jb2wgKEJHUCksIHlvdSBtdXN0IHNwZWNpZnkgYGB0cnVlYGAuXG4gKi9cblN0YXRpY1JvdXRlc09ubHk/OiBib29sZWFuXG4vKipcbiAqIEluZGljYXRlIHdoZXRoZXIgdG8gZW5hYmxlIGFjY2VsZXJhdGlvbiBmb3IgdGhlIFZQTiBjb25uZWN0aW9uLlxuICogIERlZmF1bHQ6IGBgZmFsc2VgYFxuICovXG5FbmFibGVBY2NlbGVyYXRpb24/OiBib29sZWFuXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgdHJhbnNpdCBnYXRld2F5IGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBOIGNvbm5lY3Rpb24uXG4gKiAgWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYGBUcmFuc2l0R2F0ZXdheUlkYGAgb3IgYGBWcG5HYXRld2F5SWRgYCwgYnV0IG5vdCBib3RoLlxuICovXG5UcmFuc2l0R2F0ZXdheUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0eXBlIG9mIFZQTiBjb25uZWN0aW9uLlxuICovXG5UeXBlOiBzdHJpbmdcbi8qKlxuICogVGhlIElQdjQgQ0lEUiBvbiB0aGUgY3VzdG9tZXIgZ2F0ZXdheSAob24tcHJlbWlzZXMpIHNpZGUgb2YgdGhlIFZQTiBjb25uZWN0aW9uLlxuICogIERlZmF1bHQ6IGBgMC4wLjAuMC8wYGBcbiAqL1xuTG9jYWxJcHY0TmV0d29ya0NpZHI/OiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSB2aXJ0dWFsIHByaXZhdGUgZ2F0ZXdheSBhdCB0aGUgQVdTIHNpZGUgb2YgdGhlIFZQTiBjb25uZWN0aW9uLlxuICogIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGBgVHJhbnNpdEdhdGV3YXlJZGBgIG9yIGBgVnBuR2F0ZXdheUlkYGAsIGJ1dCBub3QgYm90aC5cbiAqL1xuVnBuR2F0ZXdheUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0cmFuc2l0IGdhdGV3YXkgYXR0YWNobWVudCBJRCB0byB1c2UgZm9yIHRoZSBWUE4gdHVubmVsLlxuICogIFJlcXVpcmVkIGlmIGBgT3V0c2lkZUlwQWRkcmVzc1R5cGVgYCBpcyBzZXQgdG8gYGBQcml2YXRlSXB2NGBgLlxuICovXG5UcmFuc3BvcnRUcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnRJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSVB2NiBDSURSIG9uIHRoZSBjdXN0b21lciBnYXRld2F5IChvbi1wcmVtaXNlcykgc2lkZSBvZiB0aGUgVlBOIGNvbm5lY3Rpb24uXG4gKiAgRGVmYXVsdDogYGA6Oi8wYGBcbiAqL1xuTG9jYWxJcHY2TmV0d29ya0NpZHI/OiBzdHJpbmdcblZwbkNvbm5lY3Rpb25JZD86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBWUE4gdHVubmVscyBwcm9jZXNzIElQdjQgb3IgSVB2NiB0cmFmZmljLlxuICogIERlZmF1bHQ6IGBgaXB2NGBgXG4gKi9cblR1bm5lbEluc2lkZUlwVmVyc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBBbnkgdGFncyBhc3NpZ25lZCB0byB0aGUgVlBOIGNvbm5lY3Rpb24uXG4gKi9cblRhZ3M/OiBUYWdbXVxufVxuLyoqXG4gKiBUaGUgdHVubmVsIG9wdGlvbnMgZm9yIGEgc2luZ2xlIFZQTiB0dW5uZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBuVHVubmVsT3B0aW9uc1NwZWNpZmljYXRpb24ge1xuLyoqXG4gKiBPbmUgb3IgbW9yZSBlbmNyeXB0aW9uIGFsZ29yaXRobXMgdGhhdCBhcmUgcGVybWl0dGVkIGZvciB0aGUgVlBOIHR1bm5lbCBmb3IgcGhhc2UgMiBJS0UgbmVnb3RpYXRpb25zLlxuICogIFZhbGlkIHZhbHVlczogYGBBRVMxMjhgYCB8IGBgQUVTMjU2YGAgfCBgYEFFUzEyOC1HQ00tMTZgYCB8IGBgQUVTMjU2LUdDTS0xNmBgXG4gKi9cblBoYXNlMkVuY3J5cHRpb25BbGdvcml0aG1zPzogUGhhc2UyRW5jcnlwdGlvbkFsZ29yaXRobXNSZXF1ZXN0TGlzdFZhbHVlW11cbi8qKlxuICogT25lIG9yIG1vcmUgRGlmZmllLUhlbGxtYW4gZ3JvdXAgbnVtYmVycyB0aGF0IGFyZSBwZXJtaXR0ZWQgZm9yIHRoZSBWUE4gdHVubmVsIGZvciBwaGFzZSAyIElLRSBuZWdvdGlhdGlvbnMuXG4gKiAgVmFsaWQgdmFsdWVzOiBgYDJgYCB8IGBgNWBgIHwgYGAxNGBgIHwgYGAxNWBgIHwgYGAxNmBgIHwgYGAxN2BgIHwgYGAxOGBgIHwgYGAxOWBgIHwgYGAyMGBgIHwgYGAyMWBgIHwgYGAyMmBgIHwgYGAyM2BgIHwgYGAyNGBgXG4gKi9cblBoYXNlMkRIR3JvdXBOdW1iZXJzPzogUGhhc2UyREhHcm91cE51bWJlcnNSZXF1ZXN0TGlzdFZhbHVlW11cbi8qKlxuICogVGhlIHJhbmdlIG9mIGluc2lkZSBJUHY2IGFkZHJlc3NlcyBmb3IgdGhlIHR1bm5lbC4gQW55IHNwZWNpZmllZCBDSURSIGJsb2NrcyBtdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgYWxsIFZQTiBjb25uZWN0aW9ucyB0aGF0IHVzZSB0aGUgc2FtZSB0cmFuc2l0IGdhdGV3YXkuXG4gKiAgQ29uc3RyYWludHM6IEEgc2l6ZSAvMTI2IENJRFIgYmxvY2sgZnJvbSB0aGUgbG9jYWwgYGBmZDAwOjovOGBgIHJhbmdlLlxuICovXG5UdW5uZWxJbnNpZGVJcHY2Q2lkcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYWN0aW9uIHRvIHRha2Ugd2hlbiB0aGUgZXN0YWJsaXNoaW5nIHRoZSB0dW5uZWwgZm9yIHRoZSBWUE4gY29ubmVjdGlvbi4gQnkgZGVmYXVsdCwgeW91ciBjdXN0b21lciBnYXRld2F5IGRldmljZSBtdXN0IGluaXRpYXRlIHRoZSBJS0UgbmVnb3RpYXRpb24gYW5kIGJyaW5nIHVwIHRoZSB0dW5uZWwuIFNwZWNpZnkgYGBzdGFydGBgIGZvciBBV1MgdG8gaW5pdGlhdGUgdGhlIElLRSBuZWdvdGlhdGlvbi5cbiAqICBWYWxpZCBWYWx1ZXM6IGBgYWRkYGAgfCBgYHN0YXJ0YGAgXG4gKiAgRGVmYXVsdDogYGBhZGRgYFxuICovXG5TdGFydHVwQWN0aW9uPzogKFwiYWRkXCIgfCBcInN0YXJ0XCIpXG4vKipcbiAqIFRoZSByYW5nZSBvZiBpbnNpZGUgSVAgYWRkcmVzc2VzIGZvciB0aGUgdHVubmVsLiBBbnkgc3BlY2lmaWVkIENJRFIgYmxvY2tzIG11c3QgYmUgdW5pcXVlIGFjcm9zcyBhbGwgVlBOIGNvbm5lY3Rpb25zIHRoYXQgdXNlIHRoZSBzYW1lIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5LiBcbiAqICBDb25zdHJhaW50czogQSBzaXplIC8zMCBDSURSIGJsb2NrIGZyb20gdGhlIGBgMTY5LjI1NC4wLjAvMTZgYCByYW5nZS4gVGhlIGZvbGxvd2luZyBDSURSIGJsb2NrcyBhcmUgcmVzZXJ2ZWQgYW5kIGNhbm5vdCBiZSB1c2VkOlxuICogICArICAgYGAxNjkuMjU0LjAuMC8zMGBgIFxuICogICArICAgYGAxNjkuMjU0LjEuMC8zMGBgIFxuICogICArICAgYGAxNjkuMjU0LjIuMC8zMGBgIFxuICogICArICAgYGAxNjkuMjU0LjMuMC8zMGBgIFxuICogICArICAgYGAxNjkuMjU0LjQuMC8zMGBgIFxuICogICArICAgYGAxNjkuMjU0LjUuMC8zMGBgIFxuICogICArICAgYGAxNjkuMjU0LjE2OS4yNTIvMzBgYFxuICovXG5UdW5uZWxJbnNpZGVDaWRyPzogc3RyaW5nXG4vKipcbiAqIFRoZSBJS0UgdmVyc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIGZvciB0aGUgVlBOIHR1bm5lbC5cbiAqICBWYWxpZCB2YWx1ZXM6IGBgaWtldjFgYCB8IGBgaWtldjJgYFxuICovXG5JS0VWZXJzaW9ucz86IElLRVZlcnNpb25zUmVxdWVzdExpc3RWYWx1ZVtdXG5Mb2dPcHRpb25zPzogVnBuVHVubmVsTG9nT3B0aW9uc1NwZWNpZmljYXRpb25cbi8qKlxuICogT25lIG9yIG1vcmUgRGlmZmllLUhlbGxtYW4gZ3JvdXAgbnVtYmVycyB0aGF0IGFyZSBwZXJtaXR0ZWQgZm9yIHRoZSBWUE4gdHVubmVsIGZvciBwaGFzZSAxIElLRSBuZWdvdGlhdGlvbnMuXG4gKiAgVmFsaWQgdmFsdWVzOiBgYDJgYCB8IGBgMTRgYCB8IGBgMTVgYCB8IGBgMTZgYCB8IGBgMTdgYCB8IGBgMThgYCB8IGBgMTlgYCB8IGBgMjBgYCB8IGBgMjFgYCB8IGBgMjJgYCB8IGBgMjNgYCB8IGBgMjRgYFxuICovXG5QaGFzZTFESEdyb3VwTnVtYmVycz86IFBoYXNlMURIR3JvdXBOdW1iZXJzUmVxdWVzdExpc3RWYWx1ZVtdXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgcGFja2V0cyBpbiBhbiBJS0UgcmVwbGF5IHdpbmRvdy5cbiAqICBDb25zdHJhaW50czogQSB2YWx1ZSBiZXR3ZWVuIDY0IGFuZCAyMDQ4LlxuICogIERlZmF1bHQ6IGBgMTAyNGBgXG4gKi9cblJlcGxheVdpbmRvd1NpemU/OiBudW1iZXJcbi8qKlxuICogVHVybiBvbiBvciBvZmYgdHVubmVsIGVuZHBvaW50IGxpZmVjeWNsZSBjb250cm9sIGZlYXR1cmUuXG4gKi9cbkVuYWJsZVR1bm5lbExpZmVjeWNsZUNvbnRyb2w/OiBib29sZWFuXG4vKipcbiAqIFRoZSBtYXJnaW4gdGltZSwgaW4gc2Vjb25kcywgYmVmb3JlIHRoZSBwaGFzZSAyIGxpZmV0aW1lIGV4cGlyZXMsIGR1cmluZyB3aGljaCB0aGUgQVdTIHNpZGUgb2YgdGhlIFZQTiBjb25uZWN0aW9uIHBlcmZvcm1zIGFuIElLRSByZWtleS4gVGhlIGV4YWN0IHRpbWUgb2YgdGhlIHJla2V5IGlzIHJhbmRvbWx5IHNlbGVjdGVkIGJhc2VkIG9uIHRoZSB2YWx1ZSBmb3IgYGBSZWtleUZ1enpQZXJjZW50YWdlYGAuXG4gKiAgQ29uc3RyYWludHM6IEEgdmFsdWUgYmV0d2VlbiA2MCBhbmQgaGFsZiBvZiBgYFBoYXNlMkxpZmV0aW1lU2Vjb25kc2BgLlxuICogIERlZmF1bHQ6IGBgMjcwYGBcbiAqL1xuUmVrZXlNYXJnaW5UaW1lU2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBUaGUgYWN0aW9uIHRvIHRha2UgYWZ0ZXIgRFBEIHRpbWVvdXQgb2NjdXJzLiBTcGVjaWZ5IGBgcmVzdGFydGBgIHRvIHJlc3RhcnQgdGhlIElLRSBpbml0aWF0aW9uLiBTcGVjaWZ5IGBgY2xlYXJgYCB0byBlbmQgdGhlIElLRSBzZXNzaW9uLlxuICogIFZhbGlkIFZhbHVlczogYGBjbGVhcmBgIHwgYGBub25lYGAgfCBgYHJlc3RhcnRgYCBcbiAqICBEZWZhdWx0OiBgYGNsZWFyYGBcbiAqL1xuRFBEVGltZW91dEFjdGlvbj86IChcImNsZWFyXCIgfCBcIm5vbmVcIiB8IFwicmVzdGFydFwiKVxuLyoqXG4gKiBUaGUgbGlmZXRpbWUgZm9yIHBoYXNlIDIgb2YgdGhlIElLRSBuZWdvdGlhdGlvbiwgaW4gc2Vjb25kcy5cbiAqICBDb25zdHJhaW50czogQSB2YWx1ZSBiZXR3ZWVuIDkwMCBhbmQgMyw2MDAuIFRoZSB2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgdmFsdWUgZm9yIGBgUGhhc2UxTGlmZXRpbWVTZWNvbmRzYGAuXG4gKiAgRGVmYXVsdDogYGAzNjAwYGBcbiAqL1xuUGhhc2UyTGlmZXRpbWVTZWNvbmRzPzogbnVtYmVyXG4vKipcbiAqIE9uZSBvciBtb3JlIGludGVncml0eSBhbGdvcml0aG1zIHRoYXQgYXJlIHBlcm1pdHRlZCBmb3IgdGhlIFZQTiB0dW5uZWwgZm9yIHBoYXNlIDIgSUtFIG5lZ290aWF0aW9ucy5cbiAqICBWYWxpZCB2YWx1ZXM6IGBgU0hBMWBgIHwgYGBTSEEyLTI1NmBgIHwgYGBTSEEyLTM4NGBgIHwgYGBTSEEyLTUxMmBgXG4gKi9cblBoYXNlMkludGVncml0eUFsZ29yaXRobXM/OiBQaGFzZTJJbnRlZ3JpdHlBbGdvcml0aG1zUmVxdWVzdExpc3RWYWx1ZVtdXG4vKipcbiAqIE9uZSBvciBtb3JlIGludGVncml0eSBhbGdvcml0aG1zIHRoYXQgYXJlIHBlcm1pdHRlZCBmb3IgdGhlIFZQTiB0dW5uZWwgZm9yIHBoYXNlIDEgSUtFIG5lZ290aWF0aW9ucy5cbiAqICBWYWxpZCB2YWx1ZXM6IGBgU0hBMWBgIHwgYGBTSEEyLTI1NmBgIHwgYGBTSEEyLTM4NGBgIHwgYGBTSEEyLTUxMmBgXG4gKi9cblBoYXNlMUludGVncml0eUFsZ29yaXRobXM/OiBQaGFzZTFJbnRlZ3JpdHlBbGdvcml0aG1zUmVxdWVzdExpc3RWYWx1ZVtdXG4vKipcbiAqIFRoZSBwcmUtc2hhcmVkIGtleSAoUFNLKSB0byBlc3RhYmxpc2ggaW5pdGlhbCBhdXRoZW50aWNhdGlvbiBiZXR3ZWVuIHRoZSB2aXJ0dWFsIHByaXZhdGUgZ2F0ZXdheSBhbmQgY3VzdG9tZXIgZ2F0ZXdheS5cbiAqICBDb25zdHJhaW50czogQWxsb3dlZCBjaGFyYWN0ZXJzIGFyZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgcGVyaW9kcyAoLiksIGFuZCB1bmRlcnNjb3JlcyAoXykuIE11c3QgYmUgYmV0d2VlbiA4IGFuZCA2NCBjaGFyYWN0ZXJzIGluIGxlbmd0aCBhbmQgY2Fubm90IHN0YXJ0IHdpdGggemVybyAoMCkuXG4gKi9cblByZVNoYXJlZEtleT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlmZXRpbWUgZm9yIHBoYXNlIDEgb2YgdGhlIElLRSBuZWdvdGlhdGlvbiwgaW4gc2Vjb25kcy5cbiAqICBDb25zdHJhaW50czogQSB2YWx1ZSBiZXR3ZWVuIDkwMCBhbmQgMjgsODAwLlxuICogIERlZmF1bHQ6IGBgMjg4MDBgYFxuICovXG5QaGFzZTFMaWZldGltZVNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogVGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHJla2V5IHdpbmRvdyAoZGV0ZXJtaW5lZCBieSBgYFJla2V5TWFyZ2luVGltZVNlY29uZHNgYCkgZHVyaW5nIHdoaWNoIHRoZSByZWtleSB0aW1lIGlzIHJhbmRvbWx5IHNlbGVjdGVkLlxuICogIENvbnN0cmFpbnRzOiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwLlxuICogIERlZmF1bHQ6IGBgMTAwYGBcbiAqL1xuUmVrZXlGdXp6UGVyY2VudGFnZT86IG51bWJlclxuLyoqXG4gKiBPbmUgb3IgbW9yZSBlbmNyeXB0aW9uIGFsZ29yaXRobXMgdGhhdCBhcmUgcGVybWl0dGVkIGZvciB0aGUgVlBOIHR1bm5lbCBmb3IgcGhhc2UgMSBJS0UgbmVnb3RpYXRpb25zLlxuICogIFZhbGlkIHZhbHVlczogYGBBRVMxMjhgYCB8IGBgQUVTMjU2YGAgfCBgYEFFUzEyOC1HQ00tMTZgYCB8IGBgQUVTMjU2LUdDTS0xNmBgXG4gKi9cblBoYXNlMUVuY3J5cHRpb25BbGdvcml0aG1zPzogUGhhc2UxRW5jcnlwdGlvbkFsZ29yaXRobXNSZXF1ZXN0TGlzdFZhbHVlW11cbi8qKlxuICogVGhlIG51bWJlciBvZiBzZWNvbmRzIGFmdGVyIHdoaWNoIGEgRFBEIHRpbWVvdXQgb2NjdXJzLlxuICogIENvbnN0cmFpbnRzOiBBIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAzMC5cbiAqICBEZWZhdWx0OiBgYDMwYGBcbiAqL1xuRFBEVGltZW91dFNlY29uZHM/OiBudW1iZXJcbn1cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobSBmb3IgdGhlIFZQTiB0dW5uZWwgZm9yIHBoYXNlIDIgSUtFIG5lZ290aWF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaGFzZTJFbmNyeXB0aW9uQWxnb3JpdGhtc1JlcXVlc3RMaXN0VmFsdWUge1xuLyoqXG4gKiBUaGUgZW5jcnlwdGlvbiBhbGdvcml0aG0uXG4gKi9cblZhbHVlPzogKFwiQUVTMTI4XCIgfCBcIkFFUzI1NlwiIHwgXCJBRVMxMjgtR0NNLTE2XCIgfCBcIkFFUzI1Ni1HQ00tMTZcIilcbn1cbi8qKlxuICogU3BlY2lmaWVzIGEgRGlmZmllLUhlbGxtYW4gZ3JvdXAgbnVtYmVyIGZvciB0aGUgVlBOIHR1bm5lbCBmb3IgcGhhc2UgMiBJS0UgbmVnb3RpYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBoYXNlMkRIR3JvdXBOdW1iZXJzUmVxdWVzdExpc3RWYWx1ZSB7XG4vKipcbiAqIFRoZSBEaWZmaWUtSGVsbG1hbm4gZ3JvdXAgbnVtYmVyLlxuICovXG5WYWx1ZT86ICgyIHwgNSB8IDE0IHwgMTUgfCAxNiB8IDE3IHwgMTggfCAxOSB8IDIwIHwgMjEgfCAyMiB8IDIzIHwgMjQpXG59XG4vKipcbiAqIFRoZSBJS0UgdmVyc2lvbiB0aGF0IGlzIHBlcm1pdHRlZCBmb3IgdGhlIFZQTiB0dW5uZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUtFVmVyc2lvbnNSZXF1ZXN0TGlzdFZhbHVlIHtcbi8qKlxuICogVGhlIElLRSB2ZXJzaW9uLlxuICovXG5WYWx1ZT86IChcImlrZXYxXCIgfCBcImlrZXYyXCIpXG59XG4vKipcbiAqIE9wdGlvbnMgZm9yIGxvZ2dpbmcgVlBOIHR1bm5lbCBhY3Rpdml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcG5UdW5uZWxMb2dPcHRpb25zU3BlY2lmaWNhdGlvbiB7XG5DbG91ZHdhdGNoTG9nT3B0aW9ucz86IENsb3Vkd2F0Y2hMb2dPcHRpb25zU3BlY2lmaWNhdGlvblxufVxuLyoqXG4gKiBPcHRpb25zIGZvciBzZW5kaW5nIFZQTiB0dW5uZWwgbG9ncyB0byBDbG91ZFdhdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsb3Vkd2F0Y2hMb2dPcHRpb25zU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIEVuYWJsZSBvciBkaXNhYmxlIFZQTiB0dW5uZWwgbG9nZ2luZyBmZWF0dXJlLiBEZWZhdWx0IHZhbHVlIGlzIGBgRmFsc2VgYC5cbiAqICBWYWxpZCB2YWx1ZXM6IGBgVHJ1ZWBgIHwgYGBGYWxzZWBgXG4gKi9cbkxvZ0VuYWJsZWQ/OiBib29sZWFuXG4vKipcbiAqIFNldCBsb2cgZm9ybWF0LiBEZWZhdWx0IGZvcm1hdCBpcyBgYGpzb25gYC5cbiAqICBWYWxpZCB2YWx1ZXM6IGBganNvbmBgIHwgYGB0ZXh0YGBcbiAqL1xuTG9nT3V0cHV0Rm9ybWF0PzogKFwianNvblwiIHwgXCJ0ZXh0XCIpXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQ2xvdWRXYXRjaCBsb2cgZ3JvdXAgdG8gc2VuZCBsb2dzIHRvLlxuICovXG5Mb2dHcm91cEFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBTcGVjaWZpZXMgYSBEaWZmaWUtSGVsbG1hbiBncm91cCBudW1iZXIgZm9yIHRoZSBWUE4gdHVubmVsIGZvciBwaGFzZSAxIElLRSBuZWdvdGlhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGhhc2UxREhHcm91cE51bWJlcnNSZXF1ZXN0TGlzdFZhbHVlIHtcbi8qKlxuICogVGhlIERpZmZpZS1IZWxsbWFubiBncm91cCBudW1iZXIuXG4gKi9cblZhbHVlPzogKDIgfCAxNCB8IDE1IHwgMTYgfCAxNyB8IDE4IHwgMTkgfCAyMCB8IDIxIHwgMjIgfCAyMyB8IDI0KVxufVxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGludGVncml0eSBhbGdvcml0aG0gZm9yIHRoZSBWUE4gdHVubmVsIGZvciBwaGFzZSAyIElLRSBuZWdvdGlhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGhhc2UySW50ZWdyaXR5QWxnb3JpdGhtc1JlcXVlc3RMaXN0VmFsdWUge1xuLyoqXG4gKiBUaGUgaW50ZWdyaXR5IGFsZ29yaXRobS5cbiAqL1xuVmFsdWU/OiAoXCJTSEExXCIgfCBcIlNIQTItMjU2XCIgfCBcIlNIQTItMzg0XCIgfCBcIlNIQTItNTEyXCIpXG59XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgaW50ZWdyaXR5IGFsZ29yaXRobSBmb3IgdGhlIFZQTiB0dW5uZWwgZm9yIHBoYXNlIDEgSUtFIG5lZ290aWF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaGFzZTFJbnRlZ3JpdHlBbGdvcml0aG1zUmVxdWVzdExpc3RWYWx1ZSB7XG4vKipcbiAqIFRoZSB2YWx1ZSBmb3IgdGhlIGludGVncml0eSBhbGdvcml0aG0uXG4gKi9cblZhbHVlPzogKFwiU0hBMVwiIHwgXCJTSEEyLTI1NlwiIHwgXCJTSEEyLTM4NFwiIHwgXCJTSEEyLTUxMlwiKVxufVxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGVuY3J5cHRpb24gYWxnb3JpdGhtIGZvciB0aGUgVlBOIHR1bm5lbCBmb3IgcGhhc2UgMSBJS0UgbmVnb3RpYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBoYXNlMUVuY3J5cHRpb25BbGdvcml0aG1zUmVxdWVzdExpc3RWYWx1ZSB7XG4vKipcbiAqIFRoZSB2YWx1ZSBmb3IgdGhlIGVuY3J5cHRpb24gYWxnb3JpdGhtLlxuICovXG5WYWx1ZT86IChcIkFFUzEyOFwiIHwgXCJBRVMyNTZcIiB8IFwiQUVTMTI4LUdDTS0xNlwiIHwgXCJBRVMyNTYtR0NNLTE2XCIpXG59XG4vKipcbiAqIFNwZWNpZmllcyBhIHRhZy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVzb3VyY2UgdGFnc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmVzb3VyY2UtdGFncy5odG1sKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBUaGUgdGFnIHZhbHVlLlxuICovXG5WYWx1ZTogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWcga2V5LlxuICovXG5LZXk6IHN0cmluZ1xufVxuIl19
@@ -189,9 +189,10 @@ export interface ServiceManagedEBSVolumeConfiguration {
189
189
  */
190
190
  TagSpecifications?: EBSTagSpecification[];
191
191
  /**
192
- * The Linux filesystem type for the volume. For volumes created from a snapshot, you must specify the same filesystem type that the volume was using when the snapshot was created. If there is a filesystem type mismatch, the task will fail to start.
193
- * The available filesystem types are
192
+ * The filesystem type for the volume. For volumes created from a snapshot, you must specify the same filesystem type that the volume was using when the snapshot was created. If there is a filesystem type mismatch, the task will fail to start.
193
+ * The available Linux filesystem types are
194
194
  ``ext3``, ``ext4``, and ``xfs``. If no value is specified, the ``xfs`` filesystem type is used by default.
195
+ * The available Windows filesystem types are ``NTFS``.
195
196
  */
196
197
  FilesystemType?: string;
197
198
  /**
@@ -346,7 +347,7 @@ export interface LoadBalancer {
346
347
  */
347
348
  TargetGroupArn?: string;
348
349
  /**
349
- * The name of the load balancer to associate with the Amazon ECS service or task set.
350
+ * The name of the load balancer to associate with the service or task set.
350
351
  * If you are using an Application Load Balancer or a Network Load Balancer the load balancer name parameter should be omitted.
351
352
  */
352
353
  LoadBalancerName?: string;
@@ -541,7 +542,7 @@ export interface DeploymentController {
541
542
  Type?: ("CODE_DEPLOY" | "ECS" | "EXTERNAL");
542
543
  }
543
544
  /**
544
- * Optional deployment parameters that control how many tasks run during the deployment and the ordering of stopping and starting tasks.
545
+ * Optional deployment parameters that control how many tasks run during the deployment and the failure detection methods.
545
546
  */
546
547
  export interface DeploymentConfiguration {
547
548
  Alarms?: DeploymentAlarms;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSB0aGUgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VDb25uZWN0U2VydmljZWBgIG11c3QgaGF2ZSBhIG5hbWUgdGhhdCBpcyB1bmlxdWUgaW4gdGhlIG5hbWVzcGFjZS5cbiAqICAgIFN0YXJ0aW5nIEFwcmlsIDE1LCAyMDIzLCBBV1M7IHdpbGwgbm90IG9uYm9hcmQgbmV3IGN1c3RvbWVycyB0byBBbWF6b24gRWxhc3RpYyBJbmZlcmVuY2UgKEVJKSwgYW5kIHdpbGwgaGVscCBjdXJyZW50IGN1c3RvbWVycyBtaWdyYXRlIHRoZWlyIHdvcmtsb2FkcyB0byBvcHRpb25zIHRoYXQgb2ZmZXIgYmV0dGVyIHByaWNlIGFuZCBwZXJmb3JtYW5jZS4gQWZ0ZXIgQXByaWwgMTUsIDIwMjMsIG5ldyBjdXN0b21lcnMgd2lsbCBub3QgYmUgYWJsZSB0byBsYXVuY2ggaW5zdGFuY2VzIHdpdGggQW1hem9uIEVJIGFjY2VsZXJhdG9ycyBpbiBBbWF6b24gU2FnZU1ha2VyLCBFQ1MsIG9yIEVDMi4gSG93ZXZlciwgY3VzdG9tZXJzIHdobyBoYXZlIHVzZWQgQW1hem9uIEVJIGF0IGxlYXN0IG9uY2UgZHVyaW5nIHRoZSBwYXN0IDMwLWRheSBwZXJpb2QgYXJlIGNvbnNpZGVyZWQgY3VycmVudCBjdXN0b21lcnMgYW5kIHdpbGwgYmUgYWJsZSB0byBjb250aW51ZSB1c2luZyB0aGUgc2VydmljZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VDU19TRVJWSUNFIHtcbi8qKlxuICogVGhlIHBsYXRmb3JtIHZlcnNpb24gdGhhdCB5b3VyIHRhc2tzIGluIHRoZSBzZXJ2aWNlIGFyZSBydW5uaW5nIG9uLiBBIHBsYXRmb3JtIHZlcnNpb24gaXMgc3BlY2lmaWVkIG9ubHkgZm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLiBJZiBvbmUgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgYGBMQVRFU1RgYCBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHVzZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW3BsYXRmb3JtIHZlcnNpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9wbGF0Zm9ybV92ZXJzaW9ucy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblBsYXRmb3JtVmVyc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIHRoZSB0YXNrLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCBwcm9wYWdhdGVkLiBUYWdzIGNhbiBvbmx5IGJlIHByb3BhZ2F0ZWQgdG8gdGhlIHRhc2sgZHVyaW5nIHRhc2sgY3JlYXRpb24uIFRvIGFkZCB0YWdzIHRvIGEgdGFzayBhZnRlciB0YXNrIGNyZWF0aW9uLCB1c2UgdGhlIFtUYWdSZXNvdXJjZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9UYWdSZXNvdXJjZS5odG1sKSBBUEkgYWN0aW9uLlxuICogIFlvdSBtdXN0IHNldCB0aGlzIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5PTkVgYCB3aGVuIHlvdSB1c2UgQ29zdCBFeHBsb3Jlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyB1c2FnZSByZXBvcnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2FnZS1yZXBvcnRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgZGVmYXVsdCBpcyBgYE5PTkVgYC5cbiAqL1xuUHJvcGFnYXRlVGFncz86IChcIlNFUlZJQ0VcIiB8IFwiVEFTS19ERUZJTklUSU9OXCIpXG5TZXJ2aWNlQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgb2JqZWN0cyB0byB1c2UgZm9yIHRhc2tzIGluIHlvdXIgc2VydmljZS4gWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSBvZiA1IHN0cmF0ZWd5IHJ1bGVzIGZvciBlYWNoIHNlcnZpY2UuXG4gKi9cblBsYWNlbWVudFN0cmF0ZWdpZXM/OiBQbGFjZW1lbnRTdHJhdGVneVtdXG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZWdpc3RyeSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgZGlzY292ZXJ5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWRpc2NvdmVyeS5odG1sKS5cbiAqICAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuU2VydmljZVJlZ2lzdHJpZXM/OiBTZXJ2aWNlUmVnaXN0cnlbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgYSB2b2x1bWUgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYXMgYSB2b2x1bWUgdGhhdCBpcyBjb25maWd1cmVkIGF0IGxhdW5jaCB0aW1lLiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCB2b2x1bWUgdHlwZSBpcyBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuVm9sdW1lQ29uZmlndXJhdGlvbnM/OiBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICogIElmIGEgYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGxhdW5jaFR5cGVgYCBwYXJhbWV0ZXIgbXVzdCBiZSBvbWl0dGVkLiBJZiBubyBgYGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIG9yIGBgbGF1bmNoVHlwZWBgIGlzIHNwZWNpZmllZCwgdGhlIGBgZGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIGZvciB0aGUgY2x1c3RlciBpcyB1c2VkLlxuICogIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgbWF5IGNvbnRhaW4gYSBtYXhpbXVtIG9mIDYgY2FwYWNpdHkgcHJvdmlkZXJzLlxuICovXG5DYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3k/OiBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtW11cbi8qKlxuICogVGhlIGxhdW5jaCB0eXBlIG9uIHdoaWNoIHRvIHJ1biB5b3VyIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgTGF1bmNoIFR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5MYXVuY2hUeXBlPzogKFwiRUMyXCIgfCBcIkZBUkdBVEVcIiB8IFwiRVhURVJOQUxcIilcbk5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHNjaGVkdWxpbmcgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKS5cbiAqICBUaGVyZSBhcmUgdHdvIHNlcnZpY2Ugc2NoZWR1bGVyIHN0cmF0ZWdpZXMgYXZhaWxhYmxlOlxuICogICArICAgYGBSRVBMSUNBYGAtVGhlIHJlcGxpY2Egc2NoZWR1bGluZyBzdHJhdGVneSBwbGFjZXMgYW5kIG1haW50YWlucyB0aGUgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MgYWNyb3NzIHlvdXIgY2x1c3Rlci4gQnkgZGVmYXVsdCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHNwcmVhZHMgdGFza3MgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lcy4gWW91IGNhbiB1c2UgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llcyBhbmQgY29uc3RyYWludHMgdG8gY3VzdG9taXplIHRhc2sgcGxhY2VtZW50IGRlY2lzaW9ucy4gVGhpcyBzY2hlZHVsZXIgc3RyYXRlZ3kgaXMgcmVxdWlyZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMuXG4gKiAgICsgICBgYERBRU1PTmBgLVRoZSBkYWVtb24gc2NoZWR1bGluZyBzdHJhdGVneSBkZXBsb3lzIGV4YWN0bHkgb25lIHRhc2sgb24gZWFjaCBhY3RpdmUgY29udGFpbmVyIGluc3RhbmNlIHRoYXQgbWVldHMgYWxsIG9mIHRoZSB0YXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyB0aGF0IHlvdSBzcGVjaWZ5IGluIHlvdXIgY2x1c3Rlci4gVGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGFsc28gZXZhbHVhdGVzIHRoZSB0YXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyBmb3IgcnVubmluZyB0YXNrcyBhbmQgd2lsbCBzdG9wIHRhc2tzIHRoYXQgZG9uJ3QgbWVldCB0aGUgcGxhY2VtZW50IGNvbnN0cmFpbnRzLiBXaGVuIHlvdSdyZSB1c2luZyB0aGlzIHN0cmF0ZWd5LCB5b3UgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGEgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MsIGEgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ3ksIG9yIHVzZSBTZXJ2aWNlIEF1dG8gU2NhbGluZyBwb2xpY2llcy5cbiAqICAgVGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUgb3IgdGhlIGBgQ09ERV9ERVBMT1lgYCBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGVzIGRvbid0IHN1cHBvcnQgdGhlIGBgREFFTU9OYGAgc2NoZWR1bGluZyBzdHJhdGVneS5cbiAqL1xuU2NoZWR1bGluZ1N0cmF0ZWd5PzogKFwiREFFTU9OXCIgfCBcIlJFUExJQ0FcIilcbk5ldHdvcmtDb25maWd1cmF0aW9uPzogTmV0d29ya0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG1ldGFkYXRhIHRoYXQgeW91IGFwcGx5IHRvIHRoZSBzZXJ2aWNlIHRvIGhlbHAgeW91IGNhdGVnb3JpemUgYW5kIG9yZ2FuaXplIHRoZW0uIEVhY2ggdGFnIGNvbnNpc3RzIG9mIGEga2V5IGFuZCBhbiBvcHRpb25hbCB2YWx1ZSwgYm90aCBvZiB3aGljaCB5b3UgZGVmaW5lLiBXaGVuIGEgc2VydmljZSBpcyBkZWxldGVkLCB0aGUgdGFncyBhcmUgZGVsZXRlZCBhcyB3ZWxsLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKi9cblRhZ3M/OiBUYWdbXVxuLyoqXG4gKiBUaGUgcGVyaW9kIG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgaWdub3JlcyB1bmhlYWx0aHkgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgaGVhbHRoIGNoZWNrcyBhZnRlciBhIHRhc2sgaGFzIGZpcnN0IHN0YXJ0ZWQuIFRoaXMgaXMgb25seSB1c2VkIHdoZW4geW91ciBzZXJ2aWNlIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGEgbG9hZCBiYWxhbmNlci4gSWYgeW91ciBzZXJ2aWNlIGhhcyBhIGxvYWQgYmFsYW5jZXIgZGVmaW5lZCBhbmQgeW91IGRvbid0IHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIHZhbHVlLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLlxuICogIElmIHlvdSBkbyBub3QgdXNlIGFuIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIGBgc3RhcnRQZXJpb2RgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGhlYWx0aCBjaGVjayBwYXJhbWV0ZXJzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtIZWFsdGggY2hlY2tdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfSGVhbHRoQ2hlY2suaHRtbCkuXG4gKiAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGFrZSBhIHdoaWxlIHRvIHN0YXJ0IGFuZCByZXNwb25kIHRvIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgaGVhbHRoIGNoZWNrcywgeW91IGNhbiBzcGVjaWZ5IGEgaGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCBvZiB1cCB0byAyLDE0Nyw0ODMsNjQ3IHNlY29uZHMgKGFib3V0IDY5IHllYXJzKS4gRHVyaW5nIHRoYXQgdGltZSwgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgaWdub3JlcyBoZWFsdGggY2hlY2sgc3RhdHVzLiBUaGlzIGdyYWNlIHBlcmlvZCBjYW4gcHJldmVudCB0aGUgc2VydmljZSBzY2hlZHVsZXIgZnJvbSBtYXJraW5nIHRhc2tzIGFzIHVuaGVhbHRoeSBhbmQgc3RvcHBpbmcgdGhlbSBiZWZvcmUgdGhleSBoYXZlIHRpbWUgdG8gY29tZSB1cC5cbiAqL1xuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdHVybiBvbiBBbWF6b24gRUNTIG1hbmFnZWQgdGFncyBmb3IgdGhlIHRhc2tzIHdpdGhpbiB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFnZ2luZyB5b3VyIEFtYXpvbiBFQ1MgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtdXNpbmctdGFncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgV2hlbiB5b3UgdXNlIEFtYXpvbiBFQ1MgbWFuYWdlZCB0YWdzLCB5b3UgbmVlZCB0byBzZXQgdGhlIGBgcHJvcGFnYXRlVGFnc2BgIHJlcXVlc3QgcGFyYW1ldGVyLlxuICovXG5FbmFibGVFQ1NNYW5hZ2VkVGFncz86IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBleGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25hbGl0eSBpcyB0dXJuZWQgb24gZm9yIHRoZSBzZXJ2aWNlLiBJZiBgYHRydWVgYCwgdGhlIGV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbmFsaXR5IGlzIHR1cm5lZCBvbiBmb3IgYWxsIGNvbnRhaW5lcnMgaW4gdGFza3MgYXMgcGFydCBvZiB0aGUgc2VydmljZS5cbiAqL1xuRW5hYmxlRXhlY3V0ZUNvbW1hbmQ/OiBib29sZWFuXG4vKipcbiAqIEFuIGFycmF5IG9mIHBsYWNlbWVudCBjb25zdHJhaW50IG9iamVjdHMgdG8gdXNlIGZvciB0YXNrcyBpbiB5b3VyIHNlcnZpY2UuIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgMTAgY29uc3RyYWludHMgZm9yIGVhY2ggdGFzay4gVGhpcyBsaW1pdCBpbmNsdWRlcyBjb25zdHJhaW50cyBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFuZCB0aG9zZSBzcGVjaWZpZWQgYXQgcnVudGltZS5cbiAqL1xuUGxhY2VtZW50Q29uc3RyYWludHM/OiBQbGFjZW1lbnRDb25zdHJhaW50W11cbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgY2x1c3RlciB0aGF0IHlvdSBydW4geW91ciBzZXJ2aWNlIG9uLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBjbHVzdGVyLCB0aGUgZGVmYXVsdCBjbHVzdGVyIGlzIGFzc3VtZWQuXG4gKi9cbkNsdXN0ZXI/OiBzdHJpbmdcbi8qKlxuICogQSBsaXN0IG9mIGxvYWQgYmFsYW5jZXIgb2JqZWN0cyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmljZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgUm9sZWBgIHByb3BlcnR5LCBgYExvYWRCYWxhbmNlcnNgYCBtdXN0IGJlIHNwZWNpZmllZCBhcyB3ZWxsLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG51bWJlciBvZiBsb2FkIGJhbGFuY2VycyB0aGF0IHlvdSBjYW4gc3BlY2lmeSBwZXIgc2VydmljZSwgc2VlIFtTZXJ2aWNlIExvYWQgQmFsYW5jaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWxvYWQtYmFsYW5jaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTG9hZEJhbGFuY2Vycz86IExvYWRCYWxhbmNlcltdXG5TZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24/OiBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG51bWJlciBvZiBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc3BlY2lmaWVkIHRhc2sgZGVmaW5pdGlvbiB0byBwbGFjZSBhbmQga2VlcCBydW5uaW5nIGluIHlvdXIgc2VydmljZS5cbiAqICBGb3IgbmV3IHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IHZhbHVlIG9mIGBgMWBgIGlzIHVzZWQuIFdoZW4gdXNpbmcgdGhlIGBgREFFTU9OYGAgc2NoZWR1bGluZyBzdHJhdGVneSwgdGhlIGRlc2lyZWQgY291bnQgaXMgbm90IHJlcXVpcmVkLlxuICogIEZvciBleGlzdGluZyBzZXJ2aWNlcywgaWYgYSBkZXNpcmVkIGNvdW50IGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIG9taXR0ZWQgZnJvbSB0aGUgb3BlcmF0aW9uLlxuICovXG5EZXNpcmVkQ291bnQ/OiBudW1iZXJcbkRlcGxveW1lbnRDb250cm9sbGVyPzogRGVwbG95bWVudENvbnRyb2xsZXJcbi8qKlxuICogVGhlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBhbGxvd3MgQW1hem9uIEVDUyB0byBtYWtlIGNhbGxzIHRvIHlvdXIgbG9hZCBiYWxhbmNlciBvbiB5b3VyIGJlaGFsZi4gVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBwZXJtaXR0ZWQgaWYgeW91IGFyZSB1c2luZyBhIGxvYWQgYmFsYW5jZXIgd2l0aCB5b3VyIHNlcnZpY2UgYW5kIHlvdXIgdGFzayBkZWZpbml0aW9uIGRvZXNuJ3QgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgcm9sZWBgIHBhcmFtZXRlciwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGEgbG9hZCBiYWxhbmNlciBvYmplY3Qgd2l0aCB0aGUgYGBsb2FkQmFsYW5jZXJzYGAgcGFyYW1ldGVyLlxuICogICBJZiB5b3VyIGFjY291bnQgaGFzIGFscmVhZHkgY3JlYXRlZCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlLCB0aGF0IHJvbGUgaXMgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIHVubGVzcyB5b3Ugc3BlY2lmeSBhIHJvbGUgaGVyZS4gVGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgaXMgcmVxdWlyZWQgaWYgeW91ciB0YXNrIGRlZmluaXRpb24gdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgb3IgaWYgdGhlIHNlcnZpY2UgaXMgY29uZmlndXJlZCB0byB1c2Ugc2VydmljZSBkaXNjb3ZlcnksIGFuIGV4dGVybmFsIGRlcGxveW1lbnQgY29udHJvbGxlciwgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcywgb3IgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3JzIGluIHdoaWNoIGNhc2UgeW91IGRvbid0IHNwZWNpZnkgYSByb2xlIGhlcmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIHNlcnZpY2UtbGlua2VkIHJvbGVzIGZvciBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZy1zZXJ2aWNlLWxpbmtlZC1yb2xlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc3BlY2lmaWVkIHJvbGUgaGFzIGEgcGF0aCBvdGhlciB0aGFuIGBgL2BgLCB0aGVuIHlvdSBtdXN0IGVpdGhlciBzcGVjaWZ5IHRoZSBmdWxsIHJvbGUgQVJOICh0aGlzIGlzIHJlY29tbWVuZGVkKSBvciBwcmVmaXggdGhlIHJvbGUgbmFtZSB3aXRoIHRoZSBwYXRoLiBGb3IgZXhhbXBsZSwgaWYgYSByb2xlIHdpdGggdGhlIG5hbWUgYGBiYXJgYCBoYXMgYSBwYXRoIG9mIGBgL2Zvby9gYCB0aGVuIHlvdSB3b3VsZCBzcGVjaWZ5IGBgL2Zvby9iYXJgYCBhcyB0aGUgcm9sZSBuYW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtGcmllbmRseSBuYW1lcyBhbmQgcGF0aHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWRlbnRpZmllcnMuaHRtbCNpZGVudGlmaWVycy1mcmllbmRseS1uYW1lcykgaW4gdGhlICpJQU0gVXNlciBHdWlkZSouXG4gKi9cblJvbGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgZmFtaWx5YGAgYW5kIGBgcmV2aXNpb25gYCAoYGBmYW1pbHk6cmV2aXNpb25gYCkgb3IgZnVsbCBBUk4gb2YgdGhlIHRhc2sgZGVmaW5pdGlvbiB0byBydW4gaW4geW91ciBzZXJ2aWNlLiBJZiBhIGBgcmV2aXNpb25gYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgYGBBQ1RJVkVgYCByZXZpc2lvbiBpcyB1c2VkLlxuICogIEEgdGFzayBkZWZpbml0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBgYEVDU2BgIG9yIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXJzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlcGxveW1lbnQgdHlwZXMsIHNlZSBbQW1hem9uIEVDUyBkZXBsb3ltZW50IHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGVzLmh0bWwpLlxuICovXG5UYXNrRGVmaW5pdGlvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB5b3VyIHNlcnZpY2UuIFVwIHRvIDI1NSBsZXR0ZXJzICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSksIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucyBhcmUgYWxsb3dlZC4gU2VydmljZSBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBjbHVzdGVyLCBidXQgeW91IGNhbiBoYXZlIHNpbWlsYXJseSBuYW1lZCBzZXJ2aWNlcyBpbiBtdWx0aXBsZSBjbHVzdGVycyB3aXRoaW4gYSBSZWdpb24gb3IgYWNyb3NzIG11bHRpcGxlIFJlZ2lvbnMuXG4gKiAgIFRoZSBzdGFjayB1cGRhdGUgZmFpbHMgaWYgeW91IGNoYW5nZSBhbnkgcHJvcGVydGllcyB0aGF0IHJlcXVpcmUgcmVwbGFjZW1lbnQgYW5kIHRoZSBgYFNlcnZpY2VOYW1lYGAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VOYW1lYGAgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGNsdXN0ZXIuXG4gKi9cblNlcnZpY2VOYW1lPzogc3RyaW5nXG5EZXBsb3ltZW50Q29uZmlndXJhdGlvbj86IERlcGxveW1lbnRDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSBmb3IgYSB0YXNrIG9yIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IHN0cmF0ZWdpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stcGxhY2VtZW50LXN0cmF0ZWdpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudFN0cmF0ZWd5IHtcbi8qKlxuICogVGhlIGZpZWxkIHRvIGFwcGx5IHRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgYWdhaW5zdC4gRm9yIHRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGluc3RhbmNlSWRgYCAob3IgYGBob3N0YGAsIHdoaWNoIGhhcyB0aGUgc2FtZSBlZmZlY3QpLCBvciBhbnkgcGxhdGZvcm0gb3IgY3VzdG9tIGF0dHJpYnV0ZSB0aGF0J3MgYXBwbGllZCB0byBhIGNvbnRhaW5lciBpbnN0YW5jZSwgc3VjaCBhcyBgYGF0dHJpYnV0ZTplY3MuYXZhaWxhYmlsaXR5LXpvbmVgYC4gRm9yIHRoZSBgYGJpbnBhY2tgYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHZhbGlkIHZhbHVlcyBhcmUgYGBjcHVgYCBhbmQgYGBtZW1vcnlgYC4gRm9yIHRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSwgdGhpcyBmaWVsZCBpcyBub3QgdXNlZC5cbiAqL1xuRmllbGQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgcGxhY2VtZW50IHN0cmF0ZWd5LiBUaGUgYGByYW5kb21gYCBwbGFjZW1lbnQgc3RyYXRlZ3kgcmFuZG9tbHkgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzLiBUaGUgYGBzcHJlYWRgYCBwbGFjZW1lbnQgc3RyYXRlZ3kgc3ByZWFkcyBwbGFjZW1lbnQgYWNyb3NzIGF2YWlsYWJsZSBjYW5kaWRhdGVzIGV2ZW5seSBiYXNlZCBvbiB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gVGhlIGBgYmlucGFja2BgIHN0cmF0ZWd5IHBsYWNlcyB0YXNrcyBvbiBhdmFpbGFibGUgY2FuZGlkYXRlcyB0aGF0IGhhdmUgdGhlIGxlYXN0IGF2YWlsYWJsZSBhbW91bnQgb2YgdGhlIHJlc291cmNlIHRoYXQncyBzcGVjaWZpZWQgd2l0aCB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUsIGlmIHlvdSBiaW5wYWNrIG9uIG1lbW9yeSwgYSB0YXNrIGlzIHBsYWNlZCBvbiB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHJlbWFpbmluZyBtZW1vcnkgYnV0IHN0aWxsIGVub3VnaCB0byBydW4gdGhlIHRhc2suXG4gKi9cblR5cGU6IChcImJpbnBhY2tcIiB8IFwicmFuZG9tXCIgfCBcInNwcmVhZFwiKVxufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBmb3IgdGhlIHNlcnZpY2UgcmVnaXN0cnkuXG4gKiAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGFyZSBub3Qgc3VwcG9ydGVkLlxuICogIFdoZW4geW91IGFkZCwgdXBkYXRlLCBvciByZW1vdmUgdGhlIHNlcnZpY2UgcmVnaXN0cmllcyBjb25maWd1cmF0aW9uLCBBbWF6b24gRUNTIHN0YXJ0cyBhIG5ldyBkZXBsb3ltZW50LiBOZXcgdGFza3MgYXJlIHJlZ2lzdGVyZWQgYW5kIGRlcmVnaXN0ZXJlZCB0byB0aGUgdXBkYXRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVJlZ2lzdHJ5IHtcbi8qKlxuICogVGhlIGNvbnRhaW5lciBuYW1lIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZS4gSXQncyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdXNlZCBpZiB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2Ugc3BlY2lmaWVkIGFuIFNSViByZWNvcmQuIFRoaXMgZmllbGQgbWlnaHQgYmUgdXNlZCBpZiBib3RoIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgU1JWIHJlY29yZHMgYXJlIHVzZWQuXG4gKi9cblBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24geW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIGEgdHlwZSBTUlYgRE5TIHJlY29yZCBpcyB1c2VkLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBvciBhIGBgcG9ydGBgIHZhbHVlLiBIb3dldmVyLCB5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VydmljZSByZWdpc3RyeS4gVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgc2VydmljZSByZWdpc3RyeSBpcyBDTUFQLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGVTZXJ2aWNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbCkuXG4gKi9cblJlZ2lzdHJ5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhIHZvbHVtZSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhcyBhIHZvbHVtZSB0aGF0IGlzIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZvbHVtZSB0eXBlIGlzIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uIHtcbk1hbmFnZWRFQlNWb2x1bWU/OiBTZXJ2aWNlTWFuYWdlZEVCU1ZvbHVtZUNvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHZvbHVtZS4gVGhpcyB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgbmFtZSBmcm9tIHRoZSBgYFZvbHVtZWBgIG9iamVjdCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBbWF6b24gRUJTIHZvbHVtZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBhbmQgbWFuYWdlcyBvbiB5b3VyIGJlaGFsZi4gVGhlc2Ugc2V0dGluZ3MgYXJlIHVzZWQgdG8gY3JlYXRlIGVhY2ggQW1hem9uIEVCUyB2b2x1bWUsIHdpdGggb25lIHZvbHVtZSBjcmVhdGVkIGZvciBlYWNoIHRhc2sgaW4gdGhlIHNlcnZpY2UuIFRoZSBBbWF6b24gRUJTIHZvbHVtZXMgYXJlIHZpc2libGUgaW4geW91ciBhY2NvdW50IGluIHRoZSBBbWF6b24gRUMyIGNvbnNvbGUgb25jZSB0aGV5IGFyZSBjcmVhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzbmFwc2hvdCB0aGF0IEFtYXpvbiBFQ1MgdXNlcyB0byBjcmVhdGUgdGhlIHZvbHVtZS4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBzbmFwc2hvdCBJRCBvciBhIHZvbHVtZSBzaXplLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFNuYXBzaG90SWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblNuYXBzaG90SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZvbHVtZSB0eXBlLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFZvbHVtZVR5cGVgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQlMgdm9sdW1lIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSouXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2b2x1bWUgdHlwZXMuXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSBTU0Q6IGBgZ3AyYGB8YGBncDNgYCBcbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBTU0Q6IGBgaW8xYGB8YGBpbzJgYCBcbiAqICAgKyAgVGhyb3VnaHB1dCBPcHRpbWl6ZWQgSEREOiBgYHN0MWBgIFxuICogICArICBDb2xkIEhERDogYGBzYzFgYCBcbiAqICAgKyAgTWFnbmV0aWM6IGBgc3RhbmRhcmRgYCBcbiAqICAgVGhlIG1hZ25ldGljIHZvbHVtZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgb24gRmFyZ2F0ZS5cbiAqL1xuVm9sdW1lVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgaWRlbnRpZmllciBvZiB0aGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IHRvIHVzZSBmb3IgQW1hem9uIEVCUyBlbmNyeXB0aW9uLiBXaGVuIGVuY3J5cHRpb24gaXMgdHVybmVkIG9uIGFuZCBubyBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBBV1MgbWFuYWdlZCBrZXkgZm9yIEFtYXpvbiBFQlMgdm9sdW1lcyBpcyB1c2VkLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYEttc0tleUlkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogICAgQVdTIGF1dGhlbnRpY2F0ZXMgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSBhc3luY2hyb25vdXNseS4gVGhlcmVmb3JlLCBpZiB5b3Ugc3BlY2lmeSBhbiBJRCwgYWxpYXMsIG9yIEFSTiB0aGF0IGlzIGludmFsaWQsIHRoZSBhY3Rpb24gY2FuIGFwcGVhciB0byBjb21wbGV0ZSwgYnV0IGV2ZW50dWFsbHkgZmFpbHMuXG4gKi9cbkttc0tleUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSB2b2x1bWUuIEFtYXpvbiBFQ1MgYXBwbGllcyBzZXJ2aWNlLW1hbmFnZWQgdGFncyBieSBkZWZhdWx0LiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRhZ1NwZWNpZmljYXRpb25zLk5gYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblRhZ1NwZWNpZmljYXRpb25zPzogRUJTVGFnU3BlY2lmaWNhdGlvbltdXG4vKipcbiAqIFRoZSBMaW51eCBmaWxlc3lzdGVtIHR5cGUgZm9yIHRoZSB2b2x1bWUuIEZvciB2b2x1bWVzIGNyZWF0ZWQgZnJvbSBhIHNuYXBzaG90LCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBzYW1lIGZpbGVzeXN0ZW0gdHlwZSB0aGF0IHRoZSB2b2x1bWUgd2FzIHVzaW5nIHdoZW4gdGhlIHNuYXBzaG90IHdhcyBjcmVhdGVkLiBJZiB0aGVyZSBpcyBhIGZpbGVzeXN0ZW0gdHlwZSBtaXNtYXRjaCwgdGhlIHRhc2sgd2lsbCBmYWlsIHRvIHN0YXJ0LlxuICogIFRoZSBhdmFpbGFibGUgZmlsZXN5c3RlbSB0eXBlcyBhcmXigKggYGBleHQzYGAsIGBgZXh0NGBgLCBhbmQgYGB4ZnNgYC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgYGB4ZnNgYCBmaWxlc3lzdGVtIHR5cGUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICovXG5GaWxlc3lzdGVtVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdm9sdW1lIHNob3VsZCBiZSBlbmNyeXB0ZWQuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgZW5jcnlwdGlvbiBpcyB0dXJuZWQgb24gYnkgZGVmYXVsdC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBFbmNyeXB0ZWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cbkVuY3J5cHRlZD86IGJvb2xlYW5cbi8qKlxuICogVGhlIHRocm91Z2hwdXQgdG8gcHJvdmlzaW9uIGZvciBhIHZvbHVtZSwgaW4gTWlCL3MsIHdpdGggYSBtYXhpbXVtIG9mIDEsMDAwIE1pQi9zLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRocm91Z2hwdXRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB0aGUgYGBncDNgYCB2b2x1bWUgdHlwZS5cbiAqL1xuVGhyb3VnaHB1dD86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpLiBGb3IgYGBncDNgYCwgYGBpbzFgYCwgYW5kIGBgaW8yYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgSU9QUyB0aGF0IGFyZSBwcm92aXNpb25lZCBmb3IgdGhlIHZvbHVtZS4gRm9yIGBgZ3AyYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBiYXNlbGluZSBwZXJmb3JtYW5jZSBvZiB0aGUgdm9sdW1lIGFuZCB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgdm9sdW1lIGFjY3VtdWxhdGVzIEkvTyBjcmVkaXRzIGZvciBidXJzdGluZy5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZS5cbiAqICAgKyAgIGBgZ3AzYGA6IDMsMDAwIC0gMTYsMDAwIElPUFNcbiAqICAgKyAgIGBgaW8xYGA6IDEwMCAtIDY0LDAwMCBJT1BTXG4gKiAgICsgICBgYGlvMmBgOiAxMDAgLSAyNTYsMDAwIElPUFNcbiAqICAgXG4gKiAgVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIGBgaW8xYGAgYW5kIGBgaW8yYGAgdm9sdW1lIHR5cGVzLiBUaGUgZGVmYXVsdCBmb3IgYGBncDNgYCB2b2x1bWVzIGlzIGBgMywwMDAgSU9QU2BgLiBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBgYHN0MWBgLCBgYHNjMWBgLCBvciBgYHN0YW5kYXJkYGAgdm9sdW1lIHR5cGVzLlxuICogIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgSW9wc2BgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuSW9wcz86IG51bWJlclxuLyoqXG4gKiBUaGUgc2l6ZSBvZiB0aGUgdm9sdW1lIGluIEdpQi4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSB2b2x1bWUgc2l6ZSBvciBhIHNuYXBzaG90IElELiBJZiB5b3Ugc3BlY2lmeSBhIHNuYXBzaG90IElELCB0aGUgc25hcHNob3Qgc2l6ZSBpcyB1c2VkIGZvciB0aGUgdm9sdW1lIHNpemUgYnkgZGVmYXVsdC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSB2b2x1bWUgc2l6ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNuYXBzaG90IHNpemUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgU2l6ZWBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZvbHVtZSBzaXplIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZS5cbiAqICAgKyAgIGBgZ3AyYGAgYW5kIGBgZ3AzYGA6IDEtMTYsMzg0XG4gKiAgICsgICBgYGlvMWBgIGFuZCBgYGlvMmBgOiA0LTE2LDM4NFxuICogICArICAgYGBzdDFgYCBhbmQgYGBzYzFgYDogMTI1LTE2LDM4NFxuICogICArICAgYGBzdGFuZGFyZGBgOiAxLTEsMDI0XG4gKi9cblNpemVJbkdpQj86IG51bWJlclxuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHZvbHVtZS4gVGhpcyBpcyB0aGUgQW1hem9uIEVDUyBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gbWFuYWdlIHlvdXIgQVdTIGluZnJhc3RydWN0dXJlLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIEFtYXpvbiBFQ1MtbWFuYWdlZCBgYEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZvbHVtZXNgYCBJQU0gcG9saWN5IHdpdGggdGhpcyByb2xlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIGluZnJhc3RydWN0dXJlIElBTSByb2xlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9pbmZyYXN0cnVjdHVyZV9JQU1fcm9sZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQ1MgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSB0YWcgc3BlY2lmaWNhdGlvbnMgb2YgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUJTVGFnU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIOKAqHRoZSBBbWF6b24gRUJTIHZvbHVtZS4gVGFncyBjYW4gb25seSBwcm9wYWdhdGUgdG8gYSBgYFNFUlZJQ0VgYCBzcGVjaWZpZWQgaW4g4oCoYGBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbmBgLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCDigKhwcm9wYWdhdGVkLlxuICovXG5Qcm9wYWdhdGVUYWdzPzogKFwiU0VSVklDRVwiIHwgXCJUQVNLX0RFRklOSVRJT05cIilcbi8qKlxuICogVGhlIHR5cGUgb2Ygdm9sdW1lIHJlc291cmNlLlxuICovXG5SZXNvdXJjZVR5cGU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyBhcHBsaWVkIHRvIHRoaXMgQW1hem9uIEVCUyB2b2x1bWUuIGBgQW1hem9uRUNTQ3JlYXRlZGBgIGFuZCBgYEFtYXpvbkVDU01hbmFnZWRgYCBhcmUgcmVzZXJ2ZWQgdGFncyB0aGF0IGNhbid0IGJlIHVzZWQuXG4gKi9cblRhZ3M/OiBUYWdbXVxufVxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gYSByZXNvdXJjZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUuIFlvdSBkZWZpbmUgdGhlbS5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSBvcHRpb25hbCBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBgdmFsdWVgYCBhY3RzIGFzIGEgZGVzY3JpcHRvciB3aXRoaW4gYSB0YWcgY2F0ZWdvcnkgKGtleSkuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIE9uZSBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBga2V5YGAgaXMgYSBnZW5lcmFsIGxhYmVsIHRoYXQgYWN0cyBsaWtlIGEgY2F0ZWdvcnkgZm9yIG1vcmUgc3BlY2lmaWMgdGFnIHZhbHVlcy5cbiAqL1xuS2V5Pzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGJlIHNldCB3aGVuIHVzaW5nIHRoZSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBBUElzIG9yIGFzIHRoZSBkZWZhdWx0IGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGZvciBhIGNsdXN0ZXIgd2l0aCB0aGUgYGBDcmVhdGVDbHVzdGVyYGAgQVBJLlxuICogIE9ubHkgY2FwYWNpdHkgcHJvdmlkZXJzIHRoYXQgYXJlIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciBhbmQgaGF2ZSBhbiBgYEFDVElWRWBgIG9yIGBgVVBEQVRJTkdgYCBzdGF0dXMgY2FuIGJlIHVzZWQgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS4gVGhlIGBgUHV0Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJzYGAgQVBJIGlzIHVzZWQgdG8gYXNzb2NpYXRlIGEgY2FwYWNpdHkgcHJvdmlkZXIgd2l0aCBhIGNsdXN0ZXIuXG4gKiAgSWYgc3BlY2lmeWluZyBhIGNhcGFjaXR5IHByb3ZpZGVyIHRoYXQgdXNlcyBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAsIHRoZSBjYXBhY2l0eSBwcm92aWRlciBtdXN0IGFscmVhZHkgYmUgY3JlYXRlZC4gTmV3IEF1dG8gU2NhbGluZyBncm91cCBjYXBhY2l0eSBwcm92aWRlcnMgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgYGBDcmVhdGVDYXBhY2l0eVByb3ZpZGVyYGAgQVBJIG9wZXJhdGlvbi5cbiAqICBUbyB1c2UgYW4gRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXIsIHNwZWNpZnkgZWl0aGVyIHRoZSBgYEZBUkdBVEVgYCBvciBgYEZBUkdBVEVfU1BPVGBgIGNhcGFjaXR5IHByb3ZpZGVycy4gVGhlIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIHRvIGFsbCBhY2NvdW50cyBhbmQgb25seSBuZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgdG8gYmUgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW0ge1xuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXIuXG4gKi9cbkNhcGFjaXR5UHJvdmlkZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlICpiYXNlKiB2YWx1ZSBkZXNpZ25hdGVzIGhvdyBtYW55IHRhc2tzLCBhdCBhIG1pbmltdW0sIHRvIHJ1biBvbiB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBPbmx5IG9uZSBjYXBhY2l0eSBwcm92aWRlciBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBoYXZlIGEgKmJhc2UqIGRlZmluZWQuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC5cbiAqL1xuQmFzZT86IG51bWJlclxuLyoqXG4gKiBUaGUgKndlaWdodCogdmFsdWUgZGVzaWduYXRlcyB0aGUgcmVsYXRpdmUgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIHRhc2tzIGxhdW5jaGVkIHRoYXQgc2hvdWxkIHVzZSB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBUaGUgYGB3ZWlnaHRgYCB2YWx1ZSBpcyB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gYWZ0ZXIgdGhlIGBgYmFzZWBgIHZhbHVlLCBpZiBkZWZpbmVkLCBpcyBzYXRpc2ZpZWQuXG4gKiAgSWYgbm8gYGB3ZWlnaHRgYCB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuIFdoZW4gbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBzcGVjaWZpZWQgd2l0aGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3ksIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXJzIG11c3QgaGF2ZSBhIHdlaWdodCB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBhbmQgYW55IGNhcGFjaXR5IHByb3ZpZGVycyB3aXRoIGEgd2VpZ2h0IG9mIGBgMGBgIGNhbid0IGJlIHVzZWQgdG8gcGxhY2UgdGFza3MuIElmIHlvdSBzcGVjaWZ5IG11bHRpcGxlIGNhcGFjaXR5IHByb3ZpZGVycyBpbiBhIHN0cmF0ZWd5IHRoYXQgYWxsIGhhdmUgYSB3ZWlnaHQgb2YgYGAwYGAsIGFueSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBhY3Rpb25zIHVzaW5nIHRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB3aWxsIGZhaWwuXG4gKiAgQW4gZXhhbXBsZSBzY2VuYXJpbyBmb3IgdXNpbmcgd2VpZ2h0cyBpcyBkZWZpbmluZyBhIHN0cmF0ZWd5IHRoYXQgY29udGFpbnMgdHdvIGNhcGFjaXR5IHByb3ZpZGVycyBhbmQgYm90aCBoYXZlIGEgd2VpZ2h0IG9mIGBgMWBgLCB0aGVuIHdoZW4gdGhlIGBgYmFzZWBgIGlzIHNhdGlzZmllZCwgdGhlIHRhc2tzIHdpbGwgYmUgc3BsaXQgZXZlbmx5IGFjcm9zcyB0aGUgdHdvIGNhcGFjaXR5IHByb3ZpZGVycy4gVXNpbmcgdGhhdCBzYW1lIGxvZ2ljLCBpZiB5b3Ugc3BlY2lmeSBhIHdlaWdodCBvZiBgYDFgYCBmb3IgKmNhcGFjaXR5UHJvdmlkZXJBKiBhbmQgYSB3ZWlnaHQgb2YgYGA0YGAgZm9yICpjYXBhY2l0eVByb3ZpZGVyQiosIHRoZW4gZm9yIGV2ZXJ5IG9uZSB0YXNrIHRoYXQncyBydW4gdXNpbmcgKmNhcGFjaXR5UHJvdmlkZXJBKiwgZm91ciB0YXNrcyB3b3VsZCB1c2UgKmNhcGFjaXR5UHJvdmlkZXJCKi5cbiAqL1xuV2VpZ2h0PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZXJ2aWNlLiBUaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgdGFzayBkZWZpbml0aW9ucyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgdG8gcmVjZWl2ZSB0aGVpciBvd24gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgYW5kIGl0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG90aGVyIG5ldHdvcmsgbW9kZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgTmV0d29ya2luZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1uZXR3b3JraW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrQ29uZmlndXJhdGlvbiB7XG5Bd3N2cGNDb25maWd1cmF0aW9uPzogQXdzVnBjQ29uZmlndXJhdGlvblxufVxuLyoqXG4gKiBUaGUgVlBDIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3VwcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSB0YXNrLlxuICogICBBbGwgc3BlY2lmaWVkIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c1ZwY0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgSURzIG9mIHRoZSBzZWN1cml0eSBncm91cHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgc2VjdXJpdHkgZ3JvdXAsIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGdyb3VwIGZvciB0aGUgVlBDIGlzIHVzZWQuIFRoZXJlJ3MgYSBsaW1pdCBvZiA1IHNlY3VyaXR5IGdyb3VwcyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgcGVyIGBgYXdzdnBjQ29uZmlndXJhdGlvbmBgLlxuICogICBBbGwgc3BlY2lmaWVkIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHN1Ym5ldHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIFRoZXJlJ3MgYSBsaW1pdCBvZiAxNiBzdWJuZXRzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBwZXIgYGBhd3N2cGNDb25maWd1cmF0aW9uYGAuXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TdWJuZXRzPzogc3RyaW5nW11cbi8qKlxuICogV2hldGhlciB0aGUgdGFzaydzIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UgcmVjZWl2ZXMgYSBwdWJsaWMgSVAgYWRkcmVzcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGBESVNBQkxFRGBgLlxuICovXG5Bc3NpZ25QdWJsaWNJcD86IChcIkRJU0FCTEVEXCIgfCBcIkVOQUJMRURcIilcbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGNvbnN0cmFpbnQgb24gdGFzayBwbGFjZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLXBsYWNlbWVudC1jb25zdHJhaW50cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdSdyZSB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgYXJlbid0IHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRDb25zdHJhaW50IHtcbi8qKlxuICogVGhlIHR5cGUgb2YgY29uc3RyYWludC4gVXNlIGBgZGlzdGluY3RJbnN0YW5jZWBgIHRvIGVuc3VyZSB0aGF0IGVhY2ggdGFzayBpbiBhIHBhcnRpY3VsYXIgZ3JvdXAgaXMgcnVubmluZyBvbiBhIGRpZmZlcmVudCBjb250YWluZXIgaW5zdGFuY2UuIFVzZSBgYG1lbWJlck9mYGAgdG8gcmVzdHJpY3QgdGhlIHNlbGVjdGlvbiB0byBhIGdyb3VwIG9mIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblR5cGU6IChcImRpc3RpbmN0SW5zdGFuY2VcIiB8IFwibWVtYmVyT2ZcIilcbi8qKlxuICogQSBjbHVzdGVyIHF1ZXJ5IGxhbmd1YWdlIGV4cHJlc3Npb24gdG8gYXBwbHkgdG8gdGhlIGNvbnN0cmFpbnQuIFRoZSBleHByZXNzaW9uIGNhbiBoYXZlIGEgbWF4aW11bSBsZW5ndGggb2YgMjAwMCBjaGFyYWN0ZXJzLiBZb3UgY2FuJ3Qgc3BlY2lmeSBhbiBleHByZXNzaW9uIGlmIHRoZSBjb25zdHJhaW50IHR5cGUgaXMgYGBkaXN0aW5jdEluc3RhbmNlYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NsdXN0ZXIgcXVlcnkgbGFuZ3VhZ2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NsdXN0ZXItcXVlcnktbGFuZ3VhZ2UuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5FeHByZXNzaW9uPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYExvYWRCYWxhbmNlcmBgIHByb3BlcnR5IHNwZWNpZmllcyBkZXRhaWxzIG9uIGEgbG9hZCBiYWxhbmNlciB0aGF0IGlzIHVzZWQgd2l0aCBhIHNlcnZpY2UuXG4gKiAgSWYgdGhlIHNlcnZpY2UgaXMgdXNpbmcgdGhlIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHRoZSBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRvIHVzZSBlaXRoZXIgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIFdoZW4geW91IGFyZSBjcmVhdGluZyBhbiBBQ0Rsb25nIGRlcGxveW1lbnQgZ3JvdXAsIHlvdSBzcGVjaWZ5IHR3byB0YXJnZXQgZ3JvdXBzIChyZWZlcnJlZCB0byBhcyBhIGBgdGFyZ2V0R3JvdXBQYWlyYGApLiBFYWNoIHRhcmdldCBncm91cCBiaW5kcyB0byBhIHNlcGFyYXRlIHRhc2sgc2V0IGluIHRoZSBkZXBsb3ltZW50LiBUaGUgbG9hZCBiYWxhbmNlciBjYW4gYWxzbyBoYXZlIHVwIHRvIHR3byBsaXN0ZW5lcnMsIGEgcmVxdWlyZWQgbGlzdGVuZXIgZm9yIHByb2R1Y3Rpb24gdHJhZmZpYyBhbmQgYW4gb3B0aW9uYWwgbGlzdGVuZXIgdGhhdCBhbGxvd3MgeW91IHRvIHRlc3QgbmV3IHJldmlzaW9ucyBvZiB0aGUgc2VydmljZSBiZWZvcmUgcm91dGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gaXQuXG4gKiAgU2VydmljZXMgd2l0aCB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgKGZvciBleGFtcGxlLCB0aG9zZSB3aXRoIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlKSBvbmx5IHN1cHBvcnQgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcnMgYW5kIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnMuIENsYXNzaWMgTG9hZCBCYWxhbmNlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIEFsc28sIHdoZW4geW91IGNyZWF0ZSBhbnkgdGFyZ2V0IGdyb3VwcyBmb3IgdGhlc2Ugc2VydmljZXMsIHlvdSBtdXN0IGNob29zZSBgYGlwYGAgYXMgdGhlIHRhcmdldCB0eXBlLCBub3QgYGBpbnN0YW5jZWBgLiBUYXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkQmFsYW5jZXIge1xuLyoqXG4gKiBUaGUgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCBhIHNlcnZpY2Ugb3IgdGFzayBzZXQuXG4gKiAgQSB0YXJnZXQgZ3JvdXAgQVJOIGlzIG9ubHkgc3BlY2lmaWVkIHdoZW4gdXNpbmcgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIFxuICogIEZvciBzZXJ2aWNlcyB1c2luZyB0aGUgYGBFQ1NgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb3IgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVnaXN0ZXJpbmcgbXVsdGlwbGUgdGFyZ2V0IGdyb3VwcyB3aXRoIGEgc2VydmljZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcmVnaXN0ZXItbXVsdGlwbGUtdGFyZ2V0Z3JvdXBzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3Igc2VydmljZXMgdXNpbmcgdGhlIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSdyZSByZXF1aXJlZCB0byBkZWZpbmUgdHdvIHRhcmdldCBncm91cHMgZm9yIHRoZSBsb2FkIGJhbGFuY2VyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCbHVlL2dyZWVuIGRlcGxveW1lbnQgd2l0aCBDb2RlRGVwbG95XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtYmx1ZWdyZWVuLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFzayBkZWZpbml0aW9uIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBjaG9vc2UgYGBpcGBgIGFzIHRoZSB0YXJnZXQgdHlwZSwgbm90IGBgaW5zdGFuY2VgYC4gRG8gdGhpcyB3aGVuIGNyZWF0aW5nIHlvdXIgdGFyZ2V0IGdyb3VwcyBiZWNhdXNlIHRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIG5vdCBhbiBBbWF6b24gRUMyIGluc3RhbmNlLiBUaGlzIG5ldHdvcmsgbW9kZSBpcyByZXF1aXJlZCBmb3IgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuXG4gKi9cblRhcmdldEdyb3VwQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsb2FkIGJhbGFuY2VyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugb3IgdGFzayBzZXQuXG4gKiAgSWYgeW91IGFyZSB1c2luZyBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIGEgTmV0d29yayBMb2FkIEJhbGFuY2VyIHRoZSBsb2FkIGJhbGFuY2VyIG5hbWUgcGFyYW1ldGVyIHNob3VsZCBiZSBvbWl0dGVkLlxuICovXG5Mb2FkQmFsYW5jZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgKGFzIGl0IGFwcGVhcnMgaW4gYSBjb250YWluZXIgZGVmaW5pdGlvbikgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuXG4gKiAgWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY29udGFpbmVyIG5hbWUgd2hlbiBjb25maWd1cmluZyB0aGUgdGFyZ2V0IGdyb3VwIGZvciBhbiBBbWF6b24gRUNTIGxvYWQgYmFsYW5jZXIuXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgb24gdGhlIGNvbnRhaW5lciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci4gVGhpcyBwb3J0IG11c3QgY29ycmVzcG9uZCB0byBhIGBgY29udGFpbmVyUG9ydGBgIGluIHRoZSB0YXNrIGRlZmluaXRpb24gdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIGFyZSB1c2luZy4gRm9yIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSBjb250YWluZXIgaW5zdGFuY2UgdGhleSdyZSBsYXVuY2hlZCBvbiBtdXN0IGFsbG93IGluZ3Jlc3MgdHJhZmZpYyBvbiB0aGUgYGBob3N0UG9ydGBgIG9mIHRoZSBwb3J0IG1hcHBpbmcuXG4gKi9cbkNvbnRhaW5lclBvcnQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgc2VydmljZSB0byBkaXNjb3ZlciBhbmQgY29ubmVjdCB0byBzZXJ2aWNlcywgYW5kIGJlIGRpc2NvdmVyZWQgYnksIGFuZCBjb25uZWN0ZWQgZnJvbSwgb3RoZXIgc2VydmljZXMgd2l0aGluIGEgbmFtZXNwYWNlLlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgbGlzdCBvZiBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZSBvYmplY3RzLiBUaGVzZSBhcmUgbmFtZXMgYW5kIGFsaWFzZXMgKGFsc28ga25vd24gYXMgZW5kcG9pbnRzKSB0aGF0IGFyZSB1c2VkIGJ5IG90aGVyIEFtYXpvbiBFQ1Mgc2VydmljZXMgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuIFxuICogIFRoaXMgZmllbGQgaXMgbm90IHJlcXVpcmVkIGZvciBhIFwiY2xpZW50XCIgQW1hem9uIEVDUyBzZXJ2aWNlIHRoYXQncyBhIG1lbWJlciBvZiBhIG5hbWVzcGFjZSBvbmx5IHRvIGNvbm5lY3QgdG8gb3RoZXIgc2VydmljZXMgd2l0aGluIHRoZSBuYW1lc3BhY2UuIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSBhIGZyb250ZW5kIGFwcGxpY2F0aW9uIHRoYXQgYWNjZXB0cyBpbmNvbWluZyByZXF1ZXN0cyBmcm9tIGVpdGhlciBhIGxvYWQgYmFsYW5jZXIgdGhhdCdzIGF0dGFjaGVkIHRvIHRoZSBzZXJ2aWNlIG9yIGJ5IG90aGVyIG1lYW5zLlxuICogIEFuIG9iamVjdCBzZWxlY3RzIGEgcG9ydCBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24sIGFzc2lnbnMgYSBuYW1lIGZvciB0aGUgQ01BUGxvbmcgc2VydmljZSwgYW5kIGEgbGlzdCBvZiBhbGlhc2VzIChlbmRwb2ludHMpIGFuZCBwb3J0cyBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byByZWZlciB0byB0aGlzIHNlcnZpY2UuXG4gKi9cblNlcnZpY2VzPzogU2VydmljZUNvbm5lY3RTZXJ2aWNlW11cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIFNlcnZpY2UgQ29ubmVjdCB3aXRoIHRoaXMgc2VydmljZS5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxuTG9nQ29uZmlndXJhdGlvbj86IExvZ0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWVzcGFjZSBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIENNQVBsb25nIG5hbWVzcGFjZSBmb3IgdXNlIHdpdGggU2VydmljZSBDb25uZWN0LiBUaGUgbmFtZXNwYWNlIG11c3QgYmUgaW4gdGhlIHNhbWUgQVdTIFJlZ2lvbiBhcyB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIGFuZCBjbHVzdGVyLiBUaGUgdHlwZSBvZiBuYW1lc3BhY2UgZG9lc24ndCBhZmZlY3QgU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDTUFQbG9uZywgc2VlIFtXb3JraW5nIHdpdGggU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2RnL3dvcmtpbmctd2l0aC1zZXJ2aWNlcy5odG1sKSBpbiB0aGUgKkRldmVsb3BlciBHdWlkZSouXG4gKi9cbk5hbWVzcGFjZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgU2VydmljZSBDb25uZWN0IHNlcnZpY2Ugb2JqZWN0IGNvbmZpZ3VyYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFNlcnZpY2Uge1xuVGltZW91dD86IFRpbWVvdXRDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBwb3J0IG51bWJlciBmb3IgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eSB0byBsaXN0ZW4gb24uXG4gKiAgVXNlIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIHRvIGJ5cGFzcyB0aGUgcHJveHkgZm9yIHRyYWZmaWMgb24gdGhlIHBvcnQgbnVtYmVyIHNwZWNpZmllZCBpbiB0aGUgbmFtZWQgYGBwb3J0TWFwcGluZ2BgIGluIHRoZSB0YXNrIGRlZmluaXRpb24gb2YgdGhpcyBhcHBsaWNhdGlvbiwgYW5kIHRoZW4gdXNlIGl0IGluIHlvdXIgVlBDIHNlY3VyaXR5IGdyb3VwcyB0byBhbGxvdyB0cmFmZmljIGludG8gdGhlIHByb3h5IGZvciB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqICBJbiBgYGF3c3ZwY2BgIG1vZGUgYW5kIEZhcmdhdGUsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBjb250YWluZXIgcG9ydCBudW1iZXIuIFRoZSBjb250YWluZXIgcG9ydCBudW1iZXIgaXMgaW4gdGhlIGBgcG9ydE1hcHBpbmdgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJbiBicmlkZ2UgbW9kZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGVwaGVtZXJhbCBwb3J0IG9mIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkuXG4gKi9cbkluZ3Jlc3NQb3J0T3ZlcnJpZGU/OiBudW1iZXJcbi8qKlxuICogVGhlIGxpc3Qgb2YgY2xpZW50IGFsaWFzZXMgZm9yIHRoaXMgU2VydmljZSBDb25uZWN0IHNlcnZpY2UuIFlvdSB1c2UgdGhlc2UgdG8gYXNzaWduIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucy4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNsaWVudCBhbGlhc2VzIHRoYXQgeW91IGNhbiBoYXZlIGluIHRoaXMgbGlzdCBpcyAxLlxuICogIEVhY2ggYWxpYXMgKFwiZW5kcG9pbnRcIikgaXMgYSBmdWxseS1xdWFsaWZpZWQgbmFtZSBhbmQgcG9ydCBudW1iZXIgdGhhdCBvdGhlciBBbWF6b24gRUNTIHRhc2tzIChcImNsaWVudHNcIikgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS5cbiAqICBFYWNoIG5hbWUgYW5kIHBvcnQgbWFwcGluZyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZS5cbiAqICBGb3IgZWFjaCBgYFNlcnZpY2VDb25uZWN0U2VydmljZWBgLCB5b3UgbXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSBgYGNsaWVudEFsaWFzYGAgd2l0aCBvbmUgYGBwb3J0YGAuXG4gKi9cbkNsaWVudEFsaWFzZXM/OiBTZXJ2aWNlQ29ubmVjdENsaWVudEFsaWFzW11cblRscz86IFNlcnZpY2VDb25uZWN0VGxzQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXMgdGhlIG5hbWUgb2YgdGhlIG5ldyBDTUFQIHNlcnZpY2UgdGhhdCBBbWF6b24gRUNTIGNyZWF0ZXMgZm9yIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLiBUaGlzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgQ01BUCBuYW1lc3BhY2UuIFRoZSBuYW1lIGNhbiBjb250YWluIHVwIHRvIDY0IGNoYXJhY3RlcnMuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcyAoXyksIGFuZCBoeXBoZW5zICgtKS4gVGhlIG5hbWUgY2FuJ3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi5cbiAqICBJZiB0aGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgcG9ydCBtYXBwaW5nIG5hbWUgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIGlzIHVzZWQgaW4gYGBwb3J0TmFtZS5uYW1lc3BhY2VgYC5cbiAqL1xuRGlzY292ZXJ5TmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYGBwb3J0TmFtZWBgIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBgYHBvcnRNYXBwaW5nc2BgIGZyb20gYWxsIHRoZSBjb250YWluZXJzIGluIHRoZSB0YXNrIGRlZmluaXRpb24gb2YgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKi9cblBvcnROYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgY29uZmlndXJlZCB0aW1lb3V0cyBmb3IgU2VydmljZSBDb25uZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIHdhaXRpbmcgZm9yIHRoZSB1cHN0cmVhbSB0byByZXNwb25kIHdpdGggYSBjb21wbGV0ZSByZXNwb25zZSBwZXIgcmVxdWVzdC4gQSB2YWx1ZSBvZiBgYDBgYCBjYW4gYmUgc2V0IHRvIGRpc2FibGUgYGBwZXJSZXF1ZXN0VGltZW91dGBgLiBgYHBlclJlcXVlc3RUaW1lb3V0YGAgY2FuIG9ubHkgYmUgc2V0IGlmIFNlcnZpY2UgQ29ubmVjdCBgYGFwcFByb3RvY29sYGAgaXNuJ3QgYGBUQ1BgYC4gT25seSBgYGlkbGVUaW1lb3V0YGAgaXMgYWxsb3dlZCBmb3IgYGBUQ1BgYCBgYGFwcFByb3RvY29sYGAuXG4gKi9cblBlclJlcXVlc3RUaW1lb3V0U2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyBhIGNvbm5lY3Rpb24gd2lsbCBzdGF5IGFjdGl2ZSB3aGlsZSBpZGxlLiBBIHZhbHVlIG9mIGBgMGBgIGNhbiBiZSBzZXQgdG8gZGlzYWJsZSBgYGlkbGVUaW1lb3V0YGAuXG4gKiAgVGhlIGBgaWRsZVRpbWVvdXRgYCBkZWZhdWx0IGZvciBgYEhUVFBgYC9gYEhUVFAyYGAvYGBHUlBDYGAgaXMgNSBtaW51dGVzLlxuICogIFRoZSBgYGlkbGVUaW1lb3V0YGAgZGVmYXVsdCBmb3IgYGBUQ1BgYCBpcyAxIGhvdXIuXG4gKi9cbklkbGVUaW1lb3V0U2Vjb25kcz86IG51bWJlclxufVxuLyoqXG4gKiBFYWNoIGFsaWFzIChcImVuZHBvaW50XCIpIGlzIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgYW5kIHBvcnQgbnVtYmVyIHRoYXQgb3RoZXIgdGFza3MgKFwiY2xpZW50c1wiKSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLlxuICogIEVhY2ggbmFtZSBhbmQgcG9ydCBtYXBwaW5nIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgbmFtZXNwYWNlLlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdENsaWVudEFsaWFzIHtcbi8qKlxuICogVGhlIGBgZG5zTmFtZWBgIGlzIHRoZSBuYW1lIHRoYXQgeW91IHVzZSBpbiB0aGUgYXBwbGljYXRpb25zIG9mIGNsaWVudCB0YXNrcyB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS4gVGhlIG5hbWUgbXVzdCBiZSBhIHZhbGlkIEROUyBuYW1lIGJ1dCBkb2Vzbid0IG5lZWQgdG8gYmUgZnVsbHktcXVhbGlmaWVkLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSB1cCB0byAxMjcgY2hhcmFjdGVycy4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIChfKSwgaHlwaGVucyAoLSksIGFuZCBwZXJpb2RzICguKS4gVGhlIG5hbWUgY2FuJ3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi5cbiAqICBJZiB0aGlzIHBhcmFtZXRlciBpc24ndCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgZGlzY292ZXJ5TmFtZS5uYW1lc3BhY2VgYCBpcyB1c2VkLiBJZiB0aGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgcG9ydCBtYXBwaW5nIG5hbWUgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIGlzIHVzZWQgaW4gYGBwb3J0TmFtZS5uYW1lc3BhY2VgYC5cbiAqICBUbyBhdm9pZCBjaGFuZ2luZyB5b3VyIGFwcGxpY2F0aW9ucyBpbiBjbGllbnQgQW1hem9uIEVDUyBzZXJ2aWNlcywgc2V0IHRoaXMgdG8gdGhlIHNhbWUgbmFtZSB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdXNlcyBieSBkZWZhdWx0LiBGb3IgZXhhbXBsZSwgYSBmZXcgY29tbW9uIG5hbWVzIGFyZSBgYGRhdGFiYXNlYGAsIGBgZGJgYCwgb3IgdGhlIGxvd2VyY2FzZSBuYW1lIG9mIGEgZGF0YWJhc2UsIHN1Y2ggYXMgYGBteXNxbGBgIG9yIGBgcmVkaXNgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5EbnNOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBsaXN0ZW5pbmcgcG9ydCBudW1iZXIgZm9yIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkuIFRoaXMgcG9ydCBpcyBhdmFpbGFibGUgaW5zaWRlIG9mIGFsbCBvZiB0aGUgdGFza3Mgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZS5cbiAqICBUbyBhdm9pZCBjaGFuZ2luZyB5b3VyIGFwcGxpY2F0aW9ucyBpbiBjbGllbnQgQW1hem9uIEVDUyBzZXJ2aWNlcywgc2V0IHRoaXMgdG8gdGhlIHNhbWUgcG9ydCB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdXNlcyBieSBkZWZhdWx0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblBvcnQ6IG51bWJlclxufVxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUbHNDb25maWd1cmF0aW9uIHtcbklzc3VlckNlcnRpZmljYXRlQXV0aG9yaXR5OiBTZXJ2aWNlQ29ubmVjdFRsc0NlcnRpZmljYXRlQXV0aG9yaXR5XG4vKipcbiAqIFRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkuXG4gKi9cbkttc0tleT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIFNlcnZpY2UgQ29ubmVjdCBUTFMuXG4gKi9cblJvbGVBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHNpZ25lciBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUbHNDZXJ0aWZpY2F0ZUF1dGhvcml0eSB7XG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSBjZXJ0aWZpY2F0ZS5cbiAqL1xuQXdzUGNhQXV0aG9yaXR5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYExvZ0NvbmZpZ2BgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWxvZy1kcml2ZXJgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICBCeSBkZWZhdWx0LCBjb250YWluZXJzIHVzZSB0aGUgc2FtZSBsb2dnaW5nIGRyaXZlciB0aGF0IHRoZSBEb2NrZXIgZGFlbW9uIHVzZXMuIEhvd2V2ZXIsIHRoZSBjb250YWluZXIgbWlnaHQgdXNlIGEgZGlmZmVyZW50IGxvZ2dpbmcgZHJpdmVyIHRoYW4gdGhlIERvY2tlciBkYWVtb24gYnkgc3BlY2lmeWluZyBhIGxvZyBkcml2ZXIgY29uZmlndXJhdGlvbiBpbiB0aGUgY29udGFpbmVyIGRlZmluaXRpb24uXG4gKiAgVW5kZXJzdGFuZCB0aGUgZm9sbG93aW5nIHdoZW4gc3BlY2lmeWluZyBhIGxvZyBjb25maWd1cmF0aW9uIGZvciB5b3VyIGNvbnRhaW5lcnMuXG4gKiAgICsgIEFtYXpvbiBFQ1MgY3VycmVudGx5IHN1cHBvcnRzIGEgc3Vic2V0IG9mIHRoZSBsb2dnaW5nIGRyaXZlcnMgYXZhaWxhYmxlIHRvIHRoZSBEb2NrZXIgZGFlbW9uLiBBZGRpdGlvbmFsIGxvZyBkcml2ZXJzIG1heSBiZSBhdmFpbGFibGUgaW4gZnV0dXJlIHJlbGVhc2VzIG9mIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudC5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCxgYHN5c2xvZ2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogICArICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTggb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IGFyZSBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBtdXN0IHJlZ2lzdGVyIHRoZSBhdmFpbGFibGUgbG9nZ2luZyBkcml2ZXJzIHdpdGggdGhlIGBgRUNTX0FWQUlMQUJMRV9MT0dHSU5HX0RSSVZFUlNgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWZvcmUgY29udGFpbmVycyBwbGFjZWQgb24gdGhhdCBpbnN0YW5jZSBjYW4gdXNlIHRoZXNlIGxvZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1hZ2VudC1jb25maWcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICArICBGb3IgdGFza3MgdGhhdCBhcmUgb24gRkFSR0FURWxvbmcsIGJlY2F1c2UgeW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIHlvdXIgdGFza3MgYXJlIGhvc3RlZCBvbiwgYW55IGFkZGl0aW9uYWwgc29mdHdhcmUgbmVlZGVkIG11c3QgYmUgaW5zdGFsbGVkIG91dHNpZGUgb2YgdGhlIHRhc2suIEZvciBleGFtcGxlLCB0aGUgRmx1ZW50ZCBvdXRwdXQgYWdncmVnYXRvcnMgb3IgYSByZW1vdGUgaG9zdCBydW5uaW5nIExvZ3N0YXNoIHRvIHNlbmQgR2VsZiBsb2dzIHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgc2VjcmV0cyB0byBwYXNzIHRvIHRoZSBsb2cgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblNlY3JldE9wdGlvbnM/OiBTZWNyZXRbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlbmQgdG8gdGhlIGxvZyBkcml2ZXIuXG4gKiAgVGhlIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IGRlcGVuZCBvbiB0aGUgbG9nIGRyaXZlci4gU29tZSBvZiB0aGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB5b3UgdXNlIHRoZSBgYGF3c2xvZ3NgYCBsb2cgZHJpdmVyIHRvIHJvdXRlIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggaW5jbHVkZSB0aGUgZm9sbG93aW5nOlxuICogICArIGF3c2xvZ3MtY3JlYXRlLWdyb3VwIFJlcXVpcmVkOiBObyBTcGVjaWZ5IHdoZXRoZXIgeW91IHdhbnQgdGhlIGxvZyBncm91cCB0byBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuIElmIHRoaXMgb3B0aW9uIGlzbid0IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gZmFsc2UuIFlvdXIgSUFNIHBvbGljeSBtdXN0IGluY2x1ZGUgdGhlIGxvZ3M6Q3JlYXRlTG9nR3JvdXAgcGVybWlzc2lvbiBiZWZvcmUgeW91IGF0dGVtcHQgdG8gdXNlIGF3c2xvZ3MtY3JlYXRlLWdyb3VwLiArIGF3c2xvZ3MtcmVnaW9uIFJlcXVpcmVkOiBZZXMgU3BlY2lmeSB0aGUgUmVnaW9uIHRoYXQgdGhlIGF3c2xvZ3MgbG9nIGRyaXZlciBpcyB0byBzZW5kIHlvdXIgRG9ja2VyIGxvZ3MgdG8uIFlvdSBjYW4gY2hvb3NlIHRvIHNlbmQgYWxsIG9mIHlvdXIgbG9ncyBmcm9tIGNsdXN0ZXJzIGluIGRpZmZlcmVudCBSZWdpb25zIHRvIGEgc2luZ2xlIHJlZ2lvbiBpbiBDbG91ZFdhdGNoIExvZ3MuIFRoaXMgaXMgc28gdGhhdCB0aGV5J3JlIGFsbCB2aXNpYmxlIGluIG9uZSBsb2NhdGlvbi4gT3RoZXJ3aXNlLCB5b3UgY2FuIHNlcGFyYXRlIHRoZW0gYnkgUmVnaW9uIGZvciBtb3JlIGdyYW51bGFyaXR5LiBNYWtlIHN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGxvZyBncm91cCBleGlzdHMgaW4gdGhlIFJlZ2lvbiB0aGF0IHlvdSBzcGVjaWZ5IHdpdGggdGhpcyBvcHRpb24uICsgYXdzbG9ncy1ncm91cCBSZXF1aXJlZDogWWVzIE1ha2Ugc3VyZSB0byBzcGVjaWZ5IGEgbG9nIGdyb3VwIHRoYXQgdGhlIGF3c2xvZ3MgbG9nIGRyaXZlciBzZW5kcyBpdHMgbG9nIHN0cmVhbXMgdG8uICsgYXdzbG9ncy1zdHJlYW0tcHJlZml4IFJlcXVpcmVkOiBZZXMsIHdoZW4gdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuT3B0aW9uYWwgZm9yIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHJlcXVpcmVkIGZvciB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS4gVXNlIHRoZSBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggb3B0aW9uIHRvIGFzc29jaWF0ZSBhIGxvZyBzdHJlYW0gd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeCwgdGhlIGNvbnRhaW5lciBuYW1lLCBhbmQgdGhlIElEIG9mIHRoZSBBbWF6b24gRUNTIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIElmIHlvdSBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24sIHRoZW4gdGhlIGxvZyBzdHJlYW0gdGFrZXMgdGhlIGZvcm1hdCBwcmVmaXgtbmFtZS9jb250YWluZXItbmFtZS9lY3MtdGFzay1pZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSBpcyBuYW1lZCBhZnRlciB0aGUgY29udGFpbmVyIElEIHRoYXQncyBhc3NpZ25lZCBieSB0aGUgRG9ja2VyIGRhZW1vbiBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlLiBCZWNhdXNlIGl0J3MgZGlmZmljdWx0IHRvIHRyYWNlIGxvZ3MgYmFjayB0byB0aGUgY29udGFpbmVyIHRoYXQgc2VudCB0aGVtIHdpdGgganVzdCB0aGUgRG9ja2VyIGNvbnRhaW5lciBJRCAod2hpY2ggaXMgb25seSBhdmFpbGFibGUgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSksIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24uIEZvciBBbWF6b24gRUNTIHNlcnZpY2VzLCB5b3UgY2FuIHVzZSB0aGUgc2VydmljZSBuYW1lIGFzIHRoZSBwcmVmaXguIERvaW5nIHNvLCB5b3UgY2FuIHRyYWNlIGxvZyBzdHJlYW1zIHRvIHRoZSBzZXJ2aWNlIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLCB0aGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIHRoYXQgc2VudCB0aGVtLCBhbmQgdGhlIElEIG9mIHRoZSB0YXNrIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLiBZb3UgbXVzdCBzcGVjaWZ5IGEgc3RyZWFtLXByZWZpeCBmb3IgeW91ciBsb2dzIHRvIGhhdmUgeW91ciBsb2dzIGFwcGVhciBpbiB0aGUgTG9nIHBhbmUgd2hlbiB1c2luZyB0aGUgQW1hem9uIEVDUyBjb25zb2xlLiArIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IFJlcXVpcmVkOiBObyBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gaW4gUHl0aG9uIHN0cmZ0aW1lIGZvcm1hdC4gQSBsb2cgbWVzc2FnZSBjb25zaXN0cyBvZiBhIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGFuZCBhbnkgZm9sbG93aW5nIGxpbmVzIHRoYXQgZG9u4oCZdCBtYXRjaCB0aGUgcGF0dGVybi4gVGhlIG1hdGNoZWQgbGluZSBpcyB0aGUgZGVsaW1pdGVyIGJldHdlZW4gbG9nIG1lc3NhZ2VzLiBPbmUgZXhhbXBsZSBvZiBhIHVzZSBjYXNlIGZvciB1c2luZyB0aGlzIGZvcm1hdCBpcyBmb3IgcGFyc2luZyBvdXRwdXQgc3VjaCBhcyBhIHN0YWNrIGR1bXAsIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBiZSBsb2dnZWQgaW4gbXVsdGlwbGUgZW50cmllcy4gVGhlIGNvcnJlY3QgcGF0dGVybiBhbGxvd3MgaXQgdG8gYmUgY2FwdHVyZWQgaW4gYSBzaW5nbGUgZW50cnkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQuIFlvdSBjYW5ub3QgY29uZmlndXJlIGJvdGggdGhlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGFuZCBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIG9wdGlvbnMuIE11bHRpbGluZSBsb2dnaW5nIHBlcmZvcm1zIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBtYXRjaGluZyBvZiBhbGwgbG9nIG1lc3NhZ2VzLiBUaGlzIG1pZ2h0IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbG9nZ2luZyBwZXJmb3JtYW5jZS4gKyBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIFJlcXVpcmVkOiBObyBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gdGhhdCB1c2VzIGEgcmVndWxhciBleHByZXNzaW9uLiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybi4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBpcyBhbHNvIGNvbmZpZ3VyZWQuIFlvdSBjYW5ub3QgY29uZmlndXJlIGJvdGggdGhlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGFuZCBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIG9wdGlvbnMuIE11bHRpbGluZSBsb2dnaW5nIHBlcmZvcm1zIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBtYXRjaGluZyBvZiBhbGwgbG9nIG1lc3NhZ2VzLiBUaGlzIG1pZ2h0IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbG9nZ2luZyBwZXJmb3JtYW5jZS4gKyBtb2RlIFJlcXVpcmVkOiBObyBWYWxpZCB2YWx1ZXM6IG5vbi1ibG9ja2luZyB8IGJsb2NraW5nIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIGRlbGl2ZXJ5IG1vZGUgb2YgbG9nIG1lc3NhZ2VzIGZyb20gdGhlIGNvbnRhaW5lciB0byBDbG91ZFdhdGNoIExvZ3MuIFRoZSBkZWxpdmVyeSBtb2RlIHlvdSBjaG9vc2UgYWZmZWN0cyBhcHBsaWNhdGlvbiBhdmFpbGFiaWxpdHkgd2hlbiB0aGUgZmxvdyBvZiBsb2dzIGZyb20gY29udGFpbmVyIHRvIENsb3VkV2F0Y2ggaXMgaW50ZXJydXB0ZWQuIElmIHlvdSB1c2UgdGhlIGJsb2NraW5nIG1vZGUgYW5kIHRoZSBmbG93IG9mIGxvZ3MgdG8gQ2xvdWRXYXRjaCBpcyBpbnRlcnJ1cHRlZCwgY2FsbHMgZnJvbSBjb250YWluZXIgY29kZSB0byB3cml0ZSB0byB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyB3aWxsIGJsb2NrLiBUaGUgbG9nZ2luZyB0aHJlYWQgb2YgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmxvY2sgYXMgYSByZXN1bHQuIFRoaXMgbWF5IGNhdXNlIHRoZSBhcHBsaWNhdGlvbiB0byBiZWNvbWUgdW5yZXNwb25zaXZlIGFuZCBsZWFkIHRvIGNvbnRhaW5lciBoZWFsdGhjaGVjayBmYWlsdXJlLiBJZiB5b3UgdXNlIHRoZSBub24tYmxvY2tpbmcgbW9kZSwgdGhlIGNvbnRhaW5lcidzIGxvZ3MgYXJlIGluc3RlYWQgc3RvcmVkIGluIGFuIGluLW1lbW9yeSBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvbmZpZ3VyZWQgd2l0aCB0aGUgbWF4LWJ1ZmZlci1zaXplIG9wdGlvbi4gVGhpcyBwcmV2ZW50cyB0aGUgYXBwbGljYXRpb24gZnJvbSBiZWNvbWluZyB1bnJlc3BvbnNpdmUgd2hlbiBsb2dzIGNhbm5vdCBiZSBzZW50IHRvIENsb3VkV2F0Y2guIFdlIHJlY29tbWVuZCB1c2luZyB0aGlzIG1vZGUgaWYgeW91IHdhbnQgdG8gZW5zdXJlIHNlcnZpY2UgYXZhaWxhYmlsaXR5IGFuZCBhcmUgb2theSB3aXRoIHNvbWUgbG9nIGxvc3MuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUHJldmVudGluZyBsb2cgbG9zcyB3aXRoIG5vbi1ibG9ja2luZyBtb2RlIGluIHRoZSBhd3Nsb2dzIGNvbnRhaW5lciBsb2cgZHJpdmVyLiArIG1heC1idWZmZXItc2l6ZSBSZXF1aXJlZDogTm8gRGVmYXVsdCB2YWx1ZTogMW0gV2hlbiBub24tYmxvY2tpbmcgbW9kZSBpcyB1c2VkLCB0aGUgbWF4LWJ1ZmZlci1zaXplIGxvZyBvcHRpb24gY29udHJvbHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0aGF0J3MgdXNlZCBmb3IgaW50ZXJtZWRpYXRlIG1lc3NhZ2Ugc3RvcmFnZS4gTWFrZSBzdXJlIHRvIHNwZWNpZnkgYW4gYWRlcXVhdGUgYnVmZmVyIHNpemUgYmFzZWQgb24geW91ciBhcHBsaWNhdGlvbi4gV2hlbiB0aGUgYnVmZmVyIGZpbGxzIHVwLCBmdXJ0aGVyIGxvZ3MgY2Fubm90IGJlIHN0b3JlZC4gTG9ncyB0aGF0IGNhbm5vdCBiZSBzdG9yZWQgYXJlIGxvc3QuIFxuICogIFRvIHJvdXRlIGxvZ3MgdXNpbmcgdGhlIGBgc3BsdW5rYGAgbG9nIHJvdXRlciwgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGBgc3BsdW5rLXRva2VuYGAgYW5kIGEgYGBzcGx1bmstdXJsYGAuXG4gKiAgV2hlbiB5b3UgdXNlIHRoZSBgYGF3c2ZpcmVsZW5zYGAgbG9nIHJvdXRlciB0byByb3V0ZSBsb2dzIHRvIGFuIEFXUyBTZXJ2aWNlIG9yIEFXUyBQYXJ0bmVyIE5ldHdvcmsgZGVzdGluYXRpb24gZm9yIGxvZyBzdG9yYWdlIGFuZCBhbmFseXRpY3MsIHlvdSBjYW4gc2V0IHRoZSBgYGxvZy1kcml2ZXItYnVmZmVyLWxpbWl0YGAgb3B0aW9uIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgYXJlIGJ1ZmZlcmVkIGluIG1lbW9yeSwgYmVmb3JlIGJlaW5nIHNlbnQgdG8gdGhlIGxvZyByb3V0ZXIgY29udGFpbmVyLiBJdCBjYW4gaGVscCB0byByZXNvbHZlIHBvdGVudGlhbCBsb2cgbG9zcyBpc3N1ZSBiZWNhdXNlIGhpZ2ggdGhyb3VnaHB1dCBtaWdodCByZXN1bHQgaW4gbWVtb3J5IHJ1bm5pbmcgb3V0IGZvciB0aGUgYnVmZmVyIGluc2lkZSBvZiBEb2NrZXIuXG4gKiAgT3RoZXIgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB1c2luZyBgYGF3c2ZpcmVsZW5zYGAgdG8gcm91dGUgbG9ncyBkZXBlbmQgb24gdGhlIGRlc3RpbmF0aW9uLiBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gRGF0YSBGaXJlaG9zZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBBV1MgUmVnaW9uIHdpdGggYGByZWdpb25gYCBhbmQgYSBuYW1lIGZvciB0aGUgbG9nIHN0cmVhbSB3aXRoIGBgZGVsaXZlcnlfc3RyZWFtYGAuXG4gKiAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIEtpbmVzaXMgRGF0YSBTdHJlYW1zLCB5b3UgY2FuIHNwZWNpZnkgYW4gQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgZGF0YSBzdHJlYW0gbmFtZSB3aXRoIGBgc3RyZWFtYGAuXG4gKiAgIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UsIHlvdSBjYW4gc3BlY2lmeSBvcHRpb25zIGxpa2UgYGBOYW1lYGAsIGBgSG9zdGBgIChPcGVuU2VhcmNoIFNlcnZpY2UgZW5kcG9pbnQgd2l0aG91dCBwcm90b2NvbCksIGBgUG9ydGBgLCBgYEluZGV4YGAsIGBgVHlwZWBgLCBgYEF3c19hdXRoYGAsIGBgQXdzX3JlZ2lvbmBgLCBgYFN1cHByZXNzX1R5cGVfTmFtZWBgLCBhbmQgYGB0bHNgYC5cbiAqICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gUzMsIHlvdSBjYW4gc3BlY2lmeSB0aGUgYnVja2V0IHVzaW5nIHRoZSBgYGJ1Y2tldGBgIG9wdGlvbi4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYGByZWdpb25gYCwgYGB0b3RhbF9maWxlX3NpemVgYCwgYGB1cGxvYWRfdGltZW91dGBgLCBhbmQgYGB1c2VfcHV0X29iamVjdGBgIGFzIG9wdGlvbnMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjE5IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLiBUbyBjaGVjayB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgdmVyc2lvbiBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSwgbG9nIGluIHRvIHlvdXIgY29udGFpbmVyIGluc3RhbmNlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOiBgYHN1ZG8gZG9ja2VyIHZlcnNpb24gLS1mb3JtYXQgJ3t7LlNlcnZlci5BUElWZXJzaW9ufX0nYGBcbiAqL1xuT3B0aW9ucz86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLnsxLH1cIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIGRyaXZlciB0byB1c2UgZm9yIHRoZSBjb250YWluZXIuXG4gKiAgRm9yIHRhc2tzIG9uIEZBUkdBVEVsb25nLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgdGFza3MgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBmbHVlbnRkYGAsIGBgZ2VsZmBgLCBgYGpzb24tZmlsZWBgLCBgYGpvdXJuYWxkYGAsIGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gQ2xvdWRXYXRjaF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfYXdzbG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzZmlyZWxlbnNgYCBsb2cgZHJpdmVyLCBzZWUgW1NlbmQgQW1hem9uIEVDUyBsb2dzIHRvIGFuIHNlcnZpY2Ugb3IgUGFydG5lcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfZmlyZWxlbnMuaHRtbCkuXG4gKiAgIElmIHlvdSBoYXZlIGEgY3VzdG9tIGRyaXZlciB0aGF0IGlzbid0IGxpc3RlZCwgeW91IGNhbiBmb3JrIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBwcm9qZWN0IHRoYXQncyBbYXZhaWxhYmxlIG9uIEdpdEh1Yl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYW1hem9uLWVjcy1hZ2VudCkgYW5kIGN1c3RvbWl6ZSBpdCB0byB3b3JrIHdpdGggdGhhdCBkcml2ZXIuIFdlIGVuY291cmFnZSB5b3UgdG8gc3VibWl0IHB1bGwgcmVxdWVzdHMgZm9yIGNoYW5nZXMgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBoYXZlIGluY2x1ZGVkLiBIb3dldmVyLCB3ZSBkb24ndCBjdXJyZW50bHkgcHJvdmlkZSBzdXBwb3J0IGZvciBydW5uaW5nIG1vZGlmaWVkIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLlxuICovXG5Mb2dEcml2ZXI/OiBzdHJpbmdcbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2VjcmV0IHRvIGV4cG9zZSB0byB5b3VyIGNvbnRhaW5lci4gU2VjcmV0cyBjYW4gYmUgZXhwb3NlZCB0byBhIGNvbnRhaW5lciBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAgICsgIFRvIGluamVjdCBzZW5zaXRpdmUgZGF0YSBpbnRvIHlvdXIgY29udGFpbmVycyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHVzZSB0aGUgYGBzZWNyZXRzYGAgY29udGFpbmVyIGRlZmluaXRpb24gcGFyYW1ldGVyLlxuICogICArICBUbyByZWZlcmVuY2Ugc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIHRoZSBsb2cgY29uZmlndXJhdGlvbiBvZiBhIGNvbnRhaW5lciwgdXNlIHRoZSBgYHNlY3JldE9wdGlvbnNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgc2Vuc2l0aXZlIGRhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldCB7XG4vKipcbiAqIFRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHRoZSBjb250YWluZXIuIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9mIHRoZSBBU01sb25nIHNlY3JldCBvciB0aGUgZnVsbCBBUk4gb2YgdGhlIHBhcmFtZXRlciBpbiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZS5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVpcmUgSUFNbG9uZyBwZXJtaXNzaW9ucywgc2VlIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1zZWNyZXRzLmh0bWwjc2VjcmV0cy1pYW0pIChmb3IgU2VjcmV0cyBNYW5hZ2VyKSBvciBbUmVxdWlyZWQgSUFNIHBlcm1pc3Npb25zIGZvciBBbWF6b24gRUNTIHNlY3JldHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEtcGFyYW1ldGVycy5odG1sKSAoZm9yIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgc3RvcmUpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgdGhlIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGFyYW1ldGVyIGV4aXN0cyBpbiB0aGUgc2FtZSBSZWdpb24gYXMgdGhlIHRhc2sgeW91J3JlIGxhdW5jaGluZywgdGhlbiB5b3UgY2FuIHVzZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9yIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4gSWYgdGhlIHBhcmFtZXRlciBleGlzdHMgaW4gYSBkaWZmZXJlbnQgUmVnaW9uLCB0aGVuIHRoZSBmdWxsIEFSTiBtdXN0IGJlIHNwZWNpZmllZC5cbiAqL1xuVmFsdWVGcm9tOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHNlY3JldC5cbiAqL1xuTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gSWYgbm8gZGVwbG95bWVudCBjb250cm9sbGVyIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBFQ1NgYCBpcyB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDb250cm9sbGVyIHtcbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlIHRvIHVzZS4gVGhlcmUgYXJlIHRocmVlIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcyBhdmFpbGFibGU6XG4gKiAgICsgRUNTIFRoZSByb2xsaW5nIHVwZGF0ZSAoRUNTKSBkZXBsb3ltZW50IHR5cGUgaW52b2x2ZXMgcmVwbGFjaW5nIHRoZSBjdXJyZW50IHJ1bm5pbmcgdmVyc2lvbiBvZiB0aGUgY29udGFpbmVyIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uLiBUaGUgbnVtYmVyIG9mIGNvbnRhaW5lcnMgQW1hem9uIEVDUyBhZGRzIG9yIHJlbW92ZXMgZnJvbSB0aGUgc2VydmljZSBkdXJpbmcgYSByb2xsaW5nIHVwZGF0ZSBpcyBjb250cm9sbGVkIGJ5IGFkanVzdGluZyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgaGVhbHRoeSB0YXNrcyBhbGxvd2VkIGR1cmluZyBhIHNlcnZpY2UgZGVwbG95bWVudCwgYXMgc3BlY2lmaWVkIGluIHRoZSBEZXBsb3ltZW50Q29uZmlndXJhdGlvbi4gKyBDT0RFX0RFUExPWSBUaGUgYmx1ZS9ncmVlbiAoQ09ERV9ERVBMT1kpIGRlcGxveW1lbnQgdHlwZSB1c2VzIHRoZSBibHVlL2dyZWVuIGRlcGxveW1lbnQgbW9kZWwgcG93ZXJlZCBieSAsIHdoaWNoIGFsbG93cyB5b3UgdG8gdmVyaWZ5IGEgbmV3IGRlcGxveW1lbnQgb2YgYSBzZXJ2aWNlIGJlZm9yZSBzZW5kaW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byBpdC4gKyBFWFRFUk5BTCBUaGUgZXh0ZXJuYWwgKEVYVEVSTkFMKSBkZXBsb3ltZW50IHR5cGUgZW5hYmxlcyB5b3UgdG8gdXNlIGFueSB0aGlyZC1wYXJ0eSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgZm9yIGZ1bGwgY29udHJvbCBvdmVyIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MgZm9yIGFuIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqL1xuVHlwZT86IChcIkNPREVfREVQTE9ZXCIgfCBcIkVDU1wiIHwgXCJFWFRFUk5BTFwiKVxufVxuLyoqXG4gKiBPcHRpb25hbCBkZXBsb3ltZW50IHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIGhvdyBtYW55IHRhc2tzIHJ1biBkdXJpbmcgdGhlIGRlcGxveW1lbnQgYW5kIHRoZSBvcmRlcmluZyBvZiBzdG9wcGluZyBhbmQgc3RhcnRpbmcgdGFza3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbmZpZ3VyYXRpb24ge1xuQWxhcm1zPzogRGVwbG95bWVudEFsYXJtc1xuRGVwbG95bWVudENpcmN1aXRCcmVha2VyPzogRGVwbG95bWVudENpcmN1aXRCcmVha2VyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWF4aW11bVBlcmNlbnRgYCBwYXJhbWV0ZXIgcmVwcmVzZW50cyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgYXJlIGFsbG93ZWQgaW4gdGhlIGBgUlVOTklOR2BgIG9yIGBgUEVORElOR2BgIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYGBkZXNpcmVkQ291bnRgYCAocm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZWZpbmUgdGhlIGRlcGxveW1lbnQgYmF0Y2ggc2l6ZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2VydmljZSBpcyB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgYW5kIGhhcyBhIGBgZGVzaXJlZENvdW50YGAgb2YgZm91ciB0YXNrcyBhbmQgYSBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgb2YgMjAwJSwgdGhlIHNjaGVkdWxlciBtYXkgc3RhcnQgZm91ciBuZXcgdGFza3MgYmVmb3JlIHN0b3BwaW5nIHRoZSBmb3VyIG9sZGVyIHRhc2tzIChwcm92aWRlZCB0aGF0IHRoZSBjbHVzdGVyIHJlc291cmNlcyByZXF1aXJlZCB0byBkbyB0aGlzIGFyZSBhdmFpbGFibGUpLiBUaGUgZGVmYXVsdCBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgaXMgMjAwJS5cbiAqICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzLCBhbmQgdGFza3MgaW4gdGhlIHNlcnZpY2UgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSAqbWF4aW11bSBwZXJjZW50KiB2YWx1ZSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFRoZSAqbWF4aW11bSBwZXJjZW50KiB2YWx1ZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgdGhhdCByZW1haW4gaW4gdGhlIGBgUlVOTklOR2BgIHN0YXRlIHdoaWxlIHRoZSBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBpbiB0aGUgYGBEUkFJTklOR2BgIHN0YXRlLlxuICogICBZb3UgY2FuJ3Qgc3BlY2lmeSBhIGN1c3RvbSBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB0aGF0IHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBoYXMgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZS5cbiAqICAgSWYgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1heGltdW0gcGVyY2VudCB2YWx1ZSBpcyBub3QgdXNlZCwgYWx0aG91Z2ggaXQgaXMgcmV0dXJuZWQgd2hlbiBkZXNjcmliaW5nIHlvdXIgc2VydmljZS5cbiAqL1xuTWF4aW11bVBlcmNlbnQ/OiBudW1iZXJcbi8qKlxuICogSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLCB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCByZXByZXNlbnRzIGEgbG93ZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSBkdXJpbmcgYSBkZXBsb3ltZW50LCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGBgZGVzaXJlZENvdW50YGAgKHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikuIFRoaXMgcGFyYW1ldGVyIGVuYWJsZXMgeW91IHRvIGRlcGxveSB3aXRob3V0IHVzaW5nIGFkZGl0aW9uYWwgY2x1c3RlciBjYXBhY2l0eS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2VydmljZSBoYXMgYSBgYGRlc2lyZWRDb3VudGBgIG9mIGZvdXIgdGFza3MgYW5kIGEgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBvZiA1MCUsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBtYXkgc3RvcCB0d28gZXhpc3RpbmcgdGFza3MgdG8gZnJlZSB1cCBjbHVzdGVyIGNhcGFjaXR5IGJlZm9yZSBzdGFydGluZyB0d28gbmV3IHRhc2tzLiBcbiAqICBGb3Igc2VydmljZXMgdGhhdCAqZG8gbm90KiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgQSBzZXJ2aWNlIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSBpZiBhbGwgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBwYXNzIHRoZWlyIGhlYWx0aCBjaGVja3MuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciA0MCBzZWNvbmRzIGFmdGVyIGEgdGFzayByZWFjaGVzIGEgYGBSVU5OSU5HYGAgc3RhdGUgYmVmb3JlIHRoZSB0YXNrIGlzIGNvdW50ZWQgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgb25lIG9yIG1vcmUgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyBpdCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC4gQSB0YXNrIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSB3aGVuIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2sgaGF2ZSBwYXNzZWQgdGhlaXIgaGVhbHRoIGNoZWNrcy4gVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBjYW4gd2FpdCBmb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY29udGFpbmVyIGhlYWx0aCBjaGVjayBzZXR0aW5ncy4gXG4gKiAgIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyogdXNlIGEgbG9hZCBiYWxhbmNlciwgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgbm90ZWQ6XG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBhbiBlc3NlbnRpYWwgY29udGFpbmVyIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgYm90aCB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGFuZCB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgXG4gKiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgcmVwbGljYSBzZXJ2aWNlIGZvciBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIGlzIDEwMCUuIFRoZSBkZWZhdWx0IGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBEQUVNT05gYCBzZXJ2aWNlIHNjaGVkdWxlIGlzIDAlIGZvciB0aGUgQ0xJLCB0aGUgQVdTIFNES3MsIGFuZCB0aGUgQVBJcyBhbmQgNTAlIGZvciB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS5cbiAqICBUaGUgbWluaW11bSBudW1iZXIgb2YgaGVhbHRoeSB0YXNrcyBkdXJpbmcgYSBkZXBsb3ltZW50IGlzIHRoZSBgYGRlc2lyZWRDb3VudGBgIG11bHRpcGxpZWQgYnkgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAvMTAwLCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1pbmltdW0gaGVhbHRoeSBwZXJjZW50KiB2YWx1ZSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB0aGF0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgd2hpbGUgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGluIHRoZSBgYERSQUlOSU5HYGAgc3RhdGUuXG4gKiAgIFlvdSBjYW4ndCBzcGVjaWZ5IGEgY3VzdG9tIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB0aGF0IHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBoYXMgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZS5cbiAqICAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHZhbHVlIGlzIG5vdCB1c2VkLCBhbHRob3VnaCBpdCBpcyByZXR1cm5lZCB3aGVuIGRlc2NyaWJpbmcgeW91ciBzZXJ2aWNlLlxuICovXG5NaW5pbXVtSGVhbHRoeVBlcmNlbnQ/OiBudW1iZXJcbn1cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIENsb3VkV2F0Y2ggYWxhcm1zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRBbGFybXMge1xuLyoqXG4gKiBPbmUgb3IgbW9yZSBDbG91ZFdhdGNoIGFsYXJtIG5hbWVzLiBVc2UgYSBcIixcIiB0byBzZXBhcmF0ZSB0aGUgYWxhcm1zLlxuICovXG5BbGFybU5hbWVzOiBzdHJpbmdbXVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBDbG91ZFdhdGNoIGFsYXJtIG9wdGlvbiBpbiB0aGUgc2VydmljZSBkZXBsb3ltZW50IHByb2Nlc3MuXG4gKi9cbkVuYWJsZTogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29uZmlndXJlIEFtYXpvbiBFQ1MgdG8gcm9sbCBiYWNrIHRoZSBzZXJ2aWNlIGlmIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLiBJZiByb2xsYmFjayBpcyB1c2VkLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuUm9sbGJhY2s6IGJvb2xlYW5cbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHNlcnZpY2VzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLlxuICogICBUaGUgKmRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyKiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBzZXJ2aWNlIGRlcGxveW1lbnQgd2lsbCBmYWlsIGlmIHRoZSBzZXJ2aWNlIGNhbid0IHJlYWNoIGEgc3RlYWR5IHN0YXRlLiBJZiB5b3UgdXNlIHRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciwgYSBzZXJ2aWNlIGRlcGxveW1lbnQgd2lsbCB0cmFuc2l0aW9uIHRvIGEgZmFpbGVkIHN0YXRlIGFuZCBzdG9wIGxhdW5jaGluZyBuZXcgdGFza3MuIElmIHlvdSB1c2UgdGhlIHJvbGxiYWNrIG9wdGlvbiwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JvbGxpbmcgdXBkYXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtZWNzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDaXJjdWl0QnJlYWtlciB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyIGxvZ2ljIGZvciB0aGUgc2VydmljZS5cbiAqL1xuRW5hYmxlOiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBjb25maWd1cmUgQW1hem9uIEVDUyB0byByb2xsIGJhY2sgdGhlIHNlcnZpY2UgaWYgYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMuIElmIHJvbGxiYWNrIGlzIG9uLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuUm9sbGJhY2s6IGJvb2xlYW5cbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSB0aGUgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VDb25uZWN0U2VydmljZWBgIG11c3QgaGF2ZSBhIG5hbWUgdGhhdCBpcyB1bmlxdWUgaW4gdGhlIG5hbWVzcGFjZS5cbiAqICAgIFN0YXJ0aW5nIEFwcmlsIDE1LCAyMDIzLCBBV1M7IHdpbGwgbm90IG9uYm9hcmQgbmV3IGN1c3RvbWVycyB0byBBbWF6b24gRWxhc3RpYyBJbmZlcmVuY2UgKEVJKSwgYW5kIHdpbGwgaGVscCBjdXJyZW50IGN1c3RvbWVycyBtaWdyYXRlIHRoZWlyIHdvcmtsb2FkcyB0byBvcHRpb25zIHRoYXQgb2ZmZXIgYmV0dGVyIHByaWNlIGFuZCBwZXJmb3JtYW5jZS4gQWZ0ZXIgQXByaWwgMTUsIDIwMjMsIG5ldyBjdXN0b21lcnMgd2lsbCBub3QgYmUgYWJsZSB0byBsYXVuY2ggaW5zdGFuY2VzIHdpdGggQW1hem9uIEVJIGFjY2VsZXJhdG9ycyBpbiBBbWF6b24gU2FnZU1ha2VyLCBFQ1MsIG9yIEVDMi4gSG93ZXZlciwgY3VzdG9tZXJzIHdobyBoYXZlIHVzZWQgQW1hem9uIEVJIGF0IGxlYXN0IG9uY2UgZHVyaW5nIHRoZSBwYXN0IDMwLWRheSBwZXJpb2QgYXJlIGNvbnNpZGVyZWQgY3VycmVudCBjdXN0b21lcnMgYW5kIHdpbGwgYmUgYWJsZSB0byBjb250aW51ZSB1c2luZyB0aGUgc2VydmljZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VDU19TRVJWSUNFIHtcbi8qKlxuICogVGhlIHBsYXRmb3JtIHZlcnNpb24gdGhhdCB5b3VyIHRhc2tzIGluIHRoZSBzZXJ2aWNlIGFyZSBydW5uaW5nIG9uLiBBIHBsYXRmb3JtIHZlcnNpb24gaXMgc3BlY2lmaWVkIG9ubHkgZm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLiBJZiBvbmUgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgYGBMQVRFU1RgYCBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHVzZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW3BsYXRmb3JtIHZlcnNpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9wbGF0Zm9ybV92ZXJzaW9ucy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblBsYXRmb3JtVmVyc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIHRoZSB0YXNrLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCBwcm9wYWdhdGVkLiBUYWdzIGNhbiBvbmx5IGJlIHByb3BhZ2F0ZWQgdG8gdGhlIHRhc2sgZHVyaW5nIHRhc2sgY3JlYXRpb24uIFRvIGFkZCB0YWdzIHRvIGEgdGFzayBhZnRlciB0YXNrIGNyZWF0aW9uLCB1c2UgdGhlIFtUYWdSZXNvdXJjZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9UYWdSZXNvdXJjZS5odG1sKSBBUEkgYWN0aW9uLlxuICogIFlvdSBtdXN0IHNldCB0aGlzIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5PTkVgYCB3aGVuIHlvdSB1c2UgQ29zdCBFeHBsb3Jlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyB1c2FnZSByZXBvcnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2FnZS1yZXBvcnRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgZGVmYXVsdCBpcyBgYE5PTkVgYC5cbiAqL1xuUHJvcGFnYXRlVGFncz86IChcIlNFUlZJQ0VcIiB8IFwiVEFTS19ERUZJTklUSU9OXCIpXG5TZXJ2aWNlQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgb2JqZWN0cyB0byB1c2UgZm9yIHRhc2tzIGluIHlvdXIgc2VydmljZS4gWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSBvZiA1IHN0cmF0ZWd5IHJ1bGVzIGZvciBlYWNoIHNlcnZpY2UuXG4gKi9cblBsYWNlbWVudFN0cmF0ZWdpZXM/OiBQbGFjZW1lbnRTdHJhdGVneVtdXG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZWdpc3RyeSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgZGlzY292ZXJ5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWRpc2NvdmVyeS5odG1sKS5cbiAqICAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuU2VydmljZVJlZ2lzdHJpZXM/OiBTZXJ2aWNlUmVnaXN0cnlbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgYSB2b2x1bWUgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYXMgYSB2b2x1bWUgdGhhdCBpcyBjb25maWd1cmVkIGF0IGxhdW5jaCB0aW1lLiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCB2b2x1bWUgdHlwZSBpcyBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuVm9sdW1lQ29uZmlndXJhdGlvbnM/OiBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICogIElmIGEgYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGxhdW5jaFR5cGVgYCBwYXJhbWV0ZXIgbXVzdCBiZSBvbWl0dGVkLiBJZiBubyBgYGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIG9yIGBgbGF1bmNoVHlwZWBgIGlzIHNwZWNpZmllZCwgdGhlIGBgZGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIGZvciB0aGUgY2x1c3RlciBpcyB1c2VkLlxuICogIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgbWF5IGNvbnRhaW4gYSBtYXhpbXVtIG9mIDYgY2FwYWNpdHkgcHJvdmlkZXJzLlxuICovXG5DYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3k/OiBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtW11cbi8qKlxuICogVGhlIGxhdW5jaCB0eXBlIG9uIHdoaWNoIHRvIHJ1biB5b3VyIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgTGF1bmNoIFR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5MYXVuY2hUeXBlPzogKFwiRUMyXCIgfCBcIkZBUkdBVEVcIiB8IFwiRVhURVJOQUxcIilcbk5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHNjaGVkdWxpbmcgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKS5cbiAqICBUaGVyZSBhcmUgdHdvIHNlcnZpY2Ugc2NoZWR1bGVyIHN0cmF0ZWdpZXMgYXZhaWxhYmxlOlxuICogICArICAgYGBSRVBMSUNBYGAtVGhlIHJlcGxpY2Egc2NoZWR1bGluZyBzdHJhdGVneSBwbGFjZXMgYW5kIG1haW50YWlucyB0aGUgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MgYWNyb3NzIHlvdXIgY2x1c3Rlci4gQnkgZGVmYXVsdCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHNwcmVhZHMgdGFza3MgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lcy4gWW91IGNhbiB1c2UgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llcyBhbmQgY29uc3RyYWludHMgdG8gY3VzdG9taXplIHRhc2sgcGxhY2VtZW50IGRlY2lzaW9ucy4gVGhpcyBzY2hlZHVsZXIgc3RyYXRlZ3kgaXMgcmVxdWlyZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMuXG4gKiAgICsgICBgYERBRU1PTmBgLVRoZSBkYWVtb24gc2NoZWR1bGluZyBzdHJhdGVneSBkZXBsb3lzIGV4YWN0bHkgb25lIHRhc2sgb24gZWFjaCBhY3RpdmUgY29udGFpbmVyIGluc3RhbmNlIHRoYXQgbWVldHMgYWxsIG9mIHRoZSB0YXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyB0aGF0IHlvdSBzcGVjaWZ5IGluIHlvdXIgY2x1c3Rlci4gVGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGFsc28gZXZhbHVhdGVzIHRoZSB0YXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyBmb3IgcnVubmluZyB0YXNrcyBhbmQgd2lsbCBzdG9wIHRhc2tzIHRoYXQgZG9uJ3QgbWVldCB0aGUgcGxhY2VtZW50IGNvbnN0cmFpbnRzLiBXaGVuIHlvdSdyZSB1c2luZyB0aGlzIHN0cmF0ZWd5LCB5b3UgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGEgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MsIGEgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ3ksIG9yIHVzZSBTZXJ2aWNlIEF1dG8gU2NhbGluZyBwb2xpY2llcy5cbiAqICAgVGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUgb3IgdGhlIGBgQ09ERV9ERVBMT1lgYCBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGVzIGRvbid0IHN1cHBvcnQgdGhlIGBgREFFTU9OYGAgc2NoZWR1bGluZyBzdHJhdGVneS5cbiAqL1xuU2NoZWR1bGluZ1N0cmF0ZWd5PzogKFwiREFFTU9OXCIgfCBcIlJFUExJQ0FcIilcbk5ldHdvcmtDb25maWd1cmF0aW9uPzogTmV0d29ya0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG1ldGFkYXRhIHRoYXQgeW91IGFwcGx5IHRvIHRoZSBzZXJ2aWNlIHRvIGhlbHAgeW91IGNhdGVnb3JpemUgYW5kIG9yZ2FuaXplIHRoZW0uIEVhY2ggdGFnIGNvbnNpc3RzIG9mIGEga2V5IGFuZCBhbiBvcHRpb25hbCB2YWx1ZSwgYm90aCBvZiB3aGljaCB5b3UgZGVmaW5lLiBXaGVuIGEgc2VydmljZSBpcyBkZWxldGVkLCB0aGUgdGFncyBhcmUgZGVsZXRlZCBhcyB3ZWxsLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKi9cblRhZ3M/OiBUYWdbXVxuLyoqXG4gKiBUaGUgcGVyaW9kIG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgaWdub3JlcyB1bmhlYWx0aHkgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgaGVhbHRoIGNoZWNrcyBhZnRlciBhIHRhc2sgaGFzIGZpcnN0IHN0YXJ0ZWQuIFRoaXMgaXMgb25seSB1c2VkIHdoZW4geW91ciBzZXJ2aWNlIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGEgbG9hZCBiYWxhbmNlci4gSWYgeW91ciBzZXJ2aWNlIGhhcyBhIGxvYWQgYmFsYW5jZXIgZGVmaW5lZCBhbmQgeW91IGRvbid0IHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIHZhbHVlLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLlxuICogIElmIHlvdSBkbyBub3QgdXNlIGFuIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIGBgc3RhcnRQZXJpb2RgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGhlYWx0aCBjaGVjayBwYXJhbWV0ZXJzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtIZWFsdGggY2hlY2tdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfSGVhbHRoQ2hlY2suaHRtbCkuXG4gKiAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGFrZSBhIHdoaWxlIHRvIHN0YXJ0IGFuZCByZXNwb25kIHRvIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgaGVhbHRoIGNoZWNrcywgeW91IGNhbiBzcGVjaWZ5IGEgaGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCBvZiB1cCB0byAyLDE0Nyw0ODMsNjQ3IHNlY29uZHMgKGFib3V0IDY5IHllYXJzKS4gRHVyaW5nIHRoYXQgdGltZSwgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgaWdub3JlcyBoZWFsdGggY2hlY2sgc3RhdHVzLiBUaGlzIGdyYWNlIHBlcmlvZCBjYW4gcHJldmVudCB0aGUgc2VydmljZSBzY2hlZHVsZXIgZnJvbSBtYXJraW5nIHRhc2tzIGFzIHVuaGVhbHRoeSBhbmQgc3RvcHBpbmcgdGhlbSBiZWZvcmUgdGhleSBoYXZlIHRpbWUgdG8gY29tZSB1cC5cbiAqL1xuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdHVybiBvbiBBbWF6b24gRUNTIG1hbmFnZWQgdGFncyBmb3IgdGhlIHRhc2tzIHdpdGhpbiB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFnZ2luZyB5b3VyIEFtYXpvbiBFQ1MgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtdXNpbmctdGFncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgV2hlbiB5b3UgdXNlIEFtYXpvbiBFQ1MgbWFuYWdlZCB0YWdzLCB5b3UgbmVlZCB0byBzZXQgdGhlIGBgcHJvcGFnYXRlVGFnc2BgIHJlcXVlc3QgcGFyYW1ldGVyLlxuICovXG5FbmFibGVFQ1NNYW5hZ2VkVGFncz86IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBleGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25hbGl0eSBpcyB0dXJuZWQgb24gZm9yIHRoZSBzZXJ2aWNlLiBJZiBgYHRydWVgYCwgdGhlIGV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbmFsaXR5IGlzIHR1cm5lZCBvbiBmb3IgYWxsIGNvbnRhaW5lcnMgaW4gdGFza3MgYXMgcGFydCBvZiB0aGUgc2VydmljZS5cbiAqL1xuRW5hYmxlRXhlY3V0ZUNvbW1hbmQ/OiBib29sZWFuXG4vKipcbiAqIEFuIGFycmF5IG9mIHBsYWNlbWVudCBjb25zdHJhaW50IG9iamVjdHMgdG8gdXNlIGZvciB0YXNrcyBpbiB5b3VyIHNlcnZpY2UuIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgMTAgY29uc3RyYWludHMgZm9yIGVhY2ggdGFzay4gVGhpcyBsaW1pdCBpbmNsdWRlcyBjb25zdHJhaW50cyBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFuZCB0aG9zZSBzcGVjaWZpZWQgYXQgcnVudGltZS5cbiAqL1xuUGxhY2VtZW50Q29uc3RyYWludHM/OiBQbGFjZW1lbnRDb25zdHJhaW50W11cbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgY2x1c3RlciB0aGF0IHlvdSBydW4geW91ciBzZXJ2aWNlIG9uLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBjbHVzdGVyLCB0aGUgZGVmYXVsdCBjbHVzdGVyIGlzIGFzc3VtZWQuXG4gKi9cbkNsdXN0ZXI/OiBzdHJpbmdcbi8qKlxuICogQSBsaXN0IG9mIGxvYWQgYmFsYW5jZXIgb2JqZWN0cyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmljZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgUm9sZWBgIHByb3BlcnR5LCBgYExvYWRCYWxhbmNlcnNgYCBtdXN0IGJlIHNwZWNpZmllZCBhcyB3ZWxsLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG51bWJlciBvZiBsb2FkIGJhbGFuY2VycyB0aGF0IHlvdSBjYW4gc3BlY2lmeSBwZXIgc2VydmljZSwgc2VlIFtTZXJ2aWNlIExvYWQgQmFsYW5jaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWxvYWQtYmFsYW5jaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTG9hZEJhbGFuY2Vycz86IExvYWRCYWxhbmNlcltdXG5TZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24/OiBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG51bWJlciBvZiBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc3BlY2lmaWVkIHRhc2sgZGVmaW5pdGlvbiB0byBwbGFjZSBhbmQga2VlcCBydW5uaW5nIGluIHlvdXIgc2VydmljZS5cbiAqICBGb3IgbmV3IHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IHZhbHVlIG9mIGBgMWBgIGlzIHVzZWQuIFdoZW4gdXNpbmcgdGhlIGBgREFFTU9OYGAgc2NoZWR1bGluZyBzdHJhdGVneSwgdGhlIGRlc2lyZWQgY291bnQgaXMgbm90IHJlcXVpcmVkLlxuICogIEZvciBleGlzdGluZyBzZXJ2aWNlcywgaWYgYSBkZXNpcmVkIGNvdW50IGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIG9taXR0ZWQgZnJvbSB0aGUgb3BlcmF0aW9uLlxuICovXG5EZXNpcmVkQ291bnQ/OiBudW1iZXJcbkRlcGxveW1lbnRDb250cm9sbGVyPzogRGVwbG95bWVudENvbnRyb2xsZXJcbi8qKlxuICogVGhlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBhbGxvd3MgQW1hem9uIEVDUyB0byBtYWtlIGNhbGxzIHRvIHlvdXIgbG9hZCBiYWxhbmNlciBvbiB5b3VyIGJlaGFsZi4gVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBwZXJtaXR0ZWQgaWYgeW91IGFyZSB1c2luZyBhIGxvYWQgYmFsYW5jZXIgd2l0aCB5b3VyIHNlcnZpY2UgYW5kIHlvdXIgdGFzayBkZWZpbml0aW9uIGRvZXNuJ3QgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgcm9sZWBgIHBhcmFtZXRlciwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGEgbG9hZCBiYWxhbmNlciBvYmplY3Qgd2l0aCB0aGUgYGBsb2FkQmFsYW5jZXJzYGAgcGFyYW1ldGVyLlxuICogICBJZiB5b3VyIGFjY291bnQgaGFzIGFscmVhZHkgY3JlYXRlZCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlLCB0aGF0IHJvbGUgaXMgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIHVubGVzcyB5b3Ugc3BlY2lmeSBhIHJvbGUgaGVyZS4gVGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgaXMgcmVxdWlyZWQgaWYgeW91ciB0YXNrIGRlZmluaXRpb24gdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgb3IgaWYgdGhlIHNlcnZpY2UgaXMgY29uZmlndXJlZCB0byB1c2Ugc2VydmljZSBkaXNjb3ZlcnksIGFuIGV4dGVybmFsIGRlcGxveW1lbnQgY29udHJvbGxlciwgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcywgb3IgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3JzIGluIHdoaWNoIGNhc2UgeW91IGRvbid0IHNwZWNpZnkgYSByb2xlIGhlcmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIHNlcnZpY2UtbGlua2VkIHJvbGVzIGZvciBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZy1zZXJ2aWNlLWxpbmtlZC1yb2xlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc3BlY2lmaWVkIHJvbGUgaGFzIGEgcGF0aCBvdGhlciB0aGFuIGBgL2BgLCB0aGVuIHlvdSBtdXN0IGVpdGhlciBzcGVjaWZ5IHRoZSBmdWxsIHJvbGUgQVJOICh0aGlzIGlzIHJlY29tbWVuZGVkKSBvciBwcmVmaXggdGhlIHJvbGUgbmFtZSB3aXRoIHRoZSBwYXRoLiBGb3IgZXhhbXBsZSwgaWYgYSByb2xlIHdpdGggdGhlIG5hbWUgYGBiYXJgYCBoYXMgYSBwYXRoIG9mIGBgL2Zvby9gYCB0aGVuIHlvdSB3b3VsZCBzcGVjaWZ5IGBgL2Zvby9iYXJgYCBhcyB0aGUgcm9sZSBuYW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtGcmllbmRseSBuYW1lcyBhbmQgcGF0aHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWRlbnRpZmllcnMuaHRtbCNpZGVudGlmaWVycy1mcmllbmRseS1uYW1lcykgaW4gdGhlICpJQU0gVXNlciBHdWlkZSouXG4gKi9cblJvbGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgZmFtaWx5YGAgYW5kIGBgcmV2aXNpb25gYCAoYGBmYW1pbHk6cmV2aXNpb25gYCkgb3IgZnVsbCBBUk4gb2YgdGhlIHRhc2sgZGVmaW5pdGlvbiB0byBydW4gaW4geW91ciBzZXJ2aWNlLiBJZiBhIGBgcmV2aXNpb25gYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgYGBBQ1RJVkVgYCByZXZpc2lvbiBpcyB1c2VkLlxuICogIEEgdGFzayBkZWZpbml0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBgYEVDU2BgIG9yIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXJzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlcGxveW1lbnQgdHlwZXMsIHNlZSBbQW1hem9uIEVDUyBkZXBsb3ltZW50IHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGVzLmh0bWwpLlxuICovXG5UYXNrRGVmaW5pdGlvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB5b3VyIHNlcnZpY2UuIFVwIHRvIDI1NSBsZXR0ZXJzICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSksIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucyBhcmUgYWxsb3dlZC4gU2VydmljZSBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBjbHVzdGVyLCBidXQgeW91IGNhbiBoYXZlIHNpbWlsYXJseSBuYW1lZCBzZXJ2aWNlcyBpbiBtdWx0aXBsZSBjbHVzdGVycyB3aXRoaW4gYSBSZWdpb24gb3IgYWNyb3NzIG11bHRpcGxlIFJlZ2lvbnMuXG4gKiAgIFRoZSBzdGFjayB1cGRhdGUgZmFpbHMgaWYgeW91IGNoYW5nZSBhbnkgcHJvcGVydGllcyB0aGF0IHJlcXVpcmUgcmVwbGFjZW1lbnQgYW5kIHRoZSBgYFNlcnZpY2VOYW1lYGAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VOYW1lYGAgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGNsdXN0ZXIuXG4gKi9cblNlcnZpY2VOYW1lPzogc3RyaW5nXG5EZXBsb3ltZW50Q29uZmlndXJhdGlvbj86IERlcGxveW1lbnRDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSBmb3IgYSB0YXNrIG9yIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IHN0cmF0ZWdpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stcGxhY2VtZW50LXN0cmF0ZWdpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudFN0cmF0ZWd5IHtcbi8qKlxuICogVGhlIGZpZWxkIHRvIGFwcGx5IHRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgYWdhaW5zdC4gRm9yIHRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGluc3RhbmNlSWRgYCAob3IgYGBob3N0YGAsIHdoaWNoIGhhcyB0aGUgc2FtZSBlZmZlY3QpLCBvciBhbnkgcGxhdGZvcm0gb3IgY3VzdG9tIGF0dHJpYnV0ZSB0aGF0J3MgYXBwbGllZCB0byBhIGNvbnRhaW5lciBpbnN0YW5jZSwgc3VjaCBhcyBgYGF0dHJpYnV0ZTplY3MuYXZhaWxhYmlsaXR5LXpvbmVgYC4gRm9yIHRoZSBgYGJpbnBhY2tgYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHZhbGlkIHZhbHVlcyBhcmUgYGBjcHVgYCBhbmQgYGBtZW1vcnlgYC4gRm9yIHRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSwgdGhpcyBmaWVsZCBpcyBub3QgdXNlZC5cbiAqL1xuRmllbGQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgcGxhY2VtZW50IHN0cmF0ZWd5LiBUaGUgYGByYW5kb21gYCBwbGFjZW1lbnQgc3RyYXRlZ3kgcmFuZG9tbHkgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzLiBUaGUgYGBzcHJlYWRgYCBwbGFjZW1lbnQgc3RyYXRlZ3kgc3ByZWFkcyBwbGFjZW1lbnQgYWNyb3NzIGF2YWlsYWJsZSBjYW5kaWRhdGVzIGV2ZW5seSBiYXNlZCBvbiB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gVGhlIGBgYmlucGFja2BgIHN0cmF0ZWd5IHBsYWNlcyB0YXNrcyBvbiBhdmFpbGFibGUgY2FuZGlkYXRlcyB0aGF0IGhhdmUgdGhlIGxlYXN0IGF2YWlsYWJsZSBhbW91bnQgb2YgdGhlIHJlc291cmNlIHRoYXQncyBzcGVjaWZpZWQgd2l0aCB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUsIGlmIHlvdSBiaW5wYWNrIG9uIG1lbW9yeSwgYSB0YXNrIGlzIHBsYWNlZCBvbiB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHJlbWFpbmluZyBtZW1vcnkgYnV0IHN0aWxsIGVub3VnaCB0byBydW4gdGhlIHRhc2suXG4gKi9cblR5cGU6IChcImJpbnBhY2tcIiB8IFwicmFuZG9tXCIgfCBcInNwcmVhZFwiKVxufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBmb3IgdGhlIHNlcnZpY2UgcmVnaXN0cnkuXG4gKiAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGFyZSBub3Qgc3VwcG9ydGVkLlxuICogIFdoZW4geW91IGFkZCwgdXBkYXRlLCBvciByZW1vdmUgdGhlIHNlcnZpY2UgcmVnaXN0cmllcyBjb25maWd1cmF0aW9uLCBBbWF6b24gRUNTIHN0YXJ0cyBhIG5ldyBkZXBsb3ltZW50LiBOZXcgdGFza3MgYXJlIHJlZ2lzdGVyZWQgYW5kIGRlcmVnaXN0ZXJlZCB0byB0aGUgdXBkYXRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVJlZ2lzdHJ5IHtcbi8qKlxuICogVGhlIGNvbnRhaW5lciBuYW1lIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZS4gSXQncyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdXNlZCBpZiB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2Ugc3BlY2lmaWVkIGFuIFNSViByZWNvcmQuIFRoaXMgZmllbGQgbWlnaHQgYmUgdXNlZCBpZiBib3RoIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgU1JWIHJlY29yZHMgYXJlIHVzZWQuXG4gKi9cblBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24geW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIGEgdHlwZSBTUlYgRE5TIHJlY29yZCBpcyB1c2VkLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBvciBhIGBgcG9ydGBgIHZhbHVlLiBIb3dldmVyLCB5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VydmljZSByZWdpc3RyeS4gVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgc2VydmljZSByZWdpc3RyeSBpcyBDTUFQLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGVTZXJ2aWNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbCkuXG4gKi9cblJlZ2lzdHJ5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhIHZvbHVtZSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhcyBhIHZvbHVtZSB0aGF0IGlzIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZvbHVtZSB0eXBlIGlzIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uIHtcbk1hbmFnZWRFQlNWb2x1bWU/OiBTZXJ2aWNlTWFuYWdlZEVCU1ZvbHVtZUNvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHZvbHVtZS4gVGhpcyB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgbmFtZSBmcm9tIHRoZSBgYFZvbHVtZWBgIG9iamVjdCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBbWF6b24gRUJTIHZvbHVtZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBhbmQgbWFuYWdlcyBvbiB5b3VyIGJlaGFsZi4gVGhlc2Ugc2V0dGluZ3MgYXJlIHVzZWQgdG8gY3JlYXRlIGVhY2ggQW1hem9uIEVCUyB2b2x1bWUsIHdpdGggb25lIHZvbHVtZSBjcmVhdGVkIGZvciBlYWNoIHRhc2sgaW4gdGhlIHNlcnZpY2UuIFRoZSBBbWF6b24gRUJTIHZvbHVtZXMgYXJlIHZpc2libGUgaW4geW91ciBhY2NvdW50IGluIHRoZSBBbWF6b24gRUMyIGNvbnNvbGUgb25jZSB0aGV5IGFyZSBjcmVhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzbmFwc2hvdCB0aGF0IEFtYXpvbiBFQ1MgdXNlcyB0byBjcmVhdGUgdGhlIHZvbHVtZS4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBzbmFwc2hvdCBJRCBvciBhIHZvbHVtZSBzaXplLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFNuYXBzaG90SWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblNuYXBzaG90SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZvbHVtZSB0eXBlLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFZvbHVtZVR5cGVgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQlMgdm9sdW1lIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSouXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2b2x1bWUgdHlwZXMuXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSBTU0Q6IGBgZ3AyYGB8YGBncDNgYCBcbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBTU0Q6IGBgaW8xYGB8YGBpbzJgYCBcbiAqICAgKyAgVGhyb3VnaHB1dCBPcHRpbWl6ZWQgSEREOiBgYHN0MWBgIFxuICogICArICBDb2xkIEhERDogYGBzYzFgYCBcbiAqICAgKyAgTWFnbmV0aWM6IGBgc3RhbmRhcmRgYCBcbiAqICAgVGhlIG1hZ25ldGljIHZvbHVtZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgb24gRmFyZ2F0ZS5cbiAqL1xuVm9sdW1lVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgaWRlbnRpZmllciBvZiB0aGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IHRvIHVzZSBmb3IgQW1hem9uIEVCUyBlbmNyeXB0aW9uLiBXaGVuIGVuY3J5cHRpb24gaXMgdHVybmVkIG9uIGFuZCBubyBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBBV1MgbWFuYWdlZCBrZXkgZm9yIEFtYXpvbiBFQlMgdm9sdW1lcyBpcyB1c2VkLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYEttc0tleUlkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogICAgQVdTIGF1dGhlbnRpY2F0ZXMgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSBhc3luY2hyb25vdXNseS4gVGhlcmVmb3JlLCBpZiB5b3Ugc3BlY2lmeSBhbiBJRCwgYWxpYXMsIG9yIEFSTiB0aGF0IGlzIGludmFsaWQsIHRoZSBhY3Rpb24gY2FuIGFwcGVhciB0byBjb21wbGV0ZSwgYnV0IGV2ZW50dWFsbHkgZmFpbHMuXG4gKi9cbkttc0tleUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSB2b2x1bWUuIEFtYXpvbiBFQ1MgYXBwbGllcyBzZXJ2aWNlLW1hbmFnZWQgdGFncyBieSBkZWZhdWx0LiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRhZ1NwZWNpZmljYXRpb25zLk5gYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblRhZ1NwZWNpZmljYXRpb25zPzogRUJTVGFnU3BlY2lmaWNhdGlvbltdXG4vKipcbiAqIFRoZSBmaWxlc3lzdGVtIHR5cGUgZm9yIHRoZSB2b2x1bWUuIEZvciB2b2x1bWVzIGNyZWF0ZWQgZnJvbSBhIHNuYXBzaG90LCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBzYW1lIGZpbGVzeXN0ZW0gdHlwZSB0aGF0IHRoZSB2b2x1bWUgd2FzIHVzaW5nIHdoZW4gdGhlIHNuYXBzaG90IHdhcyBjcmVhdGVkLiBJZiB0aGVyZSBpcyBhIGZpbGVzeXN0ZW0gdHlwZSBtaXNtYXRjaCwgdGhlIHRhc2sgd2lsbCBmYWlsIHRvIHN0YXJ0LlxuICogIFRoZSBhdmFpbGFibGUgTGludXggZmlsZXN5c3RlbSB0eXBlcyBhcmXigKggYGBleHQzYGAsIGBgZXh0NGBgLCBhbmQgYGB4ZnNgYC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgYGB4ZnNgYCBmaWxlc3lzdGVtIHR5cGUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICogIFRoZSBhdmFpbGFibGUgV2luZG93cyBmaWxlc3lzdGVtIHR5cGVzIGFyZSBgYE5URlNgYC5cbiAqL1xuRmlsZXN5c3RlbVR5cGU/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZvbHVtZSBzaG91bGQgYmUgZW5jcnlwdGVkLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIGVuY3J5cHRpb24gaXMgdHVybmVkIG9uIGJ5IGRlZmF1bHQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgRW5jcnlwdGVkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5FbmNyeXB0ZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSB0aHJvdWdocHV0IHRvIHByb3Zpc2lvbiBmb3IgYSB2b2x1bWUsIGluIE1pQi9zLCB3aXRoIGEgbWF4aW11bSBvZiAxLDAwMCBNaUIvcy4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBUaHJvdWdocHV0YGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogICBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGBgZ3AzYGAgdm9sdW1lIHR5cGUuXG4gKi9cblRocm91Z2hwdXQ/OiBudW1iZXJcbi8qKlxuICogVGhlIG51bWJlciBvZiBJL08gb3BlcmF0aW9ucyBwZXIgc2Vjb25kIChJT1BTKS4gRm9yIGBgZ3AzYGAsIGBgaW8xYGAsIGFuZCBgYGlvMmBgIHZvbHVtZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIElPUFMgdGhhdCBhcmUgcHJvdmlzaW9uZWQgZm9yIHRoZSB2b2x1bWUuIEZvciBgYGdwMmBgIHZvbHVtZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgYmFzZWxpbmUgcGVyZm9ybWFuY2Ugb2YgdGhlIHZvbHVtZSBhbmQgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIHZvbHVtZSBhY2N1bXVsYXRlcyBJL08gY3JlZGl0cyBmb3IgYnVyc3RpbmcuXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGUuXG4gKiAgICsgICBgYGdwM2BgOiAzLDAwMCAtIDE2LDAwMCBJT1BTXG4gKiAgICsgICBgYGlvMWBgOiAxMDAgLSA2NCwwMDAgSU9QU1xuICogICArICAgYGBpbzJgYDogMTAwIC0gMjU2LDAwMCBJT1BTXG4gKiAgIFxuICogIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciBgYGlvMWBgIGFuZCBgYGlvMmBgIHZvbHVtZSB0eXBlcy4gVGhlIGRlZmF1bHQgZm9yIGBgZ3AzYGAgdm9sdW1lcyBpcyBgYDMsMDAwIElPUFNgYC4gVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgYGBzdDFgYCwgYGBzYzFgYCwgb3IgYGBzdGFuZGFyZGBgIHZvbHVtZSB0eXBlcy5cbiAqICBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYElvcHNgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cbklvcHM/OiBudW1iZXJcbi8qKlxuICogVGhlIHNpemUgb2YgdGhlIHZvbHVtZSBpbiBHaUIuIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgdm9sdW1lIHNpemUgb3IgYSBzbmFwc2hvdCBJRC4gSWYgeW91IHNwZWNpZnkgYSBzbmFwc2hvdCBJRCwgdGhlIHNuYXBzaG90IHNpemUgaXMgdXNlZCBmb3IgdGhlIHZvbHVtZSBzaXplIGJ5IGRlZmF1bHQuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgdm9sdW1lIHNpemUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzbmFwc2hvdCBzaXplLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFNpemVgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2b2x1bWUgc2l6ZSB2YWx1ZXMgZm9yIGVhY2ggdm9sdW1lIHR5cGUuXG4gKiAgICsgICBgYGdwMmBgIGFuZCBgYGdwM2BgOiAxLTE2LDM4NFxuICogICArICAgYGBpbzFgYCBhbmQgYGBpbzJgYDogNC0xNiwzODRcbiAqICAgKyAgIGBgc3QxYGAgYW5kIGBgc2MxYGA6IDEyNS0xNiwzODRcbiAqICAgKyAgIGBgc3RhbmRhcmRgYDogMS0xLDAyNFxuICovXG5TaXplSW5HaUI/OiBudW1iZXJcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgSUFNIHJvbGUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyB2b2x1bWUuIFRoaXMgaXMgdGhlIEFtYXpvbiBFQ1MgaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGUgdGhhdCBpcyB1c2VkIHRvIG1hbmFnZSB5b3VyIEFXUyBpbmZyYXN0cnVjdHVyZS4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBBbWF6b24gRUNTLW1hbmFnZWQgYGBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWb2x1bWVzYGAgSUFNIHBvbGljeSB3aXRoIHRoaXMgcm9sZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaW5mcmFzdHJ1Y3R1cmVfSUFNX3JvbGUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUNTIERldmVsb3BlciBHdWlkZSouXG4gKi9cblJvbGVBcm46IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgdGFnIHNwZWNpZmljYXRpb25zIG9mIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVCU1RhZ1NwZWNpZmljYXRpb24ge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcHJvcGFnYXRlIHRoZSB0YWdzIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiB0byDigKh0aGUgQW1hem9uIEVCUyB2b2x1bWUuIFRhZ3MgY2FuIG9ubHkgcHJvcGFnYXRlIHRvIGEgYGBTRVJWSUNFYGAgc3BlY2lmaWVkIGluIOKAqGBgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25gYC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgdGFncyBhcmVuJ3Qg4oCocHJvcGFnYXRlZC5cbiAqL1xuUHJvcGFnYXRlVGFncz86IChcIlNFUlZJQ0VcIiB8IFwiVEFTS19ERUZJTklUSU9OXCIpXG4vKipcbiAqIFRoZSB0eXBlIG9mIHZvbHVtZSByZXNvdXJjZS5cbiAqL1xuUmVzb3VyY2VUeXBlOiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZ3MgYXBwbGllZCB0byB0aGlzIEFtYXpvbiBFQlMgdm9sdW1lLiBgYEFtYXpvbkVDU0NyZWF0ZWRgYCBhbmQgYGBBbWF6b25FQ1NNYW5hZ2VkYGAgYXJlIHJlc2VydmVkIHRhZ3MgdGhhdCBjYW4ndCBiZSB1c2VkLlxuICovXG5UYWdzPzogVGFnW11cbn1cbi8qKlxuICogVGhlIG1ldGFkYXRhIHRoYXQgeW91IGFwcGx5IHRvIGEgcmVzb3VyY2UgdG8gaGVscCB5b3UgY2F0ZWdvcml6ZSBhbmQgb3JnYW5pemUgdGhlbS4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLiBZb3UgZGVmaW5lIHRoZW0uXG4gKiAgVGhlIGZvbGxvd2luZyBiYXNpYyByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGFnczpcbiAqICAgKyAgTWF4aW11bSBudW1iZXIgb2YgdGFncyBwZXIgcmVzb3VyY2UgLSA1MFxuICogICArICBGb3IgZWFjaCByZXNvdXJjZSwgZWFjaCB0YWcga2V5IG11c3QgYmUgdW5pcXVlLCBhbmQgZWFjaCB0YWcga2V5IGNhbiBoYXZlIG9ubHkgb25lIHZhbHVlLlxuICogICArICBNYXhpbXVtIGtleSBsZW5ndGggLSAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIE1heGltdW0gdmFsdWUgbGVuZ3RoIC0gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBJZiB5b3VyIHRhZ2dpbmcgc2NoZW1hIGlzIHVzZWQgYWNyb3NzIG11bHRpcGxlIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIHJlbWVtYmVyIHRoYXQgb3RoZXIgc2VydmljZXMgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhcmFjdGVycy4gR2VuZXJhbGx5IGFsbG93ZWQgY2hhcmFjdGVycyBhcmU6IGxldHRlcnMsIG51bWJlcnMsIGFuZCBzcGFjZXMgcmVwcmVzZW50YWJsZSBpbiBVVEYtOCwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogKyAtID0gLiBfIDogLyBALlxuICogICArICBUYWcga2V5cyBhbmQgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqICAgKyAgRG8gbm90IHVzZSBgYGF3czpgYCwgYGBBV1M6YGAsIG9yIGFueSB1cHBlciBvciBsb3dlcmNhc2UgY29tYmluYXRpb24gb2Ygc3VjaCBhcyBhIHByZWZpeCBmb3IgZWl0aGVyIGtleXMgb3IgdmFsdWVzIGFzIGl0IGlzIHJlc2VydmVkIGZvciBBV1MgdXNlLiBZb3UgY2Fubm90IGVkaXQgb3IgZGVsZXRlIHRhZyBrZXlzIG9yIHZhbHVlcyB3aXRoIHRoaXMgcHJlZml4LiBUYWdzIHdpdGggdGhpcyBwcmVmaXggZG8gbm90IGNvdW50IGFnYWluc3QgeW91ciB0YWdzIHBlciByZXNvdXJjZSBsaW1pdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBUaGUgb3B0aW9uYWwgcGFydCBvZiBhIGtleS12YWx1ZSBwYWlyIHRoYXQgbWFrZSB1cCBhIHRhZy4gQSBgYHZhbHVlYGAgYWN0cyBhcyBhIGRlc2NyaXB0b3Igd2l0aGluIGEgdGFnIGNhdGVnb3J5IChrZXkpLlxuICovXG5WYWx1ZT86IHN0cmluZ1xuLyoqXG4gKiBPbmUgcGFydCBvZiBhIGtleS12YWx1ZSBwYWlyIHRoYXQgbWFrZSB1cCBhIHRhZy4gQSBgYGtleWBgIGlzIGEgZ2VuZXJhbCBsYWJlbCB0aGF0IGFjdHMgbGlrZSBhIGNhdGVnb3J5IGZvciBtb3JlIHNwZWNpZmljIHRhZyB2YWx1ZXMuXG4gKi9cbktleT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBvZiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LiBBIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBiZSBzZXQgd2hlbiB1c2luZyB0aGUgYGBSdW5UYXNrYGAgb3IgYGBDcmVhdGVTZXJ2aWNlYGAgQVBJcyBvciBhcyB0aGUgZGVmYXVsdCBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBmb3IgYSBjbHVzdGVyIHdpdGggdGhlIGBgQ3JlYXRlQ2x1c3RlcmBgIEFQSS5cbiAqICBPbmx5IGNhcGFjaXR5IHByb3ZpZGVycyB0aGF0IGFyZSBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgYW5kIGhhdmUgYW4gYGBBQ1RJVkVgYCBvciBgYFVQREFUSU5HYGAgc3RhdHVzIGNhbiBiZSB1c2VkIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIFRoZSBgYFB1dENsdXN0ZXJDYXBhY2l0eVByb3ZpZGVyc2BgIEFQSSBpcyB1c2VkIHRvIGFzc29jaWF0ZSBhIGNhcGFjaXR5IHByb3ZpZGVyIHdpdGggYSBjbHVzdGVyLlxuICogIElmIHNwZWNpZnlpbmcgYSBjYXBhY2l0eSBwcm92aWRlciB0aGF0IHVzZXMgYW4gQXV0byBTY2FsaW5nIGdyb3VwLCB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgbXVzdCBhbHJlYWR5IGJlIGNyZWF0ZWQuIE5ldyBBdXRvIFNjYWxpbmcgZ3JvdXAgY2FwYWNpdHkgcHJvdmlkZXJzIGNhbiBiZSBjcmVhdGVkIHdpdGggdGhlIGBgQ3JlYXRlQ2FwYWNpdHlQcm92aWRlcmBgIEFQSSBvcGVyYXRpb24uXG4gKiAgVG8gdXNlIGFuIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVyLCBzcGVjaWZ5IGVpdGhlciB0aGUgYGBGQVJHQVRFYGAgb3IgYGBGQVJHQVRFX1NQT1RgYCBjYXBhY2l0eSBwcm92aWRlcnMuIFRoZSBGQVJHQVRFbG9uZyBjYXBhY2l0eSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSB0byBhbGwgYWNjb3VudHMgYW5kIG9ubHkgbmVlZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggYSBjbHVzdGVyIHRvIGJlIHVzZWQgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtIHtcbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb2YgdGhlIGNhcGFjaXR5IHByb3ZpZGVyLlxuICovXG5DYXBhY2l0eVByb3ZpZGVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSAqYmFzZSogdmFsdWUgZGVzaWduYXRlcyBob3cgbWFueSB0YXNrcywgYXQgYSBtaW5pbXVtLCB0byBydW4gb24gdGhlIHNwZWNpZmllZCBjYXBhY2l0eSBwcm92aWRlci4gT25seSBvbmUgY2FwYWNpdHkgcHJvdmlkZXIgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBjYW4gaGF2ZSBhICpiYXNlKiBkZWZpbmVkLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuXG4gKi9cbkJhc2U/OiBudW1iZXJcbi8qKlxuICogVGhlICp3ZWlnaHQqIHZhbHVlIGRlc2lnbmF0ZXMgdGhlIHJlbGF0aXZlIHBlcmNlbnRhZ2Ugb2YgdGhlIHRvdGFsIG51bWJlciBvZiB0YXNrcyBsYXVuY2hlZCB0aGF0IHNob3VsZCB1c2UgdGhlIHNwZWNpZmllZCBjYXBhY2l0eSBwcm92aWRlci4gVGhlIGBgd2VpZ2h0YGAgdmFsdWUgaXMgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGFmdGVyIHRoZSBgYGJhc2VgYCB2YWx1ZSwgaWYgZGVmaW5lZCwgaXMgc2F0aXNmaWVkLlxuICogIElmIG5vIGBgd2VpZ2h0YGAgdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLiBXaGVuIG11bHRpcGxlIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgc3BlY2lmaWVkIHdpdGhpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LCBhdCBsZWFzdCBvbmUgb2YgdGhlIGNhcGFjaXR5IHByb3ZpZGVycyBtdXN0IGhhdmUgYSB3ZWlnaHQgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGFueSBjYXBhY2l0eSBwcm92aWRlcnMgd2l0aCBhIHdlaWdodCBvZiBgYDBgYCBjYW4ndCBiZSB1c2VkIHRvIHBsYWNlIHRhc2tzLiBJZiB5b3Ugc3BlY2lmeSBtdWx0aXBsZSBjYXBhY2l0eSBwcm92aWRlcnMgaW4gYSBzdHJhdGVneSB0aGF0IGFsbCBoYXZlIGEgd2VpZ2h0IG9mIGBgMGBgLCBhbnkgYGBSdW5UYXNrYGAgb3IgYGBDcmVhdGVTZXJ2aWNlYGAgYWN0aW9ucyB1c2luZyB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgd2lsbCBmYWlsLlxuICogIEFuIGV4YW1wbGUgc2NlbmFyaW8gZm9yIHVzaW5nIHdlaWdodHMgaXMgZGVmaW5pbmcgYSBzdHJhdGVneSB0aGF0IGNvbnRhaW5zIHR3byBjYXBhY2l0eSBwcm92aWRlcnMgYW5kIGJvdGggaGF2ZSBhIHdlaWdodCBvZiBgYDFgYCwgdGhlbiB3aGVuIHRoZSBgYGJhc2VgYCBpcyBzYXRpc2ZpZWQsIHRoZSB0YXNrcyB3aWxsIGJlIHNwbGl0IGV2ZW5seSBhY3Jvc3MgdGhlIHR3byBjYXBhY2l0eSBwcm92aWRlcnMuIFVzaW5nIHRoYXQgc2FtZSBsb2dpYywgaWYgeW91IHNwZWNpZnkgYSB3ZWlnaHQgb2YgYGAxYGAgZm9yICpjYXBhY2l0eVByb3ZpZGVyQSogYW5kIGEgd2VpZ2h0IG9mIGBgNGBgIGZvciAqY2FwYWNpdHlQcm92aWRlckIqLCB0aGVuIGZvciBldmVyeSBvbmUgdGFzayB0aGF0J3MgcnVuIHVzaW5nICpjYXBhY2l0eVByb3ZpZGVyQSosIGZvdXIgdGFza3Mgd291bGQgdXNlICpjYXBhY2l0eVByb3ZpZGVyQiouXG4gKi9cbldlaWdodD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VydmljZS4gVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIHRhc2sgZGVmaW5pdGlvbnMgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIHRvIHJlY2VpdmUgdGhlaXIgb3duIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIGFuZCBpdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBvdGhlciBuZXR3b3JrIG1vZGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIE5ldHdvcmtpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stbmV0d29ya2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0NvbmZpZ3VyYXRpb24ge1xuQXdzdnBjQ29uZmlndXJhdGlvbj86IEF3c1ZwY0NvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIFZQQyBzdWJuZXRzIGFuZCBzZWN1cml0eSBncm91cHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgdGFzay5cbiAqICAgQWxsIHNwZWNpZmllZCBzdWJuZXRzIGFuZCBzZWN1cml0eSBncm91cHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NWcGNDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIElEcyBvZiB0aGUgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzayBvciBzZXJ2aWNlLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHNlY3VyaXR5IGdyb3VwLCB0aGUgZGVmYXVsdCBzZWN1cml0eSBncm91cCBmb3IgdGhlIFZQQyBpcyB1c2VkLiBUaGVyZSdzIGEgbGltaXQgb2YgNSBzZWN1cml0eSBncm91cHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIHBlciBgYGF3c3ZwY0NvbmZpZ3VyYXRpb25gYC5cbiAqICAgQWxsIHNwZWNpZmllZCBzZWN1cml0eSBncm91cHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuU2VjdXJpdHlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgSURzIG9mIHRoZSBzdWJuZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzayBvciBzZXJ2aWNlLiBUaGVyZSdzIGEgbGltaXQgb2YgMTYgc3VibmV0cyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgcGVyIGBgYXdzdnBjQ29uZmlndXJhdGlvbmBgLlxuICogICBBbGwgc3BlY2lmaWVkIHN1Ym5ldHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuU3VibmV0cz86IHN0cmluZ1tdXG4vKipcbiAqIFdoZXRoZXIgdGhlIHRhc2sncyBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlIHJlY2VpdmVzIGEgcHVibGljIElQIGFkZHJlc3MuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgRElTQUJMRURgYC5cbiAqL1xuQXNzaWduUHVibGljSXA/OiAoXCJESVNBQkxFRFwiIHwgXCJFTkFCTEVEXCIpXG59XG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb25zdHJhaW50IG9uIHRhc2sgcGxhY2VtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIHBsYWNlbWVudCBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtY29uc3RyYWludHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3UncmUgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGFyZW4ndCBzdXBwb3J0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50Q29uc3RyYWludCB7XG4vKipcbiAqIFRoZSB0eXBlIG9mIGNvbnN0cmFpbnQuIFVzZSBgYGRpc3RpbmN0SW5zdGFuY2VgYCB0byBlbnN1cmUgdGhhdCBlYWNoIHRhc2sgaW4gYSBwYXJ0aWN1bGFyIGdyb3VwIGlzIHJ1bm5pbmcgb24gYSBkaWZmZXJlbnQgY29udGFpbmVyIGluc3RhbmNlLiBVc2UgYGBtZW1iZXJPZmBgIHRvIHJlc3RyaWN0IHRoZSBzZWxlY3Rpb24gdG8gYSBncm91cCBvZiB2YWxpZCBjYW5kaWRhdGVzLlxuICovXG5UeXBlOiAoXCJkaXN0aW5jdEluc3RhbmNlXCIgfCBcIm1lbWJlck9mXCIpXG4vKipcbiAqIEEgY2x1c3RlciBxdWVyeSBsYW5ndWFnZSBleHByZXNzaW9uIHRvIGFwcGx5IHRvIHRoZSBjb25zdHJhaW50LiBUaGUgZXhwcmVzc2lvbiBjYW4gaGF2ZSBhIG1heGltdW0gbGVuZ3RoIG9mIDIwMDAgY2hhcmFjdGVycy4gWW91IGNhbid0IHNwZWNpZnkgYW4gZXhwcmVzc2lvbiBpZiB0aGUgY29uc3RyYWludCB0eXBlIGlzIGBgZGlzdGluY3RJbnN0YW5jZWBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDbHVzdGVyIHF1ZXJ5IGxhbmd1YWdlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jbHVzdGVyLXF1ZXJ5LWxhbmd1YWdlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRXhwcmVzc2lvbj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYGBMb2FkQmFsYW5jZXJgYCBwcm9wZXJ0eSBzcGVjaWZpZXMgZGV0YWlscyBvbiBhIGxvYWQgYmFsYW5jZXIgdGhhdCBpcyB1c2VkIHdpdGggYSBzZXJ2aWNlLlxuICogIElmIHRoZSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB0aGUgc2VydmljZSBpcyByZXF1aXJlZCB0byB1c2UgZWl0aGVyIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBXaGVuIHlvdSBhcmUgY3JlYXRpbmcgYW4gQUNEbG9uZyBkZXBsb3ltZW50IGdyb3VwLCB5b3Ugc3BlY2lmeSB0d28gdGFyZ2V0IGdyb3VwcyAocmVmZXJyZWQgdG8gYXMgYSBgYHRhcmdldEdyb3VwUGFpcmBgKS4gRWFjaCB0YXJnZXQgZ3JvdXAgYmluZHMgdG8gYSBzZXBhcmF0ZSB0YXNrIHNldCBpbiB0aGUgZGVwbG95bWVudC4gVGhlIGxvYWQgYmFsYW5jZXIgY2FuIGFsc28gaGF2ZSB1cCB0byB0d28gbGlzdGVuZXJzLCBhIHJlcXVpcmVkIGxpc3RlbmVyIGZvciBwcm9kdWN0aW9uIHRyYWZmaWMgYW5kIGFuIG9wdGlvbmFsIGxpc3RlbmVyIHRoYXQgYWxsb3dzIHlvdSB0byB0ZXN0IG5ldyByZXZpc2lvbnMgb2YgdGhlIHNlcnZpY2UgYmVmb3JlIHJvdXRpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIGl0LlxuICogIFNlcnZpY2VzIHdpdGggdGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIChmb3IgZXhhbXBsZSwgdGhvc2Ugd2l0aCB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSkgb25seSBzdXBwb3J0IEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzIGFuZCBOZXR3b3JrIExvYWQgQmFsYW5jZXJzLiBDbGFzc2ljIExvYWQgQmFsYW5jZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiBBbHNvLCB3aGVuIHlvdSBjcmVhdGUgYW55IHRhcmdldCBncm91cHMgZm9yIHRoZXNlIHNlcnZpY2VzLCB5b3UgbXVzdCBjaG9vc2UgYGBpcGBgIGFzIHRoZSB0YXJnZXQgdHlwZSwgbm90IGBgaW5zdGFuY2VgYC4gVGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgbm90IGFuIEFtYXpvbiBFQzIgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyIHtcbi8qKlxuICogVGhlIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgdGFyZ2V0IGdyb3VwIG9yIGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggYSBzZXJ2aWNlIG9yIHRhc2sgc2V0LlxuICogIEEgdGFyZ2V0IGdyb3VwIEFSTiBpcyBvbmx5IHNwZWNpZmllZCB3aGVuIHVzaW5nIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBcbiAqICBGb3Igc2VydmljZXMgdXNpbmcgdGhlIGBgRUNTYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UgY2FuIHNwZWNpZnkgb25lIG9yIG11bHRpcGxlIHRhcmdldCBncm91cHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JlZ2lzdGVyaW5nIG11bHRpcGxlIHRhcmdldCBncm91cHMgd2l0aCBhIHNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3JlZ2lzdGVyLW11bHRpcGxlLXRhcmdldGdyb3Vwcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIHNlcnZpY2VzIHVzaW5nIHRoZSBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UncmUgcmVxdWlyZWQgdG8gZGVmaW5lIHR3byB0YXJnZXQgZ3JvdXBzIGZvciB0aGUgbG9hZCBiYWxhbmNlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQmx1ZS9ncmVlbiBkZXBsb3ltZW50IHdpdGggQ29kZURlcGxveV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWJsdWVncmVlbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc2VydmljZSdzIHRhc2sgZGVmaW5pdGlvbiB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSwgeW91IG11c3QgY2hvb3NlIGBgaXBgYCBhcyB0aGUgdGFyZ2V0IHR5cGUsIG5vdCBgYGluc3RhbmNlYGAuIERvIHRoaXMgd2hlbiBjcmVhdGluZyB5b3VyIHRhcmdldCBncm91cHMgYmVjYXVzZSB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS4gVGhpcyBuZXR3b3JrIG1vZGUgaXMgcmVxdWlyZWQgZm9yIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLlxuICovXG5UYXJnZXRHcm91cEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbG9hZCBiYWxhbmNlciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmljZSBvciB0YXNrIHNldC5cbiAqICBJZiB5b3UgYXJlIHVzaW5nIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgYSBOZXR3b3JrIExvYWQgQmFsYW5jZXIgdGhlIGxvYWQgYmFsYW5jZXIgbmFtZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIG9taXR0ZWQuXG4gKi9cbkxvYWRCYWxhbmNlck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciAoYXMgaXQgYXBwZWFycyBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uKSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci5cbiAqICBZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjb250YWluZXIgbmFtZSB3aGVuIGNvbmZpZ3VyaW5nIHRoZSB0YXJnZXQgZ3JvdXAgZm9yIGFuIEFtYXpvbiBFQ1MgbG9hZCBiYWxhbmNlci5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCBvbiB0aGUgY29udGFpbmVyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLiBUaGlzIHBvcnQgbXVzdCBjb3JyZXNwb25kIHRvIGEgYGBjb250YWluZXJQb3J0YGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgYXJlIHVzaW5nLiBGb3IgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlIGNvbnRhaW5lciBpbnN0YW5jZSB0aGV5J3JlIGxhdW5jaGVkIG9uIG11c3QgYWxsb3cgaW5ncmVzcyB0cmFmZmljIG9uIHRoZSBgYGhvc3RQb3J0YGAgb2YgdGhlIHBvcnQgbWFwcGluZy5cbiAqL1xuQ29udGFpbmVyUG9ydD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzZXJ2aWNlIHRvIGRpc2NvdmVyIGFuZCBjb25uZWN0IHRvIHNlcnZpY2VzLCBhbmQgYmUgZGlzY292ZXJlZCBieSwgYW5kIGNvbm5lY3RlZCBmcm9tLCBvdGhlciBzZXJ2aWNlcyB3aXRoaW4gYSBuYW1lc3BhY2UuXG4gKiAgVGFza3MgdGhhdCBydW4gaW4gYSBuYW1lc3BhY2UgY2FuIHVzZSBzaG9ydCBuYW1lcyB0byBjb25uZWN0IHRvIHNlcnZpY2VzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNhbiBjb25uZWN0IHRvIHNlcnZpY2VzIGFjcm9zcyBhbGwgb2YgdGhlIGNsdXN0ZXJzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNvbm5lY3QgdGhyb3VnaCBhIG1hbmFnZWQgcHJveHkgY29udGFpbmVyIHRoYXQgY29sbGVjdHMgbG9ncyBhbmQgbWV0cmljcyBmb3IgaW5jcmVhc2VkIHZpc2liaWxpdHkuIE9ubHkgdGhlIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBzZXJ2aWNlcyBjcmVhdGUgYXJlIHN1cHBvcnRlZCB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBsaXN0IG9mIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlIG9iamVjdHMuIFRoZXNlIGFyZSBuYW1lcyBhbmQgYWxpYXNlcyAoYWxzbyBrbm93biBhcyBlbmRwb2ludHMpIHRoYXQgYXJlIHVzZWQgYnkgb3RoZXIgQW1hem9uIEVDUyBzZXJ2aWNlcyB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS4gXG4gKiAgVGhpcyBmaWVsZCBpcyBub3QgcmVxdWlyZWQgZm9yIGEgXCJjbGllbnRcIiBBbWF6b24gRUNTIHNlcnZpY2UgdGhhdCdzIGEgbWVtYmVyIG9mIGEgbmFtZXNwYWNlIG9ubHkgdG8gY29ubmVjdCB0byBvdGhlciBzZXJ2aWNlcyB3aXRoaW4gdGhlIG5hbWVzcGFjZS4gQW4gZXhhbXBsZSBvZiB0aGlzIHdvdWxkIGJlIGEgZnJvbnRlbmQgYXBwbGljYXRpb24gdGhhdCBhY2NlcHRzIGluY29taW5nIHJlcXVlc3RzIGZyb20gZWl0aGVyIGEgbG9hZCBiYWxhbmNlciB0aGF0J3MgYXR0YWNoZWQgdG8gdGhlIHNlcnZpY2Ugb3IgYnkgb3RoZXIgbWVhbnMuXG4gKiAgQW4gb2JqZWN0IHNlbGVjdHMgYSBwb3J0IGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiwgYXNzaWducyBhIG5hbWUgZm9yIHRoZSBDTUFQbG9uZyBzZXJ2aWNlLCBhbmQgYSBsaXN0IG9mIGFsaWFzZXMgKGVuZHBvaW50cykgYW5kIHBvcnRzIGZvciBjbGllbnQgYXBwbGljYXRpb25zIHRvIHJlZmVyIHRvIHRoaXMgc2VydmljZS5cbiAqL1xuU2VydmljZXM/OiBTZXJ2aWNlQ29ubmVjdFNlcnZpY2VbXVxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byB1c2UgU2VydmljZSBDb25uZWN0IHdpdGggdGhpcyBzZXJ2aWNlLlxuICovXG5FbmFibGVkOiBib29sZWFuXG5Mb2dDb25maWd1cmF0aW9uPzogTG9nQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbmFtZXNwYWNlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQ01BUGxvbmcgbmFtZXNwYWNlIGZvciB1c2Ugd2l0aCBTZXJ2aWNlIENvbm5lY3QuIFRoZSBuYW1lc3BhY2UgbXVzdCBiZSBpbiB0aGUgc2FtZSBBV1MgUmVnaW9uIGFzIHRoZSBBbWF6b24gRUNTIHNlcnZpY2UgYW5kIGNsdXN0ZXIuIFRoZSB0eXBlIG9mIG5hbWVzcGFjZSBkb2Vzbid0IGFmZmVjdCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IENNQVBsb25nLCBzZWUgW1dvcmtpbmcgd2l0aCBTZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkLW1hcC9sYXRlc3QvZGcvd29ya2luZy13aXRoLXNlcnZpY2VzLmh0bWwpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTmFtZXNwYWNlPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZSBvYmplY3QgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0U2VydmljZSB7XG5UaW1lb3V0PzogVGltZW91dENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIHBvcnQgbnVtYmVyIGZvciB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5IHRvIGxpc3RlbiBvbi5cbiAqICBVc2UgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgdG8gYnlwYXNzIHRoZSBwcm94eSBmb3IgdHJhZmZpYyBvbiB0aGUgcG9ydCBudW1iZXIgc3BlY2lmaWVkIGluIHRoZSBuYW1lZCBgYHBvcnRNYXBwaW5nYGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBvZiB0aGlzIGFwcGxpY2F0aW9uLCBhbmQgdGhlbiB1c2UgaXQgaW4geW91ciBWUEMgc2VjdXJpdHkgZ3JvdXBzIHRvIGFsbG93IHRyYWZmaWMgaW50byB0aGUgcHJveHkgZm9yIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLlxuICogIEluIGBgYXdzdnBjYGAgbW9kZSBhbmQgRmFyZ2F0ZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGNvbnRhaW5lciBwb3J0IG51bWJlci4gVGhlIGNvbnRhaW5lciBwb3J0IG51bWJlciBpcyBpbiB0aGUgYGBwb3J0TWFwcGluZ2BgIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIEluIGJyaWRnZSBtb2RlLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZXBoZW1lcmFsIHBvcnQgb2YgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eS5cbiAqL1xuSW5ncmVzc1BvcnRPdmVycmlkZT86IG51bWJlclxuLyoqXG4gKiBUaGUgbGlzdCBvZiBjbGllbnQgYWxpYXNlcyBmb3IgdGhpcyBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZS4gWW91IHVzZSB0aGVzZSB0byBhc3NpZ24gbmFtZXMgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnQgYXBwbGljYXRpb25zLiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2xpZW50IGFsaWFzZXMgdGhhdCB5b3UgY2FuIGhhdmUgaW4gdGhpcyBsaXN0IGlzIDEuXG4gKiAgRWFjaCBhbGlhcyAoXCJlbmRwb2ludFwiKSBpcyBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGFuZCBwb3J0IG51bWJlciB0aGF0IG90aGVyIEFtYXpvbiBFQ1MgdGFza3MgKFwiY2xpZW50c1wiKSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLlxuICogIEVhY2ggbmFtZSBhbmQgcG9ydCBtYXBwaW5nIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgbmFtZXNwYWNlLlxuICogIEZvciBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAsIHlvdSBtdXN0IHByb3ZpZGUgYXQgbGVhc3Qgb25lIGBgY2xpZW50QWxpYXNgYCB3aXRoIG9uZSBgYHBvcnRgYC5cbiAqL1xuQ2xpZW50QWxpYXNlcz86IFNlcnZpY2VDb25uZWN0Q2xpZW50QWxpYXNbXVxuVGxzPzogU2VydmljZUNvbm5lY3RUbHNDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpcyB0aGUgbmFtZSBvZiB0aGUgbmV3IENNQVAgc2VydmljZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBmb3IgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuIFRoaXMgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBDTUFQIG5hbWVzcGFjZS4gVGhlIG5hbWUgY2FuIGNvbnRhaW4gdXAgdG8gNjQgY2hhcmFjdGVycy4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIChfKSwgYW5kIGh5cGhlbnMgKC0pLiBUaGUgbmFtZSBjYW4ndCBzdGFydCB3aXRoIGEgaHlwaGVuLlxuICogIElmIHRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBwb3J0IG1hcHBpbmcgbmFtZSBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gaXMgdXNlZCBpbiBgYHBvcnROYW1lLm5hbWVzcGFjZWBgLlxuICovXG5EaXNjb3ZlcnlOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBgYHBvcnROYW1lYGAgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlIGBgcG9ydE1hcHBpbmdzYGAgZnJvbSBhbGwgdGhlIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBvZiB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqL1xuUG9ydE5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBjb25maWd1cmVkIHRpbWVvdXRzIGZvciBTZXJ2aWNlIENvbm5lY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGltZW91dENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHRpbWUgd2FpdGluZyBmb3IgdGhlIHVwc3RyZWFtIHRvIHJlc3BvbmQgd2l0aCBhIGNvbXBsZXRlIHJlc3BvbnNlIHBlciByZXF1ZXN0LiBBIHZhbHVlIG9mIGBgMGBgIGNhbiBiZSBzZXQgdG8gZGlzYWJsZSBgYHBlclJlcXVlc3RUaW1lb3V0YGAuIGBgcGVyUmVxdWVzdFRpbWVvdXRgYCBjYW4gb25seSBiZSBzZXQgaWYgU2VydmljZSBDb25uZWN0IGBgYXBwUHJvdG9jb2xgYCBpc24ndCBgYFRDUGBgLiBPbmx5IGBgaWRsZVRpbWVvdXRgYCBpcyBhbGxvd2VkIGZvciBgYFRDUGBgIGBgYXBwUHJvdG9jb2xgYC5cbiAqL1xuUGVyUmVxdWVzdFRpbWVvdXRTZWNvbmRzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIGEgY29ubmVjdGlvbiB3aWxsIHN0YXkgYWN0aXZlIHdoaWxlIGlkbGUuIEEgdmFsdWUgb2YgYGAwYGAgY2FuIGJlIHNldCB0byBkaXNhYmxlIGBgaWRsZVRpbWVvdXRgYC5cbiAqICBUaGUgYGBpZGxlVGltZW91dGBgIGRlZmF1bHQgZm9yIGBgSFRUUGBgL2BgSFRUUDJgYC9gYEdSUENgYCBpcyA1IG1pbnV0ZXMuXG4gKiAgVGhlIGBgaWRsZVRpbWVvdXRgYCBkZWZhdWx0IGZvciBgYFRDUGBgIGlzIDEgaG91ci5cbiAqL1xuSWRsZVRpbWVvdXRTZWNvbmRzPzogbnVtYmVyXG59XG4vKipcbiAqIEVhY2ggYWxpYXMgKFwiZW5kcG9pbnRcIikgaXMgYSBmdWxseS1xdWFsaWZpZWQgbmFtZSBhbmQgcG9ydCBudW1iZXIgdGhhdCBvdGhlciB0YXNrcyAoXCJjbGllbnRzXCIpIGNhbiB1c2UgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuXG4gKiAgRWFjaCBuYW1lIGFuZCBwb3J0IG1hcHBpbmcgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBuYW1lc3BhY2UuXG4gKiAgVGFza3MgdGhhdCBydW4gaW4gYSBuYW1lc3BhY2UgY2FuIHVzZSBzaG9ydCBuYW1lcyB0byBjb25uZWN0IHRvIHNlcnZpY2VzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNhbiBjb25uZWN0IHRvIHNlcnZpY2VzIGFjcm9zcyBhbGwgb2YgdGhlIGNsdXN0ZXJzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNvbm5lY3QgdGhyb3VnaCBhIG1hbmFnZWQgcHJveHkgY29udGFpbmVyIHRoYXQgY29sbGVjdHMgbG9ncyBhbmQgbWV0cmljcyBmb3IgaW5jcmVhc2VkIHZpc2liaWxpdHkuIE9ubHkgdGhlIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBzZXJ2aWNlcyBjcmVhdGUgYXJlIHN1cHBvcnRlZCB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0Q2xpZW50QWxpYXMge1xuLyoqXG4gKiBUaGUgYGBkbnNOYW1lYGAgaXMgdGhlIG5hbWUgdGhhdCB5b3UgdXNlIGluIHRoZSBhcHBsaWNhdGlvbnMgb2YgY2xpZW50IHRhc2tzIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLiBUaGUgbmFtZSBtdXN0IGJlIGEgdmFsaWQgRE5TIG5hbWUgYnV0IGRvZXNuJ3QgbmVlZCB0byBiZSBmdWxseS1xdWFsaWZpZWQuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIHVwIHRvIDEyNyBjaGFyYWN0ZXJzLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSBsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMgKF8pLCBoeXBoZW5zICgtKSwgYW5kIHBlcmlvZHMgKC4pLiBUaGUgbmFtZSBjYW4ndCBzdGFydCB3aXRoIGEgaHlwaGVuLlxuICogIElmIHRoaXMgcGFyYW1ldGVyIGlzbid0IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBkaXNjb3ZlcnlOYW1lLm5hbWVzcGFjZWBgIGlzIHVzZWQuIElmIHRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBwb3J0IG1hcHBpbmcgbmFtZSBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gaXMgdXNlZCBpbiBgYHBvcnROYW1lLm5hbWVzcGFjZWBgLlxuICogIFRvIGF2b2lkIGNoYW5naW5nIHlvdXIgYXBwbGljYXRpb25zIGluIGNsaWVudCBBbWF6b24gRUNTIHNlcnZpY2VzLCBzZXQgdGhpcyB0byB0aGUgc2FtZSBuYW1lIHRoYXQgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB1c2VzIGJ5IGRlZmF1bHQuIEZvciBleGFtcGxlLCBhIGZldyBjb21tb24gbmFtZXMgYXJlIGBgZGF0YWJhc2VgYCwgYGBkYmBgLCBvciB0aGUgbG93ZXJjYXNlIG5hbWUgb2YgYSBkYXRhYmFzZSwgc3VjaCBhcyBgYG15c3FsYGAgb3IgYGByZWRpc2BgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkRuc05hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGxpc3RlbmluZyBwb3J0IG51bWJlciBmb3IgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eS4gVGhpcyBwb3J0IGlzIGF2YWlsYWJsZSBpbnNpZGUgb2YgYWxsIG9mIHRoZSB0YXNrcyB3aXRoaW4gdGhlIHNhbWUgbmFtZXNwYWNlLlxuICogIFRvIGF2b2lkIGNoYW5naW5nIHlvdXIgYXBwbGljYXRpb25zIGluIGNsaWVudCBBbWF6b24gRUNTIHNlcnZpY2VzLCBzZXQgdGhpcyB0byB0aGUgc2FtZSBwb3J0IHRoYXQgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB1c2VzIGJ5IGRlZmF1bHQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUG9ydDogbnVtYmVyXG59XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRsc0NvbmZpZ3VyYXRpb24ge1xuSXNzdWVyQ2VydGlmaWNhdGVBdXRob3JpdHk6IFNlcnZpY2VDb25uZWN0VGxzQ2VydGlmaWNhdGVBdXRob3JpdHlcbi8qKlxuICogVGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleS5cbiAqL1xuS21zS2V5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgU2VydmljZSBDb25uZWN0IFRMUy5cbiAqL1xuUm9sZUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgc2lnbmVyIGNlcnRpZmljYXRlIGF1dGhvcml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRsc0NlcnRpZmljYXRlQXV0aG9yaXR5IHtcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGNlcnRpZmljYXRlLlxuICovXG5Bd3NQY2FBdXRob3JpdHlBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGxvZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgTG9nQ29uZmlnYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tbG9nLWRyaXZlcmBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogIEJ5IGRlZmF1bHQsIGNvbnRhaW5lcnMgdXNlIHRoZSBzYW1lIGxvZ2dpbmcgZHJpdmVyIHRoYXQgdGhlIERvY2tlciBkYWVtb24gdXNlcy4gSG93ZXZlciwgdGhlIGNvbnRhaW5lciBtaWdodCB1c2UgYSBkaWZmZXJlbnQgbG9nZ2luZyBkcml2ZXIgdGhhbiB0aGUgRG9ja2VyIGRhZW1vbiBieSBzcGVjaWZ5aW5nIGEgbG9nIGRyaXZlciBjb25maWd1cmF0aW9uIGluIHRoZSBjb250YWluZXIgZGVmaW5pdGlvbi5cbiAqICBVbmRlcnN0YW5kIHRoZSBmb2xsb3dpbmcgd2hlbiBzcGVjaWZ5aW5nIGEgbG9nIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgY29udGFpbmVycy5cbiAqICAgKyAgQW1hem9uIEVDUyBjdXJyZW50bHkgc3VwcG9ydHMgYSBzdWJzZXQgb2YgdGhlIGxvZ2dpbmcgZHJpdmVycyBhdmFpbGFibGUgdG8gdGhlIERvY2tlciBkYWVtb24uIEFkZGl0aW9uYWwgbG9nIGRyaXZlcnMgbWF5IGJlIGF2YWlsYWJsZSBpbiBmdXR1cmUgcmVsZWFzZXMgb2YgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50LlxuICogIEZvciB0YXNrcyBvbiBGQVJHQVRFbG9uZywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIHRhc2tzIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgZmx1ZW50ZGBgLCBgYGdlbGZgYCwgYGBqc29uLWZpbGVgYCwgYGBqb3VybmFsZGBgLGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgICsgIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOCBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS5cbiAqICAgKyAgRm9yIHRhc2tzIHRoYXQgYXJlIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IG11c3QgcmVnaXN0ZXIgdGhlIGF2YWlsYWJsZSBsb2dnaW5nIGRyaXZlcnMgd2l0aCB0aGUgYGBFQ1NfQVZBSUxBQkxFX0xPR0dJTkdfRFJJVkVSU2BgIGVudmlyb25tZW50IHZhcmlhYmxlIGJlZm9yZSBjb250YWluZXJzIHBsYWNlZCBvbiB0aGF0IGluc3RhbmNlIGNhbiB1c2UgdGhlc2UgbG9nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgY29uZmlndXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLWFnZW50LWNvbmZpZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IGFyZSBvbiBGQVJHQVRFbG9uZywgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgeW91ciB0YXNrcyBhcmUgaG9zdGVkIG9uLCBhbnkgYWRkaXRpb25hbCBzb2Z0d2FyZSBuZWVkZWQgbXVzdCBiZSBpbnN0YWxsZWQgb3V0c2lkZSBvZiB0aGUgdGFzay4gRm9yIGV4YW1wbGUsIHRoZSBGbHVlbnRkIG91dHB1dCBhZ2dyZWdhdG9ycyBvciBhIHJlbW90ZSBob3N0IHJ1bm5pbmcgTG9nc3Rhc2ggdG8gc2VuZCBHZWxmIGxvZ3MgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzZWNyZXRzIHRvIHBhc3MgdG8gdGhlIGxvZyBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTcGVjaWZ5aW5nIHNlbnNpdGl2ZSBkYXRhXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuU2VjcmV0T3B0aW9ucz86IFNlY3JldFtdXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VuZCB0byB0aGUgbG9nIGRyaXZlci5cbiAqICBUaGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgZGVwZW5kIG9uIHRoZSBsb2cgZHJpdmVyLiBTb21lIG9mIHRoZSBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSB3aGVuIHlvdSB1c2UgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIgdG8gcm91dGUgbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgYXdzbG9ncy1jcmVhdGUtZ3JvdXAgUmVxdWlyZWQ6IE5vIFNwZWNpZnkgd2hldGhlciB5b3Ugd2FudCB0aGUgbG9nIGdyb3VwIHRvIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS4gSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBmYWxzZS4gWW91ciBJQU0gcG9saWN5IG11c3QgaW5jbHVkZSB0aGUgbG9nczpDcmVhdGVMb2dHcm91cCBwZXJtaXNzaW9uIGJlZm9yZSB5b3UgYXR0ZW1wdCB0byB1c2UgYXdzbG9ncy1jcmVhdGUtZ3JvdXAuICsgYXdzbG9ncy1yZWdpb24gUmVxdWlyZWQ6IFllcyBTcGVjaWZ5IHRoZSBSZWdpb24gdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIGlzIHRvIHNlbmQgeW91ciBEb2NrZXIgbG9ncyB0by4gWW91IGNhbiBjaG9vc2UgdG8gc2VuZCBhbGwgb2YgeW91ciBsb2dzIGZyb20gY2x1c3RlcnMgaW4gZGlmZmVyZW50IFJlZ2lvbnMgdG8gYSBzaW5nbGUgcmVnaW9uIGluIENsb3VkV2F0Y2ggTG9ncy4gVGhpcyBpcyBzbyB0aGF0IHRoZXkncmUgYWxsIHZpc2libGUgaW4gb25lIGxvY2F0aW9uLiBPdGhlcndpc2UsIHlvdSBjYW4gc2VwYXJhdGUgdGhlbSBieSBSZWdpb24gZm9yIG1vcmUgZ3JhbnVsYXJpdHkuIE1ha2Ugc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgbG9nIGdyb3VwIGV4aXN0cyBpbiB0aGUgUmVnaW9uIHRoYXQgeW91IHNwZWNpZnkgd2l0aCB0aGlzIG9wdGlvbi4gKyBhd3Nsb2dzLWdyb3VwIFJlcXVpcmVkOiBZZXMgTWFrZSBzdXJlIHRvIHNwZWNpZnkgYSBsb2cgZ3JvdXAgdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIHNlbmRzIGl0cyBsb2cgc3RyZWFtcyB0by4gKyBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggUmVxdWlyZWQ6IFllcywgd2hlbiB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS5PcHRpb25hbCBmb3IgdGhlIEVDMiBsYXVuY2ggdHlwZSwgcmVxdWlyZWQgZm9yIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLiBVc2UgdGhlIGF3c2xvZ3Mtc3RyZWFtLXByZWZpeCBvcHRpb24gdG8gYXNzb2NpYXRlIGEgbG9nIHN0cmVhbSB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LCB0aGUgY29udGFpbmVyIG5hbWUsIGFuZCB0aGUgSUQgb2YgdGhlIEFtYXpvbiBFQ1MgdGFzayB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0by4gSWYgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSB0YWtlcyB0aGUgZm9ybWF0IHByZWZpeC1uYW1lL2NvbnRhaW5lci1uYW1lL2Vjcy10YXNrLWlkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLCB0aGVuIHRoZSBsb2cgc3RyZWFtIGlzIG5hbWVkIGFmdGVyIHRoZSBjb250YWluZXIgSUQgdGhhdCdzIGFzc2lnbmVkIGJ5IHRoZSBEb2NrZXIgZGFlbW9uIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UuIEJlY2F1c2UgaXQncyBkaWZmaWN1bHQgdG8gdHJhY2UgbG9ncyBiYWNrIHRvIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0gd2l0aCBqdXN0IHRoZSBEb2NrZXIgY29udGFpbmVyIElEICh3aGljaCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlKSwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbi4gRm9yIEFtYXpvbiBFQ1Mgc2VydmljZXMsIHlvdSBjYW4gdXNlIHRoZSBzZXJ2aWNlIG5hbWUgYXMgdGhlIHByZWZpeC4gRG9pbmcgc28sIHlvdSBjYW4gdHJhY2UgbG9nIHN0cmVhbXMgdG8gdGhlIHNlcnZpY2UgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8sIHRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0sIGFuZCB0aGUgSUQgb2YgdGhlIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIFlvdSBtdXN0IHNwZWNpZnkgYSBzdHJlYW0tcHJlZml4IGZvciB5b3VyIGxvZ3MgdG8gaGF2ZSB5b3VyIGxvZ3MgYXBwZWFyIGluIHRoZSBMb2cgcGFuZSB3aGVuIHVzaW5nIHRoZSBBbWF6b24gRUNTIGNvbnNvbGUuICsgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiBpbiBQeXRob24gc3RyZnRpbWUgZm9ybWF0LiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIE9uZSBleGFtcGxlIG9mIGEgdXNlIGNhc2UgZm9yIHVzaW5nIHRoaXMgZm9ybWF0IGlzIGZvciBwYXJzaW5nIG91dHB1dCBzdWNoIGFzIGEgc3RhY2sgZHVtcCwgd2hpY2ggbWlnaHQgb3RoZXJ3aXNlIGJlIGxvZ2dlZCBpbiBtdWx0aXBsZSBlbnRyaWVzLiBUaGUgY29ycmVjdCBwYXR0ZXJuIGFsbG93cyBpdCB0byBiZSBjYXB0dXJlZCBpbiBhIHNpbmdsZSBlbnRyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiArIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiB0aGF0IHVzZXMgYSByZWd1bGFyIGV4cHJlc3Npb24uIEEgbG9nIG1lc3NhZ2UgY29uc2lzdHMgb2YgYSBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybiBhbmQgYW55IGZvbGxvd2luZyBsaW5lcyB0aGF0IGRvbuKAmXQgbWF0Y2ggdGhlIHBhdHRlcm4uIFRoZSBtYXRjaGVkIGxpbmUgaXMgdGhlIGRlbGltaXRlciBiZXR3ZWVuIGxvZyBtZXNzYWdlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuLiBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGlzIGFsc28gY29uZmlndXJlZC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiArIG1vZGUgUmVxdWlyZWQ6IE5vIFZhbGlkIHZhbHVlczogbm9uLWJsb2NraW5nIHwgYmxvY2tpbmcgVGhpcyBvcHRpb24gZGVmaW5lcyB0aGUgZGVsaXZlcnkgbW9kZSBvZiBsb2cgbWVzc2FnZXMgZnJvbSB0aGUgY29udGFpbmVyIHRvIENsb3VkV2F0Y2ggTG9ncy4gVGhlIGRlbGl2ZXJ5IG1vZGUgeW91IGNob29zZSBhZmZlY3RzIGFwcGxpY2F0aW9uIGF2YWlsYWJpbGl0eSB3aGVuIHRoZSBmbG93IG9mIGxvZ3MgZnJvbSBjb250YWluZXIgdG8gQ2xvdWRXYXRjaCBpcyBpbnRlcnJ1cHRlZC4gSWYgeW91IHVzZSB0aGUgYmxvY2tpbmcgbW9kZSBhbmQgdGhlIGZsb3cgb2YgbG9ncyB0byBDbG91ZFdhdGNoIGlzIGludGVycnVwdGVkLCBjYWxscyBmcm9tIGNvbnRhaW5lciBjb2RlIHRvIHdyaXRlIHRvIHRoZSBzdGRvdXQgYW5kIHN0ZGVyciBzdHJlYW1zIHdpbGwgYmxvY2suIFRoZSBsb2dnaW5nIHRocmVhZCBvZiB0aGUgYXBwbGljYXRpb24gd2lsbCBibG9jayBhcyBhIHJlc3VsdC4gVGhpcyBtYXkgY2F1c2UgdGhlIGFwcGxpY2F0aW9uIHRvIGJlY29tZSB1bnJlc3BvbnNpdmUgYW5kIGxlYWQgdG8gY29udGFpbmVyIGhlYWx0aGNoZWNrIGZhaWx1cmUuIElmIHlvdSB1c2UgdGhlIG5vbi1ibG9ja2luZyBtb2RlLCB0aGUgY29udGFpbmVyJ3MgbG9ncyBhcmUgaW5zdGVhZCBzdG9yZWQgaW4gYW4gaW4tbWVtb3J5IGludGVybWVkaWF0ZSBidWZmZXIgY29uZmlndXJlZCB3aXRoIHRoZSBtYXgtYnVmZmVyLXNpemUgb3B0aW9uLiBUaGlzIHByZXZlbnRzIHRoZSBhcHBsaWNhdGlvbiBmcm9tIGJlY29taW5nIHVucmVzcG9uc2l2ZSB3aGVuIGxvZ3MgY2Fubm90IGJlIHNlbnQgdG8gQ2xvdWRXYXRjaC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoaXMgbW9kZSBpZiB5b3Ugd2FudCB0byBlbnN1cmUgc2VydmljZSBhdmFpbGFiaWxpdHkgYW5kIGFyZSBva2F5IHdpdGggc29tZSBsb2cgbG9zcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBQcmV2ZW50aW5nIGxvZyBsb3NzIHdpdGggbm9uLWJsb2NraW5nIG1vZGUgaW4gdGhlIGF3c2xvZ3MgY29udGFpbmVyIGxvZyBkcml2ZXIuICsgbWF4LWJ1ZmZlci1zaXplIFJlcXVpcmVkOiBObyBEZWZhdWx0IHZhbHVlOiAxbSBXaGVuIG5vbi1ibG9ja2luZyBtb2RlIGlzIHVzZWQsIHRoZSBtYXgtYnVmZmVyLXNpemUgbG9nIG9wdGlvbiBjb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRoYXQncyB1c2VkIGZvciBpbnRlcm1lZGlhdGUgbWVzc2FnZSBzdG9yYWdlLiBNYWtlIHN1cmUgdG8gc3BlY2lmeSBhbiBhZGVxdWF0ZSBidWZmZXIgc2l6ZSBiYXNlZCBvbiB5b3VyIGFwcGxpY2F0aW9uLiBXaGVuIHRoZSBidWZmZXIgZmlsbHMgdXAsIGZ1cnRoZXIgbG9ncyBjYW5ub3QgYmUgc3RvcmVkLiBMb2dzIHRoYXQgY2Fubm90IGJlIHN0b3JlZCBhcmUgbG9zdC4gXG4gKiAgVG8gcm91dGUgbG9ncyB1c2luZyB0aGUgYGBzcGx1bmtgYCBsb2cgcm91dGVyLCB5b3UgbmVlZCB0byBzcGVjaWZ5IGEgYGBzcGx1bmstdG9rZW5gYCBhbmQgYSBgYHNwbHVuay11cmxgYC5cbiAqICBXaGVuIHlvdSB1c2UgdGhlIGBgYXdzZmlyZWxlbnNgYCBsb2cgcm91dGVyIHRvIHJvdXRlIGxvZ3MgdG8gYW4gQVdTIFNlcnZpY2Ugb3IgQVdTIFBhcnRuZXIgTmV0d29yayBkZXN0aW5hdGlvbiBmb3IgbG9nIHN0b3JhZ2UgYW5kIGFuYWx5dGljcywgeW91IGNhbiBzZXQgdGhlIGBgbG9nLWRyaXZlci1idWZmZXItbGltaXRgYCBvcHRpb24gdG8gbGltaXQgdGhlIG51bWJlciBvZiBldmVudHMgdGhhdCBhcmUgYnVmZmVyZWQgaW4gbWVtb3J5LCBiZWZvcmUgYmVpbmcgc2VudCB0byB0aGUgbG9nIHJvdXRlciBjb250YWluZXIuIEl0IGNhbiBoZWxwIHRvIHJlc29sdmUgcG90ZW50aWFsIGxvZyBsb3NzIGlzc3VlIGJlY2F1c2UgaGlnaCB0aHJvdWdocHV0IG1pZ2h0IHJlc3VsdCBpbiBtZW1vcnkgcnVubmluZyBvdXQgZm9yIHRoZSBidWZmZXIgaW5zaWRlIG9mIERvY2tlci5cbiAqICBPdGhlciBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSB3aGVuIHVzaW5nIGBgYXdzZmlyZWxlbnNgYCB0byByb3V0ZSBsb2dzIGRlcGVuZCBvbiB0aGUgZGVzdGluYXRpb24uIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBEYXRhIEZpcmVob3NlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIEFXUyBSZWdpb24gd2l0aCBgYHJlZ2lvbmBgIGFuZCBhIG5hbWUgZm9yIHRoZSBsb2cgc3RyZWFtIHdpdGggYGBkZWxpdmVyeV9zdHJlYW1gYC5cbiAqICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gS2luZXNpcyBEYXRhIFN0cmVhbXMsIHlvdSBjYW4gc3BlY2lmeSBhbiBBV1MgUmVnaW9uIHdpdGggYGByZWdpb25gYCBhbmQgYSBkYXRhIHN0cmVhbSBuYW1lIHdpdGggYGBzdHJlYW1gYC5cbiAqICAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIE9wZW5TZWFyY2ggU2VydmljZSwgeW91IGNhbiBzcGVjaWZ5IG9wdGlvbnMgbGlrZSBgYE5hbWVgYCwgYGBIb3N0YGAgKE9wZW5TZWFyY2ggU2VydmljZSBlbmRwb2ludCB3aXRob3V0IHByb3RvY29sKSwgYGBQb3J0YGAsIGBgSW5kZXhgYCwgYGBUeXBlYGAsIGBgQXdzX2F1dGhgYCwgYGBBd3NfcmVnaW9uYGAsIGBgU3VwcHJlc3NfVHlwZV9OYW1lYGAsIGFuZCBgYHRsc2BgLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBTMywgeW91IGNhbiBzcGVjaWZ5IHRoZSBidWNrZXQgdXNpbmcgdGhlIGBgYnVja2V0YGAgb3B0aW9uLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBgYHJlZ2lvbmBgLCBgYHRvdGFsX2ZpbGVfc2l6ZWBgLCBgYHVwbG9hZF90aW1lb3V0YGAsIGFuZCBgYHVzZV9wdXRfb2JqZWN0YGAgYXMgb3B0aW9ucy5cbiAqICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTkgb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuIFRvIGNoZWNrIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSB2ZXJzaW9uIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLCBsb2cgaW4gdG8geW91ciBjb250YWluZXIgaW5zdGFuY2UgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6IGBgc3VkbyBkb2NrZXIgdmVyc2lvbiAtLWZvcm1hdCAne3suU2VydmVyLkFQSVZlcnNpb259fSdgYFxuICovXG5PcHRpb25zPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsfVwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgZHJpdmVyIHRvIHVzZSBmb3IgdGhlIGNvbnRhaW5lci5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCwgYGBzeXNsb2dgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3Nsb2dzYGAgbG9nIGRyaXZlciwgc2VlIFtTZW5kIEFtYXpvbiBFQ1MgbG9ncyB0byBDbG91ZFdhdGNoXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19hd3Nsb2dzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gYW4gc2VydmljZSBvciBQYXJ0bmVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19maXJlbGVucy5odG1sKS5cbiAqICAgSWYgeW91IGhhdmUgYSBjdXN0b20gZHJpdmVyIHRoYXQgaXNuJ3QgbGlzdGVkLCB5b3UgY2FuIGZvcmsgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IHByb2plY3QgdGhhdCdzIFthdmFpbGFibGUgb24gR2l0SHViXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hbWF6b24tZWNzLWFnZW50KSBhbmQgY3VzdG9taXplIGl0IHRvIHdvcmsgd2l0aCB0aGF0IGRyaXZlci4gV2UgZW5jb3VyYWdlIHlvdSB0byBzdWJtaXQgcHVsbCByZXF1ZXN0cyBmb3IgY2hhbmdlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgaW5jbHVkZWQuIEhvd2V2ZXIsIHdlIGRvbid0IGN1cnJlbnRseSBwcm92aWRlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgbW9kaWZpZWQgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuXG4gKi9cbkxvZ0RyaXZlcj86IHN0cmluZ1xufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHlvdXIgY29udGFpbmVyLiBTZWNyZXRzIGNhbiBiZSBleHBvc2VkIHRvIGEgY29udGFpbmVyIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqICAgKyAgVG8gaW5qZWN0IHNlbnNpdGl2ZSBkYXRhIGludG8geW91ciBjb250YWluZXJzIGFzIGVudmlyb25tZW50IHZhcmlhYmxlcywgdXNlIHRoZSBgYHNlY3JldHNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgICsgIFRvIHJlZmVyZW5jZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gdGhlIGxvZyBjb25maWd1cmF0aW9uIG9mIGEgY29udGFpbmVyLCB1c2UgdGhlIGBgc2VjcmV0T3B0aW9uc2BgIGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlci5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0IHtcbi8qKlxuICogVGhlIHNlY3JldCB0byBleHBvc2UgdG8gdGhlIGNvbnRhaW5lci4gVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIGVpdGhlciB0aGUgZnVsbCBBUk4gb2YgdGhlIEFTTWxvbmcgc2VjcmV0IG9yIHRoZSBmdWxsIEFSTiBvZiB0aGUgcGFyYW1ldGVyIGluIHRoZSBTU00gUGFyYW1ldGVyIFN0b3JlLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWlyZSBJQU1sb25nIHBlcm1pc3Npb25zLCBzZWUgW1JlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIEVDUyBzZWNyZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLXNlY3JldHMuaHRtbCNzZWNyZXRzLWlhbSkgKGZvciBTZWNyZXRzIE1hbmFnZXIpIG9yIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1wYXJhbWV0ZXJzLmh0bWwpIChmb3IgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBzdG9yZSkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZSBwYXJhbWV0ZXIgZXhpc3RzIGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB0aGUgdGFzayB5b3UncmUgbGF1bmNoaW5nLCB0aGVuIHlvdSBjYW4gdXNlIGVpdGhlciB0aGUgZnVsbCBBUk4gb3IgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLiBJZiB0aGUgcGFyYW1ldGVyIGV4aXN0cyBpbiBhIGRpZmZlcmVudCBSZWdpb24sIHRoZW4gdGhlIGZ1bGwgQVJOIG11c3QgYmUgc3BlY2lmaWVkLlxuICovXG5WYWx1ZUZyb206IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0LlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLiBJZiBubyBkZXBsb3ltZW50IGNvbnRyb2xsZXIgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYEVDU2BgIGlzIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbnRyb2xsZXIge1xuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGUgdG8gdXNlLiBUaGVyZSBhcmUgdGhyZWUgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGVzIGF2YWlsYWJsZTpcbiAqICAgKyBFQ1MgVGhlIHJvbGxpbmcgdXBkYXRlIChFQ1MpIGRlcGxveW1lbnQgdHlwZSBpbnZvbHZlcyByZXBsYWNpbmcgdGhlIGN1cnJlbnQgcnVubmluZyB2ZXJzaW9uIG9mIHRoZSBjb250YWluZXIgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24uIFRoZSBudW1iZXIgb2YgY29udGFpbmVycyBBbWF6b24gRUNTIGFkZHMgb3IgcmVtb3ZlcyBmcm9tIHRoZSBzZXJ2aWNlIGR1cmluZyBhIHJvbGxpbmcgdXBkYXRlIGlzIGNvbnRyb2xsZWQgYnkgYWRqdXN0aW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiBoZWFsdGh5IHRhc2tzIGFsbG93ZWQgZHVyaW5nIGEgc2VydmljZSBkZXBsb3ltZW50LCBhcyBzcGVjaWZpZWQgaW4gdGhlIERlcGxveW1lbnRDb25maWd1cmF0aW9uLiArIENPREVfREVQTE9ZIFRoZSBibHVlL2dyZWVuIChDT0RFX0RFUExPWSkgZGVwbG95bWVudCB0eXBlIHVzZXMgdGhlIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBtb2RlbCBwb3dlcmVkIGJ5ICwgd2hpY2ggYWxsb3dzIHlvdSB0byB2ZXJpZnkgYSBuZXcgZGVwbG95bWVudCBvZiBhIHNlcnZpY2UgYmVmb3JlIHNlbmRpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIGl0LiArIEVYVEVSTkFMIFRoZSBleHRlcm5hbCAoRVhURVJOQUwpIGRlcGxveW1lbnQgdHlwZSBlbmFibGVzIHlvdSB0byB1c2UgYW55IHRoaXJkLXBhcnR5IGRlcGxveW1lbnQgY29udHJvbGxlciBmb3IgZnVsbCBjb250cm9sIG92ZXIgdGhlIGRlcGxveW1lbnQgcHJvY2VzcyBmb3IgYW4gQW1hem9uIEVDUyBzZXJ2aWNlLlxuICovXG5UeXBlPzogKFwiQ09ERV9ERVBMT1lcIiB8IFwiRUNTXCIgfCBcIkVYVEVSTkFMXCIpXG59XG4vKipcbiAqIE9wdGlvbmFsIGRlcGxveW1lbnQgcGFyYW1ldGVycyB0aGF0IGNvbnRyb2wgaG93IG1hbnkgdGFza3MgcnVuIGR1cmluZyB0aGUgZGVwbG95bWVudCBhbmQgdGhlIGZhaWx1cmUgZGV0ZWN0aW9uIG1ldGhvZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbmZpZ3VyYXRpb24ge1xuQWxhcm1zPzogRGVwbG95bWVudEFsYXJtc1xuRGVwbG95bWVudENpcmN1aXRCcmVha2VyPzogRGVwbG95bWVudENpcmN1aXRCcmVha2VyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWF4aW11bVBlcmNlbnRgYCBwYXJhbWV0ZXIgcmVwcmVzZW50cyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgYXJlIGFsbG93ZWQgaW4gdGhlIGBgUlVOTklOR2BgIG9yIGBgUEVORElOR2BgIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYGBkZXNpcmVkQ291bnRgYCAocm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZWZpbmUgdGhlIGRlcGxveW1lbnQgYmF0Y2ggc2l6ZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2VydmljZSBpcyB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgYW5kIGhhcyBhIGBgZGVzaXJlZENvdW50YGAgb2YgZm91ciB0YXNrcyBhbmQgYSBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgb2YgMjAwJSwgdGhlIHNjaGVkdWxlciBtYXkgc3RhcnQgZm91ciBuZXcgdGFza3MgYmVmb3JlIHN0b3BwaW5nIHRoZSBmb3VyIG9sZGVyIHRhc2tzIChwcm92aWRlZCB0aGF0IHRoZSBjbHVzdGVyIHJlc291cmNlcyByZXF1aXJlZCB0byBkbyB0aGlzIGFyZSBhdmFpbGFibGUpLiBUaGUgZGVmYXVsdCBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgaXMgMjAwJS5cbiAqICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzLCBhbmQgdGFza3MgaW4gdGhlIHNlcnZpY2UgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSAqbWF4aW11bSBwZXJjZW50KiB2YWx1ZSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFRoZSAqbWF4aW11bSBwZXJjZW50KiB2YWx1ZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgdGhhdCByZW1haW4gaW4gdGhlIGBgUlVOTklOR2BgIHN0YXRlIHdoaWxlIHRoZSBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBpbiB0aGUgYGBEUkFJTklOR2BgIHN0YXRlLlxuICogICBZb3UgY2FuJ3Qgc3BlY2lmeSBhIGN1c3RvbSBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB0aGF0IHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBoYXMgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZS5cbiAqICAgSWYgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1heGltdW0gcGVyY2VudCB2YWx1ZSBpcyBub3QgdXNlZCwgYWx0aG91Z2ggaXQgaXMgcmV0dXJuZWQgd2hlbiBkZXNjcmliaW5nIHlvdXIgc2VydmljZS5cbiAqL1xuTWF4aW11bVBlcmNlbnQ/OiBudW1iZXJcbi8qKlxuICogSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLCB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCByZXByZXNlbnRzIGEgbG93ZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSBkdXJpbmcgYSBkZXBsb3ltZW50LCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGBgZGVzaXJlZENvdW50YGAgKHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikuIFRoaXMgcGFyYW1ldGVyIGVuYWJsZXMgeW91IHRvIGRlcGxveSB3aXRob3V0IHVzaW5nIGFkZGl0aW9uYWwgY2x1c3RlciBjYXBhY2l0eS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2VydmljZSBoYXMgYSBgYGRlc2lyZWRDb3VudGBgIG9mIGZvdXIgdGFza3MgYW5kIGEgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBvZiA1MCUsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBtYXkgc3RvcCB0d28gZXhpc3RpbmcgdGFza3MgdG8gZnJlZSB1cCBjbHVzdGVyIGNhcGFjaXR5IGJlZm9yZSBzdGFydGluZyB0d28gbmV3IHRhc2tzLiBcbiAqICBGb3Igc2VydmljZXMgdGhhdCAqZG8gbm90KiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgQSBzZXJ2aWNlIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSBpZiBhbGwgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBwYXNzIHRoZWlyIGhlYWx0aCBjaGVja3MuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciA0MCBzZWNvbmRzIGFmdGVyIGEgdGFzayByZWFjaGVzIGEgYGBSVU5OSU5HYGAgc3RhdGUgYmVmb3JlIHRoZSB0YXNrIGlzIGNvdW50ZWQgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgb25lIG9yIG1vcmUgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyBpdCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC4gQSB0YXNrIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSB3aGVuIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2sgaGF2ZSBwYXNzZWQgdGhlaXIgaGVhbHRoIGNoZWNrcy4gVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBjYW4gd2FpdCBmb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY29udGFpbmVyIGhlYWx0aCBjaGVjayBzZXR0aW5ncy4gXG4gKiAgIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyogdXNlIGEgbG9hZCBiYWxhbmNlciwgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgbm90ZWQ6XG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBhbiBlc3NlbnRpYWwgY29udGFpbmVyIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgYm90aCB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGFuZCB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgXG4gKiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgcmVwbGljYSBzZXJ2aWNlIGZvciBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIGlzIDEwMCUuIFRoZSBkZWZhdWx0IGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBEQUVNT05gYCBzZXJ2aWNlIHNjaGVkdWxlIGlzIDAlIGZvciB0aGUgQ0xJLCB0aGUgQVdTIFNES3MsIGFuZCB0aGUgQVBJcyBhbmQgNTAlIGZvciB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS5cbiAqICBUaGUgbWluaW11bSBudW1iZXIgb2YgaGVhbHRoeSB0YXNrcyBkdXJpbmcgYSBkZXBsb3ltZW50IGlzIHRoZSBgYGRlc2lyZWRDb3VudGBgIG11bHRpcGxpZWQgYnkgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAvMTAwLCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1pbmltdW0gaGVhbHRoeSBwZXJjZW50KiB2YWx1ZSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB0aGF0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgd2hpbGUgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGluIHRoZSBgYERSQUlOSU5HYGAgc3RhdGUuXG4gKiAgIFlvdSBjYW4ndCBzcGVjaWZ5IGEgY3VzdG9tIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB0aGF0IHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBoYXMgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZS5cbiAqICAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHZhbHVlIGlzIG5vdCB1c2VkLCBhbHRob3VnaCBpdCBpcyByZXR1cm5lZCB3aGVuIGRlc2NyaWJpbmcgeW91ciBzZXJ2aWNlLlxuICovXG5NaW5pbXVtSGVhbHRoeVBlcmNlbnQ/OiBudW1iZXJcbn1cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIENsb3VkV2F0Y2ggYWxhcm1zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRBbGFybXMge1xuLyoqXG4gKiBPbmUgb3IgbW9yZSBDbG91ZFdhdGNoIGFsYXJtIG5hbWVzLiBVc2UgYSBcIixcIiB0byBzZXBhcmF0ZSB0aGUgYWxhcm1zLlxuICovXG5BbGFybU5hbWVzOiBzdHJpbmdbXVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBDbG91ZFdhdGNoIGFsYXJtIG9wdGlvbiBpbiB0aGUgc2VydmljZSBkZXBsb3ltZW50IHByb2Nlc3MuXG4gKi9cbkVuYWJsZTogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29uZmlndXJlIEFtYXpvbiBFQ1MgdG8gcm9sbCBiYWNrIHRoZSBzZXJ2aWNlIGlmIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLiBJZiByb2xsYmFjayBpcyB1c2VkLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuUm9sbGJhY2s6IGJvb2xlYW5cbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHNlcnZpY2VzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLlxuICogICBUaGUgKmRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyKiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBzZXJ2aWNlIGRlcGxveW1lbnQgd2lsbCBmYWlsIGlmIHRoZSBzZXJ2aWNlIGNhbid0IHJlYWNoIGEgc3RlYWR5IHN0YXRlLiBJZiB5b3UgdXNlIHRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciwgYSBzZXJ2aWNlIGRlcGxveW1lbnQgd2lsbCB0cmFuc2l0aW9uIHRvIGEgZmFpbGVkIHN0YXRlIGFuZCBzdG9wIGxhdW5jaGluZyBuZXcgdGFza3MuIElmIHlvdSB1c2UgdGhlIHJvbGxiYWNrIG9wdGlvbiwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JvbGxpbmcgdXBkYXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtZWNzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDaXJjdWl0QnJlYWtlciB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyIGxvZ2ljIGZvciB0aGUgc2VydmljZS5cbiAqL1xuRW5hYmxlOiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBjb25maWd1cmUgQW1hem9uIEVDUyB0byByb2xsIGJhY2sgdGhlIHNlcnZpY2UgaWYgYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMuIElmIHJvbGxiYWNrIGlzIG9uLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuUm9sbGJhY2s6IGJvb2xlYW5cbn1cbiJdfQ==