CDC National Healthcare Safety Network (NHSN) Digital Quality Measures (dQM) Content Package IG
2.0.0-cibuild - Release 2 ci-build
CDC National Healthcare Safety Network (NHSN) Digital Quality Measures (dQM) Content Package IG - Local Development build (v2.0.0-cibuild) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
| Page standards status: Trial-use | Maturity Level: 1 |
{
"resourceType" : "Library",
"id" : "NHSNAcuteCareHospitalMonthlyInitialPopulation",
"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;\">NHSNAcuteCareHospitalMonthlyInitialPopulation</td>\n </tr>\n \n\n \n \n <tr>\n <th scope=\"row\"><b>Version: </b></th>\n <td style=\"padding-left: 4px;\">2.0.0-cibuild</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-NHSNAcuteCareHospitalMonthlyInitialPopulation.html\">NHSNAcuteCareHospitalMonthlyInitialPopulation</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.1.0/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;\">2026-03-30 23:45:36+0000</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Publisher: </b></th>\n <td style=\"padding-left: 4px;\">CDC National Healthcare Safety Network (NHSN)</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 <tr>\n <th scope=\"row\"><b>Related Artifacts: </b></th>\n <td style=\"padding-left: 4px;\">\n \n \n \n <p><b>Dependencies</b></p>\n <ul>\n \n <li><code>http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/FHIRHelpers|4.0.2</code></li>\n \n <li><code>http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/NHSNHelpers|0.0.002</code></li>\n \n <li><code>http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/SharedResourceCreation|0.1.010</code></li>\n \n <li><a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-v3-ActCode.html\">ActCodeversion: null10.0.0)</a></li>\n \n <li><a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-observation-category.html\">Observation Category Codesversion: null2.0.0)</a></li>\n \n <li><a href=\"http://terminology.hl7.org/6.5.0/CodeSystem-v3-loinc.html\">Logical Observation Identifiers, Names and Codes (LOINC)</a></li>\n \n <li><a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-v2-0074.html\">diagnosticServiceSectionIdversion: null3.0.0)</a></li>\n \n <li><a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-condition-category.html\">Condition Category Codesversion: null2.0.0)</a></li>\n \n <li><a href=\"http://hl7.org/fhir/us/core/STU6.1/CodeSystem-condition-category.html\">US Core Condition Category Extension Codesversion: null6.1.0)</a></li>\n \n <li><a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-condition-clinical.html\">Condition Clinical Status Codesversion: null3.0.0)</a></li>\n \n <li><a href=\"http://hl7.org/fhir/R4/codesystem-snomedct.html\">SNOMED CT (all versions)</a></li>\n \n <li><a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-medicationrequest-category.html\">MedicationRequest Category Codesversion: null2.0.0)</a></li>\n \n <li><a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113762.1.4.1046.265/expansion\">Inpatient, Emergency, and Observation Locations</a></li>\n \n <li><a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113883.3.117.1.7.1.292/expansion\">Emergency Department Visit</a></li>\n \n <li><a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113883.3.666.5.307/expansion\">Encounter Inpatient</a></li>\n \n <li><a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113762.1.4.1111.143/expansion\">Observation Services</a></li>\n \n <li><a href=\"https://vsac.nlm.nih.gov/valueset/2.16.840.1.113762.1.4.1046.274/expansion\">NHSN Inpatient Encounter Class Codes</a></li>\n \n </ul>\n \n \n \n \n \n </td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Parameters: </b></th>\n <td style=\"padding-left: 4px;\">\n <table class=\"grid-dict\">\n <tr><th><b>Name</b></th><th><b>Type</b></th><th><b>Min</b></th><th><b>Max</b></th><th><b>In/Out</b></th></tr>\n \n <tr><th>Measurement Period</th><th>Period</th><th>0</th><th>1</th><th>In</th></tr>\n \n <tr><th>Patient</th><th>Patient</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Qualifying Encounters During Measurement Period</th><th>Encounter</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>Encounters</th><th>Encounter</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>Encounters with Patient Hospital Locations</th><th>Encounter</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>Initial Population</th><th>Encounter</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>Conditions</th><th>Condition</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>DiagnosticReports</th><th>DiagnosticReport</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>Observations</th><th>Observation</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>Get Locations from IP Encounters in Measurement Period</th><th>Location</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Medication Request</th><th>MedicationRequest</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Medication Administration</th><th>MedicationAdministration</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>Medication IDs</th><th>string</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Condition</th><th>Condition</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Coverage</th><th>Coverage</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Device</th><th>Device</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE DiagnosticReport Lab</th><th>DiagnosticReport</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE DiagnosticReport Note</th><th>DiagnosticReport</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Encounter</th><th>Encounter</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE IP Encounters</th><th>Encounter</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Location</th><th>Location</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Medication</th><th>Medication</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Observation Lab Category</th><th>Observation</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Observation Vital Signs Category</th><th>Observation</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Observation Category</th><th>Observation</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Procedure</th><th>Procedure</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Specimen</th><th>Specimen</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Service Request</th><th>ServiceRequest</th><th>0</th><th>*</th><th>Out</th></tr>\n \n <tr><th>SDE Minimal Patient</th><th>Patient</th><th>0</th><th>1</th><th>Out</th></tr>\n \n </table>\n </td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Data Requirements:</b></th>\n <td style=\"padding-left: 4px;\">\n <table class=\"grid-dict\">\n <tr><th><b>Type</b></th><th><b>Profile</b></th><th><b>MS</b></th><th><b>Code Filter</b></th></tr>\n \n <tr>\n <th>Patient</th>\n <th>http://hl7.org/fhir/StructureDefinition/Patient</th>\n <th/>\n <th>\n \n </th>\n </tr>\n \n <tr>\n <th>Encounter</th>\n <th>http://hl7.org/fhir/StructureDefinition/Encounter</th>\n <th>;;;;;;;;;;;;;;;</th>\n <th>\n \n <b>code filter: </b>\n \n <br/>\n \n \n <span style=\"padding-left: 4px;\">\n <b>path: </b><span>type</span>\n </span>\n \n <br/>\n \n \n \n <span style=\"padding-left: 4px;\">\n <b>value set: </b><span>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307</span>\n </span>\n \n \n \n </th>\n </tr>\n \n <tr>\n <th>Encounter</th>\n <th>http://hl7.org/fhir/StructureDefinition/Encounter</th>\n <th>;;;;;;;;;;;;;;;</th>\n <th>\n \n <b>code filter: </b>\n \n <br/>\n \n \n <span style=\"padding-left: 4px;\">\n <b>path: </b><span>type</span>\n </span>\n \n <br/>\n \n \n \n <span style=\"padding-left: 4px;\">\n <b>value set: </b><span>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292</span>\n </span>\n \n \n \n </th>\n </tr>\n \n <tr>\n <th>Encounter</th>\n <th>http://hl7.org/fhir/StructureDefinition/Encounter</th>\n <th>;;;;;;;;;;;;;;;</th>\n <th>\n \n <b>code filter: </b>\n \n <br/>\n \n \n <span style=\"padding-left: 4px;\">\n <b>path: </b><span>type</span>\n </span>\n \n <br/>\n \n \n \n <span style=\"padding-left: 4px;\">\n <b>value set: </b><span>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143</span>\n </span>\n \n \n \n </th>\n </tr>\n \n <tr>\n <th>Encounter</th>\n <th>http://hl7.org/fhir/StructureDefinition/Encounter</th>\n <th>;;;;;;;;;;;;;;;</th>\n <th>\n \n <b>code filter: </b>\n \n <br/>\n \n \n <span style=\"padding-left: 4px;\">\n <b>path: </b><span>class</span>\n </span>\n \n <br/>\n \n \n \n <span style=\"padding-left: 4px;\">\n <b>value set: </b><span>http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274</span>\n </span>\n \n \n \n </th>\n </tr>\n \n <tr>\n <th>Encounter</th>\n <th>http://hl7.org/fhir/StructureDefinition/Encounter</th>\n <th>;;;;;;;;;;;;;;;</th>\n <th>\n \n <b>code filter: </b>\n \n <br/>\n \n \n <span style=\"padding-left: 4px;\">\n <b>path: </b><span>class</span>\n </span>\n \n <br/>\n \n \n \n \n \n <p style=\"margin-bottom: 5px;\">\n <b>system: </b> <span><a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-v3-ActCode.html\">http://terminology.hl7.org/CodeSystem/v3-ActCode</a></span>\n </p>\n \n \n <p style=\"margin-bottom: 5px;\">\n <b>code: </b> <span>EMER</span>\n </p>\n \n \n <p style=\"margin-bottom: 5px;\">\n <b>display: </b> <span>emergency</span>\n </p>\n \n \n \n </th>\n </tr>\n \n <tr>\n <th>Encounter</th>\n <th>http://hl7.org/fhir/StructureDefinition/Encounter</th>\n <th>;;;;;;;;;;;;;;;</th>\n <th>\n \n <b>code filter: </b>\n \n <br/>\n \n \n <span style=\"padding-left: 4px;\">\n <b>path: </b><span>class</span>\n </span>\n \n <br/>\n \n \n \n \n \n <p style=\"margin-bottom: 5px;\">\n <b>system: </b> <span><a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-v3-ActCode.html\">http://terminology.hl7.org/CodeSystem/v3-ActCode</a></span>\n </p>\n \n \n <p style=\"margin-bottom: 5px;\">\n <b>code: </b> <span>OBSENC</span>\n </p>\n \n \n <p style=\"margin-bottom: 5px;\">\n <b>display: </b> <span>observation encounter</span>\n </p>\n \n \n \n </th>\n </tr>\n \n <tr>\n <th>Encounter</th>\n <th>http://hl7.org/fhir/StructureDefinition/Encounter</th>\n <th>;;;;;;;;;;;;;;;</th>\n <th>\n \n </th>\n </tr>\n \n <tr>\n <th>Condition</th>\n <th>http://hl7.org/fhir/StructureDefinition/Condition</th>\n <th>;;;;;;;;;;;;</th>\n <th>\n \n </th>\n </tr>\n \n <tr>\n <th>DiagnosticReport</th>\n <th>http://hl7.org/fhir/StructureDefinition/DiagnosticReport</th>\n <th>;;;;;;;;;;;;;;</th>\n <th>\n \n </th>\n </tr>\n \n <tr>\n <th>Observation</th>\n <th>http://hl7.org/fhir/StructureDefinition/Observation</th>\n <th>;;;;;;;;;;;;;;;;;;;;</th>\n <th>\n \n </th>\n </tr>\n \n <tr>\n <th>MedicationRequest</th>\n <th>http://hl7.org/fhir/StructureDefinition/MedicationRequest</th>\n <th>;;;;;;;;;;;;;;;;;;;;;</th>\n <th>\n \n </th>\n </tr>\n \n <tr>\n <th>MedicationAdministration</th>\n <th>http://hl7.org/fhir/StructureDefinition/MedicationAdministration</th>\n <th>;;;;;;;;;;;;;;;;;;;;</th>\n <th>\n \n </th>\n </tr>\n \n <tr>\n <th>Coverage</th>\n <th>http://hl7.org/fhir/StructureDefinition/Coverage</th>\n <th>;;;;;;;</th>\n <th>\n \n </th>\n </tr>\n \n <tr>\n <th>Device</th>\n <th>http://hl7.org/fhir/StructureDefinition/Device</th>\n <th>;;;;;;;;;;;</th>\n <th>\n \n </th>\n </tr>\n \n <tr>\n <th>Medication</th>\n <th>http://hl7.org/fhir/StructureDefinition/Medication</th>\n <th>;</th>\n <th>\n \n </th>\n </tr>\n \n <tr>\n <th>Procedure</th>\n <th>http://hl7.org/fhir/StructureDefinition/Procedure</th>\n <th>;;;;;;;;;;;;;</th>\n <th>\n \n </th>\n </tr>\n \n <tr>\n <th>Specimen</th>\n <th>http://hl7.org/fhir/StructureDefinition/Specimen</th>\n <th>;;;;;;;;;;;;</th>\n <th>\n \n </th>\n </tr>\n \n <tr>\n <th>ServiceRequest</th>\n <th>http://hl7.org/fhir/StructureDefinition/ServiceRequest</th>\n <th>;;;;;;;;;;;;;;;;</th>\n <th>\n \n </th>\n </tr>\n \n </table>\n </td>\n </tr>\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 NHSNAcuteCareHospitalMonthlyInitialPopulation version '2.0.0'\n\nusing FHIR version '4.0.1'\n\ninclude FHIRHelpers version '4.0.2' called FHIRHelpers\ninclude NHSNHelpers version '0.0.002' called NHSNHelpers\ninclude SharedResourceCreation version '0.1.010' called SharedResource\n\ncodesystem "ActCode": 'http://terminology.hl7.org/CodeSystem/v3-ActCode'\ncodesystem "Observation Category": 'http://terminology.hl7.org/CodeSystem/observation-category'\ncodesystem "LOINC": 'http://loinc.org' \ncodesystem "V2-0074": 'http://terminology.hl7.org/CodeSystem/v2-0074'\ncodesystem "Condition Category": 'http://terminology.hl7.org/CodeSystem/condition-category'\ncodesystem "US Core Condition Category": 'http://hl7.org/fhir/us/core/CodeSystem/condition-category'\ncodesystem "Condition Clinical Status": 'http://terminology.hl7.org/CodeSystem/condition-clinical'\ncodesystem "SNOMEDCT": 'http://snomed.info/sct'\ncodesystem "MedicationRequest Category": 'http://terminology.hl7.org/CodeSystem/medicationrequest-category'\n\nvalueset "Inpatient, Emergency, and Observation Locations": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.265'\nvalueset "Emergency Department Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292'\nvalueset "Encounter Inpatient": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307'\nvalueset "Observation Services": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143'\nvalueset "NHSN Inpatient Encounter Class Codes": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274'\n\n//code for Observation Category\ncode "laboratory": 'laboratory' from "Observation Category" display 'Laboratory'\ncode "social-history": 'social-history' from "Observation Category" display 'Social History'\ncode "vital-signs": 'vital-signs' from "Observation Category" display 'Vital Signs'\ncode "imaging": 'imaging' from "Observation Category" display 'Imaging'\ncode "procedure": 'procedure' from "Observation Category" display 'Procedure'\ncode "survey": 'survey' from "Observation Category" display 'Survey'\n\n//code for Condition category\n//code "problem-list-item": 'problem-list-item' from "Condition Category" display 'Problem List Item'\ncode "encounter-diagnosis": 'encounter-diagnosis' from "Condition Category" display 'Encounter Diagnosis'\n//code "health-concern": 'health-concern' from "US Core Condition Category" display 'Health Concern'\n\n//code for Diagnostic Report Category\ncode "LAB": 'LAB' from "V2-0074" display 'Laboratory'\ncode "Radiology": 'LP29684-5' from "LOINC" display 'Radiology'\ncode "Pathology": 'LP7839-6' from "LOINC" display 'Pathology'\ncode "Cardiology": 'LP29708-2' from "LOINC" display 'Cardiology'\n\n//code for Emergency Encounter Class\ncode "emergency": 'EMER' from "ActCode" display 'emergency'\ncode "observation encounter": 'OBSENC' from "ActCode" display 'observation encounter'\n\n//code for Condition clinicalStatus\ncode "active": 'active' from "Condition Clinical Status" display 'active'\n\n//code for Procedure category\ncode "Surgical procedure": '387713003' from "SNOMEDCT" display 'Surgical procedure'\n//code "Diagnostic procedure": '103693007' from "SNOMEDCT" display 'Diagnostic procedure' Code deprecated in SNOMED version 2023-09-01\ncode "Diagnostic intent (qualifier value)": '261004008' from "SNOMEDCT" display 'Diagnostic intent'\n\n//code for MedicationRequest category\ncode "inpatient": 'inpatient' from "MedicationRequest Category" display 'Inpatient'\ncode "outpatient": 'outpatient' from "MedicationRequest Category" display 'Outpatient'\n\n//code for ServiceRequest category (also uses Surgical procedure from Procedure categories)\ncode "Laboratory procedure": '108252007' from "SNOMEDCT" display 'Laboratory procedure'\ncode "Imaging": '363679005' from "SNOMEDCT" display 'Imaging'\n\nparameter "Measurement Period" \n default Interval[@2022-01-01T00:00:00.0, @2022-01-31T23:59:59.0)\n\ncontext Patient \n\ndefine "Qualifying Encounters During Measurement Period":\n ( [Encounter: "Encounter Inpatient"]\n union [Encounter: "Emergency Department Visit"]\n union [Encounter: "Observation Services"]\n union [Encounter: class in "NHSN Inpatient Encounter Class Codes"]\n union [Encounter: class ~ "emergency"]\n union [Encounter: class ~ "observation encounter"]) QualifyingEncounters\n where QualifyingEncounters.status in {'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error'}\n and QualifyingEncounters.period overlaps "Measurement Period" \n\ndefine "Encounters with Patient Hospital Locations":\n "Encounters" Encounters\n where exists(\n Encounters.location EncounterLocation\n where NHSNHelpers.GetLocation(EncounterLocation.location).type in "Inpatient, Emergency, and Observation Locations"\n and EncounterLocation.period overlaps Encounters.period\n )\n and Encounters.status in {'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error'}\n and Encounters.period overlaps "Measurement Period"\n\ndefine "Initial Population":\n "Qualifying Encounters During Measurement Period"\n union "Encounters with Patient Hospital Locations"\n\ndefine "Encounters":\n [Encounter]\n\ndefine "Conditions":\n [Condition]\n\ndefine "DiagnosticReports":\n [DiagnosticReport]\n\ndefine "Observations":\n [Observation]\n\ndefine "Get Locations from IP Encounters in Measurement Period":\n flatten("Initial Population" IP\n let locationElements: IP.location\n return\n locationElements LE\n let locationReference: LE.location\n return NHSNHelpers.GetLocation(locationReference))\n\ndefine "Medication IDs":\n ("SDE Medication Request"\n union "SDE Medication Administration") MedReqOrAdmin\n where MedReqOrAdmin.medication is FHIR.Reference\n and exists("Initial Population") //No longer need to check for timing here because it's checked in SDE Medication Request/Administriation\n return NHSNHelpers.GetId(MedReqOrAdmin.medication.reference)\n\n//============================================================================\n//Supplemental Data Element\n//When FHIR.canonical value is present, US Core 3.1.1 profiles are used\n//When FHIR.canonical value is not present, FHIR Base profiles are used\n//============================================================================\ndefine "SDE Condition":\n "Conditions" Conditions \n where exists(\n "Initial Population" IP\n//Check for Problem List Conditions that were recorded before or during IP \n where \n (exists(IP.diagnosis Diagnoses\n where NHSNHelpers.GetId(Diagnoses.condition.reference) = Conditions.id\n )\n or NHSNHelpers.GetId(Conditions.encounter.reference) = IP.id\n )\n and exists (Conditions.category categories\n where categories ~ "encounter-diagnosis"\n )\n )\n return ConditionResource(Conditions,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-condition'}},\n {"encounter-diagnosis"})\n\ndefine "SDE Coverage": \n\t[Coverage] Coverages\n where exists(\n "Initial Population" IP\n where Coverages.period overlaps IP.period)\n return CoverageResource(Coverages,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-coverage'}})\n\ndefine "SDE Device":\n [Device] Devices \n where exists("Initial Population")\n return DeviceResource(Devices,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-device'}})\n\n//This block collects all DiagnosticReport resources while also marking Lab and Note DiagnosticReports with the appropriate profiles\n//#Start DiagnosticReport block\ndefine "SDE DiagnosticReport Lab":\n "DiagnosticReports" DiagnosticReports\n where (exists(DiagnosticReports.category Category where Category ~ "LAB")\n and exists(\n "Initial Population" IP\n where NHSNHelpers."Normalize Interval"(DiagnosticReports.effective) overlaps IP.period))\n return DiagnosticReportLabResource(DiagnosticReports,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-diagnosticreport-lab'}},\n {"LAB", "Radiology", "Pathology", "Cardiology"})\n \ndefine "SDE DiagnosticReport Note":\n "DiagnosticReports" DiagnosticReports\n where ((exists(DiagnosticReports.category Category where Category ~ "Radiology"))\n or exists((DiagnosticReports.category Category where Category ~ "Pathology"))\n or exists((DiagnosticReports.category Category where Category ~ "Cardiology")))\n and exists(\n "Initial Population" IP\n where NHSNHelpers."Normalize Interval"(DiagnosticReports.effective) overlaps IP.period)\n return DiagnosticReportResource(DiagnosticReports,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-diagnosticreport-note'}},\n {"Radiology", "Pathology", "Cardiology", "LAB"})\n//#End DiagnosticReport block\n\ndefine "SDE Encounter": \n "Encounters" Encounters\n where not CheckIP(Encounters)\n and exists(\n "Initial Population" IP\n where Encounters.period overlaps IP.period)\n return EncounterResource(Encounters,\n {FHIR.canonical{value: 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-encounter'}})\n\ndefine "SDE IP Encounters":\n "Initial Population" IP\n return EncounterResource(IP, \n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-encounter'}})\n\ndefine "SDE Location":\n "Get Locations from IP Encounters in Measurement Period" Locations\n where exists("Initial Population")\n and Locations is not null\n return LocationResource(Locations,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-location'}})\n \ndefine "SDE Medication Administration":\n [MedicationAdministration] MedicationAdministrations \n where exists(\n "Initial Population" IP\n where NHSNHelpers."Normalize Interval"(MedicationAdministrations.effective) overlaps IP.period)\n return MedicationAdministrationResource(MedicationAdministrations,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-medicationadministration'}},\n {"inpatient", "outpatient"})\n \ndefine "SDE Medication Request":\n [MedicationRequest] MedicationRequests \n where exists(\n "Initial Population" IP\n where MedicationRequests.authoredOn during IP.period)\n return MedicationRequestResource(MedicationRequests,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-medicationrequest'}},\n {"inpatient", "outpatient"})\n \ndefine "SDE Medication":\n [Medication] Medications\n where Medications.id in "Medication IDs"\n return SharedResource.MedicationResource(Medications,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-medication'}})\n\ndefine "SDE Observation Lab Category":\n "Observations" Observations \n where (exists(Observations.category Category where Category ~ "laboratory"))\n and exists(\n "Initial Population" IP\n where NHSNHelpers."Normalize Interval"(Observations.effective) overlaps IP.period)\n return ObservationLabResource(Observations,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-observation-lab'}},\n {"imaging", "procedure", "vital-signs", "laboratory"})\n\n//Vital Signs Observation has its own profile in FHIR Base\ndefine "SDE Observation Vital Signs Category":\n "Observations" Observations \n where (exists(Observations.category Category where Category ~ "vital-signs"))\n and exists(\n "Initial Population" IP\n where NHSNHelpers."Normalize Interval"(Observations.effective) overlaps IP.period)\n return ObservationVitalSignsResource(Observations,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-observation-vitals'}},\n {"imaging", "procedure", "vital-signs", "laboratory"})\n\n//Defaulting to base FHIR profile as there are no individual profiles in US Core 3.1.1 that cover these Observation categories\ndefine "SDE Observation Category":\n "Observations" Observations \n where (/*(exists(Observations.category Category where Category ~ "social-history"))\n or (exists(Observations.category Category where Category ~ "survey"))\n or */(exists(Observations.category Category where Category ~ "imaging"))\n or (exists(Observations.category Category where Category ~ "procedure")))\n and exists(\n "Initial Population" IP\n where NHSNHelpers."Normalize Interval"(Observations.effective) overlaps IP.period)\n return ObservationResource(Observations,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-observation'}},\n {"imaging", "procedure", "vital-signs", "laboratory"})\n\ndefine "SDE Procedure":\n [Procedure] Procedures \n where exists(\n "Initial Population" IP\n where NHSNHelpers."Normalize Interval"(Procedures.performed) overlaps IP.period)\n return ProcedureResource(Procedures,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-procedure'}},\n {"Surgical procedure", "Diagnostic intent (qualifier value)"})\n\ndefine "SDE Specimen":\n [Specimen] Specimens\n where exists(\n "Initial Population" IP\n where NHSNHelpers."Normalize Interval"(Specimens.collection.collected) overlaps IP.period\n )\n return SpecimenResource(Specimens,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-specimen'}})\n\ndefine "SDE Service Request":\n [ServiceRequest] ServiceRequests\n where exists("Initial Population" IP\n where ServiceRequests.authoredOn during IP.period)\n return ServiceRequestResource(ServiceRequests,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/ach-monthly-servicerequest'}},\n {"Laboratory procedure", "Surgical procedure", "Imaging"})\n\ndefine "SDE Minimal Patient":\n Patient p\n return SharedResource.PatientResource(p,\n {FHIR.canonical{value: 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/cross-measure-patient'}})\n\n//\n//Functions\n//\ndefine function "CheckIP"(encounter Encounter):\n exists("Initial Population" IP\n where encounter.id = IP.id)\n\ndefine function "GetMedicationFrom"(choice Choice<FHIR.CodeableConcept, FHIR.Reference>):\n case\n when choice is FHIR.Reference then\n GetMedication(choice as FHIR.Reference)\n else\n null\n end\n\ndefine function "GetMedication"(reference Reference):\n singleton from (\n [Medication] Medications\n where Medications.id = NHSNHelpers.GetId(reference.reference)\n )\n\ndefine function "GetCondition"(reference Reference):\n singleton from (\n "Conditions" Conditions\n where Conditions.id = NHSNHelpers.GetId(reference.reference)\n )\n\ndefine function "GetEncounter"(reference Reference):\n singleton from (\n "Encounters" Encounters\n where Encounters.id = NHSNHelpers.GetId(reference.reference)\n )\n\ndefine function RemoveUnaccepted(codes List<FHIR.CodeableConcept>, accepted List<System.Code>):\n codes c\n where exists(\n accepted a\n where c ~ a\n )\n\ndefine function FilterCodeableConcepts(codes List<FHIR.CodeableConcept>, accepted List<System.Code>):\n if Count(accepted) > 0\n then RemoveUnaccepted(codes, accepted)\n else codes \n\n//\n//Measure Specific Resource Creation Functions\n//\n\ndefine function ConditionResource(condition Condition, profileURLs List<FHIR.canonical>, acceptedCategories List<System.Code>):\n condition c\n return Condition{\n id: FHIR.id {value: 'LCR-' + c.id},\n meta: SharedResource.MetaElement(c, profileURLs),\n extension: c.extension,\n clinicalStatus: c.clinicalStatus,\n verificationStatus: c.verificationStatus,\n category: FilterCodeableConcepts(c.category, acceptedCategories),\n code: c.code,\n subject: c.subject,\n encounter: c.encounter,\n onset: c.onset,\n abatement: c.abatement,\n recordedDate: c.recordedDate\n }\n\ndefine function CoverageResource(coverage Coverage, profileURLs List<FHIR.canonical>):\n coverage c\n return Coverage{\n id: FHIR.id{value: 'LCR-' + c.id},\n meta: SharedResource.MetaElement(c, profileURLs),\n extension: c.extension,\n status: c.status,\n type: c.type,\n beneficiary: c.beneficiary,\n period: c.period,\n payor: c.payor\n }\n\ndefine function DeviceResource(device Device, profileURLs List<FHIR.canonical>):\n device d\n return Device{\n id: FHIR.id{value: 'LCR-' + d.id},\n meta: SharedResource.MetaElement(d, profileURLs),\n extension: d.extension,\n status: d.status,\n expirationDate: d.expirationDate,\n lotNumber: d.lotNumber,\n serialNumber: d.serialNumber,\n modelNumber: d.modelNumber,\n partNumber: d.partNumber,\n type: d.type,\n patient: d.patient,\n parent: d.parent\n }\n\ndefine function DiagnosticReportCoding(coding List<Coding>):\n coding c\n return Coding{\n system: c.system,\n version: c.version,\n code: c.code,\n display: c.display\n }\n\ndefine function DiagnosticReportCategory(category List<CodeableConcept>):\n category c\n return CodeableConcept{\n coding: DiagnosticReportCoding(c.coding)\n }\n\ndefine function DiagnosticReportLabResource(diagnosticReport DiagnosticReport, profileURLs List<FHIR.canonical>, acceptedCategories List<System.Code>):\n diagnosticReport d\n return DiagnosticReport{\n id: FHIR.id{value: 'LCR-' + d.id},\n meta: SharedResource.MetaElement(d, profileURLs),\n extension: d.extension,\n basedOn: d.basedOn,\n status: d.status,\n category: FilterCodeableConcepts(DiagnosticReportCategory(d.category), acceptedCategories),\n code: d.code,\n subject: d.subject,\n encounter: d.encounter,\n effective: d.effective,\n issued: d.issued,\n specimen: d.specimen,\n result: d.result,\n conclusion: d.conclusion,\n conclusionCode: d.conclusionCode\n }\n\ndefine function DiagnosticReportResource(diagnosticReport DiagnosticReport, profileURLs List<FHIR.canonical>, acceptedCategories List<System.Code>):\n diagnosticReport d\n return DiagnosticReport{\n id: FHIR.id{value: 'LCR-' + d.id},\n meta: SharedResource.MetaElement(d, profileURLs),\n extension: d.extension,\n basedOn: d.basedOn,\n status: d.status,\n category: FilterCodeableConcepts(d.category, acceptedCategories),\n code: d.code,\n subject: d.subject,\n encounter: d.encounter,\n effective: d.effective,\n issued: d.issued,\n specimen: d.specimen,\n result: d.result,\n conclusion: d.conclusion,\n conclusionCode: d.conclusionCode\n }\n\ndefine function EncounterHospitalization(hospitalization FHIR.Encounter.Hospitalization):\n hospitalization h\n return FHIR.Encounter.Hospitalization{\n extension: h.extension,\n origin: h.origin,\n admitSource: h.admitSource,\n reAdmission: h.reAdmission,\n dietPreference: h.dietPreference,\n dischargeDisposition: h.dischargeDisposition\n }\n\ndefine function EncounterResource(encounter Encounter, profileURLs List<FHIR.canonical>):\n encounter e\n return Encounter{\n id: FHIR.id{value: 'LCR-' + e.id},\n meta: SharedResource.MetaElement(e, profileURLs),\n extension: e.extension,\n identifier: SharedResource.EncounterIdentifier(e.identifier),\n status: e.status,\n statusHistory: SharedResource.EncounterStatusHistory(e.statusHistory),\n class: e.class,\n classHistory: SharedResource.EncounterClassHistory(e.classHistory),\n type: e.type,\n subject: e.subject,\n period: e.period,\n reasonCode: e.reasonCode,\n diagnosis: SharedResource.EncounterDiagnosis(e.diagnosis),\n hospitalization: EncounterHospitalization(e.hospitalization),\n location: SharedResource.EncounterLocation(e.location),\n partOf: e.partOf\n }\n\ndefine function LocationResource(location Location, profileURLs List<FHIR.canonical>):\n location l\n return Location{\n id: FHIR.id {value: 'LCR-' + l.id},\n meta: SharedResource.MetaElement(l, profileURLs),\n extension: l.extension,\n status: l.status,\n name: l.name,\n alias: l.alias,\n type: l.type,\n physicalType: l.physicalType,\n managingOrganization: l.managingOrganization,\n partOf: l.partOf\n }\n\ndefine function MedicationRequestRepeat(repeat FHIR.Timing.Repeat):\n repeat r\n return FHIR.Timing.Repeat{\n bounds: r.bounds,\n count: r.count,\n countMax: r.countMax,\n "duration": r."duration",\n durationMax: r.durationMax,\n durationUnit: r.durationUnit,\n frequency: r.frequency,\n frequencyMax: r.frequencyMax,\n period: r.period,\n periodMax: r.periodMax,\n periodUnit: r.periodUnit,\n dayOfWeek: r.dayOfWeek,\n timeOfDay: r.timeOfDay,\n "when": r."when",\n offset: r.offset\n }\n\ndefine function MedicationRequestTiming(timing FHIR.Timing):\n timing t\n return FHIR.Timing{\n event: t.event,\n repeat: MedicationRequestRepeat(t.repeat),\n code: t.code\n }\n\ndefine function MedicationRequestDosageInstruction(dosageInstruction List<FHIR.Dosage>):\n dosageInstruction dI\n return FHIR.Dosage{\n text: dI.text,\n patientInstruction: dI.patientInstruction,\n timing: MedicationRequestTiming(dI.timing),\n asNeeded: dI.asNeeded,\n site: dI.site,\n route: dI.route,\n method: dI.method,\n doseAndRate: SharedResource.MedicationRequestDoseAndRate(dI.doseAndRate)\n }\n\ndefine function MedicationRequestResource(medicationRequest MedicationRequest, profileURLs List<FHIR.canonical>, acceptedCategories List<System.Code>):\n medicationRequest m\n return MedicationRequest{\n id: FHIR.id {value: 'LCR-' + m.id},\n meta: SharedResource.MetaElement(medicationRequest, profileURLs),\n extension: m.extension,\n status: m.status,\n statusReason: m.statusReason,\n intent: m.intent,\n category: FilterCodeableConcepts(m.category, acceptedCategories),\n priority: m.priority,\n doNotPerform: m.doNotPerform,\n reported: m.reported,\n medication: m.medication,\n subject: m.subject,\n encounter: m.encounter,\n authoredOn: m.authoredOn,\n requester: m.requester,\n recorder: m.recorder,\n reasonCode: m.reasonCode,\n reasonReference: m.reasonReference,\n instantiatesCanonical: m.instantiatesCanonical,\n instantiatesUri: m.instantiatesUri,\n courseOfTherapyType: m.courseOfTherapyType,\n dosageInstruction: SharedResource.MedicationRequestDosageInstruction(m.dosageInstruction)\n }\n\n define function MedicationAdministrationResource(medicationAdministration MedicationAdministration, profileURLs List<FHIR.canonical>, acceptedCategories List<System.Code>):\n medicationAdministration m\n return MedicationAdministration{\n id: FHIR.id {value: 'LCR-' + m.id},\n meta: SharedResource.MetaElement(m, profileURLs),\n extension: m.extension,\n instantiates: m.instantiates,\n partOf: m.partOf,\n status: m.status,\n statusReason: m.statusReason,\n category: FilterCodeableConcepts({m.category}, acceptedCategories)[0],\n medication: m.medication,\n subject: m.subject,\n context: m.context,\n supportingInformation: m.supportingInformation,\n effective: m.effective,\n performer: SharedResource.MedicationAdministrationPerformer(m.performer),\n reasonCode: m.reasonCode,\n reasonReference: m.reasonReference,\n request: m.request,\n device: m.device,\n note: m.note,\n dosage: SharedResource.MedicationAdministrationDosage(m.dosage),\n eventHistory: m.eventHistory\n }\n\ndefine function ObservationLabReferenceRange(referenceRange List<FHIR.Observation.ReferenceRange>):\n referenceRange rR\n return FHIR.Observation.ReferenceRange{\n low: rR.low,\n high: rR.high,\n type: rR.type,\n appliesTo: rR.appliesTo,\n age: rR.age\n }\n\ndefine function ObservationLabCoding(coding List<Coding>):\n coding c\n return Coding{\n system: c.system,\n version: c.version,\n code: c.code,\n display: c.display,\n userSelected: c.userSelected\n }\n\ndefine function ObservationLabCategory(category List<CodeableConcept>):\n category c\n return CodeableConcept{\n coding: ObservationLabCoding(c.coding),\n text: c.text\n }\n\ndefine function ObservationLabResource(observation Observation, profileURLs List<FHIR.canonical>, acceptedCategories List<System.Code>):\n observation o\n return Observation{\n id: FHIR.id {value: 'LCR-' + o.id},\n meta: SharedResource.MetaElement(o, profileURLs),\n extension: o.extension,\n partOf: o.partOf,\n status: o.status,\n category: FilterCodeableConcepts(ObservationLabCategory(o.category), acceptedCategories),\n code: o.code,\n subject: o.subject,\n encounter: o.encounter,\n effective: o.effective,\n issued: o.issued,\n value: o.value,\n dataAbsentReason: o.dataAbsentReason,\n interpretation: o.interpretation,\n bodySite: o.bodySite,\n method: o.method,\n specimen: o.specimen,\n referenceRange: ObservationLabReferenceRange(o.referenceRange),\n hasMember: o.hasMember,\n derivedFrom: o.derivedFrom,\n component: SharedResource.ObservationComponent(o.component)\n }\n\ndefine function ObservationReferenceRange(referenceRange List<FHIR.Observation.ReferenceRange>):\n referenceRange rR\n return FHIR.Observation.ReferenceRange{\n low: rR.low,\n high: rR.high,\n type: rR.type,\n appliesTo: rR.appliesTo,\n age: rR.age\n }\n\ndefine function ObservationResource(observation Observation, profileURLs List<FHIR.canonical>, acceptedCategories List<System.Code>):\n observation o\n return Observation{\n id: FHIR.id {value: 'LCR-' + o.id},\n meta: SharedResource.MetaElement(o, profileURLs),\n extension: o.extension,\n partOf: o.partOf,\n status: o.status,\n category: FilterCodeableConcepts(o.category, acceptedCategories),\n code: o.code,\n subject: o.subject,\n encounter: o.encounter,\n effective: o.effective,\n issued: o.issued,\n value: o.value,\n dataAbsentReason: o.dataAbsentReason,\n interpretation: o.interpretation,\n bodySite: o.bodySite,\n method: o.method,\n specimen: o.specimen,\n referenceRange: ObservationReferenceRange(o.referenceRange),\n hasMember: o.hasMember,\n derivedFrom: o.derivedFrom,\n component: SharedResource.ObservationComponent(o.component)\n }\n\ndefine function ObservationVitalSignsCoding(coding List<Coding>):\n coding c\n return Coding{\n system: c.system,\n version: c.version,\n code: c.code,\n display: c.display,\n userSelected: c.userSelected\n }\n\ndefine function ObservationVitalSignsCategory(category List<CodeableConcept>):\n category c\n return CodeableConcept{\n coding: ObservationVitalSignsCoding(c.coding),\n text: c.text\n }\n\ndefine function ObservationVitalSignsComponent(component List<FHIR.Observation.Component>):\n component c\n return FHIR.Observation.Component{\n code: c.code,\n value: c.value,\n dataAbsentReason: c.dataAbsentReason,\n interpretation: c.interpretation,\n referenceRange: SharedResource.ObservationReferenceRange(c.referenceRange)\n }\n\ndefine function ObservationVitalSignsReferenceRange(referenceRange List<FHIR.Observation.ReferenceRange>):\n referenceRange rR\n return FHIR.Observation.ReferenceRange{\n low: rR.low,\n high: rR.high,\n type: rR.type,\n appliesTo: rR.appliesTo,\n age: rR.age\n }\n\ndefine function ObservationVitalSignsResource(observation Observation, profileURLs List<FHIR.canonical>, acceptedCategories List<System.Code>):\n observation o\n return Observation{\n id: FHIR.id {value: 'LCR-' + o.id},\n meta: SharedResource.MetaElement(o, profileURLs),\n extension: o.extension,\n partOf: o.partOf,\n status: o.status,\n category: FilterCodeableConcepts(ObservationVitalSignsCategory(o.category), acceptedCategories),\n code: o.code,\n subject: o.subject,\n encounter: o.encounter,\n effective: o.effective,\n issued: o.issued,\n value: o.value,\n dataAbsentReason: o.dataAbsentReason,\n interpretation: o.interpretation,\n bodySite: o.bodySite,\n method: o.method,\n specimen: o.specimen,\n referenceRange: ObservationVitalSignsReferenceRange(o.referenceRange),\n hasMember: o.hasMember,\n derivedFrom: o.derivedFrom,\n component: ObservationVitalSignsComponent(o.component)\n }\n\n define function "GetProcedureExtensions"(domainResource DomainResource):\n domainResource.extension E\n where E.url != 'http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-recorded'\n return E\n \ndefine function ProcedureResource(procedure Procedure, profileURLs List<FHIR.canonical>, acceptedCategories List<System.Code>):\n procedure p\n return Procedure{\n id: FHIR.id {value: 'LCR-' + p.id},\n meta: SharedResource.MetaElement(p, profileURLs),\n extension: GetProcedureExtensions(p), \n basedOn: p.basedOn,\n partOf: p.partOf,\n status: p.status,\n category: FilterCodeableConcepts({p.category}, acceptedCategories)[0],\n code: p.code,\n subject: p.subject,\n encounter: p.encounter,\n performed: p.performed,\n location: p.location,\n reasonCode: p.reasonCode,\n reasonReference: p.reasonReference,\n bodySite: p.bodySite\n }\n\n define function ServiceRequestResource(serviceRequest ServiceRequest, profileURLs List<FHIR.canonical>, acceptedCategories List<System.Code>):\n serviceRequest sR\n return ServiceRequest{\n id: FHIR.id {value: 'LCR-' + sR.id},\n meta: SharedResource.MetaElement(sR, profileURLs),\n extension: sR.extension,\n basedOn: sR.basedOn,\n status: sR.status,\n intent: sR.intent,\n category: FilterCodeableConcepts(sR.category, acceptedCategories),\n priority: sR.priority,\n doNotPerform: sR.doNotPerform,\n code: sR.code,\n quantity: sR.quantity,\n subject: sR.subject,\n encounter: sR.encounter,\n occurrence: sR.occurrence,\n asNeeded: sR.asNeeded,\n authoredOn: sR.authoredOn,\n specimen: sR.specimen\n }\n\n define function SpecimenCollection(collection FHIR.Specimen.Collection):\n collection c\n return FHIR.Specimen.Collection{\n collector: c.collector,\n collected: c.collected,\n quantity: c.quantity,\n bodySite: c.bodySite\n }\n\n define function SpecimenResource(specimen Specimen, profileURLs List<FHIR.canonical>):\n specimen s\n return Specimen{\n id: FHIR.id {value: 'LCR-' + s.id},\n meta: SharedResource.MetaElement(s, profileURLs),\n extension: s.extension,\n identifier: s.identifier,\n accessionIdentifier: s.accessionIdentifier,\n status: s.status,\n type: s.type,\n subject: s.subject,\n parent: s.parent,\n request: s.request,\n collection: SpecimenCollection(s.collection),\n note: s.note\n }</code></pre></td></tr>\n </table>\n </td>\n </tr>\n \n \n \n </table>\n</div>\n</div>"
},
"contained" : [
{
"resourceType" : "Parameters",
"id" : "options",
"parameter" : [
{
"name" : "translatorVersion",
"valueString" : "3.27.0"
},
{
"name" : "option",
"valueString" : "EnableDateRangeOptimization"
},
{
"name" : "option",
"valueString" : "EnableAnnotations"
},
{
"name" : "option",
"valueString" : "EnableLocators"
},
{
"name" : "option",
"valueString" : "DisableListDemotion"
},
{
"name" : "option",
"valueString" : "DisableListPromotion"
},
{
"name" : "analyzeDataRequirements",
"valueBoolean" : false
},
{
"name" : "collapseDataRequirements",
"valueBoolean" : true
},
{
"name" : "compatibilityLevel",
"valueString" : "1.5"
},
{
"name" : "enableCqlOnly",
"valueBoolean" : false
},
{
"name" : "errorLevel",
"valueString" : "Info"
},
{
"name" : "signatureLevel",
"valueString" : "Overloads"
},
{
"name" : "validateUnits",
"valueBoolean" : true
},
{
"name" : "verifyOnly",
"valueBoolean" : false
}
]
}
],
"extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/cqf-cqlOptions",
"valueReference" : {
"reference" : "#options"
}
},
{
"url" : "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem",
"valueReference" : {
🔗 "reference" : "Device/cqf-tooling"
}
}
],
"url" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/NHSNAcuteCareHospitalMonthlyInitialPopulation",
"version" : "2.0.0-cibuild",
"name" : "NHSNAcuteCareHospitalMonthlyInitialPopulation",
"status" : "draft",
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library"
}
]
},
"date" : "2026-03-30T23:45:36+00:00",
"publisher" : "CDC National Healthcare Safety Network (NHSN)",
"contact" : [
{
"name" : "CDC National Healthcare Safety Network (NHSN)",
"telecom" : [
{
"system" : "url",
"value" : "http://www.cdc.gov/nhsn"
},
{
"system" : "email",
"value" : "nhsn@cdc.gov"
}
]
}
],
"jurisdiction" : [
{
"coding" : [
{
"system" : "urn:iso:std:iso:3166",
"code" : "US"
}
]
}
],
"relatedArtifact" : [
{
"type" : "depends-on",
"display" : "Library FHIRHelpers",
"resource" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/FHIRHelpers|4.0.2"
},
{
"type" : "depends-on",
"display" : "Library NHSNHelpers",
"resource" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/NHSNHelpers|0.0.002"
},
{
"type" : "depends-on",
"display" : "Library SharedResource",
"resource" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/SharedResourceCreation|0.1.010"
},
{
"type" : "depends-on",
"display" : "Code system ActCode",
"resource" : "http://terminology.hl7.org/CodeSystem/v3-ActCode|10.0.0"
},
{
"type" : "depends-on",
"display" : "Code system Observation Category",
"resource" : "http://terminology.hl7.org/CodeSystem/observation-category|2.0.0"
},
{
"type" : "depends-on",
"display" : "Code system LOINC",
"resource" : "http://loinc.org"
},
{
"type" : "depends-on",
"display" : "Code system V2-0074",
"resource" : "http://terminology.hl7.org/CodeSystem/v2-0074|3.0.0"
},
{
"type" : "depends-on",
"display" : "Code system Condition Category",
"resource" : "http://terminology.hl7.org/CodeSystem/condition-category|2.0.0"
},
{
"type" : "depends-on",
"display" : "Code system US Core Condition Category",
"resource" : "http://hl7.org/fhir/us/core/CodeSystem/condition-category|6.1.0"
},
{
"type" : "depends-on",
"display" : "Code system Condition Clinical Status",
"resource" : "http://terminology.hl7.org/CodeSystem/condition-clinical|3.0.0"
},
{
"type" : "depends-on",
"display" : "Code system SNOMEDCT",
"resource" : "http://snomed.info/sct"
},
{
"type" : "depends-on",
"display" : "Code system MedicationRequest Category",
"resource" : "http://terminology.hl7.org/CodeSystem/medicationrequest-category|2.0.0"
},
{
"type" : "depends-on",
"display" : "Value set Inpatient, Emergency, and Observation Locations",
"resource" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.265"
},
{
"type" : "depends-on",
"display" : "Value set Emergency Department Visit",
"resource" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292"
},
{
"type" : "depends-on",
"display" : "Value set Encounter Inpatient",
"resource" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307"
},
{
"type" : "depends-on",
"display" : "Value set Observation Services",
"resource" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143"
},
{
"type" : "depends-on",
"display" : "Value set NHSN Inpatient Encounter Class Codes",
"resource" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274"
}
],
"parameter" : [
{
"name" : "Measurement Period",
"use" : "in",
"min" : 0,
"max" : "1",
"type" : "Period"
},
{
"name" : "Patient",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Patient"
},
{
"name" : "Qualifying Encounters During Measurement Period",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Encounter"
},
{
"name" : "Encounters",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Encounter"
},
{
"name" : "Encounters with Patient Hospital Locations",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Encounter"
},
{
"name" : "Initial Population",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Encounter"
},
{
"name" : "Conditions",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Condition"
},
{
"name" : "DiagnosticReports",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "DiagnosticReport"
},
{
"name" : "Observations",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "Get Locations from IP Encounters in Measurement Period",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Location"
},
{
"name" : "SDE Medication Request",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "MedicationRequest"
},
{
"name" : "SDE Medication Administration",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "MedicationAdministration"
},
{
"name" : "Medication IDs",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "string"
},
{
"name" : "SDE Condition",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Condition"
},
{
"name" : "SDE Coverage",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Coverage"
},
{
"name" : "SDE Device",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Device"
},
{
"name" : "SDE DiagnosticReport Lab",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "DiagnosticReport"
},
{
"name" : "SDE DiagnosticReport Note",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "DiagnosticReport"
},
{
"name" : "SDE Encounter",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Encounter"
},
{
"name" : "SDE IP Encounters",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Encounter"
},
{
"name" : "SDE Location",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Location"
},
{
"name" : "SDE Medication",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Medication"
},
{
"name" : "SDE Observation Lab Category",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "SDE Observation Vital Signs Category",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "SDE Observation Category",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Observation"
},
{
"name" : "SDE Procedure",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Procedure"
},
{
"name" : "SDE Specimen",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "Specimen"
},
{
"name" : "SDE Service Request",
"use" : "out",
"min" : 0,
"max" : "*",
"type" : "ServiceRequest"
},
{
"name" : "SDE Minimal Patient",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Patient"
}
],
"dataRequirement" : [
{
"type" : "Patient",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Patient"
]
},
{
"type" : "Encounter",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Encounter"
],
"mustSupport" : [
"type",
"status",
"period",
"location",
"diagnosis",
"id",
"extension",
"identifier",
"statusHistory",
"class",
"classHistory",
"subject",
"reasonCode",
"hospitalization",
"partOf"
],
"codeFilter" : [
{
"path" : "type",
"valueSet" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307"
}
]
},
{
"type" : "Encounter",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Encounter"
],
"mustSupport" : [
"type",
"status",
"period",
"location",
"diagnosis",
"id",
"extension",
"identifier",
"statusHistory",
"class",
"classHistory",
"subject",
"reasonCode",
"hospitalization",
"partOf"
],
"codeFilter" : [
{
"path" : "type",
"valueSet" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292"
}
]
},
{
"type" : "Encounter",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Encounter"
],
"mustSupport" : [
"type",
"status",
"period",
"location",
"diagnosis",
"id",
"extension",
"identifier",
"statusHistory",
"class",
"classHistory",
"subject",
"reasonCode",
"hospitalization",
"partOf"
],
"codeFilter" : [
{
"path" : "type",
"valueSet" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143"
}
]
},
{
"type" : "Encounter",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Encounter"
],
"mustSupport" : [
"class",
"status",
"period",
"location",
"diagnosis",
"id",
"extension",
"identifier",
"statusHistory",
"classHistory",
"type",
"subject",
"reasonCode",
"hospitalization",
"partOf"
],
"codeFilter" : [
{
"path" : "class",
"valueSet" : "http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274"
}
]
},
{
"type" : "Encounter",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Encounter"
],
"mustSupport" : [
"class",
"status",
"period",
"location",
"diagnosis",
"id",
"extension",
"identifier",
"statusHistory",
"classHistory",
"type",
"subject",
"reasonCode",
"hospitalization",
"partOf"
],
"codeFilter" : [
{
"path" : "class",
"code" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/v3-ActCode",
"code" : "EMER",
"display" : "emergency"
}
]
}
]
},
{
"type" : "Encounter",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Encounter"
],
"mustSupport" : [
"class",
"status",
"period",
"location",
"diagnosis",
"id",
"extension",
"identifier",
"statusHistory",
"classHistory",
"type",
"subject",
"reasonCode",
"hospitalization",
"partOf"
],
"codeFilter" : [
{
"path" : "class",
"code" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/v3-ActCode",
"code" : "OBSENC",
"display" : "observation encounter"
}
]
}
]
},
{
"type" : "Encounter",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Encounter"
],
"mustSupport" : [
"status",
"period",
"location",
"diagnosis",
"id",
"extension",
"identifier",
"statusHistory",
"class",
"classHistory",
"type",
"subject",
"reasonCode",
"hospitalization",
"partOf"
]
},
{
"type" : "Condition",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Condition"
],
"mustSupport" : [
"id",
"extension",
"clinicalStatus",
"verificationStatus",
"category",
"code",
"subject",
"encounter",
"onset",
"abatement",
"recordedDate",
"encounter.reference"
]
},
{
"type" : "DiagnosticReport",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/DiagnosticReport"
],
"mustSupport" : [
"id",
"extension",
"basedOn",
"status",
"category",
"code",
"subject",
"encounter",
"effective",
"issued",
"specimen",
"result",
"conclusion",
"conclusionCode"
]
},
{
"type" : "Observation",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Observation"
],
"mustSupport" : [
"id",
"extension",
"partOf",
"status",
"category",
"code",
"subject",
"encounter",
"effective",
"issued",
"value",
"dataAbsentReason",
"interpretation",
"bodySite",
"method",
"specimen",
"referenceRange",
"hasMember",
"derivedFrom",
"component"
]
},
{
"type" : "MedicationRequest",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/MedicationRequest"
],
"mustSupport" : [
"authoredOn",
"id",
"extension",
"status",
"statusReason",
"intent",
"category",
"priority",
"doNotPerform",
"reported",
"medication",
"subject",
"encounter",
"requester",
"recorder",
"reasonCode",
"reasonReference",
"instantiatesCanonical",
"instantiatesUri",
"courseOfTherapyType",
"dosageInstruction"
]
},
{
"type" : "MedicationAdministration",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/MedicationAdministration"
],
"mustSupport" : [
"effective",
"id",
"extension",
"instantiates",
"partOf",
"status",
"statusReason",
"category",
"medication",
"subject",
"context",
"supportingInformation",
"performer",
"reasonCode",
"reasonReference",
"request",
"device",
"note",
"dosage",
"eventHistory"
]
},
{
"type" : "Coverage",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Coverage"
],
"mustSupport" : [
"period",
"id",
"extension",
"status",
"type",
"beneficiary",
"payor"
]
},
{
"type" : "Device",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Device"
],
"mustSupport" : [
"id",
"extension",
"status",
"expirationDate",
"lotNumber",
"serialNumber",
"modelNumber",
"partNumber",
"type",
"patient",
"parent"
]
},
{
"type" : "Medication",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Medication"
],
"mustSupport" : [
"id"
]
},
{
"type" : "Procedure",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Procedure"
],
"mustSupport" : [
"performed",
"id",
"basedOn",
"partOf",
"status",
"category",
"code",
"subject",
"encounter",
"location",
"reasonCode",
"reasonReference",
"bodySite"
]
},
{
"type" : "Specimen",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/Specimen"
],
"mustSupport" : [
"collection",
"collection.collected",
"id",
"extension",
"identifier",
"accessionIdentifier",
"status",
"type",
"subject",
"parent",
"request",
"note"
]
},
{
"type" : "ServiceRequest",
"profile" : [
🔗 "http://hl7.org/fhir/StructureDefinition/ServiceRequest"
],
"mustSupport" : [
"authoredOn",
"id",
"extension",
"basedOn",
"status",
"intent",
"category",
"priority",
"doNotPerform",
"code",
"quantity",
"subject",
"encounter",
"occurrence",
"asNeeded",
"specimen"
]
}
],
"content" : [
{
"contentType" : "text/cql",
"data" : "bGlicmFyeSBOSFNOQWN1dGVDYXJlSG9zcGl0YWxNb250aGx5SW5pdGlhbFBvcHVsYXRpb24gdmVyc2lvbiAnMi4wLjAnCgp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMicgY2FsbGVkIEZISVJIZWxwZXJzCmluY2x1ZGUgTkhTTkhlbHBlcnMgdmVyc2lvbiAnMC4wLjAwMicgY2FsbGVkIE5IU05IZWxwZXJzCmluY2x1ZGUgU2hhcmVkUmVzb3VyY2VDcmVhdGlvbiB2ZXJzaW9uICcwLjEuMDEwJyBjYWxsZWQgU2hhcmVkUmVzb3VyY2UKCmNvZGVzeXN0ZW0gIkFjdENvZGUiOiAnaHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS92My1BY3RDb2RlJwpjb2Rlc3lzdGVtICJPYnNlcnZhdGlvbiBDYXRlZ29yeSI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL29ic2VydmF0aW9uLWNhdGVnb3J5Jwpjb2Rlc3lzdGVtICJMT0lOQyI6ICdodHRwOi8vbG9pbmMub3JnJyAKY29kZXN5c3RlbSAiVjItMDA3NCI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL3YyLTAwNzQnCmNvZGVzeXN0ZW0gIkNvbmRpdGlvbiBDYXRlZ29yeSI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL2NvbmRpdGlvbi1jYXRlZ29yeScKY29kZXN5c3RlbSAiVVMgQ29yZSBDb25kaXRpb24gQ2F0ZWdvcnkiOiAnaHR0cDovL2hsNy5vcmcvZmhpci91cy9jb3JlL0NvZGVTeXN0ZW0vY29uZGl0aW9uLWNhdGVnb3J5Jwpjb2Rlc3lzdGVtICJDb25kaXRpb24gQ2xpbmljYWwgU3RhdHVzIjogJ2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vY29uZGl0aW9uLWNsaW5pY2FsJwpjb2Rlc3lzdGVtICJTTk9NRURDVCI6ICdodHRwOi8vc25vbWVkLmluZm8vc2N0Jwpjb2Rlc3lzdGVtICJNZWRpY2F0aW9uUmVxdWVzdCBDYXRlZ29yeSI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL21lZGljYXRpb25yZXF1ZXN0LWNhdGVnb3J5JwoKdmFsdWVzZXQgIklucGF0aWVudCwgRW1lcmdlbmN5LCBhbmQgT2JzZXJ2YXRpb24gTG9jYXRpb25zIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTA0Ni4yNjUnCnZhbHVlc2V0ICJFbWVyZ2VuY3kgRGVwYXJ0bWVudCBWaXNpdCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy4xMTcuMS43LjEuMjkyJwp2YWx1ZXNldCAiRW5jb3VudGVyIElucGF0aWVudCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy42NjYuNS4zMDcnCnZhbHVlc2V0ICJPYnNlcnZhdGlvbiBTZXJ2aWNlcyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExMTEuMTQzJwp2YWx1ZXNldCAiTkhTTiBJbnBhdGllbnQgRW5jb3VudGVyIENsYXNzIENvZGVzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTA0Ni4yNzQnCgovL2NvZGUgZm9yIE9ic2VydmF0aW9uIENhdGVnb3J5CmNvZGUgImxhYm9yYXRvcnkiOiAnbGFib3JhdG9yeScgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ0xhYm9yYXRvcnknCmNvZGUgInNvY2lhbC1oaXN0b3J5IjogJ3NvY2lhbC1oaXN0b3J5JyBmcm9tICJPYnNlcnZhdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnU29jaWFsIEhpc3RvcnknCmNvZGUgInZpdGFsLXNpZ25zIjogJ3ZpdGFsLXNpZ25zJyBmcm9tICJPYnNlcnZhdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnVml0YWwgU2lnbnMnCmNvZGUgImltYWdpbmciOiAnaW1hZ2luZycgZnJvbSAiT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ0ltYWdpbmcnCmNvZGUgInByb2NlZHVyZSI6ICdwcm9jZWR1cmUnIGZyb20gIk9ic2VydmF0aW9uIENhdGVnb3J5IiBkaXNwbGF5ICdQcm9jZWR1cmUnCmNvZGUgInN1cnZleSI6ICdzdXJ2ZXknIGZyb20gIk9ic2VydmF0aW9uIENhdGVnb3J5IiBkaXNwbGF5ICdTdXJ2ZXknCgovL2NvZGUgZm9yIENvbmRpdGlvbiBjYXRlZ29yeQovL2NvZGUgInByb2JsZW0tbGlzdC1pdGVtIjogJ3Byb2JsZW0tbGlzdC1pdGVtJyBmcm9tICJDb25kaXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ1Byb2JsZW0gTGlzdCBJdGVtJwpjb2RlICJlbmNvdW50ZXItZGlhZ25vc2lzIjogJ2VuY291bnRlci1kaWFnbm9zaXMnIGZyb20gIkNvbmRpdGlvbiBDYXRlZ29yeSIgZGlzcGxheSAnRW5jb3VudGVyIERpYWdub3NpcycKLy9jb2RlICJoZWFsdGgtY29uY2VybiI6ICdoZWFsdGgtY29uY2VybicgZnJvbSAiVVMgQ29yZSBDb25kaXRpb24gQ2F0ZWdvcnkiIGRpc3BsYXkgJ0hlYWx0aCBDb25jZXJuJwoKLy9jb2RlIGZvciBEaWFnbm9zdGljIFJlcG9ydCBDYXRlZ29yeQpjb2RlICJMQUIiOiAnTEFCJyBmcm9tICJWMi0wMDc0IiBkaXNwbGF5ICdMYWJvcmF0b3J5Jwpjb2RlICJSYWRpb2xvZ3kiOiAnTFAyOTY4NC01JyBmcm9tICJMT0lOQyIgZGlzcGxheSAnUmFkaW9sb2d5Jwpjb2RlICJQYXRob2xvZ3kiOiAnTFA3ODM5LTYnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdQYXRob2xvZ3knCmNvZGUgIkNhcmRpb2xvZ3kiOiAnTFAyOTcwOC0yJyBmcm9tICJMT0lOQyIgZGlzcGxheSAnQ2FyZGlvbG9neScKCi8vY29kZSBmb3IgRW1lcmdlbmN5IEVuY291bnRlciBDbGFzcwpjb2RlICJlbWVyZ2VuY3kiOiAnRU1FUicgZnJvbSAiQWN0Q29kZSIgZGlzcGxheSAnZW1lcmdlbmN5Jwpjb2RlICJvYnNlcnZhdGlvbiBlbmNvdW50ZXIiOiAnT0JTRU5DJyBmcm9tICJBY3RDb2RlIiBkaXNwbGF5ICdvYnNlcnZhdGlvbiBlbmNvdW50ZXInCgovL2NvZGUgZm9yIENvbmRpdGlvbiBjbGluaWNhbFN0YXR1cwpjb2RlICJhY3RpdmUiOiAnYWN0aXZlJyBmcm9tICJDb25kaXRpb24gQ2xpbmljYWwgU3RhdHVzIiBkaXNwbGF5ICdhY3RpdmUnCgovL2NvZGUgZm9yIFByb2NlZHVyZSBjYXRlZ29yeQpjb2RlICJTdXJnaWNhbCBwcm9jZWR1cmUiOiAnMzg3NzEzMDAzJyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnU3VyZ2ljYWwgcHJvY2VkdXJlJwovL2NvZGUgIkRpYWdub3N0aWMgcHJvY2VkdXJlIjogJzEwMzY5MzAwNycgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0RpYWdub3N0aWMgcHJvY2VkdXJlJyBDb2RlIGRlcHJlY2F0ZWQgaW4gU05PTUVEIHZlcnNpb24gMjAyMy0wOS0wMQpjb2RlICJEaWFnbm9zdGljIGludGVudCAocXVhbGlmaWVyIHZhbHVlKSI6ICcyNjEwMDQwMDgnIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdEaWFnbm9zdGljIGludGVudCcKCi8vY29kZSBmb3IgTWVkaWNhdGlvblJlcXVlc3QgY2F0ZWdvcnkKY29kZSAiaW5wYXRpZW50IjogJ2lucGF0aWVudCcgZnJvbSAiTWVkaWNhdGlvblJlcXVlc3QgQ2F0ZWdvcnkiIGRpc3BsYXkgJ0lucGF0aWVudCcKY29kZSAib3V0cGF0aWVudCI6ICdvdXRwYXRpZW50JyBmcm9tICJNZWRpY2F0aW9uUmVxdWVzdCBDYXRlZ29yeSIgZGlzcGxheSAnT3V0cGF0aWVudCcKCi8vY29kZSBmb3IgU2VydmljZVJlcXVlc3QgY2F0ZWdvcnkgKGFsc28gdXNlcyBTdXJnaWNhbCBwcm9jZWR1cmUgZnJvbSBQcm9jZWR1cmUgY2F0ZWdvcmllcykKY29kZSAiTGFib3JhdG9yeSBwcm9jZWR1cmUiOiAnMTA4MjUyMDA3JyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnTGFib3JhdG9yeSBwcm9jZWR1cmUnCmNvZGUgIkltYWdpbmciOiAnMzYzNjc5MDA1JyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnSW1hZ2luZycKCnBhcmFtZXRlciAiTWVhc3VyZW1lbnQgUGVyaW9kIiAKICAgIGRlZmF1bHQgSW50ZXJ2YWxbQDIwMjItMDEtMDFUMDA6MDA6MDAuMCwgQDIwMjItMDEtMzFUMjM6NTk6NTkuMCkKCmNvbnRleHQgUGF0aWVudCAKCmRlZmluZSAiUXVhbGlmeWluZyBFbmNvdW50ZXJzIER1cmluZyBNZWFzdXJlbWVudCBQZXJpb2QiOgogKCBbRW5jb3VudGVyOiAiRW5jb3VudGVyIElucGF0aWVudCJdCiAgdW5pb24gW0VuY291bnRlcjogIkVtZXJnZW5jeSBEZXBhcnRtZW50IFZpc2l0Il0KICB1bmlvbiBbRW5jb3VudGVyOiAiT2JzZXJ2YXRpb24gU2VydmljZXMiXQogIHVuaW9uIFtFbmNvdW50ZXI6IGNsYXNzIGluICJOSFNOIElucGF0aWVudCBFbmNvdW50ZXIgQ2xhc3MgQ29kZXMiXQogIHVuaW9uIFtFbmNvdW50ZXI6IGNsYXNzIH4gImVtZXJnZW5jeSJdCiAgdW5pb24gW0VuY291bnRlcjogY2xhc3MgfiAib2JzZXJ2YXRpb24gZW5jb3VudGVyIl0pIFF1YWxpZnlpbmdFbmNvdW50ZXJzCiAgd2hlcmUgUXVhbGlmeWluZ0VuY291bnRlcnMuc3RhdHVzIGluIHsnaW4tcHJvZ3Jlc3MnLCAnZmluaXNoZWQnLCAndHJpYWdlZCcsICdvbmxlYXZlJywgJ2VudGVyZWQtaW4tZXJyb3InfQogICAgYW5kIFF1YWxpZnlpbmdFbmNvdW50ZXJzLnBlcmlvZCBvdmVybGFwcyAiTWVhc3VyZW1lbnQgUGVyaW9kIiAKCmRlZmluZSAiRW5jb3VudGVycyB3aXRoIFBhdGllbnQgSG9zcGl0YWwgTG9jYXRpb25zIjoKICAiRW5jb3VudGVycyIgRW5jb3VudGVycwogIHdoZXJlIGV4aXN0cygKICAgIEVuY291bnRlcnMubG9jYXRpb24gRW5jb3VudGVyTG9jYXRpb24KICAgIHdoZXJlIE5IU05IZWxwZXJzLkdldExvY2F0aW9uKEVuY291bnRlckxvY2F0aW9uLmxvY2F0aW9uKS50eXBlIGluICJJbnBhdGllbnQsIEVtZXJnZW5jeSwgYW5kIE9ic2VydmF0aW9uIExvY2F0aW9ucyIKICAgICAgYW5kIEVuY291bnRlckxvY2F0aW9uLnBlcmlvZCBvdmVybGFwcyBFbmNvdW50ZXJzLnBlcmlvZAogICkKICBhbmQgRW5jb3VudGVycy5zdGF0dXMgaW4geydpbi1wcm9ncmVzcycsICdmaW5pc2hlZCcsICd0cmlhZ2VkJywgJ29ubGVhdmUnLCAnZW50ZXJlZC1pbi1lcnJvcid9CiAgYW5kIEVuY291bnRlcnMucGVyaW9kIG92ZXJsYXBzICJNZWFzdXJlbWVudCBQZXJpb2QiCgpkZWZpbmUgIkluaXRpYWwgUG9wdWxhdGlvbiI6CiAgIlF1YWxpZnlpbmcgRW5jb3VudGVycyBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIgogIHVuaW9uICJFbmNvdW50ZXJzIHdpdGggUGF0aWVudCBIb3NwaXRhbCBMb2NhdGlvbnMiCgpkZWZpbmUgIkVuY291bnRlcnMiOgogIFtFbmNvdW50ZXJdCgpkZWZpbmUgIkNvbmRpdGlvbnMiOgogIFtDb25kaXRpb25dCgpkZWZpbmUgIkRpYWdub3N0aWNSZXBvcnRzIjoKICBbRGlhZ25vc3RpY1JlcG9ydF0KCmRlZmluZSAiT2JzZXJ2YXRpb25zIjoKICBbT2JzZXJ2YXRpb25dCgpkZWZpbmUgIkdldCBMb2NhdGlvbnMgZnJvbSBJUCBFbmNvdW50ZXJzIGluIE1lYXN1cmVtZW50IFBlcmlvZCI6CiAgZmxhdHRlbigiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogIGxldCBsb2NhdGlvbkVsZW1lbnRzOiBJUC5sb2NhdGlvbgogIHJldHVybgogICAgbG9jYXRpb25FbGVtZW50cyBMRQogICAgbGV0IGxvY2F0aW9uUmVmZXJlbmNlOiBMRS5sb2NhdGlvbgogICAgcmV0dXJuIE5IU05IZWxwZXJzLkdldExvY2F0aW9uKGxvY2F0aW9uUmVmZXJlbmNlKSkKCmRlZmluZSAiTWVkaWNhdGlvbiBJRHMiOgogICgiU0RFIE1lZGljYXRpb24gUmVxdWVzdCIKICB1bmlvbiAiU0RFIE1lZGljYXRpb24gQWRtaW5pc3RyYXRpb24iKSBNZWRSZXFPckFkbWluCiAgd2hlcmUgTWVkUmVxT3JBZG1pbi5tZWRpY2F0aW9uIGlzIEZISVIuUmVmZXJlbmNlCiAgICBhbmQgZXhpc3RzKCJJbml0aWFsIFBvcHVsYXRpb24iKSAvL05vIGxvbmdlciBuZWVkIHRvIGNoZWNrIGZvciB0aW1pbmcgaGVyZSBiZWNhdXNlIGl0J3MgY2hlY2tlZCBpbiBTREUgTWVkaWNhdGlvbiBSZXF1ZXN0L0FkbWluaXN0cmlhdGlvbgogIHJldHVybiBOSFNOSGVscGVycy5HZXRJZChNZWRSZXFPckFkbWluLm1lZGljYXRpb24ucmVmZXJlbmNlKQoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vU3VwcGxlbWVudGFsIERhdGEgRWxlbWVudAovL1doZW4gRkhJUi5jYW5vbmljYWwgdmFsdWUgaXMgcHJlc2VudCwgVVMgQ29yZSAzLjEuMSBwcm9maWxlcyBhcmUgdXNlZAovL1doZW4gRkhJUi5jYW5vbmljYWwgdmFsdWUgaXMgbm90IHByZXNlbnQsIEZISVIgQmFzZSBwcm9maWxlcyBhcmUgdXNlZAovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGVmaW5lICJTREUgQ29uZGl0aW9uIjoKICAiQ29uZGl0aW9ucyIgQ29uZGl0aW9ucyAKICAgIHdoZXJlIGV4aXN0cygKICAgICJJbml0aWFsIFBvcHVsYXRpb24iIElQCi8vQ2hlY2sgZm9yIFByb2JsZW0gTGlzdCBDb25kaXRpb25zIHRoYXQgd2VyZSByZWNvcmRlZCBiZWZvcmUgb3IgZHVyaW5nIElQIAogICAgIHdoZXJlIAogICAgICAoZXhpc3RzKElQLmRpYWdub3NpcyBEaWFnbm9zZXMKICAgICAgICAgIHdoZXJlIE5IU05IZWxwZXJzLkdldElkKERpYWdub3Nlcy5jb25kaXRpb24ucmVmZXJlbmNlKSA9IENvbmRpdGlvbnMuaWQKICAgICAgICApCiAgICAgICAgb3IgTkhTTkhlbHBlcnMuR2V0SWQoQ29uZGl0aW9ucy5lbmNvdW50ZXIucmVmZXJlbmNlKSA9IElQLmlkCiAgICAgICkKICAgICAgYW5kIGV4aXN0cyAoQ29uZGl0aW9ucy5jYXRlZ29yeSBjYXRlZ29yaWVzCiAgICAgICAgd2hlcmUgY2F0ZWdvcmllcyB+ICJlbmNvdW50ZXItZGlhZ25vc2lzIgogICAgKQogICkKICByZXR1cm4gQ29uZGl0aW9uUmVzb3VyY2UoQ29uZGl0aW9ucywKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vd3d3LmNkYy5nb3Yvbmhzbi9maGlycG9ydGFsL2RxbS9pZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2FjaC1tb250aGx5LWNvbmRpdGlvbid9fSwKICAgeyJlbmNvdW50ZXItZGlhZ25vc2lzIn0pCgpkZWZpbmUgIlNERSBDb3ZlcmFnZSI6IAoJW0NvdmVyYWdlXSBDb3ZlcmFnZXMKICB3aGVyZSBleGlzdHMoCiAgICAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgd2hlcmUgQ292ZXJhZ2VzLnBlcmlvZCBvdmVybGFwcyBJUC5wZXJpb2QpCiAgcmV0dXJuIENvdmVyYWdlUmVzb3VyY2UoQ292ZXJhZ2VzLAogIHtGSElSLmNhbm9uaWNhbHt2YWx1ZTogJ2h0dHA6Ly93d3cuY2RjLmdvdi9uaHNuL2ZoaXJwb3J0YWwvZHFtL2lnL1N0cnVjdHVyZURlZmluaXRpb24vYWNoLW1vbnRobHktY292ZXJhZ2UnfX0pCgpkZWZpbmUgIlNERSBEZXZpY2UiOgogIFtEZXZpY2VdIERldmljZXMgCiAgd2hlcmUgZXhpc3RzKCJJbml0aWFsIFBvcHVsYXRpb24iKQogIHJldHVybiBEZXZpY2VSZXNvdXJjZShEZXZpY2VzLAogIHtGSElSLmNhbm9uaWNhbHt2YWx1ZTogJ2h0dHA6Ly93d3cuY2RjLmdvdi9uaHNuL2ZoaXJwb3J0YWwvZHFtL2lnL1N0cnVjdHVyZURlZmluaXRpb24vYWNoLW1vbnRobHktZGV2aWNlJ319KQoKLy9UaGlzIGJsb2NrIGNvbGxlY3RzIGFsbCBEaWFnbm9zdGljUmVwb3J0IHJlc291cmNlcyB3aGlsZSBhbHNvIG1hcmtpbmcgTGFiIGFuZCBOb3RlIERpYWdub3N0aWNSZXBvcnRzIHdpdGggdGhlIGFwcHJvcHJpYXRlIHByb2ZpbGVzCi8vI1N0YXJ0IERpYWdub3N0aWNSZXBvcnQgYmxvY2sKZGVmaW5lICJTREUgRGlhZ25vc3RpY1JlcG9ydCBMYWIiOgogICJEaWFnbm9zdGljUmVwb3J0cyIgRGlhZ25vc3RpY1JlcG9ydHMKICB3aGVyZSAoZXhpc3RzKERpYWdub3N0aWNSZXBvcnRzLmNhdGVnb3J5IENhdGVnb3J5IHdoZXJlIENhdGVnb3J5IH4gIkxBQiIpCiAgICBhbmQgZXhpc3RzKAogICAgICAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgICB3aGVyZSBOSFNOSGVscGVycy4iTm9ybWFsaXplIEludGVydmFsIihEaWFnbm9zdGljUmVwb3J0cy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZCkpCiAgcmV0dXJuIERpYWdub3N0aWNSZXBvcnRMYWJSZXNvdXJjZShEaWFnbm9zdGljUmVwb3J0cywKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vd3d3LmNkYy5nb3Yvbmhzbi9maGlycG9ydGFsL2RxbS9pZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2FjaC1tb250aGx5LWRpYWdub3N0aWNyZXBvcnQtbGFiJ319LAogIHsiTEFCIiwgIlJhZGlvbG9neSIsICJQYXRob2xvZ3kiLCAiQ2FyZGlvbG9neSJ9KQogCmRlZmluZSAiU0RFIERpYWdub3N0aWNSZXBvcnQgTm90ZSI6CiAgIkRpYWdub3N0aWNSZXBvcnRzIiBEaWFnbm9zdGljUmVwb3J0cwogIHdoZXJlICgoZXhpc3RzKERpYWdub3N0aWNSZXBvcnRzLmNhdGVnb3J5IENhdGVnb3J5IHdoZXJlIENhdGVnb3J5IH4gIlJhZGlvbG9neSIpKQogICAgb3IgZXhpc3RzKChEaWFnbm9zdGljUmVwb3J0cy5jYXRlZ29yeSBDYXRlZ29yeSB3aGVyZSBDYXRlZ29yeSB+ICJQYXRob2xvZ3kiKSkKICAgIG9yIGV4aXN0cygoRGlhZ25vc3RpY1JlcG9ydHMuY2F0ZWdvcnkgQ2F0ZWdvcnkgd2hlcmUgQ2F0ZWdvcnkgfiAiQ2FyZGlvbG9neSIpKSkKICAgIGFuZCBleGlzdHMoCiAgICAgICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgIHdoZXJlIE5IU05IZWxwZXJzLiJOb3JtYWxpemUgSW50ZXJ2YWwiKERpYWdub3N0aWNSZXBvcnRzLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kKQogIHJldHVybiBEaWFnbm9zdGljUmVwb3J0UmVzb3VyY2UoRGlhZ25vc3RpY1JlcG9ydHMsCiAge0ZISVIuY2Fub25pY2Fse3ZhbHVlOiAnaHR0cDovL3d3dy5jZGMuZ292L25oc24vZmhpcnBvcnRhbC9kcW0vaWcvU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtbW9udGhseS1kaWFnbm9zdGljcmVwb3J0LW5vdGUnfX0sCiAgeyJSYWRpb2xvZ3kiLCAiUGF0aG9sb2d5IiwgIkNhcmRpb2xvZ3kiLCAiTEFCIn0pCi8vI0VuZCBEaWFnbm9zdGljUmVwb3J0IGJsb2NrCgpkZWZpbmUgIlNERSBFbmNvdW50ZXIiOiAKICAiRW5jb3VudGVycyIgRW5jb3VudGVycwogIHdoZXJlIG5vdCBDaGVja0lQKEVuY291bnRlcnMpCiAgYW5kIGV4aXN0cygKICAgICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICB3aGVyZSBFbmNvdW50ZXJzLnBlcmlvZCBvdmVybGFwcyBJUC5wZXJpb2QpCiAgcmV0dXJuIEVuY291bnRlclJlc291cmNlKEVuY291bnRlcnMsCiAge0ZISVIuY2Fub25pY2Fse3ZhbHVlOiAnaHR0cDovL2hsNy5vcmcvZmhpci91cy9jb3JlL1N0cnVjdHVyZURlZmluaXRpb24vdXMtY29yZS1lbmNvdW50ZXInfX0pCgpkZWZpbmUgIlNERSBJUCBFbmNvdW50ZXJzIjoKICAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogIHJldHVybiBFbmNvdW50ZXJSZXNvdXJjZShJUCwgCiAge0ZISVIuY2Fub25pY2Fse3ZhbHVlOiAnaHR0cDovL3d3dy5jZGMuZ292L25oc24vZmhpcnBvcnRhbC9kcW0vaWcvU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtbW9udGhseS1lbmNvdW50ZXInfX0pCgpkZWZpbmUgIlNERSBMb2NhdGlvbiI6CiAgIkdldCBMb2NhdGlvbnMgZnJvbSBJUCBFbmNvdW50ZXJzIGluIE1lYXN1cmVtZW50IFBlcmlvZCIgTG9jYXRpb25zCiAgd2hlcmUgZXhpc3RzKCJJbml0aWFsIFBvcHVsYXRpb24iKQogIGFuZCBMb2NhdGlvbnMgaXMgbm90IG51bGwKICByZXR1cm4gTG9jYXRpb25SZXNvdXJjZShMb2NhdGlvbnMsCiAge0ZISVIuY2Fub25pY2Fse3ZhbHVlOiAnaHR0cDovL3d3dy5jZGMuZ292L25oc24vZmhpcnBvcnRhbC9kcW0vaWcvU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtbW9udGhseS1sb2NhdGlvbid9fSkKIApkZWZpbmUgIlNERSBNZWRpY2F0aW9uIEFkbWluaXN0cmF0aW9uIjoKICBbTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uXSBNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25zIAogIHdoZXJlIGV4aXN0cygKICAgICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICB3aGVyZSBOSFNOSGVscGVycy4iTm9ybWFsaXplIEludGVydmFsIihNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25zLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kKQogIHJldHVybiBNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25SZXNvdXJjZShNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25zLAogIHtGSElSLmNhbm9uaWNhbHt2YWx1ZTogJ2h0dHA6Ly93d3cuY2RjLmdvdi9uaHNuL2ZoaXJwb3J0YWwvZHFtL2lnL1N0cnVjdHVyZURlZmluaXRpb24vYWNoLW1vbnRobHktbWVkaWNhdGlvbmFkbWluaXN0cmF0aW9uJ319LAogIHsiaW5wYXRpZW50IiwgIm91dHBhdGllbnQifSkKIApkZWZpbmUgIlNERSBNZWRpY2F0aW9uIFJlcXVlc3QiOgogIFtNZWRpY2F0aW9uUmVxdWVzdF0gTWVkaWNhdGlvblJlcXVlc3RzIAogIHdoZXJlIGV4aXN0cygKICAgICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICB3aGVyZSBNZWRpY2F0aW9uUmVxdWVzdHMuYXV0aG9yZWRPbiBkdXJpbmcgSVAucGVyaW9kKQogIHJldHVybiBNZWRpY2F0aW9uUmVxdWVzdFJlc291cmNlKE1lZGljYXRpb25SZXF1ZXN0cywKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vd3d3LmNkYy5nb3Yvbmhzbi9maGlycG9ydGFsL2RxbS9pZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2FjaC1tb250aGx5LW1lZGljYXRpb25yZXF1ZXN0J319LAogIHsiaW5wYXRpZW50IiwgIm91dHBhdGllbnQifSkKICAKZGVmaW5lICJTREUgTWVkaWNhdGlvbiI6CiAgW01lZGljYXRpb25dIE1lZGljYXRpb25zCiAgd2hlcmUgTWVkaWNhdGlvbnMuaWQgaW4gIk1lZGljYXRpb24gSURzIgogIHJldHVybiBTaGFyZWRSZXNvdXJjZS5NZWRpY2F0aW9uUmVzb3VyY2UoTWVkaWNhdGlvbnMsCiAge0ZISVIuY2Fub25pY2Fse3ZhbHVlOiAnaHR0cDovL3d3dy5jZGMuZ292L25oc24vZmhpcnBvcnRhbC9kcW0vaWcvU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtbW9udGhseS1tZWRpY2F0aW9uJ319KQoKZGVmaW5lICJTREUgT2JzZXJ2YXRpb24gTGFiIENhdGVnb3J5IjoKICAiT2JzZXJ2YXRpb25zIiBPYnNlcnZhdGlvbnMgCiAgd2hlcmUgKGV4aXN0cyhPYnNlcnZhdGlvbnMuY2F0ZWdvcnkgQ2F0ZWdvcnkgd2hlcmUgQ2F0ZWdvcnkgfiAibGFib3JhdG9yeSIpKQogICAgYW5kIGV4aXN0cygKICAgICAgIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgd2hlcmUgTkhTTkhlbHBlcnMuIk5vcm1hbGl6ZSBJbnRlcnZhbCIoT2JzZXJ2YXRpb25zLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kKQogIHJldHVybiBPYnNlcnZhdGlvbkxhYlJlc291cmNlKE9ic2VydmF0aW9ucywKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vd3d3LmNkYy5nb3Yvbmhzbi9maGlycG9ydGFsL2RxbS9pZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2FjaC1tb250aGx5LW9ic2VydmF0aW9uLWxhYid9fSwKICB7ImltYWdpbmciLCAicHJvY2VkdXJlIiwgInZpdGFsLXNpZ25zIiwgImxhYm9yYXRvcnkifSkKCi8vVml0YWwgU2lnbnMgT2JzZXJ2YXRpb24gaGFzIGl0cyBvd24gcHJvZmlsZSBpbiBGSElSIEJhc2UKZGVmaW5lICJTREUgT2JzZXJ2YXRpb24gVml0YWwgU2lnbnMgQ2F0ZWdvcnkiOgogICJPYnNlcnZhdGlvbnMiIE9ic2VydmF0aW9ucyAKICB3aGVyZSAoZXhpc3RzKE9ic2VydmF0aW9ucy5jYXRlZ29yeSBDYXRlZ29yeSB3aGVyZSBDYXRlZ29yeSB+ICJ2aXRhbC1zaWducyIpKQogICAgYW5kIGV4aXN0cygKICAgICAgIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgICAgd2hlcmUgTkhTTkhlbHBlcnMuIk5vcm1hbGl6ZSBJbnRlcnZhbCIoT2JzZXJ2YXRpb25zLmVmZmVjdGl2ZSkgb3ZlcmxhcHMgSVAucGVyaW9kKQogIHJldHVybiBPYnNlcnZhdGlvblZpdGFsU2lnbnNSZXNvdXJjZShPYnNlcnZhdGlvbnMsCiAge0ZISVIuY2Fub25pY2Fse3ZhbHVlOiAnaHR0cDovL3d3dy5jZGMuZ292L25oc24vZmhpcnBvcnRhbC9kcW0vaWcvU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtbW9udGhseS1vYnNlcnZhdGlvbi12aXRhbHMnfX0sCiAgeyJpbWFnaW5nIiwgInByb2NlZHVyZSIsICJ2aXRhbC1zaWducyIsICJsYWJvcmF0b3J5In0pCgovL0RlZmF1bHRpbmcgdG8gYmFzZSBGSElSIHByb2ZpbGUgYXMgdGhlcmUgYXJlIG5vIGluZGl2aWR1YWwgcHJvZmlsZXMgaW4gVVMgQ29yZSAzLjEuMSB0aGF0IGNvdmVyIHRoZXNlIE9ic2VydmF0aW9uIGNhdGVnb3JpZXMKZGVmaW5lICJTREUgT2JzZXJ2YXRpb24gQ2F0ZWdvcnkiOgogICJPYnNlcnZhdGlvbnMiIE9ic2VydmF0aW9ucyAKICB3aGVyZSAoLyooZXhpc3RzKE9ic2VydmF0aW9ucy5jYXRlZ29yeSBDYXRlZ29yeSB3aGVyZSBDYXRlZ29yeSB+ICJzb2NpYWwtaGlzdG9yeSIpKQogICAgb3IgKGV4aXN0cyhPYnNlcnZhdGlvbnMuY2F0ZWdvcnkgQ2F0ZWdvcnkgd2hlcmUgQ2F0ZWdvcnkgfiAic3VydmV5IikpCiAgICBvciAqLyhleGlzdHMoT2JzZXJ2YXRpb25zLmNhdGVnb3J5IENhdGVnb3J5IHdoZXJlIENhdGVnb3J5IH4gImltYWdpbmciKSkKICAgIG9yIChleGlzdHMoT2JzZXJ2YXRpb25zLmNhdGVnb3J5IENhdGVnb3J5IHdoZXJlIENhdGVnb3J5IH4gInByb2NlZHVyZSIpKSkKICAgIGFuZCBleGlzdHMoCiAgICAgICJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgICAgIHdoZXJlIE5IU05IZWxwZXJzLiJOb3JtYWxpemUgSW50ZXJ2YWwiKE9ic2VydmF0aW9ucy5lZmZlY3RpdmUpIG92ZXJsYXBzIElQLnBlcmlvZCkKICByZXR1cm4gT2JzZXJ2YXRpb25SZXNvdXJjZShPYnNlcnZhdGlvbnMsCiAge0ZISVIuY2Fub25pY2Fse3ZhbHVlOiAnaHR0cDovL3d3dy5jZGMuZ292L25oc24vZmhpcnBvcnRhbC9kcW0vaWcvU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtbW9udGhseS1vYnNlcnZhdGlvbid9fSwKICB7ImltYWdpbmciLCAicHJvY2VkdXJlIiwgInZpdGFsLXNpZ25zIiwgImxhYm9yYXRvcnkifSkKCmRlZmluZSAiU0RFIFByb2NlZHVyZSI6CiAgW1Byb2NlZHVyZV0gUHJvY2VkdXJlcyAKICB3aGVyZSBleGlzdHMoCiAgICAiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgd2hlcmUgTkhTTkhlbHBlcnMuIk5vcm1hbGl6ZSBJbnRlcnZhbCIoUHJvY2VkdXJlcy5wZXJmb3JtZWQpIG92ZXJsYXBzIElQLnBlcmlvZCkKICAgICByZXR1cm4gUHJvY2VkdXJlUmVzb3VyY2UoUHJvY2VkdXJlcywKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vd3d3LmNkYy5nb3Yvbmhzbi9maGlycG9ydGFsL2RxbS9pZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2FjaC1tb250aGx5LXByb2NlZHVyZSd9fSwKICB7IlN1cmdpY2FsIHByb2NlZHVyZSIsICJEaWFnbm9zdGljIGludGVudCAocXVhbGlmaWVyIHZhbHVlKSJ9KQoKZGVmaW5lICJTREUgU3BlY2ltZW4iOgogIFtTcGVjaW1lbl0gU3BlY2ltZW5zCiAgd2hlcmUgZXhpc3RzKAogICAgIkluaXRpYWwgUG9wdWxhdGlvbiIgSVAKICAgIHdoZXJlIE5IU05IZWxwZXJzLiJOb3JtYWxpemUgSW50ZXJ2YWwiKFNwZWNpbWVucy5jb2xsZWN0aW9uLmNvbGxlY3RlZCkgb3ZlcmxhcHMgSVAucGVyaW9kCiAgKQogIHJldHVybiBTcGVjaW1lblJlc291cmNlKFNwZWNpbWVucywKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vd3d3LmNkYy5nb3Yvbmhzbi9maGlycG9ydGFsL2RxbS9pZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2FjaC1tb250aGx5LXNwZWNpbWVuJ319KQoKZGVmaW5lICJTREUgU2VydmljZSBSZXF1ZXN0IjoKICBbU2VydmljZVJlcXVlc3RdIFNlcnZpY2VSZXF1ZXN0cwogIHdoZXJlIGV4aXN0cygiSW5pdGlhbCBQb3B1bGF0aW9uIiBJUAogICAgd2hlcmUgU2VydmljZVJlcXVlc3RzLmF1dGhvcmVkT24gZHVyaW5nIElQLnBlcmlvZCkKICByZXR1cm4gU2VydmljZVJlcXVlc3RSZXNvdXJjZShTZXJ2aWNlUmVxdWVzdHMsCiAge0ZISVIuY2Fub25pY2Fse3ZhbHVlOiAnaHR0cDovL3d3dy5jZGMuZ292L25oc24vZmhpcnBvcnRhbC9kcW0vaWcvU3RydWN0dXJlRGVmaW5pdGlvbi9hY2gtbW9udGhseS1zZXJ2aWNlcmVxdWVzdCd9fSwKICB7IkxhYm9yYXRvcnkgcHJvY2VkdXJlIiwgIlN1cmdpY2FsIHByb2NlZHVyZSIsICJJbWFnaW5nIn0pCgpkZWZpbmUgIlNERSBNaW5pbWFsIFBhdGllbnQiOgogIFBhdGllbnQgcAogIHJldHVybiBTaGFyZWRSZXNvdXJjZS5QYXRpZW50UmVzb3VyY2UocCwKICB7RkhJUi5jYW5vbmljYWx7dmFsdWU6ICdodHRwOi8vd3d3LmNkYy5nb3Yvbmhzbi9maGlycG9ydGFsL2RxbS9pZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2Nyb3NzLW1lYXN1cmUtcGF0aWVudCd9fSkKCi8vCi8vRnVuY3Rpb25zCi8vCmRlZmluZSBmdW5jdGlvbiAiQ2hlY2tJUCIoZW5jb3VudGVyIEVuY291bnRlcik6CiAgZXhpc3RzKCJJbml0aWFsIFBvcHVsYXRpb24iIElQCiAgd2hlcmUgZW5jb3VudGVyLmlkID0gSVAuaWQpCgpkZWZpbmUgZnVuY3Rpb24gIkdldE1lZGljYXRpb25Gcm9tIihjaG9pY2UgQ2hvaWNlPEZISVIuQ29kZWFibGVDb25jZXB0LCBGSElSLlJlZmVyZW5jZT4pOgogIGNhc2UKICAgIHdoZW4gY2hvaWNlIGlzIEZISVIuUmVmZXJlbmNlIHRoZW4KICAgICAgR2V0TWVkaWNhdGlvbihjaG9pY2UgYXMgRkhJUi5SZWZlcmVuY2UpCiAgICBlbHNlCiAgICAgIG51bGwKICBlbmQKCmRlZmluZSBmdW5jdGlvbiAiR2V0TWVkaWNhdGlvbiIocmVmZXJlbmNlIFJlZmVyZW5jZSk6CiAgc2luZ2xldG9uIGZyb20gKAogICAgW01lZGljYXRpb25dIE1lZGljYXRpb25zCiAgICB3aGVyZSBNZWRpY2F0aW9ucy5pZCA9IE5IU05IZWxwZXJzLkdldElkKHJlZmVyZW5jZS5yZWZlcmVuY2UpCiAgKQoKZGVmaW5lIGZ1bmN0aW9uICJHZXRDb25kaXRpb24iKHJlZmVyZW5jZSBSZWZlcmVuY2UpOgogIHNpbmdsZXRvbiBmcm9tICgKICAgICJDb25kaXRpb25zIiBDb25kaXRpb25zCiAgICB3aGVyZSBDb25kaXRpb25zLmlkID0gTkhTTkhlbHBlcnMuR2V0SWQocmVmZXJlbmNlLnJlZmVyZW5jZSkKICApCgpkZWZpbmUgZnVuY3Rpb24gIkdldEVuY291bnRlciIocmVmZXJlbmNlIFJlZmVyZW5jZSk6CiAgc2luZ2xldG9uIGZyb20gKAogICAgIkVuY291bnRlcnMiIEVuY291bnRlcnMKICAgIHdoZXJlIEVuY291bnRlcnMuaWQgPSBOSFNOSGVscGVycy5HZXRJZChyZWZlcmVuY2UucmVmZXJlbmNlKQogICkKCmRlZmluZSBmdW5jdGlvbiBSZW1vdmVVbmFjY2VwdGVkKGNvZGVzIExpc3Q8RkhJUi5Db2RlYWJsZUNvbmNlcHQ+LCBhY2NlcHRlZCBMaXN0PFN5c3RlbS5Db2RlPik6CiAgY29kZXMgYwogIHdoZXJlIGV4aXN0cygKICAgIGFjY2VwdGVkIGEKICAgIHdoZXJlIGMgfiBhCiAgKQoKZGVmaW5lIGZ1bmN0aW9uIEZpbHRlckNvZGVhYmxlQ29uY2VwdHMoY29kZXMgTGlzdDxGSElSLkNvZGVhYmxlQ29uY2VwdD4sIGFjY2VwdGVkIExpc3Q8U3lzdGVtLkNvZGU+KToKICBpZiBDb3VudChhY2NlcHRlZCkgPiAwCiAgICB0aGVuIFJlbW92ZVVuYWNjZXB0ZWQoY29kZXMsIGFjY2VwdGVkKQogIGVsc2UgY29kZXMgICAgCgovLwovL01lYXN1cmUgU3BlY2lmaWMgUmVzb3VyY2UgQ3JlYXRpb24gRnVuY3Rpb25zCi8vCgpkZWZpbmUgZnVuY3Rpb24gQ29uZGl0aW9uUmVzb3VyY2UoY29uZGl0aW9uIENvbmRpdGlvbiwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4sIGFjY2VwdGVkQ2F0ZWdvcmllcyBMaXN0PFN5c3RlbS5Db2RlPik6CiAgY29uZGl0aW9uIGMKICByZXR1cm4gQ29uZGl0aW9uewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBjLmlkfSwKICAgIG1ldGE6IFNoYXJlZFJlc291cmNlLk1ldGFFbGVtZW50KGMsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogYy5leHRlbnNpb24sCiAgICBjbGluaWNhbFN0YXR1czogYy5jbGluaWNhbFN0YXR1cywKICAgIHZlcmlmaWNhdGlvblN0YXR1czogYy52ZXJpZmljYXRpb25TdGF0dXMsCiAgICBjYXRlZ29yeTogRmlsdGVyQ29kZWFibGVDb25jZXB0cyhjLmNhdGVnb3J5LCBhY2NlcHRlZENhdGVnb3JpZXMpLAogICAgY29kZTogYy5jb2RlLAogICAgc3ViamVjdDogYy5zdWJqZWN0LAogICAgZW5jb3VudGVyOiBjLmVuY291bnRlciwKICAgIG9uc2V0OiBjLm9uc2V0LAogICAgYWJhdGVtZW50OiBjLmFiYXRlbWVudCwKICAgIHJlY29yZGVkRGF0ZTogYy5yZWNvcmRlZERhdGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gQ292ZXJhZ2VSZXNvdXJjZShjb3ZlcmFnZSBDb3ZlcmFnZSwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIGNvdmVyYWdlIGMKICByZXR1cm4gQ292ZXJhZ2V7CiAgICBpZDogRkhJUi5pZHt2YWx1ZTogJ0xDUi0nICsgYy5pZH0sCiAgICBtZXRhOiBTaGFyZWRSZXNvdXJjZS5NZXRhRWxlbWVudChjLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IGMuZXh0ZW5zaW9uLAogICAgc3RhdHVzOiBjLnN0YXR1cywKICAgIHR5cGU6IGMudHlwZSwKICAgIGJlbmVmaWNpYXJ5OiBjLmJlbmVmaWNpYXJ5LAogICAgcGVyaW9kOiBjLnBlcmlvZCwKICAgIHBheW9yOiBjLnBheW9yCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIERldmljZVJlc291cmNlKGRldmljZSBEZXZpY2UsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBkZXZpY2UgZAogIHJldHVybiBEZXZpY2V7CiAgICBpZDogRkhJUi5pZHt2YWx1ZTogJ0xDUi0nICsgZC5pZH0sCiAgICBtZXRhOiBTaGFyZWRSZXNvdXJjZS5NZXRhRWxlbWVudChkLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IGQuZXh0ZW5zaW9uLAogICAgc3RhdHVzOiBkLnN0YXR1cywKICAgIGV4cGlyYXRpb25EYXRlOiBkLmV4cGlyYXRpb25EYXRlLAogICAgbG90TnVtYmVyOiBkLmxvdE51bWJlciwKICAgIHNlcmlhbE51bWJlcjogZC5zZXJpYWxOdW1iZXIsCiAgICBtb2RlbE51bWJlcjogZC5tb2RlbE51bWJlciwKICAgIHBhcnROdW1iZXI6IGQucGFydE51bWJlciwKICAgIHR5cGU6IGQudHlwZSwKICAgIHBhdGllbnQ6IGQucGF0aWVudCwKICAgIHBhcmVudDogZC5wYXJlbnQKICB9CgpkZWZpbmUgZnVuY3Rpb24gRGlhZ25vc3RpY1JlcG9ydENvZGluZyhjb2RpbmcgTGlzdDxDb2Rpbmc+KToKICBjb2RpbmcgYwogIHJldHVybiBDb2Rpbmd7CiAgICBzeXN0ZW06IGMuc3lzdGVtLAogICAgdmVyc2lvbjogYy52ZXJzaW9uLAogICAgY29kZTogYy5jb2RlLAogICAgZGlzcGxheTogYy5kaXNwbGF5CiAgfQoKZGVmaW5lIGZ1bmN0aW9uIERpYWdub3N0aWNSZXBvcnRDYXRlZ29yeShjYXRlZ29yeSBMaXN0PENvZGVhYmxlQ29uY2VwdD4pOgogIGNhdGVnb3J5IGMKICByZXR1cm4gQ29kZWFibGVDb25jZXB0ewogICAgY29kaW5nOiBEaWFnbm9zdGljUmVwb3J0Q29kaW5nKGMuY29kaW5nKQogIH0KCmRlZmluZSBmdW5jdGlvbiBEaWFnbm9zdGljUmVwb3J0TGFiUmVzb3VyY2UoZGlhZ25vc3RpY1JlcG9ydCBEaWFnbm9zdGljUmVwb3J0LCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPiwgYWNjZXB0ZWRDYXRlZ29yaWVzIExpc3Q8U3lzdGVtLkNvZGU+KToKICBkaWFnbm9zdGljUmVwb3J0IGQKICByZXR1cm4gRGlhZ25vc3RpY1JlcG9ydHsKICAgIGlkOiBGSElSLmlke3ZhbHVlOiAnTENSLScgKyBkLmlkfSwKICAgIG1ldGE6IFNoYXJlZFJlc291cmNlLk1ldGFFbGVtZW50KGQsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogZC5leHRlbnNpb24sCiAgICBiYXNlZE9uOiBkLmJhc2VkT24sCiAgICBzdGF0dXM6IGQuc3RhdHVzLAogICAgY2F0ZWdvcnk6IEZpbHRlckNvZGVhYmxlQ29uY2VwdHMoRGlhZ25vc3RpY1JlcG9ydENhdGVnb3J5KGQuY2F0ZWdvcnkpLCBhY2NlcHRlZENhdGVnb3JpZXMpLAogICAgY29kZTogZC5jb2RlLAogICAgc3ViamVjdDogZC5zdWJqZWN0LAogICAgZW5jb3VudGVyOiBkLmVuY291bnRlciwKICAgIGVmZmVjdGl2ZTogZC5lZmZlY3RpdmUsCiAgICBpc3N1ZWQ6IGQuaXNzdWVkLAogICAgc3BlY2ltZW46IGQuc3BlY2ltZW4sCiAgICByZXN1bHQ6IGQucmVzdWx0LAogICAgY29uY2x1c2lvbjogZC5jb25jbHVzaW9uLAogICAgY29uY2x1c2lvbkNvZGU6IGQuY29uY2x1c2lvbkNvZGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gRGlhZ25vc3RpY1JlcG9ydFJlc291cmNlKGRpYWdub3N0aWNSZXBvcnQgRGlhZ25vc3RpY1JlcG9ydCwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4sIGFjY2VwdGVkQ2F0ZWdvcmllcyBMaXN0PFN5c3RlbS5Db2RlPik6CiAgZGlhZ25vc3RpY1JlcG9ydCBkCiAgcmV0dXJuIERpYWdub3N0aWNSZXBvcnR7CiAgICBpZDogRkhJUi5pZHt2YWx1ZTogJ0xDUi0nICsgZC5pZH0sCiAgICBtZXRhOiBTaGFyZWRSZXNvdXJjZS5NZXRhRWxlbWVudChkLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IGQuZXh0ZW5zaW9uLAogICAgYmFzZWRPbjogZC5iYXNlZE9uLAogICAgc3RhdHVzOiBkLnN0YXR1cywKICAgIGNhdGVnb3J5OiBGaWx0ZXJDb2RlYWJsZUNvbmNlcHRzKGQuY2F0ZWdvcnksIGFjY2VwdGVkQ2F0ZWdvcmllcyksCiAgICBjb2RlOiBkLmNvZGUsCiAgICBzdWJqZWN0OiBkLnN1YmplY3QsCiAgICBlbmNvdW50ZXI6IGQuZW5jb3VudGVyLAogICAgZWZmZWN0aXZlOiBkLmVmZmVjdGl2ZSwKICAgIGlzc3VlZDogZC5pc3N1ZWQsCiAgICBzcGVjaW1lbjogZC5zcGVjaW1lbiwKICAgIHJlc3VsdDogZC5yZXN1bHQsCiAgICBjb25jbHVzaW9uOiBkLmNvbmNsdXNpb24sCiAgICBjb25jbHVzaW9uQ29kZTogZC5jb25jbHVzaW9uQ29kZQogIH0KCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJIb3NwaXRhbGl6YXRpb24oaG9zcGl0YWxpemF0aW9uIEZISVIuRW5jb3VudGVyLkhvc3BpdGFsaXphdGlvbik6CiAgaG9zcGl0YWxpemF0aW9uIGgKICByZXR1cm4gRkhJUi5FbmNvdW50ZXIuSG9zcGl0YWxpemF0aW9uewogICAgZXh0ZW5zaW9uOiBoLmV4dGVuc2lvbiwKICAgIG9yaWdpbjogaC5vcmlnaW4sCiAgICBhZG1pdFNvdXJjZTogaC5hZG1pdFNvdXJjZSwKICAgIHJlQWRtaXNzaW9uOiBoLnJlQWRtaXNzaW9uLAogICAgZGlldFByZWZlcmVuY2U6IGguZGlldFByZWZlcmVuY2UsCiAgICBkaXNjaGFyZ2VEaXNwb3NpdGlvbjogaC5kaXNjaGFyZ2VEaXNwb3NpdGlvbgogIH0KCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJSZXNvdXJjZShlbmNvdW50ZXIgRW5jb3VudGVyLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgZW5jb3VudGVyIGUKICByZXR1cm4gRW5jb3VudGVyewogICAgaWQ6IEZISVIuaWR7dmFsdWU6ICdMQ1ItJyArIGUuaWR9LAogICAgbWV0YTogU2hhcmVkUmVzb3VyY2UuTWV0YUVsZW1lbnQoZSwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBlLmV4dGVuc2lvbiwKICAgIGlkZW50aWZpZXI6IFNoYXJlZFJlc291cmNlLkVuY291bnRlcklkZW50aWZpZXIoZS5pZGVudGlmaWVyKSwKICAgIHN0YXR1czogZS5zdGF0dXMsCiAgICBzdGF0dXNIaXN0b3J5OiBTaGFyZWRSZXNvdXJjZS5FbmNvdW50ZXJTdGF0dXNIaXN0b3J5KGUuc3RhdHVzSGlzdG9yeSksCiAgICBjbGFzczogZS5jbGFzcywKICAgIGNsYXNzSGlzdG9yeTogU2hhcmVkUmVzb3VyY2UuRW5jb3VudGVyQ2xhc3NIaXN0b3J5KGUuY2xhc3NIaXN0b3J5KSwKICAgIHR5cGU6IGUudHlwZSwKICAgIHN1YmplY3Q6IGUuc3ViamVjdCwKICAgIHBlcmlvZDogZS5wZXJpb2QsCiAgICByZWFzb25Db2RlOiBlLnJlYXNvbkNvZGUsCiAgICBkaWFnbm9zaXM6IFNoYXJlZFJlc291cmNlLkVuY291bnRlckRpYWdub3NpcyhlLmRpYWdub3NpcyksCiAgICBob3NwaXRhbGl6YXRpb246IEVuY291bnRlckhvc3BpdGFsaXphdGlvbihlLmhvc3BpdGFsaXphdGlvbiksCiAgICBsb2NhdGlvbjogU2hhcmVkUmVzb3VyY2UuRW5jb3VudGVyTG9jYXRpb24oZS5sb2NhdGlvbiksCiAgICBwYXJ0T2Y6IGUucGFydE9mCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIExvY2F0aW9uUmVzb3VyY2UobG9jYXRpb24gTG9jYXRpb24sIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBsb2NhdGlvbiBsCiAgcmV0dXJuIExvY2F0aW9uewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBsLmlkfSwKICAgIG1ldGE6IFNoYXJlZFJlc291cmNlLk1ldGFFbGVtZW50KGwsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogbC5leHRlbnNpb24sCiAgICBzdGF0dXM6IGwuc3RhdHVzLAogICAgbmFtZTogbC5uYW1lLAogICAgYWxpYXM6IGwuYWxpYXMsCiAgICB0eXBlOiBsLnR5cGUsCiAgICBwaHlzaWNhbFR5cGU6IGwucGh5c2ljYWxUeXBlLAogICAgbWFuYWdpbmdPcmdhbml6YXRpb246IGwubWFuYWdpbmdPcmdhbml6YXRpb24sCiAgICBwYXJ0T2Y6IGwucGFydE9mCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25SZXF1ZXN0UmVwZWF0KHJlcGVhdCBGSElSLlRpbWluZy5SZXBlYXQpOgogIHJlcGVhdCByCiAgcmV0dXJuIEZISVIuVGltaW5nLlJlcGVhdHsKICAgIGJvdW5kczogci5ib3VuZHMsCiAgICBjb3VudDogci5jb3VudCwKICAgIGNvdW50TWF4OiByLmNvdW50TWF4LAogICAgImR1cmF0aW9uIjogci4iZHVyYXRpb24iLAogICAgZHVyYXRpb25NYXg6IHIuZHVyYXRpb25NYXgsCiAgICBkdXJhdGlvblVuaXQ6IHIuZHVyYXRpb25Vbml0LAogICAgZnJlcXVlbmN5OiByLmZyZXF1ZW5jeSwKICAgIGZyZXF1ZW5jeU1heDogci5mcmVxdWVuY3lNYXgsCiAgICBwZXJpb2Q6IHIucGVyaW9kLAogICAgcGVyaW9kTWF4OiByLnBlcmlvZE1heCwKICAgIHBlcmlvZFVuaXQ6IHIucGVyaW9kVW5pdCwKICAgIGRheU9mV2Vlazogci5kYXlPZldlZWssCiAgICB0aW1lT2ZEYXk6IHIudGltZU9mRGF5LAogICAgIndoZW4iOiByLiJ3aGVuIiwKICAgIG9mZnNldDogci5vZmZzZXQKICB9CgpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvblJlcXVlc3RUaW1pbmcodGltaW5nIEZISVIuVGltaW5nKToKICB0aW1pbmcgdAogIHJldHVybiBGSElSLlRpbWluZ3sKICAgIGV2ZW50OiB0LmV2ZW50LAogICAgcmVwZWF0OiBNZWRpY2F0aW9uUmVxdWVzdFJlcGVhdCh0LnJlcGVhdCksCiAgICBjb2RlOiB0LmNvZGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvblJlcXVlc3REb3NhZ2VJbnN0cnVjdGlvbihkb3NhZ2VJbnN0cnVjdGlvbiBMaXN0PEZISVIuRG9zYWdlPik6CiAgZG9zYWdlSW5zdHJ1Y3Rpb24gZEkKICByZXR1cm4gRkhJUi5Eb3NhZ2V7CiAgICB0ZXh0OiBkSS50ZXh0LAogICAgcGF0aWVudEluc3RydWN0aW9uOiBkSS5wYXRpZW50SW5zdHJ1Y3Rpb24sCiAgICB0aW1pbmc6IE1lZGljYXRpb25SZXF1ZXN0VGltaW5nKGRJLnRpbWluZyksCiAgICBhc05lZWRlZDogZEkuYXNOZWVkZWQsCiAgICBzaXRlOiBkSS5zaXRlLAogICAgcm91dGU6IGRJLnJvdXRlLAogICAgbWV0aG9kOiBkSS5tZXRob2QsCiAgICBkb3NlQW5kUmF0ZTogU2hhcmVkUmVzb3VyY2UuTWVkaWNhdGlvblJlcXVlc3REb3NlQW5kUmF0ZShkSS5kb3NlQW5kUmF0ZSkKICB9CgpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvblJlcXVlc3RSZXNvdXJjZShtZWRpY2F0aW9uUmVxdWVzdCBNZWRpY2F0aW9uUmVxdWVzdCwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4sIGFjY2VwdGVkQ2F0ZWdvcmllcyBMaXN0PFN5c3RlbS5Db2RlPik6CiAgbWVkaWNhdGlvblJlcXVlc3QgbQogIHJldHVybiBNZWRpY2F0aW9uUmVxdWVzdHsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgbS5pZH0sCiAgICBtZXRhOiBTaGFyZWRSZXNvdXJjZS5NZXRhRWxlbWVudChtZWRpY2F0aW9uUmVxdWVzdCwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBtLmV4dGVuc2lvbiwKICAgIHN0YXR1czogbS5zdGF0dXMsCiAgICBzdGF0dXNSZWFzb246IG0uc3RhdHVzUmVhc29uLAogICAgaW50ZW50OiBtLmludGVudCwKICAgIGNhdGVnb3J5OiBGaWx0ZXJDb2RlYWJsZUNvbmNlcHRzKG0uY2F0ZWdvcnksIGFjY2VwdGVkQ2F0ZWdvcmllcyksCiAgICBwcmlvcml0eTogbS5wcmlvcml0eSwKICAgIGRvTm90UGVyZm9ybTogbS5kb05vdFBlcmZvcm0sCiAgICByZXBvcnRlZDogbS5yZXBvcnRlZCwKICAgIG1lZGljYXRpb246IG0ubWVkaWNhdGlvbiwKICAgIHN1YmplY3Q6IG0uc3ViamVjdCwKICAgIGVuY291bnRlcjogbS5lbmNvdW50ZXIsCiAgICBhdXRob3JlZE9uOiBtLmF1dGhvcmVkT24sCiAgICByZXF1ZXN0ZXI6IG0ucmVxdWVzdGVyLAogICAgcmVjb3JkZXI6IG0ucmVjb3JkZXIsCiAgICByZWFzb25Db2RlOiBtLnJlYXNvbkNvZGUsCiAgICByZWFzb25SZWZlcmVuY2U6IG0ucmVhc29uUmVmZXJlbmNlLAogICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBtLmluc3RhbnRpYXRlc0Nhbm9uaWNhbCwKICAgIGluc3RhbnRpYXRlc1VyaTogbS5pbnN0YW50aWF0ZXNVcmksCiAgICBjb3Vyc2VPZlRoZXJhcHlUeXBlOiBtLmNvdXJzZU9mVGhlcmFweVR5cGUsCiAgICBkb3NhZ2VJbnN0cnVjdGlvbjogU2hhcmVkUmVzb3VyY2UuTWVkaWNhdGlvblJlcXVlc3REb3NhZ2VJbnN0cnVjdGlvbihtLmRvc2FnZUluc3RydWN0aW9uKQogIH0KCiAgZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25BZG1pbmlzdHJhdGlvblJlc291cmNlKG1lZGljYXRpb25BZG1pbmlzdHJhdGlvbiBNZWRpY2F0aW9uQWRtaW5pc3RyYXRpb24sIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+LCBhY2NlcHRlZENhdGVnb3JpZXMgTGlzdDxTeXN0ZW0uQ29kZT4pOgogIG1lZGljYXRpb25BZG1pbmlzdHJhdGlvbiBtCiAgcmV0dXJuIE1lZGljYXRpb25BZG1pbmlzdHJhdGlvbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgbS5pZH0sCiAgICBtZXRhOiBTaGFyZWRSZXNvdXJjZS5NZXRhRWxlbWVudChtLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IG0uZXh0ZW5zaW9uLAogICAgaW5zdGFudGlhdGVzOiBtLmluc3RhbnRpYXRlcywKICAgIHBhcnRPZjogbS5wYXJ0T2YsCiAgICBzdGF0dXM6IG0uc3RhdHVzLAogICAgc3RhdHVzUmVhc29uOiBtLnN0YXR1c1JlYXNvbiwKICAgIGNhdGVnb3J5OiBGaWx0ZXJDb2RlYWJsZUNvbmNlcHRzKHttLmNhdGVnb3J5fSwgYWNjZXB0ZWRDYXRlZ29yaWVzKVswXSwKICAgIG1lZGljYXRpb246IG0ubWVkaWNhdGlvbiwKICAgIHN1YmplY3Q6IG0uc3ViamVjdCwKICAgIGNvbnRleHQ6IG0uY29udGV4dCwKICAgIHN1cHBvcnRpbmdJbmZvcm1hdGlvbjogbS5zdXBwb3J0aW5nSW5mb3JtYXRpb24sCiAgICBlZmZlY3RpdmU6IG0uZWZmZWN0aXZlLAogICAgcGVyZm9ybWVyOiBTaGFyZWRSZXNvdXJjZS5NZWRpY2F0aW9uQWRtaW5pc3RyYXRpb25QZXJmb3JtZXIobS5wZXJmb3JtZXIpLAogICAgcmVhc29uQ29kZTogbS5yZWFzb25Db2RlLAogICAgcmVhc29uUmVmZXJlbmNlOiBtLnJlYXNvblJlZmVyZW5jZSwKICAgIHJlcXVlc3Q6IG0ucmVxdWVzdCwKICAgIGRldmljZTogbS5kZXZpY2UsCiAgICBub3RlOiBtLm5vdGUsCiAgICBkb3NhZ2U6IFNoYXJlZFJlc291cmNlLk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbkRvc2FnZShtLmRvc2FnZSksCiAgICBldmVudEhpc3Rvcnk6IG0uZXZlbnRIaXN0b3J5CiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE9ic2VydmF0aW9uTGFiUmVmZXJlbmNlUmFuZ2UocmVmZXJlbmNlUmFuZ2UgTGlzdDxGSElSLk9ic2VydmF0aW9uLlJlZmVyZW5jZVJhbmdlPik6CiAgcmVmZXJlbmNlUmFuZ2UgclIKICByZXR1cm4gRkhJUi5PYnNlcnZhdGlvbi5SZWZlcmVuY2VSYW5nZXsKICAgIGxvdzogclIubG93LAogICAgaGlnaDogclIuaGlnaCwKICAgIHR5cGU6IHJSLnR5cGUsCiAgICBhcHBsaWVzVG86IHJSLmFwcGxpZXNUbywKICAgIGFnZTogclIuYWdlCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE9ic2VydmF0aW9uTGFiQ29kaW5nKGNvZGluZyBMaXN0PENvZGluZz4pOgogIGNvZGluZyBjCiAgcmV0dXJuIENvZGluZ3sKICAgIHN5c3RlbTogYy5zeXN0ZW0sCiAgICB2ZXJzaW9uOiBjLnZlcnNpb24sCiAgICBjb2RlOiBjLmNvZGUsCiAgICBkaXNwbGF5OiBjLmRpc3BsYXksCiAgICB1c2VyU2VsZWN0ZWQ6IGMudXNlclNlbGVjdGVkCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE9ic2VydmF0aW9uTGFiQ2F0ZWdvcnkoY2F0ZWdvcnkgTGlzdDxDb2RlYWJsZUNvbmNlcHQ+KToKICBjYXRlZ29yeSBjCiAgcmV0dXJuIENvZGVhYmxlQ29uY2VwdHsKICAgIGNvZGluZzogT2JzZXJ2YXRpb25MYWJDb2RpbmcoYy5jb2RpbmcpLAogICAgdGV4dDogYy50ZXh0CiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE9ic2VydmF0aW9uTGFiUmVzb3VyY2Uob2JzZXJ2YXRpb24gT2JzZXJ2YXRpb24sIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+LCBhY2NlcHRlZENhdGVnb3JpZXMgTGlzdDxTeXN0ZW0uQ29kZT4pOgogIG9ic2VydmF0aW9uIG8KICByZXR1cm4gT2JzZXJ2YXRpb257CiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIG8uaWR9LAogICAgbWV0YTogU2hhcmVkUmVzb3VyY2UuTWV0YUVsZW1lbnQobywgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBvLmV4dGVuc2lvbiwKICAgIHBhcnRPZjogby5wYXJ0T2YsCiAgICBzdGF0dXM6IG8uc3RhdHVzLAogICAgY2F0ZWdvcnk6IEZpbHRlckNvZGVhYmxlQ29uY2VwdHMoT2JzZXJ2YXRpb25MYWJDYXRlZ29yeShvLmNhdGVnb3J5KSwgYWNjZXB0ZWRDYXRlZ29yaWVzKSwKICAgIGNvZGU6IG8uY29kZSwKICAgIHN1YmplY3Q6IG8uc3ViamVjdCwKICAgIGVuY291bnRlcjogby5lbmNvdW50ZXIsCiAgICBlZmZlY3RpdmU6IG8uZWZmZWN0aXZlLAogICAgaXNzdWVkOiBvLmlzc3VlZCwKICAgIHZhbHVlOiBvLnZhbHVlLAogICAgZGF0YUFic2VudFJlYXNvbjogby5kYXRhQWJzZW50UmVhc29uLAogICAgaW50ZXJwcmV0YXRpb246IG8uaW50ZXJwcmV0YXRpb24sCiAgICBib2R5U2l0ZTogby5ib2R5U2l0ZSwKICAgIG1ldGhvZDogby5tZXRob2QsCiAgICBzcGVjaW1lbjogby5zcGVjaW1lbiwKICAgIHJlZmVyZW5jZVJhbmdlOiBPYnNlcnZhdGlvbkxhYlJlZmVyZW5jZVJhbmdlKG8ucmVmZXJlbmNlUmFuZ2UpLAogICAgaGFzTWVtYmVyOiBvLmhhc01lbWJlciwKICAgIGRlcml2ZWRGcm9tOiBvLmRlcml2ZWRGcm9tLAogICAgY29tcG9uZW50OiBTaGFyZWRSZXNvdXJjZS5PYnNlcnZhdGlvbkNvbXBvbmVudChvLmNvbXBvbmVudCkKICB9CgpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25SZWZlcmVuY2VSYW5nZShyZWZlcmVuY2VSYW5nZSBMaXN0PEZISVIuT2JzZXJ2YXRpb24uUmVmZXJlbmNlUmFuZ2U+KToKICByZWZlcmVuY2VSYW5nZSByUgogIHJldHVybiBGSElSLk9ic2VydmF0aW9uLlJlZmVyZW5jZVJhbmdlewogICAgbG93OiByUi5sb3csCiAgICBoaWdoOiByUi5oaWdoLAogICAgdHlwZTogclIudHlwZSwKICAgIGFwcGxpZXNUbzogclIuYXBwbGllc1RvLAogICAgYWdlOiByUi5hZ2UKICB9CgpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25SZXNvdXJjZShvYnNlcnZhdGlvbiBPYnNlcnZhdGlvbiwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4sIGFjY2VwdGVkQ2F0ZWdvcmllcyBMaXN0PFN5c3RlbS5Db2RlPik6CiAgb2JzZXJ2YXRpb24gbwogIHJldHVybiBPYnNlcnZhdGlvbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgby5pZH0sCiAgICBtZXRhOiBTaGFyZWRSZXNvdXJjZS5NZXRhRWxlbWVudChvLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IG8uZXh0ZW5zaW9uLAogICAgcGFydE9mOiBvLnBhcnRPZiwKICAgIHN0YXR1czogby5zdGF0dXMsCiAgICBjYXRlZ29yeTogRmlsdGVyQ29kZWFibGVDb25jZXB0cyhvLmNhdGVnb3J5LCBhY2NlcHRlZENhdGVnb3JpZXMpLAogICAgY29kZTogby5jb2RlLAogICAgc3ViamVjdDogby5zdWJqZWN0LAogICAgZW5jb3VudGVyOiBvLmVuY291bnRlciwKICAgIGVmZmVjdGl2ZTogby5lZmZlY3RpdmUsCiAgICBpc3N1ZWQ6IG8uaXNzdWVkLAogICAgdmFsdWU6IG8udmFsdWUsCiAgICBkYXRhQWJzZW50UmVhc29uOiBvLmRhdGFBYnNlbnRSZWFzb24sCiAgICBpbnRlcnByZXRhdGlvbjogby5pbnRlcnByZXRhdGlvbiwKICAgIGJvZHlTaXRlOiBvLmJvZHlTaXRlLAogICAgbWV0aG9kOiBvLm1ldGhvZCwKICAgIHNwZWNpbWVuOiBvLnNwZWNpbWVuLAogICAgcmVmZXJlbmNlUmFuZ2U6IE9ic2VydmF0aW9uUmVmZXJlbmNlUmFuZ2Uoby5yZWZlcmVuY2VSYW5nZSksCiAgICBoYXNNZW1iZXI6IG8uaGFzTWVtYmVyLAogICAgZGVyaXZlZEZyb206IG8uZGVyaXZlZEZyb20sCiAgICBjb21wb25lbnQ6IFNoYXJlZFJlc291cmNlLk9ic2VydmF0aW9uQ29tcG9uZW50KG8uY29tcG9uZW50KQogIH0KCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvblZpdGFsU2lnbnNDb2RpbmcoY29kaW5nIExpc3Q8Q29kaW5nPik6CiAgY29kaW5nIGMKICByZXR1cm4gQ29kaW5newogICAgc3lzdGVtOiBjLnN5c3RlbSwKICAgIHZlcnNpb246IGMudmVyc2lvbiwKICAgIGNvZGU6IGMuY29kZSwKICAgIGRpc3BsYXk6IGMuZGlzcGxheSwKICAgIHVzZXJTZWxlY3RlZDogYy51c2VyU2VsZWN0ZWQKICB9CgpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25WaXRhbFNpZ25zQ2F0ZWdvcnkoY2F0ZWdvcnkgTGlzdDxDb2RlYWJsZUNvbmNlcHQ+KToKICBjYXRlZ29yeSBjCiAgcmV0dXJuIENvZGVhYmxlQ29uY2VwdHsKICAgIGNvZGluZzogT2JzZXJ2YXRpb25WaXRhbFNpZ25zQ29kaW5nKGMuY29kaW5nKSwKICAgIHRleHQ6IGMudGV4dAogIH0KCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvblZpdGFsU2lnbnNDb21wb25lbnQoY29tcG9uZW50IExpc3Q8RkhJUi5PYnNlcnZhdGlvbi5Db21wb25lbnQ+KToKICBjb21wb25lbnQgYwogIHJldHVybiBGSElSLk9ic2VydmF0aW9uLkNvbXBvbmVudHsKICAgIGNvZGU6IGMuY29kZSwKICAgIHZhbHVlOiBjLnZhbHVlLAogICAgZGF0YUFic2VudFJlYXNvbjogYy5kYXRhQWJzZW50UmVhc29uLAogICAgaW50ZXJwcmV0YXRpb246IGMuaW50ZXJwcmV0YXRpb24sCiAgICByZWZlcmVuY2VSYW5nZTogU2hhcmVkUmVzb3VyY2UuT2JzZXJ2YXRpb25SZWZlcmVuY2VSYW5nZShjLnJlZmVyZW5jZVJhbmdlKQogIH0KCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvblZpdGFsU2lnbnNSZWZlcmVuY2VSYW5nZShyZWZlcmVuY2VSYW5nZSBMaXN0PEZISVIuT2JzZXJ2YXRpb24uUmVmZXJlbmNlUmFuZ2U+KToKICByZWZlcmVuY2VSYW5nZSByUgogIHJldHVybiBGSElSLk9ic2VydmF0aW9uLlJlZmVyZW5jZVJhbmdlewogICAgbG93OiByUi5sb3csCiAgICBoaWdoOiByUi5oaWdoLAogICAgdHlwZTogclIudHlwZSwKICAgIGFwcGxpZXNUbzogclIuYXBwbGllc1RvLAogICAgYWdlOiByUi5hZ2UKICB9CgpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25WaXRhbFNpZ25zUmVzb3VyY2Uob2JzZXJ2YXRpb24gT2JzZXJ2YXRpb24sIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+LCBhY2NlcHRlZENhdGVnb3JpZXMgTGlzdDxTeXN0ZW0uQ29kZT4pOgogIG9ic2VydmF0aW9uIG8KICByZXR1cm4gT2JzZXJ2YXRpb257CiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIG8uaWR9LAogICAgbWV0YTogU2hhcmVkUmVzb3VyY2UuTWV0YUVsZW1lbnQobywgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBvLmV4dGVuc2lvbiwKICAgIHBhcnRPZjogby5wYXJ0T2YsCiAgICBzdGF0dXM6IG8uc3RhdHVzLAogICAgY2F0ZWdvcnk6IEZpbHRlckNvZGVhYmxlQ29uY2VwdHMoT2JzZXJ2YXRpb25WaXRhbFNpZ25zQ2F0ZWdvcnkoby5jYXRlZ29yeSksIGFjY2VwdGVkQ2F0ZWdvcmllcyksCiAgICBjb2RlOiBvLmNvZGUsCiAgICBzdWJqZWN0OiBvLnN1YmplY3QsCiAgICBlbmNvdW50ZXI6IG8uZW5jb3VudGVyLAogICAgZWZmZWN0aXZlOiBvLmVmZmVjdGl2ZSwKICAgIGlzc3VlZDogby5pc3N1ZWQsCiAgICB2YWx1ZTogby52YWx1ZSwKICAgIGRhdGFBYnNlbnRSZWFzb246IG8uZGF0YUFic2VudFJlYXNvbiwKICAgIGludGVycHJldGF0aW9uOiBvLmludGVycHJldGF0aW9uLAogICAgYm9keVNpdGU6IG8uYm9keVNpdGUsCiAgICBtZXRob2Q6IG8ubWV0aG9kLAogICAgc3BlY2ltZW46IG8uc3BlY2ltZW4sCiAgICByZWZlcmVuY2VSYW5nZTogT2JzZXJ2YXRpb25WaXRhbFNpZ25zUmVmZXJlbmNlUmFuZ2Uoby5yZWZlcmVuY2VSYW5nZSksCiAgICBoYXNNZW1iZXI6IG8uaGFzTWVtYmVyLAogICAgZGVyaXZlZEZyb206IG8uZGVyaXZlZEZyb20sCiAgICBjb21wb25lbnQ6IE9ic2VydmF0aW9uVml0YWxTaWduc0NvbXBvbmVudChvLmNvbXBvbmVudCkKICB9CgogZGVmaW5lIGZ1bmN0aW9uICJHZXRQcm9jZWR1cmVFeHRlbnNpb25zIihkb21haW5SZXNvdXJjZSBEb21haW5SZXNvdXJjZSk6CiAgZG9tYWluUmVzb3VyY2UuZXh0ZW5zaW9uIEUKICAgIHdoZXJlIEUudXJsICE9ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL3FpY29yZS9TdHJ1Y3R1cmVEZWZpbml0aW9uL3FpY29yZS1yZWNvcmRlZCcKICAgICByZXR1cm4gRQogCmRlZmluZSBmdW5jdGlvbiBQcm9jZWR1cmVSZXNvdXJjZShwcm9jZWR1cmUgUHJvY2VkdXJlLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPiwgYWNjZXB0ZWRDYXRlZ29yaWVzIExpc3Q8U3lzdGVtLkNvZGU+KToKICBwcm9jZWR1cmUgcAogIHJldHVybiBQcm9jZWR1cmV7CiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIHAuaWR9LAogICAgbWV0YTogU2hhcmVkUmVzb3VyY2UuTWV0YUVsZW1lbnQocCwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBHZXRQcm9jZWR1cmVFeHRlbnNpb25zKHApLCAKICAgIGJhc2VkT246IHAuYmFzZWRPbiwKICAgIHBhcnRPZjogcC5wYXJ0T2YsCiAgICBzdGF0dXM6IHAuc3RhdHVzLAogICAgY2F0ZWdvcnk6IEZpbHRlckNvZGVhYmxlQ29uY2VwdHMoe3AuY2F0ZWdvcnl9LCBhY2NlcHRlZENhdGVnb3JpZXMpWzBdLAogICAgY29kZTogcC5jb2RlLAogICAgc3ViamVjdDogcC5zdWJqZWN0LAogICAgZW5jb3VudGVyOiBwLmVuY291bnRlciwKICAgIHBlcmZvcm1lZDogcC5wZXJmb3JtZWQsCiAgICBsb2NhdGlvbjogcC5sb2NhdGlvbiwKICAgIHJlYXNvbkNvZGU6IHAucmVhc29uQ29kZSwKICAgIHJlYXNvblJlZmVyZW5jZTogcC5yZWFzb25SZWZlcmVuY2UsCiAgICBib2R5U2l0ZTogcC5ib2R5U2l0ZQogIH0KCiAgZGVmaW5lIGZ1bmN0aW9uIFNlcnZpY2VSZXF1ZXN0UmVzb3VyY2Uoc2VydmljZVJlcXVlc3QgU2VydmljZVJlcXVlc3QsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+LCBhY2NlcHRlZENhdGVnb3JpZXMgTGlzdDxTeXN0ZW0uQ29kZT4pOgogIHNlcnZpY2VSZXF1ZXN0IHNSCiAgcmV0dXJuIFNlcnZpY2VSZXF1ZXN0ewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBzUi5pZH0sCiAgICBtZXRhOiBTaGFyZWRSZXNvdXJjZS5NZXRhRWxlbWVudChzUiwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBzUi5leHRlbnNpb24sCiAgICBiYXNlZE9uOiBzUi5iYXNlZE9uLAogICAgc3RhdHVzOiBzUi5zdGF0dXMsCiAgICBpbnRlbnQ6IHNSLmludGVudCwKICAgIGNhdGVnb3J5OiBGaWx0ZXJDb2RlYWJsZUNvbmNlcHRzKHNSLmNhdGVnb3J5LCBhY2NlcHRlZENhdGVnb3JpZXMpLAogICAgcHJpb3JpdHk6IHNSLnByaW9yaXR5LAogICAgZG9Ob3RQZXJmb3JtOiBzUi5kb05vdFBlcmZvcm0sCiAgICBjb2RlOiBzUi5jb2RlLAogICAgcXVhbnRpdHk6IHNSLnF1YW50aXR5LAogICAgc3ViamVjdDogc1Iuc3ViamVjdCwKICAgIGVuY291bnRlcjogc1IuZW5jb3VudGVyLAogICAgb2NjdXJyZW5jZTogc1Iub2NjdXJyZW5jZSwKICAgIGFzTmVlZGVkOiBzUi5hc05lZWRlZCwKICAgIGF1dGhvcmVkT246IHNSLmF1dGhvcmVkT24sCiAgICBzcGVjaW1lbjogc1Iuc3BlY2ltZW4KICB9CgogIGRlZmluZSBmdW5jdGlvbiBTcGVjaW1lbkNvbGxlY3Rpb24oY29sbGVjdGlvbiBGSElSLlNwZWNpbWVuLkNvbGxlY3Rpb24pOgogIGNvbGxlY3Rpb24gYwogIHJldHVybiBGSElSLlNwZWNpbWVuLkNvbGxlY3Rpb257CiAgICBjb2xsZWN0b3I6IGMuY29sbGVjdG9yLAogICAgY29sbGVjdGVkOiBjLmNvbGxlY3RlZCwKICAgIHF1YW50aXR5OiBjLnF1YW50aXR5LAogICAgYm9keVNpdGU6IGMuYm9keVNpdGUKICB9CgogIGRlZmluZSBmdW5jdGlvbiBTcGVjaW1lblJlc291cmNlKHNwZWNpbWVuIFNwZWNpbWVuLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgc3BlY2ltZW4gcwogIHJldHVybiBTcGVjaW1lbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgcy5pZH0sCiAgICBtZXRhOiBTaGFyZWRSZXNvdXJjZS5NZXRhRWxlbWVudChzLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IHMuZXh0ZW5zaW9uLAogICAgaWRlbnRpZmllcjogcy5pZGVudGlmaWVyLAogICAgYWNjZXNzaW9uSWRlbnRpZmllcjogcy5hY2Nlc3Npb25JZGVudGlmaWVyLAogICAgc3RhdHVzOiBzLnN0YXR1cywKICAgIHR5cGU6IHMudHlwZSwKICAgIHN1YmplY3Q6IHMuc3ViamVjdCwKICAgIHBhcmVudDogcy5wYXJlbnQsCiAgICByZXF1ZXN0OiBzLnJlcXVlc3QsCiAgICBjb2xsZWN0aW9uOiBTcGVjaW1lbkNvbGxlY3Rpb24ocy5jb2xsZWN0aW9uKSwKICAgIG5vdGU6IHMubm90ZQogIH0=",
"url" : "http://www.cdc.gov/nhsn/fhirportal/dqm/ig/NHSNAcuteCareHospitalMonthlyInitialPopulation.cql"
}
]
}