{
  "resourceType" : "Library",
  "id" : "CMS771FHIRUrinarySymptomScoreBPH",
  "text" : {
    "status" : "extensions",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n  <table class=\"narrative-table\">\n    <tbody>\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"metadata\"> </a>Metadata</th>\n\n\n</tr>\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Version</th>\n\n\n\n<td class=\"content-container\">1.1.000</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Status</th>\n\n\n\n<td class=\"content-container\">Draft</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Type</th>\n\n\n\n<td class=\"content-container\">\n    <a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a>#logic-library\n\n\n</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"parameters\"> </a>Parameters</th>\n\n\n</tr>\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Parameter</th>\n\n\n\n<td class=\"content-container\">None</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n  <tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\">Library Content</th>\n\n\n</tr>\n  \n    \n    <tr>\n      <th scope=\"row\" class=\"row-header\">CQL Content</th>\n      <td>\n        <a name=\"cql-content\"> </a>\n        <pre style=\"border: none;\" class=\"content-container highlight language-cql\"><code class=\"language-cql\">/*\nNOTE: For use by March 2026 US Realm Connectathon participants for internal use only. Not for use or distribution in commercial products.\n*/\nlibrary CMS771FHIRUrinarySymptomScoreBPH version '1.1.000'\n\nusing USQualityCore version '0.1.0-cibuild'\nusing USCore version '6.1.0-derived'\nusing FHIR version '4.0.1'\n\ninclude hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers\ninclude hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon\ninclude hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon\ninclude hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements\n\ninclude CQMCommon version '5.1.000' called CQMCommon\ninclude SupplementalDataElements version '6.1.000' called SDE\ninclude Status version '2.1.000' called Status\n\ncodesystem &quot;LOINC&quot;: 'http://loinc.org'\ncodesystem &quot;ICD10CM&quot;: 'http://hl7.org/fhir/sid/icd-10-cm'\ncodesystem &quot;ActCode&quot;: 'http://terminology.hl7.org/CodeSystem/v3-ActCode'\n\nvalueset &quot;Hospital Services for Urology Care&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1248.360'\nvalueset &quot;Morbid Obesity&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1248.368'\nvalueset &quot;Office Visit&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001'\nvalueset &quot;Urinary Retention&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1248.372'\n\ncode &quot;American Urological Association Symptom Index [AUASI]&quot;: '80883-2' from &quot;LOINC&quot; display 'American Urological Association Symptom Index [AUASI]'\ncode &quot;Benign prostatic hyperplasia with lower urinary tract symptoms&quot;: 'N40.1' from &quot;ICD10CM&quot; display 'Benign prostatic hyperplasia with lower urinary tract symptoms'\ncode &quot;If you were to spend the rest of your life with your urinary condition just the way it is now, how would you feel about that [IPSS]&quot;: '81090-3' from &quot;LOINC&quot; display 'If you were to spend the rest of your life with your urinary condition just the way it is now, how would you feel about that [IPSS]'\ncode &quot;International Prostate Symptom Score [IPSS]&quot;: '80976-4' from &quot;LOINC&quot; display 'International Prostate Symptom Score [IPSS]'\ncode &quot;virtual&quot;: 'VR' from &quot;ActCode&quot; display 'virtual'\n\nparameter &quot;Measurement Period&quot; Interval&lt;DateTime&gt;\n  default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)\n\ncontext Patient\n\ndefine &quot;Initial Population&quot;:\n  ( &quot;Patient is Male&quot; )\n    and &quot;Has Qualifying Encounter&quot;\n    and &quot;Has Qualifying BPH Diagnosis&quot;\n\ndefine &quot;Denominator&quot;:\n  &quot;Initial Population&quot;\n    and &quot;Urinary Symptom Score Within 1 Month After Initial BPH Diagnosis&quot; is not null\n    and &quot;Urinary Symptom Score 6 to 12 Months After Initial BPH Diagnosis&quot; is not null\n\ndefine &quot;Denominator Exclusions&quot;:\n  exists ( &quot;Urinary Retention Diagnosis Starts Within 1 Year After Initial BPH Diagnosis&quot; )\n    or ( &quot;Has Initial BPH Diagnosis Starts During or Within 30 Days After End of Hospitalization&quot; is not null )\n    or ( &quot;Morbid Obesity Diagnosis or BMI Exam Result Greater Than or Equal to 40 Starts On or Before Follow Up USS Assessment&quot; )\n\ndefine &quot;Numerator&quot;:\n  &quot;Urinary Symptom Score Improvement Greater Than or Equal To 3&quot;\n\ndefine &quot;SDE Ethnicity&quot;:\n  SDE.&quot;SDE Ethnicity&quot;\n\ndefine &quot;SDE Payer&quot;:\n  SDE.&quot;SDE Payer&quot;\n\ndefine &quot;SDE Race&quot;:\n  SDE.&quot;SDE Race&quot;\n\ndefine &quot;SDE Sex&quot;:\n  SDE.&quot;SDE Sex&quot;\n\ndefine &quot;Has Qualifying BPH Diagnosis&quot;:\n  &quot;Initial BPH Diagnosis Starts Within 6 Months Before the Measurement Period&quot; is not null\n\ndefine &quot;Patient is Male&quot;:\n  SDE.&quot;SDE Sex&quot; ~ SDE.&quot;Male (finding)&quot;\n\ndefine &quot;Urinary Symptom Score Assessment&quot;:\n  &quot;Documented IPSS Assessment Result&quot;\n    union &quot;AUA Symptom Index and Quality of Life Assessment Result&quot;\n\ndefine &quot;Urinary Symptom Score Change&quot;:\n  from\n    &quot;Urinary Symptom Score Within 1 Month After Initial BPH Diagnosis&quot; FirstUSSAssessment,\n    &quot;Urinary Symptom Score 6 to 12 Months After Initial BPH Diagnosis&quot; FollowUpUSSAssessment\n    let USSChange: ( FirstUSSAssessment.valueInteger ) - ( FollowUpUSSAssessment.valueInteger )\n    return USSChange\n\ndefine &quot;Urinary Symptom Score Improvement Greater Than or Equal To 3&quot;:\n  ( &quot;Urinary Symptom Score Change&quot; USSImprovement\n      where USSImprovement &gt;= 3\n  ) is not null\n\ndefine &quot;Documented IPSS Assessment Result&quot;:\n  [ObservationScreeningAssessment: &quot;International Prostate Symptom Score [IPSS]&quot;] IPSSAssessment\n    where IPSSAssessment.status in { 'final', 'amended', 'corrected' }\n      and IPSSAssessment.value is not null\n    return {\n      effectiveDatetime: IPSSAssessment.effective.earliest ( ),\n      valueInteger: IPSSAssessment.value as FHIR.integer\n    }\n\ndefine &quot;AUA Symptom Index and Quality of Life Assessment Result&quot;:\n  [ObservationScreeningAssessment: &quot;American Urological Association Symptom Index [AUASI]&quot;] AUASIAssessment\n    let LastQOLOnDate: Last([ObservationScreeningAssessment: &quot;If you were to spend the rest of your life with your urinary condition just the way it is now, how would you feel about that [IPSS]&quot;] QOLAssessment\n        where QOLAssessment.effective.earliest() same day as AUASIAssessment.effective.earliest()\n          and QOLAssessment.status in { 'final', 'amended', 'corrected' }\n          and QOLAssessment.value is not null\n        sort by effective.earliest()\n    )\n    where AUASIAssessment.status in { 'final', 'amended', 'corrected' }\n      and AUASIAssessment.value is not null\n    return {\n      effectiveDatetime: AUASIAssessment.effective.earliest ( ),\n      valueInteger: ( AUASIAssessment.value as FHIR.integer ) + ( LastQOLOnDate.value as FHIR.integer )\n    }\n\ndefine &quot;Has Qualifying Encounter&quot;:\n  exists ( [Encounter: &quot;Office Visit&quot;] ValidEncounter\n      where ValidEncounter.period during day of &quot;Measurement Period&quot;\n        and ValidEncounter.class !~ &quot;virtual&quot;\n        and ValidEncounter.status = 'finished'\n  )\n\ndefine &quot;Morbid Obesity Diagnosis or BMI Exam Result Greater Than or Equal to 40 Starts On or Before Follow Up USS Assessment&quot;:\n  exists &quot;Morbid Obesity Diagnosis On or Before Follow Up USS Assessment&quot;\n    or &quot;BMI Exam Result Greater Than or Equal To 40 During Measurement Period and On or Before Follow Up USS Assessment&quot;\n\ndefine &quot;Urinary Retention Diagnosis Starts Within 1 Year After Initial BPH Diagnosis&quot;:\n  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n  // Original:\n  //   ( [ConditionProblemsHealthConcerns: &quot;Urinary Retention&quot;]\n  //     union [ConditionEncounterDiagnosis: &quot;Urinary Retention&quot;] )\n  ( [FHIR.Condition: &quot;Urinary Retention&quot;] ) UrinaryRetention\n    with &quot;Initial BPH Diagnosis Starts Within 6 Months Before the Measurement Period&quot; InitialBPHDiagnosis\n      such that UrinaryRetention.prevalenceInterval ( ) starts 1 year or less on or after day of start of InitialBPHDiagnosis.prevalenceInterval ( )\n    where UrinaryRetention.verificationStatusIsNotInvalid ( )\n\ndefine &quot;Urinary Symptom Score 6 to 12 Months After Initial BPH Diagnosis&quot;:\n  Last(&quot;Urinary Symptom Score Assessment&quot; USSAssessment\n      with &quot;Initial BPH Diagnosis Starts Within 6 Months Before the Measurement Period&quot; InitialBPHDiagnosis\n        such that difference in months between start of InitialBPHDiagnosis.prevalenceInterval ( ) and USSAssessment.effectiveDatetime in Interval[6, 12]\n      sort by effectiveDatetime\n  )\n\ndefine &quot;Urinary Symptom Score Within 1 Month After Initial BPH Diagnosis&quot;:\n  First(&quot;Urinary Symptom Score Assessment&quot; USSAssessment\n      with &quot;Initial BPH Diagnosis Starts Within 6 Months Before the Measurement Period&quot; InitialBPHDiagnosis\n        such that USSAssessment.effectiveDatetime 1 month or less on or after day of start of InitialBPHDiagnosis.prevalenceInterval ( )\n      sort by effectiveDatetime\n  )\n\ndefine &quot;Has Initial BPH Diagnosis Starts During or Within 30 Days After End of Hospitalization&quot;:\n  &quot;Initial BPH Diagnosis Starts Within 6 Months Before the Measurement Period&quot; InitialBPHDiagnosis\n    with [Encounter: &quot;Hospital Services for Urology Care&quot;] UrologyHospitalServices\n      such that InitialBPHDiagnosis.prevalenceInterval ( ) starts during Interval[start of UrologyHospitalServices.period, end of UrologyHospitalServices.period + 31 days]\n        and UrologyHospitalServices.status = 'finished'\n\ndefine &quot;Initial BPH Diagnosis Starts Within 6 Months Before the Measurement Period&quot;:\n  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n  // Original:\n  //   First(([ConditionProblemsHealthConcerns: &quot;Benign prostatic hyperplasia with lower urinary tract symptoms&quot;]\n  //       union [ConditionEncounterDiagnosis: &quot;Benign prostatic hyperplasia with lower urinary tract symptoms&quot;]) NewBPHDiagnosis\n  First(([FHIR.Condition: &quot;Benign prostatic hyperplasia with lower urinary tract symptoms&quot;]) NewBPHDiagnosis\n      where NewBPHDiagnosis.prevalenceInterval ( ) starts during Interval[start of &quot;Measurement Period&quot; - 6 months, start of &quot;Measurement Period&quot;]\n        and NewBPHDiagnosis.verificationStatusIsNotInvalid ( )\n      sort by start of onset.toInterval ( )\n  )\n\ndefine &quot;Morbid Obesity Diagnosis On or Before Follow Up USS Assessment&quot;:\n  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n  // Original:\n  //   ( [ConditionProblemsHealthConcerns: &quot;Morbid Obesity&quot;]\n  //     union [ConditionEncounterDiagnosis: &quot;Morbid Obesity&quot;] )\n  ( [FHIR.Condition: &quot;Morbid Obesity&quot;] ) MorbidObesityDiagnosis\n    with &quot;Urinary Symptom Score 6 to 12 Months After Initial BPH Diagnosis&quot; FollowUpUSSAssessment\n      such that MorbidObesityDiagnosis.prevalenceInterval ( ) overlaps &quot;Measurement Period&quot;\n        and MorbidObesityDiagnosis.prevalenceInterval ( ) starts on or before FollowUpUSSAssessment.effectiveDatetime\n    where MorbidObesityDiagnosis.verificationStatusIsNotInvalid ( )  \n  \n/*\n* @code: Body mass index (BMI) [Ratio] - 39156-5\n* @profile: http://hl7.org/fhir/StructureDefinition/bmi\n*/\n\n\ndefine &quot;BMI Exam Result Greater Than or Equal To 40 During Measurement Period and On or Before Follow Up USS Assessment&quot;:\n  exists ( [&quot;USCore.BMIProfile&quot;] BMIExam\n      with &quot;Urinary Symptom Score 6 to 12 Months After Initial BPH Diagnosis&quot; FollowUpUSSAssessment\n        such that BMIExam.value &gt;= 40 'kg/m2'\n          and BMIExam.status in { 'final', 'amended', 'corrected' }\n          and BMIExam.effective.earliest ( ) during day of &quot;Measurement Period&quot;\n          and BMIExam.effective.earliest ( ) on or before FollowUpUSSAssessment.effectiveDatetime\n      return BMIExam.effective.earliest ( )\n  )\n\ndefine fluent function verificationStatusIsNotInvalid(condition Choice&lt;&quot;ConditionEncounterDiagnosis&quot;, &quot;ConditionProblemsHealthConcerns&quot;&gt;):\n  condition.verificationStatus is null\n    or not ( condition.verificationStatus ~ Status.&quot;unconfirmed&quot;\n        or condition.verificationStatus ~ Status.&quot;refuted&quot;\n        or condition.verificationStatus ~ Status.&quot;entered-in-error&quot;\n    )\n\ndefine fluent function verificationStatusIsNotInvalid(condition FHIR.Condition):\n  condition.verificationStatus is null\n    or not ( condition.verificationStatus ~ Status.&quot;unconfirmed&quot;\n        or condition.verificationStatus ~ Status.&quot;refuted&quot;\n        or condition.verificationStatus ~ Status.&quot;entered-in-error&quot;\n    )</code></pre>\n      </td>\n    </tr>\n    \n  \n\n\n\n<tr>\n  <th colspan=\"2\" scope=\"row\" class=\"row-header\">Generated using version 0.5.6 of the sample-content-ig Liquid templates</th>\n</tr>\n\n    </tbody>\n  </table>\n</div>"
  },
  "extension" : [{
    "url" : "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem",
    "valueReference" : {
      "reference" : "Device/cqf-tooling"
    }
  }],
  "url" : "https://madie.cms.gov/Library/CMS771FHIRUrinarySymptomScoreBPH",
  "version" : "1.1.000",
  "name" : "CMS771FHIRUrinarySymptomScoreBPH",
  "status" : "draft",
  "type" : {
    "coding" : [{
      "system" : "http://terminology.hl7.org/CodeSystem/library-type",
      "code" : "logic-library"
    }]
  },
  "date" : "2026-09-19T16:31:14+00:00",
  "content" : [{
    "contentType" : "text/cql",
    "data" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVM3NzFGSElSVXJpbmFyeVN5bXB0b21TY29yZUJQSCB2ZXJzaW9uICcxLjEuMDAwJwoKdXNpbmcgVVNRdWFsaXR5Q29yZSB2ZXJzaW9uICcwLjEuMC1jaWJ1aWxkJwp1c2luZyBVU0NvcmUgdmVyc2lvbiAnNi4xLjAtZGVyaXZlZCcKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgaGw3LmZoaXIudXYuY3FsLkZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJyBjYWxsZWQgRkhJUkhlbHBlcnMKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkNvbW1vbiB2ZXJzaW9uICcyLjAuMCcgY2FsbGVkIEZISVJDb21tb24KaW5jbHVkZSBobDcuZmhpci51cy5jcWwuVVNDb3JlQ29tbW9uIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVFbGVtZW50cyB2ZXJzaW9uICcyLjAuMC1iYWxsb3QnIGNhbGxlZCBVU0NvcmVFbGVtZW50cwoKaW5jbHVkZSBDUU1Db21tb24gdmVyc2lvbiAnNS4xLjAwMCcgY2FsbGVkIENRTUNvbW1vbgppbmNsdWRlIFN1cHBsZW1lbnRhbERhdGFFbGVtZW50cyB2ZXJzaW9uICc2LjEuMDAwJyBjYWxsZWQgU0RFCmluY2x1ZGUgU3RhdHVzIHZlcnNpb24gJzIuMS4wMDAnIGNhbGxlZCBTdGF0dXMKCmNvZGVzeXN0ZW0gIkxPSU5DIjogJ2h0dHA6Ly9sb2luYy5vcmcnCmNvZGVzeXN0ZW0gIklDRDEwQ00iOiAnaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtJwpjb2Rlc3lzdGVtICJBY3RDb2RlIjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjMtQWN0Q29kZScKCnZhbHVlc2V0ICJIb3NwaXRhbCBTZXJ2aWNlcyBmb3IgVXJvbG9neSBDYXJlIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTI0OC4zNjAnCnZhbHVlc2V0ICJNb3JiaWQgT2Jlc2l0eSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjEyNDguMzY4Jwp2YWx1ZXNldCAiT2ZmaWNlIFZpc2l0IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDAxJwp2YWx1ZXNldCAiVXJpbmFyeSBSZXRlbnRpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMjQ4LjM3MicKCmNvZGUgIkFtZXJpY2FuIFVyb2xvZ2ljYWwgQXNzb2NpYXRpb24gU3ltcHRvbSBJbmRleCBbQVVBU0ldIjogJzgwODgzLTInIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdBbWVyaWNhbiBVcm9sb2dpY2FsIEFzc29jaWF0aW9uIFN5bXB0b20gSW5kZXggW0FVQVNJXScKY29kZSAiQmVuaWduIHByb3N0YXRpYyBoeXBlcnBsYXNpYSB3aXRoIGxvd2VyIHVyaW5hcnkgdHJhY3Qgc3ltcHRvbXMiOiAnTjQwLjEnIGZyb20gIklDRDEwQ00iIGRpc3BsYXkgJ0JlbmlnbiBwcm9zdGF0aWMgaHlwZXJwbGFzaWEgd2l0aCBsb3dlciB1cmluYXJ5IHRyYWN0IHN5bXB0b21zJwpjb2RlICJJZiB5b3Ugd2VyZSB0byBzcGVuZCB0aGUgcmVzdCBvZiB5b3VyIGxpZmUgd2l0aCB5b3VyIHVyaW5hcnkgY29uZGl0aW9uIGp1c3QgdGhlIHdheSBpdCBpcyBub3csIGhvdyB3b3VsZCB5b3UgZmVlbCBhYm91dCB0aGF0IFtJUFNTXSI6ICc4MTA5MC0zJyBmcm9tICJMT0lOQyIgZGlzcGxheSAnSWYgeW91IHdlcmUgdG8gc3BlbmQgdGhlIHJlc3Qgb2YgeW91ciBsaWZlIHdpdGggeW91ciB1cmluYXJ5IGNvbmRpdGlvbiBqdXN0IHRoZSB3YXkgaXQgaXMgbm93LCBob3cgd291bGQgeW91IGZlZWwgYWJvdXQgdGhhdCBbSVBTU10nCmNvZGUgIkludGVybmF0aW9uYWwgUHJvc3RhdGUgU3ltcHRvbSBTY29yZSBbSVBTU10iOiAnODA5NzYtNCcgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ0ludGVybmF0aW9uYWwgUHJvc3RhdGUgU3ltcHRvbSBTY29yZSBbSVBTU10nCmNvZGUgInZpcnR1YWwiOiAnVlInIGZyb20gIkFjdENvZGUiIGRpc3BsYXkgJ3ZpcnR1YWwnCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNy0wMS0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgKCAiUGF0aWVudCBpcyBNYWxlIiApCiAgICBhbmQgIkhhcyBRdWFsaWZ5aW5nIEVuY291bnRlciIKICAgIGFuZCAiSGFzIFF1YWxpZnlpbmcgQlBIIERpYWdub3NpcyIKCmRlZmluZSAiRGVub21pbmF0b3IiOgogICJJbml0aWFsIFBvcHVsYXRpb24iCiAgICBhbmQgIlVyaW5hcnkgU3ltcHRvbSBTY29yZSBXaXRoaW4gMSBNb250aCBBZnRlciBJbml0aWFsIEJQSCBEaWFnbm9zaXMiIGlzIG5vdCBudWxsCiAgICBhbmQgIlVyaW5hcnkgU3ltcHRvbSBTY29yZSA2IHRvIDEyIE1vbnRocyBBZnRlciBJbml0aWFsIEJQSCBEaWFnbm9zaXMiIGlzIG5vdCBudWxsCgpkZWZpbmUgIkRlbm9taW5hdG9yIEV4Y2x1c2lvbnMiOgogIGV4aXN0cyAoICJVcmluYXJ5IFJldGVudGlvbiBEaWFnbm9zaXMgU3RhcnRzIFdpdGhpbiAxIFllYXIgQWZ0ZXIgSW5pdGlhbCBCUEggRGlhZ25vc2lzIiApCiAgICBvciAoICJIYXMgSW5pdGlhbCBCUEggRGlhZ25vc2lzIFN0YXJ0cyBEdXJpbmcgb3IgV2l0aGluIDMwIERheXMgQWZ0ZXIgRW5kIG9mIEhvc3BpdGFsaXphdGlvbiIgaXMgbm90IG51bGwgKQogICAgb3IgKCAiTW9yYmlkIE9iZXNpdHkgRGlhZ25vc2lzIG9yIEJNSSBFeGFtIFJlc3VsdCBHcmVhdGVyIFRoYW4gb3IgRXF1YWwgdG8gNDAgU3RhcnRzIE9uIG9yIEJlZm9yZSBGb2xsb3cgVXAgVVNTIEFzc2Vzc21lbnQiICkKCmRlZmluZSAiTnVtZXJhdG9yIjoKICAiVXJpbmFyeSBTeW1wdG9tIFNjb3JlIEltcHJvdmVtZW50IEdyZWF0ZXIgVGhhbiBvciBFcXVhbCBUbyAzIgoKZGVmaW5lICJTREUgRXRobmljaXR5IjoKICBTREUuIlNERSBFdGhuaWNpdHkiCgpkZWZpbmUgIlNERSBQYXllciI6CiAgU0RFLiJTREUgUGF5ZXIiCgpkZWZpbmUgIlNERSBSYWNlIjoKICBTREUuIlNERSBSYWNlIgoKZGVmaW5lICJTREUgU2V4IjoKICBTREUuIlNERSBTZXgiCgpkZWZpbmUgIkhhcyBRdWFsaWZ5aW5nIEJQSCBEaWFnbm9zaXMiOgogICJJbml0aWFsIEJQSCBEaWFnbm9zaXMgU3RhcnRzIFdpdGhpbiA2IE1vbnRocyBCZWZvcmUgdGhlIE1lYXN1cmVtZW50IFBlcmlvZCIgaXMgbm90IG51bGwKCmRlZmluZSAiUGF0aWVudCBpcyBNYWxlIjoKICBTREUuIlNERSBTZXgiIH4gU0RFLiJNYWxlIChmaW5kaW5nKSIKCmRlZmluZSAiVXJpbmFyeSBTeW1wdG9tIFNjb3JlIEFzc2Vzc21lbnQiOgogICJEb2N1bWVudGVkIElQU1MgQXNzZXNzbWVudCBSZXN1bHQiCiAgICB1bmlvbiAiQVVBIFN5bXB0b20gSW5kZXggYW5kIFF1YWxpdHkgb2YgTGlmZSBBc3Nlc3NtZW50IFJlc3VsdCIKCmRlZmluZSAiVXJpbmFyeSBTeW1wdG9tIFNjb3JlIENoYW5nZSI6CiAgZnJvbQogICAgIlVyaW5hcnkgU3ltcHRvbSBTY29yZSBXaXRoaW4gMSBNb250aCBBZnRlciBJbml0aWFsIEJQSCBEaWFnbm9zaXMiIEZpcnN0VVNTQXNzZXNzbWVudCwKICAgICJVcmluYXJ5IFN5bXB0b20gU2NvcmUgNiB0byAxMiBNb250aHMgQWZ0ZXIgSW5pdGlhbCBCUEggRGlhZ25vc2lzIiBGb2xsb3dVcFVTU0Fzc2Vzc21lbnQKICAgIGxldCBVU1NDaGFuZ2U6ICggRmlyc3RVU1NBc3Nlc3NtZW50LnZhbHVlSW50ZWdlciApIC0gKCBGb2xsb3dVcFVTU0Fzc2Vzc21lbnQudmFsdWVJbnRlZ2VyICkKICAgIHJldHVybiBVU1NDaGFuZ2UKCmRlZmluZSAiVXJpbmFyeSBTeW1wdG9tIFNjb3JlIEltcHJvdmVtZW50IEdyZWF0ZXIgVGhhbiBvciBFcXVhbCBUbyAzIjoKICAoICJVcmluYXJ5IFN5bXB0b20gU2NvcmUgQ2hhbmdlIiBVU1NJbXByb3ZlbWVudAogICAgICB3aGVyZSBVU1NJbXByb3ZlbWVudCA+PSAzCiAgKSBpcyBub3QgbnVsbAoKZGVmaW5lICJEb2N1bWVudGVkIElQU1MgQXNzZXNzbWVudCBSZXN1bHQiOgogIFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJJbnRlcm5hdGlvbmFsIFByb3N0YXRlIFN5bXB0b20gU2NvcmUgW0lQU1NdIl0gSVBTU0Fzc2Vzc21lbnQKICAgIHdoZXJlIElQU1NBc3Nlc3NtZW50LnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICBhbmQgSVBTU0Fzc2Vzc21lbnQudmFsdWUgaXMgbm90IG51bGwKICAgIHJldHVybiB7CiAgICAgIGVmZmVjdGl2ZURhdGV0aW1lOiBJUFNTQXNzZXNzbWVudC5lZmZlY3RpdmUuZWFybGllc3QgKCApLAogICAgICB2YWx1ZUludGVnZXI6IElQU1NBc3Nlc3NtZW50LnZhbHVlIGFzIEZISVIuaW50ZWdlcgogICAgfQoKZGVmaW5lICJBVUEgU3ltcHRvbSBJbmRleCBhbmQgUXVhbGl0eSBvZiBMaWZlIEFzc2Vzc21lbnQgUmVzdWx0IjoKICBbT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50OiAiQW1lcmljYW4gVXJvbG9naWNhbCBBc3NvY2lhdGlvbiBTeW1wdG9tIEluZGV4IFtBVUFTSV0iXSBBVUFTSUFzc2Vzc21lbnQKICAgIGxldCBMYXN0UU9MT25EYXRlOiBMYXN0KFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJJZiB5b3Ugd2VyZSB0byBzcGVuZCB0aGUgcmVzdCBvZiB5b3VyIGxpZmUgd2l0aCB5b3VyIHVyaW5hcnkgY29uZGl0aW9uIGp1c3QgdGhlIHdheSBpdCBpcyBub3csIGhvdyB3b3VsZCB5b3UgZmVlbCBhYm91dCB0aGF0IFtJUFNTXSJdIFFPTEFzc2Vzc21lbnQKICAgICAgICB3aGVyZSBRT0xBc3Nlc3NtZW50LmVmZmVjdGl2ZS5lYXJsaWVzdCgpIHNhbWUgZGF5IGFzIEFVQVNJQXNzZXNzbWVudC5lZmZlY3RpdmUuZWFybGllc3QoKQogICAgICAgICAgYW5kIFFPTEFzc2Vzc21lbnQuc3RhdHVzIGluIHsgJ2ZpbmFsJywgJ2FtZW5kZWQnLCAnY29ycmVjdGVkJyB9CiAgICAgICAgICBhbmQgUU9MQXNzZXNzbWVudC52YWx1ZSBpcyBub3QgbnVsbAogICAgICAgIHNvcnQgYnkgZWZmZWN0aXZlLmVhcmxpZXN0KCkKICAgICkKICAgIHdoZXJlIEFVQVNJQXNzZXNzbWVudC5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgYW5kIEFVQVNJQXNzZXNzbWVudC52YWx1ZSBpcyBub3QgbnVsbAogICAgcmV0dXJuIHsKICAgICAgZWZmZWN0aXZlRGF0ZXRpbWU6IEFVQVNJQXNzZXNzbWVudC5lZmZlY3RpdmUuZWFybGllc3QgKCApLAogICAgICB2YWx1ZUludGVnZXI6ICggQVVBU0lBc3Nlc3NtZW50LnZhbHVlIGFzIEZISVIuaW50ZWdlciApICsgKCBMYXN0UU9MT25EYXRlLnZhbHVlIGFzIEZISVIuaW50ZWdlciApCiAgICB9CgpkZWZpbmUgIkhhcyBRdWFsaWZ5aW5nIEVuY291bnRlciI6CiAgZXhpc3RzICggW0VuY291bnRlcjogIk9mZmljZSBWaXNpdCJdIFZhbGlkRW5jb3VudGVyCiAgICAgIHdoZXJlIFZhbGlkRW5jb3VudGVyLnBlcmlvZCBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAgICAgYW5kIFZhbGlkRW5jb3VudGVyLmNsYXNzICF+ICJ2aXJ0dWFsIgogICAgICAgIGFuZCBWYWxpZEVuY291bnRlci5zdGF0dXMgPSAnZmluaXNoZWQnCiAgKQoKZGVmaW5lICJNb3JiaWQgT2Jlc2l0eSBEaWFnbm9zaXMgb3IgQk1JIEV4YW0gUmVzdWx0IEdyZWF0ZXIgVGhhbiBvciBFcXVhbCB0byA0MCBTdGFydHMgT24gb3IgQmVmb3JlIEZvbGxvdyBVcCBVU1MgQXNzZXNzbWVudCI6CiAgZXhpc3RzICJNb3JiaWQgT2Jlc2l0eSBEaWFnbm9zaXMgT24gb3IgQmVmb3JlIEZvbGxvdyBVcCBVU1MgQXNzZXNzbWVudCIKICAgIG9yICJCTUkgRXhhbSBSZXN1bHQgR3JlYXRlciBUaGFuIG9yIEVxdWFsIFRvIDQwIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QgYW5kIE9uIG9yIEJlZm9yZSBGb2xsb3cgVXAgVVNTIEFzc2Vzc21lbnQiCgpkZWZpbmUgIlVyaW5hcnkgUmV0ZW50aW9uIERpYWdub3NpcyBTdGFydHMgV2l0aGluIDEgWWVhciBBZnRlciBJbml0aWFsIEJQSCBEaWFnbm9zaXMiOgogIC8vIFtFLTEzXSBiYXNlIEZISVIuQ29uZGl0aW9uIHJldHJpZXZlIChkZWZlY3QtdHJhY2tpbmcvZW5naW5lLWlzc3Vlcy5tZCBFLTEzKQogIC8vIE9yaWdpbmFsOgogIC8vICAgKCBbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuczogIlVyaW5hcnkgUmV0ZW50aW9uIl0KICAvLyAgICAgdW5pb24gW0NvbmRpdGlvbkVuY291bnRlckRpYWdub3NpczogIlVyaW5hcnkgUmV0ZW50aW9uIl0gKQogICggW0ZISVIuQ29uZGl0aW9uOiAiVXJpbmFyeSBSZXRlbnRpb24iXSApIFVyaW5hcnlSZXRlbnRpb24KICAgIHdpdGggIkluaXRpYWwgQlBIIERpYWdub3NpcyBTdGFydHMgV2l0aGluIDYgTW9udGhzIEJlZm9yZSB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIiBJbml0aWFsQlBIRGlhZ25vc2lzCiAgICAgIHN1Y2ggdGhhdCBVcmluYXJ5UmV0ZW50aW9uLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgc3RhcnRzIDEgeWVhciBvciBsZXNzIG9uIG9yIGFmdGVyIGRheSBvZiBzdGFydCBvZiBJbml0aWFsQlBIRGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkKICAgIHdoZXJlIFVyaW5hcnlSZXRlbnRpb24udmVyaWZpY2F0aW9uU3RhdHVzSXNOb3RJbnZhbGlkICggKQoKZGVmaW5lICJVcmluYXJ5IFN5bXB0b20gU2NvcmUgNiB0byAxMiBNb250aHMgQWZ0ZXIgSW5pdGlhbCBCUEggRGlhZ25vc2lzIjoKICBMYXN0KCJVcmluYXJ5IFN5bXB0b20gU2NvcmUgQXNzZXNzbWVudCIgVVNTQXNzZXNzbWVudAogICAgICB3aXRoICJJbml0aWFsIEJQSCBEaWFnbm9zaXMgU3RhcnRzIFdpdGhpbiA2IE1vbnRocyBCZWZvcmUgdGhlIE1lYXN1cmVtZW50IFBlcmlvZCIgSW5pdGlhbEJQSERpYWdub3NpcwogICAgICAgIHN1Y2ggdGhhdCBkaWZmZXJlbmNlIGluIG1vbnRocyBiZXR3ZWVuIHN0YXJ0IG9mIEluaXRpYWxCUEhEaWFnbm9zaXMucHJldmFsZW5jZUludGVydmFsICggKSBhbmQgVVNTQXNzZXNzbWVudC5lZmZlY3RpdmVEYXRldGltZSBpbiBJbnRlcnZhbFs2LCAxMl0KICAgICAgc29ydCBieSBlZmZlY3RpdmVEYXRldGltZQogICkKCmRlZmluZSAiVXJpbmFyeSBTeW1wdG9tIFNjb3JlIFdpdGhpbiAxIE1vbnRoIEFmdGVyIEluaXRpYWwgQlBIIERpYWdub3NpcyI6CiAgRmlyc3QoIlVyaW5hcnkgU3ltcHRvbSBTY29yZSBBc3Nlc3NtZW50IiBVU1NBc3Nlc3NtZW50CiAgICAgIHdpdGggIkluaXRpYWwgQlBIIERpYWdub3NpcyBTdGFydHMgV2l0aGluIDYgTW9udGhzIEJlZm9yZSB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIiBJbml0aWFsQlBIRGlhZ25vc2lzCiAgICAgICAgc3VjaCB0aGF0IFVTU0Fzc2Vzc21lbnQuZWZmZWN0aXZlRGF0ZXRpbWUgMSBtb250aCBvciBsZXNzIG9uIG9yIGFmdGVyIGRheSBvZiBzdGFydCBvZiBJbml0aWFsQlBIRGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkKICAgICAgc29ydCBieSBlZmZlY3RpdmVEYXRldGltZQogICkKCmRlZmluZSAiSGFzIEluaXRpYWwgQlBIIERpYWdub3NpcyBTdGFydHMgRHVyaW5nIG9yIFdpdGhpbiAzMCBEYXlzIEFmdGVyIEVuZCBvZiBIb3NwaXRhbGl6YXRpb24iOgogICJJbml0aWFsIEJQSCBEaWFnbm9zaXMgU3RhcnRzIFdpdGhpbiA2IE1vbnRocyBCZWZvcmUgdGhlIE1lYXN1cmVtZW50IFBlcmlvZCIgSW5pdGlhbEJQSERpYWdub3NpcwogICAgd2l0aCBbRW5jb3VudGVyOiAiSG9zcGl0YWwgU2VydmljZXMgZm9yIFVyb2xvZ3kgQ2FyZSJdIFVyb2xvZ3lIb3NwaXRhbFNlcnZpY2VzCiAgICAgIHN1Y2ggdGhhdCBJbml0aWFsQlBIRGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgc3RhcnRzIGR1cmluZyBJbnRlcnZhbFtzdGFydCBvZiBVcm9sb2d5SG9zcGl0YWxTZXJ2aWNlcy5wZXJpb2QsIGVuZCBvZiBVcm9sb2d5SG9zcGl0YWxTZXJ2aWNlcy5wZXJpb2QgKyAzMSBkYXlzXQogICAgICAgIGFuZCBVcm9sb2d5SG9zcGl0YWxTZXJ2aWNlcy5zdGF0dXMgPSAnZmluaXNoZWQnCgpkZWZpbmUgIkluaXRpYWwgQlBIIERpYWdub3NpcyBTdGFydHMgV2l0aGluIDYgTW9udGhzIEJlZm9yZSB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICAvLyBbRS0xM10gYmFzZSBGSElSLkNvbmRpdGlvbiByZXRyaWV2ZSAoZGVmZWN0LXRyYWNraW5nL2VuZ2luZS1pc3N1ZXMubWQgRS0xMykKICAvLyBPcmlnaW5hbDoKICAvLyAgIEZpcnN0KChbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuczogIkJlbmlnbiBwcm9zdGF0aWMgaHlwZXJwbGFzaWEgd2l0aCBsb3dlciB1cmluYXJ5IHRyYWN0IHN5bXB0b21zIl0KICAvLyAgICAgICB1bmlvbiBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzOiAiQmVuaWduIHByb3N0YXRpYyBoeXBlcnBsYXNpYSB3aXRoIGxvd2VyIHVyaW5hcnkgdHJhY3Qgc3ltcHRvbXMiXSkgTmV3QlBIRGlhZ25vc2lzCiAgRmlyc3QoKFtGSElSLkNvbmRpdGlvbjogIkJlbmlnbiBwcm9zdGF0aWMgaHlwZXJwbGFzaWEgd2l0aCBsb3dlciB1cmluYXJ5IHRyYWN0IHN5bXB0b21zIl0pIE5ld0JQSERpYWdub3NpcwogICAgICB3aGVyZSBOZXdCUEhEaWFnbm9zaXMucHJldmFsZW5jZUludGVydmFsICggKSBzdGFydHMgZHVyaW5nIEludGVydmFsW3N0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiIC0gNiBtb250aHMsIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiXQogICAgICAgIGFuZCBOZXdCUEhEaWFnbm9zaXMudmVyaWZpY2F0aW9uU3RhdHVzSXNOb3RJbnZhbGlkICggKQogICAgICBzb3J0IGJ5IHN0YXJ0IG9mIG9uc2V0LnRvSW50ZXJ2YWwgKCApCiAgKQoKZGVmaW5lICJNb3JiaWQgT2Jlc2l0eSBEaWFnbm9zaXMgT24gb3IgQmVmb3JlIEZvbGxvdyBVcCBVU1MgQXNzZXNzbWVudCI6CiAgLy8gW0UtMTNdIGJhc2UgRkhJUi5Db25kaXRpb24gcmV0cmlldmUgKGRlZmVjdC10cmFja2luZy9lbmdpbmUtaXNzdWVzLm1kIEUtMTMpCiAgLy8gT3JpZ2luYWw6CiAgLy8gICAoIFtDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zOiAiTW9yYmlkIE9iZXNpdHkiXQogIC8vICAgICB1bmlvbiBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzOiAiTW9yYmlkIE9iZXNpdHkiXSApCiAgKCBbRkhJUi5Db25kaXRpb246ICJNb3JiaWQgT2Jlc2l0eSJdICkgTW9yYmlkT2Jlc2l0eURpYWdub3NpcwogICAgd2l0aCAiVXJpbmFyeSBTeW1wdG9tIFNjb3JlIDYgdG8gMTIgTW9udGhzIEFmdGVyIEluaXRpYWwgQlBIIERpYWdub3NpcyIgRm9sbG93VXBVU1NBc3Nlc3NtZW50CiAgICAgIHN1Y2ggdGhhdCBNb3JiaWRPYmVzaXR5RGlhZ25vc2lzLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgIk1lYXN1cmVtZW50IFBlcmlvZCIKICAgICAgICBhbmQgTW9yYmlkT2Jlc2l0eURpYWdub3Npcy5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIHN0YXJ0cyBvbiBvciBiZWZvcmUgRm9sbG93VXBVU1NBc3Nlc3NtZW50LmVmZmVjdGl2ZURhdGV0aW1lCiAgICB3aGVyZSBNb3JiaWRPYmVzaXR5RGlhZ25vc2lzLnZlcmlmaWNhdGlvblN0YXR1c0lzTm90SW52YWxpZCAoICkgIAogIAovKgoqIEBjb2RlOiBCb2R5IG1hc3MgaW5kZXggKEJNSSkgW1JhdGlvXSAtIDM5MTU2LTUKKiBAcHJvZmlsZTogaHR0cDovL2hsNy5vcmcvZmhpci9TdHJ1Y3R1cmVEZWZpbml0aW9uL2JtaQoqLwoKCmRlZmluZSAiQk1JIEV4YW0gUmVzdWx0IEdyZWF0ZXIgVGhhbiBvciBFcXVhbCBUbyA0MCBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIGFuZCBPbiBvciBCZWZvcmUgRm9sbG93IFVwIFVTUyBBc3Nlc3NtZW50IjoKICBleGlzdHMgKCBbIlVTQ29yZS5CTUlQcm9maWxlIl0gQk1JRXhhbQogICAgICB3aXRoICJVcmluYXJ5IFN5bXB0b20gU2NvcmUgNiB0byAxMiBNb250aHMgQWZ0ZXIgSW5pdGlhbCBCUEggRGlhZ25vc2lzIiBGb2xsb3dVcFVTU0Fzc2Vzc21lbnQKICAgICAgICBzdWNoIHRoYXQgQk1JRXhhbS52YWx1ZSA+PSA0MCAna2cvbTInCiAgICAgICAgICBhbmQgQk1JRXhhbS5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KICAgICAgICAgIGFuZCBCTUlFeGFtLmVmZmVjdGl2ZS5lYXJsaWVzdCAoICkgZHVyaW5nIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICAgICAgYW5kIEJNSUV4YW0uZWZmZWN0aXZlLmVhcmxpZXN0ICggKSBvbiBvciBiZWZvcmUgRm9sbG93VXBVU1NBc3Nlc3NtZW50LmVmZmVjdGl2ZURhdGV0aW1lCiAgICAgIHJldHVybiBCTUlFeGFtLmVmZmVjdGl2ZS5lYXJsaWVzdCAoICkKICApCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIHZlcmlmaWNhdGlvblN0YXR1c0lzTm90SW52YWxpZChjb25kaXRpb24gQ2hvaWNlPCJDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXMiLCAiQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJucyI+KToKICBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIGlzIG51bGwKICAgIG9yIG5vdCAoIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuInVuY29uZmlybWVkIgogICAgICAgIG9yIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuInJlZnV0ZWQiCiAgICAgICAgb3IgY29uZGl0aW9uLnZlcmlmaWNhdGlvblN0YXR1cyB+IFN0YXR1cy4iZW50ZXJlZC1pbi1lcnJvciIKICAgICkKCmRlZmluZSBmbHVlbnQgZnVuY3Rpb24gdmVyaWZpY2F0aW9uU3RhdHVzSXNOb3RJbnZhbGlkKGNvbmRpdGlvbiBGSElSLkNvbmRpdGlvbik6CiAgY29uZGl0aW9uLnZlcmlmaWNhdGlvblN0YXR1cyBpcyBudWxsCiAgICBvciBub3QgKCBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJ1bmNvbmZpcm1lZCIKICAgICAgICBvciBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJyZWZ1dGVkIgogICAgICAgIG9yIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuImVudGVyZWQtaW4tZXJyb3IiCiAgICAp",
    "url" : "https://madie.cms.gov/Library-CMS771FHIRUrinarySymptomScoreBPH.cql"
  }]
}