CDC National Healthcare Safety Network (NHSN) Digital Quality Measures (dQM) Content Package IG
2.0.0-cibuild - Release 2 ci-build United States of America flag

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

: Shared Resource Creation - XML Representation

Page standards status: Trial-use Maturity Level: 1

Raw xml | Download


<Library xmlns="http://hl7.org/fhir">
  <id value="SharedResourceCreation"/>
  <text>
    <status value="extensions"/>
    <div xmlns="http://www.w3.org/1999/xhtml">
<div>
    <table class="grid dict">
        
        

        
        
        <tr>
            <th scope="row"><b>Id: </b></th>
            <td style="padding-left: 4px;">SharedResourceCreation</td>
        </tr>
        

        
        
        <tr>
            <th scope="row"><b>Version: </b></th>
            <td style="padding-left: 4px;">2.0.0-cibuild</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Url: </b></th>
            <td style="padding-left: 4px;"><a href="Library-SharedResourceCreation.html">SharedResourceCreation</a></td>
        </tr>
        

        

        

        
        <tr>
            <th scope="row"><b>Status: </b></th>
            <td style="padding-left: 4px;">draft</td>
        </tr>
        

        

        
        <tr>
            <th scope="row"><b>Type: </b></th>
            <td style="padding-left: 4px;">
                
                    
                        
                        <p style="margin-bottom: 5px;">
                            <b>system: </b> <span><a href="http://terminology.hl7.org/6.5.0/CodeSystem-library-type.html">http://terminology.hl7.org/CodeSystem/library-type</a></span>
                        </p>
                        
                        
                        <p style="margin-bottom: 5px;">
                            <b>code: </b> <span>logic-library</span>
                        </p>
                        
                        
                    
                
                
            </td>
        </tr>
        

        

        
        <tr>
            <th scope="row"><b>Date: </b></th>
            <td style="padding-left: 4px;">2025-11-10 16:09:20+0000</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Publisher: </b></th>
            <td style="padding-left: 4px;">CDC National Healthcare Safety Network (NHSN)</td>
        </tr>
        

        

        

        

        

        
        <tr>
            <th scope="row"><b>Jurisdiction: </b></th>
            <td style="padding-left: 4px;">US</td>
        </tr>
        

        

        

        

        

        

        

        
        <tr>
            <th scope="row"><b>Related Artifacts: </b></th>
            <td style="padding-left: 4px;">
                
                
                
                <p><b>Dependencies</b></p>
                <ul>
                  
                    <li><a href="http://fhir.org/guides/cqf/common/4.0.1/4.0.1/Library-FHIR-ModelInfo.html">http://fhir.org/guides/cqf/common/Library/FHIR-ModelInfo|4.0.1</a></li>
                  
                    <li><code>http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/FHIRHelpers|4.0.2</code></li>
                  
                </ul>
                
                
                
                
                
            </td>
        </tr>
        

        

        

        
        
        <tr>
          <td colspan="2">
            <table>
              <tr><th><a id="cql-content"><b>Content: </b></a> text/cql</th></tr>
              <tr><td><pre><code class="language-cql">library SharedResourceCreation version '0.1.010'

include FHIRHelpers version '4.0.2'

using FHIR version '4.0.1'

define function &quot;GetPatientExtensions&quot;(domainResource DomainResource):
  domainResource.extension E
  where E.url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-race'
    or E.url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity'
    or E.url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-tribal-affiliation'
    or E.url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex'
    or E.url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-sex'
    or E.url = 'http://www.cdc.gov/nhsn/fhirportal/dqm/ig/StructureDefinition/link-original-resource-id-extension'
  return E

define function &quot;MetaElement&quot;(resource Resource, profileURLs List&lt;FHIR.canonical&gt;):
  resource r
  return FHIR.Meta{
    extension: r.meta.extension,
    versionId: r.meta.versionId,
    lastUpdated: r.meta.lastUpdated,
    profile: profileURLs,
    security: r.meta.security,
    tag: r.meta.tag
  }

define function ConditionStage(stage List&lt;FHIR.Condition.Stage&gt;):
  stage s
  return FHIR.Condition.Stage{
    summary: s.summary,
    assessment: s.assessment,
    type: s.type
  }

define function ConditionEvidence(evidence List&lt;FHIR.Condition.Evidence&gt;):
  evidence e
  return FHIR.Condition.Evidence{
    code: e.code,
    detail: e.detail
  }

define function ConditionResource(condition Condition, profileURLs List&lt;FHIR.canonical&gt;):
  condition c
  return Condition{
    id: FHIR.id {value: 'LCR-' + c.id},
    meta: MetaElement(c, profileURLs),
    extension: c.extension,
    clinicalStatus: c.clinicalStatus,
    verificationStatus: c.verificationStatus,
    category: c.category,
    severity: c.severity,
    code: c.code,
    bodySite: c.bodySite,
    subject: c.subject,
    encounter: c.encounter,
    onset: c.onset,
    abatement: c.abatement,
    recordedDate: c.recordedDate,
    stage: ConditionStage(c.stage),
    evidence: ConditionEvidence(c.evidence),
    note: c.note
  }

define function CoverageClass(class List&lt;FHIR.Coverage.Class&gt;):
  class c
  return FHIR.Coverage.Class{
    value: c.value,
    name: c.name
  }

define function CoverageResource(coverage Coverage, profileURLs List&lt;FHIR.canonical&gt;):
  coverage c
  return Coverage{
    id: FHIR.id{value: 'LCR-' + c.id},
    meta: MetaElement(c, profileURLs),
    extension: c.extension,
    status: c.status,
    type: c.type,
    policyHolder: c.policyHolder,
    subscriber: c.subscriber,
    subscriberId: c.subscriberId,
    beneficiary: c.beneficiary,
    dependent: c.dependent,
    relationship: c.relationship,
    period: c.period,
    payor: c.payor,
    class: CoverageClass(c.class),
    order: c.order,
    network: c.network,
    subrogation: c.subrogation,
    contract: c.contract
  }

define function DiagnosticReportCoding(coding List&lt;Coding&gt;):
  coding c
  return Coding{
    system: c.system,
    version: c.version,
    code: c.code,
    display: c.display,
    userSelected: c.userSelected
  }

define function DiagnosticReportCategory(category List&lt;CodeableConcept&gt;):
  category c
  return CodeableConcept{
    coding: DiagnosticReportCoding(c.coding)
  }

define function DiagnosticReportLabResource(diagnosticReport DiagnosticReport, profileURLs List&lt;FHIR.canonical&gt;):
  diagnosticReport d
  return DiagnosticReport{
    id: FHIR.id{value: 'LCR-' + d.id},
    meta: MetaElement(d, profileURLs),
    extension: d.extension,
    basedOn: d.basedOn,
    status: d.status,
    category: DiagnosticReportCategory(d.category),
    code: d.code,
    subject: d.subject,
    encounter: d.encounter,
    effective: d.effective,
    issued: d.issued,
    performer: d.performer,
    resultsInterpreter: d.resultsInterpreter,
    specimen: d.specimen,
    result: d.result,
    conclusion: d.conclusion,
    conclusionCode: d.conclusionCode
  }

define function EncounterIdentifier(identifier List&lt;FHIR.Identifier&gt;):
  identifier i
  return FHIR.Identifier{
    use: i.use,
    type: i.type,
    system: i.system,
    value: i.value,
    period: i.period
  }

define function EncounterStatusHistory(statusHistory List&lt;FHIR.Encounter.StatusHistory&gt;):
  statusHistory sH
  return FHIR.Encounter.StatusHistory{
    status: sH.status,
    period: sH.period
  }

define function EncounterClassHistory(classHistory List&lt;FHIR.Encounter.ClassHistory&gt;):
  classHistory cH
  return FHIR.Encounter.ClassHistory{
    class: cH.class,
    period: cH.period
  }

/*No longer needed but saving for potential future use
define function EncounterParticipant(participant List&lt;FHIR.Encounter.Participant&gt;):
  participant p
  return FHIR.Encounter.Participant{
    type: p.type,
    period: p.period,
    individual: p.individual
  }*/

define function EncounterDiagnosis(diagnosis List&lt;FHIR.Encounter.Diagnosis&gt;):
  diagnosis d
  return FHIR.Encounter.Diagnosis{
    condition: d.condition,
    use: d.use,
    rank: d.rank
  }

define function EncounterHospitalization(hospitalization FHIR.Encounter.Hospitalization):
  hospitalization h
  return FHIR.Encounter.Hospitalization{
    preAdmissionIdentifier: h.preAdmissionIdentifier,
    origin: h.origin,
    admitSource: h.admitSource,
    reAdmission: h.reAdmission,
    dietPreference: h.dietPreference,
    specialCourtesy: h.specialCourtesy,
    specialArrangement: h.specialArrangement,
    destination: h.destination,
    dischargeDisposition: h.dischargeDisposition
  }

define function EncounterLocation(location List&lt;FHIR.Encounter.Location&gt;):
  location l
  return FHIR.Encounter.Location{
    location: l.location,
    status: l.status,
    physicalType: l.physicalType,
    period: l.period
  }

define function EncounterResource(encounter Encounter, profileURLs List&lt;FHIR.canonical&gt;):
  encounter e
  return Encounter{
    id: FHIR.id{value: 'LCR-' + e.id},
    meta: MetaElement(e, profileURLs),
    extension: e.extension,
    identifier: EncounterIdentifier(e.identifier),
    status: e.status,
    statusHistory: EncounterStatusHistory(e.statusHistory),
    class: e.class,
    classHistory: EncounterClassHistory(e.classHistory),
    type: e.type,
    serviceType: e.serviceType,
    priority: e.priority,
    subject: e.subject,
    period: e.period,
    length: e.length,
    reasonCode: e.reasonCode,
    reasonReference: e.reasonReference,
    diagnosis: EncounterDiagnosis(e.diagnosis),
    account: e.account,
    hospitalization: EncounterHospitalization(e.hospitalization),
    location: EncounterLocation(e.location),
    partOf: e.partOf
  }

define function ObservationLabCoding(coding List&lt;Coding&gt;):
  coding c
  return Coding{
    id: c.id,
    extension: c.extension,
    system: c.system,
    version: c.version,
    code: c.code,
    display: c.display,
    userSelected: c.userSelected
  }

define function ObservationLabCategory(category List&lt;CodeableConcept&gt;):
  category c
  return CodeableConcept{
    coding: ObservationLabCoding(c.coding),
    text: c.text
  }

define function ObservationReferenceRange(referenceRange List&lt;FHIR.Observation.ReferenceRange&gt;):
  referenceRange rR
  return FHIR.Observation.ReferenceRange{
    low: rR.low,
    high: rR.high,
    type: rR.type,
    appliesTo: rR.appliesTo,
    age: rR.age,
    text: rR.text
  }

define function ObservationComponent(component List&lt;FHIR.Observation.Component&gt;):
  component c
  return FHIR.Observation.Component{
    code: c.code,
    value: c.value,
    dataAbsentReason: c.dataAbsentReason,
    interpretation: c.interpretation,
    referenceRange: c.referenceRange
  }

define function ObservationLabResource(observation Observation, profileURLs List&lt;FHIR.canonical&gt;):
  observation o
  return Observation{
    id: FHIR.id {value: 'LCR-' + o.id},
    meta: MetaElement(o, profileURLs),
    extension: o.extension,
    basedOn: o.basedOn,
    partOf: o.partOf,
    status: o.status,
    category: ObservationLabCategory(o.category),
    code: o.code,
    subject: o.subject,
    focus: o.focus,
    encounter: o.encounter,
    effective: o.effective,
    issued: o.issued,
    performer: o.performer,
    value: o.value,
    dataAbsentReason: o.dataAbsentReason,
    interpretation: o.interpretation,
    note: o.note,
    bodySite: o.bodySite,
    method: o.method,
    specimen: o.specimen,
    device: o.device,
    referenceRange: ObservationReferenceRange(o.referenceRange),
    hasMember: o.hasMember,
    derivedFrom: o.derivedFrom,
    component: ObservationComponent(o.component)
  }

define function LocationAddress(address FHIR.Address):
  address a
  return FHIR.Address{
    use: a.use,
    type: a.type,
    text: a.text,
    line: a.line,
    city: a.city,
    district: a.district,
    state: a.state,
    postalCode: a.postalCode,
    country: a.country,
    period: a.period
  }

define function LocationPosition(position FHIR.Location.Position):
  position p
  return FHIR.Location.Position{
    longitude: p.longitude,
    latitude: p.latitude,
    altitude: p.altitude
  }

define function LocationHoursOfOperation(hoursOfOperation List&lt;FHIR.Location.HoursOfOperation&gt;):
  hoursOfOperation hOO
  return FHIR.Location.HoursOfOperation{
    daysOfWeek: hOO.daysOfWeek,
    allDay: hOO.allDay,
    openingTime: hOO.openingTime,
    closingTime: hOO.closingTime
  }

define function LocationResource(location Location, profileURLs List&lt;FHIR.canonical&gt;):
  location l
  return Location{
    id: FHIR.id {value: 'LCR-' + l.id},
    meta: MetaElement(l, profileURLs),
    extension: l.extension,
    status: l.status,
    operationalStatus: l.operationalStatus,
    name: l.name,
    alias: l.alias,
    description: l.description,
    mode: l.mode,
    type: l.type,
    telecom: l.telecom,
    address: LocationAddress(l.address),
    physicalType: l.physicalType,
    position: LocationPosition(l.position),
    managingOrganization: l.managingOrganization,
    partOf: l.partOf,
    hoursOfOperation: LocationHoursOfOperation(l.hoursOfOperation),
    availabilityExceptions: l.availabilityExceptions,
    endpoint: l.endpoint
  }

define function MedicationIngredient(ingredient List&lt;FHIR.Medication.Ingredient&gt;):
  ingredient i
  return FHIR.Medication.Ingredient{
    item: i.item,
    strength: i.strength
  }

define function MedicationBatch(batch FHIR.Medication.Batch):
  batch b
  return FHIR.Medication.Batch{
    lotNumber: b.lotNumber,
    expirationDate: b.expirationDate
  }

define function MedicationResource(medication Medication, profileURLs List&lt;FHIR.canonical&gt;):
  medication m
  return Medication{
    id: FHIR.id {value: 'LCR-' + m.id},
    meta: MetaElement(m, profileURLs),
    extension: m.extension,
    code: m.code,
    status: m.status,
    manufacturer: m.manufacturer,
    form: m.form,
    amount: m.amount,
    ingredient: MedicationIngredient(m.ingredient),
    batch: MedicationBatch(m.batch)
  }

define function MedicationAdministrationPerformer(performer List&lt;FHIR.MedicationAdministration.Performer&gt;):
  performer p
  return FHIR.MedicationAdministration.Performer{
    function: p.function,
    actor: p.actor
  }

define function MedicationAdministrationDosage(dosage FHIR.MedicationAdministration.Dosage):
  dosage d
  return FHIR.MedicationAdministration.Dosage{
    text: d.text,
    site: d.site,
    route: d.route,
    method: d.method,
    dose: d.dose,
    rate: d.rate
  }

define function MedicationAdministrationResource(medicationAdministration MedicationAdministration, profileURLs List&lt;FHIR.canonical&gt;):
  medicationAdministration m
  return MedicationAdministration{
    id: FHIR.id {value: 'LCR-' + m.id},
    meta: MetaElement(m, profileURLs),
    extension: m.extension,
    instantiates: m.instantiates,
    partOf: m.partOf,
    status: m.status,
    statusReason: m.statusReason,
    category: m.category,
    medication: m.medication,
    subject: m.subject,
    context: m.context,
    supportingInformation: m.supportingInformation,
    effective: m.effective,
    performer: MedicationAdministrationPerformer(m.performer),
    reasonCode: m.reasonCode,
    reasonReference: m.reasonReference,
    request: m.request,
    device: m.device,
    note: m.note,
    dosage: MedicationAdministrationDosage(m.dosage),
    eventHistory: m.eventHistory
  }

define function MedicationRequestDoseAndRate(doseAndRate List&lt;FHIR.Dosage.DoseAndRate&gt;):
  doseAndRate dR
  return FHIR.Dosage.DoseAndRate{
    type: dR.type,
    dose: dR.dose,
    rate: dR.rate
  }

define function MedicationRequestDosageInstruction(dosageInstruction List&lt;FHIR.Dosage&gt;):
  dosageInstruction dI
  return FHIR.Dosage{
    text: dI.text,
    patientInstruction: dI.patientInstruction,
    timing: dI.timing,
    asNeeded: dI.asNeeded,
    site: dI.site,
    route: dI.route,
    method: dI.method,
    doseAndRate: MedicationRequestDoseAndRate(dI.doseAndRate)
  }

define function MedicationRequestResource(medicationRequest MedicationRequest, profileURLs List&lt;FHIR.canonical&gt;):
  medicationRequest m
  return MedicationRequest{
    id: FHIR.id {value: 'LCR-' + m.id},
    meta: MetaElement(medicationRequest, profileURLs),
    extension: m.extension,
    status: m.status,
    statusReason: m.statusReason,
    intent: m.intent,
    category: m.category,
    priority: m.priority,
    doNotPerform: m.doNotPerform,
    reported: m.reported,
    medication: m.medication,
    subject: m.subject,
    encounter: m.encounter,
    authoredOn: m.authoredOn,
    requester: m.requester,
    recorder: m.recorder,
    reasonCode: m.reasonCode,
    reasonReference: m.reasonReference,
    instantiatesCanonical: m.instantiatesCanonical,
    instantiatesUri: m.instantiatesUri,
    courseOfTherapyType: m.courseOfTherapyType,
    dosageInstruction: MedicationRequestDosageInstruction(m.dosageInstruction)
  }

/* No longer needed but saving in case it's useful later
define function PatientIdentifier(identifier List&lt;FHIR.Identifier&gt;):
  identifier i
  return FHIR.Identifier{
    id: i.id,
    extension: i.extension,
    use: i.use,
    type: i.type,
    system: i.system,
    value: i.value,
    period: i.period,
    assigner: i.assigner
  }*/

define function PatientName(name List&lt;FHIR.HumanName&gt;):
  name n
  return FHIR.HumanName{
    id: n.id,
    extension: n.extension,
    use: n.use,
    text: n.text,
    family: n.family,
    given: n.given,
    prefix: n.prefix,
    suffix: n.suffix,
    period: n.period
  }

define function PatientTelecom(telecom List&lt;FHIR.ContactPoint&gt;):
  telecom t
  return FHIR.ContactPoint{
    system: t.system,
    value: t.value,
    use: t.use,
    rank: t.rank,
    period: t.period
  }

define function PatientAddress(address List&lt;FHIR.Address&gt;):
  address a
  return FHIR.Address{
    use: a.use,
    type: a.type,
    text: a.text,
    line: a.line,
    city: a.city,
    district: a.district,
    state: a.state,
    postalCode: a.postalCode,
    country: a.country,
    period: a.period
  }

define function PatientContact(contact List&lt;FHIR.Patient.Contact&gt;):
  contact c
  return FHIR.Patient.Contact{
    relationship: c.relationship,
    name: c.name,
    telecom: c.telecom,
    address: c.address,
    gender: c.gender,
    organization: c.organization,
    period: c.period
  }

define function PatientCommunication(communication List&lt;FHIR.Patient.Communication&gt;):
  communication c
  return FHIR.Patient.Communication{
    language: c.language,
    preferred: c.preferred
  }

define function PatientLink(link List&lt;FHIR.Patient.Link&gt;):
  link l
  return FHIR.Patient.Link{
    extension: l.extension,
    modifierExtension: l.modifierExtension,
    other: l.other,
    type: l.type
  }

define function PatientResource(patient Patient, profileURLs List&lt;FHIR.canonical&gt;):
  patient p
  return Patient{
    id: FHIR.id{value: 'LCR-' + p.id},
    meta: MetaElement(p, profileURLs),
    extension: GetPatientExtensions(p),
    identifier: p.identifier,
    active: p.active,
    name: PatientName(p.name),
    telecom: PatientTelecom(p.telecom),
    gender: p.gender,
    birthDate: p.birthDate,
    deceased: p.deceased,
    address: PatientAddress(p.address),
    maritalStatus: p.maritalStatus,
    multipleBirth: p.multipleBirth,
    contact: PatientContact(p.contact),
    communication: PatientCommunication(p.communication),
    link: PatientLink(p.link)
  }

define function ProcedurePerformer(performer List&lt;FHIR.Procedure.Performer&gt;):
  performer p
  return FHIR.Procedure.Performer{
    function: p.function,
    actor: p.actor,
    onBehalfOf: p.onBehalfOf
  }

define function ProcedureFocalDevice(device List&lt;FHIR.Procedure.FocalDevice&gt;):
  device d
  return FHIR.Procedure.FocalDevice{
    action: d.action,
    manipulated: d.manipulated
  }

define function ProcedureResource(procedure Procedure, profileURLs List&lt;FHIR.canonical&gt;):
  procedure p
  return Procedure{
    id: FHIR.id {value: 'LCR-' + p.id},
    meta: MetaElement(p, profileURLs),
    extension: p.extension,
    instantiatesCanonical: p.instantiatesCanonical,
    instantiatesUri: p.instantiatesUri,
    basedOn: p.basedOn,
    partOf: p.partOf,
    status: p.status,
    statusReason: p.statusReason,
    category: p.category,
    code: p.code,
    subject: p.subject,
    encounter: p.encounter,
    performed: p.performed,
    recorder: p.recorder,
    asserter: p.asserter,
    performer: ProcedurePerformer(p.performer),
    location: p.location,
    reasonCode: p.reasonCode,
    reasonReference: p.reasonReference,
    bodySite: p.bodySite,
    outcome: p.outcome,
    report: p.report,
    complication: p.complication,
    complicationDetail: p.complicationDetail,
    followUp: p.followUp,
    note: p.note,
    focalDevice: ProcedureFocalDevice(p.focalDevice),
    usedReference: p.usedReference,
    usedCode: p.usedCode
  }

define function ServiceRequestResource(serviceRequest ServiceRequest, profileURLs List&lt;FHIR.canonical&gt;):
  serviceRequest sR
  return ServiceRequest{
    id: FHIR.id {value: 'LCR-' + sR.id},
    meta: MetaElement(sR, profileURLs),
    extension: sR.extension,
    instantiatesCanonical: sR.instantiatesCanonical,
    instantiatesUri: sR.instantiatesUri,
    basedOn: sR.basedOn,
    replaces: sR.replaces,
    requisition: sR.requisition,
    status: sR.status,
    intent: sR.intent,
    category: sR.category,
    priority: sR.priority,
    doNotPerform: sR.doNotPerform,
    code: sR.code,
    orderDetail: sR.orderDetail,
    quantity: sR.quantity,
    subject: sR.subject,
    encounter: sR.encounter,
    occurrence: sR.occurrence,
    asNeeded: sR.asNeeded,
    authoredOn: sR.authoredOn,
    requester: sR.requester,
    performerType: sR.performerType,
    performer: sR.performer,
    locationCode: sR.locationCode,
    locationReference: sR.locationReference,
    reasonCode: sR.reasonCode,
    reasonReference: sR.reasonReference,
    insurance: sR.insurance,
    supportingInfo: sR.supportingInfo,
    specimen: sR.specimen,
    bodySite: sR.bodySite,
    note: sR.note,
    patientInstruction: sR.patientInstruction,
    relevantHistory: sR.relevantHistory
  }

define function SpecimenCollection(collection FHIR.Specimen.Collection):
  collection c
  return FHIR.Specimen.Collection{
    collector: c.collector,
    collected: c.collected,
    &quot;duration&quot;: c.&quot;duration&quot;,
    quantity: c.quantity,
    method: c.method,
    bodySite: c.bodySite,
    fastingStatus: c.fastingStatus
  }

define function SpecimenProcessing(processing List&lt;FHIR.Specimen.Processing&gt;):
  processing p
  return FHIR.Specimen.Processing{
    description: p.description,
    procedure: p.procedure,
    additive: p.additive,
    time: p.time
  }

define function SpecimenContainer(container List&lt;FHIR.Specimen.Container&gt;):
  container c
  return FHIR.Specimen.Container{
    description: c.description,
    type: c.type,
    capacity: c.capacity,
    specimenQuantity: c.specimenQuantity,
    additive: c.additive
  }

define function SpecimenResource(specimen Specimen, profileURLs List&lt;FHIR.canonical&gt;):
  specimen s
  return Specimen{
    id: FHIR.id {value: 'LCR-' + s.id},
    meta: MetaElement(s, profileURLs),
    extension: s.extension,
    identifier: s.identifier,
    accessionIdentifier: s.accessionIdentifier,
    status: s.status,
    type: s.type,
    subject: s.subject,
    receivedTime: s.receivedTime,
    parent: s.parent,
    request: s.request,
    collection: SpecimenCollection(s.collection),
    processing: SpecimenProcessing(s.processing),
    container: SpecimenContainer(s.container),
    condition: s.condition,
    note: s.note
  }

define function &quot;OperationOutcomeResource&quot;(errorId String, resourceId FHIR.id, message String):
  OperationOutcome{
      id: FHIR.id{value: errorId},
      issue: {
          FHIR.OperationOutcome.Issue{
          severity: FHIR.IssueSeverity{value: 'error'},
          code: FHIR.IssueType{value: 'exception'},
          details: 
              FHIR.CodeableConcept{
                  coding: {
                      Coding{
                      system: uri{value: 'https://lantanagroup.com/validation-error'},
                      code: code{value: 'Error'},
                      display: string{value: 'Resource ' + resourceId + ' failed validation: ' + message}
                      }
                  }
              }
          }
      }
  }</code></pre></td></tr>
            </table>
          </td>
        </tr>
        
        
        
    </table>
</div>
</div>
  </text>
  <contained>
    <Parameters>
      <id value="options"/>
      <parameter>
        <name value="translatorVersion"/>
        <valueString value="3.11.0"/>
      </parameter>
      <parameter>
        <name value="option"/>
        <valueString value="EnableDateRangeOptimization"/>
      </parameter>
      <parameter>
        <name value="option"/>
        <valueString value="EnableAnnotations"/>
      </parameter>
      <parameter>
        <name value="option"/>
        <valueString value="EnableLocators"/>
      </parameter>
      <parameter>
        <name value="option"/>
        <valueString value="DisableListDemotion"/>
      </parameter>
      <parameter>
        <name value="option"/>
        <valueString value="DisableListPromotion"/>
      </parameter>
      <parameter>
        <name value="analyzeDataRequirements"/>
        <valueBoolean value="false"/>
      </parameter>
      <parameter>
        <name value="collapseDataRequirements"/>
        <valueBoolean value="true"/>
      </parameter>
      <parameter>
        <name value="compatibilityLevel"/>
        <valueString value="1.5"/>
      </parameter>
      <parameter>
        <name value="enableCqlOnly"/>
        <valueBoolean value="false"/>
      </parameter>
      <parameter>
        <name value="errorLevel"/>
        <valueString value="Info"/>
      </parameter>
      <parameter>
        <name value="signatureLevel"/>
        <valueString value="Overloads"/>
      </parameter>
      <parameter>
        <name value="validateUnits"/>
        <valueBoolean value="true"/>
      </parameter>
      <parameter>
        <name value="verifyOnly"/>
        <valueBoolean value="false"/>
      </parameter>
    </Parameters>
  </contained>
  <extension url="http://hl7.org/fhir/StructureDefinition/cqf-cqlOptions">
    <valueReference>
      <reference value="#options"/>
    </valueReference>
  </extension>
  <extension
             url="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem">
    <valueReference>🔗 
      <reference value="Device/cqf-tooling"/>
    </valueReference>
  </extension>
  <url
       value="http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/SharedResourceCreation"/>
  <version value="2.0.0-cibuild"/>
  <name value="SharedResourceCreation"/>
  <status value="draft"/>
  <type>
    <coding>
      <system value="http://terminology.hl7.org/CodeSystem/library-type"/>
      <code value="logic-library"/>
    </coding>
  </type>
  <date value="2025-11-10T16:09:20+00:00"/>
  <publisher value="CDC National Healthcare Safety Network (NHSN)"/>
  <contact>
    <name value="CDC National Healthcare Safety Network (NHSN)"/>
    <telecom>
      <system value="url"/>
      <value value="http://www.cdc.gov/nhsn"/>
    </telecom>
    <telecom>
      <system value="email"/>
      <value value="nhsn@cdc.gov"/>
    </telecom>
  </contact>
  <jurisdiction>
    <coding>
      <system value="urn:iso:std:iso:3166"/>
      <code value="US"/>
    </coding>
  </jurisdiction>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="FHIR model information"/>
    <resource
              value="http://fhir.org/guides/cqf/common/Library/FHIR-ModelInfo|4.0.1"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library FHIRHelpers"/>
    <resource
              value="http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library/FHIRHelpers|4.0.2"/>
  </relatedArtifact>
  <content>
    <contentType value="text/cql"/>
    <data
          value="bGlicmFyeSBTaGFyZWRSZXNvdXJjZUNyZWF0aW9uIHZlcnNpb24gJzAuMS4wMTAnCgppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4yJwoKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKCmRlZmluZSBmdW5jdGlvbiAiR2V0UGF0aWVudEV4dGVuc2lvbnMiKGRvbWFpblJlc291cmNlIERvbWFpblJlc291cmNlKToKICBkb21haW5SZXNvdXJjZS5leHRlbnNpb24gRQogIHdoZXJlIEUudXJsID0gJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvY29yZS9TdHJ1Y3R1cmVEZWZpbml0aW9uL3VzLWNvcmUtcmFjZScKICAgIG9yIEUudXJsID0gJ2h0dHA6Ly9obDcub3JnL2ZoaXIvdXMvY29yZS9TdHJ1Y3R1cmVEZWZpbml0aW9uL3VzLWNvcmUtZXRobmljaXR5JwogICAgb3IgRS51cmwgPSAnaHR0cDovL2hsNy5vcmcvZmhpci91cy9jb3JlL1N0cnVjdHVyZURlZmluaXRpb24vdXMtY29yZS10cmliYWwtYWZmaWxpYXRpb24nCiAgICBvciBFLnVybCA9ICdodHRwOi8vaGw3Lm9yZy9maGlyL3VzL2NvcmUvU3RydWN0dXJlRGVmaW5pdGlvbi91cy1jb3JlLWJpcnRoc2V4JwogICAgb3IgRS51cmwgPSAnaHR0cDovL2hsNy5vcmcvZmhpci91cy9jb3JlL1N0cnVjdHVyZURlZmluaXRpb24vdXMtY29yZS1zZXgnCiAgICBvciBFLnVybCA9ICdodHRwOi8vd3d3LmNkYy5nb3Yvbmhzbi9maGlycG9ydGFsL2RxbS9pZy9TdHJ1Y3R1cmVEZWZpbml0aW9uL2xpbmstb3JpZ2luYWwtcmVzb3VyY2UtaWQtZXh0ZW5zaW9uJwogIHJldHVybiBFCgpkZWZpbmUgZnVuY3Rpb24gIk1ldGFFbGVtZW50IihyZXNvdXJjZSBSZXNvdXJjZSwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIHJlc291cmNlIHIKICByZXR1cm4gRkhJUi5NZXRhewogICAgZXh0ZW5zaW9uOiByLm1ldGEuZXh0ZW5zaW9uLAogICAgdmVyc2lvbklkOiByLm1ldGEudmVyc2lvbklkLAogICAgbGFzdFVwZGF0ZWQ6IHIubWV0YS5sYXN0VXBkYXRlZCwKICAgIHByb2ZpbGU6IHByb2ZpbGVVUkxzLAogICAgc2VjdXJpdHk6IHIubWV0YS5zZWN1cml0eSwKICAgIHRhZzogci5tZXRhLnRhZwogIH0KCmRlZmluZSBmdW5jdGlvbiBDb25kaXRpb25TdGFnZShzdGFnZSBMaXN0PEZISVIuQ29uZGl0aW9uLlN0YWdlPik6CiAgc3RhZ2UgcwogIHJldHVybiBGSElSLkNvbmRpdGlvbi5TdGFnZXsKICAgIHN1bW1hcnk6IHMuc3VtbWFyeSwKICAgIGFzc2Vzc21lbnQ6IHMuYXNzZXNzbWVudCwKICAgIHR5cGU6IHMudHlwZQogIH0KCmRlZmluZSBmdW5jdGlvbiBDb25kaXRpb25FdmlkZW5jZShldmlkZW5jZSBMaXN0PEZISVIuQ29uZGl0aW9uLkV2aWRlbmNlPik6CiAgZXZpZGVuY2UgZQogIHJldHVybiBGSElSLkNvbmRpdGlvbi5FdmlkZW5jZXsKICAgIGNvZGU6IGUuY29kZSwKICAgIGRldGFpbDogZS5kZXRhaWwKICB9CgpkZWZpbmUgZnVuY3Rpb24gQ29uZGl0aW9uUmVzb3VyY2UoY29uZGl0aW9uIENvbmRpdGlvbiwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIGNvbmRpdGlvbiBjCiAgcmV0dXJuIENvbmRpdGlvbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgYy5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChjLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IGMuZXh0ZW5zaW9uLAogICAgY2xpbmljYWxTdGF0dXM6IGMuY2xpbmljYWxTdGF0dXMsCiAgICB2ZXJpZmljYXRpb25TdGF0dXM6IGMudmVyaWZpY2F0aW9uU3RhdHVzLAogICAgY2F0ZWdvcnk6IGMuY2F0ZWdvcnksCiAgICBzZXZlcml0eTogYy5zZXZlcml0eSwKICAgIGNvZGU6IGMuY29kZSwKICAgIGJvZHlTaXRlOiBjLmJvZHlTaXRlLAogICAgc3ViamVjdDogYy5zdWJqZWN0LAogICAgZW5jb3VudGVyOiBjLmVuY291bnRlciwKICAgIG9uc2V0OiBjLm9uc2V0LAogICAgYWJhdGVtZW50OiBjLmFiYXRlbWVudCwKICAgIHJlY29yZGVkRGF0ZTogYy5yZWNvcmRlZERhdGUsCiAgICBzdGFnZTogQ29uZGl0aW9uU3RhZ2UoYy5zdGFnZSksCiAgICBldmlkZW5jZTogQ29uZGl0aW9uRXZpZGVuY2UoYy5ldmlkZW5jZSksCiAgICBub3RlOiBjLm5vdGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gQ292ZXJhZ2VDbGFzcyhjbGFzcyBMaXN0PEZISVIuQ292ZXJhZ2UuQ2xhc3M+KToKICBjbGFzcyBjCiAgcmV0dXJuIEZISVIuQ292ZXJhZ2UuQ2xhc3N7CiAgICB2YWx1ZTogYy52YWx1ZSwKICAgIG5hbWU6IGMubmFtZQogIH0KCmRlZmluZSBmdW5jdGlvbiBDb3ZlcmFnZVJlc291cmNlKGNvdmVyYWdlIENvdmVyYWdlLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgY292ZXJhZ2UgYwogIHJldHVybiBDb3ZlcmFnZXsKICAgIGlkOiBGSElSLmlke3ZhbHVlOiAnTENSLScgKyBjLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KGMsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogYy5leHRlbnNpb24sCiAgICBzdGF0dXM6IGMuc3RhdHVzLAogICAgdHlwZTogYy50eXBlLAogICAgcG9saWN5SG9sZGVyOiBjLnBvbGljeUhvbGRlciwKICAgIHN1YnNjcmliZXI6IGMuc3Vic2NyaWJlciwKICAgIHN1YnNjcmliZXJJZDogYy5zdWJzY3JpYmVySWQsCiAgICBiZW5lZmljaWFyeTogYy5iZW5lZmljaWFyeSwKICAgIGRlcGVuZGVudDogYy5kZXBlbmRlbnQsCiAgICByZWxhdGlvbnNoaXA6IGMucmVsYXRpb25zaGlwLAogICAgcGVyaW9kOiBjLnBlcmlvZCwKICAgIHBheW9yOiBjLnBheW9yLAogICAgY2xhc3M6IENvdmVyYWdlQ2xhc3MoYy5jbGFzcyksCiAgICBvcmRlcjogYy5vcmRlciwKICAgIG5ldHdvcms6IGMubmV0d29yaywKICAgIHN1YnJvZ2F0aW9uOiBjLnN1YnJvZ2F0aW9uLAogICAgY29udHJhY3Q6IGMuY29udHJhY3QKICB9CgpkZWZpbmUgZnVuY3Rpb24gRGlhZ25vc3RpY1JlcG9ydENvZGluZyhjb2RpbmcgTGlzdDxDb2Rpbmc+KToKICBjb2RpbmcgYwogIHJldHVybiBDb2Rpbmd7CiAgICBzeXN0ZW06IGMuc3lzdGVtLAogICAgdmVyc2lvbjogYy52ZXJzaW9uLAogICAgY29kZTogYy5jb2RlLAogICAgZGlzcGxheTogYy5kaXNwbGF5LAogICAgdXNlclNlbGVjdGVkOiBjLnVzZXJTZWxlY3RlZAogIH0KCmRlZmluZSBmdW5jdGlvbiBEaWFnbm9zdGljUmVwb3J0Q2F0ZWdvcnkoY2F0ZWdvcnkgTGlzdDxDb2RlYWJsZUNvbmNlcHQ+KToKICBjYXRlZ29yeSBjCiAgcmV0dXJuIENvZGVhYmxlQ29uY2VwdHsKICAgIGNvZGluZzogRGlhZ25vc3RpY1JlcG9ydENvZGluZyhjLmNvZGluZykKICB9CgpkZWZpbmUgZnVuY3Rpb24gRGlhZ25vc3RpY1JlcG9ydExhYlJlc291cmNlKGRpYWdub3N0aWNSZXBvcnQgRGlhZ25vc3RpY1JlcG9ydCwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIGRpYWdub3N0aWNSZXBvcnQgZAogIHJldHVybiBEaWFnbm9zdGljUmVwb3J0ewogICAgaWQ6IEZISVIuaWR7dmFsdWU6ICdMQ1ItJyArIGQuaWR9LAogICAgbWV0YTogTWV0YUVsZW1lbnQoZCwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBkLmV4dGVuc2lvbiwKICAgIGJhc2VkT246IGQuYmFzZWRPbiwKICAgIHN0YXR1czogZC5zdGF0dXMsCiAgICBjYXRlZ29yeTogRGlhZ25vc3RpY1JlcG9ydENhdGVnb3J5KGQuY2F0ZWdvcnkpLAogICAgY29kZTogZC5jb2RlLAogICAgc3ViamVjdDogZC5zdWJqZWN0LAogICAgZW5jb3VudGVyOiBkLmVuY291bnRlciwKICAgIGVmZmVjdGl2ZTogZC5lZmZlY3RpdmUsCiAgICBpc3N1ZWQ6IGQuaXNzdWVkLAogICAgcGVyZm9ybWVyOiBkLnBlcmZvcm1lciwKICAgIHJlc3VsdHNJbnRlcnByZXRlcjogZC5yZXN1bHRzSW50ZXJwcmV0ZXIsCiAgICBzcGVjaW1lbjogZC5zcGVjaW1lbiwKICAgIHJlc3VsdDogZC5yZXN1bHQsCiAgICBjb25jbHVzaW9uOiBkLmNvbmNsdXNpb24sCiAgICBjb25jbHVzaW9uQ29kZTogZC5jb25jbHVzaW9uQ29kZQogIH0KCmRlZmluZSBmdW5jdGlvbiBFbmNvdW50ZXJJZGVudGlmaWVyKGlkZW50aWZpZXIgTGlzdDxGSElSLklkZW50aWZpZXI+KToKICBpZGVudGlmaWVyIGkKICByZXR1cm4gRkhJUi5JZGVudGlmaWVyewogICAgdXNlOiBpLnVzZSwKICAgIHR5cGU6IGkudHlwZSwKICAgIHN5c3RlbTogaS5zeXN0ZW0sCiAgICB2YWx1ZTogaS52YWx1ZSwKICAgIHBlcmlvZDogaS5wZXJpb2QKICB9CgpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyU3RhdHVzSGlzdG9yeShzdGF0dXNIaXN0b3J5IExpc3Q8RkhJUi5FbmNvdW50ZXIuU3RhdHVzSGlzdG9yeT4pOgogIHN0YXR1c0hpc3Rvcnkgc0gKICByZXR1cm4gRkhJUi5FbmNvdW50ZXIuU3RhdHVzSGlzdG9yeXsKICAgIHN0YXR1czogc0guc3RhdHVzLAogICAgcGVyaW9kOiBzSC5wZXJpb2QKICB9CgpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyQ2xhc3NIaXN0b3J5KGNsYXNzSGlzdG9yeSBMaXN0PEZISVIuRW5jb3VudGVyLkNsYXNzSGlzdG9yeT4pOgogIGNsYXNzSGlzdG9yeSBjSAogIHJldHVybiBGSElSLkVuY291bnRlci5DbGFzc0hpc3Rvcnl7CiAgICBjbGFzczogY0guY2xhc3MsCiAgICBwZXJpb2Q6IGNILnBlcmlvZAogIH0KCi8qTm8gbG9uZ2VyIG5lZWRlZCBidXQgc2F2aW5nIGZvciBwb3RlbnRpYWwgZnV0dXJlIHVzZQpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyUGFydGljaXBhbnQocGFydGljaXBhbnQgTGlzdDxGSElSLkVuY291bnRlci5QYXJ0aWNpcGFudD4pOgogIHBhcnRpY2lwYW50IHAKICByZXR1cm4gRkhJUi5FbmNvdW50ZXIuUGFydGljaXBhbnR7CiAgICB0eXBlOiBwLnR5cGUsCiAgICBwZXJpb2Q6IHAucGVyaW9kLAogICAgaW5kaXZpZHVhbDogcC5pbmRpdmlkdWFsCiAgfSovCgpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyRGlhZ25vc2lzKGRpYWdub3NpcyBMaXN0PEZISVIuRW5jb3VudGVyLkRpYWdub3Npcz4pOgogIGRpYWdub3NpcyBkCiAgcmV0dXJuIEZISVIuRW5jb3VudGVyLkRpYWdub3Npc3sKICAgIGNvbmRpdGlvbjogZC5jb25kaXRpb24sCiAgICB1c2U6IGQudXNlLAogICAgcmFuazogZC5yYW5rCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIEVuY291bnRlckhvc3BpdGFsaXphdGlvbihob3NwaXRhbGl6YXRpb24gRkhJUi5FbmNvdW50ZXIuSG9zcGl0YWxpemF0aW9uKToKICBob3NwaXRhbGl6YXRpb24gaAogIHJldHVybiBGSElSLkVuY291bnRlci5Ib3NwaXRhbGl6YXRpb257CiAgICBwcmVBZG1pc3Npb25JZGVudGlmaWVyOiBoLnByZUFkbWlzc2lvbklkZW50aWZpZXIsCiAgICBvcmlnaW46IGgub3JpZ2luLAogICAgYWRtaXRTb3VyY2U6IGguYWRtaXRTb3VyY2UsCiAgICByZUFkbWlzc2lvbjogaC5yZUFkbWlzc2lvbiwKICAgIGRpZXRQcmVmZXJlbmNlOiBoLmRpZXRQcmVmZXJlbmNlLAogICAgc3BlY2lhbENvdXJ0ZXN5OiBoLnNwZWNpYWxDb3VydGVzeSwKICAgIHNwZWNpYWxBcnJhbmdlbWVudDogaC5zcGVjaWFsQXJyYW5nZW1lbnQsCiAgICBkZXN0aW5hdGlvbjogaC5kZXN0aW5hdGlvbiwKICAgIGRpc2NoYXJnZURpc3Bvc2l0aW9uOiBoLmRpc2NoYXJnZURpc3Bvc2l0aW9uCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIEVuY291bnRlckxvY2F0aW9uKGxvY2F0aW9uIExpc3Q8RkhJUi5FbmNvdW50ZXIuTG9jYXRpb24+KToKICBsb2NhdGlvbiBsCiAgcmV0dXJuIEZISVIuRW5jb3VudGVyLkxvY2F0aW9uewogICAgbG9jYXRpb246IGwubG9jYXRpb24sCiAgICBzdGF0dXM6IGwuc3RhdHVzLAogICAgcGh5c2ljYWxUeXBlOiBsLnBoeXNpY2FsVHlwZSwKICAgIHBlcmlvZDogbC5wZXJpb2QKICB9CgpkZWZpbmUgZnVuY3Rpb24gRW5jb3VudGVyUmVzb3VyY2UoZW5jb3VudGVyIEVuY291bnRlciwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIGVuY291bnRlciBlCiAgcmV0dXJuIEVuY291bnRlcnsKICAgIGlkOiBGSElSLmlke3ZhbHVlOiAnTENSLScgKyBlLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KGUsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogZS5leHRlbnNpb24sCiAgICBpZGVudGlmaWVyOiBFbmNvdW50ZXJJZGVudGlmaWVyKGUuaWRlbnRpZmllciksCiAgICBzdGF0dXM6IGUuc3RhdHVzLAogICAgc3RhdHVzSGlzdG9yeTogRW5jb3VudGVyU3RhdHVzSGlzdG9yeShlLnN0YXR1c0hpc3RvcnkpLAogICAgY2xhc3M6IGUuY2xhc3MsCiAgICBjbGFzc0hpc3Rvcnk6IEVuY291bnRlckNsYXNzSGlzdG9yeShlLmNsYXNzSGlzdG9yeSksCiAgICB0eXBlOiBlLnR5cGUsCiAgICBzZXJ2aWNlVHlwZTogZS5zZXJ2aWNlVHlwZSwKICAgIHByaW9yaXR5OiBlLnByaW9yaXR5LAogICAgc3ViamVjdDogZS5zdWJqZWN0LAogICAgcGVyaW9kOiBlLnBlcmlvZCwKICAgIGxlbmd0aDogZS5sZW5ndGgsCiAgICByZWFzb25Db2RlOiBlLnJlYXNvbkNvZGUsCiAgICByZWFzb25SZWZlcmVuY2U6IGUucmVhc29uUmVmZXJlbmNlLAogICAgZGlhZ25vc2lzOiBFbmNvdW50ZXJEaWFnbm9zaXMoZS5kaWFnbm9zaXMpLAogICAgYWNjb3VudDogZS5hY2NvdW50LAogICAgaG9zcGl0YWxpemF0aW9uOiBFbmNvdW50ZXJIb3NwaXRhbGl6YXRpb24oZS5ob3NwaXRhbGl6YXRpb24pLAogICAgbG9jYXRpb246IEVuY291bnRlckxvY2F0aW9uKGUubG9jYXRpb24pLAogICAgcGFydE9mOiBlLnBhcnRPZgogIH0KCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvbkxhYkNvZGluZyhjb2RpbmcgTGlzdDxDb2Rpbmc+KToKICBjb2RpbmcgYwogIHJldHVybiBDb2Rpbmd7CiAgICBpZDogYy5pZCwKICAgIGV4dGVuc2lvbjogYy5leHRlbnNpb24sCiAgICBzeXN0ZW06IGMuc3lzdGVtLAogICAgdmVyc2lvbjogYy52ZXJzaW9uLAogICAgY29kZTogYy5jb2RlLAogICAgZGlzcGxheTogYy5kaXNwbGF5LAogICAgdXNlclNlbGVjdGVkOiBjLnVzZXJTZWxlY3RlZAogIH0KCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvbkxhYkNhdGVnb3J5KGNhdGVnb3J5IExpc3Q8Q29kZWFibGVDb25jZXB0Pik6CiAgY2F0ZWdvcnkgYwogIHJldHVybiBDb2RlYWJsZUNvbmNlcHR7CiAgICBjb2Rpbmc6IE9ic2VydmF0aW9uTGFiQ29kaW5nKGMuY29kaW5nKSwKICAgIHRleHQ6IGMudGV4dAogIH0KCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvblJlZmVyZW5jZVJhbmdlKHJlZmVyZW5jZVJhbmdlIExpc3Q8RkhJUi5PYnNlcnZhdGlvbi5SZWZlcmVuY2VSYW5nZT4pOgogIHJlZmVyZW5jZVJhbmdlIHJSCiAgcmV0dXJuIEZISVIuT2JzZXJ2YXRpb24uUmVmZXJlbmNlUmFuZ2V7CiAgICBsb3c6IHJSLmxvdywKICAgIGhpZ2g6IHJSLmhpZ2gsCiAgICB0eXBlOiByUi50eXBlLAogICAgYXBwbGllc1RvOiByUi5hcHBsaWVzVG8sCiAgICBhZ2U6IHJSLmFnZSwKICAgIHRleHQ6IHJSLnRleHQKICB9CgpkZWZpbmUgZnVuY3Rpb24gT2JzZXJ2YXRpb25Db21wb25lbnQoY29tcG9uZW50IExpc3Q8RkhJUi5PYnNlcnZhdGlvbi5Db21wb25lbnQ+KToKICBjb21wb25lbnQgYwogIHJldHVybiBGSElSLk9ic2VydmF0aW9uLkNvbXBvbmVudHsKICAgIGNvZGU6IGMuY29kZSwKICAgIHZhbHVlOiBjLnZhbHVlLAogICAgZGF0YUFic2VudFJlYXNvbjogYy5kYXRhQWJzZW50UmVhc29uLAogICAgaW50ZXJwcmV0YXRpb246IGMuaW50ZXJwcmV0YXRpb24sCiAgICByZWZlcmVuY2VSYW5nZTogYy5yZWZlcmVuY2VSYW5nZQogIH0KCmRlZmluZSBmdW5jdGlvbiBPYnNlcnZhdGlvbkxhYlJlc291cmNlKG9ic2VydmF0aW9uIE9ic2VydmF0aW9uLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgb2JzZXJ2YXRpb24gbwogIHJldHVybiBPYnNlcnZhdGlvbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgby5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChvLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IG8uZXh0ZW5zaW9uLAogICAgYmFzZWRPbjogby5iYXNlZE9uLAogICAgcGFydE9mOiBvLnBhcnRPZiwKICAgIHN0YXR1czogby5zdGF0dXMsCiAgICBjYXRlZ29yeTogT2JzZXJ2YXRpb25MYWJDYXRlZ29yeShvLmNhdGVnb3J5KSwKICAgIGNvZGU6IG8uY29kZSwKICAgIHN1YmplY3Q6IG8uc3ViamVjdCwKICAgIGZvY3VzOiBvLmZvY3VzLAogICAgZW5jb3VudGVyOiBvLmVuY291bnRlciwKICAgIGVmZmVjdGl2ZTogby5lZmZlY3RpdmUsCiAgICBpc3N1ZWQ6IG8uaXNzdWVkLAogICAgcGVyZm9ybWVyOiBvLnBlcmZvcm1lciwKICAgIHZhbHVlOiBvLnZhbHVlLAogICAgZGF0YUFic2VudFJlYXNvbjogby5kYXRhQWJzZW50UmVhc29uLAogICAgaW50ZXJwcmV0YXRpb246IG8uaW50ZXJwcmV0YXRpb24sCiAgICBub3RlOiBvLm5vdGUsCiAgICBib2R5U2l0ZTogby5ib2R5U2l0ZSwKICAgIG1ldGhvZDogby5tZXRob2QsCiAgICBzcGVjaW1lbjogby5zcGVjaW1lbiwKICAgIGRldmljZTogby5kZXZpY2UsCiAgICByZWZlcmVuY2VSYW5nZTogT2JzZXJ2YXRpb25SZWZlcmVuY2VSYW5nZShvLnJlZmVyZW5jZVJhbmdlKSwKICAgIGhhc01lbWJlcjogby5oYXNNZW1iZXIsCiAgICBkZXJpdmVkRnJvbTogby5kZXJpdmVkRnJvbSwKICAgIGNvbXBvbmVudDogT2JzZXJ2YXRpb25Db21wb25lbnQoby5jb21wb25lbnQpCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIExvY2F0aW9uQWRkcmVzcyhhZGRyZXNzIEZISVIuQWRkcmVzcyk6CiAgYWRkcmVzcyBhCiAgcmV0dXJuIEZISVIuQWRkcmVzc3sKICAgIHVzZTogYS51c2UsCiAgICB0eXBlOiBhLnR5cGUsCiAgICB0ZXh0OiBhLnRleHQsCiAgICBsaW5lOiBhLmxpbmUsCiAgICBjaXR5OiBhLmNpdHksCiAgICBkaXN0cmljdDogYS5kaXN0cmljdCwKICAgIHN0YXRlOiBhLnN0YXRlLAogICAgcG9zdGFsQ29kZTogYS5wb3N0YWxDb2RlLAogICAgY291bnRyeTogYS5jb3VudHJ5LAogICAgcGVyaW9kOiBhLnBlcmlvZAogIH0KCmRlZmluZSBmdW5jdGlvbiBMb2NhdGlvblBvc2l0aW9uKHBvc2l0aW9uIEZISVIuTG9jYXRpb24uUG9zaXRpb24pOgogIHBvc2l0aW9uIHAKICByZXR1cm4gRkhJUi5Mb2NhdGlvbi5Qb3NpdGlvbnsKICAgIGxvbmdpdHVkZTogcC5sb25naXR1ZGUsCiAgICBsYXRpdHVkZTogcC5sYXRpdHVkZSwKICAgIGFsdGl0dWRlOiBwLmFsdGl0dWRlCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIExvY2F0aW9uSG91cnNPZk9wZXJhdGlvbihob3Vyc09mT3BlcmF0aW9uIExpc3Q8RkhJUi5Mb2NhdGlvbi5Ib3Vyc09mT3BlcmF0aW9uPik6CiAgaG91cnNPZk9wZXJhdGlvbiBoT08KICByZXR1cm4gRkhJUi5Mb2NhdGlvbi5Ib3Vyc09mT3BlcmF0aW9uewogICAgZGF5c09mV2VlazogaE9PLmRheXNPZldlZWssCiAgICBhbGxEYXk6IGhPTy5hbGxEYXksCiAgICBvcGVuaW5nVGltZTogaE9PLm9wZW5pbmdUaW1lLAogICAgY2xvc2luZ1RpbWU6IGhPTy5jbG9zaW5nVGltZQogIH0KCmRlZmluZSBmdW5jdGlvbiBMb2NhdGlvblJlc291cmNlKGxvY2F0aW9uIExvY2F0aW9uLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgbG9jYXRpb24gbAogIHJldHVybiBMb2NhdGlvbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgbC5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChsLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IGwuZXh0ZW5zaW9uLAogICAgc3RhdHVzOiBsLnN0YXR1cywKICAgIG9wZXJhdGlvbmFsU3RhdHVzOiBsLm9wZXJhdGlvbmFsU3RhdHVzLAogICAgbmFtZTogbC5uYW1lLAogICAgYWxpYXM6IGwuYWxpYXMsCiAgICBkZXNjcmlwdGlvbjogbC5kZXNjcmlwdGlvbiwKICAgIG1vZGU6IGwubW9kZSwKICAgIHR5cGU6IGwudHlwZSwKICAgIHRlbGVjb206IGwudGVsZWNvbSwKICAgIGFkZHJlc3M6IExvY2F0aW9uQWRkcmVzcyhsLmFkZHJlc3MpLAogICAgcGh5c2ljYWxUeXBlOiBsLnBoeXNpY2FsVHlwZSwKICAgIHBvc2l0aW9uOiBMb2NhdGlvblBvc2l0aW9uKGwucG9zaXRpb24pLAogICAgbWFuYWdpbmdPcmdhbml6YXRpb246IGwubWFuYWdpbmdPcmdhbml6YXRpb24sCiAgICBwYXJ0T2Y6IGwucGFydE9mLAogICAgaG91cnNPZk9wZXJhdGlvbjogTG9jYXRpb25Ib3Vyc09mT3BlcmF0aW9uKGwuaG91cnNPZk9wZXJhdGlvbiksCiAgICBhdmFpbGFiaWxpdHlFeGNlcHRpb25zOiBsLmF2YWlsYWJpbGl0eUV4Y2VwdGlvbnMsCiAgICBlbmRwb2ludDogbC5lbmRwb2ludAogIH0KCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uSW5ncmVkaWVudChpbmdyZWRpZW50IExpc3Q8RkhJUi5NZWRpY2F0aW9uLkluZ3JlZGllbnQ+KToKICBpbmdyZWRpZW50IGkKICByZXR1cm4gRkhJUi5NZWRpY2F0aW9uLkluZ3JlZGllbnR7CiAgICBpdGVtOiBpLml0ZW0sCiAgICBzdHJlbmd0aDogaS5zdHJlbmd0aAogIH0KCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uQmF0Y2goYmF0Y2ggRkhJUi5NZWRpY2F0aW9uLkJhdGNoKToKICBiYXRjaCBiCiAgcmV0dXJuIEZISVIuTWVkaWNhdGlvbi5CYXRjaHsKICAgIGxvdE51bWJlcjogYi5sb3ROdW1iZXIsCiAgICBleHBpcmF0aW9uRGF0ZTogYi5leHBpcmF0aW9uRGF0ZQogIH0KCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uUmVzb3VyY2UobWVkaWNhdGlvbiBNZWRpY2F0aW9uLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgbWVkaWNhdGlvbiBtCiAgcmV0dXJuIE1lZGljYXRpb257CiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIG0uaWR9LAogICAgbWV0YTogTWV0YUVsZW1lbnQobSwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBtLmV4dGVuc2lvbiwKICAgIGNvZGU6IG0uY29kZSwKICAgIHN0YXR1czogbS5zdGF0dXMsCiAgICBtYW51ZmFjdHVyZXI6IG0ubWFudWZhY3R1cmVyLAogICAgZm9ybTogbS5mb3JtLAogICAgYW1vdW50OiBtLmFtb3VudCwKICAgIGluZ3JlZGllbnQ6IE1lZGljYXRpb25JbmdyZWRpZW50KG0uaW5ncmVkaWVudCksCiAgICBiYXRjaDogTWVkaWNhdGlvbkJhdGNoKG0uYmF0Y2gpCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25BZG1pbmlzdHJhdGlvblBlcmZvcm1lcihwZXJmb3JtZXIgTGlzdDxGSElSLk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbi5QZXJmb3JtZXI+KToKICBwZXJmb3JtZXIgcAogIHJldHVybiBGSElSLk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbi5QZXJmb3JtZXJ7CiAgICBmdW5jdGlvbjogcC5mdW5jdGlvbiwKICAgIGFjdG9yOiBwLmFjdG9yCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIE1lZGljYXRpb25BZG1pbmlzdHJhdGlvbkRvc2FnZShkb3NhZ2UgRkhJUi5NZWRpY2F0aW9uQWRtaW5pc3RyYXRpb24uRG9zYWdlKToKICBkb3NhZ2UgZAogIHJldHVybiBGSElSLk1lZGljYXRpb25BZG1pbmlzdHJhdGlvbi5Eb3NhZ2V7CiAgICB0ZXh0OiBkLnRleHQsCiAgICBzaXRlOiBkLnNpdGUsCiAgICByb3V0ZTogZC5yb3V0ZSwKICAgIG1ldGhvZDogZC5tZXRob2QsCiAgICBkb3NlOiBkLmRvc2UsCiAgICByYXRlOiBkLnJhdGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uUmVzb3VyY2UobWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uIE1lZGljYXRpb25BZG1pbmlzdHJhdGlvbiwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIG1lZGljYXRpb25BZG1pbmlzdHJhdGlvbiBtCiAgcmV0dXJuIE1lZGljYXRpb25BZG1pbmlzdHJhdGlvbnsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgbS5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChtLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IG0uZXh0ZW5zaW9uLAogICAgaW5zdGFudGlhdGVzOiBtLmluc3RhbnRpYXRlcywKICAgIHBhcnRPZjogbS5wYXJ0T2YsCiAgICBzdGF0dXM6IG0uc3RhdHVzLAogICAgc3RhdHVzUmVhc29uOiBtLnN0YXR1c1JlYXNvbiwKICAgIGNhdGVnb3J5OiBtLmNhdGVnb3J5LAogICAgbWVkaWNhdGlvbjogbS5tZWRpY2F0aW9uLAogICAgc3ViamVjdDogbS5zdWJqZWN0LAogICAgY29udGV4dDogbS5jb250ZXh0LAogICAgc3VwcG9ydGluZ0luZm9ybWF0aW9uOiBtLnN1cHBvcnRpbmdJbmZvcm1hdGlvbiwKICAgIGVmZmVjdGl2ZTogbS5lZmZlY3RpdmUsCiAgICBwZXJmb3JtZXI6IE1lZGljYXRpb25BZG1pbmlzdHJhdGlvblBlcmZvcm1lcihtLnBlcmZvcm1lciksCiAgICByZWFzb25Db2RlOiBtLnJlYXNvbkNvZGUsCiAgICByZWFzb25SZWZlcmVuY2U6IG0ucmVhc29uUmVmZXJlbmNlLAogICAgcmVxdWVzdDogbS5yZXF1ZXN0LAogICAgZGV2aWNlOiBtLmRldmljZSwKICAgIG5vdGU6IG0ubm90ZSwKICAgIGRvc2FnZTogTWVkaWNhdGlvbkFkbWluaXN0cmF0aW9uRG9zYWdlKG0uZG9zYWdlKSwKICAgIGV2ZW50SGlzdG9yeTogbS5ldmVudEhpc3RvcnkKICB9CgpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvblJlcXVlc3REb3NlQW5kUmF0ZShkb3NlQW5kUmF0ZSBMaXN0PEZISVIuRG9zYWdlLkRvc2VBbmRSYXRlPik6CiAgZG9zZUFuZFJhdGUgZFIKICByZXR1cm4gRkhJUi5Eb3NhZ2UuRG9zZUFuZFJhdGV7CiAgICB0eXBlOiBkUi50eXBlLAogICAgZG9zZTogZFIuZG9zZSwKICAgIHJhdGU6IGRSLnJhdGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gTWVkaWNhdGlvblJlcXVlc3REb3NhZ2VJbnN0cnVjdGlvbihkb3NhZ2VJbnN0cnVjdGlvbiBMaXN0PEZISVIuRG9zYWdlPik6CiAgZG9zYWdlSW5zdHJ1Y3Rpb24gZEkKICByZXR1cm4gRkhJUi5Eb3NhZ2V7CiAgICB0ZXh0OiBkSS50ZXh0LAogICAgcGF0aWVudEluc3RydWN0aW9uOiBkSS5wYXRpZW50SW5zdHJ1Y3Rpb24sCiAgICB0aW1pbmc6IGRJLnRpbWluZywKICAgIGFzTmVlZGVkOiBkSS5hc05lZWRlZCwKICAgIHNpdGU6IGRJLnNpdGUsCiAgICByb3V0ZTogZEkucm91dGUsCiAgICBtZXRob2Q6IGRJLm1ldGhvZCwKICAgIGRvc2VBbmRSYXRlOiBNZWRpY2F0aW9uUmVxdWVzdERvc2VBbmRSYXRlKGRJLmRvc2VBbmRSYXRlKQogIH0KCmRlZmluZSBmdW5jdGlvbiBNZWRpY2F0aW9uUmVxdWVzdFJlc291cmNlKG1lZGljYXRpb25SZXF1ZXN0IE1lZGljYXRpb25SZXF1ZXN0LCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgbWVkaWNhdGlvblJlcXVlc3QgbQogIHJldHVybiBNZWRpY2F0aW9uUmVxdWVzdHsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgbS5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChtZWRpY2F0aW9uUmVxdWVzdCwgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBtLmV4dGVuc2lvbiwKICAgIHN0YXR1czogbS5zdGF0dXMsCiAgICBzdGF0dXNSZWFzb246IG0uc3RhdHVzUmVhc29uLAogICAgaW50ZW50OiBtLmludGVudCwKICAgIGNhdGVnb3J5OiBtLmNhdGVnb3J5LAogICAgcHJpb3JpdHk6IG0ucHJpb3JpdHksCiAgICBkb05vdFBlcmZvcm06IG0uZG9Ob3RQZXJmb3JtLAogICAgcmVwb3J0ZWQ6IG0ucmVwb3J0ZWQsCiAgICBtZWRpY2F0aW9uOiBtLm1lZGljYXRpb24sCiAgICBzdWJqZWN0OiBtLnN1YmplY3QsCiAgICBlbmNvdW50ZXI6IG0uZW5jb3VudGVyLAogICAgYXV0aG9yZWRPbjogbS5hdXRob3JlZE9uLAogICAgcmVxdWVzdGVyOiBtLnJlcXVlc3RlciwKICAgIHJlY29yZGVyOiBtLnJlY29yZGVyLAogICAgcmVhc29uQ29kZTogbS5yZWFzb25Db2RlLAogICAgcmVhc29uUmVmZXJlbmNlOiBtLnJlYXNvblJlZmVyZW5jZSwKICAgIGluc3RhbnRpYXRlc0Nhbm9uaWNhbDogbS5pbnN0YW50aWF0ZXNDYW5vbmljYWwsCiAgICBpbnN0YW50aWF0ZXNVcmk6IG0uaW5zdGFudGlhdGVzVXJpLAogICAgY291cnNlT2ZUaGVyYXB5VHlwZTogbS5jb3Vyc2VPZlRoZXJhcHlUeXBlLAogICAgZG9zYWdlSW5zdHJ1Y3Rpb246IE1lZGljYXRpb25SZXF1ZXN0RG9zYWdlSW5zdHJ1Y3Rpb24obS5kb3NhZ2VJbnN0cnVjdGlvbikKICB9CgovKiBObyBsb25nZXIgbmVlZGVkIGJ1dCBzYXZpbmcgaW4gY2FzZSBpdCdzIHVzZWZ1bCBsYXRlcgpkZWZpbmUgZnVuY3Rpb24gUGF0aWVudElkZW50aWZpZXIoaWRlbnRpZmllciBMaXN0PEZISVIuSWRlbnRpZmllcj4pOgogIGlkZW50aWZpZXIgaQogIHJldHVybiBGSElSLklkZW50aWZpZXJ7CiAgICBpZDogaS5pZCwKICAgIGV4dGVuc2lvbjogaS5leHRlbnNpb24sCiAgICB1c2U6IGkudXNlLAogICAgdHlwZTogaS50eXBlLAogICAgc3lzdGVtOiBpLnN5c3RlbSwKICAgIHZhbHVlOiBpLnZhbHVlLAogICAgcGVyaW9kOiBpLnBlcmlvZCwKICAgIGFzc2lnbmVyOiBpLmFzc2lnbmVyCiAgfSovCgpkZWZpbmUgZnVuY3Rpb24gUGF0aWVudE5hbWUobmFtZSBMaXN0PEZISVIuSHVtYW5OYW1lPik6CiAgbmFtZSBuCiAgcmV0dXJuIEZISVIuSHVtYW5OYW1lewogICAgaWQ6IG4uaWQsCiAgICBleHRlbnNpb246IG4uZXh0ZW5zaW9uLAogICAgdXNlOiBuLnVzZSwKICAgIHRleHQ6IG4udGV4dCwKICAgIGZhbWlseTogbi5mYW1pbHksCiAgICBnaXZlbjogbi5naXZlbiwKICAgIHByZWZpeDogbi5wcmVmaXgsCiAgICBzdWZmaXg6IG4uc3VmZml4LAogICAgcGVyaW9kOiBuLnBlcmlvZAogIH0KCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50VGVsZWNvbSh0ZWxlY29tIExpc3Q8RkhJUi5Db250YWN0UG9pbnQ+KToKICB0ZWxlY29tIHQKICByZXR1cm4gRkhJUi5Db250YWN0UG9pbnR7CiAgICBzeXN0ZW06IHQuc3lzdGVtLAogICAgdmFsdWU6IHQudmFsdWUsCiAgICB1c2U6IHQudXNlLAogICAgcmFuazogdC5yYW5rLAogICAgcGVyaW9kOiB0LnBlcmlvZAogIH0KCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50QWRkcmVzcyhhZGRyZXNzIExpc3Q8RkhJUi5BZGRyZXNzPik6CiAgYWRkcmVzcyBhCiAgcmV0dXJuIEZISVIuQWRkcmVzc3sKICAgIHVzZTogYS51c2UsCiAgICB0eXBlOiBhLnR5cGUsCiAgICB0ZXh0OiBhLnRleHQsCiAgICBsaW5lOiBhLmxpbmUsCiAgICBjaXR5OiBhLmNpdHksCiAgICBkaXN0cmljdDogYS5kaXN0cmljdCwKICAgIHN0YXRlOiBhLnN0YXRlLAogICAgcG9zdGFsQ29kZTogYS5wb3N0YWxDb2RlLAogICAgY291bnRyeTogYS5jb3VudHJ5LAogICAgcGVyaW9kOiBhLnBlcmlvZAogIH0KCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50Q29udGFjdChjb250YWN0IExpc3Q8RkhJUi5QYXRpZW50LkNvbnRhY3Q+KToKICBjb250YWN0IGMKICByZXR1cm4gRkhJUi5QYXRpZW50LkNvbnRhY3R7CiAgICByZWxhdGlvbnNoaXA6IGMucmVsYXRpb25zaGlwLAogICAgbmFtZTogYy5uYW1lLAogICAgdGVsZWNvbTogYy50ZWxlY29tLAogICAgYWRkcmVzczogYy5hZGRyZXNzLAogICAgZ2VuZGVyOiBjLmdlbmRlciwKICAgIG9yZ2FuaXphdGlvbjogYy5vcmdhbml6YXRpb24sCiAgICBwZXJpb2Q6IGMucGVyaW9kCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFBhdGllbnRDb21tdW5pY2F0aW9uKGNvbW11bmljYXRpb24gTGlzdDxGSElSLlBhdGllbnQuQ29tbXVuaWNhdGlvbj4pOgogIGNvbW11bmljYXRpb24gYwogIHJldHVybiBGSElSLlBhdGllbnQuQ29tbXVuaWNhdGlvbnsKICAgIGxhbmd1YWdlOiBjLmxhbmd1YWdlLAogICAgcHJlZmVycmVkOiBjLnByZWZlcnJlZAogIH0KCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50TGluayhsaW5rIExpc3Q8RkhJUi5QYXRpZW50Lkxpbms+KToKICBsaW5rIGwKICByZXR1cm4gRkhJUi5QYXRpZW50Lkxpbmt7CiAgICBleHRlbnNpb246IGwuZXh0ZW5zaW9uLAogICAgbW9kaWZpZXJFeHRlbnNpb246IGwubW9kaWZpZXJFeHRlbnNpb24sCiAgICBvdGhlcjogbC5vdGhlciwKICAgIHR5cGU6IGwudHlwZQogIH0KCmRlZmluZSBmdW5jdGlvbiBQYXRpZW50UmVzb3VyY2UocGF0aWVudCBQYXRpZW50LCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgcGF0aWVudCBwCiAgcmV0dXJuIFBhdGllbnR7CiAgICBpZDogRkhJUi5pZHt2YWx1ZTogJ0xDUi0nICsgcC5pZH0sCiAgICBtZXRhOiBNZXRhRWxlbWVudChwLCBwcm9maWxlVVJMcyksCiAgICBleHRlbnNpb246IEdldFBhdGllbnRFeHRlbnNpb25zKHApLAogICAgaWRlbnRpZmllcjogcC5pZGVudGlmaWVyLAogICAgYWN0aXZlOiBwLmFjdGl2ZSwKICAgIG5hbWU6IFBhdGllbnROYW1lKHAubmFtZSksCiAgICB0ZWxlY29tOiBQYXRpZW50VGVsZWNvbShwLnRlbGVjb20pLAogICAgZ2VuZGVyOiBwLmdlbmRlciwKICAgIGJpcnRoRGF0ZTogcC5iaXJ0aERhdGUsCiAgICBkZWNlYXNlZDogcC5kZWNlYXNlZCwKICAgIGFkZHJlc3M6IFBhdGllbnRBZGRyZXNzKHAuYWRkcmVzcyksCiAgICBtYXJpdGFsU3RhdHVzOiBwLm1hcml0YWxTdGF0dXMsCiAgICBtdWx0aXBsZUJpcnRoOiBwLm11bHRpcGxlQmlydGgsCiAgICBjb250YWN0OiBQYXRpZW50Q29udGFjdChwLmNvbnRhY3QpLAogICAgY29tbXVuaWNhdGlvbjogUGF0aWVudENvbW11bmljYXRpb24ocC5jb21tdW5pY2F0aW9uKSwKICAgIGxpbms6IFBhdGllbnRMaW5rKHAubGluaykKICB9CgpkZWZpbmUgZnVuY3Rpb24gUHJvY2VkdXJlUGVyZm9ybWVyKHBlcmZvcm1lciBMaXN0PEZISVIuUHJvY2VkdXJlLlBlcmZvcm1lcj4pOgogIHBlcmZvcm1lciBwCiAgcmV0dXJuIEZISVIuUHJvY2VkdXJlLlBlcmZvcm1lcnsKICAgIGZ1bmN0aW9uOiBwLmZ1bmN0aW9uLAogICAgYWN0b3I6IHAuYWN0b3IsCiAgICBvbkJlaGFsZk9mOiBwLm9uQmVoYWxmT2YKICB9CgpkZWZpbmUgZnVuY3Rpb24gUHJvY2VkdXJlRm9jYWxEZXZpY2UoZGV2aWNlIExpc3Q8RkhJUi5Qcm9jZWR1cmUuRm9jYWxEZXZpY2U+KToKICBkZXZpY2UgZAogIHJldHVybiBGSElSLlByb2NlZHVyZS5Gb2NhbERldmljZXsKICAgIGFjdGlvbjogZC5hY3Rpb24sCiAgICBtYW5pcHVsYXRlZDogZC5tYW5pcHVsYXRlZAogIH0KCmRlZmluZSBmdW5jdGlvbiBQcm9jZWR1cmVSZXNvdXJjZShwcm9jZWR1cmUgUHJvY2VkdXJlLCBwcm9maWxlVVJMcyBMaXN0PEZISVIuY2Fub25pY2FsPik6CiAgcHJvY2VkdXJlIHAKICByZXR1cm4gUHJvY2VkdXJlewogICAgaWQ6IEZISVIuaWQge3ZhbHVlOiAnTENSLScgKyBwLmlkfSwKICAgIG1ldGE6IE1ldGFFbGVtZW50KHAsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogcC5leHRlbnNpb24sCiAgICBpbnN0YW50aWF0ZXNDYW5vbmljYWw6IHAuaW5zdGFudGlhdGVzQ2Fub25pY2FsLAogICAgaW5zdGFudGlhdGVzVXJpOiBwLmluc3RhbnRpYXRlc1VyaSwKICAgIGJhc2VkT246IHAuYmFzZWRPbiwKICAgIHBhcnRPZjogcC5wYXJ0T2YsCiAgICBzdGF0dXM6IHAuc3RhdHVzLAogICAgc3RhdHVzUmVhc29uOiBwLnN0YXR1c1JlYXNvbiwKICAgIGNhdGVnb3J5OiBwLmNhdGVnb3J5LAogICAgY29kZTogcC5jb2RlLAogICAgc3ViamVjdDogcC5zdWJqZWN0LAogICAgZW5jb3VudGVyOiBwLmVuY291bnRlciwKICAgIHBlcmZvcm1lZDogcC5wZXJmb3JtZWQsCiAgICByZWNvcmRlcjogcC5yZWNvcmRlciwKICAgIGFzc2VydGVyOiBwLmFzc2VydGVyLAogICAgcGVyZm9ybWVyOiBQcm9jZWR1cmVQZXJmb3JtZXIocC5wZXJmb3JtZXIpLAogICAgbG9jYXRpb246IHAubG9jYXRpb24sCiAgICByZWFzb25Db2RlOiBwLnJlYXNvbkNvZGUsCiAgICByZWFzb25SZWZlcmVuY2U6IHAucmVhc29uUmVmZXJlbmNlLAogICAgYm9keVNpdGU6IHAuYm9keVNpdGUsCiAgICBvdXRjb21lOiBwLm91dGNvbWUsCiAgICByZXBvcnQ6IHAucmVwb3J0LAogICAgY29tcGxpY2F0aW9uOiBwLmNvbXBsaWNhdGlvbiwKICAgIGNvbXBsaWNhdGlvbkRldGFpbDogcC5jb21wbGljYXRpb25EZXRhaWwsCiAgICBmb2xsb3dVcDogcC5mb2xsb3dVcCwKICAgIG5vdGU6IHAubm90ZSwKICAgIGZvY2FsRGV2aWNlOiBQcm9jZWR1cmVGb2NhbERldmljZShwLmZvY2FsRGV2aWNlKSwKICAgIHVzZWRSZWZlcmVuY2U6IHAudXNlZFJlZmVyZW5jZSwKICAgIHVzZWRDb2RlOiBwLnVzZWRDb2RlCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFNlcnZpY2VSZXF1ZXN0UmVzb3VyY2Uoc2VydmljZVJlcXVlc3QgU2VydmljZVJlcXVlc3QsIHByb2ZpbGVVUkxzIExpc3Q8RkhJUi5jYW5vbmljYWw+KToKICBzZXJ2aWNlUmVxdWVzdCBzUgogIHJldHVybiBTZXJ2aWNlUmVxdWVzdHsKICAgIGlkOiBGSElSLmlkIHt2YWx1ZTogJ0xDUi0nICsgc1IuaWR9LAogICAgbWV0YTogTWV0YUVsZW1lbnQoc1IsIHByb2ZpbGVVUkxzKSwKICAgIGV4dGVuc2lvbjogc1IuZXh0ZW5zaW9uLAogICAgaW5zdGFudGlhdGVzQ2Fub25pY2FsOiBzUi5pbnN0YW50aWF0ZXNDYW5vbmljYWwsCiAgICBpbnN0YW50aWF0ZXNVcmk6IHNSLmluc3RhbnRpYXRlc1VyaSwKICAgIGJhc2VkT246IHNSLmJhc2VkT24sCiAgICByZXBsYWNlczogc1IucmVwbGFjZXMsCiAgICByZXF1aXNpdGlvbjogc1IucmVxdWlzaXRpb24sCiAgICBzdGF0dXM6IHNSLnN0YXR1cywKICAgIGludGVudDogc1IuaW50ZW50LAogICAgY2F0ZWdvcnk6IHNSLmNhdGVnb3J5LAogICAgcHJpb3JpdHk6IHNSLnByaW9yaXR5LAogICAgZG9Ob3RQZXJmb3JtOiBzUi5kb05vdFBlcmZvcm0sCiAgICBjb2RlOiBzUi5jb2RlLAogICAgb3JkZXJEZXRhaWw6IHNSLm9yZGVyRGV0YWlsLAogICAgcXVhbnRpdHk6IHNSLnF1YW50aXR5LAogICAgc3ViamVjdDogc1Iuc3ViamVjdCwKICAgIGVuY291bnRlcjogc1IuZW5jb3VudGVyLAogICAgb2NjdXJyZW5jZTogc1Iub2NjdXJyZW5jZSwKICAgIGFzTmVlZGVkOiBzUi5hc05lZWRlZCwKICAgIGF1dGhvcmVkT246IHNSLmF1dGhvcmVkT24sCiAgICByZXF1ZXN0ZXI6IHNSLnJlcXVlc3RlciwKICAgIHBlcmZvcm1lclR5cGU6IHNSLnBlcmZvcm1lclR5cGUsCiAgICBwZXJmb3JtZXI6IHNSLnBlcmZvcm1lciwKICAgIGxvY2F0aW9uQ29kZTogc1IubG9jYXRpb25Db2RlLAogICAgbG9jYXRpb25SZWZlcmVuY2U6IHNSLmxvY2F0aW9uUmVmZXJlbmNlLAogICAgcmVhc29uQ29kZTogc1IucmVhc29uQ29kZSwKICAgIHJlYXNvblJlZmVyZW5jZTogc1IucmVhc29uUmVmZXJlbmNlLAogICAgaW5zdXJhbmNlOiBzUi5pbnN1cmFuY2UsCiAgICBzdXBwb3J0aW5nSW5mbzogc1Iuc3VwcG9ydGluZ0luZm8sCiAgICBzcGVjaW1lbjogc1Iuc3BlY2ltZW4sCiAgICBib2R5U2l0ZTogc1IuYm9keVNpdGUsCiAgICBub3RlOiBzUi5ub3RlLAogICAgcGF0aWVudEluc3RydWN0aW9uOiBzUi5wYXRpZW50SW5zdHJ1Y3Rpb24sCiAgICByZWxldmFudEhpc3Rvcnk6IHNSLnJlbGV2YW50SGlzdG9yeQogIH0KCmRlZmluZSBmdW5jdGlvbiBTcGVjaW1lbkNvbGxlY3Rpb24oY29sbGVjdGlvbiBGSElSLlNwZWNpbWVuLkNvbGxlY3Rpb24pOgogIGNvbGxlY3Rpb24gYwogIHJldHVybiBGSElSLlNwZWNpbWVuLkNvbGxlY3Rpb257CiAgICBjb2xsZWN0b3I6IGMuY29sbGVjdG9yLAogICAgY29sbGVjdGVkOiBjLmNvbGxlY3RlZCwKICAgICJkdXJhdGlvbiI6IGMuImR1cmF0aW9uIiwKICAgIHF1YW50aXR5OiBjLnF1YW50aXR5LAogICAgbWV0aG9kOiBjLm1ldGhvZCwKICAgIGJvZHlTaXRlOiBjLmJvZHlTaXRlLAogICAgZmFzdGluZ1N0YXR1czogYy5mYXN0aW5nU3RhdHVzCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFNwZWNpbWVuUHJvY2Vzc2luZyhwcm9jZXNzaW5nIExpc3Q8RkhJUi5TcGVjaW1lbi5Qcm9jZXNzaW5nPik6CiAgcHJvY2Vzc2luZyBwCiAgcmV0dXJuIEZISVIuU3BlY2ltZW4uUHJvY2Vzc2luZ3sKICAgIGRlc2NyaXB0aW9uOiBwLmRlc2NyaXB0aW9uLAogICAgcHJvY2VkdXJlOiBwLnByb2NlZHVyZSwKICAgIGFkZGl0aXZlOiBwLmFkZGl0aXZlLAogICAgdGltZTogcC50aW1lCiAgfQoKZGVmaW5lIGZ1bmN0aW9uIFNwZWNpbWVuQ29udGFpbmVyKGNvbnRhaW5lciBMaXN0PEZISVIuU3BlY2ltZW4uQ29udGFpbmVyPik6CiAgY29udGFpbmVyIGMKICByZXR1cm4gRkhJUi5TcGVjaW1lbi5Db250YWluZXJ7CiAgICBkZXNjcmlwdGlvbjogYy5kZXNjcmlwdGlvbiwKICAgIHR5cGU6IGMudHlwZSwKICAgIGNhcGFjaXR5OiBjLmNhcGFjaXR5LAogICAgc3BlY2ltZW5RdWFudGl0eTogYy5zcGVjaW1lblF1YW50aXR5LAogICAgYWRkaXRpdmU6IGMuYWRkaXRpdmUKICB9CgpkZWZpbmUgZnVuY3Rpb24gU3BlY2ltZW5SZXNvdXJjZShzcGVjaW1lbiBTcGVjaW1lbiwgcHJvZmlsZVVSTHMgTGlzdDxGSElSLmNhbm9uaWNhbD4pOgogIHNwZWNpbWVuIHMKICByZXR1cm4gU3BlY2ltZW57CiAgICBpZDogRkhJUi5pZCB7dmFsdWU6ICdMQ1ItJyArIHMuaWR9LAogICAgbWV0YTogTWV0YUVsZW1lbnQocywgcHJvZmlsZVVSTHMpLAogICAgZXh0ZW5zaW9uOiBzLmV4dGVuc2lvbiwKICAgIGlkZW50aWZpZXI6IHMuaWRlbnRpZmllciwKICAgIGFjY2Vzc2lvbklkZW50aWZpZXI6IHMuYWNjZXNzaW9uSWRlbnRpZmllciwKICAgIHN0YXR1czogcy5zdGF0dXMsCiAgICB0eXBlOiBzLnR5cGUsCiAgICBzdWJqZWN0OiBzLnN1YmplY3QsCiAgICByZWNlaXZlZFRpbWU6IHMucmVjZWl2ZWRUaW1lLAogICAgcGFyZW50OiBzLnBhcmVudCwKICAgIHJlcXVlc3Q6IHMucmVxdWVzdCwKICAgIGNvbGxlY3Rpb246IFNwZWNpbWVuQ29sbGVjdGlvbihzLmNvbGxlY3Rpb24pLAogICAgcHJvY2Vzc2luZzogU3BlY2ltZW5Qcm9jZXNzaW5nKHMucHJvY2Vzc2luZyksCiAgICBjb250YWluZXI6IFNwZWNpbWVuQ29udGFpbmVyKHMuY29udGFpbmVyKSwKICAgIGNvbmRpdGlvbjogcy5jb25kaXRpb24sCiAgICBub3RlOiBzLm5vdGUKICB9CgpkZWZpbmUgZnVuY3Rpb24gIk9wZXJhdGlvbk91dGNvbWVSZXNvdXJjZSIoZXJyb3JJZCBTdHJpbmcsIHJlc291cmNlSWQgRkhJUi5pZCwgbWVzc2FnZSBTdHJpbmcpOgogIE9wZXJhdGlvbk91dGNvbWV7CiAgICAgIGlkOiBGSElSLmlke3ZhbHVlOiBlcnJvcklkfSwKICAgICAgaXNzdWU6IHsKICAgICAgICAgIEZISVIuT3BlcmF0aW9uT3V0Y29tZS5Jc3N1ZXsKICAgICAgICAgIHNldmVyaXR5OiBGSElSLklzc3VlU2V2ZXJpdHl7dmFsdWU6ICdlcnJvcid9LAogICAgICAgICAgY29kZTogRkhJUi5Jc3N1ZVR5cGV7dmFsdWU6ICdleGNlcHRpb24nfSwKICAgICAgICAgIGRldGFpbHM6IAogICAgICAgICAgICAgIEZISVIuQ29kZWFibGVDb25jZXB0ewogICAgICAgICAgICAgICAgICBjb2Rpbmc6IHsKICAgICAgICAgICAgICAgICAgICAgIENvZGluZ3sKICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTogdXJpe3ZhbHVlOiAnaHR0cHM6Ly9sYW50YW5hZ3JvdXAuY29tL3ZhbGlkYXRpb24tZXJyb3InfSwKICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IGNvZGV7dmFsdWU6ICdFcnJvcid9LAogICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogc3RyaW5ne3ZhbHVlOiAnUmVzb3VyY2UgJyArIHJlc291cmNlSWQgKyAnIGZhaWxlZCB2YWxpZGF0aW9uOiAnICsgbWVzc2FnZX0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgfQogIH0="/>
    <url
         value="http://www.cdc.gov/nhsn/fhirportal/dqm/ig/Library-SharedResourceCreation.cql"/>
  </content>
</Library>