WHO Immunization Implementation Guide
1.0.0 - release
WHO Immunization Implementation Guide, published by WHO. This guide is not an authorized publication; it is the continuous build for version 1.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/WorldHealthOrganization/smart-immunizations/tree/132/merge and changes regularly. See the Directory of published versions
| Draft as of 2026-03-31 |
{
"resourceType" : "Library",
"id" : "IMMZD5DTMeaslesContraindicationsLogic",
"meta" : {
"profile" : [
🔗 "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"🔗 ,
"http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"🔗 ,
"http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"🔗 ,
"http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"
]
},
"text" : {
"status" : "extensions",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n<div>\n <table class=\"grid dict\">\n \n \n <tr>\n <th scope=\"row\"><b>Title: </b></th>\n <td style=\"padding-left: 4px;\">IMMZD5DTMeaslesContraindicationsLogic</td>\n </tr>\n \n\n \n \n <tr>\n <th scope=\"row\"><b>Id: </b></th>\n <td style=\"padding-left: 4px;\">IMMZD5DTMeaslesContraindicationsLogic</td>\n </tr>\n \n\n \n \n <tr>\n <th scope=\"row\"><b>Version: </b></th>\n <td style=\"padding-left: 4px;\">1.0.0</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Url: </b></th>\n <td style=\"padding-left: 4px;\"><a href=\"Library-IMMZD5DTMeaslesContraindicationsLogic.html\">IMMZD5DTMeaslesContraindicationsLogic</a></td>\n </tr>\n \n\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Status: </b></th>\n <td style=\"padding-left: 4px;\">draft</td>\n </tr>\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Type: </b></th>\n <td style=\"padding-left: 4px;\">\n \n \n \n <p style=\"margin-bottom: 5px;\">\n <b>system: </b> <span><a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a></span>\n </p>\n \n \n <p style=\"margin-bottom: 5px;\">\n <b>code: </b> <span>logic-library</span>\n </p>\n \n \n \n \n \n </td>\n </tr>\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Date: </b></th>\n <td style=\"padding-left: 4px;\">2026-03-31 13:54:17+0000</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Publisher: </b></th>\n <td style=\"padding-left: 4px;\">WHO</td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Description: </b></th>\n <td style=\"padding-left: 4px;\"><div><p>This library defines decision support logic for the IMMZ.D5.DT.Measles contraindications decision table in the Immunization CPG</p>\n</div></td>\n </tr>\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n <tr>\n <th scope=\"row\"><b>Related Artifacts: </b></th>\n <td style=\"padding-left: 4px;\">\n \n \n \n <p><b>Dependencies</b></p>\n <ul>\n \n <li><a href=\"Library-IMMZD5DTMeaslesEncounterElements.html\">IMMZD5DTMeaslesEncounterElements</a></li>\n \n </ul>\n \n \n \n \n \n </td>\n </tr>\n \n\n \n <tr>\n <th scope=\"row\"><b>Parameters: </b></th>\n <td style=\"padding-left: 4px;\">\n <table class=\"grid-dict\">\n <tr><th><b>Name</b></th><th><b>Type</b></th><th><b>Min</b></th><th><b>Max</b></th><th><b>In/Out</b></th></tr>\n \n <tr><th>Today</th><th>date</th><th>0</th><th>1</th><th>In</th></tr>\n \n <tr><th>Patient</th><th>Patient</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Draft Medication Request ID for Measles dose</th><th>id</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Measles vaccination contraindicated Case 1</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Measles vaccination contraindicated Case 2</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Measles vaccination contraindicated</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Measles vaccination contraindicated Guidance</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Measles vaccination could be contraindicated. Clinical judgement required. Create a clinical note</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Measles vaccination could be contraindicated. Clinical judgement required. Create a clinical note Guidance</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Clinical judgement required. Create a clinical note Case 1</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Clinical judgement required. Create a clinical note Case 2</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Clinical judgement required. Create a clinical note</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Clinical judgement required. Create a clinical note Guidance</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Guidance</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Has Guidance</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n \n <tr><th>Test Validation</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n \n </table>\n </td>\n </tr>\n \n\n \n\n \n \n <tr>\n <td colspan=\"2\">\n <table>\n <tr><th><a id=\"cql-content\"><b>Content: </b></a> text/cql</th></tr>\n <tr><td><pre><code class=\"language-cql\">/*\n * Library: IMMZD5DTMeaslesContraindicationsLogic (IMMZ.D5.DT.Measles contraindications)\n * Rule: Check for contraindications before administering the vaccine(s) due\n * Decision Table: IMMZ.D5.DT.Measles contraindications\n * Trigger: IMMZ.D5 Determine vaccine(s) to be administered based on contraindications\n */\nlibrary IMMZD5DTMeaslesContraindicationsLogic\n\nusing FHIR version '4.0.1'\ninclude FHIRHelpers version '4.0.1'\n\ninclude IMMZD5DTMeaslesEncounterElements called Encounter\n\nparameter Today Date default Today()\n\ncontext Patient\n\n/*\n @dynamicValue: Draft Medication Request ID for Measles dose\n */\n define "Draft Medication Request ID for Measles dose":\n First(Encounter."Draft Medication Request for Measles dose").id\n\n\n/*\n@dynamicValue: Guidance\n*/\ndefine "Guidance":\n case \n when "Measles vaccination contraindicated" then "Measles vaccination contraindicated Guidance"\n when "Measles vaccination could be contraindicated. Clinical judgement required. Create a clinical note" then "Measles vaccination could be contraindicated. Clinical judgement required. Create a clinical note Guidance"\n when "Clinical judgement required. Create a clinical note" then "Clinical judgement required. Create a clinical note Guidance" \n else ''\n end\n \ndefine "Has Guidance":\n "Guidance" is not null and "Guidance" != ''\n\n/*\n@output: Measles vaccination contraindicated Case 1\n@pseudocode: "Immunization recommendation status" = "Contraindicated"\n*/\ndefine "Measles vaccination contraindicated Case 1":\n Encounter."The client is pregnant"\n\n/*\n@output: Measles vaccination contraindicated Case 2\n@pseudocode: "Immunization recommendation status" = "Contraindicated"\n*/\ndefine "Measles vaccination contraindicated Case 2":\n Encounter."The client is severely immunosuppressed"\n\n/*\n@output: Measles vaccination contraindicated\n@pseudocode: "Immunization recommendation status" = "Contraindicated"\n*/\ndefine "Measles vaccination contraindicated":\n "Measles vaccination contraindicated Case 1"\n or "Measles vaccination contraindicated Case 2"\n\n/*\n@output: Measles vaccination contraindicated Guidance\n@guidance = Do not vaccinate client with measles as measles vaccination is contraindicated for pregnant client.\n@guidance = Do not vaccinate client with measles as measles vaccination is contraindicated for severely immunosuppressed client.\n*/\ndefine "Measles vaccination contraindicated Guidance":\n case\n when "Measles vaccination contraindicated Case 1" then 'Do not vaccinate client with measles as measles vaccination is contraindicated for pregnant client.'\n when "Measles vaccination contraindicated Case 2" then 'Do not vaccinate client with measles as measles vaccination is contraindicated for severely immunosuppressed client.'\n else ''\n end\n\n/*\n@output: Measles vaccination could be contraindicated. Clinical judgement required. Create a clinical note\n@pseudocode: "Immunization recommendation status" = "Further evaluation needed"\n*/\ndefine "Measles vaccination could be contraindicated. Clinical judgement required. Create a clinical note":\n Encounter."The client has history of anaphylactic reactions"\n\n/*\n@output: Measles vaccination could be contraindicated. Clinical judgement required. Create a clinical note Guidance\n@guidance: Do not vaccinate client with measles if client has history of anaphylactic reaction to any component of the vaccine (e.g. neomycin or gelatin).\n*/\ndefine "Measles vaccination could be contraindicated. Clinical judgement required. Create a clinical note Guidance":\n 'Do not vaccinate client with measles if client has history of anaphylactic reaction to any component of the vaccine (e.g. neomycin or gelatin).'\n\n/*\n@output: Clinical judgement required. Create a clinical note Case 1\n@pseudocode: "Immunization recommendation status" = "Further evaluation needed"\n*/\ndefine "Clinical judgement required. Create a clinical note Case 1":\n Encounter."The client has history of severe allergic reactions"\n\n/*\n@output: Clinical judgement required. Create a clinical note Case 2\n@pseudocode: "Immunization recommendation status" = "Further evaluation needed"\n*/\ndefine "Clinical judgement required. Create a clinical note Case 2":\n Encounter."The client has a symptomatic HIV infection"\n\n/*\n@output: Clinical judgement required. Create a clinical note\n@pseudocode: "Immunization recommendation status" = "Further evaluation needed"\n*/\ndefine "Clinical judgement required. Create a clinical note":\n "Clinical judgement required. Create a clinical note Case 1"\n or "Clinical judgement required. Create a clinical note Case 2"\n\n/*\n@output: Clinical judgement required. Create a clinical note Guidance\n@guidance = Do not vaccinate client with measles if client has history of severe allergic reactions to any component of the vaccine (e.g. neomycin or gelatin).\n@guidance = Client has symptomatic HIV infection. Measles vaccination may be considered if the client is not severely immunosuppressed according to conventional definitions, consider risks of vaccination and make a clinical judgement.\n*/\ndefine "Clinical judgement required. Create a clinical note Guidance":\n case\n when "Clinical judgement required. Create a clinical note Case 1" then 'Do not vaccinate client with measles if client has history of severe allergic reactions to any component of the vaccine (e.g. neomycin or gelatin).'\n when "Clinical judgement required. Create a clinical note Case 2" then 'Client has symptomatic HIV infection. Measles vaccination may be considered if the client is not severely immunosuppressed according to conventional definitions, consider risks of vaccination and make a clinical judgement.'\n else ''\n end\n\n\n/*\n@test: Test expected results based on example patients\n*/\ndefine "Test Validation":\n case\n when Patient.id = 'Measles56.1' then "Measles vaccination contraindicated Case 1" and "Guidance" = 'Do not vaccinate client with measles as measles vaccination is contraindicated for pregnant client.'\n when Patient.id = 'Measles57.1' then "Measles vaccination could be contraindicated. Clinical judgement required. Create a clinical note" and "Guidance" = 'Do not vaccinate client with measles if client has history of anaphylactic reaction to any component of the vaccine (e.g. neomycin or gelatin).'\n when Patient.id = 'Measles58.1' then "Clinical judgement required. Create a clinical note Case 1" and "Guidance" = 'Do not vaccinate client with measles if client has history of severe allergic reactions to any component of the vaccine (e.g. neomycin or gelatin).'\n when Patient.id = 'Measles59.1' then "Measles vaccination contraindicated Case 2" and "Guidance" = 'Do not vaccinate client with measles as measles vaccination is contraindicated for severely immunosuppressed client.'\n when Patient.id = 'Measles60.1' then "Clinical judgement required. Create a clinical note Case 2" and "Guidance" = 'Client has symptomatic HIV infection. Measles vaccination may be considered if the client is not severely immunosuppressed according to conventional definitions, consider risks of vaccination and make a clinical judgement.'\n else 'No test case set'\n end\n</code></pre></td></tr>\n </table>\n </td>\n </tr>\n \n \n \n </table>\n</div>\n</div>"
},
"extension" : [
{
"url" : "http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability",
"valueCode" : "computable"
}
],
"url" : "http://smart.who.int/immunizations/Library/IMMZD5DTMeaslesContraindicationsLogic",
"version" : "1.0.0",
"name" : "IMMZD5DTMeaslesContraindicationsLogic",
"title" : "IMMZD5DTMeaslesContraindicationsLogic",
"status" : "draft",
"experimental" : false,
"type" : {
"coding" : [
{
"system" : "http://terminology.hl7.org/CodeSystem/library-type",
"code" : "logic-library"
}
]
},
"date" : "2026-03-31T13:54:17+00:00",
"publisher" : "WHO",
"contact" : [
{
"name" : "WHO",
"telecom" : [
{
"system" : "url",
"value" : "http://who.int"
}
]
}
],
"description" : "This library defines decision support logic for the IMMZ.D5.DT.Measles contraindications decision table in the Immunization CPG",
"relatedArtifact" : [
{
"type" : "depends-on",
"display" : "Library Encounter",
"resource" : "http://smart.who.int/immunizations/Library/IMMZD5DTMeaslesEncounterElements"
}
],
"parameter" : [
{
"name" : "Today",
"use" : "in",
"min" : 0,
"max" : "1",
"type" : "date"
},
{
"name" : "Patient",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Patient"
},
{
"name" : "Draft Medication Request ID for Measles dose",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "id"
},
{
"name" : "Measles vaccination contraindicated Case 1",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "Measles vaccination contraindicated Case 2",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "Measles vaccination contraindicated",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "Measles vaccination contraindicated Guidance",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "string"
},
{
"name" : "Measles vaccination could be contraindicated. Clinical judgement required. Create a clinical note",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "Measles vaccination could be contraindicated. Clinical judgement required. Create a clinical note Guidance",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "string"
},
{
"name" : "Clinical judgement required. Create a clinical note Case 1",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "Clinical judgement required. Create a clinical note Case 2",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "Clinical judgement required. Create a clinical note",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "Clinical judgement required. Create a clinical note Guidance",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "string"
},
{
"name" : "Guidance",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "string"
},
{
"name" : "Has Guidance",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "boolean"
},
{
"name" : "Test Validation",
"use" : "out",
"min" : 0,
"max" : "1",
"type" : "Resource"
}
],
"content" : [
{
"contentType" : "text/cql",
"data" : "LyoKICogTGlicmFyeTogSU1NWkQ1RFRNZWFzbGVzQ29udHJhaW5kaWNhdGlvbnNMb2dpYyAoSU1NWi5ENS5EVC5NZWFzbGVzIGNvbnRyYWluZGljYXRpb25zKQogKiBSdWxlOiBDaGVjayBmb3IgY29udHJhaW5kaWNhdGlvbnMgYmVmb3JlIGFkbWluaXN0ZXJpbmcgdGhlIHZhY2NpbmUocykgZHVlCiAqIERlY2lzaW9uIFRhYmxlOiBJTU1aLkQ1LkRULk1lYXNsZXMgY29udHJhaW5kaWNhdGlvbnMKICogVHJpZ2dlcjogSU1NWi5ENSBEZXRlcm1pbmUgdmFjY2luZShzKSB0byBiZSBhZG1pbmlzdGVyZWQgYmFzZWQgb24gY29udHJhaW5kaWNhdGlvbnMKICovCmxpYnJhcnkgSU1NWkQ1RFRNZWFzbGVzQ29udHJhaW5kaWNhdGlvbnNMb2dpYwoKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgSU1NWkQ1RFRNZWFzbGVzRW5jb3VudGVyRWxlbWVudHMgY2FsbGVkIEVuY291bnRlcgoKcGFyYW1ldGVyIFRvZGF5IERhdGUgZGVmYXVsdCBUb2RheSgpCgpjb250ZXh0IFBhdGllbnQKCi8qCiAgQGR5bmFtaWNWYWx1ZTogRHJhZnQgTWVkaWNhdGlvbiBSZXF1ZXN0IElEIGZvciBNZWFzbGVzIGRvc2UKICAqLwogIGRlZmluZSAiRHJhZnQgTWVkaWNhdGlvbiBSZXF1ZXN0IElEIGZvciBNZWFzbGVzIGRvc2UiOgogICAgRmlyc3QoRW5jb3VudGVyLiJEcmFmdCBNZWRpY2F0aW9uIFJlcXVlc3QgZm9yIE1lYXNsZXMgZG9zZSIpLmlkCgoKLyoKQGR5bmFtaWNWYWx1ZTogR3VpZGFuY2UKKi8KZGVmaW5lICJHdWlkYW5jZSI6CiAgY2FzZSAKICAgIHdoZW4gIk1lYXNsZXMgdmFjY2luYXRpb24gY29udHJhaW5kaWNhdGVkIiB0aGVuICJNZWFzbGVzIHZhY2NpbmF0aW9uIGNvbnRyYWluZGljYXRlZCBHdWlkYW5jZSIKICAgIHdoZW4gIk1lYXNsZXMgdmFjY2luYXRpb24gY291bGQgYmUgY29udHJhaW5kaWNhdGVkLiBDbGluaWNhbCBqdWRnZW1lbnQgcmVxdWlyZWQuIENyZWF0ZSBhIGNsaW5pY2FsIG5vdGUiIHRoZW4gIk1lYXNsZXMgdmFjY2luYXRpb24gY291bGQgYmUgY29udHJhaW5kaWNhdGVkLiBDbGluaWNhbCBqdWRnZW1lbnQgcmVxdWlyZWQuIENyZWF0ZSBhIGNsaW5pY2FsIG5vdGUgR3VpZGFuY2UiCiAgICB3aGVuICJDbGluaWNhbCBqdWRnZW1lbnQgcmVxdWlyZWQuIENyZWF0ZSBhIGNsaW5pY2FsIG5vdGUiIHRoZW4gIkNsaW5pY2FsIGp1ZGdlbWVudCByZXF1aXJlZC4gQ3JlYXRlIGEgY2xpbmljYWwgbm90ZSBHdWlkYW5jZSIgCiAgICBlbHNlICcnCiAgZW5kCiAgCmRlZmluZSAiSGFzIEd1aWRhbmNlIjoKICAiR3VpZGFuY2UiIGlzIG5vdCBudWxsIGFuZCAiR3VpZGFuY2UiICE9ICcnCgovKgpAb3V0cHV0OiBNZWFzbGVzIHZhY2NpbmF0aW9uIGNvbnRyYWluZGljYXRlZCBDYXNlIDEKQHBzZXVkb2NvZGU6ICJJbW11bml6YXRpb24gcmVjb21tZW5kYXRpb24gc3RhdHVzIiA9ICJDb250cmFpbmRpY2F0ZWQiCiovCmRlZmluZSAiTWVhc2xlcyB2YWNjaW5hdGlvbiBjb250cmFpbmRpY2F0ZWQgQ2FzZSAxIjoKICBFbmNvdW50ZXIuIlRoZSBjbGllbnQgaXMgcHJlZ25hbnQiCgovKgpAb3V0cHV0OiBNZWFzbGVzIHZhY2NpbmF0aW9uIGNvbnRyYWluZGljYXRlZCBDYXNlIDIKQHBzZXVkb2NvZGU6ICJJbW11bml6YXRpb24gcmVjb21tZW5kYXRpb24gc3RhdHVzIiA9ICJDb250cmFpbmRpY2F0ZWQiCiovCmRlZmluZSAiTWVhc2xlcyB2YWNjaW5hdGlvbiBjb250cmFpbmRpY2F0ZWQgQ2FzZSAyIjoKICBFbmNvdW50ZXIuIlRoZSBjbGllbnQgaXMgc2V2ZXJlbHkgaW1tdW5vc3VwcHJlc3NlZCIKCi8qCkBvdXRwdXQ6IE1lYXNsZXMgdmFjY2luYXRpb24gY29udHJhaW5kaWNhdGVkCkBwc2V1ZG9jb2RlOiAiSW1tdW5pemF0aW9uIHJlY29tbWVuZGF0aW9uIHN0YXR1cyIgPSAiQ29udHJhaW5kaWNhdGVkIgoqLwpkZWZpbmUgIk1lYXNsZXMgdmFjY2luYXRpb24gY29udHJhaW5kaWNhdGVkIjoKICAiTWVhc2xlcyB2YWNjaW5hdGlvbiBjb250cmFpbmRpY2F0ZWQgQ2FzZSAxIgogICAgb3IgIk1lYXNsZXMgdmFjY2luYXRpb24gY29udHJhaW5kaWNhdGVkIENhc2UgMiIKCi8qCkBvdXRwdXQ6IE1lYXNsZXMgdmFjY2luYXRpb24gY29udHJhaW5kaWNhdGVkIEd1aWRhbmNlCkBndWlkYW5jZSA9IERvIG5vdCB2YWNjaW5hdGUgY2xpZW50IHdpdGggbWVhc2xlcyBhcyBtZWFzbGVzIHZhY2NpbmF0aW9uIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgcHJlZ25hbnQgY2xpZW50LgpAZ3VpZGFuY2UgPSBEbyBub3QgdmFjY2luYXRlIGNsaWVudCB3aXRoIG1lYXNsZXMgYXMgbWVhc2xlcyB2YWNjaW5hdGlvbiBpcyBjb250cmFpbmRpY2F0ZWQgZm9yIHNldmVyZWx5IGltbXVub3N1cHByZXNzZWQgY2xpZW50LgoqLwpkZWZpbmUgIk1lYXNsZXMgdmFjY2luYXRpb24gY29udHJhaW5kaWNhdGVkIEd1aWRhbmNlIjoKICBjYXNlCiAgICB3aGVuICJNZWFzbGVzIHZhY2NpbmF0aW9uIGNvbnRyYWluZGljYXRlZCBDYXNlIDEiIHRoZW4gJ0RvIG5vdCB2YWNjaW5hdGUgY2xpZW50IHdpdGggbWVhc2xlcyBhcyBtZWFzbGVzIHZhY2NpbmF0aW9uIGlzIGNvbnRyYWluZGljYXRlZCBmb3IgcHJlZ25hbnQgY2xpZW50LicKICAgIHdoZW4gIk1lYXNsZXMgdmFjY2luYXRpb24gY29udHJhaW5kaWNhdGVkIENhc2UgMiIgdGhlbiAnRG8gbm90IHZhY2NpbmF0ZSBjbGllbnQgd2l0aCBtZWFzbGVzIGFzIG1lYXNsZXMgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBzZXZlcmVseSBpbW11bm9zdXBwcmVzc2VkIGNsaWVudC4nCiAgICBlbHNlICcnCiAgZW5kCgovKgpAb3V0cHV0OiBNZWFzbGVzIHZhY2NpbmF0aW9uIGNvdWxkIGJlIGNvbnRyYWluZGljYXRlZC4gQ2xpbmljYWwganVkZ2VtZW50IHJlcXVpcmVkLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlCkBwc2V1ZG9jb2RlOiAiSW1tdW5pemF0aW9uIHJlY29tbWVuZGF0aW9uIHN0YXR1cyIgPSAiRnVydGhlciBldmFsdWF0aW9uIG5lZWRlZCIKKi8KZGVmaW5lICJNZWFzbGVzIHZhY2NpbmF0aW9uIGNvdWxkIGJlIGNvbnRyYWluZGljYXRlZC4gQ2xpbmljYWwganVkZ2VtZW50IHJlcXVpcmVkLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlIjoKICBFbmNvdW50ZXIuIlRoZSBjbGllbnQgaGFzIGhpc3Rvcnkgb2YgYW5hcGh5bGFjdGljIHJlYWN0aW9ucyIKCi8qCkBvdXRwdXQ6IE1lYXNsZXMgdmFjY2luYXRpb24gY291bGQgYmUgY29udHJhaW5kaWNhdGVkLiBDbGluaWNhbCBqdWRnZW1lbnQgcmVxdWlyZWQuIENyZWF0ZSBhIGNsaW5pY2FsIG5vdGUgR3VpZGFuY2UKQGd1aWRhbmNlOiBEbyBub3QgdmFjY2luYXRlIGNsaWVudCB3aXRoIG1lYXNsZXMgaWYgY2xpZW50IGhhcyBoaXN0b3J5IG9mIGFuYXBoeWxhY3RpYyByZWFjdGlvbiB0byBhbnkgY29tcG9uZW50IG9mIHRoZSB2YWNjaW5lIChlLmcuIG5lb215Y2luIG9yIGdlbGF0aW4pLgoqLwpkZWZpbmUgIk1lYXNsZXMgdmFjY2luYXRpb24gY291bGQgYmUgY29udHJhaW5kaWNhdGVkLiBDbGluaWNhbCBqdWRnZW1lbnQgcmVxdWlyZWQuIENyZWF0ZSBhIGNsaW5pY2FsIG5vdGUgR3VpZGFuY2UiOgogICdEbyBub3QgdmFjY2luYXRlIGNsaWVudCB3aXRoIG1lYXNsZXMgaWYgY2xpZW50IGhhcyBoaXN0b3J5IG9mIGFuYXBoeWxhY3RpYyByZWFjdGlvbiB0byBhbnkgY29tcG9uZW50IG9mIHRoZSB2YWNjaW5lIChlLmcuIG5lb215Y2luIG9yIGdlbGF0aW4pLicKCi8qCkBvdXRwdXQ6IENsaW5pY2FsIGp1ZGdlbWVudCByZXF1aXJlZC4gQ3JlYXRlIGEgY2xpbmljYWwgbm90ZSBDYXNlIDEKQHBzZXVkb2NvZGU6ICJJbW11bml6YXRpb24gcmVjb21tZW5kYXRpb24gc3RhdHVzIiA9ICJGdXJ0aGVyIGV2YWx1YXRpb24gbmVlZGVkIgoqLwpkZWZpbmUgIkNsaW5pY2FsIGp1ZGdlbWVudCByZXF1aXJlZC4gQ3JlYXRlIGEgY2xpbmljYWwgbm90ZSBDYXNlIDEiOgogIEVuY291bnRlci4iVGhlIGNsaWVudCBoYXMgaGlzdG9yeSBvZiBzZXZlcmUgYWxsZXJnaWMgcmVhY3Rpb25zIgoKLyoKQG91dHB1dDogQ2xpbmljYWwganVkZ2VtZW50IHJlcXVpcmVkLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlIENhc2UgMgpAcHNldWRvY29kZTogIkltbXVuaXphdGlvbiByZWNvbW1lbmRhdGlvbiBzdGF0dXMiID0gIkZ1cnRoZXIgZXZhbHVhdGlvbiBuZWVkZWQiCiovCmRlZmluZSAiQ2xpbmljYWwganVkZ2VtZW50IHJlcXVpcmVkLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlIENhc2UgMiI6CiAgRW5jb3VudGVyLiJUaGUgY2xpZW50IGhhcyBhIHN5bXB0b21hdGljIEhJViBpbmZlY3Rpb24iCgovKgpAb3V0cHV0OiBDbGluaWNhbCBqdWRnZW1lbnQgcmVxdWlyZWQuIENyZWF0ZSBhIGNsaW5pY2FsIG5vdGUKQHBzZXVkb2NvZGU6ICJJbW11bml6YXRpb24gcmVjb21tZW5kYXRpb24gc3RhdHVzIiA9ICJGdXJ0aGVyIGV2YWx1YXRpb24gbmVlZGVkIgoqLwpkZWZpbmUgIkNsaW5pY2FsIGp1ZGdlbWVudCByZXF1aXJlZC4gQ3JlYXRlIGEgY2xpbmljYWwgbm90ZSI6CiAgIkNsaW5pY2FsIGp1ZGdlbWVudCByZXF1aXJlZC4gQ3JlYXRlIGEgY2xpbmljYWwgbm90ZSBDYXNlIDEiCiAgICBvciAiQ2xpbmljYWwganVkZ2VtZW50IHJlcXVpcmVkLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlIENhc2UgMiIKCi8qCkBvdXRwdXQ6IENsaW5pY2FsIGp1ZGdlbWVudCByZXF1aXJlZC4gQ3JlYXRlIGEgY2xpbmljYWwgbm90ZSBHdWlkYW5jZQpAZ3VpZGFuY2UgPSBEbyBub3QgdmFjY2luYXRlIGNsaWVudCB3aXRoIG1lYXNsZXMgaWYgY2xpZW50IGhhcyBoaXN0b3J5IG9mIHNldmVyZSBhbGxlcmdpYyByZWFjdGlvbnMgdG8gYW55IGNvbXBvbmVudCBvZiB0aGUgdmFjY2luZSAoZS5nLiBuZW9teWNpbiBvciBnZWxhdGluKS4KQGd1aWRhbmNlID0gQ2xpZW50IGhhcyBzeW1wdG9tYXRpYyBISVYgaW5mZWN0aW9uLiBNZWFzbGVzIHZhY2NpbmF0aW9uIG1heSBiZSBjb25zaWRlcmVkIGlmIHRoZSBjbGllbnQgaXMgbm90IHNldmVyZWx5IGltbXVub3N1cHByZXNzZWQgYWNjb3JkaW5nIHRvIGNvbnZlbnRpb25hbCBkZWZpbml0aW9ucywgY29uc2lkZXIgcmlza3Mgb2YgdmFjY2luYXRpb24gYW5kIG1ha2UgYSBjbGluaWNhbCBqdWRnZW1lbnQuCiovCmRlZmluZSAiQ2xpbmljYWwganVkZ2VtZW50IHJlcXVpcmVkLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlIEd1aWRhbmNlIjoKICBjYXNlCiAgICB3aGVuICJDbGluaWNhbCBqdWRnZW1lbnQgcmVxdWlyZWQuIENyZWF0ZSBhIGNsaW5pY2FsIG5vdGUgQ2FzZSAxIiB0aGVuICdEbyBub3QgdmFjY2luYXRlIGNsaWVudCB3aXRoIG1lYXNsZXMgaWYgY2xpZW50IGhhcyBoaXN0b3J5IG9mIHNldmVyZSBhbGxlcmdpYyByZWFjdGlvbnMgdG8gYW55IGNvbXBvbmVudCBvZiB0aGUgdmFjY2luZSAoZS5nLiBuZW9teWNpbiBvciBnZWxhdGluKS4nCiAgICB3aGVuICJDbGluaWNhbCBqdWRnZW1lbnQgcmVxdWlyZWQuIENyZWF0ZSBhIGNsaW5pY2FsIG5vdGUgQ2FzZSAyIiB0aGVuICdDbGllbnQgaGFzIHN5bXB0b21hdGljIEhJViBpbmZlY3Rpb24uIE1lYXNsZXMgdmFjY2luYXRpb24gbWF5IGJlIGNvbnNpZGVyZWQgaWYgdGhlIGNsaWVudCBpcyBub3Qgc2V2ZXJlbHkgaW1tdW5vc3VwcHJlc3NlZCBhY2NvcmRpbmcgdG8gY29udmVudGlvbmFsIGRlZmluaXRpb25zLCBjb25zaWRlciByaXNrcyBvZiB2YWNjaW5hdGlvbiBhbmQgbWFrZSBhIGNsaW5pY2FsIGp1ZGdlbWVudC4nCiAgICBlbHNlICcnCiAgZW5kCgoKLyoKQHRlc3Q6IFRlc3QgZXhwZWN0ZWQgcmVzdWx0cyBiYXNlZCBvbiBleGFtcGxlIHBhdGllbnRzCiovCmRlZmluZSAiVGVzdCBWYWxpZGF0aW9uIjoKICBjYXNlCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnTWVhc2xlczU2LjEnIHRoZW4gIk1lYXNsZXMgdmFjY2luYXRpb24gY29udHJhaW5kaWNhdGVkIENhc2UgMSIgYW5kICJHdWlkYW5jZSIgPSAnRG8gbm90IHZhY2NpbmF0ZSBjbGllbnQgd2l0aCBtZWFzbGVzIGFzIG1lYXNsZXMgdmFjY2luYXRpb24gaXMgY29udHJhaW5kaWNhdGVkIGZvciBwcmVnbmFudCBjbGllbnQuJwogICAgd2hlbiBQYXRpZW50LmlkID0gJ01lYXNsZXM1Ny4xJyB0aGVuICJNZWFzbGVzIHZhY2NpbmF0aW9uIGNvdWxkIGJlIGNvbnRyYWluZGljYXRlZC4gQ2xpbmljYWwganVkZ2VtZW50IHJlcXVpcmVkLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlIiBhbmQgIkd1aWRhbmNlIiA9ICdEbyBub3QgdmFjY2luYXRlIGNsaWVudCB3aXRoIG1lYXNsZXMgaWYgY2xpZW50IGhhcyBoaXN0b3J5IG9mIGFuYXBoeWxhY3RpYyByZWFjdGlvbiB0byBhbnkgY29tcG9uZW50IG9mIHRoZSB2YWNjaW5lIChlLmcuIG5lb215Y2luIG9yIGdlbGF0aW4pLicKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdNZWFzbGVzNTguMScgdGhlbiAiQ2xpbmljYWwganVkZ2VtZW50IHJlcXVpcmVkLiBDcmVhdGUgYSBjbGluaWNhbCBub3RlIENhc2UgMSIgYW5kICJHdWlkYW5jZSIgPSAnRG8gbm90IHZhY2NpbmF0ZSBjbGllbnQgd2l0aCBtZWFzbGVzIGlmIGNsaWVudCBoYXMgaGlzdG9yeSBvZiBzZXZlcmUgYWxsZXJnaWMgcmVhY3Rpb25zIHRvIGFueSBjb21wb25lbnQgb2YgdGhlIHZhY2NpbmUgKGUuZy4gbmVvbXljaW4gb3IgZ2VsYXRpbikuJwogICAgd2hlbiBQYXRpZW50LmlkID0gJ01lYXNsZXM1OS4xJyB0aGVuICJNZWFzbGVzIHZhY2NpbmF0aW9uIGNvbnRyYWluZGljYXRlZCBDYXNlIDIiIGFuZCAiR3VpZGFuY2UiID0gJ0RvIG5vdCB2YWNjaW5hdGUgY2xpZW50IHdpdGggbWVhc2xlcyBhcyBtZWFzbGVzIHZhY2NpbmF0aW9uIGlzIGNvbnRyYWluZGljYXRlZCBmb3Igc2V2ZXJlbHkgaW1tdW5vc3VwcHJlc3NlZCBjbGllbnQuJwogICAgd2hlbiBQYXRpZW50LmlkID0gJ01lYXNsZXM2MC4xJyB0aGVuICJDbGluaWNhbCBqdWRnZW1lbnQgcmVxdWlyZWQuIENyZWF0ZSBhIGNsaW5pY2FsIG5vdGUgQ2FzZSAyIiBhbmQgIkd1aWRhbmNlIiA9ICdDbGllbnQgaGFzIHN5bXB0b21hdGljIEhJViBpbmZlY3Rpb24uIE1lYXNsZXMgdmFjY2luYXRpb24gbWF5IGJlIGNvbnNpZGVyZWQgaWYgdGhlIGNsaWVudCBpcyBub3Qgc2V2ZXJlbHkgaW1tdW5vc3VwcHJlc3NlZCBhY2NvcmRpbmcgdG8gY29udmVudGlvbmFsIGRlZmluaXRpb25zLCBjb25zaWRlciByaXNrcyBvZiB2YWNjaW5hdGlvbiBhbmQgbWFrZSBhIGNsaW5pY2FsIGp1ZGdlbWVudC4nCiAgICBlbHNlICdObyB0ZXN0IGNhc2Ugc2V0JwogIGVuZAo="
}
]
}