This page is part of the FHIR Specification (v5.0.0-ballot: FHIR R5 Ballot Preview). The current version which supercedes this version is 5.0.0. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4
Clinical Decision Support Work Group | Maturity Level: N/A | Standards Status: Informative | Compartments: Not linked to any defined compartments |
Raw JSON (canonical form + also see JSON Format Specification)
Opioid CDS Common Library
{ "resourceType": "Library", "id": "opioidcds-common", "text": { "status": "generated", "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n <h2>Participants</h2>\n <table class=\"grid\">\n <tr>\n <td>Author</td>\n <td>Kensaku Kawamoto, MD, PhD, MHS</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Bryn Rhodes</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Floyd Eisenberg, MD, MPH</td>\n </tr>\n <tr>\n <td>Author</td>\n <td>Robert McClure, MD, MPH</td>\n </tr>\n </table>\n <h2>Related Artifacts</h2>\n <table class=\"grid\">\n <tr>\n <td>Documentation</td>\n <td>CDC guideline for prescribing opioids for chronic pain</td>\n <td>\n <p>\n <code>\n <a href=\"https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420\">https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420</a>\n </code> (\n <code/>)\n </p>\n </td>\n </tr>\n <tr>\n <td>Depends On</td>\n <td/>\n <td>\n <code>http://example.org/fhir/Library/omtk-logic</code>\n </td>\n </tr>\n <tr>\n <td>Documentation</td>\n <td>MME Conversion Tables</td>\n <td>\n <p>\n <code>\n <a href=\"https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf\">https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf</a>\n </code> (\n <code/>)\n </p>\n </td>\n </tr>\n </table>\n <h2>Contents</h2>\n <p>\n <code>application/elm+xml</code>\n </p>\n <pre>\n <code><?xml version="1.0" encoding="UTF-8"?>\n<library xmlns="urn:hl7-org:elm:r1" xmlns:t="urn:hl7-org:elm-types:r1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:fhir="http://hl7.org/fhir" xmlns:qdm43="urn:healthit-gov:qdm:v4_3" xmlns:qdm53="urn:healthit-gov:qdm:v5_3" xmlns:a="urn:hl7-org:cql-annotations:r1">\n <identifier id="OpioidCDS_STU4_Common" version="0.1.0"/>\n <schemaIdentifier id="urn:hl7-org:elm" version="r1"/>\n <usings>\n <def localIdentifier="System" uri="urn:hl7-org:elm-types:r1"/>\n <def localIdentifier="FHIR" uri="http://hl7.org/fhir" version="3.2.0"/>\n </usings>\n <includes>\n <def localIdentifier="OMTKLogic" path="OMTKLogic" version="0.1.0"/>\n </includes>\n <valueSets>\n <def name="Benzodiazepines" id="benzodiazepines" accessLevel="Public"/>\n <def name="Naloxone" id="naloxone" accessLevel="Public"/>\n <def name="Ambulatory Abuse Potential Opioids" id="opioids-abused-in-ambulatory-care" accessLevel="Public"/>\n <def name="End Of Life Opioids" id="opioids-indicating-end-of-life" accessLevel="Public"/>\n <def name="Long Acting Opioids" id="long-acting-opioids" accessLevel="Public"/>\n <def name="Illicit Drug Screening" id="illicit-drug-urine-screening" accessLevel="Public"/>\n <def name="Opioid Drug Screening" id="opioid-urine-screening" accessLevel="Public"/>\n <def name="Opioids" id="opioids" accessLevel="Public"/>\n <def name="Codeine Cough Meds" id="opioids-codeine-cough-meds" accessLevel="Public"/>\n <def name="Short Acting Opioids" id="short-acting-opioids" accessLevel="Public"/>\n </valueSets>\n <statements>\n <def name="IsForChronicPain" context="Patient" accessLevel="Public">\n <expression valueType="t:Boolean" value="true" xsi:type="Literal"/>\n </def>\n <def name="HasMetastaticCancer" context="Patient" accessLevel="Public">\n <expression valueType="t:Boolean" value="false" xsi:type="Literal"/>\n </def>\n <def name="ToCode" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression classType="t:Code" xsi:type="Instance">\n <element name="code">\n <value path="value" xsi:type="Property">\n <source path="code" xsi:type="Property">\n <source name="coding" xsi:type="OperandRef"/>\n </source>\n </value>\n </element>\n <element name="system">\n <value path="value" xsi:type="Property">\n <source path="system" xsi:type="Property">\n <source name="coding" xsi:type="OperandRef"/>\n </source>\n </value>\n </element>\n <element name="version">\n <value path="value" xsi:type="Property">\n <source path="version" xsi:type="Property">\n <source name="coding" xsi:type="OperandRef"/>\n </source>\n </value>\n </element>\n <element name="display">\n <value path="value" xsi:type="Property">\n <source path="display" xsi:type="Property">\n <source name="coding" xsi:type="OperandRef"/>\n </source>\n </value>\n </element>\n </expression>\n <operand name="coding">\n <operandTypeSpecifier name="fhir:Coding" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n <def name="ToQuantity" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression classType="t:Quantity" xsi:type="Instance">\n <element name="value">\n <value path="value" xsi:type="Property">\n <source path="value" xsi:type="Property">\n <source name="quantity" xsi:type="OperandRef"/>\n </source>\n </value>\n </element>\n <element name="unit">\n <value path="value" xsi:type="Property">\n <source path="unit" xsi:type="Property">\n <source name="quantity" xsi:type="OperandRef"/>\n </source>\n </value>\n </element>\n </expression>\n <operand name="quantity">\n <operandTypeSpecifier name="fhir:Quantity" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n <def name="Prescriptions" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="Query">\n <source alias="O">\n <expression name="Orders" xsi:type="OperandRef"/>\n </source>\n <let identifier="rxNormCode">\n <expression name="ToCode" xsi:type="FunctionRef">\n <operand xsi:type="Indexer">\n <operand path="coding" xsi:type="Property">\n <source path="medication" scope="O" xsi:type="Property"/>\n </operand>\n <operand valueType="t:Integer" value="0" xsi:type="Literal"/>\n </operand>\n </expression>\n </let>\n <let identifier="medicationName">\n <expression name="GetMedicationName" libraryName="OMTKLogic" xsi:type="FunctionRef">\n <operand name="rxNormCode" xsi:type="QueryLetRef"/>\n </expression>\n </let>\n <let identifier="dosageInstruction">\n <expression xsi:type="Indexer">\n <operand path="dosageInstruction" scope="O" xsi:type="Property"/>\n <operand valueType="t:Integer" value="0" xsi:type="Literal"/>\n </expression>\n </let>\n <let identifier="repeat">\n <expression path="repeat" xsi:type="Property">\n <source path="timing" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </source>\n </expression>\n </let>\n <let identifier="frequency">\n <expression xsi:type="Coalesce">\n <operand path="value" xsi:type="Property">\n <source path="frequencyMax" xsi:type="Property">\n <source name="repeat" xsi:type="QueryLetRef"/>\n </source>\n </operand>\n <operand path="value" xsi:type="Property">\n <source path="frequency" xsi:type="Property">\n <source name="repeat" xsi:type="QueryLetRef"/>\n </source>\n </operand>\n </expression>\n </let>\n <let identifier="period">\n <expression classType="t:Quantity" xsi:type="Instance">\n <element name="value">\n <value path="value" xsi:type="Property">\n <source path="period" xsi:type="Property">\n <source name="repeat" xsi:type="QueryLetRef"/>\n </source>\n </value>\n </element>\n <element name="unit">\n <value path="value" xsi:type="Property">\n <source path="periodUnit" xsi:type="Property">\n <source name="repeat" xsi:type="QueryLetRef"/>\n </source>\n </value>\n </element>\n </expression>\n </let>\n <let identifier="doseDescription">\n <expression xsi:type="Coalesce">\n <operand xsi:type="ToList">\n <operand xsi:type="If">\n <condition asType="t:Boolean" xsi:type="As">\n <operand xsi:type="Is">\n <operand path="dose" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </operand>\n <isTypeSpecifier name="fhir:Range" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </condition>\n <then xsi:type="Concatenate">\n <operand xsi:type="Concatenate">\n <operand xsi:type="Concatenate">\n <operand xsi:type="ToString">\n <operand name="ToQuantity" xsi:type="FunctionRef">\n <operand path="low" xsi:type="Property">\n <source path="dose" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </source>\n </operand>\n </operand>\n </operand>\n <operand valueType="t:String" value="-" xsi:type="Literal"/>\n </operand>\n <operand xsi:type="ToString">\n <operand name="ToQuantity" xsi:type="FunctionRef">\n <operand path="high" xsi:type="Property">\n <source path="dose" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </source>\n </operand>\n </operand>\n </operand>\n </operand>\n <operand path="value" xsi:type="Property">\n <source path="unit" xsi:type="Property">\n <source path="high" xsi:type="Property">\n <source path="dose" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </source>\n </source>\n </source>\n </operand>\n </then>\n <else xsi:type="ToString">\n <operand name="ToQuantity" xsi:type="FunctionRef">\n <operand asType="fhir:Quantity" xsi:type="As">\n <operand path="dose" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </operand>\n </operand>\n </operand>\n </else>\n </operand>\n </operand>\n </expression>\n </let>\n <let identifier="frequencyDescription">\n <expression xsi:type="Concatenate">\n <operand xsi:type="ToString">\n <operand path="value" xsi:type="Property">\n <source path="frequency" xsi:type="Property">\n <source path="repeat" xsi:type="Property">\n <source path="timing" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </source>\n </source>\n </source>\n </operand>\n </operand>\n <operand xsi:type="Coalesce">\n <operand xsi:type="Concatenate">\n <operand valueType="t:String" value="-" xsi:type="Literal"/>\n <operand xsi:type="ToString">\n <operand path="value" xsi:type="Property">\n <source path="frequencyMax" xsi:type="Property">\n <source path="repeat" xsi:type="Property">\n <source path="timing" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </source>\n </source>\n </source>\n </operand>\n </operand>\n </operand>\n <operand valueType="t:String" value="" xsi:type="Literal"/>\n </operand>\n </expression>\n </let>\n <return>\n <expression xsi:type="Tuple">\n <element name="rxNormCode">\n <value name="rxNormCode" xsi:type="QueryLetRef"/>\n </element>\n <element name="isDraft">\n <value xsi:type="Equal">\n <operand path="value" xsi:type="Property">\n <source path="status" scope="O" xsi:type="Property"/>\n </operand>\n <operand valueType="t:String" value="draft" xsi:type="Literal"/>\n </value>\n </element>\n <element name="isPRN">\n <value path="value" xsi:type="Property">\n <source path="asNeeded" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </source>\n </value>\n </element>\n <element name="prescription">\n <value xsi:type="If">\n <condition asType="t:Boolean" xsi:type="As">\n <operand xsi:type="Not">\n <operand xsi:type="IsNull">\n <operand path="text" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </operand>\n </operand>\n </operand>\n </condition>\n <then xsi:type="Concatenate">\n <operand xsi:type="Concatenate">\n <operand name="medicationName" xsi:type="QueryLetRef"/>\n <operand valueType="t:String" value=" " xsi:type="Literal"/>\n </operand>\n <operand path="value" xsi:type="Property">\n <source path="text" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </source>\n </operand>\n </then>\n <else xsi:type="Concatenate">\n <operand xsi:type="Concatenate">\n <operand xsi:type="Concatenate">\n <operand xsi:type="Concatenate">\n <operand xsi:type="Concatenate">\n <operand name="medicationName" xsi:type="QueryLetRef"/>\n <operand valueType="t:String" value=" " xsi:type="Literal"/>\n </operand>\n <operand name="doseDescription" xsi:type="QueryLetRef"/>\n </operand>\n <operand valueType="t:String" value=" q" xsi:type="Literal"/>\n </operand>\n <operand name="frequencyDescription" xsi:type="QueryLetRef"/>\n </operand>\n <operand xsi:type="If">\n <condition asType="t:Boolean" xsi:type="As">\n <operand path="value" xsi:type="Property">\n <source path="asNeeded" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </source>\n </operand>\n </condition>\n <then valueType="t:String" value=" PRN" xsi:type="Literal"/>\n <else valueType="t:String" value="" xsi:type="Literal"/>\n </operand>\n </else>\n </value>\n </element>\n <element name="dose">\n <value xsi:type="If">\n <condition asType="t:Boolean" xsi:type="As">\n <operand xsi:type="Is">\n <operand path="dose" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </operand>\n <isTypeSpecifier name="fhir:Range" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </condition>\n <then name="ToQuantity" xsi:type="FunctionRef">\n <operand path="high" xsi:type="Property">\n <source path="dose" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </source>\n </operand>\n </then>\n <else name="ToQuantity" xsi:type="FunctionRef">\n <operand asType="fhir:Quantity" xsi:type="As">\n <operand path="dose" xsi:type="Property">\n <source name="dosageInstruction" xsi:type="QueryLetRef"/>\n </operand>\n </operand>\n </else>\n </value>\n </element>\n <element name="dosesPerDay">\n <value xsi:type="Coalesce">\n <operand name="ToDaily" libraryName="OMTKLogic" xsi:type="FunctionRef">\n <operand name="frequency" xsi:type="QueryLetRef"/>\n <operand name="period" xsi:type="QueryLetRef"/>\n </operand>\n <operand valueType="t:Decimal" value="1.0" xsi:type="Literal"/>\n </value>\n </element>\n </expression>\n </return>\n </expression>\n <operand name="Orders">\n <operandTypeSpecifier xsi:type="ListTypeSpecifier">\n <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>\n </operandTypeSpecifier>\n </operand>\n </def>\n <def name="MME" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="Query">\n <source alias="P">\n <expression name="Prescriptions" xsi:type="FunctionRef">\n <operand name="prescriptions" xsi:type="OperandRef"/>\n </expression>\n </source>\n <let identifier="mme">\n <expression xsi:type="SingletonFrom">\n <operand name="CalculateMMEs" libraryName="OMTKLogic" xsi:type="FunctionRef">\n <operand xsi:type="List">\n <element xsi:type="Tuple">\n <element name="rxNormCode">\n <value path="rxNormCode" scope="P" xsi:type="Property"/>\n </element>\n <element name="doseQuantity">\n <value path="dose" scope="P" xsi:type="Property"/>\n </element>\n <element name="dosesPerDay">\n <value path="dosesPerDay" scope="P" xsi:type="Property"/>\n </element>\n </element>\n </operand>\n </operand>\n </expression>\n </let>\n <return>\n <expression xsi:type="Tuple">\n <element name="rxNormCode">\n <value path="rxNormCode" scope="P" xsi:type="Property"/>\n </element>\n <element name="isDraft">\n <value path="isDraft" scope="P" xsi:type="Property"/>\n </element>\n <element name="isPRN">\n <value path="isPRN" scope="P" xsi:type="Property"/>\n </element>\n <element name="prescription">\n <value path="prescription" scope="P" xsi:type="Property"/>\n </element>\n <element name="dailyDose">\n <value path="dailyDoseDescription" xsi:type="Property">\n <source name="mme" xsi:type="QueryLetRef"/>\n </value>\n </element>\n <element name="conversionFactor">\n <value path="conversionFactor" xsi:type="Property">\n <source name="mme" xsi:type="QueryLetRef"/>\n </value>\n </element>\n <element name="mme">\n <value path="mme" xsi:type="Property">\n <source name="mme" xsi:type="QueryLetRef"/>\n </value>\n </element>\n </expression>\n </return>\n </expression>\n <operand name="prescriptions">\n <operandTypeSpecifier xsi:type="ListTypeSpecifier">\n <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>\n </operandTypeSpecifier>\n </operand>\n </def>\n <def name="TotalMME" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression classType="t:Quantity" xsi:type="Instance">\n <element name="value">\n <value xsi:type="Sum">\n <source xsi:type="Query">\n <source alias="M">\n <expression name="MME" xsi:type="FunctionRef">\n <operand name="prescriptions" xsi:type="OperandRef"/>\n </expression>\n </source>\n <return>\n <expression path="value" xsi:type="Property">\n <source path="mme" scope="M" xsi:type="Property"/>\n </expression>\n </return>\n </source>\n </value>\n </element>\n <element name="unit">\n <value valueType="t:String" value="mg/d" xsi:type="Literal"/>\n </element>\n </expression>\n <operand name="prescriptions">\n <operandTypeSpecifier xsi:type="ListTypeSpecifier">\n <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>\n </operandTypeSpecifier>\n </operand>\n </def>\n <def name="GetPeriodDays" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="Case">\n <caseItem>\n <when xsi:type="StartsWith">\n <operand name="value" xsi:type="OperandRef"/>\n <operand valueType="t:String" value="year" xsi:type="Literal"/>\n </when>\n <then valueType="t:Decimal" value="365.0" xsi:type="Literal"/>\n </caseItem>\n <caseItem>\n <when xsi:type="StartsWith">\n <operand name="value" xsi:type="OperandRef"/>\n <operand valueType="t:String" value="month" xsi:type="Literal"/>\n </when>\n <then valueType="t:Decimal" value="30.0" xsi:type="Literal"/>\n </caseItem>\n <caseItem>\n <when xsi:type="StartsWith">\n <operand name="value" xsi:type="OperandRef"/>\n <operand valueType="t:String" value="hour" xsi:type="Literal"/>\n </when>\n <then xsi:type="Divide">\n <operand valueType="t:Decimal" value="1.0" xsi:type="Literal"/>\n <operand valueType="t:Decimal" value="24.0" xsi:type="Literal"/>\n </then>\n </caseItem>\n <caseItem>\n <when xsi:type="StartsWith">\n <operand name="value" xsi:type="OperandRef"/>\n <operand valueType="t:String" value="minute" xsi:type="Literal"/>\n </when>\n <then xsi:type="Multiply">\n <operand xsi:type="Divide">\n <operand valueType="t:Decimal" value="1.0" xsi:type="Literal"/>\n <operand valueType="t:Decimal" value="24.0" xsi:type="Literal"/>\n </operand>\n <operand valueType="t:Decimal" value="60.0" xsi:type="Literal"/>\n </then>\n </caseItem>\n <else valueType="t:Decimal" value="1.0" xsi:type="Literal"/>\n </expression>\n <operand name="value">\n <operandTypeSpecifier name="t:String" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n <def name="GetDurationInDays" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="Case">\n <caseItem>\n <when xsi:type="StartsWith">\n <operand path="value" xsi:type="Property">\n <source path="unit" xsi:type="Property">\n <source name="value" xsi:type="OperandRef"/>\n </source>\n </operand>\n <operand valueType="t:String" value="year" xsi:type="Literal"/>\n </when>\n <then xsi:type="Multiply">\n <operand path="value" xsi:type="Property">\n <source path="value" xsi:type="Property">\n <source name="value" xsi:type="OperandRef"/>\n </source>\n </operand>\n <operand valueType="t:Decimal" value="365.0" xsi:type="Literal"/>\n </then>\n </caseItem>\n <caseItem>\n <when xsi:type="StartsWith">\n <operand path="value" xsi:type="Property">\n <source path="unit" xsi:type="Property">\n <source name="value" xsi:type="OperandRef"/>\n </source>\n </operand>\n <operand valueType="t:String" value="month" xsi:type="Literal"/>\n </when>\n <then xsi:type="Multiply">\n <operand path="value" xsi:type="Property">\n <source path="value" xsi:type="Property">\n <source name="value" xsi:type="OperandRef"/>\n </source>\n </operand>\n <operand valueType="t:Decimal" value="30.0" xsi:type="Literal"/>\n </then>\n </caseItem>\n <else path="value" xsi:type="Property">\n <source path="value" xsi:type="Property">\n <source name="value" xsi:type="OperandRef"/>\n </source>\n </else>\n </expression>\n <operand name="value">\n <operandTypeSpecifier name="fhir:Duration" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n <def name="ProbableDaysInRange" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="Query">\n <source alias="orders">\n <expression name="Orders" xsi:type="OperandRef"/>\n </source>\n <let identifier="frequency">\n <expression path="value" xsi:type="Property">\n <source path="frequency" xsi:type="Property">\n <source path="repeat" xsi:type="Property">\n <source path="timing" xsi:type="Property">\n <source xsi:type="Indexer">\n <operand path="dosageInstruction" scope="orders" xsi:type="Property"/>\n <operand valueType="t:Integer" value="0" xsi:type="Literal"/>\n </source>\n </source>\n </source>\n </source>\n </expression>\n </let>\n <let identifier="period">\n <expression path="value" xsi:type="Property">\n <source path="period" xsi:type="Property">\n <source path="repeat" xsi:type="Property">\n <source path="timing" xsi:type="Property">\n <source xsi:type="Indexer">\n <operand path="dosageInstruction" scope="orders" xsi:type="Property"/>\n <operand valueType="t:Integer" value="0" xsi:type="Literal"/>\n </source>\n </source>\n </source>\n </source>\n </expression>\n </let>\n <let identifier="periodDays">\n <expression name="GetPeriodDays" xsi:type="FunctionRef">\n <operand path="value" xsi:type="Property">\n <source path="periodUnit" xsi:type="Property">\n <source path="repeat" xsi:type="Property">\n <source path="timing" xsi:type="Property">\n <source xsi:type="Indexer">\n <operand path="dosageInstruction" scope="orders" xsi:type="Property"/>\n <operand valueType="t:Integer" value="0" xsi:type="Literal"/>\n </source>\n </source>\n </source>\n </source>\n </operand>\n </expression>\n </let>\n <let identifier="dosesPerDay">\n <expression xsi:type="If">\n <condition asType="t:Boolean" xsi:type="As">\n <operand xsi:type="GreaterOrEqual">\n <operand xsi:type="Divide">\n <operand xsi:type="ToDecimal">\n <operand name="frequency" xsi:type="QueryLetRef"/>\n </operand>\n <operand xsi:type="Multiply">\n <operand name="period" xsi:type="QueryLetRef"/>\n <operand name="periodDays" xsi:type="QueryLetRef"/>\n </operand>\n </operand>\n <operand valueType="t:Decimal" value="1.0" xsi:type="Literal"/>\n </operand>\n </condition>\n <then valueType="t:Decimal" value="1.0" xsi:type="Literal"/>\n <else xsi:type="Divide">\n <operand xsi:type="ToDecimal">\n <operand name="frequency" xsi:type="QueryLetRef"/>\n </operand>\n <operand xsi:type="Multiply">\n <operand name="period" xsi:type="QueryLetRef"/>\n <operand name="periodDays" xsi:type="QueryLetRef"/>\n </operand>\n </else>\n </expression>\n </let>\n <let identifier="repeat">\n <expression path="value" xsi:type="Property">\n <source path="numberOfRepeatsAllowed" xsi:type="Property">\n <source path="dispenseRequest" scope="orders" xsi:type="Property"/>\n </source>\n </expression>\n </let>\n <let identifier="supplyDuration">\n <expression name="GetDurationInDays" xsi:type="FunctionRef">\n <operand path="expectedSupplyDuration" xsi:type="Property">\n <source path="dispenseRequest" scope="orders" xsi:type="Property"/>\n </operand>\n </expression>\n </let>\n <let identifier="validityPeriod">\n <expression precision="Day" xsi:type="DurationBetween">\n <operand path="value" xsi:type="Property">\n <source path="start" xsi:type="Property">\n <source path="validityPeriod" xsi:type="Property">\n <source path="dispenseRequest" scope="orders" xsi:type="Property"/>\n </source>\n </source>\n </operand>\n <operand xsi:type="Today"/>\n </expression>\n </let>\n <let identifier="endDifference">\n <expression xsi:type="If">\n <condition asType="t:Boolean" xsi:type="As">\n <operand xsi:type="Less">\n <operand path="value" xsi:type="Property">\n <source path="end" xsi:type="Property">\n <source path="validityPeriod" xsi:type="Property">\n <source path="dispenseRequest" scope="orders" xsi:type="Property"/>\n </source>\n </source>\n </operand>\n <operand xsi:type="Today"/>\n </operand>\n </condition>\n <then precision="Day" xsi:type="DurationBetween">\n <operand path="value" xsi:type="Property">\n <source path="end" xsi:type="Property">\n <source path="validityPeriod" xsi:type="Property">\n <source path="dispenseRequest" scope="orders" xsi:type="Property"/>\n </source>\n </source>\n </operand>\n <operand xsi:type="Today"/>\n </then>\n <else valueType="t:Integer" value="0" xsi:type="Literal"/>\n </expression>\n </let>\n <return>\n <expression xsi:type="GreaterOrEqual">\n <operand xsi:type="Multiply">\n <operand xsi:type="Multiply">\n <operand name="dosesPerDay" xsi:type="QueryLetRef"/>\n <operand xsi:type="Divide">\n <operand xsi:type="Multiply">\n <operand xsi:type="ToDecimal">\n <operand name="repeat" xsi:type="QueryLetRef"/>\n </operand>\n <operand name="supplyDuration" xsi:type="QueryLetRef"/>\n </operand>\n <operand xsi:type="ToDecimal">\n <operand name="validityPeriod" xsi:type="QueryLetRef"/>\n </operand>\n </operand>\n </operand>\n <operand xsi:type="ToDecimal">\n <operand xsi:type="Subtract">\n <operand name="daysPast" xsi:type="OperandRef"/>\n <operand name="endDifference" xsi:type="QueryLetRef"/>\n </operand>\n </operand>\n </operand>\n <operand xsi:type="ToDecimal">\n <operand name="numDaysInDaysPast" xsi:type="OperandRef"/>\n </operand>\n </expression>\n </return>\n </expression>\n <operand name="Orders">\n <operandTypeSpecifier xsi:type="ListTypeSpecifier">\n <elementType name="fhir:MedicationRequest" xsi:type="NamedTypeSpecifier"/>\n </operandTypeSpecifier>\n </operand>\n <operand name="daysPast">\n <operandTypeSpecifier name="t:Integer" xsi:type="NamedTypeSpecifier"/>\n </operand>\n <operand name="numDaysInDaysPast">\n <operandTypeSpecifier name="t:Integer" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n <def name="IsNaloxone" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="InValueSet">\n <code name="rxNormCode" xsi:type="OperandRef"/>\n <valueset name="Naloxone"/>\n </expression>\n <operand name="rxNormCode">\n <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n <def name="IsBenzodiazepine" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="InValueSet">\n <code name="rxNormCode" xsi:type="OperandRef"/>\n <valueset name="Benzodiazepines"/>\n </expression>\n <operand name="rxNormCode">\n <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n <def name="IsOpioidWithAmbulatoryAbusePotential" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="InValueSet">\n <code name="rxNormCode" xsi:type="OperandRef"/>\n <valueset name="Ambulatory Abuse Potential Opioids"/>\n </expression>\n <operand name="rxNormCode">\n <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n <def name="IsLongActingOpioid" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="InValueSet">\n <code name="rxNormCode" xsi:type="OperandRef"/>\n <valueset name="Long Acting Opioids"/>\n </expression>\n <operand name="rxNormCode">\n <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n <def name="IsEndOfLifeOpioid" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="InValueSet">\n <code name="rxNormCode" xsi:type="OperandRef"/>\n <valueset name="End Of Life Opioids"/>\n </expression>\n <operand name="rxNormCode">\n <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n <def name="IsOpioidDrugScreen" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="InValueSet">\n <code name="observationCode" xsi:type="OperandRef"/>\n <valueset name="Opioid Drug Screening"/>\n </expression>\n <operand name="observationCode">\n <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n <def name="IsIllicitDrugScreen" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="InValueSet">\n <code name="observationCode" xsi:type="OperandRef"/>\n <valueset name="Illicit Drug Screening"/>\n </expression>\n <operand name="observationCode">\n <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n <def name="GetIngredient" context="Patient" accessLevel="Public" xsi:type="FunctionDef">\n <expression xsi:type="Query">\n <source alias="$this">\n <expression name="GetIngredients" libraryName="OMTKLogic" xsi:type="FunctionRef">\n <operand name="rxNormCode" xsi:type="OperandRef"/>\n </expression>\n </source>\n <where xsi:type="Not">\n <operand xsi:type="IsNull">\n <operand path="ingredientName" xsi:type="Property">\n <source name="$this" xsi:type="AliasRef"/>\n </operand>\n </operand>\n </where>\n <return>\n <expression path="ingredientName" xsi:type="Property">\n <source name="$this" xsi:type="AliasRef"/>\n </expression>\n </return>\n </expression>\n <operand name="rxNormCode">\n <operandTypeSpecifier name="t:Code" xsi:type="NamedTypeSpecifier"/>\n </operand>\n </def>\n </statements>\n</library>\n</code>\n </pre>\n </div>" }, "identifier": [ { "use": "official", "value": "OpioidCDS_Common" } ], "version": "0.1.0", "title": "Opioid CDS Common Logic", "status": "active", "experimental": false, "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/library-type", "code": "logic-library", "display": "Logic Library" } ] }, "date": "2018-03-25T13:49:09-06:00", "publisher": "Centers for Disease Control and Prevention (CDC)", "description": "Common Opioid Decision Support Logic for use in implementing CDC Opioid Prescribing Guidelines.", "useContext": [ { "code": { "system": "http://terminology.hl7.org/CodeSystem/usage-context-type", "code": "focus", "display": "Clinical Focus" }, "valueCodeableConcept": { "coding": [ { "system": "http://snomed.info/sct", "code": "182888003", "display": "Medication requested (situation)" } ] } }, { "code": { "system": "http://terminology.hl7.org/CodeSystem/usage-context-type", "code": "focus", "display": "Clinical Focus" }, "valueCodeableConcept": { "coding": [ { "system": "http://snomed.info/sct", "code": "82423001", "display": "Chronic pain (finding)" } ] } } ], "jurisdiction": [ { "coding": [ { "system": "urn:iso:std:iso:3166", "code": "US", "display": "United States of America" } ] } ], "purpose": "This library contains common logic across recommendations including MME calculations, conversions, and looking up codes in valuesets.", "usage": "This library is used for decision support for opioid guideline recommendations when applying PlanDefinitions.", "copyright": "© CDC 2016+.", "topic": [ { "text": "Opioid Prescribing" } ], "author": [ { "name": "Kensaku Kawamoto, MD, PhD, MHS" }, { "name": "Bryn Rhodes" }, { "name": "Floyd Eisenberg, MD, MPH" }, { "name": "Robert McClure, MD, MPH" } ], "relatedArtifact": [ { "type": "documentation", "display": "CDC guideline for prescribing opioids for chronic pain", "document": { "url": "https://guidelines.gov/summaries/summary/50153/cdc-guideline-for-prescribing-opioids-for-chronic-pain---united-states-2016#420" } }, { "type": "depends-on", "resource": "http://example.org/fhir/Library/omtk-logic" }, { "type": "documentation", "display": "MME Conversion Tables", "document": { "url": "https://www.cdc.gov/drugoverdose/pdf/calculating_total_daily_dose-a.pdf" } } ], "content": [ { "contentType": "application/elm+xml", "data": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxpZGVudGlmaWVyIGlkPSJPcGlvaWRDRFNfU1RVNF9Db21tb24iIHZlcnNpb249IjAuMS4wIi8+CiAgIDxzY2hlbWFJZGVudGlmaWVyIGlkPSJ1cm46aGw3LW9yZzplbG0iIHZlcnNpb249InIxIi8+CiAgIDx1c2luZ3M+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJTeXN0ZW0iIHVyaT0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIi8+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJGSElSIiB1cmk9Imh0dHA6Ly9obDcub3JnL2ZoaXIiIHZlcnNpb249IjMuMi4wIi8+CiAgIDwvdXNpbmdzPgogICA8aW5jbHVkZXM+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJPTVRLTG9naWMiIHBhdGg9Ik9NVEtMb2dpYyIgdmVyc2lvbj0iMC4xLjAiLz4KICAgPC9pbmNsdWRlcz4KICAgPHZhbHVlU2V0cz4KICAgICAgPGRlZiBuYW1lPSJCZW56b2RpYXplcGluZXMiIGlkPSJiZW56b2RpYXplcGluZXMiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBuYW1lPSJOYWxveG9uZSIgaWQ9Im5hbG94b25lIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbmFtZT0iQW1idWxhdG9yeSBBYnVzZSBQb3RlbnRpYWwgT3Bpb2lkcyIgaWQ9Im9waW9pZHMtYWJ1c2VkLWluLWFtYnVsYXRvcnktY2FyZSIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIG5hbWU9IkVuZCBPZiBMaWZlIE9waW9pZHMiIGlkPSJvcGlvaWRzLWluZGljYXRpbmctZW5kLW9mLWxpZmUiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBuYW1lPSJMb25nIEFjdGluZyBPcGlvaWRzIiBpZD0ibG9uZy1hY3Rpbmctb3Bpb2lkcyIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIG5hbWU9IklsbGljaXQgRHJ1ZyBTY3JlZW5pbmciIGlkPSJpbGxpY2l0LWRydWctdXJpbmUtc2NyZWVuaW5nIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbmFtZT0iT3Bpb2lkIERydWcgU2NyZWVuaW5nIiBpZD0ib3Bpb2lkLXVyaW5lLXNjcmVlbmluZyIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIG5hbWU9Ik9waW9pZHMiIGlkPSJvcGlvaWRzIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbmFtZT0iQ29kZWluZSBDb3VnaCBNZWRzIiBpZD0ib3Bpb2lkcy1jb2RlaW5lLWNvdWdoLW1lZHMiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBuYW1lPSJTaG9ydCBBY3RpbmcgT3Bpb2lkcyIgaWQ9InNob3J0LWFjdGluZy1vcGlvaWRzIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgIDwvdmFsdWVTZXRzPgogICA8c3RhdGVtZW50cz4KICAgICAgPGRlZiBuYW1lPSJJc0ZvckNocm9uaWNQYWluIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJ0cnVlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJIYXNNZXRhc3RhdGljQ2FuY2VyIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGV4cHJlc3Npb24gdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJmYWxzZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iVG9Db2RlIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiBjbGFzc1R5cGU9InQ6Q29kZSIgeHNpOnR5cGU9Ikluc3RhbmNlIj4KICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iY29kZSI+CiAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJjb2RlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImNvZGluZyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ic3lzdGVtIj4KICAgICAgICAgICAgICAgPHZhbHVlIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InN5c3RlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InZlcnNpb24iPgogICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idmVyc2lvbiIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImRpc3BsYXkiPgogICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZGlzcGxheSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iY29kaW5nIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6Q29kaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iVG9RdWFudGl0eSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uRGVmIj4KICAgICAgICAgPGV4cHJlc3Npb24gY2xhc3NUeXBlPSJ0OlF1YW50aXR5IiB4c2k6dHlwZT0iSW5zdGFuY2UiPgogICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ2YWx1ZSI+CiAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJxdWFudGl0eSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idW5pdCI+CiAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ1bml0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9InF1YW50aXR5IiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9InF1YW50aXR5Ij4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6UXVhbnRpdHkiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJQcmVzY3JpcHRpb25zIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJPIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbmFtZT0iT3JkZXJzIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgPGxldCBpZGVudGlmaWVyPSJyeE5vcm1Db2RlIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbmFtZT0iVG9Db2RlIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImNvZGluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJtZWRpY2F0aW9uIiBzY29wZT0iTyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0ibWVkaWNhdGlvbk5hbWUiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJHZXRNZWRpY2F0aW9uTmFtZSIgbGlicmFyeU5hbWU9Ik9NVEtMb2dpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0icnhOb3JtQ29kZSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0iZG9zYWdlSW5zdHJ1Y3Rpb24iPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImRvc2FnZUluc3RydWN0aW9uIiBzY29wZT0iTyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L2xldD4KICAgICAgICAgICAgPGxldCBpZGVudGlmaWVyPSJyZXBlYXQiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBwYXRoPSJyZXBlYXQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idGltaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0iZnJlcXVlbmN5Ij4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkNvYWxlc2NlIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZnJlcXVlbmN5TWF4IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9InJlcGVhdCIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImZyZXF1ZW5jeSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJyZXBlYXQiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvbGV0PgogICAgICAgICAgICA8bGV0IGlkZW50aWZpZXI9InBlcmlvZCI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGNsYXNzVHlwZT0idDpRdWFudGl0eSIgeHNpOnR5cGU9Ikluc3RhbmNlIj4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idmFsdWUiPgogICAgICAgICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0icGVyaW9kIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9InJlcGVhdCIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InVuaXQiPgogICAgICAgICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0icGVyaW9kVW5pdCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJyZXBlYXQiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvbGV0PgogICAgICAgICAgICA8bGV0IGlkZW50aWZpZXI9ImRvc2VEZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJDb2FsZXNjZSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb0xpc3QiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJkb3NlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6UmFuZ2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4geHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvU3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVG9RdWFudGl0eSIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0ibG93IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImRvc2UiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iZG9zYWdlSW5zdHJ1Y3Rpb24iIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Ii0iIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvU3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVG9RdWFudGl0eSIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iaGlnaCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJkb3NlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idW5pdCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJoaWdoIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImRvc2UiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iZG9zYWdlSW5zdHJ1Y3Rpb24iIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsc2UgeHNpOnR5cGU9IlRvU3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVG9RdWFudGl0eSIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlF1YW50aXR5IiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJkb3NlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9lbHNlPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L2xldD4KICAgICAgICAgICAgPGxldCBpZGVudGlmaWVyPSJmcmVxdWVuY3lEZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJDb25jYXRlbmF0ZSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb1N0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImZyZXF1ZW5jeSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJyZXBlYXQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idGltaW5nIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJDb2FsZXNjZSI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJDb25jYXRlbmF0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSItIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9TdHJpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJmcmVxdWVuY3lNYXgiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0icmVwZWF0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InRpbWluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJkb3NhZ2VJbnN0cnVjdGlvbiIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L2xldD4KICAgICAgICAgICAgPHJldHVybj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlR1cGxlIj4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icnhOb3JtQ29kZSI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSBuYW1lPSJyeE5vcm1Db2RlIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJpc0RyYWZ0Ij4KICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InN0YXR1cyIgc2NvcGU9Ik8iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJkcmFmdCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJpc1BSTiI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJhc05lZWRlZCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJkb3NhZ2VJbnN0cnVjdGlvbiIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InByZXNjcmlwdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IklzTnVsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InRleHQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iZG9zYWdlSW5zdHJ1Y3Rpb24iIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4geHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkNvbmNhdGVuYXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0ibWVkaWNhdGlvbk5hbWUiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iICIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ0ZXh0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxzZSB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQ29uY2F0ZW5hdGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJtZWRpY2F0aW9uTmFtZSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSIgIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImRvc2VEZXNjcmlwdGlvbiIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IiBxIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImZyZXF1ZW5jeURlc2NyaXB0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJhc05lZWRlZCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJkb3NhZ2VJbnN0cnVjdGlvbiIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iIFBSTiIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVsc2UgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IiIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Vsc2U+CiAgICAgICAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZG9zZSI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJkb3NlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6UmFuZ2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4gbmFtZT0iVG9RdWFudGl0eSIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iaGlnaCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJkb3NlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9ImRvc2FnZUluc3RydWN0aW9uIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxzZSBuYW1lPSJUb1F1YW50aXR5IiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBhc1R5cGU9ImZoaXI6UXVhbnRpdHkiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImRvc2UiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iZG9zYWdlSW5zdHJ1Y3Rpb24iIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9lbHNlPgogICAgICAgICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImRvc2VzUGVyRGF5Ij4KICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJDb2FsZXNjZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlRvRGFpbHkiIGxpYnJhcnlOYW1lPSJPTVRLTG9naWMiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImZyZXF1ZW5jeSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InBlcmlvZCIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkRlY2ltYWwiIHZhbHVlPSIxLjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJPcmRlcnMiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgPGVsZW1lbnRUeXBlIG5hbWU9ImZoaXI6TWVkaWNhdGlvblJlcXVlc3QiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgPC9vcGVyYW5kVHlwZVNwZWNpZmllcj4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJNTUUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9IlAiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJQcmVzY3JpcHRpb25zIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJwcmVzY3JpcHRpb25zIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8bGV0IGlkZW50aWZpZXI9Im1tZSI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iQ2FsY3VsYXRlTU1FcyIgbGlicmFyeU5hbWU9Ik9NVEtMb2dpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ikxpc3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCB4c2k6dHlwZT0iVHVwbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyeE5vcm1Db2RlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHBhdGg9InJ4Tm9ybUNvZGUiIHNjb3BlPSJQIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJkb3NlUXVhbnRpdHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0iZG9zZSIgc2NvcGU9IlAiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImRvc2VzUGVyRGF5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHBhdGg9ImRvc2VzUGVyRGF5IiBzY29wZT0iUCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L2xldD4KICAgICAgICAgICAgPHJldHVybj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlR1cGxlIj4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icnhOb3JtQ29kZSI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJyeE5vcm1Db2RlIiBzY29wZT0iUCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaXNEcmFmdCI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJpc0RyYWZ0IiBzY29wZT0iUCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaXNQUk4iPgogICAgICAgICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0iaXNQUk4iIHNjb3BlPSJQIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcmVzY3JpcHRpb24iPgogICAgICAgICAgICAgICAgICAgICA8dmFsdWUgcGF0aD0icHJlc2NyaXB0aW9uIiBzY29wZT0iUCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZGFpbHlEb3NlIj4KICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHBhdGg9ImRhaWx5RG9zZURlc2NyaXB0aW9uIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9Im1tZSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iY29udmVyc2lvbkZhY3RvciI+CiAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSBwYXRoPSJjb252ZXJzaW9uRmFjdG9yIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9Im1tZSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibW1lIj4KICAgICAgICAgICAgICAgICAgICAgPHZhbHVlIHBhdGg9Im1tZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJtbWUiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9yZXR1cm4+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0icHJlc2NyaXB0aW9ucyI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0iZmhpcjpNZWRpY2F0aW9uUmVxdWVzdCIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICA8L29wZXJhbmRUeXBlU3BlY2lmaWVyPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IlRvdGFsTU1FIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiBjbGFzc1R5cGU9InQ6UXVhbnRpdHkiIHhzaTp0eXBlPSJJbnN0YW5jZSI+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InZhbHVlIj4KICAgICAgICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJTdW0iPgogICAgICAgICAgICAgICAgICA8c291cmNlIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9Ik0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJNTUUiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InByZXNjcmlwdGlvbnMiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgIDxyZXR1cm4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9Im1tZSIgc2NvcGU9Ik0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgIDwvcmV0dXJuPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ1bml0Ij4KICAgICAgICAgICAgICAgPHZhbHVlIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJtZy9kIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0icHJlc2NyaXB0aW9ucyI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciB4c2k6dHlwZT0iTGlzdFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICAgICA8ZWxlbWVudFR5cGUgbmFtZT0iZmhpcjpNZWRpY2F0aW9uUmVxdWVzdCIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICA8L29wZXJhbmRUeXBlU3BlY2lmaWVyPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldFBlcmlvZERheXMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJDYXNlIj4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB4c2k6dHlwZT0iU3RhcnRzV2l0aCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0ieWVhciIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC93aGVuPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjM2NS4wIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHhzaTp0eXBlPSJTdGFydHNXaXRoIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0idmFsdWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJtb250aCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC93aGVuPgogICAgICAgICAgICAgICA8dGhlbiB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjMwLjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4geHNpOnR5cGU9IlN0YXJ0c1dpdGgiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJ2YWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImhvdXIiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvd2hlbj4KICAgICAgICAgICAgICAgPHRoZW4geHNpOnR5cGU9IkRpdmlkZSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpEZWNpbWFsIiB2YWx1ZT0iMS4wIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjI0LjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtPgogICAgICAgICAgICAgICA8d2hlbiB4c2k6dHlwZT0iU3RhcnRzV2l0aCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0ibWludXRlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8L3doZW4+CiAgICAgICAgICAgICAgIDx0aGVuIHhzaTp0eXBlPSJNdWx0aXBseSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJEaXZpZGUiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjEuMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkRlY2ltYWwiIHZhbHVlPSIyNC4wIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpEZWNpbWFsIiB2YWx1ZT0iNjAuMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8ZWxzZSB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjEuMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJ2YWx1ZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBuYW1lPSJ0OlN0cmluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IkdldER1cmF0aW9uSW5EYXlzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iQ2FzZSI+CiAgICAgICAgICAgIDxjYXNlSXRlbT4KICAgICAgICAgICAgICAgPHdoZW4geHNpOnR5cGU9IlN0YXJ0c1dpdGgiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ1bml0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9InZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0ieWVhciIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC93aGVuPgogICAgICAgICAgICAgICA8dGhlbiB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJ2YWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkRlY2ltYWwiIHZhbHVlPSIzNjUuMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0+CiAgICAgICAgICAgICAgIDx3aGVuIHhzaTp0eXBlPSJTdGFydHNXaXRoIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idW5pdCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJ2YWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Im1vbnRoIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8L3doZW4+CiAgICAgICAgICAgICAgIDx0aGVuIHhzaTp0eXBlPSJNdWx0aXBseSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9InZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6RGVjaW1hbCIgdmFsdWU9IjMwLjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGVsc2UgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0idmFsdWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8L2Vsc2U+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0idmFsdWUiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbmFtZT0iZmhpcjpEdXJhdGlvbiIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IlByb2JhYmxlRGF5c0luUmFuZ2UiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9Im9yZGVycyI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIG5hbWU9Ik9yZGVycyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0iZnJlcXVlbmN5Ij4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZnJlcXVlbmN5IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InJlcGVhdCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ0aW1pbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJkb3NhZ2VJbnN0cnVjdGlvbiIgc2NvcGU9Im9yZGVycyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0icGVyaW9kIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0icGVyaW9kIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InJlcGVhdCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ0aW1pbmciIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgeHNpOnR5cGU9IkluZGV4ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJkb3NhZ2VJbnN0cnVjdGlvbiIgc2NvcGU9Im9yZGVycyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0icGVyaW9kRGF5cyI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIG5hbWU9IkdldFBlcmlvZERheXMiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InBlcmlvZFVuaXQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0icmVwZWF0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InRpbWluZyIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSB4c2k6dHlwZT0iSW5kZXhlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImRvc2FnZUluc3RydWN0aW9uIiBzY29wZT0ib3JkZXJzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvbGV0PgogICAgICAgICAgICA8bGV0IGlkZW50aWZpZXI9ImRvc2VzUGVyRGF5Ij4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkdyZWF0ZXJPckVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkRpdmlkZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb0RlY2ltYWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJmcmVxdWVuY3kiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJNdWx0aXBseSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InBlcmlvZCIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InBlcmlvZERheXMiIHhzaTp0eXBlPSJRdWVyeUxldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkRlY2ltYWwiIHZhbHVlPSIxLjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgICAgICAgICAgIDx0aGVuIHZhbHVlVHlwZT0idDpEZWNpbWFsIiB2YWx1ZT0iMS4wIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8ZWxzZSB4c2k6dHlwZT0iRGl2aWRlIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImZyZXF1ZW5jeSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ik11bHRpcGx5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0icGVyaW9kIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0icGVyaW9kRGF5cyIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9lbHNlPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvbGV0PgogICAgICAgICAgICA8bGV0IGlkZW50aWZpZXI9InJlcGVhdCI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9Im51bWJlck9mUmVwZWF0c0FsbG93ZWQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZGlzcGVuc2VSZXF1ZXN0IiBzY29wZT0ib3JkZXJzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0ic3VwcGx5RHVyYXRpb24iPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBuYW1lPSJHZXREdXJhdGlvbkluRGF5cyIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iZXhwZWN0ZWRTdXBwbHlEdXJhdGlvbiIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJkaXNwZW5zZVJlcXVlc3QiIHNjb3BlPSJvcmRlcnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9sZXQ+CiAgICAgICAgICAgIDxsZXQgaWRlbnRpZmllcj0idmFsaWRpdHlQZXJpb2QiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IkR1cmF0aW9uQmV0d2VlbiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InN0YXJ0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InZhbGlkaXR5UGVyaW9kIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImRpc3BlbnNlUmVxdWVzdCIgc2NvcGU9Im9yZGVycyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICA8L2xldD4KICAgICAgICAgICAgPGxldCBpZGVudGlmaWVyPSJlbmREaWZmZXJlbmNlIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ikxlc3MiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJlbmQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0idmFsaWRpdHlQZXJpb2QiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZGlzcGVuc2VSZXF1ZXN0IiBzY29wZT0ib3JkZXJzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICAgICA8dGhlbiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IkR1cmF0aW9uQmV0d2VlbiI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImVuZCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ2YWxpZGl0eVBlcmlvZCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJkaXNwZW5zZVJlcXVlc3QiIHNjb3BlPSJvcmRlcnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgPGVsc2UgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvbGV0PgogICAgICAgICAgICA8cmV0dXJuPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iR3JlYXRlck9yRXF1YWwiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJkb3Nlc1BlckRheSIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJEaXZpZGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTXVsdGlwbHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9EZWNpbWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0icmVwZWF0IiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJzdXBwbHlEdXJhdGlvbiIgeHNpOnR5cGU9IlF1ZXJ5TGV0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9InZhbGlkaXR5UGVyaW9kIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImRheXNQYXN0IiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJlbmREaWZmZXJlbmNlIiB4c2k6dHlwZT0iUXVlcnlMZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9Im51bURheXNJbkRheXNQYXN0IiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9yZXR1cm4+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iT3JkZXJzIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSBuYW1lPSJmaGlyOk1lZGljYXRpb25SZXF1ZXN0IiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZFR5cGVTcGVjaWZpZXI+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iZGF5c1Bhc3QiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbmFtZT0idDpJbnRlZ2VyIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0ibnVtRGF5c0luRGF5c1Bhc3QiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbmFtZT0idDpJbnRlZ2VyIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iSXNOYWxveG9uZSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uRGVmIj4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkluVmFsdWVTZXQiPgogICAgICAgICAgICA8Y29kZSBuYW1lPSJyeE5vcm1Db2RlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8dmFsdWVzZXQgbmFtZT0iTmFsb3hvbmUiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJyeE5vcm1Db2RlIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIG5hbWU9InQ6Q29kZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IklzQmVuem9kaWF6ZXBpbmUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJJblZhbHVlU2V0Ij4KICAgICAgICAgICAgPGNvZGUgbmFtZT0icnhOb3JtQ29kZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPHZhbHVlc2V0IG5hbWU9IkJlbnpvZGlhemVwaW5lcyIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9InJ4Tm9ybUNvZGUiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbmFtZT0idDpDb2RlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iSXNPcGlvaWRXaXRoQW1idWxhdG9yeUFidXNlUG90ZW50aWFsIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iSW5WYWx1ZVNldCI+CiAgICAgICAgICAgIDxjb2RlIG5hbWU9InJ4Tm9ybUNvZGUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDx2YWx1ZXNldCBuYW1lPSJBbWJ1bGF0b3J5IEFidXNlIFBvdGVudGlhbCBPcGlvaWRzIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0icnhOb3JtQ29kZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBuYW1lPSJ0OkNvZGUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJJc0xvbmdBY3RpbmdPcGlvaWQiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJJblZhbHVlU2V0Ij4KICAgICAgICAgICAgPGNvZGUgbmFtZT0icnhOb3JtQ29kZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPHZhbHVlc2V0IG5hbWU9IkxvbmcgQWN0aW5nIE9waW9pZHMiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJyeE5vcm1Db2RlIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIG5hbWU9InQ6Q29kZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IklzRW5kT2ZMaWZlT3Bpb2lkIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iSW5WYWx1ZVNldCI+CiAgICAgICAgICAgIDxjb2RlIG5hbWU9InJ4Tm9ybUNvZGUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDx2YWx1ZXNldCBuYW1lPSJFbmQgT2YgTGlmZSBPcGlvaWRzIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0icnhOb3JtQ29kZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBuYW1lPSJ0OkNvZGUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJJc09waW9pZERydWdTY3JlZW4iIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJJblZhbHVlU2V0Ij4KICAgICAgICAgICAgPGNvZGUgbmFtZT0ib2JzZXJ2YXRpb25Db2RlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8dmFsdWVzZXQgbmFtZT0iT3Bpb2lkIERydWcgU2NyZWVuaW5nIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0ib2JzZXJ2YXRpb25Db2RlIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIG5hbWU9InQ6Q29kZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIG5hbWU9IklzSWxsaWNpdERydWdTY3JlZW4iIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJJblZhbHVlU2V0Ij4KICAgICAgICAgICAgPGNvZGUgbmFtZT0ib2JzZXJ2YXRpb25Db2RlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8dmFsdWVzZXQgbmFtZT0iSWxsaWNpdCBEcnVnIFNjcmVlbmluZyIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9Im9ic2VydmF0aW9uQ29kZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBuYW1lPSJ0OkNvZGUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJHZXRJbmdyZWRpZW50IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGFsaWFzPSIkdGhpcyI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIG5hbWU9IkdldEluZ3JlZGllbnRzIiBsaWJyYXJ5TmFtZT0iT01US0xvZ2ljIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJyeE5vcm1Db2RlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8d2hlcmUgeHNpOnR5cGU9Ik5vdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJc051bGwiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJpbmdyZWRpZW50TmFtZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSIkdGhpcyIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8cmV0dXJuPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBwYXRoPSJpbmdyZWRpZW50TmFtZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSIkdGhpcyIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9yZXR1cm4+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0icnhOb3JtQ29kZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBuYW1lPSJ0OkNvZGUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgPC9zdGF0ZW1lbnRzPgo8L2xpYnJhcnk+Cg==" } ] }
Usage note: every effort has been made to ensure that the examples are correct and useful, but they are not a normative part of the specification.