Draft dQM CMS Content Implementation Guide
2025.1.0 - CI Build

Draft dQM CMS Content Implementation Guide, published by cqframework. This guide is not an authorized publication; it is the continuous build for version 2025.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cqframework/dqm-content-cms-2025/ and changes regularly. See the Directory of published versions

: CMS56FHIRFuncStatHipReplacement - XML Representation

Draft as of 2026-09-19

Raw xml | Download


<Library xmlns="http://hl7.org/fhir">
  <id value="CMS56FHIRFuncStatHipReplacement"/>
  <text>
    <status value="extensions"/>
    <div xmlns="http://www.w3.org/1999/xhtml">
  <table class="narrative-table">
    <tbody>
<tr>


<th colspan="2" scope="row" class="row-header"><a name="metadata"> </a>Metadata</th>


</tr>







<tr>


<th scope="row" class="row-header">Version</th>



<td class="content-container">1.1.000</td>


</tr>
















<tr>


<th scope="row" class="row-header">Status</th>



<td class="content-container">Draft</td>


</tr>







































<tr>


<th scope="row" class="row-header">Type</th>



<td class="content-container">
    <a href="http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html">http://terminology.hl7.org/CodeSystem/library-type</a>#logic-library


</td>


</tr>













<tr>


<th colspan="2" scope="row" class="row-header"><a name="parameters"> </a>Parameters</th>


</tr>


<tr>


<th scope="row" class="row-header">Parameter</th>



<td class="content-container">None</td>


</tr>








  <tr>


<th colspan="2" scope="row" class="row-header">Library Content</th>


</tr>
  
    
    <tr>
      <th scope="row" class="row-header">CQL Content</th>
      <td>
        <a name="cql-content"> </a>
        <pre style="border: none;" class="content-container highlight language-cql"><code class="language-cql">/*
NOTE: For use by March 2026 US Realm Connectathon participants for internal use only. Not for use or distribution in commercial products.
*/
library CMS56FHIRFuncStatHipReplacement version '1.1.000'

using USQualityCore version '0.1.0-cibuild'
using USCore version '6.1.0-derived'
using FHIR version '4.0.1'

include hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers
include hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon
include hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon
include hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements

include USQualityCoreCommon version '0.1.0-cibuild' called USQualityCoreCommon
include SupplementalDataElements version '6.1.000' called SDE
include Status version '2.1.000' called Status
include Hospice version '7.1.000' called Hospice

codesystem &quot;LOINC&quot;: 'http://loinc.org'
codesystem &quot;CPT&quot;: 'http://www.ama-assn.org/go/cpt'
codesystem &quot;SNOMEDCT&quot;: 'http://snomed.info/sct'

valueset &quot;Lower Body Fractures Excluding Ankle and Foot&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1178'
valueset &quot;Malignant Neoplasms of Lower and Unspecified Limbs&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1180'
valueset &quot;Mechanical Complications Excluding Upper Body&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1182'
valueset &quot;Office Visit&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001'
valueset &quot;Virtual Encounter&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1089'
valueset &quot;Outpatient Consultation&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1008'
valueset &quot;Partial Arthroplasty of Hip&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1184'
valueset &quot;Primary THA Procedure&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1006'
valueset &quot;Removal, Revision and Supplement Procedures of the Lower Body and Spine&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1189'
valueset &quot;Telephone Visits&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1080'

code &quot;Activities of daily living score [HOOS]&quot;: '72095-3' from &quot;LOINC&quot; display 'Activities of daily living score [HOOS]'
code &quot;Dead (finding)&quot;: '419099009' from &quot;SNOMEDCT&quot; display 'Dead (finding)'
code &quot;Pain score [HOOS]&quot;: '72097-9' from &quot;LOINC&quot; display 'Pain score [HOOS]'
code &quot;Postoperative follow-up visit, normally included in the surgical package, to indicate that an evaluation and management service was performed during a postoperative period for a reason(s) related to the original procedure&quot;: '99024' from &quot;CPT&quot; display 'Postoperative follow-up visit, normally included in the surgical package, to indicate that an evaluation and management service was performed during a postoperative period for a reason(s) related to the original procedure'
code &quot;PROMIS-10 Global Mental Health (GMH) score T-score&quot;: '71969-0' from &quot;LOINC&quot; display 'PROMIS-10 Global Mental Health (GMH) score T-score'
code &quot;PROMIS-10 Global Physical Health (GPH) score T-score&quot;: '71971-6' from &quot;LOINC&quot; display 'PROMIS-10 Global Physical Health (GPH) score T-score'
code &quot;Quality of life score [HOOS]&quot;: '72093-8' from &quot;LOINC&quot; display 'Quality of life score [HOOS]'
code &quot;Severe cognitive impairment (finding)&quot;: '702956004' from &quot;SNOMEDCT&quot; display 'Severe cognitive impairment (finding)'
code &quot;Sport-recreation score [HOOS]&quot;: '72094-6' from &quot;LOINC&quot; display 'Sport-recreation score [HOOS]'
code &quot;Symptoms score [HOOS]&quot;: '72096-1' from &quot;LOINC&quot; display 'Symptoms score [HOOS]'
code &quot;Total interval score [HOOSJR]&quot;: '82323-7' from &quot;LOINC&quot; display 'Total interval score [HOOSJR]'
code &quot;VR-12 Mental component summary (MCS) score - oblique method T-score&quot;: '72026-8' from &quot;LOINC&quot; display 'VR-12 Mental component summary (MCS) score - oblique method T-score'
code &quot;VR-12 Mental component summary (MCS) score - orthogonal method T-score&quot;: '72028-4' from &quot;LOINC&quot; display 'VR-12 Mental component summary (MCS) score - orthogonal method T-score'
code &quot;VR-12 Physical component summary (PCS) score - oblique method T-score&quot;: '72025-0' from &quot;LOINC&quot; display 'VR-12 Physical component summary (PCS) score - oblique method T-score'
code &quot;VR-12 Physical component summary (PCS) score - orthogonal method T-score&quot;: '72027-6' from &quot;LOINC&quot; display 'VR-12 Physical component summary (PCS) score - orthogonal method T-score'

parameter &quot;Measurement Period&quot; Interval&lt;DateTime&gt;
  default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)

context Patient

define &quot;SDE Ethnicity&quot;:
  SDE.&quot;SDE Ethnicity&quot;

define &quot;SDE Payer&quot;:
  SDE.&quot;SDE Payer&quot;

define &quot;SDE Race&quot;:
  SDE.&quot;SDE Race&quot;

define &quot;SDE Sex&quot;:
  SDE.&quot;SDE Sex&quot;

define &quot;Initial Population&quot;:
  &quot;Has Qualifying Encounter&quot;
    and exists ( &quot;Total Hip Arthroplasty Procedure&quot; )
    and AgeInYearsAt(date from start of &quot;Measurement Period&quot;) &gt;= 19

define &quot;Has Qualifying Encounter&quot;:
  exists ( ( ( [Encounter: &quot;Outpatient Consultation&quot;]
        union [Encounter: &quot;Office Visit&quot;]
        union ( [Encounter] E
            where exists ( ( E.type ) T
                where T ~ &quot;Postoperative follow-up visit, normally included in the surgical package, to indicate that an evaluation and management service was performed during a postoperative period for a reason(s) related to the original procedure&quot;
            )
        )
        union [Encounter: &quot;Telephone Visits&quot;]
        union [Encounter: &quot;Virtual Encounter&quot;]
    ).isEncounterPerformed ( ) ) ValidEncounters
      where ValidEncounters.period during day of Interval[&quot;August 1 Year Prior to the Measurement Period&quot;, end of &quot;Measurement Period&quot;]
  )

define &quot;August 1 Year Prior to the Measurement Period&quot;:
  DateTime((year from start of &quot;Measurement Period&quot; - 1), 8, 1, 0, 0, 0, 0, 0)

define &quot;Total Hip Arthroplasty Procedure&quot;:
  ( ( [Procedure: &quot;Primary THA Procedure&quot;] ).isProcedurePerformed ( ) ) THAProcedure
    where THAProcedure.performed.toInterval ( ) starts during day of Interval[&quot;November 1 Two Years Prior to the Measurement Period&quot;, &quot;October 31 Year Prior to the Measurement Period&quot;]

define &quot;November 1 Two Years Prior to the Measurement Period&quot;:
  DateTime((year from start of &quot;Measurement Period&quot; - 2), 11, 1, 0, 0, 0, 0, 0)

define &quot;October 31 Year Prior to the Measurement Period&quot;:
  DateTime((year from start of &quot;Measurement Period&quot; - 1), 10, 31, 23, 59, 59, 999, 0)

define &quot;Denominator&quot;:
  &quot;Initial Population&quot;

define &quot;Denominator Exclusions&quot;:
  Hospice.&quot;Has Hospice Services&quot;
    or &quot;Has Severe Cognitive Impairment&quot;
    or &quot;Has Total Hip Arthroplasty with 1 or More Lower Body Fractures&quot;
    or &quot;Has Partial Hip Arthroplasty Procedure&quot;
    or &quot;Has Revision Hip Arthroplasty Procedure or Implanted Device or Prosthesis Removal Procedure&quot;
    or &quot;Has Malignant Neoplasm of Lower and Unspecified Limbs&quot;
    or &quot;Has Mechanical Complication&quot;
    or &quot;Has More Than One Elective Primary Total Hip Arthroplasty Performed&quot;
    or &quot;Death Within 300 Days of the THA Procedure&quot;

define &quot;Has Severe Cognitive Impairment&quot;:
  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)
  // Original:
  //   exists ( [ConditionProblemsHealthConcerns: &quot;Severe cognitive impairment (finding)&quot;]
  //     union [ConditionEncounterDiagnosis: &quot;Severe cognitive impairment (finding)&quot;] ) Dementia
  //     where Dementia.prevalenceInterval ( ) overlaps day of &quot;Measurement Period&quot;
  exists ( [FHIR.Condition: &quot;Severe cognitive impairment (finding)&quot;] ) Dementia
    where Dementia.prevalenceInterval ( ) overlaps day of &quot;Measurement Period&quot;

define &quot;Has Total Hip Arthroplasty with 1 or More Lower Body Fractures&quot;:
  exists ( &quot;Total Hip Arthroplasty Procedure&quot; THAProcedure
      with ( // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)
        // Original:
        //   ( [ConditionEncounterDiagnosis: &quot;Lower Body Fractures Excluding Ankle and Foot&quot;]
        //     union [ConditionProblemsHealthConcerns: &quot;Lower Body Fractures Excluding Ankle and Foot&quot;] )
        [FHIR.Condition: &quot;Lower Body Fractures Excluding Ankle and Foot&quot;] ) LowerBodyFracture
        such that LowerBodyFracture.prevalenceInterval ( ) starts 48 hours or less on or before start of THAProcedure.performed.toInterval ( )
          and LowerBodyFracture.isVerified ( )
  )

define &quot;Has Partial Hip Arthroplasty Procedure&quot;:
  exists ( ( ( [Procedure: &quot;Partial Arthroplasty of Hip&quot;] ).isProcedurePerformed ( ) ) PartialTHAProcedure
      with &quot;Total Hip Arthroplasty Procedure&quot; THAProcedure
        such that PartialTHAProcedure.performed.toInterval ( ) during day of THAProcedure.performed.toInterval ( )
  )

define &quot;Has Revision Hip Arthroplasty Procedure or Implanted Device or Prosthesis Removal Procedure&quot;:
  exists ( &quot;Total Hip Arthroplasty Procedure&quot; THAProcedure
      with ( ( [Procedure: &quot;Removal, Revision and Supplement Procedures of the Lower Body and Spine&quot;] ).isProcedurePerformed ( ) ) RevisionTHAProcedure
        such that RevisionTHAProcedure.performed.toInterval ( ) during day of THAProcedure.performed.toInterval ( )
  )

define &quot;Has Malignant Neoplasm of Lower and Unspecified Limbs&quot;:
  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)
  // Original:
  //   exists ( ( [ConditionProblemsHealthConcerns: &quot;Malignant Neoplasms of Lower and Unspecified Limbs&quot;]
  //       union [ConditionEncounterDiagnosis: &quot;Malignant Neoplasms of Lower and Unspecified Limbs&quot;] ) MalignantNeoplasm
  exists ( ( [FHIR.Condition: &quot;Malignant Neoplasms of Lower and Unspecified Limbs&quot;] ) MalignantNeoplasm
      with &quot;Total Hip Arthroplasty Procedure&quot; THAProcedure
        such that MalignantNeoplasm.prevalenceInterval ( ) overlaps day of THAProcedure.performed.toInterval ( )
          and MalignantNeoplasm.isVerified ( )
  )

define &quot;Has Mechanical Complication&quot;:
  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)
  // Original:
  //   exists ( ( [ConditionEncounterDiagnosis: &quot;Mechanical Complications Excluding Upper Body&quot;]
  //       union [ConditionProblemsHealthConcerns: &quot;Mechanical Complications Excluding Upper Body&quot;] ) MechanicalComplications
  exists ( ( [FHIR.Condition: &quot;Mechanical Complications Excluding Upper Body&quot;] ) MechanicalComplications
      with &quot;Total Hip Arthroplasty Procedure&quot; THAProcedure
        such that MechanicalComplications.prevalenceInterval ( ) overlaps day of THAProcedure.performed.toInterval ( )
          and MechanicalComplications.isVerified ( )
  )

define &quot;Has More Than One Elective Primary Total Hip Arthroplasty Performed&quot;:
  exists ( &quot;Total Hip Arthroplasty Procedure&quot; THAProcedure
      with ( ( [Procedure: &quot;Primary THA Procedure&quot;] ).isProcedurePerformed ( ) ) ElectiveTHAProcedure
        such that THAProcedure.id !~ ElectiveTHAProcedure.id
          and start of ElectiveTHAProcedure.performed.toInterval ( ) during day of Interval[( start of THAProcedure.performed.toInterval ( ) ) - 1 year, ( start of THAProcedure.performed.toInterval ( ) ) + 1 year]
  )

define &quot;Death Within 300 Days of the THA Procedure&quot;:
  exists &quot;Total Hip Arthroplasty Procedure&quot; THAProcedure
    where date from Patient.deceased during day of Interval[date from start of THAProcedure.performed.toInterval ( ), date from start of THAProcedure.performed.toInterval ( ) + 300 days]

define &quot;Numerator&quot;:
  ( &quot;Has THA with Initial and Follow Up HOOS Assessments&quot; )
    or ( &quot;Has THA with Initial and Follow Up HOOSJr Assessments&quot; )
    or ( &quot;Has THA with Initial and Follow Up PROMIS10 Assessments&quot; )
    or ( &quot;Has THA with Initial and Follow Up VR12 Oblique Assessments&quot; )
    or ( &quot;Has THA with Initial and Follow Up VR12 Orthogonal Assessments&quot; )

define &quot;Has THA with Initial and Follow Up HOOS Assessments&quot;:
  exists ( ( &quot;Total Hip Arthroplasty Procedure&quot; THAProcedure
      return THAProcedure.performed.toInterval ( ) ) TotalHip
      with &quot;Date HOOS Total Assessment Completed&quot; InitialHipAssessmentHOOS
        such that TotalHip starts 90 days or less on or after day of InitialHipAssessmentHOOS
      with &quot;Date HOOS Total Assessment Completed&quot; FollowUpHipAssessmentHOOS
        such that date from FollowUpHipAssessmentHOOS during day of Interval[date from end of TotalHip + 300 days, date from end of TotalHip + 425 days]
  )

define &quot;Date HOOS Total Assessment Completed&quot;:
  from
    ( ( [ObservationScreeningAssessment: &quot;Quality of life score [HOOS]&quot;] ).isAssessmentPerformed ( ) ) HOOSLifeQuality,
    ( ( [ObservationScreeningAssessment: &quot;Sport-recreation score [HOOS]&quot;] ).isAssessmentPerformed ( ) ) HOOSSport,
    ( ( [ObservationScreeningAssessment: &quot;Activities of daily living score [HOOS]&quot;] ).isAssessmentPerformed ( ) ) HOOSActivityScore,
    ( ( [ObservationScreeningAssessment: &quot;Symptoms score [HOOS]&quot;] ).isAssessmentPerformed ( ) ) HOOSSymptoms,
    ( ( [ObservationScreeningAssessment: &quot;Pain score [HOOS]&quot;] ).isAssessmentPerformed ( ) ) HOOSPain
    let HOOSLifeQualityDate: date from start of HOOSLifeQuality.effective.toInterval ( ),
    HOOSSportDate: date from start of HOOSSport.effective.toInterval ( ),
    HOOSActivityScoreDate: date from start of HOOSActivityScore.effective.toInterval ( ),
    HOOSSymptomsDate: date from start of HOOSSymptoms.effective.toInterval ( ),
    HOOSPainDate: date from start of HOOSPain.effective.toInterval ( )
    where HOOSLifeQualityDate same day as HOOSSportDate
      and ( HOOSSport as ObservationScreeningAssessment ).value is not null
      and HOOSLifeQualityDate same day as HOOSActivityScoreDate
      and ( HOOSActivityScore as ObservationScreeningAssessment ).value is not null
      and HOOSLifeQualityDate same day as HOOSSymptomsDate
      and ( HOOSSymptoms as ObservationScreeningAssessment ).value is not null
      and HOOSLifeQualityDate same day as HOOSPainDate
      and ( HOOSPain as ObservationScreeningAssessment ).value is not null
      and ( HOOSLifeQuality as ObservationScreeningAssessment ).value is not null
    return Max({ HOOSLifeQualityDate, HOOSSportDate, HOOSActivityScoreDate, HOOSSymptomsDate, HOOSPainDate })

define &quot;Has THA with Initial and Follow Up HOOSJr Assessments&quot;:
  exists ( ( &quot;Total Hip Arthroplasty Procedure&quot; THAProcedure
      return THAProcedure.performed.toInterval ( ) ) TotalHip
      with &quot;Date HOOSJr Total Assessment Completed&quot; InitialHipAssessment
        such that TotalHip starts 90 days or less on or after day of InitialHipAssessment
      with &quot;Date HOOSJr Total Assessment Completed&quot; FollowUpHipAssessment
        such that date from FollowUpHipAssessment during day of Interval[date from end of TotalHip + 300 days, date from end of TotalHip + 425 days]
  )

define &quot;Date HOOSJr Total Assessment Completed&quot;:
  ( ( ( [ObservationScreeningAssessment: &quot;Total interval score [HOOSJR]&quot;] ).isAssessmentPerformed ( ) ) HOOSJr
    where ( HOOSJr as ObservationScreeningAssessment ).value is not null ) DocumentedHOOSJr
    return date from start of DocumentedHOOSJr.effective.toInterval ( )

define &quot;Has THA with Initial and Follow Up PROMIS10 Assessments&quot;:
  exists ( ( &quot;Total Hip Arthroplasty Procedure&quot; THAProcedure
      return THAProcedure.performed.toInterval ( ) ) TotalHip
      with &quot;Date PROMIS10 Total Assessment Completed&quot; InitialHipAssessmentPROMIS10
        such that TotalHip starts 90 days or less on or after day of InitialHipAssessmentPROMIS10
      with &quot;Date PROMIS10 Total Assessment Completed&quot; FollowUpHipAssessmentPROMIS10
        such that date from FollowUpHipAssessmentPROMIS10 during day of Interval[date from end of TotalHip + 300 days, date from end of TotalHip + 425 days]
  )

define &quot;Date PROMIS10 Total Assessment Completed&quot;:
  from
    ( ( [ObservationScreeningAssessment: &quot;PROMIS-10 Global Mental Health (GMH) score T-score&quot;] ).isAssessmentPerformed ( ) ) PROMIS10MentalScore,
    ( ( [ObservationScreeningAssessment: &quot;PROMIS-10 Global Physical Health (GPH) score T-score&quot;] ).isAssessmentPerformed ( ) ) PROMIS10PhysicalScore
    let PROMIS10MentalScoreDate: date from start of PROMIS10MentalScore.effective.toInterval ( ),
    PROMIS10PhysicalScoreDate: date from start of PROMIS10PhysicalScore.effective.toInterval ( )
    where PROMIS10MentalScoreDate same day as PROMIS10PhysicalScoreDate
      and ( PROMIS10PhysicalScore as ObservationScreeningAssessment ).value is not null
      and ( PROMIS10MentalScore as ObservationScreeningAssessment ).value is not null
    return Max({ PROMIS10MentalScoreDate, PROMIS10PhysicalScoreDate })

define &quot;Has THA with Initial and Follow Up VR12 Oblique Assessments&quot;:
  exists ( ( &quot;Total Hip Arthroplasty Procedure&quot; THAProcedure
      return THAProcedure.performed.toInterval ( ) ) TotalHip
      with &quot;Date VR12 Oblique Total Assessment Completed&quot; InitialHipAssessmentOblique
        such that TotalHip starts 90 days or less on or after day of InitialHipAssessmentOblique
      with &quot;Date VR12 Oblique Total Assessment Completed&quot; FollowUpHipAssessmentOblique
        such that date from FollowUpHipAssessmentOblique during day of Interval[date from end of TotalHip + 300 days, date from end of TotalHip + 425 days]
  )

define &quot;Date VR12 Oblique Total Assessment Completed&quot;:
  from
    ( ( [ObservationScreeningAssessment: &quot;VR-12 Mental component summary (MCS) score - oblique method T-score&quot;] ).isAssessmentPerformed ( ) ) VR12MentalAssessment,
    ( ( [ObservationScreeningAssessment: &quot;VR-12 Physical component summary (PCS) score - oblique method T-score&quot;] ).isAssessmentPerformed ( ) ) VR12PhysicalAssessment
    let VR12MentalAssessmentDate: date from start of VR12MentalAssessment.effective.toInterval ( ),
    VR12PhysicalAssessmentDate: date from start of VR12PhysicalAssessment.effective.toInterval ( )
    where VR12MentalAssessmentDate same day as VR12PhysicalAssessmentDate
      and ( VR12MentalAssessment as ObservationScreeningAssessment ).value is not null
      and ( VR12PhysicalAssessment as ObservationScreeningAssessment ).value is not null
    return Max({ VR12MentalAssessmentDate, VR12PhysicalAssessmentDate })

define &quot;Has THA with Initial and Follow Up VR12 Orthogonal Assessments&quot;:
  exists ( ( &quot;Total Hip Arthroplasty Procedure&quot; THAProcedure
      return THAProcedure.performed.toInterval ( ) ) TotalHip
      with &quot;Date VR12 Orthogonal Total Assessment Completed&quot; InitialHipAssessmentOrthogonal
        such that TotalHip starts 90 days or less on or after day of InitialHipAssessmentOrthogonal
      with &quot;Date VR12 Orthogonal Total Assessment Completed&quot; FollowUpHipAssessmentOrthogonal
        such that date from FollowUpHipAssessmentOrthogonal during day of Interval[date from end of TotalHip + 300 days, date from end of TotalHip + 425 days]
  )

define &quot;Date VR12 Orthogonal Total Assessment Completed&quot;:
  from
    ( ( [ObservationScreeningAssessment: &quot;VR-12 Mental component summary (MCS) score - orthogonal method T-score&quot;] ).isAssessmentPerformed ( ) ) VR12MentalAssessment,
    ( ( [ObservationScreeningAssessment: &quot;VR-12 Physical component summary (PCS) score - orthogonal method T-score&quot;] ).isAssessmentPerformed ( ) ) VR12PhysicalAssessment
    let VR12MentalAssessmentDate: date from start of VR12MentalAssessment.effective.toInterval ( ),
    VR12PhysicalAssessmentDate: date from start of VR12PhysicalAssessment.effective.toInterval ( )
    where VR12MentalAssessmentDate same day as VR12PhysicalAssessmentDate
      and ( VR12MentalAssessment as ObservationScreeningAssessment ).value is not null
      and ( VR12PhysicalAssessment as ObservationScreeningAssessment ).value is not null
    return Max({ VR12MentalAssessmentDate, VR12PhysicalAssessmentDate })
    
/*
@note: When possible, this function should be migrated to QICoreCommon.
@description: Returns true if the given Condition has a verification status of &quot;confirmed&quot;, &quot;unconfirmed&quot;, &quot;provisional&quot;, or &quot;differential&quot;
*/


define fluent function isVerified(condition Choice&lt;ConditionEncounterDiagnosis, ConditionProblemsHealthConcerns&gt;):
  condition.verificationStatus is not null implies ( condition.verificationStatus ~ Status.&quot;confirmed&quot;
      or condition.verificationStatus ~ Status.&quot;unconfirmed&quot;
      or condition.verificationStatus ~ Status.&quot;provisional&quot;
      or condition.verificationStatus ~ Status.&quot;differential&quot;
  )</code></pre>
      </td>
    </tr>
    
  



<tr>
  <th colspan="2" scope="row" class="row-header">Generated using version 0.5.6 of the sample-content-ig Liquid templates</th>
</tr>

    </tbody>
  </table>
</div>
  </text>
  <extension
             url="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem">
    <valueReference>
      <reference value="Device/cqf-tooling"/>
    </valueReference>
  </extension>
  <url value="https://madie.cms.gov/Library/CMS56FHIRFuncStatHipReplacement"/>
  <version value="1.1.000"/>
  <name value="CMS56FHIRFuncStatHipReplacement"/>
  <status value="draft"/>
  <type>
    <coding>
      <system value="http://terminology.hl7.org/CodeSystem/library-type"/>
      <code value="logic-library"/>
    </coding>
  </type>
  <date value="2026-09-19T16:31:14+00:00"/>
  <content>
    <contentType value="text/cql"/>
    <data
          value="LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVM1NkZISVJGdW5jU3RhdEhpcFJlcGxhY2VtZW50IHZlcnNpb24gJzEuMS4wMDAnCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHMgdmVyc2lvbiAnNi4xLjAwMCcgY2FsbGVkIFNERQppbmNsdWRlIFN0YXR1cyB2ZXJzaW9uICcyLjEuMDAwJyBjYWxsZWQgU3RhdHVzCmluY2x1ZGUgSG9zcGljZSB2ZXJzaW9uICc3LjEuMDAwJyBjYWxsZWQgSG9zcGljZQoKY29kZXN5c3RlbSAiTE9JTkMiOiAnaHR0cDovL2xvaW5jLm9yZycKY29kZXN5c3RlbSAiQ1BUIjogJ2h0dHA6Ly93d3cuYW1hLWFzc24ub3JnL2dvL2NwdCcKY29kZXN5c3RlbSAiU05PTUVEQ1QiOiAnaHR0cDovL3Nub21lZC5pbmZvL3NjdCcKCnZhbHVlc2V0ICJMb3dlciBCb2R5IEZyYWN0dXJlcyBFeGNsdWRpbmcgQW5rbGUgYW5kIEZvb3QiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTE3OCcKdmFsdWVzZXQgIk1hbGlnbmFudCBOZW9wbGFzbXMgb2YgTG93ZXIgYW5kIFVuc3BlY2lmaWVkIExpbWJzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExODAnCnZhbHVlc2V0ICJNZWNoYW5pY2FsIENvbXBsaWNhdGlvbnMgRXhjbHVkaW5nIFVwcGVyIEJvZHkiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTE4MicKdmFsdWVzZXQgIk9mZmljZSBWaXNpdCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xMDEuMTIuMTAwMScKdmFsdWVzZXQgIlZpcnR1YWwgRW5jb3VudGVyIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDg5Jwp2YWx1ZXNldCAiT3V0cGF0aWVudCBDb25zdWx0YXRpb24iOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTAxLjEyLjEwMDgnCnZhbHVlc2V0ICJQYXJ0aWFsIEFydGhyb3BsYXN0eSBvZiBIaXAiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTE4NCcKdmFsdWVzZXQgIlByaW1hcnkgVEhBIFByb2NlZHVyZSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xOTguMTIuMTAwNicKdmFsdWVzZXQgIlJlbW92YWwsIFJldmlzaW9uIGFuZCBTdXBwbGVtZW50IFByb2NlZHVyZXMgb2YgdGhlIExvd2VyIEJvZHkgYW5kIFNwaW5lIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjExODknCnZhbHVlc2V0ICJUZWxlcGhvbmUgVmlzaXRzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDAzLjEwMS4xMi4xMDgwJwoKY29kZSAiQWN0aXZpdGllcyBvZiBkYWlseSBsaXZpbmcgc2NvcmUgW0hPT1NdIjogJzcyMDk1LTMnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdBY3Rpdml0aWVzIG9mIGRhaWx5IGxpdmluZyBzY29yZSBbSE9PU10nCmNvZGUgIkRlYWQgKGZpbmRpbmcpIjogJzQxOTA5OTAwOScgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0RlYWQgKGZpbmRpbmcpJwpjb2RlICJQYWluIHNjb3JlIFtIT09TXSI6ICc3MjA5Ny05JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnUGFpbiBzY29yZSBbSE9PU10nCmNvZGUgIlBvc3RvcGVyYXRpdmUgZm9sbG93LXVwIHZpc2l0LCBub3JtYWxseSBpbmNsdWRlZCBpbiB0aGUgc3VyZ2ljYWwgcGFja2FnZSwgdG8gaW5kaWNhdGUgdGhhdCBhbiBldmFsdWF0aW9uIGFuZCBtYW5hZ2VtZW50IHNlcnZpY2Ugd2FzIHBlcmZvcm1lZCBkdXJpbmcgYSBwb3N0b3BlcmF0aXZlIHBlcmlvZCBmb3IgYSByZWFzb24ocykgcmVsYXRlZCB0byB0aGUgb3JpZ2luYWwgcHJvY2VkdXJlIjogJzk5MDI0JyBmcm9tICJDUFQiIGRpc3BsYXkgJ1Bvc3RvcGVyYXRpdmUgZm9sbG93LXVwIHZpc2l0LCBub3JtYWxseSBpbmNsdWRlZCBpbiB0aGUgc3VyZ2ljYWwgcGFja2FnZSwgdG8gaW5kaWNhdGUgdGhhdCBhbiBldmFsdWF0aW9uIGFuZCBtYW5hZ2VtZW50IHNlcnZpY2Ugd2FzIHBlcmZvcm1lZCBkdXJpbmcgYSBwb3N0b3BlcmF0aXZlIHBlcmlvZCBmb3IgYSByZWFzb24ocykgcmVsYXRlZCB0byB0aGUgb3JpZ2luYWwgcHJvY2VkdXJlJwpjb2RlICJQUk9NSVMtMTAgR2xvYmFsIE1lbnRhbCBIZWFsdGggKEdNSCkgc2NvcmUgVC1zY29yZSI6ICc3MTk2OS0wJyBmcm9tICJMT0lOQyIgZGlzcGxheSAnUFJPTUlTLTEwIEdsb2JhbCBNZW50YWwgSGVhbHRoIChHTUgpIHNjb3JlIFQtc2NvcmUnCmNvZGUgIlBST01JUy0xMCBHbG9iYWwgUGh5c2ljYWwgSGVhbHRoIChHUEgpIHNjb3JlIFQtc2NvcmUiOiAnNzE5NzEtNicgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1BST01JUy0xMCBHbG9iYWwgUGh5c2ljYWwgSGVhbHRoIChHUEgpIHNjb3JlIFQtc2NvcmUnCmNvZGUgIlF1YWxpdHkgb2YgbGlmZSBzY29yZSBbSE9PU10iOiAnNzIwOTMtOCcgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1F1YWxpdHkgb2YgbGlmZSBzY29yZSBbSE9PU10nCmNvZGUgIlNldmVyZSBjb2duaXRpdmUgaW1wYWlybWVudCAoZmluZGluZykiOiAnNzAyOTU2MDA0JyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnU2V2ZXJlIGNvZ25pdGl2ZSBpbXBhaXJtZW50IChmaW5kaW5nKScKY29kZSAiU3BvcnQtcmVjcmVhdGlvbiBzY29yZSBbSE9PU10iOiAnNzIwOTQtNicgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1Nwb3J0LXJlY3JlYXRpb24gc2NvcmUgW0hPT1NdJwpjb2RlICJTeW1wdG9tcyBzY29yZSBbSE9PU10iOiAnNzIwOTYtMScgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1N5bXB0b21zIHNjb3JlIFtIT09TXScKY29kZSAiVG90YWwgaW50ZXJ2YWwgc2NvcmUgW0hPT1NKUl0iOiAnODIzMjMtNycgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1RvdGFsIGludGVydmFsIHNjb3JlIFtIT09TSlJdJwpjb2RlICJWUi0xMiBNZW50YWwgY29tcG9uZW50IHN1bW1hcnkgKE1DUykgc2NvcmUgLSBvYmxpcXVlIG1ldGhvZCBULXNjb3JlIjogJzcyMDI2LTgnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdWUi0xMiBNZW50YWwgY29tcG9uZW50IHN1bW1hcnkgKE1DUykgc2NvcmUgLSBvYmxpcXVlIG1ldGhvZCBULXNjb3JlJwpjb2RlICJWUi0xMiBNZW50YWwgY29tcG9uZW50IHN1bW1hcnkgKE1DUykgc2NvcmUgLSBvcnRob2dvbmFsIG1ldGhvZCBULXNjb3JlIjogJzcyMDI4LTQnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdWUi0xMiBNZW50YWwgY29tcG9uZW50IHN1bW1hcnkgKE1DUykgc2NvcmUgLSBvcnRob2dvbmFsIG1ldGhvZCBULXNjb3JlJwpjb2RlICJWUi0xMiBQaHlzaWNhbCBjb21wb25lbnQgc3VtbWFyeSAoUENTKSBzY29yZSAtIG9ibGlxdWUgbWV0aG9kIFQtc2NvcmUiOiAnNzIwMjUtMCcgZnJvbSAiTE9JTkMiIGRpc3BsYXkgJ1ZSLTEyIFBoeXNpY2FsIGNvbXBvbmVudCBzdW1tYXJ5IChQQ1MpIHNjb3JlIC0gb2JsaXF1ZSBtZXRob2QgVC1zY29yZScKY29kZSAiVlItMTIgUGh5c2ljYWwgY29tcG9uZW50IHN1bW1hcnkgKFBDUykgc2NvcmUgLSBvcnRob2dvbmFsIG1ldGhvZCBULXNjb3JlIjogJzcyMDI3LTYnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdWUi0xMiBQaHlzaWNhbCBjb21wb25lbnQgc3VtbWFyeSAoUENTKSBzY29yZSAtIG9ydGhvZ29uYWwgbWV0aG9kIFQtc2NvcmUnCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNy0wMS0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgIlNERSBFdGhuaWNpdHkiOgogIFNERS4iU0RFIEV0aG5pY2l0eSIKCmRlZmluZSAiU0RFIFBheWVyIjoKICBTREUuIlNERSBQYXllciIKCmRlZmluZSAiU0RFIFJhY2UiOgogIFNERS4iU0RFIFJhY2UiCgpkZWZpbmUgIlNERSBTZXgiOgogIFNERS4iU0RFIFNleCIKCmRlZmluZSAiSW5pdGlhbCBQb3B1bGF0aW9uIjoKICAiSGFzIFF1YWxpZnlpbmcgRW5jb3VudGVyIgogICAgYW5kIGV4aXN0cyAoICJUb3RhbCBIaXAgQXJ0aHJvcGxhc3R5IFByb2NlZHVyZSIgKQogICAgYW5kIEFnZUluWWVhcnNBdChkYXRlIGZyb20gc3RhcnQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpID49IDE5CgpkZWZpbmUgIkhhcyBRdWFsaWZ5aW5nIEVuY291bnRlciI6CiAgZXhpc3RzICggKCAoIFtFbmNvdW50ZXI6ICJPdXRwYXRpZW50IENvbnN1bHRhdGlvbiJdCiAgICAgICAgdW5pb24gW0VuY291bnRlcjogIk9mZmljZSBWaXNpdCJdCiAgICAgICAgdW5pb24gKCBbRW5jb3VudGVyXSBFCiAgICAgICAgICAgIHdoZXJlIGV4aXN0cyAoICggRS50eXBlICkgVAogICAgICAgICAgICAgICAgd2hlcmUgVCB+ICJQb3N0b3BlcmF0aXZlIGZvbGxvdy11cCB2aXNpdCwgbm9ybWFsbHkgaW5jbHVkZWQgaW4gdGhlIHN1cmdpY2FsIHBhY2thZ2UsIHRvIGluZGljYXRlIHRoYXQgYW4gZXZhbHVhdGlvbiBhbmQgbWFuYWdlbWVudCBzZXJ2aWNlIHdhcyBwZXJmb3JtZWQgZHVyaW5nIGEgcG9zdG9wZXJhdGl2ZSBwZXJpb2QgZm9yIGEgcmVhc29uKHMpIHJlbGF0ZWQgdG8gdGhlIG9yaWdpbmFsIHByb2NlZHVyZSIKICAgICAgICAgICAgKQogICAgICAgICkKICAgICAgICB1bmlvbiBbRW5jb3VudGVyOiAiVGVsZXBob25lIFZpc2l0cyJdCiAgICAgICAgdW5pb24gW0VuY291bnRlcjogIlZpcnR1YWwgRW5jb3VudGVyIl0KICAgICkuaXNFbmNvdW50ZXJQZXJmb3JtZWQgKCApICkgVmFsaWRFbmNvdW50ZXJzCiAgICAgIHdoZXJlIFZhbGlkRW5jb3VudGVycy5wZXJpb2QgZHVyaW5nIGRheSBvZiBJbnRlcnZhbFsiQXVndXN0IDEgWWVhciBQcmlvciB0byB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIiwgZW5kIG9mICJNZWFzdXJlbWVudCBQZXJpb2QiXQogICkKCmRlZmluZSAiQXVndXN0IDEgWWVhciBQcmlvciB0byB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIjoKICBEYXRlVGltZSgoeWVhciBmcm9tIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiIC0gMSksIDgsIDEsIDAsIDAsIDAsIDAsIDApCgpkZWZpbmUgIlRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIjoKICAoICggW1Byb2NlZHVyZTogIlByaW1hcnkgVEhBIFByb2NlZHVyZSJdICkuaXNQcm9jZWR1cmVQZXJmb3JtZWQgKCApICkgVEhBUHJvY2VkdXJlCiAgICB3aGVyZSBUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIHN0YXJ0cyBkdXJpbmcgZGF5IG9mIEludGVydmFsWyJOb3ZlbWJlciAxIFR3byBZZWFycyBQcmlvciB0byB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIiwgIk9jdG9iZXIgMzEgWWVhciBQcmlvciB0byB0aGUgTWVhc3VyZW1lbnQgUGVyaW9kIl0KCmRlZmluZSAiTm92ZW1iZXIgMSBUd28gWWVhcnMgUHJpb3IgdG8gdGhlIE1lYXN1cmVtZW50IFBlcmlvZCI6CiAgRGF0ZVRpbWUoKHllYXIgZnJvbSBzdGFydCBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIiAtIDIpLCAxMSwgMSwgMCwgMCwgMCwgMCwgMCkKCmRlZmluZSAiT2N0b2JlciAzMSBZZWFyIFByaW9yIHRvIHRoZSBNZWFzdXJlbWVudCBQZXJpb2QiOgogIERhdGVUaW1lKCh5ZWFyIGZyb20gc3RhcnQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIgLSAxKSwgMTAsIDMxLCAyMywgNTksIDU5LCA5OTksIDApCgpkZWZpbmUgIkRlbm9taW5hdG9yIjoKICAiSW5pdGlhbCBQb3B1bGF0aW9uIgoKZGVmaW5lICJEZW5vbWluYXRvciBFeGNsdXNpb25zIjoKICBIb3NwaWNlLiJIYXMgSG9zcGljZSBTZXJ2aWNlcyIKICAgIG9yICJIYXMgU2V2ZXJlIENvZ25pdGl2ZSBJbXBhaXJtZW50IgogICAgb3IgIkhhcyBUb3RhbCBIaXAgQXJ0aHJvcGxhc3R5IHdpdGggMSBvciBNb3JlIExvd2VyIEJvZHkgRnJhY3R1cmVzIgogICAgb3IgIkhhcyBQYXJ0aWFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIgogICAgb3IgIkhhcyBSZXZpc2lvbiBIaXAgQXJ0aHJvcGxhc3R5IFByb2NlZHVyZSBvciBJbXBsYW50ZWQgRGV2aWNlIG9yIFByb3N0aGVzaXMgUmVtb3ZhbCBQcm9jZWR1cmUiCiAgICBvciAiSGFzIE1hbGlnbmFudCBOZW9wbGFzbSBvZiBMb3dlciBhbmQgVW5zcGVjaWZpZWQgTGltYnMiCiAgICBvciAiSGFzIE1lY2hhbmljYWwgQ29tcGxpY2F0aW9uIgogICAgb3IgIkhhcyBNb3JlIFRoYW4gT25lIEVsZWN0aXZlIFByaW1hcnkgVG90YWwgSGlwIEFydGhyb3BsYXN0eSBQZXJmb3JtZWQiCiAgICBvciAiRGVhdGggV2l0aGluIDMwMCBEYXlzIG9mIHRoZSBUSEEgUHJvY2VkdXJlIgoKZGVmaW5lICJIYXMgU2V2ZXJlIENvZ25pdGl2ZSBJbXBhaXJtZW50IjoKICAvLyBbRS0xM10gYmFzZSBGSElSLkNvbmRpdGlvbiByZXRyaWV2ZSAoZGVmZWN0LXRyYWNraW5nL2VuZ2luZS1pc3N1ZXMubWQgRS0xMykKICAvLyBPcmlnaW5hbDoKICAvLyAgIGV4aXN0cyAoIFtDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zOiAiU2V2ZXJlIGNvZ25pdGl2ZSBpbXBhaXJtZW50IChmaW5kaW5nKSJdCiAgLy8gICAgIHVuaW9uIFtDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXM6ICJTZXZlcmUgY29nbml0aXZlIGltcGFpcm1lbnQgKGZpbmRpbmcpIl0gKSBEZW1lbnRpYQogIC8vICAgICB3aGVyZSBEZW1lbnRpYS5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogIGV4aXN0cyAoIFtGSElSLkNvbmRpdGlvbjogIlNldmVyZSBjb2duaXRpdmUgaW1wYWlybWVudCAoZmluZGluZykiXSApIERlbWVudGlhCiAgICB3aGVyZSBEZW1lbnRpYS5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgoKZGVmaW5lICJIYXMgVG90YWwgSGlwIEFydGhyb3BsYXN0eSB3aXRoIDEgb3IgTW9yZSBMb3dlciBCb2R5IEZyYWN0dXJlcyI6CiAgZXhpc3RzICggIlRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIiBUSEFQcm9jZWR1cmUKICAgICAgd2l0aCAoIC8vIFtFLTEzXSBiYXNlIEZISVIuQ29uZGl0aW9uIHJldHJpZXZlIChkZWZlY3QtdHJhY2tpbmcvZW5naW5lLWlzc3Vlcy5tZCBFLTEzKQogICAgICAgIC8vIE9yaWdpbmFsOgogICAgICAgIC8vICAgKCBbQ29uZGl0aW9uRW5jb3VudGVyRGlhZ25vc2lzOiAiTG93ZXIgQm9keSBGcmFjdHVyZXMgRXhjbHVkaW5nIEFua2xlIGFuZCBGb290Il0KICAgICAgICAvLyAgICAgdW5pb24gW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJMb3dlciBCb2R5IEZyYWN0dXJlcyBFeGNsdWRpbmcgQW5rbGUgYW5kIEZvb3QiXSApCiAgICAgICAgW0ZISVIuQ29uZGl0aW9uOiAiTG93ZXIgQm9keSBGcmFjdHVyZXMgRXhjbHVkaW5nIEFua2xlIGFuZCBGb290Il0gKSBMb3dlckJvZHlGcmFjdHVyZQogICAgICAgIHN1Y2ggdGhhdCBMb3dlckJvZHlGcmFjdHVyZS5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIHN0YXJ0cyA0OCBob3VycyBvciBsZXNzIG9uIG9yIGJlZm9yZSBzdGFydCBvZiBUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApCiAgICAgICAgICBhbmQgTG93ZXJCb2R5RnJhY3R1cmUuaXNWZXJpZmllZCAoICkKICApCgpkZWZpbmUgIkhhcyBQYXJ0aWFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIjoKICBleGlzdHMgKCAoICggW1Byb2NlZHVyZTogIlBhcnRpYWwgQXJ0aHJvcGxhc3R5IG9mIEhpcCJdICkuaXNQcm9jZWR1cmVQZXJmb3JtZWQgKCApICkgUGFydGlhbFRIQVByb2NlZHVyZQogICAgICB3aXRoICJUb3RhbCBIaXAgQXJ0aHJvcGxhc3R5IFByb2NlZHVyZSIgVEhBUHJvY2VkdXJlCiAgICAgICAgc3VjaCB0aGF0IFBhcnRpYWxUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIGR1cmluZyBkYXkgb2YgVEhBUHJvY2VkdXJlLnBlcmZvcm1lZC50b0ludGVydmFsICggKQogICkKCmRlZmluZSAiSGFzIFJldmlzaW9uIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIG9yIEltcGxhbnRlZCBEZXZpY2Ugb3IgUHJvc3RoZXNpcyBSZW1vdmFsIFByb2NlZHVyZSI6CiAgZXhpc3RzICggIlRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIiBUSEFQcm9jZWR1cmUKICAgICAgd2l0aCAoICggW1Byb2NlZHVyZTogIlJlbW92YWwsIFJldmlzaW9uIGFuZCBTdXBwbGVtZW50IFByb2NlZHVyZXMgb2YgdGhlIExvd2VyIEJvZHkgYW5kIFNwaW5lIl0gKS5pc1Byb2NlZHVyZVBlcmZvcm1lZCAoICkgKSBSZXZpc2lvblRIQVByb2NlZHVyZQogICAgICAgIHN1Y2ggdGhhdCBSZXZpc2lvblRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgZHVyaW5nIGRheSBvZiBUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApCiAgKQoKZGVmaW5lICJIYXMgTWFsaWduYW50IE5lb3BsYXNtIG9mIExvd2VyIGFuZCBVbnNwZWNpZmllZCBMaW1icyI6CiAgLy8gW0UtMTNdIGJhc2UgRkhJUi5Db25kaXRpb24gcmV0cmlldmUgKGRlZmVjdC10cmFja2luZy9lbmdpbmUtaXNzdWVzLm1kIEUtMTMpCiAgLy8gT3JpZ2luYWw6CiAgLy8gICBleGlzdHMgKCAoIFtDb25kaXRpb25Qcm9ibGVtc0hlYWx0aENvbmNlcm5zOiAiTWFsaWduYW50IE5lb3BsYXNtcyBvZiBMb3dlciBhbmQgVW5zcGVjaWZpZWQgTGltYnMiXQogIC8vICAgICAgIHVuaW9uIFtDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXM6ICJNYWxpZ25hbnQgTmVvcGxhc21zIG9mIExvd2VyIGFuZCBVbnNwZWNpZmllZCBMaW1icyJdICkgTWFsaWduYW50TmVvcGxhc20KICBleGlzdHMgKCAoIFtGSElSLkNvbmRpdGlvbjogIk1hbGlnbmFudCBOZW9wbGFzbXMgb2YgTG93ZXIgYW5kIFVuc3BlY2lmaWVkIExpbWJzIl0gKSBNYWxpZ25hbnROZW9wbGFzbQogICAgICB3aXRoICJUb3RhbCBIaXAgQXJ0aHJvcGxhc3R5IFByb2NlZHVyZSIgVEhBUHJvY2VkdXJlCiAgICAgICAgc3VjaCB0aGF0IE1hbGlnbmFudE5lb3BsYXNtLnByZXZhbGVuY2VJbnRlcnZhbCAoICkgb3ZlcmxhcHMgZGF5IG9mIFRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkKICAgICAgICAgIGFuZCBNYWxpZ25hbnROZW9wbGFzbS5pc1ZlcmlmaWVkICggKQogICkKCmRlZmluZSAiSGFzIE1lY2hhbmljYWwgQ29tcGxpY2F0aW9uIjoKICAvLyBbRS0xM10gYmFzZSBGSElSLkNvbmRpdGlvbiByZXRyaWV2ZSAoZGVmZWN0LXRyYWNraW5nL2VuZ2luZS1pc3N1ZXMubWQgRS0xMykKICAvLyBPcmlnaW5hbDoKICAvLyAgIGV4aXN0cyAoICggW0NvbmRpdGlvbkVuY291bnRlckRpYWdub3NpczogIk1lY2hhbmljYWwgQ29tcGxpY2F0aW9ucyBFeGNsdWRpbmcgVXBwZXIgQm9keSJdCiAgLy8gICAgICAgdW5pb24gW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJNZWNoYW5pY2FsIENvbXBsaWNhdGlvbnMgRXhjbHVkaW5nIFVwcGVyIEJvZHkiXSApIE1lY2hhbmljYWxDb21wbGljYXRpb25zCiAgZXhpc3RzICggKCBbRkhJUi5Db25kaXRpb246ICJNZWNoYW5pY2FsIENvbXBsaWNhdGlvbnMgRXhjbHVkaW5nIFVwcGVyIEJvZHkiXSApIE1lY2hhbmljYWxDb21wbGljYXRpb25zCiAgICAgIHdpdGggIlRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIiBUSEFQcm9jZWR1cmUKICAgICAgICBzdWNoIHRoYXQgTWVjaGFuaWNhbENvbXBsaWNhdGlvbnMucHJldmFsZW5jZUludGVydmFsICggKSBvdmVybGFwcyBkYXkgb2YgVEhBUHJvY2VkdXJlLnBlcmZvcm1lZC50b0ludGVydmFsICggKQogICAgICAgICAgYW5kIE1lY2hhbmljYWxDb21wbGljYXRpb25zLmlzVmVyaWZpZWQgKCApCiAgKQoKZGVmaW5lICJIYXMgTW9yZSBUaGFuIE9uZSBFbGVjdGl2ZSBQcmltYXJ5IFRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUGVyZm9ybWVkIjoKICBleGlzdHMgKCAiVG90YWwgSGlwIEFydGhyb3BsYXN0eSBQcm9jZWR1cmUiIFRIQVByb2NlZHVyZQogICAgICB3aXRoICggKCBbUHJvY2VkdXJlOiAiUHJpbWFyeSBUSEEgUHJvY2VkdXJlIl0gKS5pc1Byb2NlZHVyZVBlcmZvcm1lZCAoICkgKSBFbGVjdGl2ZVRIQVByb2NlZHVyZQogICAgICAgIHN1Y2ggdGhhdCBUSEFQcm9jZWR1cmUuaWQgIX4gRWxlY3RpdmVUSEFQcm9jZWR1cmUuaWQKICAgICAgICAgIGFuZCBzdGFydCBvZiBFbGVjdGl2ZVRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgZHVyaW5nIGRheSBvZiBJbnRlcnZhbFsoIHN0YXJ0IG9mIFRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgKSAtIDEgeWVhciwgKCBzdGFydCBvZiBUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkgKyAxIHllYXJdCiAgKQoKZGVmaW5lICJEZWF0aCBXaXRoaW4gMzAwIERheXMgb2YgdGhlIFRIQSBQcm9jZWR1cmUiOgogIGV4aXN0cyAiVG90YWwgSGlwIEFydGhyb3BsYXN0eSBQcm9jZWR1cmUiIFRIQVByb2NlZHVyZQogICAgd2hlcmUgZGF0ZSBmcm9tIFBhdGllbnQuZGVjZWFzZWQgZHVyaW5nIGRheSBvZiBJbnRlcnZhbFtkYXRlIGZyb20gc3RhcnQgb2YgVEhBUHJvY2VkdXJlLnBlcmZvcm1lZC50b0ludGVydmFsICggKSwgZGF0ZSBmcm9tIHN0YXJ0IG9mIFRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgKyAzMDAgZGF5c10KCmRlZmluZSAiTnVtZXJhdG9yIjoKICAoICJIYXMgVEhBIHdpdGggSW5pdGlhbCBhbmQgRm9sbG93IFVwIEhPT1MgQXNzZXNzbWVudHMiICkKICAgIG9yICggIkhhcyBUSEEgd2l0aCBJbml0aWFsIGFuZCBGb2xsb3cgVXAgSE9PU0pyIEFzc2Vzc21lbnRzIiApCiAgICBvciAoICJIYXMgVEhBIHdpdGggSW5pdGlhbCBhbmQgRm9sbG93IFVwIFBST01JUzEwIEFzc2Vzc21lbnRzIiApCiAgICBvciAoICJIYXMgVEhBIHdpdGggSW5pdGlhbCBhbmQgRm9sbG93IFVwIFZSMTIgT2JsaXF1ZSBBc3Nlc3NtZW50cyIgKQogICAgb3IgKCAiSGFzIFRIQSB3aXRoIEluaXRpYWwgYW5kIEZvbGxvdyBVcCBWUjEyIE9ydGhvZ29uYWwgQXNzZXNzbWVudHMiICkKCmRlZmluZSAiSGFzIFRIQSB3aXRoIEluaXRpYWwgYW5kIEZvbGxvdyBVcCBIT09TIEFzc2Vzc21lbnRzIjoKICBleGlzdHMgKCAoICJUb3RhbCBIaXAgQXJ0aHJvcGxhc3R5IFByb2NlZHVyZSIgVEhBUHJvY2VkdXJlCiAgICAgIHJldHVybiBUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkgVG90YWxIaXAKICAgICAgd2l0aCAiRGF0ZSBIT09TIFRvdGFsIEFzc2Vzc21lbnQgQ29tcGxldGVkIiBJbml0aWFsSGlwQXNzZXNzbWVudEhPT1MKICAgICAgICBzdWNoIHRoYXQgVG90YWxIaXAgc3RhcnRzIDkwIGRheXMgb3IgbGVzcyBvbiBvciBhZnRlciBkYXkgb2YgSW5pdGlhbEhpcEFzc2Vzc21lbnRIT09TCiAgICAgIHdpdGggIkRhdGUgSE9PUyBUb3RhbCBBc3Nlc3NtZW50IENvbXBsZXRlZCIgRm9sbG93VXBIaXBBc3Nlc3NtZW50SE9PUwogICAgICAgIHN1Y2ggdGhhdCBkYXRlIGZyb20gRm9sbG93VXBIaXBBc3Nlc3NtZW50SE9PUyBkdXJpbmcgZGF5IG9mIEludGVydmFsW2RhdGUgZnJvbSBlbmQgb2YgVG90YWxIaXAgKyAzMDAgZGF5cywgZGF0ZSBmcm9tIGVuZCBvZiBUb3RhbEhpcCArIDQyNSBkYXlzXQogICkKCmRlZmluZSAiRGF0ZSBIT09TIFRvdGFsIEFzc2Vzc21lbnQgQ29tcGxldGVkIjoKICBmcm9tCiAgICAoICggW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudDogIlF1YWxpdHkgb2YgbGlmZSBzY29yZSBbSE9PU10iXSApLmlzQXNzZXNzbWVudFBlcmZvcm1lZCAoICkgKSBIT09TTGlmZVF1YWxpdHksCiAgICAoICggW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudDogIlNwb3J0LXJlY3JlYXRpb24gc2NvcmUgW0hPT1NdIl0gKS5pc0Fzc2Vzc21lbnRQZXJmb3JtZWQgKCApICkgSE9PU1Nwb3J0LAogICAgKCAoIFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJBY3Rpdml0aWVzIG9mIGRhaWx5IGxpdmluZyBzY29yZSBbSE9PU10iXSApLmlzQXNzZXNzbWVudFBlcmZvcm1lZCAoICkgKSBIT09TQWN0aXZpdHlTY29yZSwKICAgICggKCBbT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50OiAiU3ltcHRvbXMgc2NvcmUgW0hPT1NdIl0gKS5pc0Fzc2Vzc21lbnRQZXJmb3JtZWQgKCApICkgSE9PU1N5bXB0b21zLAogICAgKCAoIFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJQYWluIHNjb3JlIFtIT09TXSJdICkuaXNBc3Nlc3NtZW50UGVyZm9ybWVkICggKSApIEhPT1NQYWluCiAgICBsZXQgSE9PU0xpZmVRdWFsaXR5RGF0ZTogZGF0ZSBmcm9tIHN0YXJ0IG9mIEhPT1NMaWZlUXVhbGl0eS5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICksCiAgICBIT09TU3BvcnREYXRlOiBkYXRlIGZyb20gc3RhcnQgb2YgSE9PU1Nwb3J0LmVmZmVjdGl2ZS50b0ludGVydmFsICggKSwKICAgIEhPT1NBY3Rpdml0eVNjb3JlRGF0ZTogZGF0ZSBmcm9tIHN0YXJ0IG9mIEhPT1NBY3Rpdml0eVNjb3JlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSwKICAgIEhPT1NTeW1wdG9tc0RhdGU6IGRhdGUgZnJvbSBzdGFydCBvZiBIT09TU3ltcHRvbXMuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApLAogICAgSE9PU1BhaW5EYXRlOiBkYXRlIGZyb20gc3RhcnQgb2YgSE9PU1BhaW4uZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApCiAgICB3aGVyZSBIT09TTGlmZVF1YWxpdHlEYXRlIHNhbWUgZGF5IGFzIEhPT1NTcG9ydERhdGUKICAgICAgYW5kICggSE9PU1Nwb3J0IGFzIE9ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudCApLnZhbHVlIGlzIG5vdCBudWxsCiAgICAgIGFuZCBIT09TTGlmZVF1YWxpdHlEYXRlIHNhbWUgZGF5IGFzIEhPT1NBY3Rpdml0eVNjb3JlRGF0ZQogICAgICBhbmQgKCBIT09TQWN0aXZpdHlTY29yZSBhcyBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgKS52YWx1ZSBpcyBub3QgbnVsbAogICAgICBhbmQgSE9PU0xpZmVRdWFsaXR5RGF0ZSBzYW1lIGRheSBhcyBIT09TU3ltcHRvbXNEYXRlCiAgICAgIGFuZCAoIEhPT1NTeW1wdG9tcyBhcyBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgKS52YWx1ZSBpcyBub3QgbnVsbAogICAgICBhbmQgSE9PU0xpZmVRdWFsaXR5RGF0ZSBzYW1lIGRheSBhcyBIT09TUGFpbkRhdGUKICAgICAgYW5kICggSE9PU1BhaW4gYXMgT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50ICkudmFsdWUgaXMgbm90IG51bGwKICAgICAgYW5kICggSE9PU0xpZmVRdWFsaXR5IGFzIE9ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudCApLnZhbHVlIGlzIG5vdCBudWxsCiAgICByZXR1cm4gTWF4KHsgSE9PU0xpZmVRdWFsaXR5RGF0ZSwgSE9PU1Nwb3J0RGF0ZSwgSE9PU0FjdGl2aXR5U2NvcmVEYXRlLCBIT09TU3ltcHRvbXNEYXRlLCBIT09TUGFpbkRhdGUgfSkKCmRlZmluZSAiSGFzIFRIQSB3aXRoIEluaXRpYWwgYW5kIEZvbGxvdyBVcCBIT09TSnIgQXNzZXNzbWVudHMiOgogIGV4aXN0cyAoICggIlRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIiBUSEFQcm9jZWR1cmUKICAgICAgcmV0dXJuIFRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgKSBUb3RhbEhpcAogICAgICB3aXRoICJEYXRlIEhPT1NKciBUb3RhbCBBc3Nlc3NtZW50IENvbXBsZXRlZCIgSW5pdGlhbEhpcEFzc2Vzc21lbnQKICAgICAgICBzdWNoIHRoYXQgVG90YWxIaXAgc3RhcnRzIDkwIGRheXMgb3IgbGVzcyBvbiBvciBhZnRlciBkYXkgb2YgSW5pdGlhbEhpcEFzc2Vzc21lbnQKICAgICAgd2l0aCAiRGF0ZSBIT09TSnIgVG90YWwgQXNzZXNzbWVudCBDb21wbGV0ZWQiIEZvbGxvd1VwSGlwQXNzZXNzbWVudAogICAgICAgIHN1Y2ggdGhhdCBkYXRlIGZyb20gRm9sbG93VXBIaXBBc3Nlc3NtZW50IGR1cmluZyBkYXkgb2YgSW50ZXJ2YWxbZGF0ZSBmcm9tIGVuZCBvZiBUb3RhbEhpcCArIDMwMCBkYXlzLCBkYXRlIGZyb20gZW5kIG9mIFRvdGFsSGlwICsgNDI1IGRheXNdCiAgKQoKZGVmaW5lICJEYXRlIEhPT1NKciBUb3RhbCBBc3Nlc3NtZW50IENvbXBsZXRlZCI6CiAgKCAoICggW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudDogIlRvdGFsIGludGVydmFsIHNjb3JlIFtIT09TSlJdIl0gKS5pc0Fzc2Vzc21lbnRQZXJmb3JtZWQgKCApICkgSE9PU0pyCiAgICB3aGVyZSAoIEhPT1NKciBhcyBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgKS52YWx1ZSBpcyBub3QgbnVsbCApIERvY3VtZW50ZWRIT09TSnIKICAgIHJldHVybiBkYXRlIGZyb20gc3RhcnQgb2YgRG9jdW1lbnRlZEhPT1NKci5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICkKCmRlZmluZSAiSGFzIFRIQSB3aXRoIEluaXRpYWwgYW5kIEZvbGxvdyBVcCBQUk9NSVMxMCBBc3Nlc3NtZW50cyI6CiAgZXhpc3RzICggKCAiVG90YWwgSGlwIEFydGhyb3BsYXN0eSBQcm9jZWR1cmUiIFRIQVByb2NlZHVyZQogICAgICByZXR1cm4gVEhBUHJvY2VkdXJlLnBlcmZvcm1lZC50b0ludGVydmFsICggKSApIFRvdGFsSGlwCiAgICAgIHdpdGggIkRhdGUgUFJPTUlTMTAgVG90YWwgQXNzZXNzbWVudCBDb21wbGV0ZWQiIEluaXRpYWxIaXBBc3Nlc3NtZW50UFJPTUlTMTAKICAgICAgICBzdWNoIHRoYXQgVG90YWxIaXAgc3RhcnRzIDkwIGRheXMgb3IgbGVzcyBvbiBvciBhZnRlciBkYXkgb2YgSW5pdGlhbEhpcEFzc2Vzc21lbnRQUk9NSVMxMAogICAgICB3aXRoICJEYXRlIFBST01JUzEwIFRvdGFsIEFzc2Vzc21lbnQgQ29tcGxldGVkIiBGb2xsb3dVcEhpcEFzc2Vzc21lbnRQUk9NSVMxMAogICAgICAgIHN1Y2ggdGhhdCBkYXRlIGZyb20gRm9sbG93VXBIaXBBc3Nlc3NtZW50UFJPTUlTMTAgZHVyaW5nIGRheSBvZiBJbnRlcnZhbFtkYXRlIGZyb20gZW5kIG9mIFRvdGFsSGlwICsgMzAwIGRheXMsIGRhdGUgZnJvbSBlbmQgb2YgVG90YWxIaXAgKyA0MjUgZGF5c10KICApCgpkZWZpbmUgIkRhdGUgUFJPTUlTMTAgVG90YWwgQXNzZXNzbWVudCBDb21wbGV0ZWQiOgogIGZyb20KICAgICggKCBbT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50OiAiUFJPTUlTLTEwIEdsb2JhbCBNZW50YWwgSGVhbHRoIChHTUgpIHNjb3JlIFQtc2NvcmUiXSApLmlzQXNzZXNzbWVudFBlcmZvcm1lZCAoICkgKSBQUk9NSVMxME1lbnRhbFNjb3JlLAogICAgKCAoIFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJQUk9NSVMtMTAgR2xvYmFsIFBoeXNpY2FsIEhlYWx0aCAoR1BIKSBzY29yZSBULXNjb3JlIl0gKS5pc0Fzc2Vzc21lbnRQZXJmb3JtZWQgKCApICkgUFJPTUlTMTBQaHlzaWNhbFNjb3JlCiAgICBsZXQgUFJPTUlTMTBNZW50YWxTY29yZURhdGU6IGRhdGUgZnJvbSBzdGFydCBvZiBQUk9NSVMxME1lbnRhbFNjb3JlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSwKICAgIFBST01JUzEwUGh5c2ljYWxTY29yZURhdGU6IGRhdGUgZnJvbSBzdGFydCBvZiBQUk9NSVMxMFBoeXNpY2FsU2NvcmUuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApCiAgICB3aGVyZSBQUk9NSVMxME1lbnRhbFNjb3JlRGF0ZSBzYW1lIGRheSBhcyBQUk9NSVMxMFBoeXNpY2FsU2NvcmVEYXRlCiAgICAgIGFuZCAoIFBST01JUzEwUGh5c2ljYWxTY29yZSBhcyBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgKS52YWx1ZSBpcyBub3QgbnVsbAogICAgICBhbmQgKCBQUk9NSVMxME1lbnRhbFNjb3JlIGFzIE9ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudCApLnZhbHVlIGlzIG5vdCBudWxsCiAgICByZXR1cm4gTWF4KHsgUFJPTUlTMTBNZW50YWxTY29yZURhdGUsIFBST01JUzEwUGh5c2ljYWxTY29yZURhdGUgfSkKCmRlZmluZSAiSGFzIFRIQSB3aXRoIEluaXRpYWwgYW5kIEZvbGxvdyBVcCBWUjEyIE9ibGlxdWUgQXNzZXNzbWVudHMiOgogIGV4aXN0cyAoICggIlRvdGFsIEhpcCBBcnRocm9wbGFzdHkgUHJvY2VkdXJlIiBUSEFQcm9jZWR1cmUKICAgICAgcmV0dXJuIFRIQVByb2NlZHVyZS5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgKSBUb3RhbEhpcAogICAgICB3aXRoICJEYXRlIFZSMTIgT2JsaXF1ZSBUb3RhbCBBc3Nlc3NtZW50IENvbXBsZXRlZCIgSW5pdGlhbEhpcEFzc2Vzc21lbnRPYmxpcXVlCiAgICAgICAgc3VjaCB0aGF0IFRvdGFsSGlwIHN0YXJ0cyA5MCBkYXlzIG9yIGxlc3Mgb24gb3IgYWZ0ZXIgZGF5IG9mIEluaXRpYWxIaXBBc3Nlc3NtZW50T2JsaXF1ZQogICAgICB3aXRoICJEYXRlIFZSMTIgT2JsaXF1ZSBUb3RhbCBBc3Nlc3NtZW50IENvbXBsZXRlZCIgRm9sbG93VXBIaXBBc3Nlc3NtZW50T2JsaXF1ZQogICAgICAgIHN1Y2ggdGhhdCBkYXRlIGZyb20gRm9sbG93VXBIaXBBc3Nlc3NtZW50T2JsaXF1ZSBkdXJpbmcgZGF5IG9mIEludGVydmFsW2RhdGUgZnJvbSBlbmQgb2YgVG90YWxIaXAgKyAzMDAgZGF5cywgZGF0ZSBmcm9tIGVuZCBvZiBUb3RhbEhpcCArIDQyNSBkYXlzXQogICkKCmRlZmluZSAiRGF0ZSBWUjEyIE9ibGlxdWUgVG90YWwgQXNzZXNzbWVudCBDb21wbGV0ZWQiOgogIGZyb20KICAgICggKCBbT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50OiAiVlItMTIgTWVudGFsIGNvbXBvbmVudCBzdW1tYXJ5IChNQ1MpIHNjb3JlIC0gb2JsaXF1ZSBtZXRob2QgVC1zY29yZSJdICkuaXNBc3Nlc3NtZW50UGVyZm9ybWVkICggKSApIFZSMTJNZW50YWxBc3Nlc3NtZW50LAogICAgKCAoIFtPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQ6ICJWUi0xMiBQaHlzaWNhbCBjb21wb25lbnQgc3VtbWFyeSAoUENTKSBzY29yZSAtIG9ibGlxdWUgbWV0aG9kIFQtc2NvcmUiXSApLmlzQXNzZXNzbWVudFBlcmZvcm1lZCAoICkgKSBWUjEyUGh5c2ljYWxBc3Nlc3NtZW50CiAgICBsZXQgVlIxMk1lbnRhbEFzc2Vzc21lbnREYXRlOiBkYXRlIGZyb20gc3RhcnQgb2YgVlIxMk1lbnRhbEFzc2Vzc21lbnQuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApLAogICAgVlIxMlBoeXNpY2FsQXNzZXNzbWVudERhdGU6IGRhdGUgZnJvbSBzdGFydCBvZiBWUjEyUGh5c2ljYWxBc3Nlc3NtZW50LmVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICAgd2hlcmUgVlIxMk1lbnRhbEFzc2Vzc21lbnREYXRlIHNhbWUgZGF5IGFzIFZSMTJQaHlzaWNhbEFzc2Vzc21lbnREYXRlCiAgICAgIGFuZCAoIFZSMTJNZW50YWxBc3Nlc3NtZW50IGFzIE9ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudCApLnZhbHVlIGlzIG5vdCBudWxsCiAgICAgIGFuZCAoIFZSMTJQaHlzaWNhbEFzc2Vzc21lbnQgYXMgT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50ICkudmFsdWUgaXMgbm90IG51bGwKICAgIHJldHVybiBNYXgoeyBWUjEyTWVudGFsQXNzZXNzbWVudERhdGUsIFZSMTJQaHlzaWNhbEFzc2Vzc21lbnREYXRlIH0pCgpkZWZpbmUgIkhhcyBUSEEgd2l0aCBJbml0aWFsIGFuZCBGb2xsb3cgVXAgVlIxMiBPcnRob2dvbmFsIEFzc2Vzc21lbnRzIjoKICBleGlzdHMgKCAoICJUb3RhbCBIaXAgQXJ0aHJvcGxhc3R5IFByb2NlZHVyZSIgVEhBUHJvY2VkdXJlCiAgICAgIHJldHVybiBUSEFQcm9jZWR1cmUucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApICkgVG90YWxIaXAKICAgICAgd2l0aCAiRGF0ZSBWUjEyIE9ydGhvZ29uYWwgVG90YWwgQXNzZXNzbWVudCBDb21wbGV0ZWQiIEluaXRpYWxIaXBBc3Nlc3NtZW50T3J0aG9nb25hbAogICAgICAgIHN1Y2ggdGhhdCBUb3RhbEhpcCBzdGFydHMgOTAgZGF5cyBvciBsZXNzIG9uIG9yIGFmdGVyIGRheSBvZiBJbml0aWFsSGlwQXNzZXNzbWVudE9ydGhvZ29uYWwKICAgICAgd2l0aCAiRGF0ZSBWUjEyIE9ydGhvZ29uYWwgVG90YWwgQXNzZXNzbWVudCBDb21wbGV0ZWQiIEZvbGxvd1VwSGlwQXNzZXNzbWVudE9ydGhvZ29uYWwKICAgICAgICBzdWNoIHRoYXQgZGF0ZSBmcm9tIEZvbGxvd1VwSGlwQXNzZXNzbWVudE9ydGhvZ29uYWwgZHVyaW5nIGRheSBvZiBJbnRlcnZhbFtkYXRlIGZyb20gZW5kIG9mIFRvdGFsSGlwICsgMzAwIGRheXMsIGRhdGUgZnJvbSBlbmQgb2YgVG90YWxIaXAgKyA0MjUgZGF5c10KICApCgpkZWZpbmUgIkRhdGUgVlIxMiBPcnRob2dvbmFsIFRvdGFsIEFzc2Vzc21lbnQgQ29tcGxldGVkIjoKICBmcm9tCiAgICAoICggW09ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudDogIlZSLTEyIE1lbnRhbCBjb21wb25lbnQgc3VtbWFyeSAoTUNTKSBzY29yZSAtIG9ydGhvZ29uYWwgbWV0aG9kIFQtc2NvcmUiXSApLmlzQXNzZXNzbWVudFBlcmZvcm1lZCAoICkgKSBWUjEyTWVudGFsQXNzZXNzbWVudCwKICAgICggKCBbT2JzZXJ2YXRpb25TY3JlZW5pbmdBc3Nlc3NtZW50OiAiVlItMTIgUGh5c2ljYWwgY29tcG9uZW50IHN1bW1hcnkgKFBDUykgc2NvcmUgLSBvcnRob2dvbmFsIG1ldGhvZCBULXNjb3JlIl0gKS5pc0Fzc2Vzc21lbnRQZXJmb3JtZWQgKCApICkgVlIxMlBoeXNpY2FsQXNzZXNzbWVudAogICAgbGV0IFZSMTJNZW50YWxBc3Nlc3NtZW50RGF0ZTogZGF0ZSBmcm9tIHN0YXJ0IG9mIFZSMTJNZW50YWxBc3Nlc3NtZW50LmVmZmVjdGl2ZS50b0ludGVydmFsICggKSwKICAgIFZSMTJQaHlzaWNhbEFzc2Vzc21lbnREYXRlOiBkYXRlIGZyb20gc3RhcnQgb2YgVlIxMlBoeXNpY2FsQXNzZXNzbWVudC5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICkKICAgIHdoZXJlIFZSMTJNZW50YWxBc3Nlc3NtZW50RGF0ZSBzYW1lIGRheSBhcyBWUjEyUGh5c2ljYWxBc3Nlc3NtZW50RGF0ZQogICAgICBhbmQgKCBWUjEyTWVudGFsQXNzZXNzbWVudCBhcyBPYnNlcnZhdGlvblNjcmVlbmluZ0Fzc2Vzc21lbnQgKS52YWx1ZSBpcyBub3QgbnVsbAogICAgICBhbmQgKCBWUjEyUGh5c2ljYWxBc3Nlc3NtZW50IGFzIE9ic2VydmF0aW9uU2NyZWVuaW5nQXNzZXNzbWVudCApLnZhbHVlIGlzIG5vdCBudWxsCiAgICByZXR1cm4gTWF4KHsgVlIxMk1lbnRhbEFzc2Vzc21lbnREYXRlLCBWUjEyUGh5c2ljYWxBc3Nlc3NtZW50RGF0ZSB9KQogICAgCi8qCkBub3RlOiBXaGVuIHBvc3NpYmxlLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBtaWdyYXRlZCB0byBRSUNvcmVDb21tb24uCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBDb25kaXRpb24gaGFzIGEgdmVyaWZpY2F0aW9uIHN0YXR1cyBvZiAiY29uZmlybWVkIiwgInVuY29uZmlybWVkIiwgInByb3Zpc2lvbmFsIiwgb3IgImRpZmZlcmVudGlhbCIKKi8KCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIGlzVmVyaWZpZWQoY29uZGl0aW9uIENob2ljZTxDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXMsIENvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM+KToKICBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIGlzIG5vdCBudWxsIGltcGxpZXMgKCBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJjb25maXJtZWQiCiAgICAgIG9yIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuInVuY29uZmlybWVkIgogICAgICBvciBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJwcm92aXNpb25hbCIKICAgICAgb3IgY29uZGl0aW9uLnZlcmlmaWNhdGlvblN0YXR1cyB+IFN0YXR1cy4iZGlmZmVyZW50aWFsIgogICk="/>
    <url
         value="https://madie.cms.gov/Library-CMS56FHIRFuncStatHipReplacement.cql"/>
  </content>
</Library>