US Situational Awareness Framework for Reporting (US SAFR) Implementation Guide
1.0.0 - STU 1 ballot United States of America flag

US Situational Awareness Framework for Reporting (US SAFR) Implementation Guide, published by HL7 International / Public Health. This guide is not an authorized publication; it is the continuous build for version 1.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/us-safr/ and changes regularly. See the Directory of published versions

: HRDMeasure - JSON Representation

Page standards status: Trial-use Maturity Level: 1

Raw json | Download

{
  "resourceType" : "Library",
  "id" : "HRDMeasure",
  "text" : {
    "status" : "extensions",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n<div>\n    <table class=\"grid dict\">\n        \n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Id: </b></th>\n            <td style=\"padding-left: 4px;\">HRDMeasure</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Version: </b></th>\n            <td style=\"padding-left: 4px;\">1.0.0</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Url: </b></th>\n            <td style=\"padding-left: 4px;\"><a href=\"Library-HRDMeasure.html\">HRDMeasure</a></td>\n        </tr>\n        \n\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Status: </b></th>\n            <td style=\"padding-left: 4px;\">draft</td>\n        </tr>\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Type: </b></th>\n            <td style=\"padding-left: 4px;\">\n                \n                    \n                        \n                        <p style=\"margin-bottom: 5px;\">\n                            <b>system: </b> <span><a href=\"http://terminology.hl7.org/7.0.1/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a></span>\n                        </p>\n                        \n                        \n                        <p style=\"margin-bottom: 5px;\">\n                            <b>code: </b> <span>logic-library</span>\n                        </p>\n                        \n                        \n                    \n                \n                \n            </td>\n        </tr>\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Date: </b></th>\n            <td style=\"padding-left: 4px;\">2025-12-23 19:38:58+0000</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Publisher: </b></th>\n            <td style=\"padding-left: 4px;\">HL7 International / Public Health</td>\n        </tr>\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Jurisdiction: </b></th>\n            <td style=\"padding-left: 4px;\">US</td>\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        <tr>\n          <td colspan=\"2\">\n            <table>\n              <tr><th><a id=\"cql-content\"><b>Content: </b></a> text/cql</th></tr>\n              <tr><td><pre><code class=\"language-cql\">library HRDMeasure version '1.0.0'\r\n\r\nusing FHIR version '4.0.1'\r\n\r\ninclude FHIRHelpers version '4.0.1' called FHIRHelpers\r\n\r\n// Terminology definitions\r\ncodesystem &quot;SNOMEDCT&quot;: 'http://snomed.info/sct'\r\ncodesystem &quot;LocationPhysicalType&quot;: 'http://terminology.hl7.org/CodeSystem/location-physical-type'\r\ncodesystem &quot;HealthcareCapacity&quot;: 'http://hl7.org/fhir/us/safr/CodeSystem/us-safr-bed-capacity-example-codes'\r\ncodesystem &quot;Observation Category&quot;: 'http://terminology.hl7.org/CodeSystem/observation-category'\r\n\r\n// Value sets\r\nvalueset &quot;COVID_19 (Tests for SARS_CoV_2 Nucleic Acid)&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1146.1142'\r\nvalueset &quot;COVID_19 (Tests for SARS_CoV_2 Antigen)&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1146.1158'\r\nvalueset &quot;Influenza (Tests for influenza A or B virus Nucleic Acid)&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1146.336'\r\nvalueset &quot;Influenza (Tests for influenza A or B virus Antigen)&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1146.337'\r\nvalueset &quot;RSV (Tests for RSV Antigen)&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1146.1311'\r\nvalueset &quot;RSV (Tests for RSV Nucleic Acid)&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1146.1312'\r\n\r\n//Codes\r\ncode &quot;Bed&quot;: 'bd' from &quot;LocationPhysicalType&quot; display 'Bed'\r\n\r\ncode &quot;HOSP&quot;: 'HOSP' from &quot;HealthcareCapacity&quot; display 'Hospital'\r\ncode &quot;IRF&quot;: 'IRF' from &quot;HealthcareCapacity&quot; display 'Inpatient Rehabilitation'\r\ncode &quot;IPF&quot;: 'IPF' from &quot;HealthcareCapacity&quot; display 'Inpatient Psychiatric'\r\ncode &quot;CHLD&quot;: 'CHLD' from &quot;HealthcareCapacity&quot; display 'Children\\'s or Pediatric'\r\ncode &quot;OTH&quot;: 'OTH' from &quot;HealthcareCapacity&quot; display 'Other facility-within-facility or subunit'\r\n\r\ncode &quot;laboratory&quot;: 'laboratory' from &quot;Observation Category&quot; display 'Laboratory'\r\n\r\ncode &quot;detected&quot;: '260373001' from &quot;SNOMEDCT&quot; display 'Detected'\r\ncode &quot;N95 mask&quot;: '409533008' from &quot;SNOMEDCT&quot; display 'Air-purifying respirator (physical object)'\r\ncode &quot;Surgical mask&quot;: '409528009' from &quot;SNOMEDCT&quot; display 'Surgical face mask (physical object)'\r\ncode &quot;Face shield&quot;: '706724001' from &quot;SNOMEDCT&quot; display 'Face shield (physical object)'\r\ncode &quot;Patient gown&quot;: '1141676007' from &quot;SNOMEDCT&quot; display 'Patient gown (physical object)'\r\ncode &quot;Surgical glove&quot;: '462245005' from &quot;SNOMEDCT&quot; display 'Nitrile surgical glove, powdered (physical object)'\r\n\r\n// Parameter for measurement period\r\nparameter &quot;Measurement Period&quot; Interval&lt;Date&gt;\r\n  default Interval[@2025-03-01, @2025-03-07]\r\n\r\ncontext Location\r\n\r\n//Initial Populations\r\ndefine &quot;Inpatient Beds Initial Population&quot;:\r\n  IsBedLocation\r\n  and LocationIsHOSP\r\n  and (\r\n    LocationIsIPF\r\n    or LocationIsIRF\r\n    or LocationIsCHLD\r\n  )\r\n\r\ndefine &quot;Occupied Inpatient Beds Initial Population&quot;:\r\n  &quot;Inpatient Beds Initial Population&quot;\r\n  and EncounterCheck\r\n  \r\ndefine &quot;Adult Inpatient Beds Initial Population&quot;:\r\n  IsBedLocation\r\n  and LocationIsHOSP\r\n  and (\r\n    LocationIsIPF\r\n    or LocationIsIRF\r\n  )\r\n  and not LocationIsCHLD\r\n\r\ndefine &quot;Occupied Adult Inpatient Beds Initial Population&quot;:\r\n  &quot;Adult Inpatient Beds Initial Population&quot;\r\n  and EncounterCheck\r\n\r\ndefine &quot;Pediatric Inpatient Beds Initial Population&quot;:\r\n  IsBedLocation\r\n  and LocationIsHOSP\r\n  and LocationIsCHLD\r\n  and not (\r\n    LocationIsIPF\r\n    or LocationIsIRF\r\n  )\r\n\r\ndefine &quot;Occupied Pediatric Inpatient Beds Initial Population&quot;:\r\n  &quot;Pediatric Inpatient Beds Initial Population&quot;\r\n  and EncounterCheck\r\n\r\ndefine &quot;ICU Beds Initial Population&quot;:\r\n  IsBedLocation\r\n  and (\r\n    LocationIsHOSP\r\n    or LocationIsOTH\r\n  )\r\n\r\ndefine &quot;Occupied ICU Beds Initial Population&quot;:\r\n  &quot;ICU Beds Initial Population&quot;\r\n  and EncounterCheck\r\n\r\ndefine &quot;Adult ICU Beds Initial Population&quot;:\r\n  IsBedLocation\r\n  and (\r\n    LocationIsHOSP\r\n    or LocationIsOTH\r\n  )\r\n  and not LocationIsCHLD\r\n\r\ndefine &quot;Occupied Adult ICU Beds Initial Population&quot;:\r\n  &quot;Adult ICU Beds Initial Population&quot;\r\n  and EncounterCheck\r\n\r\ndefine &quot;Pediatric ICU Beds Initial Population&quot;:\r\n  IsBedLocation\r\n  and LocationIsCHLD\r\n  and (\r\n    LocationIsHOSP\r\n    or LocationIsOTH\r\n  )\r\n\r\ndefine &quot;Occupied Pediatric ICU Beds Initial Population&quot;:\r\n  &quot;Pediatric ICU Beds Initial Population&quot;\r\n  and EncounterCheck\r\n\r\n//Stratifiers\r\n//COVID_19\r\ndefine &quot;Adult Inpatient COVID_19 Patients Stratifier&quot;:\r\n  if &quot;Occupied Adult Inpatient Beds Initial Population&quot; then\r\n    &quot;Count Confirmed COVID_19 Patients in Bed Location&quot;\r\n  else 0\r\n\r\ndefine &quot;Pediatric Inpatient COVID_19 Patients Stratifier&quot;:\r\n  if &quot;Occupied Pediatric Inpatient Beds Initial Population&quot; then\r\n    &quot;Count Confirmed COVID_19 Patients in Bed Location&quot;\r\n  else 0\r\n\r\ndefine &quot;Adult ICU COVID_19 Patients Stratifier&quot;:\r\n  if &quot;Occupied Adult ICU Beds Initial Population&quot; then\r\n    &quot;Count Confirmed COVID_19 Patients in Bed Location&quot;\r\n  else 0\r\n\r\ndefine &quot;Pediatric ICU COVID_19 Patients Stratifier&quot;:\r\n  if &quot;Occupied Pediatric ICU Beds Initial Population&quot; then\r\n    &quot;Count Confirmed COVID_19 Patients in Bed Location&quot;\r\n  else 0\r\n\r\ndefine &quot;New Pediatric COVID_19 Patients Between 0 to 4 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted COVID_19 Patient IDs&quot; , 0, 4 )\r\n  )\r\n\r\ndefine &quot;New Pediatric COVID_19 Patients Between 5 to 17 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted COVID_19 Patient IDs&quot;, 5, 17 )\r\n  )\r\n\r\ndefine &quot;New Adult COVID_19 Patients Between 18 to 49 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted COVID_19 Patient IDs&quot;, 18, 49 )\r\n  )\r\n\r\ndefine &quot;New Adult COVID_19 Patients Between 50 to 64 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted COVID_19 Patient IDs&quot;, 50, 64 )\r\n  )\r\n\r\ndefine &quot;New Adult COVID_19 Patients Between 65 to 74 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted COVID_19 Patient IDs&quot;, 65, 74 )\r\n  )\r\n\r\ndefine &quot;New Adult COVID_19 Patients 75 and Above Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Above Specified Age&quot;( &quot;Newly Admitted COVID_19 Patient IDs&quot;, 75 )\r\n  )\r\n\r\ndefine &quot;New COVID_19 Patients with Unknown Age Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location and Unknown Age&quot;( &quot;Newly Admitted COVID_19 Patient IDs&quot; )\r\n  )\r\n  \r\n//Influenza\r\ndefine &quot;Adult Inpatient Influenza Patients Stratifier&quot;:\r\n  if &quot;Occupied Adult Inpatient Beds Initial Population&quot; then\r\n    &quot;Count Confirmed Influenza Patients in Bed Location&quot;\r\n  else 0\r\n\r\ndefine &quot;Pediatric Inpatient Influenza Patients Stratifier&quot;:\r\n  if &quot;Occupied Pediatric Inpatient Beds Initial Population&quot; then\r\n    &quot;Count Confirmed Influenza Patients in Bed Location&quot;\r\n  else 0\r\n\r\ndefine &quot;Adult ICU Influenza Patients Stratifier&quot;:\r\n  if &quot;Occupied Adult ICU Beds Initial Population&quot; then\r\n    &quot;Count Confirmed Influenza Patients in Bed Location&quot;\r\n  else 0\r\n\r\ndefine &quot;Pediatric ICU Influenza Patients Stratifier&quot;:\r\n  if &quot;Occupied Pediatric ICU Beds Initial Population&quot; then\r\n    &quot;Count Confirmed Influenza Patients in Bed Location&quot;\r\n  else 0\r\n\r\ndefine &quot;New Pediatric Influenza Patients Between 0 to 4 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted Influenza Patient IDs&quot; , 0, 4 )\r\n  )\r\n\r\ndefine &quot;New Pediatric Influenza Patients Between 5 to 17 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted Influenza Patient IDs&quot;, 5, 17 )\r\n  )\r\n\r\ndefine &quot;New Adult Influenza Patients Between 18 to 49 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted Influenza Patient IDs&quot;, 18, 49 )\r\n  )\r\n\r\ndefine &quot;New Adult Influenza Patients Between 50 to 64 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted Influenza Patient IDs&quot;, 50, 64 )\r\n  )\r\n\r\ndefine &quot;New Adult Influenza Patients Between 65 to 74 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted Influenza Patient IDs&quot;, 65, 74 )\r\n  )\r\n\r\ndefine &quot;New Adult Influenza Patients 75 and Above Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Above Specified Age&quot;( &quot;Newly Admitted Influenza Patient IDs&quot;, 75 )\r\n  )\r\n\r\ndefine &quot;New Influenza Patients with Unknown Age Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location and Unknown Age&quot;( &quot;Newly Admitted Influenza Patient IDs&quot; )\r\n  )\r\n\r\n//RSV\r\ndefine &quot;Adult Inpatient RSV Patients Stratifier&quot;:\r\n  if &quot;Occupied Adult Inpatient Beds Initial Population&quot; then\r\n    &quot;Count Confirmed RSV Patients in Bed Location&quot;\r\n  else 0\r\n\r\ndefine &quot;Pediatric Inpatient RSV Patients Stratifier&quot;:\r\n  if &quot;Occupied Pediatric Inpatient Beds Initial Population&quot; then\r\n    &quot;Count Confirmed RSV Patients in Bed Location&quot;\r\n  else 0\r\n\r\ndefine &quot;Adult ICU RSV Patients Stratifier&quot;:\r\n  if &quot;Occupied Adult ICU Beds Initial Population&quot; then\r\n    &quot;Count Confirmed RSV Patients in Bed Location&quot;\r\n  else 0\r\n\r\ndefine &quot;Pediatric ICU RSV Patients Stratifier&quot;:\r\n  if &quot;Occupied Pediatric ICU Beds Initial Population&quot; then\r\n    &quot;Count Confirmed RSV Patients in Bed Location&quot;\r\n  else 0\r\n\r\ndefine &quot;New Pediatric RSV Patients Between 0 to 4 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted RSV Patient IDs&quot; , 0, 4 )\r\n  )\r\n\r\ndefine &quot;New Pediatric RSV Patients Between 5 to 17 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted RSV Patient IDs&quot;, 5, 17 )\r\n  )\r\n\r\ndefine &quot;New Adult RSV Patients Between 18 to 49 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted RSV Patient IDs&quot;, 18, 49 )\r\n  )\r\n\r\ndefine &quot;New Adult RSV Patients Between 50 to 64 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted RSV Patient IDs&quot;, 50, 64 )\r\n  )\r\n\r\ndefine &quot;New Adult RSV Patients Between 65 to 74 Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( &quot;Newly Admitted RSV Patient IDs&quot;, 65, 74 )\r\n  )\r\n\r\ndefine &quot;New Adult RSV Patients 75 and Above Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location Above Specified Age&quot;( &quot;Newly Admitted RSV Patient IDs&quot;, 75 )\r\n  )\r\n\r\ndefine &quot;New RSV Patients with Unknown Age Stratifier&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs in Bed Location and Unknown Age&quot;( &quot;Newly Admitted RSV Patient IDs&quot; )\r\n  )\r\n\r\n//Devices (Supply is divided by average used per day (estimated))\r\ndefine &quot;N95 Mask Supply in Days Stratifier&quot;:\r\n  Floor( Count(\r\n    &quot;Devices&quot; Devices\r\n    where Devices.type ~ &quot;N95 mask&quot;\r\n  ) / 10 )\r\n\r\ndefine &quot;N95 Mask 3 Day Supply Initial Population&quot;:\r\n  &quot;N95 Mask Supply in Days Stratifier&quot; &gt; 3\r\n\r\ndefine &quot;OR Surgical Mask Supply in Days Stratifier&quot;:\r\n  Floor( Count(\r\n    &quot;Devices&quot; Devices\r\n    where Devices.type ~ &quot;Surgical mask&quot;\r\n  ) / 10 )\r\n\r\ndefine &quot;OR Surgical Mask 3 Day Supply Initial Population&quot;:\r\n  &quot;OR Surgical Mask Supply in Days Stratifier&quot; &gt; 3\r\n\r\ndefine &quot;Face Shield Supply in Days Stratifier&quot;:\r\n  Floor( Count(\r\n    &quot;Devices&quot; Devices\r\n    where Devices.type ~ &quot;Face shield&quot;\r\n  ) / 10 )\r\n\r\ndefine &quot;Face Shield 3 Day Supply Initial Population&quot;:\r\n  &quot;Face Shield Supply in Days Stratifier&quot; &gt; 3\r\n\r\ndefine &quot;Gown Supply in Days Stratifier&quot;:\r\n  Floor( Count(\r\n    &quot;Devices&quot; Devices\r\n    where Devices.type ~ &quot;Patient gown&quot;\r\n  ) / 5 )\r\n\r\ndefine &quot;Gown 3 Day Supply Initial Population&quot;:\r\n  &quot;Gown Supply in Days Stratifier&quot; &gt; 3\r\n\r\ndefine &quot;Glove Supply in Days Stratifier&quot;:\r\n  Floor( Count(\r\n    &quot;Devices&quot; Devices\r\n    where Devices.type ~ &quot;Surgical glove&quot;\r\n  ) / 15 )\r\n\r\ndefine &quot;Glove 3 Day Supply Initial Population&quot;:\r\n  &quot;Glove Supply in Days Stratifier&quot; &gt; 3\r\n\r\n//Functions and Helpers\r\ndefine &quot;COVID_19 Observations&quot;:\r\n  [Observation: &quot;COVID_19 (Tests for SARS_CoV_2 Nucleic Acid)&quot;] \r\n    union [Observation: &quot;COVID_19 (Tests for SARS_CoV_2 Antigen)&quot;]\r\n\r\ndefine &quot;Newly Admitted COVID_19 Patient IDs&quot;:\r\n  &quot;Get Confirmed Patient IDs&quot;( &quot;Newly Admitted Encounters&quot;, &quot;COVID_19 Observations&quot; )\r\n\r\ndefine &quot;Count Confirmed COVID_19 Patients in Bed Location&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs&quot;( &quot;Encounters&quot;, &quot;COVID_19 Observations&quot; )\r\n  )\r\n\r\ndefine &quot;Influenza Observations&quot;:\r\n  [Observation: &quot;Influenza (Tests for influenza A or B virus Nucleic Acid)&quot;] \r\n    union [Observation: &quot;Influenza (Tests for influenza A or B virus Antigen)&quot;]\r\n\r\ndefine &quot;Newly Admitted Influenza Patient IDs&quot;:\r\n  &quot;Get Confirmed Patient IDs&quot;( &quot;Newly Admitted Encounters&quot;, &quot;Influenza Observations&quot; )\r\n\r\ndefine &quot;Count Confirmed Influenza Patients in Bed Location&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs&quot;( &quot;Encounters&quot;, &quot;Influenza Observations&quot; )\r\n  )\r\n\r\ndefine &quot;RSV Observations&quot;:\r\n  [Observation: &quot;RSV (Tests for RSV Antigen)&quot;] \r\n    union [Observation: &quot;RSV (Tests for RSV Nucleic Acid)&quot;]\r\n\r\ndefine &quot;Newly Admitted RSV Patient IDs&quot;:\r\n  &quot;Get Confirmed Patient IDs&quot;( &quot;Newly Admitted Encounters&quot;, &quot;RSV Observations&quot; )\r\n\r\ndefine &quot;Count Confirmed RSV Patients in Bed Location&quot;:\r\n  Count(\r\n    &quot;Get Confirmed Patient IDs&quot;( &quot;Encounters&quot;, &quot;RSV Observations&quot; )\r\n  )\r\n\r\ndefine &quot;IsBedLocation&quot;:\r\n  Location.physicalType ~ &quot;Bed&quot;\r\n\r\ndefine &quot;Encounters&quot;:\r\n  [Encounter]\r\n\r\ndefine &quot;Devices&quot;:\r\n  [Device]\r\n\r\ndefine &quot;Newly Admitted Encounters&quot;:\r\n  &quot;Encounters&quot; Encounters\r\n  where Encounters.status in { 'in-progress', 'arrived', 'triaged' }\r\n\r\ndefine &quot;Patients&quot;:\r\n  [Patient]\r\n\r\ndefine function &quot;Get Confirmed Patient IDs&quot;( Encounters List&lt;FHIR.Encounter&gt;, Observations List&lt;FHIR.Observation&gt; ):\r\n  Distinct(\r\n    Encounters Encounter\r\n    where exists(\r\n      Observations Labs\r\n      where exists(\r\n        Labs.category category\r\n        where category ~ &quot;laboratory&quot;\r\n      )\r\n      and Encounter.subject = Labs.subject\r\n      and Labs.value ~ &quot;detected&quot;\r\n      and &quot;Normalize Interval&quot;( Labs.effective ) overlaps Encounter.period\r\n    )\r\n    return Encounter.subject\r\n  )\r\n\r\ndefine function &quot;Get Confirmed Patient IDs in Bed Location Between Specified Ages&quot;( PatientIDs List&lt;FHIR.Reference&gt;, low System.Integer, high System.Integer ):\r\n  PatientIDs PatientID\r\n  where exists(\r\n    &quot;Patients&quot; Patients\r\n    let PatientAge: CalculateAgeInYearsAt( Patients.birthDate, start of &quot;Measurement Period&quot; )\r\n    where Patients.id = GetId( PatientID.reference )\r\n    and PatientAge &gt;= low\r\n    and PatientAge &lt;= high\r\n  )\r\n\r\ndefine function &quot;Get Confirmed Patient IDs in Bed Location Above Specified Age&quot;( PatientIDs List&lt;FHIR.Reference&gt;, age System.Integer ):\r\n  PatientIDs PatientID\r\n  where exists(\r\n    &quot;Patients&quot; Patients\r\n    let PatientAge: CalculateAgeInYearsAt( Patients.birthDate, start of &quot;Measurement Period&quot; )\r\n    where Patients.id = GetId( PatientID.reference )\r\n    and PatientAge &gt;= age\r\n  )\r\n\r\ndefine function &quot;Get Confirmed Patient IDs in Bed Location and Unknown Age&quot;( PatientIDs List&lt;FHIR.Reference&gt; ):\r\n  PatientIDs PatientID\r\n  where exists(\r\n    &quot;Patients&quot; Patients\r\n    where Patients.id = GetId( PatientID.reference )\r\n    and Patients.birthDate = null\r\n  )\r\n\r\ndefine function &quot;GetCondition&quot;( reference Reference ):\r\n  singleton from (\r\n\t[Condition] Conditions\r\n\t\twhere Conditions.id = GetId( reference.reference )\r\n  )\r\n\r\ndefine function &quot;GetId&quot;( uri String ):\r\n  Last(Split(uri, '/'))\r\n\r\ndefine function &quot;Normalize Interval&quot;( choice Choice&lt;FHIR.dateTime, FHIR.Period, FHIR.Timing, FHIR.instant&gt; ):\r\n  case\r\n\t  when choice is FHIR.dateTime then\r\n    \tInterval[FHIRHelpers.ToDateTime(choice as FHIR.dateTime), FHIRHelpers.ToDateTime(choice as FHIR.dateTime)]\r\n\t\twhen choice is FHIR.Period then\r\n  \t\tFHIRHelpers.ToInterval(choice as FHIR.Period)\r\n\t\twhen choice is FHIR.instant then\r\n\t\t\tInterval[FHIRHelpers.ToDateTime(choice as FHIR.instant), FHIRHelpers.ToDateTime(choice as FHIR.instant)]\r\n\t\twhen choice is FHIR.Timing then\r\n\t\t  Message(null as Interval&lt;DateTime&gt;, true, '1', 'Error', 'Cannot compute a single interval from a Timing type')\r\n\t\telse\r\n\t\t\tnull as Interval&lt;DateTime&gt;\r\n\tend\r\n\r\ndefine &quot;EncounterCheck&quot;:\r\n  exists(&quot;Encounters&quot; Encounters\r\n  where Encounters.period overlaps &quot;Measurement Period&quot;)\r\n\r\ndefine &quot;LocationIsHOSP&quot;:\r\n  exists(\r\n    Location.type types\r\n    where types ~ &quot;HOSP&quot;\r\n  )\r\n\r\ndefine &quot;LocationIsIPF&quot;:\r\n  exists(\r\n    Location.type types\r\n    where types ~ &quot;IPF&quot;\r\n  )\r\n\r\ndefine &quot;LocationIsIRF&quot;:\r\n  exists(\r\n    Location.type types\r\n    where types ~ &quot;IRF&quot;\r\n  )\r\n\r\ndefine &quot;LocationIsCHLD&quot;:\r\n  exists(\r\n    Location.type types\r\n    where types ~ &quot;CHLD&quot;\r\n  )\r\n\r\ndefine &quot;LocationIsOTH&quot;:\r\n  exists(\r\n    Location.type types\r\n    where types ~ &quot;OTH&quot;\r\n  )</code></pre></td></tr>\n            </table>\n          </td>\n        </tr>\n        \n        \n        \n    </table>\n</div>\n</div>"
  },
  "extension" : [
    {
      "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-wg",
      "valueCode" : "pher"
    }
  ],
  "url" : "http://hl7.org/fhir/us/safr/Library/HRDMeasure",
  "version" : "1.0.0",
  "name" : "HRDMeasure",
  "status" : "draft",
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library"
      }
    ]
  },
  "date" : "2025-12-23T19:38:58+00:00",
  "publisher" : "HL7 International / Public Health",
  "contact" : [
    {
      "name" : "HL7 International / Public Health",
      "telecom" : [
        {
          "system" : "url",
          "value" : "http://www.hl7.org/Special/committees/pher"
        }
      ]
    }
  ],
  "jurisdiction" : [
    {
      "coding" : [
        {
          "system" : "urn:iso:std:iso:3166",
          "code" : "US",
          "display" : "United States of America"
        }
      ]
    }
  ],
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "bGlicmFyeSBIUkRNZWFzdXJlIHZlcnNpb24gJzEuMC4wJw0KDQp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJw0KDQppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJyBjYWxsZWQgRkhJUkhlbHBlcnMNCg0KLy8gVGVybWlub2xvZ3kgZGVmaW5pdGlvbnMNCmNvZGVzeXN0ZW0gIlNOT01FRENUIjogJ2h0dHA6Ly9zbm9tZWQuaW5mby9zY3QnDQpjb2Rlc3lzdGVtICJMb2NhdGlvblBoeXNpY2FsVHlwZSI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL2xvY2F0aW9uLXBoeXNpY2FsLXR5cGUnDQpjb2Rlc3lzdGVtICJIZWFsdGhjYXJlQ2FwYWNpdHkiOiAnaHR0cDovL2hsNy5vcmcvZmhpci91cy9zYWZyL0NvZGVTeXN0ZW0vdXMtc2Fmci1iZWQtY2FwYWNpdHktZXhhbXBsZS1jb2RlcycNCmNvZGVzeXN0ZW0gIk9ic2VydmF0aW9uIENhdGVnb3J5IjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vb2JzZXJ2YXRpb24tY2F0ZWdvcnknDQoNCi8vIFZhbHVlIHNldHMNCnZhbHVlc2V0ICJDT1ZJRF8xOSAoVGVzdHMgZm9yIFNBUlNfQ29WXzIgTnVjbGVpYyBBY2lkKSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExNDYuMTE0MicNCnZhbHVlc2V0ICJDT1ZJRF8xOSAoVGVzdHMgZm9yIFNBUlNfQ29WXzIgQW50aWdlbikiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzNzYyLjEuNC4xMTQ2LjExNTgnDQp2YWx1ZXNldCAiSW5mbHVlbnphIChUZXN0cyBmb3IgaW5mbHVlbnphIEEgb3IgQiB2aXJ1cyBOdWNsZWljIEFjaWQpIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTE0Ni4zMzYnDQp2YWx1ZXNldCAiSW5mbHVlbnphIChUZXN0cyBmb3IgaW5mbHVlbnphIEEgb3IgQiB2aXJ1cyBBbnRpZ2VuKSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExNDYuMzM3Jw0KdmFsdWVzZXQgIlJTViAoVGVzdHMgZm9yIFJTViBBbnRpZ2VuKSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExNDYuMTMxMScNCnZhbHVlc2V0ICJSU1YgKFRlc3RzIGZvciBSU1YgTnVjbGVpYyBBY2lkKSI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExNDYuMTMxMicNCg0KLy9Db2Rlcw0KY29kZSAiQmVkIjogJ2JkJyBmcm9tICJMb2NhdGlvblBoeXNpY2FsVHlwZSIgZGlzcGxheSAnQmVkJw0KDQpjb2RlICJIT1NQIjogJ0hPU1AnIGZyb20gIkhlYWx0aGNhcmVDYXBhY2l0eSIgZGlzcGxheSAnSG9zcGl0YWwnDQpjb2RlICJJUkYiOiAnSVJGJyBmcm9tICJIZWFsdGhjYXJlQ2FwYWNpdHkiIGRpc3BsYXkgJ0lucGF0aWVudCBSZWhhYmlsaXRhdGlvbicNCmNvZGUgIklQRiI6ICdJUEYnIGZyb20gIkhlYWx0aGNhcmVDYXBhY2l0eSIgZGlzcGxheSAnSW5wYXRpZW50IFBzeWNoaWF0cmljJw0KY29kZSAiQ0hMRCI6ICdDSExEJyBmcm9tICJIZWFsdGhjYXJlQ2FwYWNpdHkiIGRpc3BsYXkgJ0NoaWxkcmVuXCdzIG9yIFBlZGlhdHJpYycNCmNvZGUgIk9USCI6ICdPVEgnIGZyb20gIkhlYWx0aGNhcmVDYXBhY2l0eSIgZGlzcGxheSAnT3RoZXIgZmFjaWxpdHktd2l0aGluLWZhY2lsaXR5IG9yIHN1YnVuaXQnDQoNCmNvZGUgImxhYm9yYXRvcnkiOiAnbGFib3JhdG9yeScgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ0xhYm9yYXRvcnknDQoNCmNvZGUgImRldGVjdGVkIjogJzI2MDM3MzAwMScgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0RldGVjdGVkJw0KY29kZSAiTjk1IG1hc2siOiAnNDA5NTMzMDA4JyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnQWlyLXB1cmlmeWluZyByZXNwaXJhdG9yIChwaHlzaWNhbCBvYmplY3QpJw0KY29kZSAiU3VyZ2ljYWwgbWFzayI6ICc0MDk1MjgwMDknIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdTdXJnaWNhbCBmYWNlIG1hc2sgKHBoeXNpY2FsIG9iamVjdCknDQpjb2RlICJGYWNlIHNoaWVsZCI6ICc3MDY3MjQwMDEnIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdGYWNlIHNoaWVsZCAocGh5c2ljYWwgb2JqZWN0KScNCmNvZGUgIlBhdGllbnQgZ293biI6ICcxMTQxNjc2MDA3JyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnUGF0aWVudCBnb3duIChwaHlzaWNhbCBvYmplY3QpJw0KY29kZSAiU3VyZ2ljYWwgZ2xvdmUiOiAnNDYyMjQ1MDA1JyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnTml0cmlsZSBzdXJnaWNhbCBnbG92ZSwgcG93ZGVyZWQgKHBoeXNpY2FsIG9iamVjdCknDQoNCi8vIFBhcmFtZXRlciBmb3IgbWVhc3VyZW1lbnQgcGVyaW9kDQpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZT4NCiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNS0wMy0wMSwgQDIwMjUtMDMtMDddDQoNCmNvbnRleHQgTG9jYXRpb24NCg0KLy9Jbml0aWFsIFBvcHVsYXRpb25zDQpkZWZpbmUgIklucGF0aWVudCBCZWRzIEluaXRpYWwgUG9wdWxhdGlvbiI6DQogIElzQmVkTG9jYXRpb24NCiAgYW5kIExvY2F0aW9uSXNIT1NQDQogIGFuZCAoDQogICAgTG9jYXRpb25Jc0lQRg0KICAgIG9yIExvY2F0aW9uSXNJUkYNCiAgICBvciBMb2NhdGlvbklzQ0hMRA0KICApDQoNCmRlZmluZSAiT2NjdXBpZWQgSW5wYXRpZW50IEJlZHMgSW5pdGlhbCBQb3B1bGF0aW9uIjoNCiAgIklucGF0aWVudCBCZWRzIEluaXRpYWwgUG9wdWxhdGlvbiINCiAgYW5kIEVuY291bnRlckNoZWNrDQogIA0KZGVmaW5lICJBZHVsdCBJbnBhdGllbnQgQmVkcyBJbml0aWFsIFBvcHVsYXRpb24iOg0KICBJc0JlZExvY2F0aW9uDQogIGFuZCBMb2NhdGlvbklzSE9TUA0KICBhbmQgKA0KICAgIExvY2F0aW9uSXNJUEYNCiAgICBvciBMb2NhdGlvbklzSVJGDQogICkNCiAgYW5kIG5vdCBMb2NhdGlvbklzQ0hMRA0KDQpkZWZpbmUgIk9jY3VwaWVkIEFkdWx0IElucGF0aWVudCBCZWRzIEluaXRpYWwgUG9wdWxhdGlvbiI6DQogICJBZHVsdCBJbnBhdGllbnQgQmVkcyBJbml0aWFsIFBvcHVsYXRpb24iDQogIGFuZCBFbmNvdW50ZXJDaGVjaw0KDQpkZWZpbmUgIlBlZGlhdHJpYyBJbnBhdGllbnQgQmVkcyBJbml0aWFsIFBvcHVsYXRpb24iOg0KICBJc0JlZExvY2F0aW9uDQogIGFuZCBMb2NhdGlvbklzSE9TUA0KICBhbmQgTG9jYXRpb25Jc0NITEQNCiAgYW5kIG5vdCAoDQogICAgTG9jYXRpb25Jc0lQRg0KICAgIG9yIExvY2F0aW9uSXNJUkYNCiAgKQ0KDQpkZWZpbmUgIk9jY3VwaWVkIFBlZGlhdHJpYyBJbnBhdGllbnQgQmVkcyBJbml0aWFsIFBvcHVsYXRpb24iOg0KICAiUGVkaWF0cmljIElucGF0aWVudCBCZWRzIEluaXRpYWwgUG9wdWxhdGlvbiINCiAgYW5kIEVuY291bnRlckNoZWNrDQoNCmRlZmluZSAiSUNVIEJlZHMgSW5pdGlhbCBQb3B1bGF0aW9uIjoNCiAgSXNCZWRMb2NhdGlvbg0KICBhbmQgKA0KICAgIExvY2F0aW9uSXNIT1NQDQogICAgb3IgTG9jYXRpb25Jc09USA0KICApDQoNCmRlZmluZSAiT2NjdXBpZWQgSUNVIEJlZHMgSW5pdGlhbCBQb3B1bGF0aW9uIjoNCiAgIklDVSBCZWRzIEluaXRpYWwgUG9wdWxhdGlvbiINCiAgYW5kIEVuY291bnRlckNoZWNrDQoNCmRlZmluZSAiQWR1bHQgSUNVIEJlZHMgSW5pdGlhbCBQb3B1bGF0aW9uIjoNCiAgSXNCZWRMb2NhdGlvbg0KICBhbmQgKA0KICAgIExvY2F0aW9uSXNIT1NQDQogICAgb3IgTG9jYXRpb25Jc09USA0KICApDQogIGFuZCBub3QgTG9jYXRpb25Jc0NITEQNCg0KZGVmaW5lICJPY2N1cGllZCBBZHVsdCBJQ1UgQmVkcyBJbml0aWFsIFBvcHVsYXRpb24iOg0KICAiQWR1bHQgSUNVIEJlZHMgSW5pdGlhbCBQb3B1bGF0aW9uIg0KICBhbmQgRW5jb3VudGVyQ2hlY2sNCg0KZGVmaW5lICJQZWRpYXRyaWMgSUNVIEJlZHMgSW5pdGlhbCBQb3B1bGF0aW9uIjoNCiAgSXNCZWRMb2NhdGlvbg0KICBhbmQgTG9jYXRpb25Jc0NITEQNCiAgYW5kICgNCiAgICBMb2NhdGlvbklzSE9TUA0KICAgIG9yIExvY2F0aW9uSXNPVEgNCiAgKQ0KDQpkZWZpbmUgIk9jY3VwaWVkIFBlZGlhdHJpYyBJQ1UgQmVkcyBJbml0aWFsIFBvcHVsYXRpb24iOg0KICAiUGVkaWF0cmljIElDVSBCZWRzIEluaXRpYWwgUG9wdWxhdGlvbiINCiAgYW5kIEVuY291bnRlckNoZWNrDQoNCi8vU3RyYXRpZmllcnMNCi8vQ09WSURfMTkNCmRlZmluZSAiQWR1bHQgSW5wYXRpZW50IENPVklEXzE5IFBhdGllbnRzIFN0cmF0aWZpZXIiOg0KICBpZiAiT2NjdXBpZWQgQWR1bHQgSW5wYXRpZW50IEJlZHMgSW5pdGlhbCBQb3B1bGF0aW9uIiB0aGVuDQogICAgIkNvdW50IENvbmZpcm1lZCBDT1ZJRF8xOSBQYXRpZW50cyBpbiBCZWQgTG9jYXRpb24iDQogIGVsc2UgMA0KDQpkZWZpbmUgIlBlZGlhdHJpYyBJbnBhdGllbnQgQ09WSURfMTkgUGF0aWVudHMgU3RyYXRpZmllciI6DQogIGlmICJPY2N1cGllZCBQZWRpYXRyaWMgSW5wYXRpZW50IEJlZHMgSW5pdGlhbCBQb3B1bGF0aW9uIiB0aGVuDQogICAgIkNvdW50IENvbmZpcm1lZCBDT1ZJRF8xOSBQYXRpZW50cyBpbiBCZWQgTG9jYXRpb24iDQogIGVsc2UgMA0KDQpkZWZpbmUgIkFkdWx0IElDVSBDT1ZJRF8xOSBQYXRpZW50cyBTdHJhdGlmaWVyIjoNCiAgaWYgIk9jY3VwaWVkIEFkdWx0IElDVSBCZWRzIEluaXRpYWwgUG9wdWxhdGlvbiIgdGhlbg0KICAgICJDb3VudCBDb25maXJtZWQgQ09WSURfMTkgUGF0aWVudHMgaW4gQmVkIExvY2F0aW9uIg0KICBlbHNlIDANCg0KZGVmaW5lICJQZWRpYXRyaWMgSUNVIENPVklEXzE5IFBhdGllbnRzIFN0cmF0aWZpZXIiOg0KICBpZiAiT2NjdXBpZWQgUGVkaWF0cmljIElDVSBCZWRzIEluaXRpYWwgUG9wdWxhdGlvbiIgdGhlbg0KICAgICJDb3VudCBDb25maXJtZWQgQ09WSURfMTkgUGF0aWVudHMgaW4gQmVkIExvY2F0aW9uIg0KICBlbHNlIDANCg0KZGVmaW5lICJOZXcgUGVkaWF0cmljIENPVklEXzE5IFBhdGllbnRzIEJldHdlZW4gMCB0byA0IFN0cmF0aWZpZXIiOg0KICBDb3VudCgNCiAgICAiR2V0IENvbmZpcm1lZCBQYXRpZW50IElEcyBpbiBCZWQgTG9jYXRpb24gQmV0d2VlbiBTcGVjaWZpZWQgQWdlcyIoICJOZXdseSBBZG1pdHRlZCBDT1ZJRF8xOSBQYXRpZW50IElEcyIgLCAwLCA0ICkNCiAgKQ0KDQpkZWZpbmUgIk5ldyBQZWRpYXRyaWMgQ09WSURfMTkgUGF0aWVudHMgQmV0d2VlbiA1IHRvIDE3IFN0cmF0aWZpZXIiOg0KICBDb3VudCgNCiAgICAiR2V0IENvbmZpcm1lZCBQYXRpZW50IElEcyBpbiBCZWQgTG9jYXRpb24gQmV0d2VlbiBTcGVjaWZpZWQgQWdlcyIoICJOZXdseSBBZG1pdHRlZCBDT1ZJRF8xOSBQYXRpZW50IElEcyIsIDUsIDE3ICkNCiAgKQ0KDQpkZWZpbmUgIk5ldyBBZHVsdCBDT1ZJRF8xOSBQYXRpZW50cyBCZXR3ZWVuIDE4IHRvIDQ5IFN0cmF0aWZpZXIiOg0KICBDb3VudCgNCiAgICAiR2V0IENvbmZpcm1lZCBQYXRpZW50IElEcyBpbiBCZWQgTG9jYXRpb24gQmV0d2VlbiBTcGVjaWZpZWQgQWdlcyIoICJOZXdseSBBZG1pdHRlZCBDT1ZJRF8xOSBQYXRpZW50IElEcyIsIDE4LCA0OSApDQogICkNCg0KZGVmaW5lICJOZXcgQWR1bHQgQ09WSURfMTkgUGF0aWVudHMgQmV0d2VlbiA1MCB0byA2NCBTdHJhdGlmaWVyIjoNCiAgQ291bnQoDQogICAgIkdldCBDb25maXJtZWQgUGF0aWVudCBJRHMgaW4gQmVkIExvY2F0aW9uIEJldHdlZW4gU3BlY2lmaWVkIEFnZXMiKCAiTmV3bHkgQWRtaXR0ZWQgQ09WSURfMTkgUGF0aWVudCBJRHMiLCA1MCwgNjQgKQ0KICApDQoNCmRlZmluZSAiTmV3IEFkdWx0IENPVklEXzE5IFBhdGllbnRzIEJldHdlZW4gNjUgdG8gNzQgU3RyYXRpZmllciI6DQogIENvdW50KA0KICAgICJHZXQgQ29uZmlybWVkIFBhdGllbnQgSURzIGluIEJlZCBMb2NhdGlvbiBCZXR3ZWVuIFNwZWNpZmllZCBBZ2VzIiggIk5ld2x5IEFkbWl0dGVkIENPVklEXzE5IFBhdGllbnQgSURzIiwgNjUsIDc0ICkNCiAgKQ0KDQpkZWZpbmUgIk5ldyBBZHVsdCBDT1ZJRF8xOSBQYXRpZW50cyA3NSBhbmQgQWJvdmUgU3RyYXRpZmllciI6DQogIENvdW50KA0KICAgICJHZXQgQ29uZmlybWVkIFBhdGllbnQgSURzIGluIEJlZCBMb2NhdGlvbiBBYm92ZSBTcGVjaWZpZWQgQWdlIiggIk5ld2x5IEFkbWl0dGVkIENPVklEXzE5IFBhdGllbnQgSURzIiwgNzUgKQ0KICApDQoNCmRlZmluZSAiTmV3IENPVklEXzE5IFBhdGllbnRzIHdpdGggVW5rbm93biBBZ2UgU3RyYXRpZmllciI6DQogIENvdW50KA0KICAgICJHZXQgQ29uZmlybWVkIFBhdGllbnQgSURzIGluIEJlZCBMb2NhdGlvbiBhbmQgVW5rbm93biBBZ2UiKCAiTmV3bHkgQWRtaXR0ZWQgQ09WSURfMTkgUGF0aWVudCBJRHMiICkNCiAgKQ0KICANCi8vSW5mbHVlbnphDQpkZWZpbmUgIkFkdWx0IElucGF0aWVudCBJbmZsdWVuemEgUGF0aWVudHMgU3RyYXRpZmllciI6DQogIGlmICJPY2N1cGllZCBBZHVsdCBJbnBhdGllbnQgQmVkcyBJbml0aWFsIFBvcHVsYXRpb24iIHRoZW4NCiAgICAiQ291bnQgQ29uZmlybWVkIEluZmx1ZW56YSBQYXRpZW50cyBpbiBCZWQgTG9jYXRpb24iDQogIGVsc2UgMA0KDQpkZWZpbmUgIlBlZGlhdHJpYyBJbnBhdGllbnQgSW5mbHVlbnphIFBhdGllbnRzIFN0cmF0aWZpZXIiOg0KICBpZiAiT2NjdXBpZWQgUGVkaWF0cmljIElucGF0aWVudCBCZWRzIEluaXRpYWwgUG9wdWxhdGlvbiIgdGhlbg0KICAgICJDb3VudCBDb25maXJtZWQgSW5mbHVlbnphIFBhdGllbnRzIGluIEJlZCBMb2NhdGlvbiINCiAgZWxzZSAwDQoNCmRlZmluZSAiQWR1bHQgSUNVIEluZmx1ZW56YSBQYXRpZW50cyBTdHJhdGlmaWVyIjoNCiAgaWYgIk9jY3VwaWVkIEFkdWx0IElDVSBCZWRzIEluaXRpYWwgUG9wdWxhdGlvbiIgdGhlbg0KICAgICJDb3VudCBDb25maXJtZWQgSW5mbHVlbnphIFBhdGllbnRzIGluIEJlZCBMb2NhdGlvbiINCiAgZWxzZSAwDQoNCmRlZmluZSAiUGVkaWF0cmljIElDVSBJbmZsdWVuemEgUGF0aWVudHMgU3RyYXRpZmllciI6DQogIGlmICJPY2N1cGllZCBQZWRpYXRyaWMgSUNVIEJlZHMgSW5pdGlhbCBQb3B1bGF0aW9uIiB0aGVuDQogICAgIkNvdW50IENvbmZpcm1lZCBJbmZsdWVuemEgUGF0aWVudHMgaW4gQmVkIExvY2F0aW9uIg0KICBlbHNlIDANCg0KZGVmaW5lICJOZXcgUGVkaWF0cmljIEluZmx1ZW56YSBQYXRpZW50cyBCZXR3ZWVuIDAgdG8gNCBTdHJhdGlmaWVyIjoNCiAgQ291bnQoDQogICAgIkdldCBDb25maXJtZWQgUGF0aWVudCBJRHMgaW4gQmVkIExvY2F0aW9uIEJldHdlZW4gU3BlY2lmaWVkIEFnZXMiKCAiTmV3bHkgQWRtaXR0ZWQgSW5mbHVlbnphIFBhdGllbnQgSURzIiAsIDAsIDQgKQ0KICApDQoNCmRlZmluZSAiTmV3IFBlZGlhdHJpYyBJbmZsdWVuemEgUGF0aWVudHMgQmV0d2VlbiA1IHRvIDE3IFN0cmF0aWZpZXIiOg0KICBDb3VudCgNCiAgICAiR2V0IENvbmZpcm1lZCBQYXRpZW50IElEcyBpbiBCZWQgTG9jYXRpb24gQmV0d2VlbiBTcGVjaWZpZWQgQWdlcyIoICJOZXdseSBBZG1pdHRlZCBJbmZsdWVuemEgUGF0aWVudCBJRHMiLCA1LCAxNyApDQogICkNCg0KZGVmaW5lICJOZXcgQWR1bHQgSW5mbHVlbnphIFBhdGllbnRzIEJldHdlZW4gMTggdG8gNDkgU3RyYXRpZmllciI6DQogIENvdW50KA0KICAgICJHZXQgQ29uZmlybWVkIFBhdGllbnQgSURzIGluIEJlZCBMb2NhdGlvbiBCZXR3ZWVuIFNwZWNpZmllZCBBZ2VzIiggIk5ld2x5IEFkbWl0dGVkIEluZmx1ZW56YSBQYXRpZW50IElEcyIsIDE4LCA0OSApDQogICkNCg0KZGVmaW5lICJOZXcgQWR1bHQgSW5mbHVlbnphIFBhdGllbnRzIEJldHdlZW4gNTAgdG8gNjQgU3RyYXRpZmllciI6DQogIENvdW50KA0KICAgICJHZXQgQ29uZmlybWVkIFBhdGllbnQgSURzIGluIEJlZCBMb2NhdGlvbiBCZXR3ZWVuIFNwZWNpZmllZCBBZ2VzIiggIk5ld2x5IEFkbWl0dGVkIEluZmx1ZW56YSBQYXRpZW50IElEcyIsIDUwLCA2NCApDQogICkNCg0KZGVmaW5lICJOZXcgQWR1bHQgSW5mbHVlbnphIFBhdGllbnRzIEJldHdlZW4gNjUgdG8gNzQgU3RyYXRpZmllciI6DQogIENvdW50KA0KICAgICJHZXQgQ29uZmlybWVkIFBhdGllbnQgSURzIGluIEJlZCBMb2NhdGlvbiBCZXR3ZWVuIFNwZWNpZmllZCBBZ2VzIiggIk5ld2x5IEFkbWl0dGVkIEluZmx1ZW56YSBQYXRpZW50IElEcyIsIDY1LCA3NCApDQogICkNCg0KZGVmaW5lICJOZXcgQWR1bHQgSW5mbHVlbnphIFBhdGllbnRzIDc1IGFuZCBBYm92ZSBTdHJhdGlmaWVyIjoNCiAgQ291bnQoDQogICAgIkdldCBDb25maXJtZWQgUGF0aWVudCBJRHMgaW4gQmVkIExvY2F0aW9uIEFib3ZlIFNwZWNpZmllZCBBZ2UiKCAiTmV3bHkgQWRtaXR0ZWQgSW5mbHVlbnphIFBhdGllbnQgSURzIiwgNzUgKQ0KICApDQoNCmRlZmluZSAiTmV3IEluZmx1ZW56YSBQYXRpZW50cyB3aXRoIFVua25vd24gQWdlIFN0cmF0aWZpZXIiOg0KICBDb3VudCgNCiAgICAiR2V0IENvbmZpcm1lZCBQYXRpZW50IElEcyBpbiBCZWQgTG9jYXRpb24gYW5kIFVua25vd24gQWdlIiggIk5ld2x5IEFkbWl0dGVkIEluZmx1ZW56YSBQYXRpZW50IElEcyIgKQ0KICApDQoNCi8vUlNWDQpkZWZpbmUgIkFkdWx0IElucGF0aWVudCBSU1YgUGF0aWVudHMgU3RyYXRpZmllciI6DQogIGlmICJPY2N1cGllZCBBZHVsdCBJbnBhdGllbnQgQmVkcyBJbml0aWFsIFBvcHVsYXRpb24iIHRoZW4NCiAgICAiQ291bnQgQ29uZmlybWVkIFJTViBQYXRpZW50cyBpbiBCZWQgTG9jYXRpb24iDQogIGVsc2UgMA0KDQpkZWZpbmUgIlBlZGlhdHJpYyBJbnBhdGllbnQgUlNWIFBhdGllbnRzIFN0cmF0aWZpZXIiOg0KICBpZiAiT2NjdXBpZWQgUGVkaWF0cmljIElucGF0aWVudCBCZWRzIEluaXRpYWwgUG9wdWxhdGlvbiIgdGhlbg0KICAgICJDb3VudCBDb25maXJtZWQgUlNWIFBhdGllbnRzIGluIEJlZCBMb2NhdGlvbiINCiAgZWxzZSAwDQoNCmRlZmluZSAiQWR1bHQgSUNVIFJTViBQYXRpZW50cyBTdHJhdGlmaWVyIjoNCiAgaWYgIk9jY3VwaWVkIEFkdWx0IElDVSBCZWRzIEluaXRpYWwgUG9wdWxhdGlvbiIgdGhlbg0KICAgICJDb3VudCBDb25maXJtZWQgUlNWIFBhdGllbnRzIGluIEJlZCBMb2NhdGlvbiINCiAgZWxzZSAwDQoNCmRlZmluZSAiUGVkaWF0cmljIElDVSBSU1YgUGF0aWVudHMgU3RyYXRpZmllciI6DQogIGlmICJPY2N1cGllZCBQZWRpYXRyaWMgSUNVIEJlZHMgSW5pdGlhbCBQb3B1bGF0aW9uIiB0aGVuDQogICAgIkNvdW50IENvbmZpcm1lZCBSU1YgUGF0aWVudHMgaW4gQmVkIExvY2F0aW9uIg0KICBlbHNlIDANCg0KZGVmaW5lICJOZXcgUGVkaWF0cmljIFJTViBQYXRpZW50cyBCZXR3ZWVuIDAgdG8gNCBTdHJhdGlmaWVyIjoNCiAgQ291bnQoDQogICAgIkdldCBDb25maXJtZWQgUGF0aWVudCBJRHMgaW4gQmVkIExvY2F0aW9uIEJldHdlZW4gU3BlY2lmaWVkIEFnZXMiKCAiTmV3bHkgQWRtaXR0ZWQgUlNWIFBhdGllbnQgSURzIiAsIDAsIDQgKQ0KICApDQoNCmRlZmluZSAiTmV3IFBlZGlhdHJpYyBSU1YgUGF0aWVudHMgQmV0d2VlbiA1IHRvIDE3IFN0cmF0aWZpZXIiOg0KICBDb3VudCgNCiAgICAiR2V0IENvbmZpcm1lZCBQYXRpZW50IElEcyBpbiBCZWQgTG9jYXRpb24gQmV0d2VlbiBTcGVjaWZpZWQgQWdlcyIoICJOZXdseSBBZG1pdHRlZCBSU1YgUGF0aWVudCBJRHMiLCA1LCAxNyApDQogICkNCg0KZGVmaW5lICJOZXcgQWR1bHQgUlNWIFBhdGllbnRzIEJldHdlZW4gMTggdG8gNDkgU3RyYXRpZmllciI6DQogIENvdW50KA0KICAgICJHZXQgQ29uZmlybWVkIFBhdGllbnQgSURzIGluIEJlZCBMb2NhdGlvbiBCZXR3ZWVuIFNwZWNpZmllZCBBZ2VzIiggIk5ld2x5IEFkbWl0dGVkIFJTViBQYXRpZW50IElEcyIsIDE4LCA0OSApDQogICkNCg0KZGVmaW5lICJOZXcgQWR1bHQgUlNWIFBhdGllbnRzIEJldHdlZW4gNTAgdG8gNjQgU3RyYXRpZmllciI6DQogIENvdW50KA0KICAgICJHZXQgQ29uZmlybWVkIFBhdGllbnQgSURzIGluIEJlZCBMb2NhdGlvbiBCZXR3ZWVuIFNwZWNpZmllZCBBZ2VzIiggIk5ld2x5IEFkbWl0dGVkIFJTViBQYXRpZW50IElEcyIsIDUwLCA2NCApDQogICkNCg0KZGVmaW5lICJOZXcgQWR1bHQgUlNWIFBhdGllbnRzIEJldHdlZW4gNjUgdG8gNzQgU3RyYXRpZmllciI6DQogIENvdW50KA0KICAgICJHZXQgQ29uZmlybWVkIFBhdGllbnQgSURzIGluIEJlZCBMb2NhdGlvbiBCZXR3ZWVuIFNwZWNpZmllZCBBZ2VzIiggIk5ld2x5IEFkbWl0dGVkIFJTViBQYXRpZW50IElEcyIsIDY1LCA3NCApDQogICkNCg0KZGVmaW5lICJOZXcgQWR1bHQgUlNWIFBhdGllbnRzIDc1IGFuZCBBYm92ZSBTdHJhdGlmaWVyIjoNCiAgQ291bnQoDQogICAgIkdldCBDb25maXJtZWQgUGF0aWVudCBJRHMgaW4gQmVkIExvY2F0aW9uIEFib3ZlIFNwZWNpZmllZCBBZ2UiKCAiTmV3bHkgQWRtaXR0ZWQgUlNWIFBhdGllbnQgSURzIiwgNzUgKQ0KICApDQoNCmRlZmluZSAiTmV3IFJTViBQYXRpZW50cyB3aXRoIFVua25vd24gQWdlIFN0cmF0aWZpZXIiOg0KICBDb3VudCgNCiAgICAiR2V0IENvbmZpcm1lZCBQYXRpZW50IElEcyBpbiBCZWQgTG9jYXRpb24gYW5kIFVua25vd24gQWdlIiggIk5ld2x5IEFkbWl0dGVkIFJTViBQYXRpZW50IElEcyIgKQ0KICApDQoNCi8vRGV2aWNlcyAoU3VwcGx5IGlzIGRpdmlkZWQgYnkgYXZlcmFnZSB1c2VkIHBlciBkYXkgKGVzdGltYXRlZCkpDQpkZWZpbmUgIk45NSBNYXNrIFN1cHBseSBpbiBEYXlzIFN0cmF0aWZpZXIiOg0KICBGbG9vciggQ291bnQoDQogICAgIkRldmljZXMiIERldmljZXMNCiAgICB3aGVyZSBEZXZpY2VzLnR5cGUgfiAiTjk1IG1hc2siDQogICkgLyAxMCApDQoNCmRlZmluZSAiTjk1IE1hc2sgMyBEYXkgU3VwcGx5IEluaXRpYWwgUG9wdWxhdGlvbiI6DQogICJOOTUgTWFzayBTdXBwbHkgaW4gRGF5cyBTdHJhdGlmaWVyIiA+IDMNCg0KZGVmaW5lICJPUiBTdXJnaWNhbCBNYXNrIFN1cHBseSBpbiBEYXlzIFN0cmF0aWZpZXIiOg0KICBGbG9vciggQ291bnQoDQogICAgIkRldmljZXMiIERldmljZXMNCiAgICB3aGVyZSBEZXZpY2VzLnR5cGUgfiAiU3VyZ2ljYWwgbWFzayINCiAgKSAvIDEwICkNCg0KZGVmaW5lICJPUiBTdXJnaWNhbCBNYXNrIDMgRGF5IFN1cHBseSBJbml0aWFsIFBvcHVsYXRpb24iOg0KICAiT1IgU3VyZ2ljYWwgTWFzayBTdXBwbHkgaW4gRGF5cyBTdHJhdGlmaWVyIiA+IDMNCg0KZGVmaW5lICJGYWNlIFNoaWVsZCBTdXBwbHkgaW4gRGF5cyBTdHJhdGlmaWVyIjoNCiAgRmxvb3IoIENvdW50KA0KICAgICJEZXZpY2VzIiBEZXZpY2VzDQogICAgd2hlcmUgRGV2aWNlcy50eXBlIH4gIkZhY2Ugc2hpZWxkIg0KICApIC8gMTAgKQ0KDQpkZWZpbmUgIkZhY2UgU2hpZWxkIDMgRGF5IFN1cHBseSBJbml0aWFsIFBvcHVsYXRpb24iOg0KICAiRmFjZSBTaGllbGQgU3VwcGx5IGluIERheXMgU3RyYXRpZmllciIgPiAzDQoNCmRlZmluZSAiR293biBTdXBwbHkgaW4gRGF5cyBTdHJhdGlmaWVyIjoNCiAgRmxvb3IoIENvdW50KA0KICAgICJEZXZpY2VzIiBEZXZpY2VzDQogICAgd2hlcmUgRGV2aWNlcy50eXBlIH4gIlBhdGllbnQgZ293biINCiAgKSAvIDUgKQ0KDQpkZWZpbmUgIkdvd24gMyBEYXkgU3VwcGx5IEluaXRpYWwgUG9wdWxhdGlvbiI6DQogICJHb3duIFN1cHBseSBpbiBEYXlzIFN0cmF0aWZpZXIiID4gMw0KDQpkZWZpbmUgIkdsb3ZlIFN1cHBseSBpbiBEYXlzIFN0cmF0aWZpZXIiOg0KICBGbG9vciggQ291bnQoDQogICAgIkRldmljZXMiIERldmljZXMNCiAgICB3aGVyZSBEZXZpY2VzLnR5cGUgfiAiU3VyZ2ljYWwgZ2xvdmUiDQogICkgLyAxNSApDQoNCmRlZmluZSAiR2xvdmUgMyBEYXkgU3VwcGx5IEluaXRpYWwgUG9wdWxhdGlvbiI6DQogICJHbG92ZSBTdXBwbHkgaW4gRGF5cyBTdHJhdGlmaWVyIiA+IDMNCg0KLy9GdW5jdGlvbnMgYW5kIEhlbHBlcnMNCmRlZmluZSAiQ09WSURfMTkgT2JzZXJ2YXRpb25zIjoNCiAgW09ic2VydmF0aW9uOiAiQ09WSURfMTkgKFRlc3RzIGZvciBTQVJTX0NvVl8yIE51Y2xlaWMgQWNpZCkiXSANCiAgICB1bmlvbiBbT2JzZXJ2YXRpb246ICJDT1ZJRF8xOSAoVGVzdHMgZm9yIFNBUlNfQ29WXzIgQW50aWdlbikiXQ0KDQpkZWZpbmUgIk5ld2x5IEFkbWl0dGVkIENPVklEXzE5IFBhdGllbnQgSURzIjoNCiAgIkdldCBDb25maXJtZWQgUGF0aWVudCBJRHMiKCAiTmV3bHkgQWRtaXR0ZWQgRW5jb3VudGVycyIsICJDT1ZJRF8xOSBPYnNlcnZhdGlvbnMiICkNCg0KZGVmaW5lICJDb3VudCBDb25maXJtZWQgQ09WSURfMTkgUGF0aWVudHMgaW4gQmVkIExvY2F0aW9uIjoNCiAgQ291bnQoDQogICAgIkdldCBDb25maXJtZWQgUGF0aWVudCBJRHMiKCAiRW5jb3VudGVycyIsICJDT1ZJRF8xOSBPYnNlcnZhdGlvbnMiICkNCiAgKQ0KDQpkZWZpbmUgIkluZmx1ZW56YSBPYnNlcnZhdGlvbnMiOg0KICBbT2JzZXJ2YXRpb246ICJJbmZsdWVuemEgKFRlc3RzIGZvciBpbmZsdWVuemEgQSBvciBCIHZpcnVzIE51Y2xlaWMgQWNpZCkiXSANCiAgICB1bmlvbiBbT2JzZXJ2YXRpb246ICJJbmZsdWVuemEgKFRlc3RzIGZvciBpbmZsdWVuemEgQSBvciBCIHZpcnVzIEFudGlnZW4pIl0NCg0KZGVmaW5lICJOZXdseSBBZG1pdHRlZCBJbmZsdWVuemEgUGF0aWVudCBJRHMiOg0KICAiR2V0IENvbmZpcm1lZCBQYXRpZW50IElEcyIoICJOZXdseSBBZG1pdHRlZCBFbmNvdW50ZXJzIiwgIkluZmx1ZW56YSBPYnNlcnZhdGlvbnMiICkNCg0KZGVmaW5lICJDb3VudCBDb25maXJtZWQgSW5mbHVlbnphIFBhdGllbnRzIGluIEJlZCBMb2NhdGlvbiI6DQogIENvdW50KA0KICAgICJHZXQgQ29uZmlybWVkIFBhdGllbnQgSURzIiggIkVuY291bnRlcnMiLCAiSW5mbHVlbnphIE9ic2VydmF0aW9ucyIgKQ0KICApDQoNCmRlZmluZSAiUlNWIE9ic2VydmF0aW9ucyI6DQogIFtPYnNlcnZhdGlvbjogIlJTViAoVGVzdHMgZm9yIFJTViBBbnRpZ2VuKSJdIA0KICAgIHVuaW9uIFtPYnNlcnZhdGlvbjogIlJTViAoVGVzdHMgZm9yIFJTViBOdWNsZWljIEFjaWQpIl0NCg0KZGVmaW5lICJOZXdseSBBZG1pdHRlZCBSU1YgUGF0aWVudCBJRHMiOg0KICAiR2V0IENvbmZpcm1lZCBQYXRpZW50IElEcyIoICJOZXdseSBBZG1pdHRlZCBFbmNvdW50ZXJzIiwgIlJTViBPYnNlcnZhdGlvbnMiICkNCg0KZGVmaW5lICJDb3VudCBDb25maXJtZWQgUlNWIFBhdGllbnRzIGluIEJlZCBMb2NhdGlvbiI6DQogIENvdW50KA0KICAgICJHZXQgQ29uZmlybWVkIFBhdGllbnQgSURzIiggIkVuY291bnRlcnMiLCAiUlNWIE9ic2VydmF0aW9ucyIgKQ0KICApDQoNCmRlZmluZSAiSXNCZWRMb2NhdGlvbiI6DQogIExvY2F0aW9uLnBoeXNpY2FsVHlwZSB+ICJCZWQiDQoNCmRlZmluZSAiRW5jb3VudGVycyI6DQogIFtFbmNvdW50ZXJdDQoNCmRlZmluZSAiRGV2aWNlcyI6DQogIFtEZXZpY2VdDQoNCmRlZmluZSAiTmV3bHkgQWRtaXR0ZWQgRW5jb3VudGVycyI6DQogICJFbmNvdW50ZXJzIiBFbmNvdW50ZXJzDQogIHdoZXJlIEVuY291bnRlcnMuc3RhdHVzIGluIHsgJ2luLXByb2dyZXNzJywgJ2Fycml2ZWQnLCAndHJpYWdlZCcgfQ0KDQpkZWZpbmUgIlBhdGllbnRzIjoNCiAgW1BhdGllbnRdDQoNCmRlZmluZSBmdW5jdGlvbiAiR2V0IENvbmZpcm1lZCBQYXRpZW50IElEcyIoIEVuY291bnRlcnMgTGlzdDxGSElSLkVuY291bnRlcj4sIE9ic2VydmF0aW9ucyBMaXN0PEZISVIuT2JzZXJ2YXRpb24+ICk6DQogIERpc3RpbmN0KA0KICAgIEVuY291bnRlcnMgRW5jb3VudGVyDQogICAgd2hlcmUgZXhpc3RzKA0KICAgICAgT2JzZXJ2YXRpb25zIExhYnMNCiAgICAgIHdoZXJlIGV4aXN0cygNCiAgICAgICAgTGFicy5jYXRlZ29yeSBjYXRlZ29yeQ0KICAgICAgICB3aGVyZSBjYXRlZ29yeSB+ICJsYWJvcmF0b3J5Ig0KICAgICAgKQ0KICAgICAgYW5kIEVuY291bnRlci5zdWJqZWN0ID0gTGFicy5zdWJqZWN0DQogICAgICBhbmQgTGFicy52YWx1ZSB+ICJkZXRlY3RlZCINCiAgICAgIGFuZCAiTm9ybWFsaXplIEludGVydmFsIiggTGFicy5lZmZlY3RpdmUgKSBvdmVybGFwcyBFbmNvdW50ZXIucGVyaW9kDQogICAgKQ0KICAgIHJldHVybiBFbmNvdW50ZXIuc3ViamVjdA0KICApDQoNCmRlZmluZSBmdW5jdGlvbiAiR2V0IENvbmZpcm1lZCBQYXRpZW50IElEcyBpbiBCZWQgTG9jYXRpb24gQmV0d2VlbiBTcGVjaWZpZWQgQWdlcyIoIFBhdGllbnRJRHMgTGlzdDxGSElSLlJlZmVyZW5jZT4sIGxvdyBTeXN0ZW0uSW50ZWdlciwgaGlnaCBTeXN0ZW0uSW50ZWdlciApOg0KICBQYXRpZW50SURzIFBhdGllbnRJRA0KICB3aGVyZSBleGlzdHMoDQogICAgIlBhdGllbnRzIiBQYXRpZW50cw0KICAgIGxldCBQYXRpZW50QWdlOiBDYWxjdWxhdGVBZ2VJblllYXJzQXQoIFBhdGllbnRzLmJpcnRoRGF0ZSwgc3RhcnQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIgKQ0KICAgIHdoZXJlIFBhdGllbnRzLmlkID0gR2V0SWQoIFBhdGllbnRJRC5yZWZlcmVuY2UgKQ0KICAgIGFuZCBQYXRpZW50QWdlID49IGxvdw0KICAgIGFuZCBQYXRpZW50QWdlIDw9IGhpZ2gNCiAgKQ0KDQpkZWZpbmUgZnVuY3Rpb24gIkdldCBDb25maXJtZWQgUGF0aWVudCBJRHMgaW4gQmVkIExvY2F0aW9uIEFib3ZlIFNwZWNpZmllZCBBZ2UiKCBQYXRpZW50SURzIExpc3Q8RkhJUi5SZWZlcmVuY2U+LCBhZ2UgU3lzdGVtLkludGVnZXIgKToNCiAgUGF0aWVudElEcyBQYXRpZW50SUQNCiAgd2hlcmUgZXhpc3RzKA0KICAgICJQYXRpZW50cyIgUGF0aWVudHMNCiAgICBsZXQgUGF0aWVudEFnZTogQ2FsY3VsYXRlQWdlSW5ZZWFyc0F0KCBQYXRpZW50cy5iaXJ0aERhdGUsIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiICkNCiAgICB3aGVyZSBQYXRpZW50cy5pZCA9IEdldElkKCBQYXRpZW50SUQucmVmZXJlbmNlICkNCiAgICBhbmQgUGF0aWVudEFnZSA+PSBhZ2UNCiAgKQ0KDQpkZWZpbmUgZnVuY3Rpb24gIkdldCBDb25maXJtZWQgUGF0aWVudCBJRHMgaW4gQmVkIExvY2F0aW9uIGFuZCBVbmtub3duIEFnZSIoIFBhdGllbnRJRHMgTGlzdDxGSElSLlJlZmVyZW5jZT4gKToNCiAgUGF0aWVudElEcyBQYXRpZW50SUQNCiAgd2hlcmUgZXhpc3RzKA0KICAgICJQYXRpZW50cyIgUGF0aWVudHMNCiAgICB3aGVyZSBQYXRpZW50cy5pZCA9IEdldElkKCBQYXRpZW50SUQucmVmZXJlbmNlICkNCiAgICBhbmQgUGF0aWVudHMuYmlydGhEYXRlID0gbnVsbA0KICApDQoNCmRlZmluZSBmdW5jdGlvbiAiR2V0Q29uZGl0aW9uIiggcmVmZXJlbmNlIFJlZmVyZW5jZSApOg0KICBzaW5nbGV0b24gZnJvbSAoDQoJW0NvbmRpdGlvbl0gQ29uZGl0aW9ucw0KCQl3aGVyZSBDb25kaXRpb25zLmlkID0gR2V0SWQoIHJlZmVyZW5jZS5yZWZlcmVuY2UgKQ0KICApDQoNCmRlZmluZSBmdW5jdGlvbiAiR2V0SWQiKCB1cmkgU3RyaW5nICk6DQogIExhc3QoU3BsaXQodXJpLCAnLycpKQ0KDQpkZWZpbmUgZnVuY3Rpb24gIk5vcm1hbGl6ZSBJbnRlcnZhbCIoIGNob2ljZSBDaG9pY2U8RkhJUi5kYXRlVGltZSwgRkhJUi5QZXJpb2QsIEZISVIuVGltaW5nLCBGSElSLmluc3RhbnQ+ICk6DQogIGNhc2UNCgkgIHdoZW4gY2hvaWNlIGlzIEZISVIuZGF0ZVRpbWUgdGhlbg0KICAgIAlJbnRlcnZhbFtGSElSSGVscGVycy5Ub0RhdGVUaW1lKGNob2ljZSBhcyBGSElSLmRhdGVUaW1lKSwgRkhJUkhlbHBlcnMuVG9EYXRlVGltZShjaG9pY2UgYXMgRkhJUi5kYXRlVGltZSldDQoJCXdoZW4gY2hvaWNlIGlzIEZISVIuUGVyaW9kIHRoZW4NCiAgCQlGSElSSGVscGVycy5Ub0ludGVydmFsKGNob2ljZSBhcyBGSElSLlBlcmlvZCkNCgkJd2hlbiBjaG9pY2UgaXMgRkhJUi5pbnN0YW50IHRoZW4NCgkJCUludGVydmFsW0ZISVJIZWxwZXJzLlRvRGF0ZVRpbWUoY2hvaWNlIGFzIEZISVIuaW5zdGFudCksIEZISVJIZWxwZXJzLlRvRGF0ZVRpbWUoY2hvaWNlIGFzIEZISVIuaW5zdGFudCldDQoJCXdoZW4gY2hvaWNlIGlzIEZISVIuVGltaW5nIHRoZW4NCgkJICBNZXNzYWdlKG51bGwgYXMgSW50ZXJ2YWw8RGF0ZVRpbWU+LCB0cnVlLCAnMScsICdFcnJvcicsICdDYW5ub3QgY29tcHV0ZSBhIHNpbmdsZSBpbnRlcnZhbCBmcm9tIGEgVGltaW5nIHR5cGUnKQ0KCQllbHNlDQoJCQludWxsIGFzIEludGVydmFsPERhdGVUaW1lPg0KCWVuZA0KDQpkZWZpbmUgIkVuY291bnRlckNoZWNrIjoNCiAgZXhpc3RzKCJFbmNvdW50ZXJzIiBFbmNvdW50ZXJzDQogIHdoZXJlIEVuY291bnRlcnMucGVyaW9kIG92ZXJsYXBzICJNZWFzdXJlbWVudCBQZXJpb2QiKQ0KDQpkZWZpbmUgIkxvY2F0aW9uSXNIT1NQIjoNCiAgZXhpc3RzKA0KICAgIExvY2F0aW9uLnR5cGUgdHlwZXMNCiAgICB3aGVyZSB0eXBlcyB+ICJIT1NQIg0KICApDQoNCmRlZmluZSAiTG9jYXRpb25Jc0lQRiI6DQogIGV4aXN0cygNCiAgICBMb2NhdGlvbi50eXBlIHR5cGVzDQogICAgd2hlcmUgdHlwZXMgfiAiSVBGIg0KICApDQoNCmRlZmluZSAiTG9jYXRpb25Jc0lSRiI6DQogIGV4aXN0cygNCiAgICBMb2NhdGlvbi50eXBlIHR5cGVzDQogICAgd2hlcmUgdHlwZXMgfiAiSVJGIg0KICApDQoNCmRlZmluZSAiTG9jYXRpb25Jc0NITEQiOg0KICBleGlzdHMoDQogICAgTG9jYXRpb24udHlwZSB0eXBlcw0KICAgIHdoZXJlIHR5cGVzIH4gIkNITEQiDQogICkNCg0KZGVmaW5lICJMb2NhdGlvbklzT1RIIjoNCiAgZXhpc3RzKA0KICAgIExvY2F0aW9uLnR5cGUgdHlwZXMNCiAgICB3aGVyZSB0eXBlcyB+ICJPVEgiDQogICk="
    }
  ]
}