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

: IMMZD18SDTPOnTimeStartLogic - JSON Representation

Draft as of 2026-03-31

Raw json | Download

{
  "resourceType" : "Library",
  "id" : "IMMZD18SDTPOnTimeStartLogic",
  "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;\">IMMZD18SDTPOnTimeStartLogic</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Id: </b></th>\n            <td style=\"padding-left: 4px;\">IMMZD18SDTPOnTimeStartLogic</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-IMMZD18SDTPOnTimeStartLogic.html\">IMMZD18SDTPOnTimeStartLogic</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.D18.S.DTP.On-time start schedule 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-WHOCommon.html\">WHOCommon</a></li>\n                  \n                    <li><a href=\"Library-IMMZCommon.html\">IMMZCommon</a></li>\n                  \n                    <li><a href=\"Library-IMMZConcepts.html\">IMMZConcepts</a></li>\n                  \n                    <li><a href=\"Library-IMMZEncounterElements.html\">IMMZEncounterElements</a></li>\n                  \n                    <li><a href=\"Library-IMMZD2DTDTPEncounterElements.html\">IMMZD2DTDTPEncounterElements</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>DTP dose 1 Expiration</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 1</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 1 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 1 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 1 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>First DTP dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Second DTP dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 2</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 2 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 2 Overdue</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 2 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 2 Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Third DTP dose from the primary series was administered. The primary DTP series has been completed</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 3</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 3 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 3 Overdue</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 3 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>DTP dose 3 Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 1</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 1 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 1 Overdue</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 1 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 1 Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>First tetanus and diphtheria booster dose was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Second tetanus and diphtheria booster dose was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 2</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 2 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 2 Overdue</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 2 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 2 Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Third tetanus and diphtheria booster dose was administered. Tetanus and diphtheria immunization schedule has been completed</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 3</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 3 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 3 Overdue</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 3 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Tetanus and diphtheria-containing vaccine booster dose 3 Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Pertussis-containing booster dose was administered. Pertussis immunization schedule has been completed</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Pertussis-containing vaccine booster dose Expiration</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Pertussis-containing vaccine booster dose</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Pertussis-containing vaccine booster dose Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Pertussis-containing vaccine booster dose Overdue</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>\n              \n                <tr><th>Pertussis-containing vaccine booster dose Create</th><th>string</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: IMMZD18SDTPOnTimeStartLogic (IMMZ.D18.S.DTP.On-time start schedule)\n * Schedule Table: Diphtheria–tetanus–pertussis (DTP) vaccination schedule, on-time start (at ≤ 12 months of age)\n */\nlibrary IMMZD18SDTPOnTimeStartLogic\n\nusing FHIR version '4.0.1'\ninclude FHIRHelpers version '4.0.1'\n\ninclude WHOCommon called WC\n\ninclude IMMZCommon called Common\ninclude IMMZConcepts called Concepts\n\ninclude IMMZEncounterElements called IE\ninclude IMMZD2DTDTPEncounterElements called Encounter\n\nparameter Today Date default Today()\n\n\ncontext Patient\n\n\n/*\n@output: DTP dose 1\n@description: Provision of DTP dose 1\n@trigger: Child's birth\n@pseudo: \n@triggerDate: &quot;Date of birth&quot;\n*/\ndefine &quot;DTP dose 1&quot;:\n  Encounter.&quot;No DTP primary series doses were administered&quot;\n  and &quot;DTP dose 1 Expiration&quot; after day of Today\n\n\n/*\n@output: DTP dose 1 Create\n@create: DTP dose 1 should be provided if the client is older than 6 weeks of age.\n*/\ndefine &quot;DTP dose 1 Create&quot;:\n  if &quot;DTP dose 1&quot;\n  then 'DTP dose 1 should be provided if the client is older than 6 weeks of age.' + '\nDue Date: ' + ToString(&quot;DTP dose 1 Due Date&quot;) + '\nExpiration: ' + ToString(&quot;DTP dose 1 Expiration&quot;)\n  else ''\n\n\n/*\n@dynamicValue: DTP dose 1 Due Date\n@pseudocode: &quot;Date of birth&quot; + 6 weeks\n*/\ndefine &quot;DTP dose 1 Due Date&quot;:\n  if &quot;DTP dose 1&quot; then Patient.birthDate + 6 weeks\n  else null\n\n\n/*\n@dynamicValue: DTP dose 1 Overdue\n@pseudocode: To be determined by Member States. The third dose of the primary series should be completed by 6 months of age if possible.\n*/\ndefine &quot;DTP dose 1 Overdue&quot;:\n  null\n\n\n/*\n@dynamicValue: DTP dose 1 Expiration\n@pseudocode: &quot;Date of birth&quot; + 1 year\n*/\ndefine &quot;DTP dose 1 Expiration&quot;:\n  Patient.birthDate + 1 year\n\n  \n/*\n@complete: First DTP dose from the primary series was administered\n@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 1\n*/\ndefine &quot;First DTP dose from the primary series was administered&quot;:\n  Encounter.&quot;One DTP primary series dose was administered&quot;\n\n\n\n/*\n@output: DTP dose 2\n@description: Provision of DTP dose 2\n@trigger: First DTP dose from the primary series was administered\n@pseudo: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 1\n@triggerDate: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot;)\n*/\ndefine &quot;DTP dose 2&quot;:\n  &quot;First DTP dose from the primary series was administered&quot; and\n  not &quot;Second DTP dose from the primary series was administered&quot;\n\n\n/*\n@output: DTP dose 2 Create\n@create: DTP dose 2 should be provided if the client was given the previous DTP dose more than 4 weeks ago.\n*/\ndefine &quot;DTP dose 2 Create&quot;:\n  if &quot;DTP dose 2&quot;\n  then 'DTP dose 2 should be provided if the client was given the previous DTP dose more than 4 weeks ago.' + '\nDue Date: ' + ToString(&quot;DTP dose 2 Due Date&quot;) + '\nOverdue: ' + ToString(&quot;DTP dose 2 Overdue&quot;)\n  else ''\n\n\n/*\n@dynamicValue: DTP dose 2 Due Date\n@pseudocode: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot;) + 4 weeks\n*/\ndefine &quot;DTP dose 2 Due Date&quot;:\n  if &quot;DTP dose 2&quot; then Encounter.&quot;Date of Latest DTP Dose&quot; + 4 weeks\n  else null\n\n\n/*\n@dynamicValue: DTP dose 2 Overdue\n@pseudocode: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot;) + 8 weeks\n*/\ndefine &quot;DTP dose 2 Overdue&quot;:\n  if &quot;DTP dose 2&quot; then Encounter.&quot;Date of Latest DTP Dose&quot; + 8 weeks\n  else null\n\n\n/*\n@dynamicValue: DTP dose 2 Expiration\n@pseudocode: To be determined by Member States. However, there is no recommended expiration date and individuals remain eligible to be vaccinated.\n*/\ndefine &quot;DTP dose 2 Expiration&quot;:\n  null\n\n  \n/*\n@complete: Second DTP dose from the primary series was administered\n@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 2\n*/\ndefine &quot;Second DTP dose from the primary series was administered&quot;:\n  Encounter.&quot;Two DTP primary series doses were administered&quot;\n\n\n\n/*\n@output: DTP dose 3\n@description: Provision of DTP dose 3\n@trigger: Second DTP dose from the primary series was administered\n@pseudo: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot; ) = 2\n@triggerDate: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot;)\n*/\ndefine &quot;DTP dose 3&quot;:\n  &quot;Second DTP dose from the primary series was administered&quot; and\n  not &quot;Third DTP dose from the primary series was administered. The primary DTP series has been completed&quot;\n\n\n/*\n@output: DTP dose 3 Create\n@create: DTP dose 3 should be provided if the client received the previous dose more than 4 weeks ago.\n*/\ndefine &quot;DTP dose 3 Create&quot;:\n  if &quot;DTP dose 3&quot;\n  then 'DTP dose 3 should be provided if the client received the previous dose more than 4 weeks ago.' + '\nDue Date: ' + ToString(&quot;DTP dose 3 Due Date&quot;) + '\nOverdue: ' + ToString(&quot;DTP dose 3 Overdue&quot;)\n  else ''\n\n\n/*\n@dynamicValue: DTP dose 3 Due Date\n@pseudocode: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot;) + 4 weeks\n*/\ndefine &quot;DTP dose 3 Due Date&quot;:\n  if &quot;DTP dose 3&quot; then Encounter.&quot;Date of Latest DTP Dose&quot; + 4 weeks\n  else null\n\n\n/*\n@dynamicValue: DTP dose 3 Overdue\n@pseudocode: &quot;Date of birth&quot; + 6 months\n*/\ndefine &quot;DTP dose 3 Overdue&quot;:\n  if &quot;DTP dose 3&quot; then Patient.birthDate + 6 months\n  else null\n\n\n/*\n@dynamicValue: DTP dose 3 Expiration\n@pseudocode: To be determined by Member States. However, there is no recommended expiration date and individuals remain eligible to be vaccinated.\n*/\ndefine &quot;DTP dose 3 Expiration&quot;:\n  null\n\n  \n/*\n@complete: Third DTP dose from the primary series was administered. The primary DTP series has been completed\n@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 3\n&quot;Completed the primary vaccination series&quot; = TRUE (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot;)\n*/\ndefine &quot;Third DTP dose from the primary series was administered. The primary DTP series has been completed&quot;:\n  Encounter.&quot;Three DTP primary series doses were administered&quot;\n\n\n\n/*\n@output: Tetanus and diphtheria-containing vaccine booster dose 1\n@description: Provision of tetanus and diphtheria booster dose 1\n@trigger: The primary DTP series has been completed\n@pseudo: &quot;Completed the primary vaccination series&quot; = TRUE (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot;)\n@triggerDate: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot;)\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 1&quot;:\n  &quot;Third DTP dose from the primary series was administered. The primary DTP series has been completed&quot; and\n  Encounter.&quot;No tetanus and diphtheria booster doses were administered&quot;\n\n\n/*\n@output: Tetanus and diphtheria-containing vaccine booster dose 1 Create\n@create: Three booster doses of diphtheria-containing vaccine should be provided during childhood and adolescence. The diphtheria booster doses should be given in combination with tetanus using the same schedule (i.e at 12–23 months of age, 4–7 years of age and 9–15 years of age, using age-appropriate vaccine formulations). Ideally, there should be at least 4 years between booster doses. Member States may update this schedule based on their country context.\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 1 Create&quot;:\n  if &quot;Tetanus and diphtheria-containing vaccine booster dose 1&quot;\n  then 'Three booster doses of diphtheria-containing vaccine should be provided during childhood and adolescence. The diphtheria booster doses should be given in combination with tetanus using the same schedule (i.e at 12–23 months of age, 4–7 years of age and 9–15 years of age, using age-appropriate vaccine formulations). Ideally, there should be at least 4 years between booster doses. Member States may update this schedule based on their country context.' + '\nDue Date: ' + ToString(&quot;Tetanus and diphtheria-containing vaccine booster dose 1 Due Date&quot;) + '\nOverdue: ' + ToString(&quot;Tetanus and diphtheria-containing vaccine booster dose 1 Overdue&quot;)\n  else ''\n\n\n/*\n@dynamicValue: Tetanus and diphtheria-containing vaccine booster dose 1 Due Date\n@pseudocode: &quot;Date of birth&quot; + 12 months\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 1 Due Date&quot;:\n  if &quot;Tetanus and diphtheria-containing vaccine booster dose 1&quot; then Patient.birthDate + 12 months\n  else null\n\n\n/*\n@dynamicValue: Tetanus and diphtheria-containing vaccine booster dose 1 Overdue\n@pseudocode: &quot;Date of birth&quot; + 24 months\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 1 Overdue&quot;:\n  if &quot;Tetanus and diphtheria-containing vaccine booster dose 1&quot; then Patient.birthDate + 24 months\n  else null\n\n\n/*\n@dynamicValue: Tetanus and diphtheria-containing vaccine booster dose 1 Expiration\n@pseudocode: To be determined by Member States. However, there is no recommended expiration date and individuals remain eligible to be vaccinated.\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 1 Expiration&quot;:\n  null\n\n  \n/*\n@complete: First tetanus and diphtheria booster dose was administered\n@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Tetanus and diphtheria-containing vaccines&quot; and &quot;Type of dose&quot; = &quot;Booster dose&quot;) = 1\n*/\ndefine &quot;First tetanus and diphtheria booster dose was administered&quot;:\n  Encounter.&quot;One tetanus and diphtheria booster dose was administered&quot;\n\n\n\n/*\n@output: Tetanus and diphtheria-containing vaccine booster dose 2\n@description: Provision of tetanus and diphtheria booster dose 2\n@trigger: First tetanus and diphtheria booster dose was administered\n@pseudo: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Tetanus and diphtheria-containing vaccines&quot; and &quot;Type of dose&quot; = &quot;Booster dose&quot;) = 1\n@triggerDate: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Tetanus and diphtheria-containing vaccines&quot;)\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 2&quot;:\n  &quot;First tetanus and diphtheria booster dose was administered&quot; and\n  not &quot;Second tetanus and diphtheria booster dose was administered&quot;\n\n\n/*\n@output: Tetanus and diphtheria-containing vaccine booster dose 2 Create\n@create: Three booster doses of diphtheria-containing vaccine should be provided during childhood and adolescence. The diphtheria booster doses should be given in combination with tetanus using the same schedule (i.e at 12–23 months of age, 4–7 years of age and 9–15 years of age, using age-appropriate vaccine formulations). Ideally, there should be at least 4 years between booster doses. Member States may update this schedule based on their country context.\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 2 Create&quot;:\n  if &quot;Tetanus and diphtheria-containing vaccine booster dose 2&quot;\n  then 'Three booster doses of diphtheria-containing vaccine should be provided during childhood and adolescence. The diphtheria booster doses should be given in combination with tetanus using the same schedule (i.e at 12–23 months of age, 4–7 years of age and 9–15 years of age, using age-appropriate vaccine formulations). Ideally, there should be at least 4 years between booster doses. Member States may update this schedule based on their country context.' + '\nDue Date: ' + ToString(&quot;Tetanus and diphtheria-containing vaccine booster dose 2 Due Date&quot;) + '\nOverdue: ' + ToString(&quot;Tetanus and diphtheria-containing vaccine booster dose 2 Overdue&quot;)\n  else ''\n\n\n/*\n@dynamicValue: Tetanus and diphtheria-containing vaccine booster dose 2 Due Date\n@pseudocode: &quot;Date of birth&quot; + 4 years\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 2 Due Date&quot;:\n  if &quot;Tetanus and diphtheria-containing vaccine booster dose 2&quot; then Patient.birthDate + 4 years\n  else null\n\n\n/*\n@dynamicValue: Tetanus and diphtheria-containing vaccine booster dose 2 Overdue\n@pseudocode: &quot;Date of birth&quot; + 8 years\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 2 Overdue&quot;:\n  if &quot;Tetanus and diphtheria-containing vaccine booster dose 2&quot; then Patient.birthDate + 8 years\n  else null\n\n\n/*\n@dynamicValue: Tetanus and diphtheria-containing vaccine booster dose 2 Expiration\n@pseudocode: To be determined by Member States. However, there is no recommended expiration date and individuals remain eligible to be vaccinated.\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 2 Expiration&quot;:\n  null\n\n  \n/*\n@complete: Second tetanus and diphtheria booster dose was administered\n@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Tetanus and diphtheria-containing vaccines&quot; and &quot;Type of dose&quot; = &quot;Booster dose&quot;) = 2\n*/\ndefine &quot;Second tetanus and diphtheria booster dose was administered&quot;:\n  Encounter.&quot;Two tetanus and diphtheria booster doses were administered&quot;\n\n\n\n/*\n@output: Tetanus and diphtheria-containing vaccine booster dose 3\n@description: Provision of tetanus and diphtheria booster dose 3\n@trigger: Second tetanus and diphtheria booster dose was administered\n@pseudo: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Tetanus and diphtheria-containing vaccines&quot; and &quot;Type of dose&quot; = &quot;Booster dose&quot;) = 2\n@triggerDate: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Tetanus and diphtheria-containing vaccines&quot;)\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 3&quot;:\n  &quot;Second tetanus and diphtheria booster dose was administered&quot; and\n  not &quot;Third tetanus and diphtheria booster dose was administered. Tetanus and diphtheria immunization schedule has been completed&quot;\n\n\n/*\n@output: Tetanus and diphtheria-containing vaccine booster dose 3 Create\n@create: Three booster doses of diphtheria-containing vaccine should be provided during childhood and adolescence. The diphtheria booster doses should be given in combination with tetanus using the same schedule (i.e at 12–23 months of age, 4–7 years of age and 9–15 years of age, using age-appropriate vaccine formulations). Ideally, there should be at least 4 years between booster doses. Member States may update this schedule based on their country context.\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 3 Create&quot;:\n  if &quot;Tetanus and diphtheria-containing vaccine booster dose 3&quot;\n  then 'Three booster doses of diphtheria-containing vaccine should be provided during childhood and adolescence. The diphtheria booster doses should be given in combination with tetanus using the same schedule (i.e at 12–23 months of age, 4–7 years of age and 9–15 years of age, using age-appropriate vaccine formulations). Ideally, there should be at least 4 years between booster doses. Member States may update this schedule based on their country context.' + '\nDue Date: ' + ToString(&quot;Tetanus and diphtheria-containing vaccine booster dose 3 Due Date&quot;) + '\nOverdue: ' + ToString(&quot;Tetanus and diphtheria-containing vaccine booster dose 3 Overdue&quot;)\n  else ''\n\n\n/*\n@dynamicValue: Tetanus and diphtheria-containing vaccine booster dose 3 Due Date\n@pseudocode: &quot;Date of birth&quot; + 9 years\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 3 Due Date&quot;:\n  if &quot;Tetanus and diphtheria-containing vaccine booster dose 3&quot; then Patient.birthDate + 9 years\n  else null\n\n\n/*\n@dynamicValue: Tetanus and diphtheria-containing vaccine booster dose 3 Overdue\n@pseudocode: &quot;Date of birth&quot; + 16 years\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 3 Overdue&quot;:\n  if &quot;Tetanus and diphtheria-containing vaccine booster dose 3&quot; then Patient.birthDate + 16 years\n  else null\n\n\n/*\n@dynamicValue: Tetanus and diphtheria-containing vaccine booster dose 3 Expiration\n@pseudocode: To be determined by Member States. However, there is no recommended expiration date and individuals remain eligible to be vaccinated.\n*/\ndefine &quot;Tetanus and diphtheria-containing vaccine booster dose 3 Expiration&quot;:\n  null\n\n  \n/*\n@complete: Third tetanus and diphtheria booster dose was administered. Tetanus and diphtheria immunization schedule has been completed\n@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Tetanus and diphtheria-containing vaccines&quot; and &quot;Type of dose&quot; = &quot;Booster dose&quot;) = 3\n&quot;Immunization recommendation status&quot; = &quot;Complete&quot; (where &quot;Vaccine type&quot; = &quot;Tetanus and diphtheria-containing vaccines&quot;)\n*/\ndefine &quot;Third tetanus and diphtheria booster dose was administered. Tetanus and diphtheria immunization schedule has been completed&quot;:\n  Encounter.&quot;Three tetanus and diphtheria booster doses were administered&quot;\n\n\n\n/*\n@output: Pertussis-containing vaccine booster dose\n@description: Provision of the pertussis-containing vaccine booster dose\n@trigger: The primary DTP series has been completed and client's age is between 1 and 6 years\n@pseudo: &quot;Completed the primary vaccination series&quot; = TRUE (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot;) AND 1 year ≤ Today's date − &quot;Date of birth&quot; ≤ 6 years\n@triggerDate: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot;)\n*/\ndefine &quot;Pertussis-containing vaccine booster dose&quot;:\n  &quot;Third DTP dose from the primary series was administered. The primary DTP series has been completed&quot; and\n  Encounter.&quot;Client's age is between 1 year and 6 years&quot; and\n  not &quot;Pertussis-containing booster dose was administered. Pertussis immunization schedule has been completed&quot;\n  and &quot;Pertussis-containing vaccine booster dose Expiration&quot; after day of Today\n\n\n/*\n@output: Pertussis-containing vaccine booster dose Create\n@create: A booster dose is recommended for children aged 1–6 years, preferably during the second year of life (≥6 months after last primary dose).\n*/\ndefine &quot;Pertussis-containing vaccine booster dose Create&quot;:\n  if &quot;Pertussis-containing vaccine booster dose&quot;\n  then 'A booster dose is recommended for children aged 1–6 years, preferably during the second year of life (≥6 months after last primary dose).' + '\nDue Date: ' + ToString(&quot;Pertussis-containing vaccine booster dose Due Date&quot;) + '\nOverdue: ' + ToString(&quot;Pertussis-containing vaccine booster dose Overdue&quot;) + '\nExpiration: ' + ToString(&quot;Pertussis-containing vaccine booster dose Expiration&quot;)\n  else ''\n\n\n/*\n@dynamicValue: Pertussis-containing vaccine booster dose Due Date\n@pseudocode: Date of birth&quot; + 1 'year' OR Latest &quot;Date and time of vaccination&quot; where &quot;Vaccine type&quot; = &quot;DTP-containing vaccines&quot; + 6 months\n*/\ndefine &quot;Pertussis-containing vaccine booster dose Due Date&quot;:\n  if &quot;Pertussis-containing vaccine booster dose&quot;\n  then WC.LatestOf({ Patient.birthDate + 1 year, Encounter.&quot;Date of Latest DTP Dose&quot; + 6 months })\n  else null\n\n\n/*\n@dynamicValue: Pertussis-containing vaccine booster dose Overdue\n@pseudocode: &quot;Date of birth&quot; + 7 years\n*/\ndefine &quot;Pertussis-containing vaccine booster dose Overdue&quot;:\n  if &quot;Pertussis-containing vaccine booster dose&quot; then Patient.birthDate + 7 years\n  else null\n\n\n/*\n@dynamicValue: Pertussis-containing vaccine booster dose Expiration\n@pseudocode: &quot;Date of birth&quot; + 7 years\n*/\ndefine &quot;Pertussis-containing vaccine booster dose Expiration&quot;:\n  Patient.birthDate + 7 years\n\n  \n/*\n@complete: Pertussis-containing booster dose was administered. Pertussis immunization schedule has been completed\n@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Pertussis-containing vaccines&quot; and &quot;Type of dose&quot; = &quot;Booster dose&quot;) = 1\n&quot;Immunization recommendation status&quot; = &quot;Complete&quot; (where &quot;Vaccine type&quot; = &quot;Pertussis-containing vaccines&quot;)\n*/\ndefine &quot;Pertussis-containing booster dose was administered. Pertussis immunization schedule has been completed&quot;:\n  Encounter.&quot;One pertussis booster dose was administered&quot;\n\n\n\n/*\n@test: Test expected results based on example patients\n*/\ndefine &quot;Test Validation&quot;:\n  case\n    when Patient.id = 'DTP08.1' then &quot;DTP dose 1&quot;\n    when Patient.id = 'DTP09.2' then &quot;DTP dose 1&quot;\n    when Patient.id = 'DTP10.2' then &quot;DTP dose 2&quot;\n    when Patient.id = 'DTP11.2' then &quot;DTP dose 2&quot;\n    when Patient.id = 'DTP12.2' then &quot;DTP dose 3&quot;\n    when Patient.id = 'DTP13.2' then &quot;DTP dose 3&quot;\n    when Patient.id = 'DTP14.3' then &quot;Tetanus and diphtheria-containing vaccine booster dose 1&quot;\n    when Patient.id = 'DTP15.3' then &quot;Tetanus and diphtheria-containing vaccine booster dose 1&quot; and &quot;Pertussis-containing vaccine booster dose&quot;\n    when Patient.id = 'DTP16.3' then &quot;Tetanus and diphtheria-containing vaccine booster dose 2&quot; and &quot;Pertussis-containing vaccine booster dose&quot;\n    when Patient.id = 'DTP17.3' then &quot;Tetanus and diphtheria-containing vaccine booster dose 2&quot; and &quot;Pertussis-containing vaccine booster dose&quot;\n    when Patient.id = 'DTP18.3' then &quot;Tetanus and diphtheria-containing vaccine booster dose 3&quot;\n    when Patient.id = 'DTP19.3' then &quot;Tetanus and diphtheria-containing vaccine booster dose 3&quot;\n    when Patient.id = 'DTP20.2' then &quot;Third tetanus and diphtheria booster dose was administered. Tetanus and diphtheria immunization schedule has been completed&quot;\n    when Patient.id = 'DTP21.3' then &quot;Tetanus and diphtheria-containing vaccine booster dose 1&quot;\n    when Patient.id = 'DTP22.4' then &quot;Pertussis-containing vaccine booster dose&quot; and &quot;Tetanus and diphtheria-containing vaccine booster dose 1&quot;\n    when Patient.id = 'DTP23.4' then &quot;Pertussis-containing vaccine booster dose&quot; and &quot;Tetanus and diphtheria-containing vaccine booster dose 1&quot;\n    when Patient.id = 'DTP24.3' then not &quot;Pertussis-containing vaccine booster dose&quot; and &quot;Tetanus and diphtheria-containing vaccine booster dose 1&quot;\n    when Patient.id = 'DTP25.2' then &quot;Pertussis-containing booster dose was administered. Pertussis immunization schedule has been completed&quot; and &quot;Tetanus and diphtheria-containing vaccine booster dose 1&quot;\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/IMMZD18SDTPOnTimeStartLogic",
  "version" : "1.0.0",
  "name" : "IMMZD18SDTPOnTimeStartLogic",
  "title" : "IMMZD18SDTPOnTimeStartLogic",
  "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.D18.S.DTP.On-time start schedule table in the Immunization CPG",
  "relatedArtifact" : [
    {
      "type" : "depends-on",
      "display" : "Library WC",
      "resource" : "http://smart.who.int/immunizations/Library/WHOCommon"
    },
    {
      "type" : "depends-on",
      "display" : "Library Common",
      "resource" : "http://smart.who.int/immunizations/Library/IMMZCommon"
    },
    {
      "type" : "depends-on",
      "display" : "Library Concepts",
      "resource" : "http://smart.who.int/immunizations/Library/IMMZConcepts"
    },
    {
      "type" : "depends-on",
      "display" : "Library IE",
      "resource" : "http://smart.who.int/immunizations/Library/IMMZEncounterElements"
    },
    {
      "type" : "depends-on",
      "display" : "Library Encounter",
      "resource" : "http://smart.who.int/immunizations/Library/IMMZD2DTDTPEncounterElements"
    }
  ],
  "parameter" : [
    {
      "name" : "Today",
      "use" : "in",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "Patient",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "Patient"
    },
    {
      "name" : "DTP dose 1 Expiration",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "DTP dose 1",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "DTP dose 1 Due Date",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "DTP dose 1 Create",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "string"
    },
    {
      "name" : "DTP dose 1 Overdue",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "Resource"
    },
    {
      "name" : "First DTP dose from the primary series was administered",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "Second DTP dose from the primary series was administered",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "DTP dose 2",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "DTP dose 2 Due Date",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "DTP dose 2 Overdue",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "DTP dose 2 Create",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "string"
    },
    {
      "name" : "DTP dose 2 Expiration",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "Resource"
    },
    {
      "name" : "Third DTP dose from the primary series was administered. The primary DTP series has been completed",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "DTP dose 3",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "DTP dose 3 Due Date",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "DTP dose 3 Overdue",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "DTP dose 3 Create",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "string"
    },
    {
      "name" : "DTP dose 3 Expiration",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "Resource"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 1",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 1 Due Date",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 1 Overdue",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 1 Create",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "string"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 1 Expiration",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "Resource"
    },
    {
      "name" : "First tetanus and diphtheria booster dose was administered",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "Second tetanus and diphtheria booster dose was administered",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 2",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 2 Due Date",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 2 Overdue",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 2 Create",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "string"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 2 Expiration",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "Resource"
    },
    {
      "name" : "Third tetanus and diphtheria booster dose was administered. Tetanus and diphtheria immunization schedule has been completed",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 3",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 3 Due Date",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 3 Overdue",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 3 Create",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "string"
    },
    {
      "name" : "Tetanus and diphtheria-containing vaccine booster dose 3 Expiration",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "Resource"
    },
    {
      "name" : "Pertussis-containing booster dose was administered. Pertussis immunization schedule has been completed",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "Pertussis-containing vaccine booster dose Expiration",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "Pertussis-containing vaccine booster dose",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "boolean"
    },
    {
      "name" : "Pertussis-containing vaccine booster dose Due Date",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "Pertussis-containing vaccine booster dose Overdue",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "date"
    },
    {
      "name" : "Pertussis-containing vaccine booster dose Create",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "string"
    },
    {
      "name" : "Test Validation",
      "use" : "out",
      "min" : 0,
      "max" : "1",
      "type" : "Resource"
    }
  ],
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "LyoKICogTGlicmFyeTogSU1NWkQxOFNEVFBPblRpbWVTdGFydExvZ2ljIChJTU1aLkQxOC5TLkRUUC5Pbi10aW1lIHN0YXJ0IHNjaGVkdWxlKQogKiBTY2hlZHVsZSBUYWJsZTogRGlwaHRoZXJpYeKAk3RldGFudXPigJNwZXJ0dXNzaXMgKERUUCkgdmFjY2luYXRpb24gc2NoZWR1bGUsIG9uLXRpbWUgc3RhcnQgKGF0IOKJpCAxMiBtb250aHMgb2YgYWdlKQogKi8KbGlicmFyeSBJTU1aRDE4U0RUUE9uVGltZVN0YXJ0TG9naWMKCnVzaW5nIEZISVIgdmVyc2lvbiAnNC4wLjEnCmluY2x1ZGUgRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnCgppbmNsdWRlIFdIT0NvbW1vbiBjYWxsZWQgV0MKCmluY2x1ZGUgSU1NWkNvbW1vbiBjYWxsZWQgQ29tbW9uCmluY2x1ZGUgSU1NWkNvbmNlcHRzIGNhbGxlZCBDb25jZXB0cwoKaW5jbHVkZSBJTU1aRW5jb3VudGVyRWxlbWVudHMgY2FsbGVkIElFCmluY2x1ZGUgSU1NWkQyRFREVFBFbmNvdW50ZXJFbGVtZW50cyBjYWxsZWQgRW5jb3VudGVyCgpwYXJhbWV0ZXIgVG9kYXkgRGF0ZSBkZWZhdWx0IFRvZGF5KCkKCgpjb250ZXh0IFBhdGllbnQKCgovKgpAb3V0cHV0OiBEVFAgZG9zZSAxCkBkZXNjcmlwdGlvbjogUHJvdmlzaW9uIG9mIERUUCBkb3NlIDEKQHRyaWdnZXI6IENoaWxkJ3MgYmlydGgKQHBzZXVkbzogCkB0cmlnZ2VyRGF0ZTogIkRhdGUgb2YgYmlydGgiCiovCmRlZmluZSAiRFRQIGRvc2UgMSI6CiAgRW5jb3VudGVyLiJObyBEVFAgcHJpbWFyeSBzZXJpZXMgZG9zZXMgd2VyZSBhZG1pbmlzdGVyZWQiCiAgYW5kICJEVFAgZG9zZSAxIEV4cGlyYXRpb24iIGFmdGVyIGRheSBvZiBUb2RheQoKCi8qCkBvdXRwdXQ6IERUUCBkb3NlIDEgQ3JlYXRlCkBjcmVhdGU6IERUUCBkb3NlIDEgc2hvdWxkIGJlIHByb3ZpZGVkIGlmIHRoZSBjbGllbnQgaXMgb2xkZXIgdGhhbiA2IHdlZWtzIG9mIGFnZS4KKi8KZGVmaW5lICJEVFAgZG9zZSAxIENyZWF0ZSI6CiAgaWYgIkRUUCBkb3NlIDEiCiAgdGhlbiAnRFRQIGRvc2UgMSBzaG91bGQgYmUgcHJvdmlkZWQgaWYgdGhlIGNsaWVudCBpcyBvbGRlciB0aGFuIDYgd2Vla3Mgb2YgYWdlLicgKyAnCkR1ZSBEYXRlOiAnICsgVG9TdHJpbmcoIkRUUCBkb3NlIDEgRHVlIERhdGUiKSArICcKRXhwaXJhdGlvbjogJyArIFRvU3RyaW5nKCJEVFAgZG9zZSAxIEV4cGlyYXRpb24iKQogIGVsc2UgJycKCgovKgpAZHluYW1pY1ZhbHVlOiBEVFAgZG9zZSAxIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiAiRGF0ZSBvZiBiaXJ0aCIgKyA2IHdlZWtzCiovCmRlZmluZSAiRFRQIGRvc2UgMSBEdWUgRGF0ZSI6CiAgaWYgIkRUUCBkb3NlIDEiIHRoZW4gUGF0aWVudC5iaXJ0aERhdGUgKyA2IHdlZWtzCiAgZWxzZSBudWxsCgoKLyoKQGR5bmFtaWNWYWx1ZTogRFRQIGRvc2UgMSBPdmVyZHVlCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXMuIFRoZSB0aGlyZCBkb3NlIG9mIHRoZSBwcmltYXJ5IHNlcmllcyBzaG91bGQgYmUgY29tcGxldGVkIGJ5IDYgbW9udGhzIG9mIGFnZSBpZiBwb3NzaWJsZS4KKi8KZGVmaW5lICJEVFAgZG9zZSAxIE92ZXJkdWUiOgogIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBEVFAgZG9zZSAxIEV4cGlyYXRpb24KQHBzZXVkb2NvZGU6ICJEYXRlIG9mIGJpcnRoIiArIDEgeWVhcgoqLwpkZWZpbmUgIkRUUCBkb3NlIDEgRXhwaXJhdGlvbiI6CiAgUGF0aWVudC5iaXJ0aERhdGUgKyAxIHllYXIKCiAgCi8qCkBjb21wbGV0ZTogRmlyc3QgRFRQIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZApAcHNldWRvY29kZTogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJEVFAtY29udGFpbmluZyB2YWNjaW5lcyIgYW5kICJUeXBlIG9mIGRvc2UiID0gIlByaW1hcnkgc2VyaWVzIikgPSAxCiovCmRlZmluZSAiRmlyc3QgRFRQIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCI6CiAgRW5jb3VudGVyLiJPbmUgRFRQIHByaW1hcnkgc2VyaWVzIGRvc2Ugd2FzIGFkbWluaXN0ZXJlZCIKCgoKLyoKQG91dHB1dDogRFRQIGRvc2UgMgpAZGVzY3JpcHRpb246IFByb3Zpc2lvbiBvZiBEVFAgZG9zZSAyCkB0cmlnZ2VyOiBGaXJzdCBEVFAgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkCkBwc2V1ZG86IENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiRFRQLWNvbnRhaW5pbmcgdmFjY2luZXMiIGFuZCAiVHlwZSBvZiBkb3NlIiA9ICJQcmltYXJ5IHNlcmllcyIpID0gMQpAdHJpZ2dlckRhdGU6IExhdGVzdCAiRGF0ZSBhbmQgdGltZSBvZiB2YWNjaW5hdGlvbiIgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIkRUUC1jb250YWluaW5nIHZhY2NpbmVzIikKKi8KZGVmaW5lICJEVFAgZG9zZSAyIjoKICAiRmlyc3QgRFRQIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCIgYW5kCiAgbm90ICJTZWNvbmQgRFRQIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCIKCgovKgpAb3V0cHV0OiBEVFAgZG9zZSAyIENyZWF0ZQpAY3JlYXRlOiBEVFAgZG9zZSAyIHNob3VsZCBiZSBwcm92aWRlZCBpZiB0aGUgY2xpZW50IHdhcyBnaXZlbiB0aGUgcHJldmlvdXMgRFRQIGRvc2UgbW9yZSB0aGFuIDQgd2Vla3MgYWdvLgoqLwpkZWZpbmUgIkRUUCBkb3NlIDIgQ3JlYXRlIjoKICBpZiAiRFRQIGRvc2UgMiIKICB0aGVuICdEVFAgZG9zZSAyIHNob3VsZCBiZSBwcm92aWRlZCBpZiB0aGUgY2xpZW50IHdhcyBnaXZlbiB0aGUgcHJldmlvdXMgRFRQIGRvc2UgbW9yZSB0aGFuIDQgd2Vla3MgYWdvLicgKyAnCkR1ZSBEYXRlOiAnICsgVG9TdHJpbmcoIkRUUCBkb3NlIDIgRHVlIERhdGUiKSArICcKT3ZlcmR1ZTogJyArIFRvU3RyaW5nKCJEVFAgZG9zZSAyIE92ZXJkdWUiKQogIGVsc2UgJycKCgovKgpAZHluYW1pY1ZhbHVlOiBEVFAgZG9zZSAyIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJEVFAtY29udGFpbmluZyB2YWNjaW5lcyIpICsgNCB3ZWVrcwoqLwpkZWZpbmUgIkRUUCBkb3NlIDIgRHVlIERhdGUiOgogIGlmICJEVFAgZG9zZSAyIiB0aGVuIEVuY291bnRlci4iRGF0ZSBvZiBMYXRlc3QgRFRQIERvc2UiICsgNCB3ZWVrcwogIGVsc2UgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IERUUCBkb3NlIDIgT3ZlcmR1ZQpAcHNldWRvY29kZTogTGF0ZXN0ICJEYXRlIGFuZCB0aW1lIG9mIHZhY2NpbmF0aW9uIiAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiRFRQLWNvbnRhaW5pbmcgdmFjY2luZXMiKSArIDggd2Vla3MKKi8KZGVmaW5lICJEVFAgZG9zZSAyIE92ZXJkdWUiOgogIGlmICJEVFAgZG9zZSAyIiB0aGVuIEVuY291bnRlci4iRGF0ZSBvZiBMYXRlc3QgRFRQIERvc2UiICsgOCB3ZWVrcwogIGVsc2UgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IERUUCBkb3NlIDIgRXhwaXJhdGlvbgpAcHNldWRvY29kZTogVG8gYmUgZGV0ZXJtaW5lZCBieSBNZW1iZXIgU3RhdGVzLiBIb3dldmVyLCB0aGVyZSBpcyBubyByZWNvbW1lbmRlZCBleHBpcmF0aW9uIGRhdGUgYW5kIGluZGl2aWR1YWxzIHJlbWFpbiBlbGlnaWJsZSB0byBiZSB2YWNjaW5hdGVkLgoqLwpkZWZpbmUgIkRUUCBkb3NlIDIgRXhwaXJhdGlvbiI6CiAgbnVsbAoKICAKLyoKQGNvbXBsZXRlOiBTZWNvbmQgRFRQIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZApAcHNldWRvY29kZTogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJEVFAtY29udGFpbmluZyB2YWNjaW5lcyIgYW5kICJUeXBlIG9mIGRvc2UiID0gIlByaW1hcnkgc2VyaWVzIikgPSAyCiovCmRlZmluZSAiU2Vjb25kIERUUCBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiOgogIEVuY291bnRlci4iVHdvIERUUCBwcmltYXJ5IHNlcmllcyBkb3NlcyB3ZXJlIGFkbWluaXN0ZXJlZCIKCgoKLyoKQG91dHB1dDogRFRQIGRvc2UgMwpAZGVzY3JpcHRpb246IFByb3Zpc2lvbiBvZiBEVFAgZG9zZSAzCkB0cmlnZ2VyOiBTZWNvbmQgRFRQIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZApAcHNldWRvOiBDb3VudCBvZiB2YWNjaW5lcyBhZG1pbmlzdGVyZWQgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIkRUUC1jb250YWluaW5nIHZhY2NpbmVzIiBhbmQgIlR5cGUgb2YgZG9zZSIgPSAiUHJpbWFyeSBzZXJpZXMiICkgPSAyCkB0cmlnZ2VyRGF0ZTogTGF0ZXN0ICJEYXRlIGFuZCB0aW1lIG9mIHZhY2NpbmF0aW9uIiAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiRFRQLWNvbnRhaW5pbmcgdmFjY2luZXMiKQoqLwpkZWZpbmUgIkRUUCBkb3NlIDMiOgogICJTZWNvbmQgRFRQIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCIgYW5kCiAgbm90ICJUaGlyZCBEVFAgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkLiBUaGUgcHJpbWFyeSBEVFAgc2VyaWVzIGhhcyBiZWVuIGNvbXBsZXRlZCIKCgovKgpAb3V0cHV0OiBEVFAgZG9zZSAzIENyZWF0ZQpAY3JlYXRlOiBEVFAgZG9zZSAzIHNob3VsZCBiZSBwcm92aWRlZCBpZiB0aGUgY2xpZW50IHJlY2VpdmVkIHRoZSBwcmV2aW91cyBkb3NlIG1vcmUgdGhhbiA0IHdlZWtzIGFnby4KKi8KZGVmaW5lICJEVFAgZG9zZSAzIENyZWF0ZSI6CiAgaWYgIkRUUCBkb3NlIDMiCiAgdGhlbiAnRFRQIGRvc2UgMyBzaG91bGQgYmUgcHJvdmlkZWQgaWYgdGhlIGNsaWVudCByZWNlaXZlZCB0aGUgcHJldmlvdXMgZG9zZSBtb3JlIHRoYW4gNCB3ZWVrcyBhZ28uJyArICcKRHVlIERhdGU6ICcgKyBUb1N0cmluZygiRFRQIGRvc2UgMyBEdWUgRGF0ZSIpICsgJwpPdmVyZHVlOiAnICsgVG9TdHJpbmcoIkRUUCBkb3NlIDMgT3ZlcmR1ZSIpCiAgZWxzZSAnJwoKCi8qCkBkeW5hbWljVmFsdWU6IERUUCBkb3NlIDMgRHVlIERhdGUKQHBzZXVkb2NvZGU6IExhdGVzdCAiRGF0ZSBhbmQgdGltZSBvZiB2YWNjaW5hdGlvbiIgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIkRUUC1jb250YWluaW5nIHZhY2NpbmVzIikgKyA0IHdlZWtzCiovCmRlZmluZSAiRFRQIGRvc2UgMyBEdWUgRGF0ZSI6CiAgaWYgIkRUUCBkb3NlIDMiIHRoZW4gRW5jb3VudGVyLiJEYXRlIG9mIExhdGVzdCBEVFAgRG9zZSIgKyA0IHdlZWtzCiAgZWxzZSBudWxsCgoKLyoKQGR5bmFtaWNWYWx1ZTogRFRQIGRvc2UgMyBPdmVyZHVlCkBwc2V1ZG9jb2RlOiAiRGF0ZSBvZiBiaXJ0aCIgKyA2IG1vbnRocwoqLwpkZWZpbmUgIkRUUCBkb3NlIDMgT3ZlcmR1ZSI6CiAgaWYgIkRUUCBkb3NlIDMiIHRoZW4gUGF0aWVudC5iaXJ0aERhdGUgKyA2IG1vbnRocwogIGVsc2UgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IERUUCBkb3NlIDMgRXhwaXJhdGlvbgpAcHNldWRvY29kZTogVG8gYmUgZGV0ZXJtaW5lZCBieSBNZW1iZXIgU3RhdGVzLiBIb3dldmVyLCB0aGVyZSBpcyBubyByZWNvbW1lbmRlZCBleHBpcmF0aW9uIGRhdGUgYW5kIGluZGl2aWR1YWxzIHJlbWFpbiBlbGlnaWJsZSB0byBiZSB2YWNjaW5hdGVkLgoqLwpkZWZpbmUgIkRUUCBkb3NlIDMgRXhwaXJhdGlvbiI6CiAgbnVsbAoKICAKLyoKQGNvbXBsZXRlOiBUaGlyZCBEVFAgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkLiBUaGUgcHJpbWFyeSBEVFAgc2VyaWVzIGhhcyBiZWVuIGNvbXBsZXRlZApAcHNldWRvY29kZTogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJEVFAtY29udGFpbmluZyB2YWNjaW5lcyIgYW5kICJUeXBlIG9mIGRvc2UiID0gIlByaW1hcnkgc2VyaWVzIikgPSAzCiJDb21wbGV0ZWQgdGhlIHByaW1hcnkgdmFjY2luYXRpb24gc2VyaWVzIiA9IFRSVUUgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIkRUUC1jb250YWluaW5nIHZhY2NpbmVzIikKKi8KZGVmaW5lICJUaGlyZCBEVFAgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkLiBUaGUgcHJpbWFyeSBEVFAgc2VyaWVzIGhhcyBiZWVuIGNvbXBsZXRlZCI6CiAgRW5jb3VudGVyLiJUaHJlZSBEVFAgcHJpbWFyeSBzZXJpZXMgZG9zZXMgd2VyZSBhZG1pbmlzdGVyZWQiCgoKCi8qCkBvdXRwdXQ6IFRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAxCkBkZXNjcmlwdGlvbjogUHJvdmlzaW9uIG9mIHRldGFudXMgYW5kIGRpcGh0aGVyaWEgYm9vc3RlciBkb3NlIDEKQHRyaWdnZXI6IFRoZSBwcmltYXJ5IERUUCBzZXJpZXMgaGFzIGJlZW4gY29tcGxldGVkCkBwc2V1ZG86ICJDb21wbGV0ZWQgdGhlIHByaW1hcnkgdmFjY2luYXRpb24gc2VyaWVzIiA9IFRSVUUgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIkRUUC1jb250YWluaW5nIHZhY2NpbmVzIikKQHRyaWdnZXJEYXRlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJEVFAtY29udGFpbmluZyB2YWNjaW5lcyIpCiovCmRlZmluZSAiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDEiOgogICJUaGlyZCBEVFAgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkLiBUaGUgcHJpbWFyeSBEVFAgc2VyaWVzIGhhcyBiZWVuIGNvbXBsZXRlZCIgYW5kCiAgRW5jb3VudGVyLiJObyB0ZXRhbnVzIGFuZCBkaXBodGhlcmlhIGJvb3N0ZXIgZG9zZXMgd2VyZSBhZG1pbmlzdGVyZWQiCgoKLyoKQG91dHB1dDogVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDEgQ3JlYXRlCkBjcmVhdGU6IFRocmVlIGJvb3N0ZXIgZG9zZXMgb2YgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgc2hvdWxkIGJlIHByb3ZpZGVkIGR1cmluZyBjaGlsZGhvb2QgYW5kIGFkb2xlc2NlbmNlLiBUaGUgZGlwaHRoZXJpYSBib29zdGVyIGRvc2VzIHNob3VsZCBiZSBnaXZlbiBpbiBjb21iaW5hdGlvbiB3aXRoIHRldGFudXMgdXNpbmcgdGhlIHNhbWUgc2NoZWR1bGUgKGkuZSBhdCAxMuKAkzIzIG1vbnRocyBvZiBhZ2UsIDTigJM3IHllYXJzIG9mIGFnZSBhbmQgOeKAkzE1IHllYXJzIG9mIGFnZSwgdXNpbmcgYWdlLWFwcHJvcHJpYXRlIHZhY2NpbmUgZm9ybXVsYXRpb25zKS4gSWRlYWxseSwgdGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IDQgeWVhcnMgYmV0d2VlbiBib29zdGVyIGRvc2VzLiBNZW1iZXIgU3RhdGVzIG1heSB1cGRhdGUgdGhpcyBzY2hlZHVsZSBiYXNlZCBvbiB0aGVpciBjb3VudHJ5IGNvbnRleHQuCiovCmRlZmluZSAiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDEgQ3JlYXRlIjoKICBpZiAiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDEiCiAgdGhlbiAnVGhyZWUgYm9vc3RlciBkb3NlcyBvZiBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBzaG91bGQgYmUgcHJvdmlkZWQgZHVyaW5nIGNoaWxkaG9vZCBhbmQgYWRvbGVzY2VuY2UuIFRoZSBkaXBodGhlcmlhIGJvb3N0ZXIgZG9zZXMgc2hvdWxkIGJlIGdpdmVuIGluIGNvbWJpbmF0aW9uIHdpdGggdGV0YW51cyB1c2luZyB0aGUgc2FtZSBzY2hlZHVsZSAoaS5lIGF0IDEy4oCTMjMgbW9udGhzIG9mIGFnZSwgNOKAkzcgeWVhcnMgb2YgYWdlIGFuZCA54oCTMTUgeWVhcnMgb2YgYWdlLCB1c2luZyBhZ2UtYXBwcm9wcmlhdGUgdmFjY2luZSBmb3JtdWxhdGlvbnMpLiBJZGVhbGx5LCB0aGVyZSBzaG91bGQgYmUgYXQgbGVhc3QgNCB5ZWFycyBiZXR3ZWVuIGJvb3N0ZXIgZG9zZXMuIE1lbWJlciBTdGF0ZXMgbWF5IHVwZGF0ZSB0aGlzIHNjaGVkdWxlIGJhc2VkIG9uIHRoZWlyIGNvdW50cnkgY29udGV4dC4nICsgJwpEdWUgRGF0ZTogJyArIFRvU3RyaW5nKCJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMSBEdWUgRGF0ZSIpICsgJwpPdmVyZHVlOiAnICsgVG9TdHJpbmcoIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAxIE92ZXJkdWUiKQogIGVsc2UgJycKCgovKgpAZHluYW1pY1ZhbHVlOiBUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMSBEdWUgRGF0ZQpAcHNldWRvY29kZTogIkRhdGUgb2YgYmlydGgiICsgMTIgbW9udGhzCiovCmRlZmluZSAiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDEgRHVlIERhdGUiOgogIGlmICJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMSIgdGhlbiBQYXRpZW50LmJpcnRoRGF0ZSArIDEyIG1vbnRocwogIGVsc2UgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IFRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAxIE92ZXJkdWUKQHBzZXVkb2NvZGU6ICJEYXRlIG9mIGJpcnRoIiArIDI0IG1vbnRocwoqLwpkZWZpbmUgIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAxIE92ZXJkdWUiOgogIGlmICJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMSIgdGhlbiBQYXRpZW50LmJpcnRoRGF0ZSArIDI0IG1vbnRocwogIGVsc2UgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IFRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAxIEV4cGlyYXRpb24KQHBzZXVkb2NvZGU6IFRvIGJlIGRldGVybWluZWQgYnkgTWVtYmVyIFN0YXRlcy4gSG93ZXZlciwgdGhlcmUgaXMgbm8gcmVjb21tZW5kZWQgZXhwaXJhdGlvbiBkYXRlIGFuZCBpbmRpdmlkdWFscyByZW1haW4gZWxpZ2libGUgdG8gYmUgdmFjY2luYXRlZC4KKi8KZGVmaW5lICJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMSBFeHBpcmF0aW9uIjoKICBudWxsCgogIAovKgpAY29tcGxldGU6IEZpcnN0IHRldGFudXMgYW5kIGRpcGh0aGVyaWEgYm9vc3RlciBkb3NlIHdhcyBhZG1pbmlzdGVyZWQKQHBzZXVkb2NvZGU6IENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmVzIiBhbmQgIlR5cGUgb2YgZG9zZSIgPSAiQm9vc3RlciBkb3NlIikgPSAxCiovCmRlZmluZSAiRmlyc3QgdGV0YW51cyBhbmQgZGlwaHRoZXJpYSBib29zdGVyIGRvc2Ugd2FzIGFkbWluaXN0ZXJlZCI6CiAgRW5jb3VudGVyLiJPbmUgdGV0YW51cyBhbmQgZGlwaHRoZXJpYSBib29zdGVyIGRvc2Ugd2FzIGFkbWluaXN0ZXJlZCIKCgoKLyoKQG91dHB1dDogVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDIKQGRlc2NyaXB0aW9uOiBQcm92aXNpb24gb2YgdGV0YW51cyBhbmQgZGlwaHRoZXJpYSBib29zdGVyIGRvc2UgMgpAdHJpZ2dlcjogRmlyc3QgdGV0YW51cyBhbmQgZGlwaHRoZXJpYSBib29zdGVyIGRvc2Ugd2FzIGFkbWluaXN0ZXJlZApAcHNldWRvOiBDb3VudCBvZiB2YWNjaW5lcyBhZG1pbmlzdGVyZWQgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lcyIgYW5kICJUeXBlIG9mIGRvc2UiID0gIkJvb3N0ZXIgZG9zZSIpID0gMQpAdHJpZ2dlckRhdGU6IExhdGVzdCAiRGF0ZSBhbmQgdGltZSBvZiB2YWNjaW5hdGlvbiIgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lcyIpCiovCmRlZmluZSAiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDIiOgogICJGaXJzdCB0ZXRhbnVzIGFuZCBkaXBodGhlcmlhIGJvb3N0ZXIgZG9zZSB3YXMgYWRtaW5pc3RlcmVkIiBhbmQKICBub3QgIlNlY29uZCB0ZXRhbnVzIGFuZCBkaXBodGhlcmlhIGJvb3N0ZXIgZG9zZSB3YXMgYWRtaW5pc3RlcmVkIgoKCi8qCkBvdXRwdXQ6IFRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAyIENyZWF0ZQpAY3JlYXRlOiBUaHJlZSBib29zdGVyIGRvc2VzIG9mIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIHNob3VsZCBiZSBwcm92aWRlZCBkdXJpbmcgY2hpbGRob29kIGFuZCBhZG9sZXNjZW5jZS4gVGhlIGRpcGh0aGVyaWEgYm9vc3RlciBkb3NlcyBzaG91bGQgYmUgZ2l2ZW4gaW4gY29tYmluYXRpb24gd2l0aCB0ZXRhbnVzIHVzaW5nIHRoZSBzYW1lIHNjaGVkdWxlIChpLmUgYXQgMTLigJMyMyBtb250aHMgb2YgYWdlLCA04oCTNyB5ZWFycyBvZiBhZ2UgYW5kIDnigJMxNSB5ZWFycyBvZiBhZ2UsIHVzaW5nIGFnZS1hcHByb3ByaWF0ZSB2YWNjaW5lIGZvcm11bGF0aW9ucykuIElkZWFsbHksIHRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCA0IHllYXJzIGJldHdlZW4gYm9vc3RlciBkb3Nlcy4gTWVtYmVyIFN0YXRlcyBtYXkgdXBkYXRlIHRoaXMgc2NoZWR1bGUgYmFzZWQgb24gdGhlaXIgY291bnRyeSBjb250ZXh0LgoqLwpkZWZpbmUgIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAyIENyZWF0ZSI6CiAgaWYgIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAyIgogIHRoZW4gJ1RocmVlIGJvb3N0ZXIgZG9zZXMgb2YgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgc2hvdWxkIGJlIHByb3ZpZGVkIGR1cmluZyBjaGlsZGhvb2QgYW5kIGFkb2xlc2NlbmNlLiBUaGUgZGlwaHRoZXJpYSBib29zdGVyIGRvc2VzIHNob3VsZCBiZSBnaXZlbiBpbiBjb21iaW5hdGlvbiB3aXRoIHRldGFudXMgdXNpbmcgdGhlIHNhbWUgc2NoZWR1bGUgKGkuZSBhdCAxMuKAkzIzIG1vbnRocyBvZiBhZ2UsIDTigJM3IHllYXJzIG9mIGFnZSBhbmQgOeKAkzE1IHllYXJzIG9mIGFnZSwgdXNpbmcgYWdlLWFwcHJvcHJpYXRlIHZhY2NpbmUgZm9ybXVsYXRpb25zKS4gSWRlYWxseSwgdGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IDQgeWVhcnMgYmV0d2VlbiBib29zdGVyIGRvc2VzLiBNZW1iZXIgU3RhdGVzIG1heSB1cGRhdGUgdGhpcyBzY2hlZHVsZSBiYXNlZCBvbiB0aGVpciBjb3VudHJ5IGNvbnRleHQuJyArICcKRHVlIERhdGU6ICcgKyBUb1N0cmluZygiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDIgRHVlIERhdGUiKSArICcKT3ZlcmR1ZTogJyArIFRvU3RyaW5nKCJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMiBPdmVyZHVlIikKICBlbHNlICcnCgoKLyoKQGR5bmFtaWNWYWx1ZTogVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDIgRHVlIERhdGUKQHBzZXVkb2NvZGU6ICJEYXRlIG9mIGJpcnRoIiArIDQgeWVhcnMKKi8KZGVmaW5lICJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMiBEdWUgRGF0ZSI6CiAgaWYgIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAyIiB0aGVuIFBhdGllbnQuYmlydGhEYXRlICsgNCB5ZWFycwogIGVsc2UgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IFRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAyIE92ZXJkdWUKQHBzZXVkb2NvZGU6ICJEYXRlIG9mIGJpcnRoIiArIDggeWVhcnMKKi8KZGVmaW5lICJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMiBPdmVyZHVlIjoKICBpZiAiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDIiIHRoZW4gUGF0aWVudC5iaXJ0aERhdGUgKyA4IHllYXJzCiAgZWxzZSBudWxsCgoKLyoKQGR5bmFtaWNWYWx1ZTogVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDIgRXhwaXJhdGlvbgpAcHNldWRvY29kZTogVG8gYmUgZGV0ZXJtaW5lZCBieSBNZW1iZXIgU3RhdGVzLiBIb3dldmVyLCB0aGVyZSBpcyBubyByZWNvbW1lbmRlZCBleHBpcmF0aW9uIGRhdGUgYW5kIGluZGl2aWR1YWxzIHJlbWFpbiBlbGlnaWJsZSB0byBiZSB2YWNjaW5hdGVkLgoqLwpkZWZpbmUgIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAyIEV4cGlyYXRpb24iOgogIG51bGwKCiAgCi8qCkBjb21wbGV0ZTogU2Vjb25kIHRldGFudXMgYW5kIGRpcGh0aGVyaWEgYm9vc3RlciBkb3NlIHdhcyBhZG1pbmlzdGVyZWQKQHBzZXVkb2NvZGU6IENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmVzIiBhbmQgIlR5cGUgb2YgZG9zZSIgPSAiQm9vc3RlciBkb3NlIikgPSAyCiovCmRlZmluZSAiU2Vjb25kIHRldGFudXMgYW5kIGRpcGh0aGVyaWEgYm9vc3RlciBkb3NlIHdhcyBhZG1pbmlzdGVyZWQiOgogIEVuY291bnRlci4iVHdvIHRldGFudXMgYW5kIGRpcGh0aGVyaWEgYm9vc3RlciBkb3NlcyB3ZXJlIGFkbWluaXN0ZXJlZCIKCgoKLyoKQG91dHB1dDogVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDMKQGRlc2NyaXB0aW9uOiBQcm92aXNpb24gb2YgdGV0YW51cyBhbmQgZGlwaHRoZXJpYSBib29zdGVyIGRvc2UgMwpAdHJpZ2dlcjogU2Vjb25kIHRldGFudXMgYW5kIGRpcGh0aGVyaWEgYm9vc3RlciBkb3NlIHdhcyBhZG1pbmlzdGVyZWQKQHBzZXVkbzogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZXMiIGFuZCAiVHlwZSBvZiBkb3NlIiA9ICJCb29zdGVyIGRvc2UiKSA9IDIKQHRyaWdnZXJEYXRlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZXMiKQoqLwpkZWZpbmUgIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAzIjoKICAiU2Vjb25kIHRldGFudXMgYW5kIGRpcGh0aGVyaWEgYm9vc3RlciBkb3NlIHdhcyBhZG1pbmlzdGVyZWQiIGFuZAogIG5vdCAiVGhpcmQgdGV0YW51cyBhbmQgZGlwaHRoZXJpYSBib29zdGVyIGRvc2Ugd2FzIGFkbWluaXN0ZXJlZC4gVGV0YW51cyBhbmQgZGlwaHRoZXJpYSBpbW11bml6YXRpb24gc2NoZWR1bGUgaGFzIGJlZW4gY29tcGxldGVkIgoKCi8qCkBvdXRwdXQ6IFRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAzIENyZWF0ZQpAY3JlYXRlOiBUaHJlZSBib29zdGVyIGRvc2VzIG9mIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIHNob3VsZCBiZSBwcm92aWRlZCBkdXJpbmcgY2hpbGRob29kIGFuZCBhZG9sZXNjZW5jZS4gVGhlIGRpcGh0aGVyaWEgYm9vc3RlciBkb3NlcyBzaG91bGQgYmUgZ2l2ZW4gaW4gY29tYmluYXRpb24gd2l0aCB0ZXRhbnVzIHVzaW5nIHRoZSBzYW1lIHNjaGVkdWxlIChpLmUgYXQgMTLigJMyMyBtb250aHMgb2YgYWdlLCA04oCTNyB5ZWFycyBvZiBhZ2UgYW5kIDnigJMxNSB5ZWFycyBvZiBhZ2UsIHVzaW5nIGFnZS1hcHByb3ByaWF0ZSB2YWNjaW5lIGZvcm11bGF0aW9ucykuIElkZWFsbHksIHRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCA0IHllYXJzIGJldHdlZW4gYm9vc3RlciBkb3Nlcy4gTWVtYmVyIFN0YXRlcyBtYXkgdXBkYXRlIHRoaXMgc2NoZWR1bGUgYmFzZWQgb24gdGhlaXIgY291bnRyeSBjb250ZXh0LgoqLwpkZWZpbmUgIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAzIENyZWF0ZSI6CiAgaWYgIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAzIgogIHRoZW4gJ1RocmVlIGJvb3N0ZXIgZG9zZXMgb2YgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgc2hvdWxkIGJlIHByb3ZpZGVkIGR1cmluZyBjaGlsZGhvb2QgYW5kIGFkb2xlc2NlbmNlLiBUaGUgZGlwaHRoZXJpYSBib29zdGVyIGRvc2VzIHNob3VsZCBiZSBnaXZlbiBpbiBjb21iaW5hdGlvbiB3aXRoIHRldGFudXMgdXNpbmcgdGhlIHNhbWUgc2NoZWR1bGUgKGkuZSBhdCAxMuKAkzIzIG1vbnRocyBvZiBhZ2UsIDTigJM3IHllYXJzIG9mIGFnZSBhbmQgOeKAkzE1IHllYXJzIG9mIGFnZSwgdXNpbmcgYWdlLWFwcHJvcHJpYXRlIHZhY2NpbmUgZm9ybXVsYXRpb25zKS4gSWRlYWxseSwgdGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IDQgeWVhcnMgYmV0d2VlbiBib29zdGVyIGRvc2VzLiBNZW1iZXIgU3RhdGVzIG1heSB1cGRhdGUgdGhpcyBzY2hlZHVsZSBiYXNlZCBvbiB0aGVpciBjb3VudHJ5IGNvbnRleHQuJyArICcKRHVlIERhdGU6ICcgKyBUb1N0cmluZygiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDMgRHVlIERhdGUiKSArICcKT3ZlcmR1ZTogJyArIFRvU3RyaW5nKCJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMyBPdmVyZHVlIikKICBlbHNlICcnCgoKLyoKQGR5bmFtaWNWYWx1ZTogVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDMgRHVlIERhdGUKQHBzZXVkb2NvZGU6ICJEYXRlIG9mIGJpcnRoIiArIDkgeWVhcnMKKi8KZGVmaW5lICJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMyBEdWUgRGF0ZSI6CiAgaWYgIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAzIiB0aGVuIFBhdGllbnQuYmlydGhEYXRlICsgOSB5ZWFycwogIGVsc2UgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IFRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAzIE92ZXJkdWUKQHBzZXVkb2NvZGU6ICJEYXRlIG9mIGJpcnRoIiArIDE2IHllYXJzCiovCmRlZmluZSAiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDMgT3ZlcmR1ZSI6CiAgaWYgIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAzIiB0aGVuIFBhdGllbnQuYmlydGhEYXRlICsgMTYgeWVhcnMKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMyBFeHBpcmF0aW9uCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXMuIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIGV4cGlyYXRpb24gZGF0ZSBhbmQgaW5kaXZpZHVhbHMgcmVtYWluIGVsaWdpYmxlIHRvIGJlIHZhY2NpbmF0ZWQuCiovCmRlZmluZSAiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDMgRXhwaXJhdGlvbiI6CiAgbnVsbAoKICAKLyoKQGNvbXBsZXRlOiBUaGlyZCB0ZXRhbnVzIGFuZCBkaXBodGhlcmlhIGJvb3N0ZXIgZG9zZSB3YXMgYWRtaW5pc3RlcmVkLiBUZXRhbnVzIGFuZCBkaXBodGhlcmlhIGltbXVuaXphdGlvbiBzY2hlZHVsZSBoYXMgYmVlbiBjb21wbGV0ZWQKQHBzZXVkb2NvZGU6IENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmVzIiBhbmQgIlR5cGUgb2YgZG9zZSIgPSAiQm9vc3RlciBkb3NlIikgPSAzCiJJbW11bml6YXRpb24gcmVjb21tZW5kYXRpb24gc3RhdHVzIiA9ICJDb21wbGV0ZSIgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lcyIpCiovCmRlZmluZSAiVGhpcmQgdGV0YW51cyBhbmQgZGlwaHRoZXJpYSBib29zdGVyIGRvc2Ugd2FzIGFkbWluaXN0ZXJlZC4gVGV0YW51cyBhbmQgZGlwaHRoZXJpYSBpbW11bml6YXRpb24gc2NoZWR1bGUgaGFzIGJlZW4gY29tcGxldGVkIjoKICBFbmNvdW50ZXIuIlRocmVlIHRldGFudXMgYW5kIGRpcGh0aGVyaWEgYm9vc3RlciBkb3NlcyB3ZXJlIGFkbWluaXN0ZXJlZCIKCgoKLyoKQG91dHB1dDogUGVydHVzc2lzLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UKQGRlc2NyaXB0aW9uOiBQcm92aXNpb24gb2YgdGhlIHBlcnR1c3Npcy1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlCkB0cmlnZ2VyOiBUaGUgcHJpbWFyeSBEVFAgc2VyaWVzIGhhcyBiZWVuIGNvbXBsZXRlZCBhbmQgY2xpZW50J3MgYWdlIGlzIGJldHdlZW4gMSBhbmQgNiB5ZWFycwpAcHNldWRvOiAiQ29tcGxldGVkIHRoZSBwcmltYXJ5IHZhY2NpbmF0aW9uIHNlcmllcyIgPSBUUlVFICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJEVFAtY29udGFpbmluZyB2YWNjaW5lcyIpIEFORCAxIHllYXIg4omkIFRvZGF5J3MgZGF0ZSDiiJIgIkRhdGUgb2YgYmlydGgiIOKJpCA2IHllYXJzCkB0cmlnZ2VyRGF0ZTogTGF0ZXN0ICJEYXRlIGFuZCB0aW1lIG9mIHZhY2NpbmF0aW9uIiAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiRFRQLWNvbnRhaW5pbmcgdmFjY2luZXMiKQoqLwpkZWZpbmUgIlBlcnR1c3Npcy1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIjoKICAiVGhpcmQgRFRQIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZC4gVGhlIHByaW1hcnkgRFRQIHNlcmllcyBoYXMgYmVlbiBjb21wbGV0ZWQiIGFuZAogIEVuY291bnRlci4iQ2xpZW50J3MgYWdlIGlzIGJldHdlZW4gMSB5ZWFyIGFuZCA2IHllYXJzIiBhbmQKICBub3QgIlBlcnR1c3Npcy1jb250YWluaW5nIGJvb3N0ZXIgZG9zZSB3YXMgYWRtaW5pc3RlcmVkLiBQZXJ0dXNzaXMgaW1tdW5pemF0aW9uIHNjaGVkdWxlIGhhcyBiZWVuIGNvbXBsZXRlZCIKICBhbmQgIlBlcnR1c3Npcy1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIEV4cGlyYXRpb24iIGFmdGVyIGRheSBvZiBUb2RheQoKCi8qCkBvdXRwdXQ6IFBlcnR1c3Npcy1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIENyZWF0ZQpAY3JlYXRlOiBBIGJvb3N0ZXIgZG9zZSBpcyByZWNvbW1lbmRlZCBmb3IgY2hpbGRyZW4gYWdlZCAx4oCTNiB5ZWFycywgcHJlZmVyYWJseSBkdXJpbmcgdGhlIHNlY29uZCB5ZWFyIG9mIGxpZmUgKOKJpTYgbW9udGhzIGFmdGVyIGxhc3QgcHJpbWFyeSBkb3NlKS4KKi8KZGVmaW5lICJQZXJ0dXNzaXMtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSBDcmVhdGUiOgogIGlmICJQZXJ0dXNzaXMtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSIKICB0aGVuICdBIGJvb3N0ZXIgZG9zZSBpcyByZWNvbW1lbmRlZCBmb3IgY2hpbGRyZW4gYWdlZCAx4oCTNiB5ZWFycywgcHJlZmVyYWJseSBkdXJpbmcgdGhlIHNlY29uZCB5ZWFyIG9mIGxpZmUgKOKJpTYgbW9udGhzIGFmdGVyIGxhc3QgcHJpbWFyeSBkb3NlKS4nICsgJwpEdWUgRGF0ZTogJyArIFRvU3RyaW5nKCJQZXJ0dXNzaXMtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSBEdWUgRGF0ZSIpICsgJwpPdmVyZHVlOiAnICsgVG9TdHJpbmcoIlBlcnR1c3Npcy1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIE92ZXJkdWUiKSArICcKRXhwaXJhdGlvbjogJyArIFRvU3RyaW5nKCJQZXJ0dXNzaXMtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSBFeHBpcmF0aW9uIikKICBlbHNlICcnCgoKLyoKQGR5bmFtaWNWYWx1ZTogUGVydHVzc2lzLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgRHVlIERhdGUKQHBzZXVkb2NvZGU6IERhdGUgb2YgYmlydGgiICsgMSAneWVhcicgT1IgTGF0ZXN0ICJEYXRlIGFuZCB0aW1lIG9mIHZhY2NpbmF0aW9uIiB3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJEVFAtY29udGFpbmluZyB2YWNjaW5lcyIgKyA2IG1vbnRocwoqLwpkZWZpbmUgIlBlcnR1c3Npcy1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIER1ZSBEYXRlIjoKICBpZiAiUGVydHVzc2lzLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UiCiAgdGhlbiBXQy5MYXRlc3RPZih7IFBhdGllbnQuYmlydGhEYXRlICsgMSB5ZWFyLCBFbmNvdW50ZXIuIkRhdGUgb2YgTGF0ZXN0IERUUCBEb3NlIiArIDYgbW9udGhzIH0pCiAgZWxzZSBudWxsCgoKLyoKQGR5bmFtaWNWYWx1ZTogUGVydHVzc2lzLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgT3ZlcmR1ZQpAcHNldWRvY29kZTogIkRhdGUgb2YgYmlydGgiICsgNyB5ZWFycwoqLwpkZWZpbmUgIlBlcnR1c3Npcy1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIE92ZXJkdWUiOgogIGlmICJQZXJ0dXNzaXMtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSIgdGhlbiBQYXRpZW50LmJpcnRoRGF0ZSArIDcgeWVhcnMKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBQZXJ0dXNzaXMtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSBFeHBpcmF0aW9uCkBwc2V1ZG9jb2RlOiAiRGF0ZSBvZiBiaXJ0aCIgKyA3IHllYXJzCiovCmRlZmluZSAiUGVydHVzc2lzLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgRXhwaXJhdGlvbiI6CiAgUGF0aWVudC5iaXJ0aERhdGUgKyA3IHllYXJzCgogIAovKgpAY29tcGxldGU6IFBlcnR1c3Npcy1jb250YWluaW5nIGJvb3N0ZXIgZG9zZSB3YXMgYWRtaW5pc3RlcmVkLiBQZXJ0dXNzaXMgaW1tdW5pemF0aW9uIHNjaGVkdWxlIGhhcyBiZWVuIGNvbXBsZXRlZApAcHNldWRvY29kZTogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJQZXJ0dXNzaXMtY29udGFpbmluZyB2YWNjaW5lcyIgYW5kICJUeXBlIG9mIGRvc2UiID0gIkJvb3N0ZXIgZG9zZSIpID0gMQoiSW1tdW5pemF0aW9uIHJlY29tbWVuZGF0aW9uIHN0YXR1cyIgPSAiQ29tcGxldGUiICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJQZXJ0dXNzaXMtY29udGFpbmluZyB2YWNjaW5lcyIpCiovCmRlZmluZSAiUGVydHVzc2lzLWNvbnRhaW5pbmcgYm9vc3RlciBkb3NlIHdhcyBhZG1pbmlzdGVyZWQuIFBlcnR1c3NpcyBpbW11bml6YXRpb24gc2NoZWR1bGUgaGFzIGJlZW4gY29tcGxldGVkIjoKICBFbmNvdW50ZXIuIk9uZSBwZXJ0dXNzaXMgYm9vc3RlciBkb3NlIHdhcyBhZG1pbmlzdGVyZWQiCgoKCi8qCkB0ZXN0OiBUZXN0IGV4cGVjdGVkIHJlc3VsdHMgYmFzZWQgb24gZXhhbXBsZSBwYXRpZW50cwoqLwpkZWZpbmUgIlRlc3QgVmFsaWRhdGlvbiI6CiAgY2FzZQogICAgd2hlbiBQYXRpZW50LmlkID0gJ0RUUDA4LjEnIHRoZW4gIkRUUCBkb3NlIDEiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnRFRQMDkuMicgdGhlbiAiRFRQIGRvc2UgMSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdEVFAxMC4yJyB0aGVuICJEVFAgZG9zZSAyIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ0RUUDExLjInIHRoZW4gIkRUUCBkb3NlIDIiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnRFRQMTIuMicgdGhlbiAiRFRQIGRvc2UgMyIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdEVFAxMy4yJyB0aGVuICJEVFAgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ0RUUDE0LjMnIHRoZW4gIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAxIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ0RUUDE1LjMnIHRoZW4gIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAxIiBhbmQgIlBlcnR1c3Npcy1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ0RUUDE2LjMnIHRoZW4gIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAyIiBhbmQgIlBlcnR1c3Npcy1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ0RUUDE3LjMnIHRoZW4gIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAyIiBhbmQgIlBlcnR1c3Npcy1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ0RUUDE4LjMnIHRoZW4gIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ0RUUDE5LjMnIHRoZW4gIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ0RUUDIwLjInIHRoZW4gIlRoaXJkIHRldGFudXMgYW5kIGRpcGh0aGVyaWEgYm9vc3RlciBkb3NlIHdhcyBhZG1pbmlzdGVyZWQuIFRldGFudXMgYW5kIGRpcGh0aGVyaWEgaW1tdW5pemF0aW9uIHNjaGVkdWxlIGhhcyBiZWVuIGNvbXBsZXRlZCIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdEVFAyMS4zJyB0aGVuICJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdEVFAyMi40JyB0aGVuICJQZXJ0dXNzaXMtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSIgYW5kICJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdEVFAyMy40JyB0aGVuICJQZXJ0dXNzaXMtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSIgYW5kICJUZXRhbnVzIGFuZCBkaXBodGhlcmlhLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UgMSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdEVFAyNC4zJyB0aGVuIG5vdCAiUGVydHVzc2lzLWNvbnRhaW5pbmcgdmFjY2luZSBib29zdGVyIGRvc2UiIGFuZCAiVGV0YW51cyBhbmQgZGlwaHRoZXJpYS1jb250YWluaW5nIHZhY2NpbmUgYm9vc3RlciBkb3NlIDEiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnRFRQMjUuMicgdGhlbiAiUGVydHVzc2lzLWNvbnRhaW5pbmcgYm9vc3RlciBkb3NlIHdhcyBhZG1pbmlzdGVyZWQuIFBlcnR1c3NpcyBpbW11bml6YXRpb24gc2NoZWR1bGUgaGFzIGJlZW4gY29tcGxldGVkIiBhbmQgIlRldGFudXMgYW5kIGRpcGh0aGVyaWEtY29udGFpbmluZyB2YWNjaW5lIGJvb3N0ZXIgZG9zZSAxIgogICAgZWxzZSAnTm8gdGVzdCBjYXNlIHNldCcKICBlbmQK"
    }
  ]
}