Common CQL Artifacts for FHIR (US-Based)
1.0.0-ballot - STU 1 Ballot
Common CQL Artifacts for FHIR (US-Based), published by HL7 International / Clinical Decision Support. This guide is not an authorized publication; it is the continuous build for version 1.0.0-ballot built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/us-cql-ig/ and changes regularly. See the Directory of published versions
Page standards status: Informative | Maturity Level: 3 |
<Library xmlns="http://hl7.org/fhir">
<id value="GMTPInitialExpressions"/>
<text>
<status value="extensions"/>
<div xmlns="http://www.w3.org/1999/xhtml">
<div>
<table class="grid dict">
<tr>
<th scope="row"><b>Title: </b></th>
<td style="padding-left: 4px;">Expression Library for the Genetic/Molecular testing preauthorization Example</td>
</tr>
<tr>
<th scope="row"><b>Id: </b></th>
<td style="padding-left: 4px;">GMTPInitialExpressions</td>
</tr>
<tr>
<th scope="row"><b>Version: </b></th>
<td style="padding-left: 4px;">1.0.0-ballot</td>
</tr>
<tr>
<th scope="row"><b>Url: </b></th>
<td style="padding-left: 4px;"><a href="Library-GMTPInitialExpressions.html">Expression Library for the Genetic/Molecular testing preauthorization Example</a></td>
</tr>
<tr>
<th scope="row"><b>Status: </b></th>
<td style="padding-left: 4px;">draft</td>
</tr>
<tr>
<th scope="row"><b>Experimental: </b></th>
<td style="padding-left: 4px;">true</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-09-10 20:00:05+0000</td>
</tr>
<tr>
<th scope="row"><b>Publisher: </b></th>
<td style="padding-left: 4px;">HL7 International / Clinical Decision Support</td>
</tr>
<tr>
<th scope="row"><b>Description: </b></th>
<td style="padding-left: 4px;"><div><p>Initial expressions for use in populating answers to questions in the Genetic/Molecular testing preauthorization example questionnaire.</p>
</div></td>
</tr>
<tr>
<th scope="row"><b>Jurisdiction: </b></th>
<td style="padding-left: 4px;">US</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 GMTPInitialExpressions
using USCore version '7.0.0'
using FHIR version '4.0.1'
include hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers
include USCoreCommon called UC
include USCoreElements called UCE
codesystem "LOINC": 'http://loinc.org'
codesystem "Identifier Type": 'http://terminology.hl7.org/CodeSystem/v2-0203'
code "Member Number": 'MB' from "Identifier Type"
parameter "Coverage" FHIR.Coverage
parameter "ServiceRequest" FHIR.ServiceRequest
context Patient
define "All Problem List Items":
UCE."All Problem List Items"
/*
@question: Patient history (including age at diagnosis):
TODO: Determine whether we should be considering encounter diagnoses and/or health concerns
TODO: Determine whether age at onset is actually relevant, or if we would, in an automated context, just return the Condition resource
TODO: Does "age at diagnosis" mean "age at onset" or is it really asking for when the diagnosis was recorded?
TODO: Is there a version of patient history that is reusable here?
*/
define "Patient history":
UCE."All Problem List Items" C
let prevalence: C.prevalenceInterval()
where C.isConfirmed()
return {
diagnosis: C.code.display,
ageAtOnset: ToString(AgeInYearsAt(start of prevalence)),
onset: ToString(start of prevalence),
abatement: ToString(if prevalence.hasEnd() then end of prevalence else null)
}
/*
@linkId: history|patient-history
*/
define "Patient history including age at diagnosis":
"Patient history" H
return H.diagnosis & (', ' + H.ageAtOnset + ' yrs') & (', abated ' + H.abatement)
define "Billing Provider Name":
"Billing Provider".name
define "Billing Provider Phone":
UC.Mobile("Billing Provider".telecom).value
define "Billing Provider Address":
{ 'TODO: remove hard-coded address' }
define "Retrieve Member Coverage test parameter":
// When executing CQL with the VSCode extension retrieve the resource specific for the test case
// the list of resource ids match the resources from the test case folders
singleton from ([FHIR.Coverage] CV where CV.id in {
'Coverage-example-GMTP', // testcase: GMTP-example-patient-2
'coverage-GMTP-1' // testcase: USCorePatient-GMTP-1
})
define "Member Coverage":
Coalesce(
Coverage,
"Retrieve Member Coverage test parameter"
)
define "Retrieve Service Request test parameter":
// When executing CQL with the VSCode extension retrieve the resource specific for the test case
// the list of resource ids match the resources from the test case folders
singleton from ([FHIR.ServiceRequest] SR where SR.id in {
'ServiceRequest-example-1-GMTP', // testcase: GMTP-example-patient-2
'service-request-USCorePatient-GMTP-1' // testcase: USCorePatient-GMTP-1
})
define "Most Recent ServiceRequest":
Coalesce(
ServiceRequest,
"Retrieve Service Request test parameter"
)
define "Billing Provider":
UCE.BillingProvider("Member Coverage")
define "Billing Provider NPI":
"Billing Provider".identifier I
where I.system = 'http://hl7.org/fhir/sid/us-npi'
return I.value
define "Billing Provider Fax":
"Billing Provider".telecom T
where T.system = 'fax'
return T.value
define "Date of Service":
"Most Recent ServiceRequest".occurrence.value
define "Requested Test":
"Most Recent ServiceRequest".code
define "Test ID":
Combine("Requested Test".coding.code.value, ', ')
define "Test name":
Combine("Requested Test".coding.display.value, ', ')
define "ALL ICD and CPT Test Codes":
"Test ICD Codes" union "Test CPT Codes"
define "Test ICD Codes":
"Requested Test".coding C
where C.system.value = 'http://hl7.org/fhir/sid/icd-10-cm'
return C.code.value
define "Test CPT Codes":
"Requested Test".coding C
where C.system.value = 'http://www.ama-assn.org/go/cpt'
return C.code.value
define "Test Related Condition":
UCE.RelatedCondition("Most Recent ServiceRequest")
//.reasonReference changed to .reason in FHIR R5
define "Diagnosis Descriptions":
"Test Related Condition".code.coding.display.value
define "Billing Provider different from Servicing Provider":
if "Billing Provider".id != First(UCE.ServicingProvider("Most Recent ServiceRequest").id) then
'Yes'
else
'No'
define "Clinical Trial Organization":
First(UCE."Clinical Trial Organization" O
with "Clinical Trial" T such that EndsWith(T.sponsor.reference, O.id))
//in FHIR R5 T.associatedParty instead of T.sponsor
define "BillingProvider is Clinical Trial Organization":
"Billing Provider" = "Clinical Trial Organization"
//TODO does not get populated properly
define "Part of clinical trial":
if "Is Research Subject" and "BillingProvider is Clinical Trial Organization" then
'Yes'
else
'No'
define "Is Research Subject":
exists("Research Subject")
define "Research Subject":
UCE."Research Subject"
//ResearchSubject.individual is from FHIR version v4.0.1 and has been replaced by R.subject in FHIR R5
define "Clinical Trial":
UCE."All Clinical Trials" R
with "Research Subject" S such that EndsWith(S.study.reference, R.id)
with "Test Related Condition" C such that C.code in R.condition
define "Clinical Trial ID":
"Clinical Trial".identifier C
where C.system = 'https://clinicaltrials.gov'
return C.value.value
define "Previous genetic testing for condition":
from
UCE."All ServiceRequests" S,
ServiceRequest SR
where S.occurrence before SR.occurrence
and S.id != SR.id
and S.reasonReference = SR.reasonReference
return S.id.value
//define "Family history of genetic testing"
//too general to prefill?</code></pre></td></tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table>
<tr><th><b>Content: </b> application/elm+xml</th></tr>
<tr><td><pre><code/></pre></td></tr>
</table>
</td>
</tr>
</table>
</div>
</div>
</text>
<extension
url="http://hl7.org/fhir/StructureDefinition/structuredefinition-fmm">
<valueInteger value="3"/>
</extension>
<extension
url="http://hl7.org/fhir/StructureDefinition/structuredefinition-wg">
<valueCode value="cds"/>
</extension>
<extension
url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
<valueCode value="informative"/>
</extension>
<url value="http://hl7.org/fhir/us/cql/Library/GMTPInitialExpressions"/>
<version value="1.0.0-ballot"/>
<name value="GMTPInitialExpressions"/>
<title
value="Expression Library for the Genetic/Molecular testing preauthorization Example"/>
<status value="draft"/>
<experimental value="true"/>
<type>
<coding>
<system value="http://terminology.hl7.org/CodeSystem/library-type"/>
<code value="logic-library"/>
</coding>
</type>
<date value="2025-09-10T20:00:05+00:00"/>
<publisher value="HL7 International / Clinical Decision Support"/>
<contact>
<telecom>
<system value="url"/>
<value value="http://www.hl7.org/Special/committees/dss"/>
</telecom>
</contact>
<description
value="Initial expressions for use in populating answers to questions in the Genetic/Molecular testing preauthorization example questionnaire."/>
<jurisdiction>
<coding>
<system value="urn:iso:std:iso:3166"/>
<code value="US"/>
<display value="United States of America"/>
</coding>
</jurisdiction>
<content>
<contentType value="text/cql"/>
<data
value="bGlicmFyeSBHTVRQSW5pdGlhbEV4cHJlc3Npb25zCgp1c2luZyBVU0NvcmUgdmVyc2lvbiAnNy4wLjAnCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjEnCgppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScgY2FsbGVkIEZISVJIZWxwZXJzCmluY2x1ZGUgVVNDb3JlQ29tbW9uIGNhbGxlZCBVQwppbmNsdWRlIFVTQ29yZUVsZW1lbnRzIGNhbGxlZCBVQ0UKCmNvZGVzeXN0ZW0gIkxPSU5DIjogJ2h0dHA6Ly9sb2luYy5vcmcnCmNvZGVzeXN0ZW0gIklkZW50aWZpZXIgVHlwZSI6ICdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL3YyLTAyMDMnCmNvZGUgIk1lbWJlciBOdW1iZXIiOiAnTUInIGZyb20gIklkZW50aWZpZXIgVHlwZSIKCnBhcmFtZXRlciAiQ292ZXJhZ2UiIEZISVIuQ292ZXJhZ2UKcGFyYW1ldGVyICJTZXJ2aWNlUmVxdWVzdCIgRkhJUi5TZXJ2aWNlUmVxdWVzdAoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgIkFsbCBQcm9ibGVtIExpc3QgSXRlbXMiOgogIFVDRS4iQWxsIFByb2JsZW0gTGlzdCBJdGVtcyIKCi8qCkBxdWVzdGlvbjogUGF0aWVudCBoaXN0b3J5IChpbmNsdWRpbmcgYWdlIGF0IGRpYWdub3Npcyk6ClRPRE86IERldGVybWluZSB3aGV0aGVyIHdlIHNob3VsZCBiZSBjb25zaWRlcmluZyBlbmNvdW50ZXIgZGlhZ25vc2VzIGFuZC9vciBoZWFsdGggY29uY2VybnMKVE9ETzogRGV0ZXJtaW5lIHdoZXRoZXIgYWdlIGF0IG9uc2V0IGlzIGFjdHVhbGx5IHJlbGV2YW50LCBvciBpZiB3ZSB3b3VsZCwgaW4gYW4gYXV0b21hdGVkIGNvbnRleHQsIGp1c3QgcmV0dXJuIHRoZSBDb25kaXRpb24gcmVzb3VyY2UKVE9ETzogRG9lcyAiYWdlIGF0IGRpYWdub3NpcyIgbWVhbiAiYWdlIGF0IG9uc2V0IiBvciBpcyBpdCByZWFsbHkgYXNraW5nIGZvciB3aGVuIHRoZSBkaWFnbm9zaXMgd2FzIHJlY29yZGVkPwpUT0RPOiBJcyB0aGVyZSBhIHZlcnNpb24gb2YgcGF0aWVudCBoaXN0b3J5IHRoYXQgaXMgcmV1c2FibGUgaGVyZT8KKi8KZGVmaW5lICJQYXRpZW50IGhpc3RvcnkiOgogIFVDRS4iQWxsIFByb2JsZW0gTGlzdCBJdGVtcyIgQwogICAgbGV0IHByZXZhbGVuY2U6IEMucHJldmFsZW5jZUludGVydmFsKCkKICAgIHdoZXJlIEMuaXNDb25maXJtZWQoKQogICAgcmV0dXJuIHsKICAgICAgZGlhZ25vc2lzOiBDLmNvZGUuZGlzcGxheSwKICAgICAgYWdlQXRPbnNldDogVG9TdHJpbmcoQWdlSW5ZZWFyc0F0KHN0YXJ0IG9mIHByZXZhbGVuY2UpKSwKICAgICAgb25zZXQ6IFRvU3RyaW5nKHN0YXJ0IG9mIHByZXZhbGVuY2UpLAogICAgICBhYmF0ZW1lbnQ6IFRvU3RyaW5nKGlmIHByZXZhbGVuY2UuaGFzRW5kKCkgdGhlbiBlbmQgb2YgcHJldmFsZW5jZSBlbHNlIG51bGwpCiAgICB9CgovKgpAbGlua0lkOiBoaXN0b3J5fHBhdGllbnQtaGlzdG9yeQoqLwpkZWZpbmUgIlBhdGllbnQgaGlzdG9yeSBpbmNsdWRpbmcgYWdlIGF0IGRpYWdub3NpcyI6CiAgIlBhdGllbnQgaGlzdG9yeSIgSAogICAgcmV0dXJuIEguZGlhZ25vc2lzICYgKCcsICcgKyBILmFnZUF0T25zZXQgKyAnIHlycycpICYgKCcsIGFiYXRlZCAnICsgSC5hYmF0ZW1lbnQpCgpkZWZpbmUgIkJpbGxpbmcgUHJvdmlkZXIgTmFtZSI6CiAgIkJpbGxpbmcgUHJvdmlkZXIiLm5hbWUKCmRlZmluZSAiQmlsbGluZyBQcm92aWRlciBQaG9uZSI6CiAgVUMuTW9iaWxlKCJCaWxsaW5nIFByb3ZpZGVyIi50ZWxlY29tKS52YWx1ZQoKZGVmaW5lICJCaWxsaW5nIFByb3ZpZGVyIEFkZHJlc3MiOgogIHsgJ1RPRE86IHJlbW92ZSBoYXJkLWNvZGVkIGFkZHJlc3MnIH0KCmRlZmluZSAiUmV0cmlldmUgTWVtYmVyIENvdmVyYWdlIHRlc3QgcGFyYW1ldGVyIjoKICAvLyBXaGVuIGV4ZWN1dGluZyBDUUwgd2l0aCB0aGUgVlNDb2RlIGV4dGVuc2lvbiByZXRyaWV2ZSB0aGUgcmVzb3VyY2Ugc3BlY2lmaWMgZm9yIHRoZSB0ZXN0IGNhc2UKICAvLyAgIHRoZSBsaXN0IG9mIHJlc291cmNlIGlkcyBtYXRjaCB0aGUgcmVzb3VyY2VzIGZyb20gdGhlIHRlc3QgY2FzZSBmb2xkZXJzCiAgc2luZ2xldG9uIGZyb20gKFtGSElSLkNvdmVyYWdlXSBDViB3aGVyZSBDVi5pZCBpbiB7CiAgICAnQ292ZXJhZ2UtZXhhbXBsZS1HTVRQJywgLy8gdGVzdGNhc2U6IEdNVFAtZXhhbXBsZS1wYXRpZW50LTIKICAgICdjb3ZlcmFnZS1HTVRQLTEnICAgICAgICAvLyB0ZXN0Y2FzZTogVVNDb3JlUGF0aWVudC1HTVRQLTEKICB9KQoKZGVmaW5lICJNZW1iZXIgQ292ZXJhZ2UiOgogIENvYWxlc2NlKAogICAgQ292ZXJhZ2UsCiAgICAiUmV0cmlldmUgTWVtYmVyIENvdmVyYWdlIHRlc3QgcGFyYW1ldGVyIgogICkKCmRlZmluZSAiUmV0cmlldmUgU2VydmljZSBSZXF1ZXN0IHRlc3QgcGFyYW1ldGVyIjoKICAvLyBXaGVuIGV4ZWN1dGluZyBDUUwgd2l0aCB0aGUgVlNDb2RlIGV4dGVuc2lvbiByZXRyaWV2ZSB0aGUgcmVzb3VyY2Ugc3BlY2lmaWMgZm9yIHRoZSB0ZXN0IGNhc2UKICAvLyAgIHRoZSBsaXN0IG9mIHJlc291cmNlIGlkcyBtYXRjaCB0aGUgcmVzb3VyY2VzIGZyb20gdGhlIHRlc3QgY2FzZSBmb2xkZXJzCiAgc2luZ2xldG9uIGZyb20gKFtGSElSLlNlcnZpY2VSZXF1ZXN0XSBTUiB3aGVyZSBTUi5pZCBpbiB7CiAgICAnU2VydmljZVJlcXVlc3QtZXhhbXBsZS0xLUdNVFAnLCAgICAgICAvLyB0ZXN0Y2FzZTogR01UUC1leGFtcGxlLXBhdGllbnQtMgogICAgJ3NlcnZpY2UtcmVxdWVzdC1VU0NvcmVQYXRpZW50LUdNVFAtMScgLy8gdGVzdGNhc2U6IFVTQ29yZVBhdGllbnQtR01UUC0xCiAgfSkKCmRlZmluZSAiTW9zdCBSZWNlbnQgU2VydmljZVJlcXVlc3QiOgogIENvYWxlc2NlKAogICAgU2VydmljZVJlcXVlc3QsCiAgICAiUmV0cmlldmUgU2VydmljZSBSZXF1ZXN0IHRlc3QgcGFyYW1ldGVyIgogICkKCmRlZmluZSAiQmlsbGluZyBQcm92aWRlciI6CiAgVUNFLkJpbGxpbmdQcm92aWRlcigiTWVtYmVyIENvdmVyYWdlIikKCmRlZmluZSAiQmlsbGluZyBQcm92aWRlciBOUEkiOgogICJCaWxsaW5nIFByb3ZpZGVyIi5pZGVudGlmaWVyIEkgCiAgd2hlcmUgSS5zeXN0ZW0gPSAnaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvdXMtbnBpJwogIHJldHVybiBJLnZhbHVlCgpkZWZpbmUgIkJpbGxpbmcgUHJvdmlkZXIgRmF4IjoKICAiQmlsbGluZyBQcm92aWRlciIudGVsZWNvbSBUCiAgd2hlcmUgVC5zeXN0ZW0gPSAnZmF4JwogIHJldHVybiBULnZhbHVlCgpkZWZpbmUgIkRhdGUgb2YgU2VydmljZSI6CiAgIk1vc3QgUmVjZW50IFNlcnZpY2VSZXF1ZXN0Ii5vY2N1cnJlbmNlLnZhbHVlCgpkZWZpbmUgIlJlcXVlc3RlZCBUZXN0IjoKICAiTW9zdCBSZWNlbnQgU2VydmljZVJlcXVlc3QiLmNvZGUKCmRlZmluZSAiVGVzdCBJRCI6CiAgQ29tYmluZSgiUmVxdWVzdGVkIFRlc3QiLmNvZGluZy5jb2RlLnZhbHVlLCAnLCAnKSAKCmRlZmluZSAiVGVzdCBuYW1lIjoKICAgQ29tYmluZSgiUmVxdWVzdGVkIFRlc3QiLmNvZGluZy5kaXNwbGF5LnZhbHVlLCAnLCAnKQoKZGVmaW5lICJBTEwgSUNEIGFuZCBDUFQgVGVzdCBDb2RlcyI6CiAgICJUZXN0IElDRCBDb2RlcyIgdW5pb24gIlRlc3QgQ1BUIENvZGVzIgoKZGVmaW5lICJUZXN0IElDRCBDb2RlcyI6CiAiUmVxdWVzdGVkIFRlc3QiLmNvZGluZyBDCiAgd2hlcmUgQy5zeXN0ZW0udmFsdWUgPSAnaHR0cDovL2hsNy5vcmcvZmhpci9zaWQvaWNkLTEwLWNtJwogIHJldHVybiBDLmNvZGUudmFsdWUKICAKZGVmaW5lICJUZXN0IENQVCBDb2RlcyI6CiAgIlJlcXVlc3RlZCBUZXN0Ii5jb2RpbmcgQwogIHdoZXJlIEMuc3lzdGVtLnZhbHVlID0gICdodHRwOi8vd3d3LmFtYS1hc3NuLm9yZy9nby9jcHQnCiAgcmV0dXJuIEMuY29kZS52YWx1ZQoKZGVmaW5lICJUZXN0IFJlbGF0ZWQgQ29uZGl0aW9uIjoKICBVQ0UuUmVsYXRlZENvbmRpdGlvbigiTW9zdCBSZWNlbnQgU2VydmljZVJlcXVlc3QiKQogIC8vLnJlYXNvblJlZmVyZW5jZSBjaGFuZ2VkIHRvIC5yZWFzb24gaW4gRkhJUiBSNQoKZGVmaW5lICJEaWFnbm9zaXMgRGVzY3JpcHRpb25zIjoKICAiVGVzdCBSZWxhdGVkIENvbmRpdGlvbiIuY29kZS5jb2RpbmcuZGlzcGxheS52YWx1ZQoKZGVmaW5lICJCaWxsaW5nIFByb3ZpZGVyIGRpZmZlcmVudCBmcm9tIFNlcnZpY2luZyBQcm92aWRlciI6CiAgaWYgIkJpbGxpbmcgUHJvdmlkZXIiLmlkICE9IEZpcnN0KFVDRS5TZXJ2aWNpbmdQcm92aWRlcigiTW9zdCBSZWNlbnQgU2VydmljZVJlcXVlc3QiKS5pZCkgdGhlbgogICdZZXMnCiAgZWxzZSAKICAnTm8nCgpkZWZpbmUgIkNsaW5pY2FsIFRyaWFsIE9yZ2FuaXphdGlvbiI6CiAgRmlyc3QoVUNFLiJDbGluaWNhbCBUcmlhbCBPcmdhbml6YXRpb24iIE8gCiAgICB3aXRoICJDbGluaWNhbCBUcmlhbCIgIFQgc3VjaCB0aGF0IEVuZHNXaXRoKFQuc3BvbnNvci5yZWZlcmVuY2UsIE8uaWQpKSAgCiAvL2luIEZISVIgUjUgVC5hc3NvY2lhdGVkUGFydHkgaW5zdGVhZCBvZiBULnNwb25zb3IgCgpkZWZpbmUgIkJpbGxpbmdQcm92aWRlciBpcyBDbGluaWNhbCBUcmlhbCBPcmdhbml6YXRpb24iOgogICJCaWxsaW5nIFByb3ZpZGVyIiA9ICJDbGluaWNhbCBUcmlhbCBPcmdhbml6YXRpb24iCgovL1RPRE8gZG9lcyBub3QgZ2V0IHBvcHVsYXRlZCBwcm9wZXJseQpkZWZpbmUgIlBhcnQgb2YgY2xpbmljYWwgdHJpYWwiOgogaWYgIklzIFJlc2VhcmNoIFN1YmplY3QiIGFuZCAiQmlsbGluZ1Byb3ZpZGVyIGlzIENsaW5pY2FsIFRyaWFsIE9yZ2FuaXphdGlvbiIgdGhlbgogJ1llcycKIGVsc2UKICdObycKCmRlZmluZSAiSXMgUmVzZWFyY2ggU3ViamVjdCI6CiAgZXhpc3RzKCJSZXNlYXJjaCBTdWJqZWN0IikKCmRlZmluZSAiUmVzZWFyY2ggU3ViamVjdCI6CiAgVUNFLiJSZXNlYXJjaCBTdWJqZWN0IgogICAgIC8vUmVzZWFyY2hTdWJqZWN0LmluZGl2aWR1YWwgaXMgZnJvbSBGSElSIHZlcnNpb24gdjQuMC4xIGFuZCBoYXMgYmVlbiByZXBsYWNlZCBieSBSLnN1YmplY3QgaW4gRkhJUiBSNQoKZGVmaW5lICJDbGluaWNhbCBUcmlhbCI6CiAgVUNFLiJBbGwgQ2xpbmljYWwgVHJpYWxzIiBSIAogICAgd2l0aCAiUmVzZWFyY2ggU3ViamVjdCIgUyBzdWNoIHRoYXQgRW5kc1dpdGgoUy5zdHVkeS5yZWZlcmVuY2UsIFIuaWQpCiAgICB3aXRoICAiVGVzdCBSZWxhdGVkIENvbmRpdGlvbiIgQyBzdWNoIHRoYXQgQy5jb2RlIGluIFIuY29uZGl0aW9uCgpkZWZpbmUgIkNsaW5pY2FsIFRyaWFsIElEIjoKICAiQ2xpbmljYWwgVHJpYWwiLmlkZW50aWZpZXIgQwogIHdoZXJlIEMuc3lzdGVtID0gJ2h0dHBzOi8vY2xpbmljYWx0cmlhbHMuZ292JwogIHJldHVybiBDLnZhbHVlLnZhbHVlCgpkZWZpbmUgIlByZXZpb3VzIGdlbmV0aWMgdGVzdGluZyBmb3IgY29uZGl0aW9uIjoKICBmcm9tIAogICAgVUNFLiJBbGwgU2VydmljZVJlcXVlc3RzIiBTLAogICAgU2VydmljZVJlcXVlc3QgU1IKICB3aGVyZSBTLm9jY3VycmVuY2UgYmVmb3JlIFNSLm9jY3VycmVuY2UKICAgIGFuZCBTLmlkICE9IFNSLmlkCiAgICBhbmQgUy5yZWFzb25SZWZlcmVuY2UgPSBTUi5yZWFzb25SZWZlcmVuY2UKICByZXR1cm4gUy5pZC52YWx1ZQoKLy9kZWZpbmUgIkZhbWlseSBoaXN0b3J5IG9mIGdlbmV0aWMgdGVzdGluZyIKLy90b28gZ2VuZXJhbCB0byBwcmVmaWxsPw=="/>
</content>
<content>
<contentType value="application/elm+xml"/>
</content>
</Library>