{
  "resourceType" : "Library",
  "id" : "HOB",
  "text" : {
    "status" : "extensions",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p><b style=\"color: maroon\">Exception generating Narrative: Unable to Parse HTML - node 'DateTime' has unexpected content ' ' (last text = ' \n  default Interval[@2026-01-01T00:00:00.0, @2026-01-31T23:59:59.999]\n\ncontext Patient\n\n/*\nED/OBS encounter: Any patient visit to an emergency department (ED) or observation (OBS) location. One patient visit equals one encounter. ED/OBS are considered outpatient locations.\nHospital Stay: NHSN defines a hospital stay to be inclusive of any: (a) ED/OBS encounters, (b) inpatient admissions, or (c) ED/OBS encounters that lead to inpatient admissions (within 1 hour of ED/OBS encounters).\nInpatient admission: For NHSN reporting purposes, the ‘date admitted to the facility’ is hospital day (HD) 1. NHSN defines an inpatient as any patient cared for or housed on an inpatient location. Local status may differ from NHSN definition; all days spent in an inpatient unit, regardless of local admission status and/or billing status are included in the counts of admissions and inpatient days. For NHSN reporting purposes, the date admitted to the facility is the calendar date that the patient physically locates to an inpatient location.\nMeasurement Period: Time period selected for report generation/metric calculation\nAdult: Patients who are ≥18 years old on the calendar day of the start of the Hospital Stay\nPediatric: Patients who are ' at line 205 column 30</b></p></div>"
  },
  "extension" : [{
    "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-fmm",
    "valueInteger" : 1
  },
  {
    "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-wg",
    "valueCode" : "cds"
  },
  {
    "url" : "http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status",
    "valueCode" : "informative"
  }],
  "url" : "https://madie.cms.gov/Library/HOB",
  "version" : "2026.1.0",
  "name" : "HOB",
  "title" : "HOB Elements",
  "status" : "draft",
  "experimental" : true,
  "type" : {
    "coding" : [{
      "system" : "http://terminology.hl7.org/CodeSystem/library-type",
      "code" : "logic-library"
    }]
  },
  "date" : "2026-06-16T17:19:32+00:00",
  "description" : "DRAFT Data elements used in the calculation of Hospital-onset Bacteremia and Fungemia measures.",
  "topic" : [{
    "text" : "FHIR"
  },
  {
    "text" : "CQL"
  }],
  "content" : [{
    "contentType" : "text/cql",
    "data" : "LyoKRHJhZnQgQ1FMIHJlcHJlc2VudGF0aW9uIG9mIEhvc3BpdGFsIE9uc2V0IEJhY3RlcmVtaWEgYW5kIEZ1bmdlbWlhIFN1cnZlaWxsYW5jZSBNZWFzdXJlCiovCmxpYnJhcnkgSE9CCgp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgoKaW5jbHVkZSBDUU1Db21tb24gdmVyc2lvbiAnNS4xLjAwMCcgY2FsbGVkIENRTUNvbW1vbgppbmNsdWRlIEhPQk9yZ2FuaXNtVGF4b25vbXkKCnZhbHVlc2V0ICJCYWN0ZXJpYSBhbmQgRnVuZ2kgLSBIT0IgU3BlY2lmaWMiOiAnVEJEJwp2YWx1ZXNldCAiQmFjdGVyaWFsIFNraW4gQ29tbWVuc2FscyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTQyMjIuMjQuNy4yODEnIHZlcnNpb24gJzIwMjQxMDAzJwp2YWx1ZXNldCAiQ29tbXVuaXR5LWFzc29jaWF0ZWQgT3JnYW5pc21zIC0gSE9CIFNwZWNpZmljIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExNDIyMi4yNC43LjExNzAnIHZlcnNpb24gJzIwMjUwOTMwJwp2YWx1ZXNldCAiQmFjdGVyaWFsIGFuZCBGdW5nYWwgQmxvb2QgQ3VsdHVyZSBUZXN0cyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM3NjIuMS40LjExOTAuNjMnIHZlcnNpb24gJzIwMjIwNzIxJwp2YWx1ZXNldCAiRW50ZXJhbCBNZWRpY2F0aW9uIFJvdXRlIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTE5MC43NCcgdmVyc2lvbiAnMjAyNDA2MTgnCnZhbHVlc2V0ICJJbnRyYXZlbm91cyBNZWRpY2F0aW9uIFJvdXRlIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzc2Mi4xLjQuMTE5MC43NScgdmVyc2lvbiAnMjAyNDA2MTgnCnZhbHVlc2V0ICJTcGVjaW1lbiBUeXBlIC0gQmxvb2QiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTE0MjIyLjI0LjcuMzE1JyB2ZXJzaW9uICcyMDI1MDkyOScKdmFsdWVzZXQgIkFic29sdXRlIE5ldXRyb3BoaWxzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExNDIyMi4yNC43LjExNzMnIHZlcnNpb24gJzIwMjUwOTEzJwp2YWx1ZXNldCAiQW50aW1pY3JvYmlhbCBNZWRpY2F0aW9ucyAtIEkuViBBbnRpYmFjdGVyaWFscyI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTQyMjIuMjQuNy4xMjIwJyB2ZXJzaW9uICcyMDI2MDEyMicKdmFsdWVzZXQgIkFudGltaWNyb2JpYWwgTWVkaWNhdGlvbnMgLSBPcmFsIEFudGliYWN0ZXJpYWxzIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExNDIyMi4yNC43LjEyMjAnIHZlcnNpb24gJzIwMjUwODEzJwp2YWx1ZXNldCAiQW50aW1pY3JvYmlhbHMgZm9yIEJhY3RlcmVtaWEgYW5kIEZ1bmdlbWlhIFN1cnZlaWxsYW5jZSBNb2R1bGUiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTE0MjIyLjI0LjcuMTIyMCcgdmVyc2lvbiAnMjAyNjAyMDUnCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+IAogIGRlZmF1bHQgSW50ZXJ2YWxbQDIwMjYtMDEtMDFUMDA6MDA6MDAuMCwgQDIwMjYtMDEtMzFUMjM6NTk6NTkuOTk5XQoKY29udGV4dCBQYXRpZW50CgovKgpFRC9PQlMgZW5jb3VudGVyOiBBbnkgcGF0aWVudCB2aXNpdCB0byBhbiBlbWVyZ2VuY3kgZGVwYXJ0bWVudCAoRUQpIG9yIG9ic2VydmF0aW9uIChPQlMpIGxvY2F0aW9uLiBPbmUgcGF0aWVudCB2aXNpdCBlcXVhbHMgb25lIGVuY291bnRlci4gRUQvT0JTIGFyZSBjb25zaWRlcmVkIG91dHBhdGllbnQgbG9jYXRpb25zLgpIb3NwaXRhbCBTdGF5OiBOSFNOIGRlZmluZXMgYSBob3NwaXRhbCBzdGF5IHRvIGJlIGluY2x1c2l2ZSBvZiBhbnk6IChhKSBFRC9PQlMgZW5jb3VudGVycywgKGIpIGlucGF0aWVudCBhZG1pc3Npb25zLCBvciAoYykgRUQvT0JTIGVuY291bnRlcnMgdGhhdCBsZWFkIHRvIGlucGF0aWVudCBhZG1pc3Npb25zICh3aXRoaW4gMSBob3VyIG9mIEVEL09CUyBlbmNvdW50ZXJzKS4KSW5wYXRpZW50IGFkbWlzc2lvbjogRm9yIE5IU04gcmVwb3J0aW5nIHB1cnBvc2VzLCB0aGUg4oCYZGF0ZSBhZG1pdHRlZCB0byB0aGUgZmFjaWxpdHnigJkgaXMgaG9zcGl0YWwgZGF5IChIRCkgMS4gTkhTTiBkZWZpbmVzIGFuIGlucGF0aWVudCBhcyBhbnkgcGF0aWVudCBjYXJlZCBmb3Igb3IgaG91c2VkIG9uIGFuIGlucGF0aWVudCBsb2NhdGlvbi4gTG9jYWwgc3RhdHVzIG1heSBkaWZmZXIgZnJvbSBOSFNOIGRlZmluaXRpb247IGFsbCBkYXlzIHNwZW50IGluIGFuIGlucGF0aWVudCB1bml0LCByZWdhcmRsZXNzIG9mIGxvY2FsIGFkbWlzc2lvbiBzdGF0dXMgYW5kL29yIGJpbGxpbmcgc3RhdHVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgY291bnRzIG9mIGFkbWlzc2lvbnMgYW5kIGlucGF0aWVudCBkYXlzLiBGb3IgTkhTTiByZXBvcnRpbmcgcHVycG9zZXMsIHRoZSBkYXRlIGFkbWl0dGVkIHRvIHRoZSBmYWNpbGl0eSBpcyB0aGUgY2FsZW5kYXIgZGF0ZSB0aGF0IHRoZSBwYXRpZW50IHBoeXNpY2FsbHkgbG9jYXRlcyB0byBhbiBpbnBhdGllbnQgbG9jYXRpb24uCk1lYXN1cmVtZW50IFBlcmlvZDogVGltZSBwZXJpb2Qgc2VsZWN0ZWQgZm9yIHJlcG9ydCBnZW5lcmF0aW9uL21ldHJpYyBjYWxjdWxhdGlvbgpBZHVsdDogUGF0aWVudHMgd2hvIGFyZSDiiaUxOCB5ZWFycyBvbGQgb24gdGhlIGNhbGVuZGFyIGRheSBvZiB0aGUgc3RhcnQgb2YgdGhlIEhvc3BpdGFsIFN0YXkKUGVkaWF0cmljOiBQYXRpZW50cyB3aG8gYXJlIDwgMTggeWVhcnMgb2xkIG9uIHRoZSBjYWxlbmRhciBkYXkgb2YgdGhlIHN0YXJ0IG9mIHRoZSBIb3NwaXRhbCBTdGF5Ck5JQ1U6IFBhdGllbnRzIHdobyBhcmUgaG91c2VkIGluIGEgTklDVSBsb2NhdGlvbiBhdCB0aGUgdGltZSBvZiBpbmRleCBibG9vZCBjdWx0dXJlIGNvbGxlY3Rpb24KT25jb2xvZ3kvTmV1dHJvcGVuaWE6IFBhdGllbnQgZWl0aGVyIDEpIGxvY2F0ZWQgaW4gYW4gT25jb2xvZ3kgd2FyZCwgb3IgMikgd2l0aCBuZXV0cm9wZW5pYSBkZWZpbmUgYW4gYWJzb2x1dGUgbmV1dHJvcGhpbCBjb3VudCAoQU5DKSA8MTAwMCBjZWxsL21pY3JvTCBvYnNlcnZlZCBmb3Ig4omlMiBkYXlzIGluIGEgKy8tIDctZGF5IHdpbmRvdyBwZXJpb2QgYXJvdW5kIHRoZSBpbmRleCBibG9vZCBjdWx0dXJlCk8tQ09COiBPdXRwYXRpZW50IENvbW11bml0eS1vbnNldCBCYWN0ZXJlbWlhICYgRnVuZ2VtaWEgRXZlbnQKQ09COiBDb21tdW5pdHktb25zZXQgQmFjdGVyZW1pYSAmIEZ1bmdlbWlhIEV2ZW50CkhPQjogSG9zcGl0YWwtb25zZXQgQmFjdGVyZW1pYSAmIEZ1bmdlbWlhIEV2ZW50CiovCgovKgp8T25zZXQgfE1ldHJpYyB8TnVtZXJhdG9yIHxEZW5vbWluYXRvciB8TXVsdGlwbGllciB8Tm90ZXMgCnxPdXRwYXRpZW50IENvbW11bml0eSBPbnNldCB8Ty1DT0IgUHJldmFsZW5jZSBSYXRlIHxOdW1iZXIgb2Ygb3V0cGF0aWVudCBPLUNPQiBldmVudHMgb2NjdXJyaW5nIHdpdGhpbiB0aGUgbWVhc3VyZW1lbnQgcGVyaW9kIHxOdW1iZXIgb2Ygb3V0cGF0aWVudCAoRUQvT0JTKSBlbmNvdW50ZXJzIG9jY3VycmluZyB3aXRoaW4gdGhlIG1lYXN1cmVtZW50IHBlcmlvZCB8eCAxMDAgfCB8CnxJbnBhdGllbnQgQ29tbXVuaXR5IE9uc2V0IHxJbnBhdGllbnQgQ09CIFByZXZhbGVuY2UgUmF0ZSB8TnVtYmVyIG9mIGlucGF0aWVudCBDT0IgZXZlbnRzIG9jY3VycmluZyB3aXRoaW4gdGhlIG1lYXN1cmVtZW50IHBlcmlvZCB8TnVtYmVyIG9mIGlucGF0aWVudCBzdGF5cyB3aGVyZSBhdCBsZWFzdCBvbmUgb2YgdGhlIGZpcnN0IHRocmVlIGlucGF0aWVudCBjYWxlbmRhciBkYXlzIGZhbGxzIHdpdGhpbiB0aGUgbWVhc3VyZW1lbnQgcGVyaW9kIHx4IDEwMCB8IHwKfEhvc3BpdGFsIE9uc2V0IHxIT0IgQ3J1ZGUgUmlzayB8TnVtYmVyIG9mIGlucGF0aWVudCBzdGF5cyB3aXRoIGF0IGxlYXN0IG9uZSBIT0IgZXZlbnQgb2NjdXJyaW5nIHdpdGhpbiB0aGUgbWVhc3VyZW1lbnQgcGVyaW9kIHxOdW1iZXIgb2YgaW5wYXRpZW50IHN0YXlzIHdoZXJlIHRoZXJlIGFyZSBhbnkgaW5wYXRpZW50IGRheXMgZWxpZ2libGUgZm9yIGEgaG9zcGl0YWwtb25zZXQgZXZlbnQgZHVyaW5nIHRoZSBtZWFzdXJlbWVudCBwZXJpb2QgfHggMTAwIHxUaGUgZGVub21pbmF0b3IgZm9yIEhPQiBhZG1pc3Npb24gcmlzayB3aWxsIGluY2x1ZGUgb25seSB0aG9zZSBpbnBhdGllbnQgc3RheXMgd2hvIHdlcmUgZWxpZ2libGUgZm9yIGFuIEhPQiBldmVudCBpbiB0aGUgbWVhc3VyZW1lbnQgcGVyaW9kOiAxLiBTdGF5cyB3aGVyZSBkYXkgNCAob3IgbGF0ZXIpIG9mIHRoZWlyIGFkbWlzc2lvbiBvY2N1cnJlZCBkdXJpbmcgdGhlIG1lYXN1cmVtZW50IHBlcmlvZC4gMi4gSWYgYW4gZXZlbnQgb2NjdXJzLCB0aGVuIGEgc3RheSB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgZGVub21pbmF0b3Igb2Ygc3Vic2VxdWVudCBtZWFzdXJlbWVudCBwZXJpb2RzLiB8CnxeIHxIT0IgSW5jaWRlbmNlIERlbnNpdHkgfE51bWJlciBvZiBIT0IgZXZlbnRzIHxOdW1iZXIgb2YgaW5wYXRpZW50IGRheXMgZWxpZ2libGUgZm9yIGEgaG9zcGl0YWwtb25zZXQgZXZlbnQgZHVyaW5nIHRoZSBtZWFzdXJlbWVudCBwZXJpb2QgfHggMTAsMDAwIHxFbGlnaWJsZSBwYXRpZW50IGRheXMgYXJlIGRlZmluZWQgYXM6IDEuIElucGF0aWVudCBkYXkgNCB1bnRpbCBkaXNjaGFyZ2Ugb3IgaW5kZXggSE9CIGV2ZW50IGRhdGUuIHwKKi8KCi8qCk1ldHJpYzogTy1DT0IgUHJldmFsZW5jZSBSYXRlCk51bWVyYXRvcjogTnVtYmVyIG9mIG91dHBhdGllbnQgTy1DT0IgZXZlbnRzIG9jY3VycmluZyB3aXRoaW4gdGhlIG1lYXN1cmVtZW50IHBlcmlvZApEZW5vbWluYXRvcjogTnVtYmVyIG9mIG91dHBhdGllbnQgKEVEL09CUykgZW5jb3VudGVycyBvY2N1cnJpbmcgd2l0aGluIHRoZSBtZWFzdXJlbWVudCBwZXJpb2QKKi8KCi8vZGVmaW5lIGZ1bmN0aW9uICJEZW5vbWluYXRvciBPYnNlcnZhdGlvbiIoKToKLy8gIENvdW50KCJPdXRwYXRpZW50IEVuY291bnRlciBEdXJpbmcgTWVhc3VyZW1lbnQgUGVyaW9kIikKCi8vZGVmaW5lIGZ1bmN0aW9uICJOdW1lcmF0b3IgT2JzZXJ2YXRpb24iKCk6Ci8vICBDb3VudCgiTy1DT0IgRXZlbnQgRHVyaW5nIE1lYXN1cmVtZW50IFBlcmlvZCIpCgpkZWZpbmUgIkJhY3RlcmlhbCBhbmQgRnVuZ2FsIEJsb29kIEN1bHR1cmUgVGVzdCBSZXN1bHRzIjoKICBbT2JzZXJ2YXRpb246ICJCYWN0ZXJpYWwgYW5kIEZ1bmdhbCBCbG9vZCBDdWx0dXJlIFRlc3RzIl0gTwogICAgd2hlcmUgTy5pc0xhYm9yYXRvcnkoKQogICAgICBhbmQgTy5pc1Jlc3VsdGVkKCkKCmRlZmluZSAiQmFjdGVyZW1pYSBvciBGdW5nZW1pYSBSZXN1bHQiOgogICJCYWN0ZXJpYWwgYW5kIEZ1bmdhbCBCbG9vZCBDdWx0dXJlIFRlc3QgUmVzdWx0cyIgUgogICAgd2hlcmUgKFIudmFsdWUgaW4gIkJhY3RlcmlhIGFuZCBGdW5naSAtIEhPQiBTcGVjaWZpYyIpCiAgICAgIGFuZCBub3QgKFIudmFsdWUgaW4gIkJhY3RlcmlhbCBTa2luIENvbW1lbnNhbHMiKQoKZGVmaW5lICJCYWN0ZXJlbWlhIG9yIEZ1bmdlbWlhIFJlc3VsdCBXaXRoIFNwZWNpbWVuIjoKICBmcm9tCiAgICAiQmFjdGVyZW1pYSBvciBGdW5nZW1pYSBSZXN1bHQiIFIsCiAgICBbU3BlY2ltZW46ICJTcGVjaW1lbiBUeXBlIC0gQmxvb2QiXSBTCiAgICB3aGVyZSBSLnNwZWNpbWVuLnJlZmVyZW5jZXMoUykKICAgIHJldHVybiB7CiAgICAgIHJlc3VsdDogUiwKICAgICAgc3BlY2ltZW46IFMKICAgIH0KCi8vIEFzc2VydGlvbiBpcyB0aGF0IHRoZXJlIGlzIG5ldmVyIG1vcmUgdGhhbiBvbmUgRUQvT2JzZXJ2YXRpb24gcHJlY2VkaW5nIGFuIGlucGF0aWVudCBzdGF5Ci8vIGkuZS4gRUQgLT4gRUQgLT4gSW5wYXRpZW50LCBFRCAtPiBPYnNlcnZhdGlvbiAtPiBFRCAtPiBJbnBhdGllbnQsIE9ic2VydmF0aW9uIC0+IElucGF0aWVudCBhcmUgYWxsIGNvbWJpbmF0aW9ucyB0aGF0IHdpbGwgbmV2ZXIgYXBwZWFyCi8vIEJ1aWxkIGVuY291bnRlciBub3JtYWxpemF0aW9uIGxvZ2ljCi8vIEVuY291bnRlci5jbGFzc0hpc3RvcnkgaXMgbm90IHBvcHVsYXRlZAovLyBFbmNvdW50ZXIgbm9ybWFsaXphdGlvbgpkZWZpbmUgIk91dHBhdGllbnQgRW5jb3VudGVyIjoKICBbRW5jb3VudGVyOiBDUU1Db21tb24uIkVtZXJnZW5jeSBEZXBhcnRtZW50IFZpc2l0Il0gRUQKICAgIGxldCBvYnNlcnZhdGlvbkVuY291bnRlcjogRmlyc3QoCiAgICAgIFtFbmNvdW50ZXI6IENRTUNvbW1vbi4iT2JzZXJ2YXRpb24gU2VydmljZXMiXSBPCiAgICAgICAgd2hlcmUgTy5wZXJpb2Qgc3RhcnRzIDEgaG91ciBvciBsZXNzIG9uIG9yIGJlZm9yZSBlbmQgb2YgRUQucGVyaW9kCiAgICAgICAgc29ydCBieSBzdGFydCBvZiBwZXJpb2QKICAgICksCiAgICBlbmRPZlN0YXk6IENvYWxlc2NlKGVuZCBvZiBvYnNlcnZhdGlvbkVuY291bnRlci5wZXJpb2QsIGVuZCBvZiBFRC5wZXJpb2QpLAogICAgaW5wYXRpZW50RW5jb3VudGVyOiBGaXJzdCgKICAgICAgW0VuY291bnRlcjogQ1FNQ29tbW9uLiJFbmNvdW50ZXIgSW5wYXRpZW50Il0gRQogICAgICAgIHdoZXJlIEUucGVyaW9kIHN0YXJ0cyAxIGhvdXIgb3IgbGVzcyBvbiBvciBiZWZvcmUgZW5kT2ZTdGF5CiAgICApCiAgcmV0dXJuIHsKICAgIGVkRW5jb3VudGVyOiBFRCwKICAgIG9ic2VydmF0aW9uRW5jb3VudGVyOiBvYnNlcnZhdGlvbkVuY291bnRlciwKICAgIGlucGF0aWVudEVuY291bnRlcjogaW5wYXRpZW50RW5jb3VudGVyLAogICAgb3V0cGF0aWVudFN0YXk6IEludGVydmFsW3N0YXJ0IG9mIEVELnBlcmlvZCwgQ29hbGVzY2Uoc3RhcnQgb2YgaW5wYXRpZW50RW5jb3VudGVyLnBlcmlvZCwgZW5kT2ZTdGF5KV0sCiAgICBpbnBhdGllbnRTdGF5OiBpbnBhdGllbnRFbmNvdW50ZXIucGVyaW9kCiAgfQoKZGVmaW5lICJJbnBhdGllbnQgRW5jb3VudGVyIjoKICBbRW5jb3VudGVyOiBDUU1Db21tb24uIkVuY291bnRlciBJbnBhdGllbnQiXSBFCiAgICBsZXQgb2JzZXJ2YXRpb25FbmNvdW50ZXI6IExhc3QoCiAgICAgIFtFbmNvdW50ZXI6IENRTUNvbW1vbi4iT2JzZXJ2YXRpb24gU2VydmljZXMiXSBPCiAgICAgICAgd2hlcmUgTy5wZXJpb2QgZW5kcyAxIGhvdXIgb3IgbGVzcyBvbiBvciBiZWZvcmUgc3RhcnQgb2YgRS5wZXJpb2QKICAgICAgICBzb3J0IGJ5IGVuZCBvZiBwZXJpb2QKICAgICksCiAgICB2aXNpdFN0YXJ0OiBDb2FsZXNjZShzdGFydCBvZiBvYnNlcnZhdGlvbkVuY291bnRlci5wZXJpb2QsIHN0YXJ0IG9mIEUucGVyaW9kKSwKICAgIGVkRW5jb3VudGVyOiBMYXN0KAogICAgICBbRW5jb3VudGVyOiBDUU1Db21tb24uIkVtZXJnZW5jeSBEZXBhcnRtZW50IFZpc2l0Il0gRUQKICAgICAgICB3aGVyZSBFRC5wZXJpb2QgZW5kcyAxIGhvdXIgb3IgbGVzcyBvbiBvciBiZWZvcmUgdmlzaXRTdGFydAogICAgICAgIHNvcnQgYnkgZW5kIG9mIHBlcmlvZAogICAgKSwKICAgIG91dHBhdGllbnRTdGF5OgogICAgICBpZiBvYnNlcnZhdGlvbkVuY291bnRlciBpcyBudWxsIGFuZCBlZEVuY291bnRlciBpcyBudWxsIHRoZW4KICAgICAgICBudWxsCiAgICAgIGVsc2UKICAgICAgICBJbnRlcnZhbFtDb2FsZXNjZShzdGFydCBvZiBlZEVuY291bnRlci5wZXJpb2QsIHN0YXJ0IG9mIG9ic2VydmF0aW9uRW5jb3VudGVyLnBlcmlvZCksIHN0YXJ0IG9mIEUucGVyaW9kXQogICAgcmV0dXJuIHsKICAgICAgZWRFbmNvdW50ZXI6IGVkRW5jb3VudGVyLAogICAgICBvYnNlcnZhdGlvbkVuY291bnRlcjogb2JzZXJ2YXRpb25FbmNvdW50ZXIsCiAgICAgIGlucGF0aWVudEVuY291bnRlcjogRSwKICAgICAgb3V0cGF0aWVudFN0YXk6IG91dHBhdGllbnRTdGF5LAogICAgICBpbnBhdGllbnRTdGF5OiBFLnBlcmlvZAogICAgfQoKLy8gVE9ETzogVVNDREkrIFF1YWxpdHkvVVNDREkgR2FwIChTcGVjaW1lbiBDb2xsZWN0aW9uIFRpbWUpCmRlZmluZSAiRW5jb3VudGVyIFdpdGggTy1DT0IgUmVzdWx0IjoKICAiT3V0cGF0aWVudCBFbmNvdW50ZXIiIEUKICAgIGxldCByZXN1bHRzOiAoCiAgICAgICJCYWN0ZXJlbWlhIG9yIEZ1bmdlbWlhIFJlc3VsdCBXaXRoIFNwZWNpbWVuIiBSUyAKICAgICAgICB3aGVyZSBSUy5zcGVjaW1lbi5jb2xsZWN0aW9uLmNvbGxlY3RlZC50b0ludGVydmFsKCkKICAgICAgICAgIGR1cmluZyBFLm91dHBhdGllbnRTdGF5CiAgICApCiAgICB3aGVyZSBleGlzdHMgKHJlc3VsdHMpCiAgICByZXR1cm4gewogICAgICBlZEVuY291bnRlcjogRS5lZEVuY291bnRlciwKICAgICAgb2JzZXJ2YXRpb25FbmNvdW50ZXI6IEUub2JzZXJ2YXRpb25FbmNvdW50ZXIsCiAgICAgIGlucGF0aWVudEVuY291bnRlcjogRS5pbnBhdGllbnRFbmNvdW50ZXIsCiAgICAgIG91dHBhdGllbnRTdGF5OiBFLm91dHBhdGllbnRTdGF5LAogICAgICBpbnBhdGllbnRTdGF5OiBFLmlucGF0aWVudFN0YXksCiAgICAgIGluZGV4RGF0ZTogTWluKHJlc3VsdHMgUiByZXR1cm4gc3RhcnQgb2YgUi5zcGVjaW1lbi5jb2xsZWN0aW9uLmNvbGxlY3RlZC50b0ludGVydmFsKCkpLAogICAgICBvcmdhbmlzbXM6IHJlc3VsdHMgUiByZXR1cm4gUi5yZXN1bHQudmFsdWUgYXMgQ29kZWFibGVDb25jZXB0CiAgICB9CgpkZWZpbmUgIkVuY291bnRlciBXaXRoIENPQiBSZXN1bHQiOgogICJJbnBhdGllbnQgRW5jb3VudGVyIiBFCiAgICBsZXQgCiAgICAgIG9DT0I6ICJFbmNvdW50ZXIgV2l0aCBPLUNPQiBSZXN1bHQiIG9DT0JFbmNvdW50ZXIgd2hlcmUgRS5pbnBhdGllbnRFbmNvdW50ZXIuaWQgPSBvQ09CRW5jb3VudGVyLmlucGF0aWVudEVuY291bnRlci5pZCwKICAgICAgcmVzdWx0czogKAogICAgICAgICJCYWN0ZXJlbWlhIG9yIEZ1bmdlbWlhIFJlc3VsdCBXaXRoIFNwZWNpbWVuIiBSUwogICAgICAgICAgd2hlcmUgUlMuc3BlY2ltZW4uY29sbGVjdGlvbi5jb2xsZWN0ZWQudG9JbnRlcnZhbCgpCiAgICAgICAgICAgIGR1cmluZyBkYXkgb2YgSW50ZXJ2YWxbc3RhcnQgb2YgRS5pbnBhdGllbnRTdGF5LCBzdGFydCBvZiBFLmlucGF0aWVudFN0YXkgKyAzIGRheXNdCiAgICAgICAgICAgIGFuZCBub3QgZXhpc3RzICgKICAgICAgICAgICAgICBvQ09CLm9yZ2FuaXNtcyBPCiAgICAgICAgICAgICAgICB3aGVyZSBPLm9yZ2FuaXNtTWF0Y2hlcyhSUy5yZXN1bHQudmFsdWUgYXMgQ29kZWFibGVDb25jZXB0KQogICAgICAgICAgICApCiAgICApCiAgICB3aGVyZSBleGlzdHMgKHJlc3VsdHMpCiAgICByZXR1cm4gewogICAgICBlZEVuY291bnRlcjogRS5lZEVuY291bnRlciwKICAgICAgb2JzZXJ2YXRpb25FbmNvdW50ZXI6IEUub2JzZXJ2YXRpb25FbmNvdW50ZXIsCiAgICAgIGlucGF0aWVudEVuY291bnRlcjogRS5pbnBhdGllbnRFbmNvdW50ZXIsCiAgICAgIG91dHBhdGllbnRTdGF5OiBFLm91dHBhdGllbnRTdGF5LAogICAgICBpbnBhdGllbnRTdGF5OiBFLmlucGF0aWVudFN0YXksCiAgICAgIGluZGV4RGF0ZTogTWluKHJlc3VsdHMgUiByZXR1cm4gc3RhcnQgb2YgUi5zcGVjaW1lbi5jb2xsZWN0aW9uLmNvbGxlY3RlZC50b0ludGVydmFsKCkpLAogICAgICBvcmdhbmlzbXM6IHJlc3VsdHMgUiByZXR1cm4gUi5yZXN1bHQudmFsdWUgYXMgQ29kZWFibGVDb25jZXB0CiAgICB9CgpkZWZpbmUgIkVuY291bnRlciB3aXRoIEhPQiBSZXN1bHQiOgogICJJbnBhdGllbnQgRW5jb3VudGVyIiBFCiAgICBsZXQgCiAgICAgIG9DT0I6ICJFbmNvdW50ZXIgV2l0aCBPLUNPQiBSZXN1bHQiIG9DT0JFbmNvdW50ZXIgd2hlcmUgRS5pbnBhdGllbnRFbmNvdW50ZXIuaWQgPSBvQ09CRW5jb3VudGVyLmlucGF0aWVudEVuY291bnRlci5pZCwKICAgICAgQ09COiAiRW5jb3VudGVyIFdpdGggQ09CIFJlc3VsdCIgQ09CRW5jb3VudGVyIHdoZXJlIEUuaW5wYXRpZW50RW5jb3VudGVyLmlkID0gQ09CRW5jb3VudGVyLmlucGF0aWVudEVuY291bnRlci5pZCwKICAgICAgcmVzdWx0czogKAogICAgICAgICJCYWN0ZXJlbWlhIG9yIEZ1bmdlbWlhIFJlc3VsdCBXaXRoIFNwZWNpbWVuIiBSUwogICAgICAgICAgd2hlcmUgUlMuc3BlY2ltZW4uY29sbGVjdGlvbi5jb2xsZWN0ZWQudG9JbnRlcnZhbCgpCiAgICAgICAgICAgIGR1cmluZyBkYXkgb2YgSW50ZXJ2YWxbc3RhcnQgb2YgRS5pbnBhdGllbnRTdGF5ICsgNCBkYXlzLCBlbmQgb2YgRS5pbnBhdGllbnRTdGF5XQogICAgICAgICAgICBhbmQgbm90IGV4aXN0cyAoCiAgICAgICAgICAgICAgb0NPQi5vcmdhbmlzbXMgTwogICAgICAgICAgICAgICAgd2hlcmUgTy5vcmdhbmlzbU1hdGNoZXMoUlMucmVzdWx0LnZhbHVlIGFzIENvZGVhYmxlQ29uY2VwdCkKICAgICAgICAgICAgKQogICAgICAgICAgICBhbmQgbm90IGV4aXN0cyAoCiAgICAgICAgICAgICAgQ09CLm9yZ2FuaXNtcyBPCiAgICAgICAgICAgICAgICB3aGVyZSBPLm9yZ2FuaXNtTWF0Y2hlcyhSUy5yZXN1bHQudmFsdWUgYXMgQ29kZWFibGVDb25jZXB0KQogICAgICAgICAgICApCiAgICApCiAgICB3aGVyZSBkdXJhdGlvbiBpbiBkYXlzIG9mIEUuaW5wYXRpZW50U3RheSA+IDMKICAgICAgYW5kIGV4aXN0cyAocmVzdWx0cykKICAgIHJldHVybiB7CiAgICAgIGVkRW5jb3VudGVyOiBFLmVkRW5jb3VudGVyLAogICAgICBvYnNlcnZhdGlvbkVuY291bnRlcjogRS5vYnNlcnZhdGlvbkVuY291bnRlciwKICAgICAgaW5wYXRpZW50RW5jb3VudGVyOiBFLmlucGF0aWVudEVuY291bnRlciwKICAgICAgb3V0cGF0aWVudFN0YXk6IEUub3V0cGF0aWVudFN0YXksCiAgICAgIGlucGF0aWVudFN0YXk6IEUuaW5wYXRpZW50U3RheSwKICAgICAgaW5kZXhEYXRlOiBNaW4ocmVzdWx0cyBSIHJldHVybiBzdGFydCBvZiBSLnNwZWNpbWVuLmNvbGxlY3Rpb24uY29sbGVjdGVkLnRvSW50ZXJ2YWwoKSksCiAgICAgIG9yZ2FuaXNtczogcmVzdWx0cyBSIHJldHVybiBSLnJlc3VsdC52YWx1ZSBhcyBDb2RlYWJsZUNvbmNlcHQKICAgIH0KCgo="
  }]
}