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

: IMMZD18SPneumococcal3DosesLogic - XML Representation

Draft as of 2026-03-31

Raw xml | Download


<Library xmlns="http://hl7.org/fhir">
  <id value="IMMZD18SPneumococcal3DosesLogic"/>
  <meta>
    <profile
             value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary"/>
    <profile
             value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary"/>
    <profile
             value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library"/>
    <profile
             value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module"/>
  </meta>
  <text>
    <status value="extensions"/>
    <div xmlns="http://www.w3.org/1999/xhtml">
<div>
    <table class="grid dict">
        
        
        <tr>
            <th scope="row"><b>Title: </b></th>
            <td style="padding-left: 4px;">IMMZD18SPneumococcal3DosesLogic</td>
        </tr>
        

        
        
        <tr>
            <th scope="row"><b>Id: </b></th>
            <td style="padding-left: 4px;">IMMZD18SPneumococcal3DosesLogic</td>
        </tr>
        

        
        
        <tr>
            <th scope="row"><b>Version: </b></th>
            <td style="padding-left: 4px;">1.0.0</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Url: </b></th>
            <td style="padding-left: 4px;"><a href="Library-IMMZD18SPneumococcal3DosesLogic.html">IMMZD18SPneumococcal3DosesLogic</a></td>
        </tr>
        

        

        

        
        <tr>
            <th scope="row"><b>Status: </b></th>
            <td style="padding-left: 4px;">draft</td>
        </tr>
        

        

        
        <tr>
            <th scope="row"><b>Type: </b></th>
            <td style="padding-left: 4px;">
                
                    
                        
                        <p style="margin-bottom: 5px;">
                            <b>system: </b> <span><a href="http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html">http://terminology.hl7.org/CodeSystem/library-type</a></span>
                        </p>
                        
                        
                        <p style="margin-bottom: 5px;">
                            <b>code: </b> <span>logic-library</span>
                        </p>
                        
                        
                    
                
                
            </td>
        </tr>
        

        

        
        <tr>
            <th scope="row"><b>Date: </b></th>
            <td style="padding-left: 4px;">2026-03-31 13:54:17+0000</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Publisher: </b></th>
            <td style="padding-left: 4px;">WHO</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Description: </b></th>
            <td style="padding-left: 4px;"><div><p>This library defines decision support logic for the IMMZ.D18.S.Pneumococcal.3 doses schedule table in the Immunization CPG</p>
</div></td>
        </tr>
        

        

        

        

        

        

        

        

        

        

        

        
        <tr>
            <th scope="row"><b>Related Artifacts: </b></th>
            <td style="padding-left: 4px;">
                
                
                
                <p><b>Dependencies</b></p>
                <ul>
                  
                    <li><a href="Library-WHOCommon.html">WHOCommon</a></li>
                  
                    <li><a href="Library-IMMZCommon.html">IMMZCommon</a></li>
                  
                    <li><a href="Library-IMMZConcepts.html">IMMZConcepts</a></li>
                  
                    <li><a href="Library-IMMZEncounterElements.html">IMMZEncounterElements</a></li>
                  
                    <li><a href="Library-IMMZD2DTPneumococcalEncounterElements.html">IMMZD2DTPneumococcalEncounterElements</a></li>
                  
                </ul>
                
                
                
                
                
            </td>
        </tr>
        

        
        <tr>
          <th scope="row"><b>Parameters: </b></th>
          <td style="padding-left: 4px;">
            <table class="grid-dict">
              <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>
              
                <tr><th>Today</th><th>date</th><th>0</th><th>1</th><th>In</th></tr>
              
                <tr><th>Patient</th><th>Patient</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 1</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 1 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 1 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 1 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 1 Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>First pneumococcal dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Second pneumococcal dose from the primary series was administered</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 2, first within 24m</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 2, first within 24m Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 2, first within 24m Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 2, first within 24m Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 2, first within 24m Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 2, first after 24m</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 2, first after 24m Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 2, first after 24m Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 2, first after 24m Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 2, first after 24m Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Third pneumococcal dose from the primary series was administered. The primary series has been completed.</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 3</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 3 Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 3 Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 3 Overdue</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal dose 3 Expiration</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal booster dose Expiration</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>One pneumococcal booster dose was administered.</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal booster dose</th><th>boolean</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal booster dose Due Date</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal booster dose Overdue</th><th>date</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Pneumococcal booster dose Create</th><th>string</th><th>0</th><th>1</th><th>Out</th></tr>
              
                <tr><th>Test Validation</th><th>Resource</th><th>0</th><th>1</th><th>Out</th></tr>
              
            </table>
          </td>
        </tr>
        

        

        
        
        <tr>
          <td colspan="2">
            <table>
              <tr><th><a id="cql-content"><b>Content: </b></a> text/cql</th></tr>
              <tr><td><pre><code class="language-cql">/*
 * Library: IMMZD18SPneumococcal3DosesLogic (IMMZ.D18.S.Pneumococcal.3 doses schedule)
 * Schedule Table: 3 primary doses (3p+0) schedule
 */
library IMMZD18SPneumococcal3DosesLogic

using FHIR version '4.0.1'
include FHIRHelpers version '4.0.1'

include WHOCommon called WC

include IMMZCommon called Common
include IMMZConcepts called Concepts

include IMMZEncounterElements called IE
include IMMZD2DTPneumococcalEncounterElements called Encounter

parameter Today Date default Today()


context Patient


/*
@output: Pneumococcal dose 1
@description: Provision of the pneumococcal dose 1
@trigger: Child's birth
@pseudo: 
@triggerDate: &quot;Date of birth&quot;
*/
define &quot;Pneumococcal dose 1&quot;:
  Encounter.&quot;The client's age is less than or equal to 5 years&quot;
  and Encounter.&quot;No pneumococcal primary series doses were administered&quot;


/*
@output: Pneumococcal dose 1 Create
@create: Pneumococcal dose 1 should be provided if the client is older than 6 weeks
*/
define &quot;Pneumococcal dose 1 Create&quot;:
  if &quot;Pneumococcal dose 1&quot;
  then 'Pneumococcal dose 1 should be provided if the client is older than 6 weeks' + '
Due Date: ' + ToString(&quot;Pneumococcal dose 1 Due Date&quot;)
  else ''


/*
@dynamicValue: Pneumococcal dose 1 Due Date
@pseudocode: &quot;Date of birth&quot; + 6 weeks
*/
define &quot;Pneumococcal dose 1 Due Date&quot;:
  if &quot;Pneumococcal dose 1&quot; then Patient.birthDate + 6 weeks
  else null


/*
@dynamicValue: Pneumococcal dose 1 Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date. WHO does not currently have recommendations on the use of pneumococcal vaccine in individuals aged over 5 years.
*/
define &quot;Pneumococcal dose 1 Overdue&quot;:
  null


/*
@dynamicValue: Pneumococcal dose 1 Expiration
@pseudocode: To be determined by Member States; however, there is no recommended expiration date. WHO does not currently have recommendations on the use of pneumococcal vaccine in individuals aged over 5 years.
*/
define &quot;Pneumococcal dose 1 Expiration&quot;:
  null

  
/*
@complete: First pneumococcal dose from the primary series was administered
@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 1
*/
define &quot;First pneumococcal dose from the primary series was administered&quot;:
  Encounter.&quot;One pneumococcal primary series dose was administered&quot;



/*
@output: Pneumococcal dose 2, first within 24m
@description: Provision of the pneumococcal dose 2
@trigger: First pneumococcal dose from the primary series was administered to client, who is less than or equal to 5 years of age, within 24 months post birth
@pseudo: Today's date − &quot;Date of birth&quot; ≤ 5 years AND Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 1 AND &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot;) − &quot;Date of birth&quot; &lt; 24 months
@triggerDate: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot;)
*/
define &quot;Pneumococcal dose 2, first within 24m&quot;:
  &quot;First pneumococcal dose from the primary series was administered&quot;
  and Encounter.&quot;The client's age is less than or equal to 5 years&quot;
  and Encounter.&quot;The first pneumococcal dose was administered within 24 months post birth&quot;
  and not &quot;Second pneumococcal dose from the primary series was administered&quot;


/*
@output: Pneumococcal dose 2, first within 24m Create
@create: Pneumococcal dose 2 should be provided if the client was given the previous dose more than 4 weeks ago
*/
define &quot;Pneumococcal dose 2, first within 24m Create&quot;:
  if &quot;Pneumococcal dose 2, first within 24m&quot;
  then 'Pneumococcal dose 2 should be provided if the client was given the previous dose more than 4 weeks ago' + '
Due Date: ' + ToString(&quot;Pneumococcal dose 2, first within 24m Due Date&quot;)
  else ''


/*
@dynamicValue: Pneumococcal dose 2, first within 24m Due Date
@pseudocode: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot;) + 4 weeks
*/
define &quot;Pneumococcal dose 2, first within 24m Due Date&quot;:
  if &quot;Pneumococcal dose 2, first within 24m&quot; then Encounter.&quot;Date of Latest Pneumococcal Dose&quot; + 4 weeks
  else null


/*
@dynamicValue: Pneumococcal dose 2, first within 24m Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date. WHO does not currently have recommendations on the use of pneumococcal vaccine in individuals aged over 5 years.
*/
define &quot;Pneumococcal dose 2, first within 24m Overdue&quot;:
  null


/*
@dynamicValue: Pneumococcal dose 2, first within 24m Expiration
@pseudocode: To be determined by Member States; however, there is no recommended expiration date. WHO does not currently have recommendations on the use of pneumococcal vaccine in individuals aged over 5 years.
*/
define &quot;Pneumococcal dose 2, first within 24m Expiration&quot;:
  null

  
/*
@complete: Second pneumococcal dose from the primary series was administered
@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 2
*/
define &quot;Second pneumococcal dose from the primary series was administered&quot;:
  Encounter.&quot;Two pneumococcal primary series doses were administered&quot;



/*
@output: Pneumococcal dose 2, first after 24m
@description: Provision of the pneumococcal dose 2
@trigger: First pneumococcal dose from the primary series was administered to client, who is less than or equal to 5 years of age. Pneumococcal dose was not administered within 24 months post birth. Client is at high risk for pneumococcal infection.
@pseudo: Today's date − &quot;Date of birth&quot; ≤ 5 years AND Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 1 AND &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot;) − &quot;Date of birth&quot; ≥ 24 months AND &quot;At high risk for pneumococcal infection&quot; = TRUE
@triggerDate: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot;)
*/
define &quot;Pneumococcal dose 2, first after 24m&quot;:
  &quot;First pneumococcal dose from the primary series was administered&quot;
  and Encounter.&quot;The client's age is less than or equal to 5 years&quot;
  and Encounter.&quot;The first pneumococcal dose was administered after 24 months post birth&quot;
  and Encounter.&quot;Client is at high risk for pneumococcal infection&quot;
  and not &quot;Second pneumococcal dose from the primary series was administered&quot;


/*
@output: Pneumococcal dose 2, first after 24m Create
@create: Pneumococcal dose 2 should be provided if the client was given the previous dose more than 8 weeks ago
*/
define &quot;Pneumococcal dose 2, first after 24m Create&quot;:
  if &quot;Pneumococcal dose 2, first after 24m&quot;
  then 'Pneumococcal dose 2 should be provided if the client was given the previous dose more than 8 weeks ago' + '
Due Date: ' + ToString(&quot;Pneumococcal dose 2, first after 24m Due Date&quot;)
  else ''


/*
@dynamicValue: Pneumococcal dose 2, first after 24m Due Date
@pseudocode: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot;) + 8 weeks
*/
define &quot;Pneumococcal dose 2, first after 24m Due Date&quot;:
  if &quot;Pneumococcal dose 2, first after 24m&quot; then Encounter.&quot;Date of Latest Pneumococcal Dose&quot; + 8 weeks
  else null


/*
@dynamicValue: Pneumococcal dose 2, first after 24m Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date. WHO does not currently have recommendations on the use of pneumococcal vaccine in individuals aged over 5 years.
*/
define &quot;Pneumococcal dose 2, first after 24m Overdue&quot;:
  null


/*
@dynamicValue: Pneumococcal dose 2, first after 24m Expiration
@pseudocode: To be determined by Member States; however, there is no recommended expiration date. WHO does not currently have recommendations on the use of pneumococcal vaccine in individuals aged over 5 years.
*/
define &quot;Pneumococcal dose 2, first after 24m Expiration&quot;:
  null

  
/*
@output: Pneumococcal dose 3
@description: Provision of the pneumococcal dose 3
@trigger: Second pneumococcal dose from the primary series was administered to client, who is less than or equal to 5 years of age. First pneumococcal dose was administered within 12 months post birth.
@pseudo: Today's date − &quot;Date of birth&quot; ≤ 5 years AND Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 2 AND &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot; AND &quot;Dose number&quot; = 1) − &quot;Date of birth&quot; &lt; 12 months
@triggerDate: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot;)
*/
define &quot;Pneumococcal dose 3&quot;:
  &quot;Second pneumococcal dose from the primary series was administered&quot;
  and Encounter.&quot;The client's age is less than or equal to 5 years&quot;
  and Encounter.&quot;The first pneumococcal dose was administered within 24 months post birth&quot;  and not &quot;Third pneumococcal dose from the primary series was administered. The primary series has been completed.&quot;


/*
@output: Pneumococcal dose 3 Create
@create: Pneumococcal dose 3 should be provided if the client was given the previous dose more than 4 weeks ago
*/
define &quot;Pneumococcal dose 3 Create&quot;:
  if &quot;Pneumococcal dose 3&quot;
  then 'Pneumococcal dose 3 should be provided if the client was given the previous dose more than 4 weeks ago' + '
Due Date: ' + ToString(&quot;Pneumococcal dose 3 Due Date&quot;)
  else ''


/*
@dynamicValue: Pneumococcal dose 3 Due Date
@pseudocode: Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot;) + 4 weeks
*/
define &quot;Pneumococcal dose 3 Due Date&quot;:
  if &quot;Pneumococcal dose 3&quot; then Encounter.&quot;Date of Latest Pneumococcal Dose&quot; + 4 weeks
  else null


/*
@dynamicValue: Pneumococcal dose 3 Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date. WHO does not currently have recommendations on the use of pneumococcal vaccine in individuals aged over 5 years.
*/
define &quot;Pneumococcal dose 3 Overdue&quot;:
  null


/*
@dynamicValue: Pneumococcal dose 3 Expiration
@pseudocode: To be determined by Member States; however, there is no recommended expiration date. WHO does not currently have recommendations on the use of pneumococcal vaccine in individuals aged over 5 years.
*/
define &quot;Pneumococcal dose 3 Expiration&quot;:
  null

  
/*
@complete: Third pneumococcal dose from the primary series was administered. The primary series has been completed.
@pseudocode: &quot;Completed the primary vaccination series&quot; = TRUE (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot;)
*/
define &quot;Third pneumococcal dose from the primary series was administered. The primary series has been completed.&quot;:
  Encounter.&quot;Three pneumococcal primary series doses were administered&quot;



/*
@output: Pneumococcal booster dose
@description: Provision of booster dose for HIV-positive infants and preterm neonates
@trigger: Third pneumococcal dose from the primary series was administered to client, who is more than 12 months of age. The latest pneumococcal dose was administered within 12 months post birth. Client is either HIV positive or had preterm birth.
@pseudo: Today's date − &quot;Date of birth&quot; &gt; 12 months AND Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot; and &quot;Type of dose&quot; = &quot;Primary series&quot;) = 3 AND Latest &quot;Date and time of vaccination&quot; (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot;) − &quot;Date of birth&quot; &lt; 12 months AND (&quot;HIV status&quot; = &quot;HIV-positive&quot; OR &quot;Preterm birth&quot; = TRUE)
@triggerDate: &quot;Date of birth&quot;
*/
define &quot;Pneumococcal booster dose&quot;:
  &quot;Third pneumococcal dose from the primary series was administered. The primary series has been completed.&quot;
  and Encounter.&quot;The latest pneumococcal dose was administered within 12 months post birth&quot;
  and (
    Encounter.&quot;Client's HIV status is positive&quot;
    or Encounter.&quot;Client had preterm birth&quot;
  )
  and &quot;Pneumococcal booster dose Expiration&quot; after day of Today
  and not &quot;One pneumococcal booster dose was administered.&quot;


/*
@output: Pneumococcal booster dose Create
@create: HIV-positive infants and preterm neonates who have received their 3 primary vaccine doses before 12 months of age may benefit from a booster dose in the second year of life
*/
define &quot;Pneumococcal booster dose Create&quot;:
  if &quot;Pneumococcal booster dose&quot;
  then 'HIV-positive infants and preterm neonates who have received their 3 primary vaccine doses before 12 months of age may benefit from a booster dose in the second year of life' + '
Due Date: ' + ToString(&quot;Pneumococcal booster dose Due Date&quot;) + '
Overdue: ' + ToString(&quot;Pneumococcal booster dose Overdue&quot;) + '
Expiration: ' + ToString(&quot;Pneumococcal booster dose Expiration&quot;)
  else ''


/*
@dynamicValue: Pneumococcal booster dose Due Date
@pseudocode: &quot;Date of birth&quot; + 12 months
*/
define &quot;Pneumococcal booster dose Due Date&quot;:
  if &quot;Pneumococcal booster dose&quot; then Patient.birthDate + 12 months
  else null


/*
@dynamicValue: Pneumococcal booster dose Overdue
@pseudocode: &quot;Date of birth&quot; + 24 months
*/
define &quot;Pneumococcal booster dose Overdue&quot;:
  if &quot;Pneumococcal booster dose&quot; then Patient.birthDate + 24 months
  else null


/*
@dynamicValue: Pneumococcal booster dose Expiration
@pseudocode: &quot;Date of birth&quot; + 24 months
*/
define &quot;Pneumococcal booster dose Expiration&quot;:
  Patient.birthDate + 24 months

  
/*
@complete: One pneumococcal booster dose was administered.
@pseudocode: Count of vaccines administered (where &quot;Vaccine type&quot; = &quot;Pneumococcal vaccines&quot; and &quot;Type of dose&quot; = &quot;Booster dose&quot;) = 1
*/
define &quot;One pneumococcal booster dose was administered.&quot;:
  Encounter.&quot;One pneumococcal booster dose was administered&quot;



/*
@test: Test expected results based on example patients
*/
define &quot;Test Validation&quot;:
  case
    when Patient.id = 'Pneumococcal33.1' then &quot;Pneumococcal dose 1&quot;
    when Patient.id = 'Pneumococcal34.2' then &quot;Pneumococcal dose 1&quot;
    when Patient.id = 'Pneumococcal35.4' then &quot;Pneumococcal dose 2, first within 24m&quot;
    when Patient.id = 'Pneumococcal36.4' then &quot;Pneumococcal dose 2, first within 24m&quot;
    when Patient.id = 'Pneumococcal37.5' then &quot;Pneumococcal dose 2, first within 24m&quot;
    when Patient.id = 'Pneumococcal38.5' then &quot;Pneumococcal dose 2, first within 24m&quot;
    when Patient.id = 'Pneumococcal39.5' then &quot;Pneumococcal dose 2, first within 24m&quot;
    when Patient.id = 'Pneumococcal40.5' then &quot;Pneumococcal dose 2, first within 24m&quot;
    when Patient.id = 'Pneumococcal41.5' then &quot;Pneumococcal dose 2, first after 24m&quot;
    when Patient.id = 'Pneumococcal42.5' then &quot;Pneumococcal dose 2, first after 24m&quot;
    when Patient.id = 'Pneumococcal43.4' then &quot;First pneumococcal dose from the primary series was administered&quot;
      and not &quot;Pneumococcal dose 2, first after 24m&quot;
    when Patient.id = 'Pneumococcal44.4' then &quot;Pneumococcal dose 3&quot;
    when Patient.id = 'Pneumococcal45.4' then &quot;Pneumococcal dose 3&quot;
    when Patient.id = 'Pneumococcal46.3' then &quot;Pneumococcal dose 3&quot;
    when Patient.id = 'Pneumococcal47.6' then &quot;Pneumococcal booster dose&quot;
    when Patient.id = 'Pneumococcal48.6' then &quot;Pneumococcal booster dose&quot;
    when Patient.id = 'Pneumococcal49.6' then &quot;Pneumococcal booster dose&quot;
    when Patient.id = 'Pneumococcal50.6' then &quot;Pneumococcal booster dose&quot;
    when Patient.id = 'Pneumococcal51.4' then &quot;Third pneumococcal dose from the primary series was administered. The primary series has been completed.&quot;
      and not &quot;Pneumococcal booster dose&quot;
    when Patient.id = 'Pneumococcal52.5' then &quot;Third pneumococcal dose from the primary series was administered. The primary series has been completed.&quot;
      and not &quot;Pneumococcal booster dose&quot;
    when Patient.id = 'Pneumococcal53.3' then &quot;Third pneumococcal dose from the primary series was administered. The primary series has been completed.&quot;
      and not &quot;Pneumococcal booster dose&quot;
    when Patient.id = 'Pneumococcal54.2' then &quot;One pneumococcal booster dose was administered.&quot;
    when Patient.id = 'Pneumococcal55.1' then not &quot;Pneumococcal dose 1&quot;
    else 'No test case set'
  end
</code></pre></td></tr>
            </table>
          </td>
        </tr>
        
        
        
    </table>
</div>
</div>
  </text>
  <extension
             url="http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability">
    <valueCode value="computable"/>
  </extension>
  <url
       value="http://smart.who.int/immunizations/Library/IMMZD18SPneumococcal3DosesLogic"/>
  <version value="1.0.0"/>
  <name value="IMMZD18SPneumococcal3DosesLogic"/>
  <title value="IMMZD18SPneumococcal3DosesLogic"/>
  <status value="draft"/>
  <experimental value="false"/>
  <type>
    <coding>
      <system value="http://terminology.hl7.org/CodeSystem/library-type"/>
      <code value="logic-library"/>
    </coding>
  </type>
  <date value="2026-03-31T13:54:17+00:00"/>
  <publisher value="WHO"/>
  <contact>
    <name value="WHO"/>
    <telecom>
      <system value="url"/>
      <value value="http://who.int"/>
    </telecom>
  </contact>
  <description
               value="This library defines decision support logic for the IMMZ.D18.S.Pneumococcal.3 doses schedule table in the Immunization CPG"/>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library WC"/>
    <resource value="http://smart.who.int/immunizations/Library/WHOCommon"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library Common"/>
    <resource value="http://smart.who.int/immunizations/Library/IMMZCommon"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library Concepts"/>
    <resource
              value="http://smart.who.int/immunizations/Library/IMMZConcepts"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library IE"/>
    <resource
              value="http://smart.who.int/immunizations/Library/IMMZEncounterElements"/>
  </relatedArtifact>
  <relatedArtifact>
    <type value="depends-on"/>
    <display value="Library Encounter"/>
    <resource
              value="http://smart.who.int/immunizations/Library/IMMZD2DTPneumococcalEncounterElements"/>
  </relatedArtifact>
  <parameter>
    <name value="Today"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Patient"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Patient"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 1"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 1 Due Date"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 1 Create"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 1 Overdue"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 1 Expiration"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name
          value="First pneumococcal dose from the primary series was administered"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name
          value="Second pneumococcal dose from the primary series was administered"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 2, first within 24m"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 2, first within 24m Due Date"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 2, first within 24m Create"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 2, first within 24m Overdue"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 2, first within 24m Expiration"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 2, first after 24m"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 2, first after 24m Due Date"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 2, first after 24m Create"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 2, first after 24m Overdue"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 2, first after 24m Expiration"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name
          value="Third pneumococcal dose from the primary series was administered. The primary series has been completed."/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 3"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 3 Due Date"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 3 Create"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 3 Overdue"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal dose 3 Expiration"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal booster dose Expiration"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="One pneumococcal booster dose was administered."/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal booster dose"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="boolean"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal booster dose Due Date"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal booster dose Overdue"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="date"/>
  </parameter>
  <parameter>
    <name value="Pneumococcal booster dose Create"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="Test Validation"/>
    <use value="out"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Resource"/>
  </parameter>
  <content>
    <contentType value="text/cql"/>
    <data
          value="LyoKICogTGlicmFyeTogSU1NWkQxOFNQbmV1bW9jb2NjYWwzRG9zZXNMb2dpYyAoSU1NWi5EMTguUy5QbmV1bW9jb2NjYWwuMyBkb3NlcyBzY2hlZHVsZSkKICogU2NoZWR1bGUgVGFibGU6IDMgcHJpbWFyeSBkb3NlcyAoM3ArMCkgc2NoZWR1bGUKICovCmxpYnJhcnkgSU1NWkQxOFNQbmV1bW9jb2NjYWwzRG9zZXNMb2dpYwoKdXNpbmcgRkhJUiB2ZXJzaW9uICc0LjAuMScKaW5jbHVkZSBGSElSSGVscGVycyB2ZXJzaW9uICc0LjAuMScKCmluY2x1ZGUgV0hPQ29tbW9uIGNhbGxlZCBXQwoKaW5jbHVkZSBJTU1aQ29tbW9uIGNhbGxlZCBDb21tb24KaW5jbHVkZSBJTU1aQ29uY2VwdHMgY2FsbGVkIENvbmNlcHRzCgppbmNsdWRlIElNTVpFbmNvdW50ZXJFbGVtZW50cyBjYWxsZWQgSUUKaW5jbHVkZSBJTU1aRDJEVFBuZXVtb2NvY2NhbEVuY291bnRlckVsZW1lbnRzIGNhbGxlZCBFbmNvdW50ZXIKCnBhcmFtZXRlciBUb2RheSBEYXRlIGRlZmF1bHQgVG9kYXkoKQoKCmNvbnRleHQgUGF0aWVudAoKCi8qCkBvdXRwdXQ6IFBuZXVtb2NvY2NhbCBkb3NlIDEKQGRlc2NyaXB0aW9uOiBQcm92aXNpb24gb2YgdGhlIHBuZXVtb2NvY2NhbCBkb3NlIDEKQHRyaWdnZXI6IENoaWxkJ3MgYmlydGgKQHBzZXVkbzogCkB0cmlnZ2VyRGF0ZTogIkRhdGUgb2YgYmlydGgiCiovCmRlZmluZSAiUG5ldW1vY29jY2FsIGRvc2UgMSI6CiAgRW5jb3VudGVyLiJUaGUgY2xpZW50J3MgYWdlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byA1IHllYXJzIgogIGFuZCBFbmNvdW50ZXIuIk5vIHBuZXVtb2NvY2NhbCBwcmltYXJ5IHNlcmllcyBkb3NlcyB3ZXJlIGFkbWluaXN0ZXJlZCIKCgovKgpAb3V0cHV0OiBQbmV1bW9jb2NjYWwgZG9zZSAxIENyZWF0ZQpAY3JlYXRlOiBQbmV1bW9jb2NjYWwgZG9zZSAxIHNob3VsZCBiZSBwcm92aWRlZCBpZiB0aGUgY2xpZW50IGlzIG9sZGVyIHRoYW4gNiB3ZWVrcwoqLwpkZWZpbmUgIlBuZXVtb2NvY2NhbCBkb3NlIDEgQ3JlYXRlIjoKICBpZiAiUG5ldW1vY29jY2FsIGRvc2UgMSIKICB0aGVuICdQbmV1bW9jb2NjYWwgZG9zZSAxIHNob3VsZCBiZSBwcm92aWRlZCBpZiB0aGUgY2xpZW50IGlzIG9sZGVyIHRoYW4gNiB3ZWVrcycgKyAnCkR1ZSBEYXRlOiAnICsgVG9TdHJpbmcoIlBuZXVtb2NvY2NhbCBkb3NlIDEgRHVlIERhdGUiKQogIGVsc2UgJycKCgovKgpAZHluYW1pY1ZhbHVlOiBQbmV1bW9jb2NjYWwgZG9zZSAxIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiAiRGF0ZSBvZiBiaXJ0aCIgKyA2IHdlZWtzCiovCmRlZmluZSAiUG5ldW1vY29jY2FsIGRvc2UgMSBEdWUgRGF0ZSI6CiAgaWYgIlBuZXVtb2NvY2NhbCBkb3NlIDEiIHRoZW4gUGF0aWVudC5iaXJ0aERhdGUgKyA2IHdlZWtzCiAgZWxzZSBudWxsCgoKLyoKQGR5bmFtaWNWYWx1ZTogUG5ldW1vY29jY2FsIGRvc2UgMSBPdmVyZHVlCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIG92ZXJkdWUgZGF0ZS4gV0hPIGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIHJlY29tbWVuZGF0aW9ucyBvbiB0aGUgdXNlIG9mIHBuZXVtb2NvY2NhbCB2YWNjaW5lIGluIGluZGl2aWR1YWxzIGFnZWQgb3ZlciA1IHllYXJzLgoqLwpkZWZpbmUgIlBuZXVtb2NvY2NhbCBkb3NlIDEgT3ZlcmR1ZSI6CiAgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IFBuZXVtb2NvY2NhbCBkb3NlIDEgRXhwaXJhdGlvbgpAcHNldWRvY29kZTogVG8gYmUgZGV0ZXJtaW5lZCBieSBNZW1iZXIgU3RhdGVzOyBob3dldmVyLCB0aGVyZSBpcyBubyByZWNvbW1lbmRlZCBleHBpcmF0aW9uIGRhdGUuIFdITyBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSByZWNvbW1lbmRhdGlvbnMgb24gdGhlIHVzZSBvZiBwbmV1bW9jb2NjYWwgdmFjY2luZSBpbiBpbmRpdmlkdWFscyBhZ2VkIG92ZXIgNSB5ZWFycy4KKi8KZGVmaW5lICJQbmV1bW9jb2NjYWwgZG9zZSAxIEV4cGlyYXRpb24iOgogIG51bGwKCiAgCi8qCkBjb21wbGV0ZTogRmlyc3QgcG5ldW1vY29jY2FsIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZApAcHNldWRvY29kZTogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJQbmV1bW9jb2NjYWwgdmFjY2luZXMiIGFuZCAiVHlwZSBvZiBkb3NlIiA9ICJQcmltYXJ5IHNlcmllcyIpID0gMQoqLwpkZWZpbmUgIkZpcnN0IHBuZXVtb2NvY2NhbCBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiOgogIEVuY291bnRlci4iT25lIHBuZXVtb2NvY2NhbCBwcmltYXJ5IHNlcmllcyBkb3NlIHdhcyBhZG1pbmlzdGVyZWQiCgoKCi8qCkBvdXRwdXQ6IFBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IHdpdGhpbiAyNG0KQGRlc2NyaXB0aW9uOiBQcm92aXNpb24gb2YgdGhlIHBuZXVtb2NvY2NhbCBkb3NlIDIKQHRyaWdnZXI6IEZpcnN0IHBuZXVtb2NvY2NhbCBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQgdG8gY2xpZW50LCB3aG8gaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDUgeWVhcnMgb2YgYWdlLCB3aXRoaW4gMjQgbW9udGhzIHBvc3QgYmlydGgKQHBzZXVkbzogVG9kYXkncyBkYXRlIOKIkiAiRGF0ZSBvZiBiaXJ0aCIg4omkIDUgeWVhcnMgQU5EIENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiUG5ldW1vY29jY2FsIHZhY2NpbmVzIiBhbmQgIlR5cGUgb2YgZG9zZSIgPSAiUHJpbWFyeSBzZXJpZXMiKSA9IDEgQU5EICJEYXRlIGFuZCB0aW1lIG9mIHZhY2NpbmF0aW9uIiAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiUG5ldW1vY29jY2FsIHZhY2NpbmVzIikg4oiSICJEYXRlIG9mIGJpcnRoIiA8IDI0IG1vbnRocwpAdHJpZ2dlckRhdGU6IExhdGVzdCAiRGF0ZSBhbmQgdGltZSBvZiB2YWNjaW5hdGlvbiIgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlBuZXVtb2NvY2NhbCB2YWNjaW5lcyIpCiovCmRlZmluZSAiUG5ldW1vY29jY2FsIGRvc2UgMiwgZmlyc3Qgd2l0aGluIDI0bSI6CiAgIkZpcnN0IHBuZXVtb2NvY2NhbCBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiCiAgYW5kIEVuY291bnRlci4iVGhlIGNsaWVudCdzIGFnZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNSB5ZWFycyIKICBhbmQgRW5jb3VudGVyLiJUaGUgZmlyc3QgcG5ldW1vY29jY2FsIGRvc2Ugd2FzIGFkbWluaXN0ZXJlZCB3aXRoaW4gMjQgbW9udGhzIHBvc3QgYmlydGgiCiAgYW5kIG5vdCAiU2Vjb25kIHBuZXVtb2NvY2NhbCBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiCgoKLyoKQG91dHB1dDogUG5ldW1vY29jY2FsIGRvc2UgMiwgZmlyc3Qgd2l0aGluIDI0bSBDcmVhdGUKQGNyZWF0ZTogUG5ldW1vY29jY2FsIGRvc2UgMiBzaG91bGQgYmUgcHJvdmlkZWQgaWYgdGhlIGNsaWVudCB3YXMgZ2l2ZW4gdGhlIHByZXZpb3VzIGRvc2UgbW9yZSB0aGFuIDQgd2Vla3MgYWdvCiovCmRlZmluZSAiUG5ldW1vY29jY2FsIGRvc2UgMiwgZmlyc3Qgd2l0aGluIDI0bSBDcmVhdGUiOgogIGlmICJQbmV1bW9jb2NjYWwgZG9zZSAyLCBmaXJzdCB3aXRoaW4gMjRtIgogIHRoZW4gJ1BuZXVtb2NvY2NhbCBkb3NlIDIgc2hvdWxkIGJlIHByb3ZpZGVkIGlmIHRoZSBjbGllbnQgd2FzIGdpdmVuIHRoZSBwcmV2aW91cyBkb3NlIG1vcmUgdGhhbiA0IHdlZWtzIGFnbycgKyAnCkR1ZSBEYXRlOiAnICsgVG9TdHJpbmcoIlBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IHdpdGhpbiAyNG0gRHVlIERhdGUiKQogIGVsc2UgJycKCgovKgpAZHluYW1pY1ZhbHVlOiBQbmV1bW9jb2NjYWwgZG9zZSAyLCBmaXJzdCB3aXRoaW4gMjRtIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJQbmV1bW9jb2NjYWwgdmFjY2luZXMiKSArIDQgd2Vla3MKKi8KZGVmaW5lICJQbmV1bW9jb2NjYWwgZG9zZSAyLCBmaXJzdCB3aXRoaW4gMjRtIER1ZSBEYXRlIjoKICBpZiAiUG5ldW1vY29jY2FsIGRvc2UgMiwgZmlyc3Qgd2l0aGluIDI0bSIgdGhlbiBFbmNvdW50ZXIuIkRhdGUgb2YgTGF0ZXN0IFBuZXVtb2NvY2NhbCBEb3NlIiArIDQgd2Vla3MKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBQbmV1bW9jb2NjYWwgZG9zZSAyLCBmaXJzdCB3aXRoaW4gMjRtIE92ZXJkdWUKQHBzZXVkb2NvZGU6IFRvIGJlIGRldGVybWluZWQgYnkgTWVtYmVyIFN0YXRlczsgaG93ZXZlciwgdGhlcmUgaXMgbm8gcmVjb21tZW5kZWQgb3ZlcmR1ZSBkYXRlLiBXSE8gZG9lcyBub3QgY3VycmVudGx5IGhhdmUgcmVjb21tZW5kYXRpb25zIG9uIHRoZSB1c2Ugb2YgcG5ldW1vY29jY2FsIHZhY2NpbmUgaW4gaW5kaXZpZHVhbHMgYWdlZCBvdmVyIDUgeWVhcnMuCiovCmRlZmluZSAiUG5ldW1vY29jY2FsIGRvc2UgMiwgZmlyc3Qgd2l0aGluIDI0bSBPdmVyZHVlIjoKICBudWxsCgoKLyoKQGR5bmFtaWNWYWx1ZTogUG5ldW1vY29jY2FsIGRvc2UgMiwgZmlyc3Qgd2l0aGluIDI0bSBFeHBpcmF0aW9uCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIGV4cGlyYXRpb24gZGF0ZS4gV0hPIGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIHJlY29tbWVuZGF0aW9ucyBvbiB0aGUgdXNlIG9mIHBuZXVtb2NvY2NhbCB2YWNjaW5lIGluIGluZGl2aWR1YWxzIGFnZWQgb3ZlciA1IHllYXJzLgoqLwpkZWZpbmUgIlBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IHdpdGhpbiAyNG0gRXhwaXJhdGlvbiI6CiAgbnVsbAoKICAKLyoKQGNvbXBsZXRlOiBTZWNvbmQgcG5ldW1vY29jY2FsIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZApAcHNldWRvY29kZTogQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJQbmV1bW9jb2NjYWwgdmFjY2luZXMiIGFuZCAiVHlwZSBvZiBkb3NlIiA9ICJQcmltYXJ5IHNlcmllcyIpID0gMgoqLwpkZWZpbmUgIlNlY29uZCBwbmV1bW9jb2NjYWwgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIjoKICBFbmNvdW50ZXIuIlR3byBwbmV1bW9jb2NjYWwgcHJpbWFyeSBzZXJpZXMgZG9zZXMgd2VyZSBhZG1pbmlzdGVyZWQiCgoKCi8qCkBvdXRwdXQ6IFBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IGFmdGVyIDI0bQpAZGVzY3JpcHRpb246IFByb3Zpc2lvbiBvZiB0aGUgcG5ldW1vY29jY2FsIGRvc2UgMgpAdHJpZ2dlcjogRmlyc3QgcG5ldW1vY29jY2FsIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCB0byBjbGllbnQsIHdobyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNSB5ZWFycyBvZiBhZ2UuIFBuZXVtb2NvY2NhbCBkb3NlIHdhcyBub3QgYWRtaW5pc3RlcmVkIHdpdGhpbiAyNCBtb250aHMgcG9zdCBiaXJ0aC4gQ2xpZW50IGlzIGF0IGhpZ2ggcmlzayBmb3IgcG5ldW1vY29jY2FsIGluZmVjdGlvbi4KQHBzZXVkbzogVG9kYXkncyBkYXRlIOKIkiAiRGF0ZSBvZiBiaXJ0aCIg4omkIDUgeWVhcnMgQU5EIENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiUG5ldW1vY29jY2FsIHZhY2NpbmVzIiBhbmQgIlR5cGUgb2YgZG9zZSIgPSAiUHJpbWFyeSBzZXJpZXMiKSA9IDEgQU5EICJEYXRlIGFuZCB0aW1lIG9mIHZhY2NpbmF0aW9uIiAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiUG5ldW1vY29jY2FsIHZhY2NpbmVzIikg4oiSICJEYXRlIG9mIGJpcnRoIiDiiaUgMjQgbW9udGhzIEFORCAiQXQgaGlnaCByaXNrIGZvciBwbmV1bW9jb2NjYWwgaW5mZWN0aW9uIiA9IFRSVUUKQHRyaWdnZXJEYXRlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJQbmV1bW9jb2NjYWwgdmFjY2luZXMiKQoqLwpkZWZpbmUgIlBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IGFmdGVyIDI0bSI6CiAgIkZpcnN0IHBuZXVtb2NvY2NhbCBkb3NlIGZyb20gdGhlIHByaW1hcnkgc2VyaWVzIHdhcyBhZG1pbmlzdGVyZWQiCiAgYW5kIEVuY291bnRlci4iVGhlIGNsaWVudCdzIGFnZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNSB5ZWFycyIKICBhbmQgRW5jb3VudGVyLiJUaGUgZmlyc3QgcG5ldW1vY29jY2FsIGRvc2Ugd2FzIGFkbWluaXN0ZXJlZCBhZnRlciAyNCBtb250aHMgcG9zdCBiaXJ0aCIKICBhbmQgRW5jb3VudGVyLiJDbGllbnQgaXMgYXQgaGlnaCByaXNrIGZvciBwbmV1bW9jb2NjYWwgaW5mZWN0aW9uIgogIGFuZCBub3QgIlNlY29uZCBwbmV1bW9jb2NjYWwgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIgoKCi8qCkBvdXRwdXQ6IFBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IGFmdGVyIDI0bSBDcmVhdGUKQGNyZWF0ZTogUG5ldW1vY29jY2FsIGRvc2UgMiBzaG91bGQgYmUgcHJvdmlkZWQgaWYgdGhlIGNsaWVudCB3YXMgZ2l2ZW4gdGhlIHByZXZpb3VzIGRvc2UgbW9yZSB0aGFuIDggd2Vla3MgYWdvCiovCmRlZmluZSAiUG5ldW1vY29jY2FsIGRvc2UgMiwgZmlyc3QgYWZ0ZXIgMjRtIENyZWF0ZSI6CiAgaWYgIlBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IGFmdGVyIDI0bSIKICB0aGVuICdQbmV1bW9jb2NjYWwgZG9zZSAyIHNob3VsZCBiZSBwcm92aWRlZCBpZiB0aGUgY2xpZW50IHdhcyBnaXZlbiB0aGUgcHJldmlvdXMgZG9zZSBtb3JlIHRoYW4gOCB3ZWVrcyBhZ28nICsgJwpEdWUgRGF0ZTogJyArIFRvU3RyaW5nKCJQbmV1bW9jb2NjYWwgZG9zZSAyLCBmaXJzdCBhZnRlciAyNG0gRHVlIERhdGUiKQogIGVsc2UgJycKCgovKgpAZHluYW1pY1ZhbHVlOiBQbmV1bW9jb2NjYWwgZG9zZSAyLCBmaXJzdCBhZnRlciAyNG0gRHVlIERhdGUKQHBzZXVkb2NvZGU6IExhdGVzdCAiRGF0ZSBhbmQgdGltZSBvZiB2YWNjaW5hdGlvbiIgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlBuZXVtb2NvY2NhbCB2YWNjaW5lcyIpICsgOCB3ZWVrcwoqLwpkZWZpbmUgIlBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IGFmdGVyIDI0bSBEdWUgRGF0ZSI6CiAgaWYgIlBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IGFmdGVyIDI0bSIgdGhlbiBFbmNvdW50ZXIuIkRhdGUgb2YgTGF0ZXN0IFBuZXVtb2NvY2NhbCBEb3NlIiArIDggd2Vla3MKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBQbmV1bW9jb2NjYWwgZG9zZSAyLCBmaXJzdCBhZnRlciAyNG0gT3ZlcmR1ZQpAcHNldWRvY29kZTogVG8gYmUgZGV0ZXJtaW5lZCBieSBNZW1iZXIgU3RhdGVzOyBob3dldmVyLCB0aGVyZSBpcyBubyByZWNvbW1lbmRlZCBvdmVyZHVlIGRhdGUuIFdITyBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSByZWNvbW1lbmRhdGlvbnMgb24gdGhlIHVzZSBvZiBwbmV1bW9jb2NjYWwgdmFjY2luZSBpbiBpbmRpdmlkdWFscyBhZ2VkIG92ZXIgNSB5ZWFycy4KKi8KZGVmaW5lICJQbmV1bW9jb2NjYWwgZG9zZSAyLCBmaXJzdCBhZnRlciAyNG0gT3ZlcmR1ZSI6CiAgbnVsbAoKCi8qCkBkeW5hbWljVmFsdWU6IFBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IGFmdGVyIDI0bSBFeHBpcmF0aW9uCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIGV4cGlyYXRpb24gZGF0ZS4gV0hPIGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIHJlY29tbWVuZGF0aW9ucyBvbiB0aGUgdXNlIG9mIHBuZXVtb2NvY2NhbCB2YWNjaW5lIGluIGluZGl2aWR1YWxzIGFnZWQgb3ZlciA1IHllYXJzLgoqLwpkZWZpbmUgIlBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IGFmdGVyIDI0bSBFeHBpcmF0aW9uIjoKICBudWxsCgogIAovKgpAb3V0cHV0OiBQbmV1bW9jb2NjYWwgZG9zZSAzCkBkZXNjcmlwdGlvbjogUHJvdmlzaW9uIG9mIHRoZSBwbmV1bW9jb2NjYWwgZG9zZSAzCkB0cmlnZ2VyOiBTZWNvbmQgcG5ldW1vY29jY2FsIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCB0byBjbGllbnQsIHdobyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNSB5ZWFycyBvZiBhZ2UuIEZpcnN0IHBuZXVtb2NvY2NhbCBkb3NlIHdhcyBhZG1pbmlzdGVyZWQgd2l0aGluIDEyIG1vbnRocyBwb3N0IGJpcnRoLgpAcHNldWRvOiBUb2RheSdzIGRhdGUg4oiSICJEYXRlIG9mIGJpcnRoIiDiiaQgNSB5ZWFycyBBTkQgQ291bnQgb2YgdmFjY2luZXMgYWRtaW5pc3RlcmVkICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJQbmV1bW9jb2NjYWwgdmFjY2luZXMiIGFuZCAiVHlwZSBvZiBkb3NlIiA9ICJQcmltYXJ5IHNlcmllcyIpID0gMiBBTkQgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJQbmV1bW9jb2NjYWwgdmFjY2luZXMiIEFORCAiRG9zZSBudW1iZXIiID0gMSkg4oiSICJEYXRlIG9mIGJpcnRoIiA8IDEyIG1vbnRocwpAdHJpZ2dlckRhdGU6IExhdGVzdCAiRGF0ZSBhbmQgdGltZSBvZiB2YWNjaW5hdGlvbiIgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlBuZXVtb2NvY2NhbCB2YWNjaW5lcyIpCiovCmRlZmluZSAiUG5ldW1vY29jY2FsIGRvc2UgMyI6CiAgIlNlY29uZCBwbmV1bW9jb2NjYWwgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkIgogIGFuZCBFbmNvdW50ZXIuIlRoZSBjbGllbnQncyBhZ2UgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDUgeWVhcnMiCiAgYW5kIEVuY291bnRlci4iVGhlIGZpcnN0IHBuZXVtb2NvY2NhbCBkb3NlIHdhcyBhZG1pbmlzdGVyZWQgd2l0aGluIDI0IG1vbnRocyBwb3N0IGJpcnRoIiAgYW5kIG5vdCAiVGhpcmQgcG5ldW1vY29jY2FsIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZC4gVGhlIHByaW1hcnkgc2VyaWVzIGhhcyBiZWVuIGNvbXBsZXRlZC4iCgoKLyoKQG91dHB1dDogUG5ldW1vY29jY2FsIGRvc2UgMyBDcmVhdGUKQGNyZWF0ZTogUG5ldW1vY29jY2FsIGRvc2UgMyBzaG91bGQgYmUgcHJvdmlkZWQgaWYgdGhlIGNsaWVudCB3YXMgZ2l2ZW4gdGhlIHByZXZpb3VzIGRvc2UgbW9yZSB0aGFuIDQgd2Vla3MgYWdvCiovCmRlZmluZSAiUG5ldW1vY29jY2FsIGRvc2UgMyBDcmVhdGUiOgogIGlmICJQbmV1bW9jb2NjYWwgZG9zZSAzIgogIHRoZW4gJ1BuZXVtb2NvY2NhbCBkb3NlIDMgc2hvdWxkIGJlIHByb3ZpZGVkIGlmIHRoZSBjbGllbnQgd2FzIGdpdmVuIHRoZSBwcmV2aW91cyBkb3NlIG1vcmUgdGhhbiA0IHdlZWtzIGFnbycgKyAnCkR1ZSBEYXRlOiAnICsgVG9TdHJpbmcoIlBuZXVtb2NvY2NhbCBkb3NlIDMgRHVlIERhdGUiKQogIGVsc2UgJycKCgovKgpAZHluYW1pY1ZhbHVlOiBQbmV1bW9jb2NjYWwgZG9zZSAzIER1ZSBEYXRlCkBwc2V1ZG9jb2RlOiBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJQbmV1bW9jb2NjYWwgdmFjY2luZXMiKSArIDQgd2Vla3MKKi8KZGVmaW5lICJQbmV1bW9jb2NjYWwgZG9zZSAzIER1ZSBEYXRlIjoKICBpZiAiUG5ldW1vY29jY2FsIGRvc2UgMyIgdGhlbiBFbmNvdW50ZXIuIkRhdGUgb2YgTGF0ZXN0IFBuZXVtb2NvY2NhbCBEb3NlIiArIDQgd2Vla3MKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBQbmV1bW9jb2NjYWwgZG9zZSAzIE92ZXJkdWUKQHBzZXVkb2NvZGU6IFRvIGJlIGRldGVybWluZWQgYnkgTWVtYmVyIFN0YXRlczsgaG93ZXZlciwgdGhlcmUgaXMgbm8gcmVjb21tZW5kZWQgb3ZlcmR1ZSBkYXRlLiBXSE8gZG9lcyBub3QgY3VycmVudGx5IGhhdmUgcmVjb21tZW5kYXRpb25zIG9uIHRoZSB1c2Ugb2YgcG5ldW1vY29jY2FsIHZhY2NpbmUgaW4gaW5kaXZpZHVhbHMgYWdlZCBvdmVyIDUgeWVhcnMuCiovCmRlZmluZSAiUG5ldW1vY29jY2FsIGRvc2UgMyBPdmVyZHVlIjoKICBudWxsCgoKLyoKQGR5bmFtaWNWYWx1ZTogUG5ldW1vY29jY2FsIGRvc2UgMyBFeHBpcmF0aW9uCkBwc2V1ZG9jb2RlOiBUbyBiZSBkZXRlcm1pbmVkIGJ5IE1lbWJlciBTdGF0ZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIG5vIHJlY29tbWVuZGVkIGV4cGlyYXRpb24gZGF0ZS4gV0hPIGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIHJlY29tbWVuZGF0aW9ucyBvbiB0aGUgdXNlIG9mIHBuZXVtb2NvY2NhbCB2YWNjaW5lIGluIGluZGl2aWR1YWxzIGFnZWQgb3ZlciA1IHllYXJzLgoqLwpkZWZpbmUgIlBuZXVtb2NvY2NhbCBkb3NlIDMgRXhwaXJhdGlvbiI6CiAgbnVsbAoKICAKLyoKQGNvbXBsZXRlOiBUaGlyZCBwbmV1bW9jb2NjYWwgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkLiBUaGUgcHJpbWFyeSBzZXJpZXMgaGFzIGJlZW4gY29tcGxldGVkLgpAcHNldWRvY29kZTogIkNvbXBsZXRlZCB0aGUgcHJpbWFyeSB2YWNjaW5hdGlvbiBzZXJpZXMiID0gVFJVRSAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiUG5ldW1vY29jY2FsIHZhY2NpbmVzIikKKi8KZGVmaW5lICJUaGlyZCBwbmV1bW9jb2NjYWwgZG9zZSBmcm9tIHRoZSBwcmltYXJ5IHNlcmllcyB3YXMgYWRtaW5pc3RlcmVkLiBUaGUgcHJpbWFyeSBzZXJpZXMgaGFzIGJlZW4gY29tcGxldGVkLiI6CiAgRW5jb3VudGVyLiJUaHJlZSBwbmV1bW9jb2NjYWwgcHJpbWFyeSBzZXJpZXMgZG9zZXMgd2VyZSBhZG1pbmlzdGVyZWQiCgoKCi8qCkBvdXRwdXQ6IFBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2UKQGRlc2NyaXB0aW9uOiBQcm92aXNpb24gb2YgYm9vc3RlciBkb3NlIGZvciBISVYtcG9zaXRpdmUgaW5mYW50cyBhbmQgcHJldGVybSBuZW9uYXRlcwpAdHJpZ2dlcjogVGhpcmQgcG5ldW1vY29jY2FsIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCB0byBjbGllbnQsIHdobyBpcyBtb3JlIHRoYW4gMTIgbW9udGhzIG9mIGFnZS4gVGhlIGxhdGVzdCBwbmV1bW9jb2NjYWwgZG9zZSB3YXMgYWRtaW5pc3RlcmVkIHdpdGhpbiAxMiBtb250aHMgcG9zdCBiaXJ0aC4gQ2xpZW50IGlzIGVpdGhlciBISVYgcG9zaXRpdmUgb3IgaGFkIHByZXRlcm0gYmlydGguCkBwc2V1ZG86IFRvZGF5J3MgZGF0ZSDiiJIgIkRhdGUgb2YgYmlydGgiID4gMTIgbW9udGhzIEFORCBDb3VudCBvZiB2YWNjaW5lcyBhZG1pbmlzdGVyZWQgKHdoZXJlICJWYWNjaW5lIHR5cGUiID0gIlBuZXVtb2NvY2NhbCB2YWNjaW5lcyIgYW5kICJUeXBlIG9mIGRvc2UiID0gIlByaW1hcnkgc2VyaWVzIikgPSAzIEFORCBMYXRlc3QgIkRhdGUgYW5kIHRpbWUgb2YgdmFjY2luYXRpb24iICh3aGVyZSAiVmFjY2luZSB0eXBlIiA9ICJQbmV1bW9jb2NjYWwgdmFjY2luZXMiKSDiiJIgIkRhdGUgb2YgYmlydGgiIDwgMTIgbW9udGhzIEFORCAoIkhJViBzdGF0dXMiID0gIkhJVi1wb3NpdGl2ZSIgT1IgIlByZXRlcm0gYmlydGgiID0gVFJVRSkKQHRyaWdnZXJEYXRlOiAiRGF0ZSBvZiBiaXJ0aCIKKi8KZGVmaW5lICJQbmV1bW9jb2NjYWwgYm9vc3RlciBkb3NlIjoKICAiVGhpcmQgcG5ldW1vY29jY2FsIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZC4gVGhlIHByaW1hcnkgc2VyaWVzIGhhcyBiZWVuIGNvbXBsZXRlZC4iCiAgYW5kIEVuY291bnRlci4iVGhlIGxhdGVzdCBwbmV1bW9jb2NjYWwgZG9zZSB3YXMgYWRtaW5pc3RlcmVkIHdpdGhpbiAxMiBtb250aHMgcG9zdCBiaXJ0aCIKICBhbmQgKAogICAgRW5jb3VudGVyLiJDbGllbnQncyBISVYgc3RhdHVzIGlzIHBvc2l0aXZlIgogICAgb3IgRW5jb3VudGVyLiJDbGllbnQgaGFkIHByZXRlcm0gYmlydGgiCiAgKQogIGFuZCAiUG5ldW1vY29jY2FsIGJvb3N0ZXIgZG9zZSBFeHBpcmF0aW9uIiBhZnRlciBkYXkgb2YgVG9kYXkKICBhbmQgbm90ICJPbmUgcG5ldW1vY29jY2FsIGJvb3N0ZXIgZG9zZSB3YXMgYWRtaW5pc3RlcmVkLiIKCgovKgpAb3V0cHV0OiBQbmV1bW9jb2NjYWwgYm9vc3RlciBkb3NlIENyZWF0ZQpAY3JlYXRlOiBISVYtcG9zaXRpdmUgaW5mYW50cyBhbmQgcHJldGVybSBuZW9uYXRlcyB3aG8gaGF2ZSByZWNlaXZlZCB0aGVpciAzIHByaW1hcnkgdmFjY2luZSBkb3NlcyBiZWZvcmUgMTIgbW9udGhzIG9mIGFnZSBtYXkgYmVuZWZpdCBmcm9tIGEgYm9vc3RlciBkb3NlIGluIHRoZSBzZWNvbmQgeWVhciBvZiBsaWZlCiovCmRlZmluZSAiUG5ldW1vY29jY2FsIGJvb3N0ZXIgZG9zZSBDcmVhdGUiOgogIGlmICJQbmV1bW9jb2NjYWwgYm9vc3RlciBkb3NlIgogIHRoZW4gJ0hJVi1wb3NpdGl2ZSBpbmZhbnRzIGFuZCBwcmV0ZXJtIG5lb25hdGVzIHdobyBoYXZlIHJlY2VpdmVkIHRoZWlyIDMgcHJpbWFyeSB2YWNjaW5lIGRvc2VzIGJlZm9yZSAxMiBtb250aHMgb2YgYWdlIG1heSBiZW5lZml0IGZyb20gYSBib29zdGVyIGRvc2UgaW4gdGhlIHNlY29uZCB5ZWFyIG9mIGxpZmUnICsgJwpEdWUgRGF0ZTogJyArIFRvU3RyaW5nKCJQbmV1bW9jb2NjYWwgYm9vc3RlciBkb3NlIER1ZSBEYXRlIikgKyAnCk92ZXJkdWU6ICcgKyBUb1N0cmluZygiUG5ldW1vY29jY2FsIGJvb3N0ZXIgZG9zZSBPdmVyZHVlIikgKyAnCkV4cGlyYXRpb246ICcgKyBUb1N0cmluZygiUG5ldW1vY29jY2FsIGJvb3N0ZXIgZG9zZSBFeHBpcmF0aW9uIikKICBlbHNlICcnCgoKLyoKQGR5bmFtaWNWYWx1ZTogUG5ldW1vY29jY2FsIGJvb3N0ZXIgZG9zZSBEdWUgRGF0ZQpAcHNldWRvY29kZTogIkRhdGUgb2YgYmlydGgiICsgMTIgbW9udGhzCiovCmRlZmluZSAiUG5ldW1vY29jY2FsIGJvb3N0ZXIgZG9zZSBEdWUgRGF0ZSI6CiAgaWYgIlBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2UiIHRoZW4gUGF0aWVudC5iaXJ0aERhdGUgKyAxMiBtb250aHMKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBQbmV1bW9jb2NjYWwgYm9vc3RlciBkb3NlIE92ZXJkdWUKQHBzZXVkb2NvZGU6ICJEYXRlIG9mIGJpcnRoIiArIDI0IG1vbnRocwoqLwpkZWZpbmUgIlBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2UgT3ZlcmR1ZSI6CiAgaWYgIlBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2UiIHRoZW4gUGF0aWVudC5iaXJ0aERhdGUgKyAyNCBtb250aHMKICBlbHNlIG51bGwKCgovKgpAZHluYW1pY1ZhbHVlOiBQbmV1bW9jb2NjYWwgYm9vc3RlciBkb3NlIEV4cGlyYXRpb24KQHBzZXVkb2NvZGU6ICJEYXRlIG9mIGJpcnRoIiArIDI0IG1vbnRocwoqLwpkZWZpbmUgIlBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2UgRXhwaXJhdGlvbiI6CiAgUGF0aWVudC5iaXJ0aERhdGUgKyAyNCBtb250aHMKCiAgCi8qCkBjb21wbGV0ZTogT25lIHBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2Ugd2FzIGFkbWluaXN0ZXJlZC4KQHBzZXVkb2NvZGU6IENvdW50IG9mIHZhY2NpbmVzIGFkbWluaXN0ZXJlZCAod2hlcmUgIlZhY2NpbmUgdHlwZSIgPSAiUG5ldW1vY29jY2FsIHZhY2NpbmVzIiBhbmQgIlR5cGUgb2YgZG9zZSIgPSAiQm9vc3RlciBkb3NlIikgPSAxCiovCmRlZmluZSAiT25lIHBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2Ugd2FzIGFkbWluaXN0ZXJlZC4iOgogIEVuY291bnRlci4iT25lIHBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2Ugd2FzIGFkbWluaXN0ZXJlZCIKCgoKLyoKQHRlc3Q6IFRlc3QgZXhwZWN0ZWQgcmVzdWx0cyBiYXNlZCBvbiBleGFtcGxlIHBhdGllbnRzCiovCmRlZmluZSAiVGVzdCBWYWxpZGF0aW9uIjoKICBjYXNlCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG5ldW1vY29jY2FsMzMuMScgdGhlbiAiUG5ldW1vY29jY2FsIGRvc2UgMSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQbmV1bW9jb2NjYWwzNC4yJyB0aGVuICJQbmV1bW9jb2NjYWwgZG9zZSAxIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BuZXVtb2NvY2NhbDM1LjQnIHRoZW4gIlBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IHdpdGhpbiAyNG0iCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG5ldW1vY29jY2FsMzYuNCcgdGhlbiAiUG5ldW1vY29jY2FsIGRvc2UgMiwgZmlyc3Qgd2l0aGluIDI0bSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQbmV1bW9jb2NjYWwzNy41JyB0aGVuICJQbmV1bW9jb2NjYWwgZG9zZSAyLCBmaXJzdCB3aXRoaW4gMjRtIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BuZXVtb2NvY2NhbDM4LjUnIHRoZW4gIlBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IHdpdGhpbiAyNG0iCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG5ldW1vY29jY2FsMzkuNScgdGhlbiAiUG5ldW1vY29jY2FsIGRvc2UgMiwgZmlyc3Qgd2l0aGluIDI0bSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQbmV1bW9jb2NjYWw0MC41JyB0aGVuICJQbmV1bW9jb2NjYWwgZG9zZSAyLCBmaXJzdCB3aXRoaW4gMjRtIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BuZXVtb2NvY2NhbDQxLjUnIHRoZW4gIlBuZXVtb2NvY2NhbCBkb3NlIDIsIGZpcnN0IGFmdGVyIDI0bSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQbmV1bW9jb2NjYWw0Mi41JyB0aGVuICJQbmV1bW9jb2NjYWwgZG9zZSAyLCBmaXJzdCBhZnRlciAyNG0iCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG5ldW1vY29jY2FsNDMuNCcgdGhlbiAiRmlyc3QgcG5ldW1vY29jY2FsIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZCIKICAgICAgYW5kIG5vdCAiUG5ldW1vY29jY2FsIGRvc2UgMiwgZmlyc3QgYWZ0ZXIgMjRtIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BuZXVtb2NvY2NhbDQ0LjQnIHRoZW4gIlBuZXVtb2NvY2NhbCBkb3NlIDMiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG5ldW1vY29jY2FsNDUuNCcgdGhlbiAiUG5ldW1vY29jY2FsIGRvc2UgMyIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQbmV1bW9jb2NjYWw0Ni4zJyB0aGVuICJQbmV1bW9jb2NjYWwgZG9zZSAzIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BuZXVtb2NvY2NhbDQ3LjYnIHRoZW4gIlBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2UiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG5ldW1vY29jY2FsNDguNicgdGhlbiAiUG5ldW1vY29jY2FsIGJvb3N0ZXIgZG9zZSIKICAgIHdoZW4gUGF0aWVudC5pZCA9ICdQbmV1bW9jb2NjYWw0OS42JyB0aGVuICJQbmV1bW9jb2NjYWwgYm9vc3RlciBkb3NlIgogICAgd2hlbiBQYXRpZW50LmlkID0gJ1BuZXVtb2NvY2NhbDUwLjYnIHRoZW4gIlBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2UiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG5ldW1vY29jY2FsNTEuNCcgdGhlbiAiVGhpcmQgcG5ldW1vY29jY2FsIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZC4gVGhlIHByaW1hcnkgc2VyaWVzIGhhcyBiZWVuIGNvbXBsZXRlZC4iCiAgICAgIGFuZCBub3QgIlBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2UiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG5ldW1vY29jY2FsNTIuNScgdGhlbiAiVGhpcmQgcG5ldW1vY29jY2FsIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZC4gVGhlIHByaW1hcnkgc2VyaWVzIGhhcyBiZWVuIGNvbXBsZXRlZC4iCiAgICAgIGFuZCBub3QgIlBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2UiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG5ldW1vY29jY2FsNTMuMycgdGhlbiAiVGhpcmQgcG5ldW1vY29jY2FsIGRvc2UgZnJvbSB0aGUgcHJpbWFyeSBzZXJpZXMgd2FzIGFkbWluaXN0ZXJlZC4gVGhlIHByaW1hcnkgc2VyaWVzIGhhcyBiZWVuIGNvbXBsZXRlZC4iCiAgICAgIGFuZCBub3QgIlBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2UiCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG5ldW1vY29jY2FsNTQuMicgdGhlbiAiT25lIHBuZXVtb2NvY2NhbCBib29zdGVyIGRvc2Ugd2FzIGFkbWluaXN0ZXJlZC4iCiAgICB3aGVuIFBhdGllbnQuaWQgPSAnUG5ldW1vY29jY2FsNTUuMScgdGhlbiBub3QgIlBuZXVtb2NvY2NhbCBkb3NlIDEiCiAgICBlbHNlICdObyB0ZXN0IGNhc2Ugc2V0JwogIGVuZAo="/>
  </content>
</Library>