Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions input/cql/IMMZCommon.cql
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,8 @@ define function ToDate(choice Choice<FHIR.date, FHIR.string>):
case
when choice is FHIR.date then
choice as FHIR.date
when ConvertsToDate(choice) then
ToDate(choice)
else
Message(null as FHIR.date, true, '1', 'Error', 'Cannot compute a date from a String value')
end
Expand All @@ -240,6 +242,8 @@ define function ToDateTime(choice Choice<FHIR.dateTime, FHIR.string>):
case
when choice is FHIR.dateTime then
choice as FHIR.dateTime
when ConvertsToDateTime(choice) then
ToDateTime(choice)
else
Message(null as FHIR.dateTime, true, '1', 'Error', 'Cannot compute a date from a String value')
end
Expand Down
181 changes: 139 additions & 42 deletions input/cql/IMMZIND08.cql
Original file line number Diff line number Diff line change
@@ -1,68 +1,165 @@
/*
* Library: IMMZ.IND.08
* Immunization coverage for Measles containing vaccine (Estimated Denominator)
* Compares the administered doses of measles containing vaccines (MCV) with the estimated number of surviving infants (if dose 1) or a country supplied denominator (if dose 2) expressed as a percentage.
*
* Numerator: Number of administrations of vaccinations containing a Measles component during reporting period
* Numerator Computation: COUNT immunization events WHERE administered product is a Measles vaccine (IMMZ.A1.DE9) during reporting period
* Denominator: Estimated number of surviving infants (for dose 1) and country supplied denominator for dose sequence 2 (see comments)
* Denominator Computation: PARAMETER number of surviving infants (if Dose Sequence = 1) or PARAMETER of country supplied denominator (if Dose Sequence = 2)
* References: WHO Immunization Facility Analysis Guide (1), WHO / UNICEF Joint Reporting Form (3 - elements 4240 and 4260 )
*/
/* ============================================================================
* Measle Dose 1
* ============================================================================
* Initial Patient Population =
* All patient
*
* Denominator =
* Demographic data from measure report
*
* Numerator =
* Patient with 1st Measle immunization in the reporting period
*
* Denominator Exceptions =
* None
*
* Disaggregation:
* Age Group (< 1 year or 1 year or > 2 years)
* Geographic Region
* Administrative Gender (or Biological Sex)
*
* ============================================================================

/* ============================================================================
* Measle Dose 2
* ============================================================================
* Initial Patient Population =
* All patient
*
* Denominator =
* Demographic data from measure report
*
* Numerator =
* Patient with 2nd Measle immunization in the reporting period
*
* Denominator Exceptions =
* None
*
* Disaggregation:
* - Dose Sequence (1, 2)
* - Age Group (< 1 year or > 1 year)
* - Geographic Region
* - Administrative Gender (or Biological Sex)
* Age Group (< 1 year or 1 year or > 2 years)
* Geographic Region
* Administrative Gender (or Biological Sex)
*
* References: WHO Immunization Facility Analysis Guide (1), WHO / UNICEF Joint Reporting Form (3 - elements 4240 and 4260 )
* ============================================================================
*/
library IMMZIND08 version '1.0.2'

library IMMZIND08

// Start Skeleton CQL
using FHIR version '4.0.1'
include FHIRHelpers version '4.0.1'
include IMMZCommon called IMMZCom
include IMMZConcepts called IMMZc
include IMMZConfig called IMMZCon
include IMMZIndicatorCommon called IMMZIndCom
include IMMZVaccineLibrary called IMMZvl
include FHIRCommon called FC
// End Skeleton CQL

parameter "Measurement Period" Interval<Date>
parameter "canonical_demographic_measure_url" String default 'https://fhir.who.org/Measure/demographicForImmunization'

valueset "Measles Vaccines": 'http://fhir.org/guides/who/smart-immunization/ValueSet/IMMZ.A1.DE'

// Age codes
codesystem "ISO-8601-Derived Periods": 'http://ohie.org/ValueSet/iso-8601-derived-periods' // { 'P0Y--P1Y', 'P1Y--P5Y', ... }
code "P0Y--P1Y": 'P0Y--P1Y' from "ISO-8601-Derived Periods" display '< 1 year'
code "P1Y--P2Y": 'P1Y--P2Y' from "ISO-8601-Derived Periods" display '1 year'
code "P2Y--P9999Y": 'P1Y--P9999Y' from "ISO-8601-Derived Periods" display '2+ years'


// Sex codes
codesystem "Administrative Gender Codes": 'http://hl7.org/fhir/administrative-gender'
code "Males" : 'male' from "Administrative Gender Codes" display 'Males'
code "Females" : 'female' from "Administrative Gender Codes" display 'Females'
code "Other" : 'other' from "Administrative Gender Codes" display 'Other/NA'

context Patient

/*
* Numerator: Number of administrations of vaccinations containing a Measles component during reporting period
* Numerator Computation: COUNT immunization events WHERE administered product is a Measles vaccine (IMMZ.A1.DE9) during reporting period
*/
define "measure-population":
exists(IMMZIndCom."MCV Doses Administered to Patient During Measurement Period")
define getPatientGeographicStr:
Coalesce(First(Patient.address A where A.use in { 'home' }).district, 'nodistrict')

define getPatientGeographicLocation:
if getPatientGeographicStr is not null and getPatientGeographicStr != 'nodistrict' then
First([Location] L where L.id = id { value: getPatientGeographicStr})
else null

/*
* Disaggregator: Dose Sequence (1, 2)
*/
define "Dose Sequence Stratifier":
IMMZIndCom."MCV Doses Administered to Patient During Measurement Period" I
return (singleton from I.protocolApplied).doseNumber
All patient should be included
*/
define InitialPopulation:
true

/*
* Disaggregator: Age Group (<24H of Birth, < 2 weeks)
Denominator initiation population from population measure report on district,
needs https://build.fhir.org/ig/HL7/cqf-measures/StructureDefinition-cqfm-aggregateMethod.html
with https://terminology.hl7.org/5.2.0/CodeSystem-measure-aggregate-method.html#measure-aggregate-method-maximum
*/
define DenominatorPopulation:
First(
[MeasureReport] MR
where MR.subject.reference = 'Location/' + getPatientGeographicStr
and MR.measure = FHIR.canonical {value:canonical_demographic_measure_url}
and start of "Measurement Period" in MR.period ).group.first().stratifier.first().stratum.where(
exists(component.where(code.coding.first().code ~ 'sex' and value.coding.first().code ~ "Administrative Gender Stratifier".code))
and exists(component.where(code.coding.first().code ~ 'AgeGroup' and value.coding.first().code ~ "Age Group Stratifier".code))
).first().population.first().count


define getdoses:
[Immunization] I
where I.vaccineCode in "Measles Vaccines"
sort by (occurrence as FHIR.dateTime).value desc



define FirstDose:
Count(getdoses) = 1 and exists(getdoses.where(ToDate(occurrence) during "Measurement Period"))


define SecondDose:
Count(getdoses) = 2 and exists(getdoses.where(ToDate(occurrence) during "Measurement Period"))


/**
* @description Takes the date choice of a date/string choice (for Immunization date)
*/
define function ToDate(choice Choice<FHIR.date, FHIR.string>):
case
when choice is FHIR.date then
choice as FHIR.date
when ConvertsToDate(choice) then
ToDate(choice)
else
Message(null as FHIR.date, true, '1', 'Error', 'Cannot compute a date from a String value')
end

// Stratifiers

// Age Group
define "Age Group Stratifier":
IMMZIndCom."Infant By Age Stratifier"
case
when AgeInYearsAt(start of "Measurement Period") in Interval[0, 1) then "P0Y--P1Y"
when AgeInYearsAt(start of "Measurement Period") in Interval[1, 2) then "P1Y--P2Y"
else "P2Y--P9999Y"
end

/*
* Disaggregator: Geographic Region
*/
define "Geographic Region Stratifier":
IMMZIndCom."By Geographic Region Stratifier"
// Sex
define "Sex": Patient.gender

/*
* Disaggregator: Administrative Gender (or Biological Sex)
/**
* By Administrative Gender of Patient Stratifier
*/
define "Administrative Gender Stratifier":
IMMZIndCom."By Administrative Gender Stratifier"
case
when Patient.gender = 'male' then "Males"
when Patient.gender = 'female' then "Females"
else "Other"
end

/**
* By Administrative Gender of Patient Stratifier
*/
define "Geographic Region Stratifier":
System.Code {code: getPatientGeographicStr}

define "Region - Sex - Age Group Stratifier":
"Geographic Region Stratifier".code + ':' + "Administrative Gender Stratifier".code + ':' + "Age Group Stratifier".code

/* End of IMMZ.IND.08 */
35 changes: 35 additions & 0 deletions input/resources/library/IMMZIND08.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"resourceType": "Library",
"id": "IMMZIND08",
"version": "1.0.2",
"extension": [ {
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-softwaresystem",
"valueReference": {
"reference": "Device/cqf-tooling"
}
} ],
"url": "http://fhir.org/guides/who/smart-immunization/Library/IMMZIND08",
"name": "IMMZ.IND.08",
"parameter": [ {
"name": "Measurement Period",
"use": "in",
"min": 0,
"max": "1",
"type": "Period"
} ],
"dataRequirement": [ {
"type": "Patient",
"profile": [ "http://hl7.org/fhir/StructureDefinition/Patient" ],
"mustSupport": [ "use" ]
}, {
"type": "Immunization",
"profile": [ "http://hl7.org/fhir/StructureDefinition/Immunization" ],
"mustSupport": [ "status", "vaccineCode", "occurrence" ]
} ],
"content": [
{
"contentType": "text/cql",
"data": "LyoKICogTGlicmFyeTogSU1NWi5JTkQuMDgKICogSW1tdW5pemF0aW9uIGNvdmVyYWdlIGZvciBNZWFzbGVzIGNvbnRhaW5pbmcgdmFjY2luZSAoRXN0aW1hdGVkIERlbm9taW5hdG9yKSAKICogUmVmZXJlbmNlczogV0hPIEltbXVuaXphdGlvbiBGYWNpbGl0eSBBbmFseXNpcyBHdWlkZSAoMSksIFdITyAvIFVOSUNFRiBKb2ludCBSZXBvcnRpbmcgRm9ybSAoMyAtIGVsZW1lbnRzIDQyNDAgYW5kIDQyNjAgKQogKi8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBNZWFzbGUgRG9zZSAxCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogSW5pdGlhbCBQYXRpZW50IFBvcHVsYXRpb24gPQogKiAgICAgQWxsIHBhdGllbnQKICoKICogRGVub21pbmF0b3IgPQogKiAgICAgRGVtb2dyYXBoaWMgZGF0YSBmcm9tIG1lYXN1cmUgcmVwb3J0CiAqCiAqIE51bWVyYXRvciA9CiAqICAgICBQYXRpZW50IHdpdGggMXN0IE1lYXNsZSBpbW11bml6YXRpb24gaW4gdGhlIHJlcG9ydGluZyBwZXJpb2QKICoKICogRGVub21pbmF0b3IgRXhjZXB0aW9ucyA9CiAqICAgICBOb25lCiAqCiAqIERpc2FnZ3JlZ2F0aW9uOgogKiAgICBBZ2UgR3JvdXAgKDwgMSB5ZWFyIG9yIDEgeWVhciBvciA+IDIgeWVhcnMpCiAqICAgIEdlb2dyYXBoaWMgUmVnaW9uCiAqICAgIEFkbWluaXN0cmF0aXZlIEdlbmRlciAob3IgQmlvbG9naWNhbCBTZXgpCiAqIAogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBNZWFzbGUgRG9zZSAyCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogSW5pdGlhbCBQYXRpZW50IFBvcHVsYXRpb24gPQogKiAgICAgQWxsIHBhdGllbnQKICoKICogRGVub21pbmF0b3IgPQogKiAgICAgRGVtb2dyYXBoaWMgZGF0YSBmcm9tIG1lYXN1cmUgcmVwb3J0CiAqCiAqIE51bWVyYXRvciA9CiAqICAgICBQYXRpZW50IHdpdGggMm5kIE1lYXNsZSBpbW11bml6YXRpb24gaW4gdGhlIHJlcG9ydGluZyBwZXJpb2QKICoKICogRGVub21pbmF0b3IgRXhjZXB0aW9ucyA9CiAqICAgICBOb25lCiAqCiAqIERpc2FnZ3JlZ2F0aW9uOgogKiAgICBBZ2UgR3JvdXAgKDwgMSB5ZWFyIG9yIDEgeWVhciBvciA+IDIgeWVhcnMpCiAqICAgIEdlb2dyYXBoaWMgUmVnaW9uCiAqICAgIEFkbWluaXN0cmF0aXZlIEdlbmRlciAob3IgQmlvbG9naWNhbCBTZXgpCiAqIAogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwpsaWJyYXJ5IElNTVpJTkQwOCB2ZXJzaW9uICcxLjAuMicKCgp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4xJwoKcGFyYW1ldGVyICJNZWFzdXJlbWVudCBQZXJpb2QiIEludGVydmFsPERhdGU+CnBhcmFtZXRlciAiY2Fub25pY2FsX2RlbW9ncmFwaGljX21lYXN1cmVfdXJsIiBTdHJpbmcgZGVmYXVsdCAnaHR0cHM6Ly9maGlyLndoby5vcmcvTWVhc3VyZS9kZW1vZ3JhcGhpY0ZvckltbXVuaXphdGlvbicKCnZhbHVlc2V0ICJNZWFzbGVzIFZhY2NpbmVzIjogJ2h0dHA6Ly9maGlyLm9yZy9ndWlkZXMvd2hvL3NtYXJ0LWltbXVuaXphdGlvbi9WYWx1ZVNldC9JTU1aLkExLkRFJwoKLy8gQWdlIGNvZGVzCmNvZGVzeXN0ZW0gIklTTy04NjAxLURlcml2ZWQgUGVyaW9kcyI6ICdodHRwOi8vb2hpZS5vcmcvVmFsdWVTZXQvaXNvLTg2MDEtZGVyaXZlZC1wZXJpb2RzJyAvLyB7ICdQMFktLVAxWScsICdQMVktLVA1WScsIC4uLiB9CmNvZGUgIlAwWS0tUDFZIjogJ1AwWS0tUDFZJyBmcm9tICJJU08tODYwMS1EZXJpdmVkIFBlcmlvZHMiIGRpc3BsYXkgJzwgMSB5ZWFyJwpjb2RlICJQMVktLVAyWSI6ICdQMVktLVAyWScgZnJvbSAiSVNPLTg2MDEtRGVyaXZlZCBQZXJpb2RzIiBkaXNwbGF5ICcxIHllYXInCmNvZGUgIlAyWS0tUDk5OTlZIjogJ1AxWS0tUDk5OTlZJyBmcm9tICJJU08tODYwMS1EZXJpdmVkIFBlcmlvZHMiIGRpc3BsYXkgJzIrIHllYXJzJwoKCi8vIFNleCBjb2Rlcwpjb2Rlc3lzdGVtICJBZG1pbmlzdHJhdGl2ZSBHZW5kZXIgQ29kZXMiOiAnaHR0cDovL2hsNy5vcmcvZmhpci9hZG1pbmlzdHJhdGl2ZS1nZW5kZXInCmNvZGUgIk1hbGVzIiA6ICdtYWxlJyBmcm9tICJBZG1pbmlzdHJhdGl2ZSBHZW5kZXIgQ29kZXMiIGRpc3BsYXkgJ01hbGVzJwpjb2RlICJGZW1hbGVzIiA6ICdmZW1hbGUnIGZyb20gIkFkbWluaXN0cmF0aXZlIEdlbmRlciBDb2RlcyIgZGlzcGxheSAnRmVtYWxlcycKY29kZSAiT3RoZXIiIDogJ290aGVyJyBmcm9tICJBZG1pbmlzdHJhdGl2ZSBHZW5kZXIgQ29kZXMiIGRpc3BsYXkgJ090aGVyL05BJwoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgZ2V0UGF0aWVudEdlb2dyYXBoaWNTdHI6CglDb2FsZXNjZShGaXJzdChQYXRpZW50LmFkZHJlc3MgQSB3aGVyZSBBLnVzZSBpbiB7ICdob21lJyB9KS5kaXN0cmljdCwgJ25vZGlzdHJpY3QnKQoKZGVmaW5lIGdldFBhdGllbnRHZW9ncmFwaGljTG9jYXRpb246CiAgICBpZiBnZXRQYXRpZW50R2VvZ3JhcGhpY1N0ciBpcyBub3QgbnVsbCBhbmQgZ2V0UGF0aWVudEdlb2dyYXBoaWNTdHIgIT0gJ25vZGlzdHJpY3QnIHRoZW4KICAgICAgRmlyc3QoW0xvY2F0aW9uXSBMIHdoZXJlIEwuaWQgPSBpZCB7IHZhbHVlOiBnZXRQYXRpZW50R2VvZ3JhcGhpY1N0cn0pCiAgICBlbHNlIG51bGwKCi8qCkFsbCBwYXRpZW50IHNob3VsZCBiZSBpbmNsdWRlZCAKKi8KZGVmaW5lIEluaXRpYWxQb3B1bGF0aW9uOgoJdHJ1ZQoKLyoKRGVub21pbmF0b3IgaW5pdGlhdGlvbiBwb3B1bGF0aW9uIGZyb20gcG9wdWxhdGlvbiBtZWFzdXJlIHJlcG9ydCBvbiBkaXN0cmljdCwgCm5lZWRzIGh0dHBzOi8vYnVpbGQuZmhpci5vcmcvaWcvSEw3L2NxZi1tZWFzdXJlcy9TdHJ1Y3R1cmVEZWZpbml0aW9uLWNxZm0tYWdncmVnYXRlTWV0aG9kLmh0bWwgCndpdGggaHR0cHM6Ly90ZXJtaW5vbG9neS5obDcub3JnLzUuMi4wL0NvZGVTeXN0ZW0tbWVhc3VyZS1hZ2dyZWdhdGUtbWV0aG9kLmh0bWwjbWVhc3VyZS1hZ2dyZWdhdGUtbWV0aG9kLW1heGltdW0KKi8KZGVmaW5lIERlbm9taW5hdG9yUG9wdWxhdGlvbjoKCUZpcnN0KAoJCVtNZWFzdXJlUmVwb3J0XSBNUiAKCQl3aGVyZSBNUi5zdWJqZWN0LnJlZmVyZW5jZSA9ICdMb2NhdGlvbi8nICsgZ2V0UGF0aWVudEdlb2dyYXBoaWNTdHIKCQlhbmQgTVIubWVhc3VyZSA9IEZISVIuY2Fub25pY2FsIHt2YWx1ZTpjYW5vbmljYWxfZGVtb2dyYXBoaWNfbWVhc3VyZV91cmx9CgkJYW5kIHN0YXJ0IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiIGluIE1SLnBlcmlvZCApLmdyb3VwLmZpcnN0KCkuc3RyYXRpZmllci5maXJzdCgpLnN0cmF0dW0ud2hlcmUoCgkJCWV4aXN0cyhjb21wb25lbnQud2hlcmUoY29kZS5jb2RpbmcuZmlyc3QoKS5jb2RlIH4gJ3NleCcgYW5kICB2YWx1ZS5jb2RpbmcuZmlyc3QoKS5jb2RlIH4gIkFkbWluaXN0cmF0aXZlIEdlbmRlciBTdHJhdGlmaWVyIi5jb2RlKSkgCgkJCWFuZCBleGlzdHMoY29tcG9uZW50LndoZXJlKGNvZGUuY29kaW5nLmZpcnN0KCkuY29kZSB+ICdBZ2VHcm91cCcgYW5kIHZhbHVlLmNvZGluZy5maXJzdCgpLmNvZGUgfiAiQWdlIEdyb3VwIFN0cmF0aWZpZXIiLmNvZGUpKQoJCSkuZmlyc3QoKS5wb3B1bGF0aW9uLmZpcnN0KCkuY291bnQKCgpkZWZpbmUgZ2V0ZG9zZXM6CglbSW1tdW5pemF0aW9uXSBJIAoJd2hlcmUgSS52YWNjaW5lQ29kZSBpbiAiTWVhc2xlcyBWYWNjaW5lcyIKCXNvcnQgYnkgKG9jY3VycmVuY2UgYXMgRkhJUi5kYXRlVGltZSkudmFsdWUgZGVzYwoKCgpkZWZpbmUgRmlyc3REb3NlOgoJQ291bnQoZ2V0ZG9zZXMpID0gMSBhbmQgZXhpc3RzKGdldGRvc2VzLndoZXJlKFRvRGF0ZShvY2N1cnJlbmNlKSBpbiAiTWVhc3VyZW1lbnQgUGVyaW9kIikpCgoKZGVmaW5lIFNlY29uZERvc2U6CglDb3VudChnZXRkb3NlcykgPSAyIGFuZCBleGlzdHMoZ2V0ZG9zZXMud2hlcmUoVG9EYXRlKG9jY3VycmVuY2UpIGluICJNZWFzdXJlbWVudCBQZXJpb2QiKSkKCgovKioKICogQGRlc2NyaXB0aW9uIFRha2VzIHRoZSBkYXRlIGNob2ljZSBvZiBhIGRhdGUvc3RyaW5nIGNob2ljZSAoZm9yIEltbXVuaXphdGlvbiBkYXRlKQogKi8KZGVmaW5lIGZ1bmN0aW9uIFRvRGF0ZShjaG9pY2UgQ2hvaWNlPEZISVIuZGF0ZSwgRkhJUi5zdHJpbmc+KToKICBjYXNlCgkgIHdoZW4gY2hvaWNlIGlzIEZISVIuZGF0ZSB0aGVuCiAgICAJY2hvaWNlIGFzIEZISVIuZGF0ZQogICAgd2hlbiAgQ29udmVydHNUb0RhdGUoY2hvaWNlKSB0aGVuCiAgICAgIFRvRGF0ZShjaG9pY2UpCgkJZWxzZQogICAgICBNZXNzYWdlKG51bGwgYXMgRkhJUi5kYXRlLCB0cnVlLCAnMScsICdFcnJvcicsICdDYW5ub3QgY29tcHV0ZSBhIGRhdGUgZnJvbSBhIFN0cmluZyB2YWx1ZScpCgllbmQKCi8vIFN0cmF0aWZpZXJzCgovLyBBZ2UgR3JvdXAKZGVmaW5lICJBZ2UgR3JvdXAgU3RyYXRpZmllciI6CiAgY2FzZQogICAgd2hlbiBBZ2VJblllYXJzQXQoc3RhcnQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIGluIEludGVydmFsWzAsIDEpIHRoZW4gIlAwWS0tUDFZIgogICAgd2hlbiBBZ2VJblllYXJzQXQoc3RhcnQgb2YgIk1lYXN1cmVtZW50IFBlcmlvZCIpIGluIEludGVydmFsWzEsIDIpIHRoZW4gIlAxWS0tUDJZIgogICAgZWxzZSAiUDJZLS1QOTk5OVkiCiAgZW5kCgovLyBTZXgKZGVmaW5lICJTZXgiOiBQYXRpZW50LmdlbmRlcgoKLyoqCiAqIEJ5IEFkbWluaXN0cmF0aXZlIEdlbmRlciBvZiBQYXRpZW50IFN0cmF0aWZpZXIKICovCmRlZmluZSAiQWRtaW5pc3RyYXRpdmUgR2VuZGVyIFN0cmF0aWZpZXIiOgogICAgY2FzZSAKICAgICAgICB3aGVuIFBhdGllbnQuZ2VuZGVyID0gJ21hbGUnIHRoZW4gIk1hbGVzIgogICAgICAgIHdoZW4gUGF0aWVudC5nZW5kZXIgPSAnZmVtYWxlJyB0aGVuICJGZW1hbGVzIgogICAgICAgIGVsc2UgIk90aGVyIgogICAgZW5kCgovKioKICogQnkgQWRtaW5pc3RyYXRpdmUgR2VuZGVyIG9mIFBhdGllbnQgU3RyYXRpZmllcgogKi8KZGVmaW5lICJHZW9ncmFwaGljIFJlZ2lvbiBTdHJhdGlmaWVyIjoKICAgIFN5c3RlbS5Db2RlIHtjb2RlOiBnZXRQYXRpZW50R2VvZ3JhcGhpY1N0cn0KCmRlZmluZSAiUmVnaW9uIC0gU2V4IC0gQWdlIEdyb3VwIFN0cmF0aWZpZXIiOgoJIkdlb2dyYXBoaWMgUmVnaW9uIFN0cmF0aWZpZXIiLmNvZGUgKyAnOicgKyAiQWRtaW5pc3RyYXRpdmUgR2VuZGVyIFN0cmF0aWZpZXIiLmNvZGUgKyAnOicgKyAiQWdlIEdyb3VwIFN0cmF0aWZpZXIiLmNvZGUKCg=="
}
]
}
Loading