compiledTemplates/SecretManagement.Extension-1.0.0.0.xml

<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>PSModuleDevelopment.Template.Template</T>
      <T>System.Object</T>
    </TN>
    <ToString>PSModuleDevelopment.Template.Template</ToString>
    <Props>
      <S N="Name">SecretManagement.Extension</S>
      <Obj N="Type" RefId="1">
        <TN RefId="1">
          <T>PSModuleDevelopment.Template.TemplateType</T>
          <T>System.Enum</T>
          <T>System.ValueType</T>
          <T>System.Object</T>
        </TN>
        <ToString>Project</ToString>
        <I32>1</I32>
      </Obj>
      <Version N="Version">1.0.0.0</Version>
      <S N="Description">Extension module for Secret Management.</S>
      <S N="Author">Sascha Spiekermann</S>
      <DT N="CreatedOn">2023-03-01T00:00:00+00:00</DT>
      <Obj N="Tags" RefId="2">
        <TN RefId="2">
          <T>System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]</T>
          <T>System.Object</T>
        </TN>
        <LST>
          <S>module</S>
          <S>psframework</S>
        </LST>
      </Obj>
      <Obj N="Parameters" RefId="3">
        <TNRef RefId="2" />
        <LST>
          <S>name</S>
          <S>functionPrefix</S>
          <S>author</S>
          <S>company</S>
          <S>description</S>
        </LST>
      </Obj>
      <Obj N="Scripts" RefId="4">
        <TN RefId="3">
          <T>System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[PSModuleDevelopment.Template.ParameterScript, PSModuleDevelopment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null]]</T>
          <T>System.Object</T>
        </TN>
        <DCT>
          <En>
            <S N="Key">year</S>
            <Obj N="Value" RefId="5">
              <TN RefId="4">
                <T>PSModuleDevelopment.Template.ParameterScript</T>
                <T>System.Object</T>
              </TN>
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy"_x000D__x000A__x0009__x0009_</S>
                <S N="Name">year</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy"_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEeWVhcgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAIA0KCQkJR2V0LURhdGUgLUZvcm1hdCAieXl5eSINCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">guidRootModule</S>
            <Obj N="Value" RefId="6">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000D__x000A__x0009__x0009_</S>
                <S N="Name">guidRootModule</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAOZ3VpZFJvb3RNb2R1bGUJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAACwNCgkJCVtTeXN0ZW0uR3VpZF06Ok5ld0d1aWQoKS5Ub1N0cmluZygpDQoJCQs=</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">psfversion</S>
            <Obj N="Value" RefId="7">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000D__x000A__x0009__x0009_</S>
                <S N="Name">psfversion</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAKcHNmdmVyc2lvbgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAANA0KCQkJKEdldC1Nb2R1bGUgUFNGcmFtZXdvcmspLlZlcnNpb24uVG9TdHJpbmcoKQ0KCQkL</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">guidExtension</S>
            <Obj N="Value" RefId="8">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000D__x000A__x0009__x0009_</S>
                <S N="Name">guidExtension</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAANZ3VpZEV4dGVuc2lvbgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAALA0KCQkJW1N5c3RlbS5HdWlkXTo6TmV3R3VpZCgpLlRvU3RyaW5nKCkNCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">guid</S>
            <Obj N="Value" RefId="9">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000D__x000A__x0009__x0009_</S>
                <S N="Name">guid</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_[System.Guid]::NewGuid().ToString()_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEZ3VpZAkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAALA0KCQkJW1N5c3RlbS5HdWlkXTo6TmV3R3VpZCgpLlRvU3RyaW5nKCkNCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">dynamicscript_394432</S>
            <Obj N="Value" RefId="10">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009_ Get-Date -Format 'yyyy-MM-dd'_x000D__x000A__x0009__x0009_</S>
                <S N="Name">dynamicscript_394432</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009_ Get-Date -Format 'yyyy-MM-dd'_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAUZHluYW1pY3NjcmlwdF8zOTQ0MzIJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAACYNCgkJIEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQnDQoJCQs=</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">psframework</S>
            <Obj N="Value" RefId="11">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000D__x000A__x0009__x0009_</S>
                <S N="Name">psframework</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_(Get-Module PSFramework).Version.ToString()_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAALcHNmcmFtZXdvcmsJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAADQNCgkJCShHZXQtTW9kdWxlIFBTRnJhbWV3b3JrKS5WZXJzaW9uLlRvU3RyaW5nKCkNCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">date</S>
            <Obj N="Value" RefId="12">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy-MM-dd"_x000D__x000A__x0009__x0009_</S>
                <S N="Name">date</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_Get-Date -Format "yyyy-MM-dd"_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAEZGF0ZQkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAAJg0KCQkJR2V0LURhdGUgLUZvcm1hdCAieXl5eS1NTS1kZCINCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">pesterconfig</S>
            <Obj N="Value" RefId="13">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x000D__x000A__x0009__x0009_</S>
                <S N="Name">pesterconfig</S>
                <SBK N="ScriptBlock">_x000D__x000A__x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAMcGVzdGVyY29uZmlnCQUAAAAFBQAAADtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgEAAAAKU2NyaXB0VGV4dAEDAAAABgYAAAAGDQoNCgkJCw==</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">dynamicscript_844112</S>
            <Obj N="Value" RefId="14">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009_ Get-Date -Format 'yyyy-MM-dd'_x000D__x000A__x0009__x0009_</S>
                <S N="Name">dynamicscript_844112</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009_ Get-Date -Format 'yyyy-MM-dd'_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAUZHluYW1pY3NjcmlwdF84NDQxMTIJBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAACYNCgkJIEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQnDQoJCQs=</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">secretManagementVersion</S>
            <Obj N="Value" RefId="15">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x0009__x0009__x0009_(Get-Module Microsoft.Powershell.SecretManagement).Version.ToString()_x000D__x000A__x0009__x0009_</S>
                <S N="Name">secretManagementVersion</S>
                <SBK N="ScriptBlock">_x000D__x000A__x0009__x0009__x0009_(Get-Module Microsoft.Powershell.SecretManagement).Version.ToString()_x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAXc2VjcmV0TWFuYWdlbWVudFZlcnNpb24JBQAAAAUFAAAAO1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uU2NyaXB0QmxvY2tTZXJpYWxpemF0aW9uSGVscGVyAQAAAApTY3JpcHRUZXh0AQMAAAAGBgAAAE4NCgkJCShHZXQtTW9kdWxlIE1pY3Jvc29mdC5Qb3dlcnNoZWxsLlNlY3JldE1hbmFnZW1lbnQpLlZlcnNpb24uVG9TdHJpbmcoKQ0KCQkL</BA>
              </MS>
            </Obj>
          </En>
          <En>
            <S N="Key">testfolder</S>
            <Obj N="Value" RefId="16">
              <TNRef RefId="4" />
              <ToString>PSModuleDevelopment.Template.ParameterScript</ToString>
              <Props>
                <S N="StringScript">_x000D__x000A__x000D__x000A__x0009__x0009_</S>
                <S N="Name">testfolder</S>
                <SBK N="ScriptBlock">_x000D__x000A__x000D__x000A__x0009__x0009_</SBK>
              </Props>
              <MS>
                <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAsUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQCAAAABE5hbWULU2NyaXB0QmxvY2sBBDtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlNjcmlwdEJsb2NrU2VyaWFsaXphdGlvbkhlbHBlcgMAAAACAAAABgQAAAAKdGVzdGZvbGRlcgkFAAAABQUAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBAwAAAAYGAAAABg0KDQoJCQs=</BA>
              </MS>
            </Obj>
          </En>
        </DCT>
      </Obj>
      <Obj N="Parameters2" RefId="17">
        <TN RefId="5">
          <T>System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[PSModuleDevelopment.Template.Parameter.ParameterBase, PSModuleDevelopment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null]]</T>
          <T>System.Object</T>
        </TN>
        <DCT />
      </Obj>
      <Obj N="Children" RefId="18">
        <TN RefId="6">
          <T>System.Collections.Generic.List`1[[PSModuleDevelopment.Template.TemplateItemBase, PSModuleDevelopment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null]]</T>
          <T>System.Object</T>
        </TN>
        <LST>
          <Obj RefId="19">
            <TN RefId="7">
              <T>PSModuleDevelopment.Template.TemplateItemFolder</T>
              <T>PSModuleDevelopment.Template.TemplateItemBase</T>
              <T>System.Object</T>
            </TN>
            <ToString>PSModuleDevelopment.Template.TemplateItemFolder</ToString>
            <Props>
              <Obj N="Children" RefId="20">
                <TNRef RefId="6" />
                <LST>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFolder</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                  <S>PSModuleDevelopment.Template.TemplateItemFile</S>
                </LST>
              </Obj>
              <S N="Name">SecretManagement.þnameþ</S>
              <S N="RelativePath">SecretManagement.þnameþ</S>
              <S N="Identifier">þ</S>
              <Obj N="FileSystemParameterFlat" RefId="21">
                <TNRef RefId="2" />
                <LST>
                  <S>name</S>
                </LST>
              </Obj>
              <Obj N="FileSystemParameterScript" RefId="22">
                <TNRef RefId="2" />
                <LST />
              </Obj>
            </Props>
            <MS>
              <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJAwAAAAYEAAAAGVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74GBQAAABlTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+BgYAAAACw74JBwAAAAkIAAAABAMAAACeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24EAAAvUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlW10CAAAACAgJCQAAAAcAAAAHAAAABAcAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgJCgAAAAEAAAABAAAAAQgAAAAHAAAACQsAAAAAAAAAAAAAAAcJAAAAAAEAAAAIAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACQwAAAAJDQAAAAkOAAAACQ8AAAAJEAAAAAkRAAAACRIAAAAKEQoAAAAEAAAABhMAAAAEbmFtZQ0DEQsAAAAAAAAAAQwAAAABAAAACRQAAAAGFQAAAAcuZ2l0aHViBhYAAAAhU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlwuZ2l0aHViCQYAAAAJGAAAAAkZAAAAAQ0AAAABAAAACRoAAAAGGwAAAAVidWlsZAYcAAAAH1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cYnVpbGQJBgAAAAkeAAAACR8AAAABDgAAAAEAAAAJIAAAAAYhAAAAGVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74GIgAAADNTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74JBgAAAAkkAAAACSUAAAAFDwAAAC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUZpbGUJAAAABVZhbHVlCVBsYWluVGV4dBRDb250ZW50UGFyYW1ldGVyRmxhdBZDb250ZW50UGFyYW1ldGVyU2NyaXB0BE5hbWUMUmVsYXRpdmVQYXRoCklkZW50aWZpZXIXRmlsZVN5c3RlbVBhcmFtZXRlckZsYXQZRmlsZVN5c3RlbVBhcmFtZXRlclNjcmlwdAEAAwMBAQEDAwF/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAGJgAAAEIjIEF1dG8gZGV0ZWN0IHRleHQgZmlsZXMgYW5kIHBlcmZvcm0gTEYgbm9ybWFsaXphdGlvbg0KKiB0ZXh0PWF1dG8BCScAAAAJKAAAAAYpAAAADi5naXRhdHRyaWJ1dGVzBioAAAAoU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlwuZ2l0YXR0cmlidXRlcwkGAAAACSwAAAAJLQAAAAEQAAAADwAAAAYuAAAA0gMNCiMgaWdub3JlIHRoZSBzZXR0aW5ncyBmb2xkZXIgYW5kIGZpbGVzIGZvciBWU0NvZGUgYW5kIFBTUw0KLnZzY29kZS8qDQoqLnBzcHJvag0KKlRlbXBQb2ludCoNCg0KIyBJZ25vcmUgc3RhZ2luZyBpbmZvIGZyb20gVmlzdWFsIFN0dWRpbw0KbGlicmFyeS/Dvm5hbWXDvi8udnMvKg0KbGlicmFyeS/Dvm5hbWXDvi/Dvm5hbWXDvi9iaW4vKg0KbGlicmFyeS/Dvm5hbWXDvi/Dvm5hbWXDvi9vYmovKg0KDQojIGlnbm9yZSBQb3dlclNoZWxsIFN0dWRpbyBNZXRhRGF0YQ0Kw75uYW1lw74vw75uYW1lw74ucHNwcm9qDQrDvm5hbWXDvi/Dvm5hbWXDvi5wc3Byb2ouYmFrDQrDvm5hbWXDvi/Dvm5hbWXDvi5wc3Byb2pzDQrDvm5hbWXDvi/Dvm5hbWXDvi5wc3Byb2oNCg0KIyBpZ25vcmUgdGhlIFRlc3RSZXN1bHRzDQpUZXN0UmVzdWx0cy8qDQoNCiMgaWdub3JlIHRoZSBwdWJsaXNoaW5nIERpcmVjdG9yeQ0KcHVibGlzaC8qAQkvAAAACTAAAAAGMQAAAAouZ2l0aWdub3JlBjIAAAAkU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlwuZ2l0aWdub3JlCQYAAAAJNAAAAAk1AAAAAREAAAAPAAAABjYAAADECE1JVCBMaWNlbnNlDQoNCkNvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+DQoNClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkNCm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsDQppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzDQp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQpjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQoNClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbA0KY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCg0KVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFDQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLA0KT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUNClNPRlRXQVJFLgEJNwAAAAk4AAAABjkAAAAHTElDRU5TRQY6AAAAIVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cTElDRU5TRQkGAAAACTwAAAAJPQAAAAESAAAADwAAAAY+AAAAggojIERlc2NyaXB0aW9uDQoNCkluc2VydCBhIHVzZWZ1bCBkZXNjcmlwdGlvbiBmb3IgdGhlIMO+bmFtZcO+IHByb2plY3QgaGVyZS4NCg0KUmVtZW1iZXIsIGl0J3MgdGhlIGZpcnN0IHRoaW5nIGEgdmlzaXRvciB3aWxsIHNlZS4NCg0KIyBQcm9qZWN0IFNldHVwIEluc3RydWN0aW9ucw0KIyMgV29ya2luZyB3aXRoIHRoZSBsYXlvdXQNCg0KLSBEb24ndCB0b3VjaCB0aGUgcHNtMSBmaWxlDQotIFBsYWNlIGZ1bmN0aW9ucyB5b3UgZXhwb3J0IGluIGBmdW5jdGlvbnMvYCAoY2FuIGhhdmUgc3ViZm9sZGVycykNCi0gUGxhY2UgcHJpdmF0ZS9pbnRlcm5hbCBmdW5jdGlvbnMgaW52aXNpYmxlIHRvIHRoZSB1c2VyIGluIGBpbnRlcm5hbC9mdW5jdGlvbnNgIChjYW4gaGF2ZSBzdWJmb2xkZXJzKQ0KLSBEb24ndCBhZGQgY29kZSBkaXJlY3RseSB0byB0aGUgYHBvc3RpbXBvcnQucHMxYCBvciBgcHJlaW1wb3J0LnBzMWAuDQogIFRob3NlIGZpbGVzIGFyZSBkZXNpZ25lZCB0byBpbXBvcnQgb3RoZXIgZmlsZXMgb25seS4NCi0gV2hlbiBhZGRpbmcgZmlsZXMgJiBmb2xkZXJzLCBtYWtlIHN1cmUgdGhleSBhcmUgY292ZXJlZCBieSBlaXRoZXIgYHBvc3RpbXBvcnQucHMxYCBvciBgcHJlaW1wb3J0LnBzMWAuDQogIFRoaXMgYWRkcyB0aGVtIHRvIGJvdGggdGhlIGltcG9ydCBhbmQgdGhlIGJ1aWxkIHNlcXVlbmNlLg0KDQojIyBTZXR0aW5nIHVwIENJL0NEDQoNCj4gVG8gY3JlYXRlIGEgUFIgdmFsaWRhdGlvbiBwaXBlbGluZSwgc2V0IHVwIHRhc2tzIGxpa2UgdGhpczoNCg0KLSBJbnN0YWxsIFByZXJlcXVpc2l0ZXMgKFBvd2VyU2hlbGwgVGFzazsgVlNUUy1QcmVyZXF1aXNpdGVzLnBzMSkNCi0gVmFsaWRhdGUgKFBvd2VyU2hlbGwgVGFzazsgVlNUUy1WYWxpZGF0ZS5wczEpDQotIFB1Ymxpc2ggVGVzdCBSZXN1bHRzIChQdWJsaXNoIFRlc3QgUmVzdWx0czsgTlVuaXQgZm9ybWF0OyBSdW4gbm8gbWF0dGVyIHdoYXQpDQoNCj4gVG8gY3JlYXRlIGEgYnVpbGQvcHVibGlzaCBwaXBlbGluZSwgc2V0IHVwIHRhc2tzIGxpa2UgdGhpczoNCg0KLSBJbnN0YWxsIFByZXJlcXVpc2l0ZXMgKFBvd2VyU2hlbGwgVGFzazsgVlNUUy1QcmVyZXF1aXNpdGVzLnBzMSkNCi0gVmFsaWRhdGUgKFBvd2VyU2hlbGwgVGFzazsgVlNUUy1WYWxpZGF0ZS5wczEpDQotIEJ1aWxkIChQb3dlclNoZWxsIFRhc2s7IFZTVFMtQnVpbGQucHMxKQ0KLSBQdWJsaXNoIFRlc3QgUmVzdWx0cyAoUHVibGlzaCBUZXN0IFJlc3VsdHM7IE5Vbml0IGZvcm1hdDsgUnVuIG5vIG1hdHRlciB3aGF0KQ0KAQk/AAAACUAAAAAGQQAAAAlSRUFETUUubWQGQgAAACNTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFJFQURNRS5tZAkGAAAACUQAAAAJRQAAAAEUAAAAAwAAAAlGAAAAAgAAAAIAAAABGAAAAAcAAAAJCwAAAAAAAAAAAAAAARkAAAAHAAAACQsAAAAAAAAAAAAAAAEaAAAAAwAAAAlIAAAABgAAAAYAAAABHgAAAAcAAAAJCwAAAAAAAAAAAAAAAR8AAAAHAAAACQsAAAAAAAAAAAAAAAEgAAAAAwAAAAlKAAAACwAAAAsAAAABJAAAAAcAAAAJSwAAAAEAAAABAAAAASUAAAAHAAAACQsAAAAAAAAAAAAAAAEnAAAABwAAAAkLAAAAAAAAAAAAAAABKAAAAAcAAAAJCwAAAAAAAAAAAAAAASwAAAAHAAAACQsAAAAAAAAAAAAAAAEtAAAABwAAAAkLAAAAAAAAAAAAAAABLwAAAAcAAAAJTQAAAAEAAAABAAAAATAAAAAHAAAACQsAAAAAAAAAAAAAAAE0AAAABwAAAAkLAAAAAAAAAAAAAAABNQAAAAcAAAAJCwAAAAAAAAAAAAAAATcAAAAHAAAACU8AAAABAAAAAQAAAAE4AAAABwAAAAlQAAAAAQAAAAEAAAABPAAAAAcAAAAJCwAAAAAAAAAAAAAAAT0AAAAHAAAACQsAAAAAAAAAAAAAAAE/AAAABwAAAAlSAAAAAQAAAAEAAAABQAAAAAcAAAAJCwAAAAAAAAAAAAAAAUQAAAAHAAAACQsAAAAAAAAAAAAAAAFFAAAABwAAAAkLAAAAAAAAAAAAAAAHRgAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAlUAAAACVUAAAANAgdIAAAAAAEAAAAIAAAABC1QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UCAAAACVYAAAAJVwAAAAlYAAAACVkAAAAJWgAAAAlbAAAADQIHSgAAAAABAAAAEAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAlcAAAACV0AAAAJXgAAAAlfAAAACWAAAAAJYQAAAAliAAAACWMAAAAJZAAAAAllAAAACWYAAAANBRFLAAAABAAAAAZnAAAABG5hbWUNAxFNAAAABAAAAAZoAAAABG5hbWUNAxFPAAAABAAAAAZpAAAABmF1dGhvcg0DEVAAAAAEAAAABmoAAAAEeWVhcg0DEVIAAAAEAAAABmsAAAAEbmFtZQ0DAVQAAAABAAAACWwAAAAGbQAAAAl3b3JrZmxvd3MGbgAAACtTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XC5naXRodWJcd29ya2Zsb3dzCQYAAAAJcAAAAAlxAAAAAVUAAAAPAAAABnIAAADTBSMgVGhlc2UgYXJlIHN1cHBvcnRlZCBmdW5kaW5nIG1vZGVsIHBsYXRmb3Jtcw0KDQpnaXRodWI6ICMgUmVwbGFjZSB3aXRoIHVwIHRvIDQgR2l0SHViIFNwb25zb3JzLWVuYWJsZWQgdXNlcm5hbWVzIGUuZy4sIFt1c2VyMSwgdXNlcjJdDQpwYXRyZW9uOiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBQYXRyZW9uIHVzZXJuYW1lDQpvcGVuX2NvbGxlY3RpdmU6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIE9wZW4gQ29sbGVjdGl2ZSB1c2VybmFtZQ0Ka29fZmk6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIEtvLWZpIHVzZXJuYW1lDQp0aWRlbGlmdDogIyBSZXBsYWNlIHdpdGggYSBzaW5nbGUgVGlkZWxpZnQgcGxhdGZvcm0tbmFtZS9wYWNrYWdlLW5hbWUgZS5nLiwgbnBtL2JhYmVsDQpjb21tdW5pdHlfYnJpZGdlOiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBDb21tdW5pdHkgQnJpZGdlIHByb2plY3QtbmFtZSBlLmcuLCBjbG91ZC1mb3VuZHJ5DQpsaWJlcmFwYXk6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIExpYmVyYXBheSB1c2VybmFtZQ0KaXNzdWVodW50OiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBJc3N1ZUh1bnQgdXNlcm5hbWUNCm90ZWNoaWU6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIE90ZWNoaWUgdXNlcm5hbWUNCmN1c3RvbTogIyBSZXBsYWNlIHdpdGggdXAgdG8gNCBjdXN0b20gc3BvbnNvcnNoaXAgVVJMcyBlLmcuLCBbJ2xpbmsxJywgJ2xpbmsyJ10NCgEJcwAAAAl0AAAABnUAAAALRlVORElORy55bWwGdgAAAC1TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XC5naXRodWJcRlVORElORy55bWwJBgAAAAl4AAAACXkAAAABVgAAAA8AAAAGegAAAKgHIyBTZXR0aW5nIHVwIHRoZSByZWxlYXNlIHBpcGVsaW5lOg0KDQojIyBQcmVsaW1pbmFyeQ0KDQpTZXR0aW5nIHVwIGEgcmVsZWFzZSBwaXBlbGluZSwgc2V0IHRoZSB0cmlnZ2VyIHRvIGRvIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gYWdhaW5zdCB0aGUgbWFzdGVyIGJyYW5jaCBvbmx5Lg0KSW4gU3RhZ2UgMSBzZXQgdXAgYSB0YXNrc2VxdWVuY2U6DQoNCiMjIDEpIFBvd2VyU2hlbGwgVGFzazogUHJlcmVxdWlzaXRlcw0KDQpIYXZlIGl0IGV4ZWN1dGUgYHZzdHMtcHJlcmVxdWlzaXRlcy5wczFgDQoNCiMjIDIpIFBvd2VyU2hlbGwgVGFzazogVmFsaWRhdGUNCg0KSGF2ZSBpdCBleGVjdXRlIGB2c3RzLXByZXJlcXVpc2l0ZXMucHMxYA0KDQojIyAzKSBQb3dlclNoZWxsIFRhc2s6IEJ1aWxkDQoNCkhhdmUgaXQgZXhlY3V0ZSBgdnN0cy1idWlsZC5wczFgLg0KVGhlIHRhc2sgcmVxdWlyZXMgdHdvIHBhcmFtZXRlcnM6DQoNCiAtIGAtTG9jYWxSZXBvYA0KIC0gYC1Xb3JraW5nRGlyZWN0b3J5ICQoU3lzdGVtLkRlZmF1bHRXb3JraW5nRGlyZWN0b3J5KS9f77+9bmFtZe+/vWANCg0KIyMgNCkgUHVibGlzaCBUZXN0IFJlc3VsdHMNCg0KQ29uZmlndXJlIHRhc2sgdG8gcGljayB1cCBudW5pdCB0eXBlIG9mIHRlc3RzIChyYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBqdW5pdCkuDQpDb25maWd1cmUgdGFzayB0byBleGVjdXRlLCBldmVuIGlmIHByZXZpb3VzIHN0ZXBzIGZhaWxlZCBvciB0aGUgdGFzayBzZXF1ZW5jZSB3YXMgY2FuY2VsbGVkLg0KDQojIyA1KSBQb3dlclNoZWxsIFRhc2s6IFBhY2thZ2UgRnVuY3Rpb24NCg0KSGF2ZSBpdCBleGVjdXRlIGB2c3RzLXBhY2thZ2VGdW5jdGlvbi5wczFgDQoNCiMjIDYpIEF6dXJlIEZ1bmN0aW9uIEFwcERlcGxveQ0KDQpDb25maWd1cmUgdG8gcHVibGlzaCB0byB0aGUgY29ycmVjdCBmdW5jdGlvbiBhcHAuAQl7AAAACXwAAAAGfQAAABdBenVyZUZ1bmN0aW9uLnJlYWRtZS5tZAZ+AAAAN1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cYnVpbGRcQXp1cmVGdW5jdGlvbi5yZWFkbWUubWQJBgAAAAmAAAAACYEAAAABVwAAAA8AAAAGggAAALAlPCMNClRoaXMgc2NyaXB0IHB1Ymxpc2hlcyB0aGUgbW9kdWxlIHRvIHRoZSBnYWxsZXJ5Lg0KSXQgZXhwZWN0cyBhcyBpbnB1dCBhbiBBcGlLZXkgYXV0aG9yaXplZCB0byBwdWJsaXNoIHRoZSBtb2R1bGUuDQoNCkluc2VydCBhbnkgYnVpbGQgc3RlcHMgeW91IG1heSBuZWVkIHRvIHRha2UgYmVmb3JlIHB1Ymxpc2hpbmcgaXQgaGVyZS4NCiM+DQpwYXJhbSAoDQoJJEFwaUtleSwNCg0KCSRXb3JraW5nRGlyZWN0b3J5LA0KDQoJJFJlcG9zaXRvcnkgPSAnUFNHYWxsZXJ5JywNCg0KCVtzd2l0Y2hdDQoJJExvY2FsUmVwbywNCg0KCVtzd2l0Y2hdDQoJJFNraXBQdWJsaXNoLA0KDQoJW3N3aXRjaF0NCgkkQXV0b1ZlcnNpb24NCikNCg0KI3JlZ2lvbiBIYW5kbGUgV29ya2luZyBEaXJlY3RvcnkgRGVmYXVsdHMNCmlmICgtbm90ICRXb3JraW5nRGlyZWN0b3J5KQ0Kew0KCWlmICgkZW52OlJFTEVBU0VfUFJJTUFSWUFSVElGQUNUU09VUkNFQUxJQVMpDQoJew0KCQkkV29ya2luZ0RpcmVjdG9yeSA9IEpvaW4tUGF0aCAtUGF0aCAkZW52OlNZU1RFTV9ERUZBVUxUV09SS0lOR0RJUkVDVE9SWSAtQ2hpbGRQYXRoICRlbnY6UkVMRUFTRV9QUklNQVJZQVJUSUZBQ1RTT1VSQ0VBTElBUw0KCX0NCgllbHNlIHsgJFdvcmtpbmdEaXJlY3RvcnkgPSAkZW52OlNZU1RFTV9ERUZBVUxUV09SS0lOR0RJUkVDVE9SWSB9DQp9DQppZiAoLW5vdCAkV29ya2luZ0RpcmVjdG9yeSkgeyAkV29ya2luZ0RpcmVjdG9yeSA9IFNwbGl0LVBhdGggJFBTU2NyaXB0Um9vdCB9DQojZW5kcmVnaW9uIEhhbmRsZSBXb3JraW5nIERpcmVjdG9yeSBEZWZhdWx0cw0KDQojIFByZXBhcmUgcHVibGlzaCBmb2xkZXINCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiQ3JlYXRpbmcgYW5kIHBvcHVsYXRpbmcgcHVibGlzaGluZyBkaXJlY3RvcnkiDQokcHVibGlzaERpciA9IE5ldy1JdGVtIC1QYXRoICRXb3JraW5nRGlyZWN0b3J5IC1OYW1lIHB1Ymxpc2ggLUl0ZW1UeXBlIERpcmVjdG9yeSAtRm9yY2UNCkNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcw75uYW1lw74iIC1EZXN0aW5hdGlvbiAkcHVibGlzaERpci5GdWxsTmFtZSAtUmVjdXJzZSAtRm9yY2UNCg0KI3JlZ2lvbiBHYXRoZXIgdGV4dCBkYXRhIHRvIGNvbXBpbGUNCiR0ZXh0ID0gQCgpDQokcHJvY2Vzc2VkID0gQCgpDQoNCiMgR2F0aGVyIFN0dWZmIHRvIHJ1biBiZWZvcmUNCmZvcmVhY2ggKCRmaWxlUGF0aCBpbiAoJiAiJCgkUFNTY3JpcHRSb290KVwuLlzDvm5hbWXDvlxpbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEiKSkNCnsNCglpZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkZmlsZVBhdGgpKSB7IGNvbnRpbnVlIH0NCg0KCSRpdGVtID0gR2V0LUl0ZW0gJGZpbGVQYXRoDQoJaWYgKCRpdGVtLlBTSXNDb250YWluZXIpIHsgY29udGludWUgfQ0KCWlmICgkaXRlbS5GdWxsTmFtZSAtaW4gJHByb2Nlc3NlZCkgeyBjb250aW51ZSB9DQoJJHRleHQgKz0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJGl0ZW0uRnVsbE5hbWUpDQoJJHByb2Nlc3NlZCArPSAkaXRlbS5GdWxsTmFtZQ0KfQ0KDQojIEdhdGhlciBjb21tYW5kcw0KR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw75caW50ZXJuYWxcZnVuY3Rpb25zXCIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiIHwgRm9yRWFjaC1PYmplY3Qgew0KCSR0ZXh0ICs9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRfLkZ1bGxOYW1lKQ0KfQ0KR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnMuc2hhcmVkaW50ZXJuYWxcIiAtUmVjdXJzZSAtRmlsZSAtRmlsdGVyICIqLnBzMSIgfCBGb3JFYWNoLU9iamVjdCB7DQoJJHRleHQgKz0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJF8uRnVsbE5hbWUpDQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgVmVyYm9zZSAtTWVzc2FnZSAiICMzIEltcG9ydGluZyBjb250ZW50IGZyb20gJCgkXy5GdWxsTmFtZSkiDQp9DQpHZXQtQ2hpbGRJdGVtIC1QYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVzDvm5hbWXDvlxmdW5jdGlvbnNcIiAtUmVjdXJzZSAtRmlsZSAtRmlsdGVyICIqLnBzMSIgfCBGb3JFYWNoLU9iamVjdCB7DQoJJHRleHQgKz0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJF8uRnVsbE5hbWUpDQp9DQoNCiMgR2F0aGVyIHN0dWZmIHRvIHJ1biBhZnRlcndhcmRzDQpmb3JlYWNoICgkZmlsZVBhdGggaW4gKCYgIiQoJFBTU2NyaXB0Um9vdClcLi5cw75uYW1lw75caW50ZXJuYWxcc2NyaXB0c1xwb3N0aW1wb3J0LnBzMSIpKQ0Kew0KCWlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRmaWxlUGF0aCkpIHsgY29udGludWUgfQ0KDQoJJGl0ZW0gPSBHZXQtSXRlbSAkZmlsZVBhdGgNCglpZiAoJGl0ZW0uUFNJc0NvbnRhaW5lcikgeyBjb250aW51ZSB9DQoJaWYgKCRpdGVtLkZ1bGxOYW1lIC1pbiAkcHJvY2Vzc2VkKSB7IGNvbnRpbnVlIH0NCgkkdGV4dCArPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkaXRlbS5GdWxsTmFtZSkNCgkkcHJvY2Vzc2VkICs9ICRpdGVtLkZ1bGxOYW1lDQp9DQojZW5kcmVnaW9uIEdhdGhlciB0ZXh0IGRhdGEgdG8gY29tcGlsZQ0KDQojcmVnaW9uIFVwZGF0ZSB0aGUgcHNtMSBmaWxlDQokZmlsZURhdGEgPSBHZXQtQ29udGVudCAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw75cw75uYW1lw74ucHNtMSIgLVJhdw0KJGZpbGVEYXRhID0gJGZpbGVEYXRhLlJlcGxhY2UoJyI8d2FzIG5vdCBjb21waWxlZD4iJywgJyI8d2FzIGNvbXBpbGVkPiInKQ0KJGZpbGVEYXRhID0gJGZpbGVEYXRhLlJlcGxhY2UoJyI8Y29tcGlsZSBjb2RlIGludG8gaGVyZT4iJywgKCR0ZXh0IC1qb2luICJgbmBuIikpDQpbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFsbFRleHQoIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXMO+bmFtZcO+XMO+bmFtZcO+LnBzbTEiLCAkZmlsZURhdGEsIFtTeXN0ZW0uVGV4dC5FbmNvZGluZ106OlVURjgpDQojZW5kcmVnaW9uIFVwZGF0ZSB0aGUgcHNtMSBmaWxlDQoNCiNyZWdpb24gVXBkYXRpbmcgdGhlIE1vZHVsZSBWZXJzaW9uDQppZiAoJEF1dG9WZXJzaW9uKQ0Kew0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiVXBkYXRpbmcgbW9kdWxlIHZlcnNpb24gbnVtYmVycy4iDQoJdHJ5IHsgW3ZlcnNpb25dJHJlbW90ZVZlcnNpb24gPSAoRmluZC1Nb2R1bGUgJ8O+bmFtZcO+JyAtUmVwb3NpdG9yeSAkUmVwb3NpdG9yeSAtRXJyb3JBY3Rpb24gU3RvcCkuVmVyc2lvbiB9DQoJY2F0Y2gNCgl7DQoJCVN0b3AtUFNGRnVuY3Rpb24gLU1lc3NhZ2UgIkZhaWxlZCB0byBhY2Nlc3MgJCgkUmVwb3NpdG9yeSkiIC1FbmFibGVFeGNlcHRpb24gJHRydWUgLUVycm9yUmVjb3JkICRfDQoJfQ0KCWlmICgtbm90ICRyZW1vdGVWZXJzaW9uKQ0KCXsNCgkJU3RvcC1QU0ZGdW5jdGlvbiAtTWVzc2FnZSAiQ291bGRuJ3QgZmluZCDDvm5hbWXDviBvbiByZXBvc2l0b3J5ICQoJFJlcG9zaXRvcnkpIiAtRW5hYmxlRXhjZXB0aW9uICR0cnVlDQoJfQ0KCSRuZXdCdWlsZE51bWJlciA9ICRyZW1vdGVWZXJzaW9uLkJ1aWxkICsgMQ0KCVt2ZXJzaW9uXSRsb2NhbFZlcnNpb24gPSAoSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw75cw75uYW1lw74ucHNkMSIpLk1vZHVsZVZlcnNpb24NCglVcGRhdGUtTW9kdWxlTWFuaWZlc3QgLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXMO+bmFtZcO+XMO+bmFtZcO+LnBzZDEiIC1Nb2R1bGVWZXJzaW9uICIkKCRsb2NhbFZlcnNpb24uTWFqb3IpLiQoJGxvY2FsVmVyc2lvbi5NaW5vcikuJCgkbmV3QnVpbGROdW1iZXIpIg0KfQ0KI2VuZHJlZ2lvbiBVcGRhdGluZyB0aGUgTW9kdWxlIFZlcnNpb24NCg0KI3JlZ2lvbiBQdWJsaXNoDQppZiAoJFNraXBQdWJsaXNoKSB7IHJldHVybiB9DQppZiAoJExvY2FsUmVwbykNCnsNCgkjIERlcGVuZGVuY2llcyBtdXN0IGdvIGZpcnN0DQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJDcmVhdGluZyBOdWdldCBQYWNrYWdlIGZvciBtb2R1bGU6IFBTRnJhbWV3b3JrIg0KCU5ldy1QU01ETW9kdWxlTnVnZXRQYWNrYWdlIC1Nb2R1bGVQYXRoIChHZXQtTW9kdWxlIC1OYW1lIFBTRnJhbWV3b3JrKS5Nb2R1bGVCYXNlIC1QYWNrYWdlUGF0aCAuDQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJDcmVhdGluZyBOdWdldCBQYWNrYWdlIGZvciBtb2R1bGU6IMO+bmFtZcO+Ig0KCU5ldy1QU01ETW9kdWxlTnVnZXRQYWNrYWdlIC1Nb2R1bGVQYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVzDvm5hbWXDviIgLVBhY2thZ2VQYXRoIC4NCn0NCmVsc2UNCnsNCgkjIFB1Ymxpc2ggdG8gR2FsbGVyeQ0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHVibGlzaGluZyB0aGUgw75uYW1lw74gbW9kdWxlIHRvICQoJFJlcG9zaXRvcnkpIg0KCVB1Ymxpc2gtTW9kdWxlIC1QYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVzDvm5hbWXDviIgLU51R2V0QXBpS2V5ICRBcGlLZXkgLUZvcmNlIC1SZXBvc2l0b3J5ICRSZXBvc2l0b3J5DQp9DQojZW5kcmVnaW9uIFB1Ymxpc2gBCYMAAAAJhAAAAAaFAAAADnZzdHMtYnVpbGQucHMxBoYAAAAuU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxidWlsZFx2c3RzLWJ1aWxkLnBzMQkGAAAACYgAAAAJiQAAAAFYAAAADwAAAAaKAAAAvEENCjwjDQoJLlNZTk9QU0lTDQoJCUJ1aWxkIHNjcmlwdCB0aGF0IGdlbmVyYXRlcyBhIGNsaWVudCBtb2R1bGUgZm9yIFJFU1QgQVBJIGVuZHBvaW50cyBvZiBhIEF6dXJlIFBvd2VyU2hlbGwgRnVuY3Rpb25zIHByb2plY3QuDQoJDQoJLkRFU0NSSVBUSU9ODQoJCUJ1aWxkIHNjcmlwdCB0aGF0IGdlbmVyYXRlcyBhIGNsaWVudCBtb2R1bGUgZm9yIFJFU1QgQVBJIGVuZHBvaW50cyBvZiBhIEF6dXJlIFBvd2VyU2hlbGwgRnVuY3Rpb25zIHByb2plY3QuDQoJDQoJLlBBUkFNRVRFUiBBcGlLZXkNCgkJVGhlIEFQSSBrZXkgdG8gdXNlIHRvIHB1Ymxpc2ggdGhlIG1vZHVsZSB0byBhIE51Z2V0IFJlcG9zaXRvcnkNCgkNCgkuUEFSQU1FVEVSIFdvcmtpbmdEaXJlY3RvcnkNCgkJVGhlIHJvb3QgZm9sZGVyIGZyb20gd2hpY2ggdG8gYnVpbGQgdGhlIG1vZHVsZS4NCgkNCgkuUEFSQU1FVEVSIFJlcG9zaXRvcnkNCgkJVGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkgdG8gcHVibGlzaCB0by4NCgkJRGVmYXVsdHMgdG8gUFNHYWxsZXJ5Lg0KCQ0KCS5QQVJBTUVURVIgTG9jYWxSZXBvDQoJCUluc3RlYWQgb2YgcHVibGlzaGluZyB0byBhIGdhbGxlcnksIGRyb3AgYSBudWdldCBwYWNrYWdlIGluIHRoZSByb290IGZvbGRlci4NCgkJVGhpcyBwYWNrYWdlIGNhbiB0aGVuIGJlIHBpY2tlZCB1cCBpbiBhIGxhdGVyIHN0ZXAgZm9yIHB1Ymxpc2hpbmcgdG8gQXp1cmUgQXJ0aWZhY3RzLg0KDQoJLlBBUkFNRVRFUiBNb2R1bGVOYW1lDQoJCVRoZSBuYW1lIHRvIGdpdmUgdG8gdGhlIGNsaWVudCBtb2R1bGUuDQoJCUJ5IGRlZmF1bHQsIHRoZSBjbGllbnQgbW9kdWxlIHdpbGwgYmUgbmFtZWQgJzxNb2R1bGVOYW1lPi5DbGllbnQnLg0KCQ0KCS5QQVJBTUVURVIgSW5jbHVkZUZvcm1hdA0KCQlJbmNsdWRlIHRoZSBmb3JtYXQgeG1sIG9mIHRoZSBzb3VyY2UgbW9kdWxlIGZvciB0aGUgY2xpZW50IG1vZHVsZS4NCgkNCgkuUEFSQU1FVEVSIEluY2x1ZGVUeXBlDQoJCUluY2x1ZGUgdGhlIHR5cGUgZXh0ZW5zaW9uIHhtbCBvZiB0aGUgc291cmNlIG1vZHVsZSBmb3IgdGhlIGNsaWVudCBtb2R1bGUuDQoJDQoJLlBBUkFNRVRFUiBJbmNsdWRlQXNzZW1ibHkNCgkJSW5jbHVkZSB0aGUgYmluYXJpZXMgb2YgdGhlIHNvdXJjZSBtb2R1bGUgZm9yIHRoZSBjbGllbnQgbW9kdWxlLg0KIz4NCnBhcmFtICgNCgkkQXBpS2V5LA0KCQ0KCSRXb3JraW5nRGlyZWN0b3J5LA0KCQ0KCSRSZXBvc2l0b3J5ID0gJ1BTR2FsbGVyeScsDQoJDQoJW3N3aXRjaF0NCgkkTG9jYWxSZXBvLA0KCQ0KCSRNb2R1bGVOYW1lLA0KCQ0KCVtzd2l0Y2hdDQoJJEluY2x1ZGVGb3JtYXQsDQoJDQoJW3N3aXRjaF0NCgkkSW5jbHVkZVR5cGUsDQoJDQoJW3N3aXRjaF0NCgkkSW5jbHVkZUFzc2VtYmx5DQopDQoNCiNyZWdpb24gSGFuZGxlIFdvcmtpbmcgRGlyZWN0b3J5IERlZmF1bHRzDQppZiAoLW5vdCAkV29ya2luZ0RpcmVjdG9yeSkNCnsNCglpZiAoJGVudjpSRUxFQVNFX1BSSU1BUllBUlRJRkFDVFNPVVJDRUFMSUFTKQ0KCXsNCgkJJFdvcmtpbmdEaXJlY3RvcnkgPSBKb2luLVBhdGggLVBhdGggJGVudjpTWVNURU1fREVGQVVMVFdPUktJTkdESVJFQ1RPUlkgLUNoaWxkUGF0aCAkZW52OlJFTEVBU0VfUFJJTUFSWUFSVElGQUNUU09VUkNFQUxJQVMNCgl9DQoJZWxzZSB7ICRXb3JraW5nRGlyZWN0b3J5ID0gJGVudjpTWVNURU1fREVGQVVMVFdPUktJTkdESVJFQ1RPUlkgfQ0KfQ0KI2VuZHJlZ2lvbiBIYW5kbGUgV29ya2luZyBEaXJlY3RvcnkgRGVmYXVsdHMNCg0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAnU3RhcnRpbmcgQnVpbGQ6IENsaWVudCBNb2R1bGUnDQokcGFyZW50TW9kdWxlID0gJ8O+bmFtZcO+Jw0KaWYgKC1ub3QgJE1vZHVsZU5hbWUpIHsgJE1vZHVsZU5hbWUgPSAnw75uYW1lw74uQ2xpZW50JyB9DQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICdDcmVhdGluZyBGb2xkZXIgU3RydWN0dXJlJw0KJHdvcmtpbmdSb290ID0gTmV3LUl0ZW0gLVBhdGggJFdvcmtpbmdEaXJlY3RvcnkgLU5hbWUgJE1vZHVsZU5hbWUgLUl0ZW1UeXBlIERpcmVjdG9yeQ0KJHB1Ymxpc2hSb290ID0gSm9pbi1QYXRoIC1QYXRoICRXb3JraW5nRGlyZWN0b3J5IC1DaGlsZFBhdGggJ3B1Ymxpc2hcw75uYW1lw74nDQpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcY2xpZW50TW9kdWxlXGZ1bmN0aW9ucyIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcIiAtUmVjdXJzZQ0KQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGNsaWVudE1vZHVsZVxpbnRlcm5hbCIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcIiAtUmVjdXJzZQ0KQ29weS1JdGVtIC1QYXRoICIkKCRwdWJsaXNoUm9vdClcZW4tdXMiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIgLVJlY3Vyc2UNCiRmdW5jdGlvbkZvbGRlciA9IEdldC1JdGVtIC1QYXRoICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcZnVuY3Rpb25zIg0KDQojcmVnaW9uIENyZWF0ZSBGdW5jdGlvbnMNCiRlbmNvZGluZyA9IFtQU0ZFbmNvZGluZ10ndXRmOCcNCiRmdW5jdGlvbnNUZXh0ID0gR2V0LUNvbnRlbnQgLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcY2xpZW50TW9kdWxlXGZ1bmN0aW9uLnBzMSIgLVJhdw0KDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICdDcmVhdGluZyBGdW5jdGlvbnMnDQpmb3JlYWNoICgkZnVuY3Rpb25Tb3VyY2VGaWxlIGluIChHZXQtQ2hpbGRJdGVtIC1QYXRoICIkKCRwdWJsaXNoUm9vdClcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsdGVyICcqLnBzMScpKQ0Kew0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIiAgUHJvY2Vzc2luZyBmdW5jdGlvbjogJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKSINCgkkY29uZGVuc2VkTmFtZSA9ICRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUgLXJlcGxhY2UgJy0nLCAnJw0KCQ0KCSNyZWdpb24gTG9hZCBPdmVycmlkZXMNCgkkb3ZlcnJpZGUgPSBAeyB9DQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHNkMSIpDQoJew0KCQkkb3ZlcnJpZGUgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5wc2QxIg0KCX0NCglpZiAoVGVzdC1QYXRoIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkY29uZGVuc2VkTmFtZSkucHNkMSIpDQoJew0KCQkkb3ZlcnJpZGUgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkY29uZGVuc2VkTmFtZSkucHNkMSINCgl9DQoJaWYgKCRvdmVycmlkZS5Ob0NsaWVudEZ1bmN0aW9uKQ0KCXsNCgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiICAgIE92ZXJyaWRlICdOb0NsaWVudEZ1bmN0aW9uJyBkZXRlY3RlZCwgc2tpcHBpbmchIg0KCQljb250aW51ZQ0KCX0NCgkNCgkjIElmIHRoZXJlIGlzIGFuIGRlZmluaXRpb24gb3ZlcnJpZGUsIHVzZSBpdCBhbmQgY29udGludWUNCglpZiAoVGVzdC1QYXRoIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5wczEiKQ0KCXsNCgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiICAgIE92ZXJyaWRlIGZ1bmN0aW9uIGRlZmluaXRpb24gZGV0ZWN0ZWQsIHVzaW5nIG92ZXJyaWRlIg0KCQlDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpLnBzMSIgLURlc3RpbmF0aW9uICRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZQ0KCQljb250aW51ZQ0KCX0NCgkNCgkjIEZpZ3VyZSBvdXQgdGhlIFJlc3QgTWV0aG9kIHRvIHVzZQ0KCSRtZXRob2ROYW1lID0gJ1Bvc3QnDQoJaWYgKCRvdmVycmlkZS5SZXN0TWV0aG9kcykNCgl7DQoJCSRtZXRob2ROYW1lID0gJG92ZXJyaWRlLlJlc3RNZXRob2RzIHwgV2hlcmUtT2JqZWN0IHsgJF8gLW5lICdHZXQnIH0gfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxDQoJfQ0KCQ0KCSNlbmRyZWdpb24gTG9hZCBPdmVycmlkZXMNCgkNCgkkY3VycmVudEZ1bmN0aW9uc1RleHQgPSAkZnVuY3Rpb25zVGV4dCAtcmVwbGFjZSAnJWZ1bmN0aW9ubmFtZSUnLCAkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lIC1yZXBsYWNlICclY29uZGVuc2VkbmFtZSUnLCAkY29uZGVuc2VkTmFtZSAtcmVwbGFjZSAnJW1ldGhvZCUnLCAkbWV0aG9kTmFtZQ0KCQ0KCSRwYXJzZWRGdW5jdGlvbiA9IFJlYWQtUFNNRFNjcmlwdCAtUGF0aCAkZnVuY3Rpb25Tb3VyY2VGaWxlLkZ1bGxOYW1lDQoJJGZ1bmN0aW9uQXN0ID0gJHBhcnNlZEZ1bmN0aW9uLkFzdC5FbmRCbG9jay5TdGF0ZW1lbnRzIHwgV2hlcmUtT2JqZWN0IHsNCgkJJF8gLWlzIFtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLkxhbmd1YWdlLkZ1bmN0aW9uRGVmaW5pdGlvbkFzdF0NCgl9IHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMQ0KCQ0KCSRlbmQgPSAkZnVuY3Rpb25Bc3QuQm9keS5QYXJhbUJsb2NrLkV4dGVudC5FbmRPZmZTZXQNCgkkc3RhcnQgPSAkZnVuY3Rpb25Bc3QuQm9keS5FeHRlbnQuU3RhcnRPZmZTZXQgKyAxDQoJJGN1cnJlbnRGdW5jdGlvbnNUZXh0ID0gJGN1cnJlbnRGdW5jdGlvbnNUZXh0LlJlcGxhY2UoJyVwYXJhbWV0ZXIlJywgJGZ1bmN0aW9uQXN0LkJvZHkuRXh0ZW50LlRleHQuU3ViU3RyaW5nKDEsICgkZW5kIC0gJHN0YXJ0KSkpDQoJDQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiICAgIENyZWF0aW5nIGZpbGU6ICQoJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lKVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuTmFtZSkiDQoJW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxUZXh0KCIkKCRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSlcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLk5hbWUpIiwgJGN1cnJlbnRGdW5jdGlvbnNUZXh0LCAkZW5jb2RpbmcpDQp9DQokZnVuY3Rpb25zVG9FeHBvcnQgPSAoR2V0LUNoaWxkSXRlbSAtUGF0aCAkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUgLVJlY3Vyc2UgLUZpbHRlciAqLnBzMSkuQmFzZU5hbWUgfCBTb3J0LU9iamVjdA0KI2VuZHJlZ2lvbiBDcmVhdGUgRnVuY3Rpb25zDQoNCiNyZWdpb24gQ3JlYXRlIENvcmUgTW9kdWxlIEZpbGVzDQojIEdldCBNYW5pZmVzdCBvZiBwdWJsaXNoZWQgdmVyc2lvbiwgaW4gb3JkZXIgdG8gY2F0Y2ggYnVpbGQtcGhhc2UgY2hhbmdlcyBzdWNoIGFzIG1vZHVsZSB2ZXJzaW9uLg0KJG9yaWdpbmFsTWFuaWZlc3REYXRhID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJHB1Ymxpc2hSb290XMO+bmFtZcO+LnBzZDEiDQokcHJlcmVxSGFzaCA9IEB7DQoJTW9kdWxlTmFtZSAgICA9ICdQU0ZyYW1ld29yaycNCglNb2R1bGVWZXJzaW9uID0gKEdldC1Nb2R1bGUgUFNGcmFtZXdvcmspLlZlcnNpb24NCn0NCiRwYXJhbU5ld01vZHVsZU1hbmlmZXN0ID0gQHsNCglQYXRoCQkJICA9ICgnezB9XHsxfS5wc2QxJyAtZiAkd29ya2luZ1Jvb3QuRnVsbE5hbWUsICRNb2R1bGVOYW1lKQ0KCUZ1bmN0aW9uc1RvRXhwb3J0ID0gJGZ1bmN0aW9uc1RvRXhwb3J0DQoJQ29tcGFueU5hbWUJICAgICAgPSAkb3JpZ2luYWxNYW5pZmVzdERhdGEuQ29tcGFueU5hbWUNCglBdXRob3IJCSAgICAgID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLkF1dGhvcg0KCURlc2NyaXB0aW9uCSAgICAgID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLkRlc2NyaXB0aW9uDQoJTW9kdWxlVmVyc2lvbgkgID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLk1vZHVsZVZlcnNpb24NCglSb290TW9kdWxlCSAgICAgID0gKCd7MH0ucHNtMScgLWYgJE1vZHVsZU5hbWUpDQoJQ29weXJpZ2h0CQkgID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLkNvcHlyaWdodA0KCVR5cGVzVG9Qcm9jZXNzICAgID0gQCgpDQoJRm9ybWF0c1RvUHJvY2VzcyAgPSBAKCkNCglSZXF1aXJlZEFzc2VtYmxpZXMgPSBAKCkNCglSZXF1aXJlZE1vZHVsZXMgICA9IEAoJHByZXJlcUhhc2gpDQoJQ29tcGF0aWJsZVBTRWRpdGlvbnMgPSAnQ29yZScsICdEZXNrdG9wJw0KCVBvd2VyU2hlbGxWZXJzaW9uID0gJzUuMScNCn0NCg0KaWYgKCRJbmNsdWRlQXNzZW1ibHkpIHsgJHBhcmFtTmV3TW9kdWxlTWFuaWZlc3QuUmVxdWlyZWRBc3NlbWJsaWVzID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLlJlcXVpcmVkQXNzZW1ibGllcyB9DQppZiAoJEluY2x1ZGVGb3JtYXQpIHsgJHBhcmFtTmV3TW9kdWxlTWFuaWZlc3QuRm9ybWF0c1RvUHJvY2VzcyA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5Gb3JtYXRzVG9Qcm9jZXNzIH0NCmlmICgkSW5jbHVkZVR5cGUpIHsgJHBhcmFtTmV3TW9kdWxlTWFuaWZlc3QuVHlwZXNUb1Byb2Nlc3MgPSAkb3JpZ2luYWxNYW5pZmVzdERhdGEuVHlwZXNUb1Byb2Nlc3MgfQ0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiQ3JlYXRpbmcgTW9kdWxlIE1hbmlmZXN0IGZvciBtb2R1bGU6ICRNb2R1bGVOYW1lIg0KTmV3LU1vZHVsZU1hbmlmZXN0IEBwYXJhbU5ld01vZHVsZU1hbmlmZXN0DQoNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIkNvcHlpbmcgYWRkaXRpb25hbCBtb2R1bGUgZmlsZXMiDQpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcY2xpZW50TW9kdWxlXG1vZHVsZXJvb3QucHNtMSIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcJCgkTW9kdWxlTmFtZSkucHNtMSINCkNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcTElDRU5TRSIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcIg0KI2VuZHJlZ2lvbiBDcmVhdGUgQ29yZSBNb2R1bGUgRmlsZXMNCg0KI3JlZ2lvbiBUcmFuc2ZlciBBZGRpdGlvbmFsIENvbnRlbnQNCmlmICgkSW5jbHVkZUFzc2VtYmx5KQ0Kew0KCUNvcHktSXRlbSAtUGF0aCAiJHB1Ymxpc2hSb290XGJpbiIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcIiAtUmVjdXJzZQ0KfQ0KaWYgKCRJbmNsdWRlRm9ybWF0IC1vciAkSW5jbHVkZVR5cGUpDQp7DQoJQ29weS1JdGVtIC1QYXRoICIkcHVibGlzaFJvb3RceG1sIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVwiIC1SZWN1cnNlDQp9DQojZW5kcmVnaW9uIFRyYW5zZmVyIEFkZGl0aW9uYWwgQ29udGVudA0KDQojcmVnaW9uIFB1Ymxpc2gNCmlmICgkTG9jYWxSZXBvKQ0Kew0KCSMgRGVwZW5kZW5jaWVzIG11c3QgZ28gZmlyc3QNCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkNyZWF0aW5nIE51Z2V0IFBhY2thZ2UgZm9yIG1vZHVsZTogUFNGcmFtZXdvcmsiDQoJTmV3LVBTTURNb2R1bGVOdWdldFBhY2thZ2UgLU1vZHVsZVBhdGggKEdldC1Nb2R1bGUgLU5hbWUgUFNGcmFtZXdvcmspLk1vZHVsZUJhc2UgLVBhY2thZ2VQYXRoIC4gLVdhcm5pbmdBY3Rpb24gU2lsZW50bHlDb250aW51ZQ0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiQ3JlYXRpbmcgTnVnZXQgUGFja2FnZSBmb3IgbW9kdWxlOiDDvm5hbWXDviINCglOZXctUFNNRE1vZHVsZU51Z2V0UGFja2FnZSAtTW9kdWxlUGF0aCAkd29ya2luZ1Jvb3QuRnVsbE5hbWUgLVBhY2thZ2VQYXRoIC4gLUVuYWJsZUV4Y2VwdGlvbg0KfQ0KZWxzZQ0Kew0KCSMgUHVibGlzaCB0byBHYWxsZXJ5DQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJQdWJsaXNoaW5nIHRoZSDDvm5hbWXDviBtb2R1bGUgdG8gJCgkUmVwb3NpdG9yeSkiDQoJUHVibGlzaC1Nb2R1bGUgLVBhdGggJHdvcmtpbmdSb290LkZ1bGxOYW1lIC1OdUdldEFwaUtleSAkQXBpS2V5IC1Gb3JjZSAtUmVwb3NpdG9yeSAkUmVwb3NpdG9yeQ0KfQ0KI2VuZHJlZ2lvbiBQdWJsaXNoAQmLAAAACYwAAAAGjQAAACN2c3RzLWNyZWF0ZUZ1bmN0aW9uQ2xpZW50TW9kdWxlLnBzMQaOAAAAQ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cYnVpbGRcdnN0cy1jcmVhdGVGdW5jdGlvbkNsaWVudE1vZHVsZS5wczEJBgAAAAmQAAAACZEAAAABWQAAAA8AAAAGkgAAAJssDQo8Iw0KCS5TWU5PUFNJUw0KCQlQYWNrYWdlcyBhbiBBenVyZSBGdW5jdGlvbnMgcHJvamVjdCwgcmVhZHkgdG8gcmVsZWFzZS4NCgkNCgkuREVTQ1JJUFRJT04NCgkJUGFja2FnZXMgYW4gQXp1cmUgRnVuY3Rpb25zIHByb2plY3QsIHJlYWR5IHRvIHJlbGVhc2UuDQoJCVNob3VsZCBiZSBwYXJ0IG9mIHRoZSByZWxlYXNlIHBpcGVsaW5lLCBhZnRlciBlbnN1cmluZyB2YWxpZGF0aW9uLg0KDQoJCUxvb2sgaW50byB0aGUgJ0F6dXJlRnVuY3Rpb25SZXN0JyB0ZW1wbGF0ZSBmb3IgZ2VuZXJhdGluZyBmdW5jdGlvbnMgZm9yIHRoZSBtb2R1bGUgaWYgeW91IGRvLg0KCQ0KCS5QQVJBTUVURVIgV29ya2luZ0RpcmVjdG9yeQ0KCQlUaGUgcm9vdCBmb2xkZXIgdG8gd29yayBmcm9tLg0KCQ0KCS5QQVJBTUVURVIgUmVwb3NpdG9yeQ0KCQlUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeSB0byB1c2UgZm9yIGdhdGhlcmluZyBkZXBlbmRlbmNpZXMgZnJvbS4NCiM+DQpwYXJhbSAoDQoJJFdvcmtpbmdEaXJlY3RvcnkgPSAiJCgkZW52OlNZU1RFTV9ERUZBVUxUV09SS0lOR0RJUkVDVE9SWSlcX8O+bmFtZcO+IiwNCgkNCgkkUmVwb3NpdG9yeSA9ICdQU0dhbGxlcnknLA0KDQoJW3N3aXRjaF0NCgkkSW5jbHVkZUFaDQopDQoNCiRtb2R1bGVOYW1lID0gJ8O+bmFtZcO+Jw0KDQojIFByZXBhcmUgUGF0aHMNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIkNyZWF0aW5nIHdvcmtpbmcgZm9sZGVycyINCiRtb2R1bGVSb290ID0gSm9pbi1QYXRoIC1QYXRoICRXb3JraW5nRGlyZWN0b3J5IC1DaGlsZFBhdGggJ3B1Ymxpc2gnDQokd29ya2luZ1Jvb3QgPSBOZXctSXRlbSAtUGF0aCAkV29ya2luZ0RpcmVjdG9yeSAtTmFtZSAnd29ya2luZycgLUl0ZW1UeXBlIERpcmVjdG9yeQ0KJG1vZHVsZXNGb2xkZXIgPSBOZXctSXRlbSAtUGF0aCAkd29ya2luZ1Jvb3QuRnVsbE5hbWUgLU5hbWUgTW9kdWxlcyAtSXRlbVR5cGUgRGlyZWN0b3J5DQoNCiMgRmlsbCBvdXQgdGhlIG1vZHVsZXMgZm9sZGVyDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJUcmFuc2ZlcmluZyBidWlsdCBtb2R1bGUgZGF0YSBpbnRvIHdvcmtpbmcgZGlyZWN0b3J5Ig0KQ29weS1JdGVtIC1QYXRoICIkbW9kdWxlUm9vdFwkbW9kdWxlTmFtZSIgLURlc3RpbmF0aW9uICRtb2R1bGVzRm9sZGVyLkZ1bGxOYW1lIC1SZWN1cnNlIC1Gb3JjZQ0KZm9yZWFjaCAoJGRlcGVuZGVuY3kgaW4gKEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiRtb2R1bGVSb290XCRtb2R1bGVOYW1lXCRtb2R1bGVOYW1lLnBzZDEiKS5SZXF1aXJlZE1vZHVsZXMpDQp7DQoJJHBhcmFtID0gQHsNCgkJUmVwb3NpdG9yeSA9ICRSZXBvc2l0b3J5DQoJCU5hbWUJICAgPSAkZGVwZW5kZW5jeS5Nb2R1bGVOYW1lDQoJCVBhdGgJICAgPSAkbW9kdWxlc0ZvbGRlci5GdWxsTmFtZQ0KCX0NCglpZiAoJGRlcGVuZGVuY3kgLWlzIFtzdHJpbmddKSB7ICRwYXJhbVsnTmFtZSddID0gJGRlcGVuZGVuY3kgfQ0KCWlmICgkZGVwZW5kZW5jeS5SZXF1aXJlZFZlcnNpb24pDQoJew0KCQkkcGFyYW1bJ1JlcXVpcmVkVmVyc2lvbiddID0gJGRlcGVuZGVuY3kuUmVxdWlyZWRWZXJzaW9uDQoJfQ0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIlByZXBhcmluZyBEZXBlbmRlbmN5OiAkKCRwYXJhbVsnTmFtZSddKSINCglTYXZlLU1vZHVsZSBAcGFyYW0NCn0NCg0KIyBHZW5lcmF0ZSBmdW5jdGlvbiBjb25maWd1cmF0aW9uDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICdHZW5lcmF0aW5nIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24nDQokcnVuVGVtcGxhdGUgPSBHZXQtQ29udGVudCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xydW4ucHMxIiAtUmF3DQpmb3JlYWNoICgkZnVuY3Rpb25Tb3VyY2VGaWxlIGluIChHZXQtQ2hpbGRJdGVtIC1QYXRoICIkKCRtb2R1bGVSb290KVwkbW9kdWxlTmFtZVxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWx0ZXIgJyoucHMxJykpDQp7DQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiICBQcm9jZXNzaW5nIGZ1bmN0aW9uOiAkZnVuY3Rpb25Tb3VyY2VGaWxlIg0KCSRjb25kZW5zZWROYW1lID0gJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSAtcmVwbGFjZSAnLScsICcnDQoJJGZ1bmN0aW9uRm9sZGVyID0gTmV3LUl0ZW0gLVBhdGggJHdvcmtpbmdSb290LkZ1bGxOYW1lIC1OYW1lICRjb25kZW5zZWROYW1lIC1JdGVtVHlwZSBEaXJlY3RvcnkNCgkNCgkjcmVnaW9uIExvYWQgT3ZlcnJpZGVzDQoJJG92ZXJyaWRlID0gQHsgfQ0KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpLnBzZDEiKQ0KCXsNCgkJJG92ZXJyaWRlID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHNkMSINCgl9DQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGNvbmRlbnNlZE5hbWUpLnBzZDEiKQ0KCXsNCgkJJG92ZXJyaWRlID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGNvbmRlbnNlZE5hbWUpLnBzZDEiDQoJfQ0KCSNlbmRyZWdpb24gTG9hZCBPdmVycmlkZXMNCgkNCgkjcmVnaW9uIENyZWF0ZSBGdW5jdGlvbiBDb25maWd1cmF0aW9uDQoJJHJlc3RNZXRob2RzID0gJ2dldCcsICdwb3N0Jw0KCWlmICgkb3ZlcnJpZGUuUmVzdE1ldGhvZHMpIHsgJHJlc3RNZXRob2RzID0gJG92ZXJyaWRlLlJlc3RNZXRob2RzIH0NCgkNCglTZXQtQ29udGVudCAtUGF0aCAiJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXGZ1bmN0aW9uLmpzb24iIC1WYWx1ZSBAIg0Kew0KICAgICJiaW5kaW5ncyI6IFsNCiAgICAgICAgew0KICAgICAgICAiYXV0aExldmVsIjogImZ1bmN0aW9uIiwNCiAgICAgICAgInR5cGUiOiAiaHR0cFRyaWdnZXIiLA0KICAgICAgICAiZGlyZWN0aW9uIjogImluIiwNCiAgICAgICAgIm5hbWUiOiAiUmVxdWVzdCIsDQogICAgICAgICJtZXRob2RzIjogWw0KICAgICAgICAgICAgIiQoJHJlc3RNZXRob2RzIC1qb2luICJgIiwNCiAgICAgICAgICAgIGAiIikiDQogICAgICAgIF0NCiAgICAgICAgfSwNCiAgICAgICAgew0KICAgICAgICAidHlwZSI6ICJodHRwIiwNCiAgICAgICAgImRpcmVjdGlvbiI6ICJvdXQiLA0KICAgICAgICAibmFtZSI6ICJSZXNwb25zZSINCiAgICAgICAgfQ0KICAgIF0sDQogICAgImRpc2FibGVkIjogZmFsc2UNCn0NCiJADQoJI2VuZHJlZ2lvbiBDcmVhdGUgRnVuY3Rpb24gQ29uZmlndXJhdGlvbg0KCQ0KCSNyZWdpb24gT3ZlcnJpZGUgRnVuY3Rpb24gQ29uZmlndXJhdGlvbg0KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpLmpzb24iKQ0KCXsNCgkJQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5qc29uIiAtRGVzdGluYXRpb24gIiQoJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lKVxmdW5jdGlvbi5qc29uIiAtRm9yY2UNCgl9DQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGNvbmRlbnNlZE5hbWUpLmpzb24iKQ0KCXsNCgkJQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkY29uZGVuc2VkTmFtZSkuanNvbiIgLURlc3RpbmF0aW9uICIkKCRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSlcZnVuY3Rpb24uanNvbiIgLUZvcmNlDQoJfQ0KCSNlbmRyZWdpb24gT3ZlcnJpZGUgRnVuY3Rpb24gQ29uZmlndXJhdGlvbg0KCQ0KCSMgR2VuZXJhdGUgdGhlIHJ1bi5wczEgZmlsZQ0KCSRydW5UZXh0ID0gJHJ1blRlbXBsYXRlIC1yZXBsYWNlICclZnVuY3Rpb25uYW1lJScsICRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUNCgkkcnVuVGV4dCB8IFNldC1Db250ZW50IC1QYXRoICIkKCRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSlccnVuLnBzMSIgLUVuY29kaW5nIFVURjgNCn0NCg0KIyBUcmFuc2ZlciBjb21tb24gZmlsZXMNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIlRyYW5zZmVyaW5nIGNvcmUgZnVuY3Rpb24gZGF0YSINCmlmICgkSW5jbHVkZUFaKQ0Kew0KCUNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xob3N0LWF6Lmpzb24iIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXGhvc3QuanNvbiINCglDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNccmVxdWlyZW1lbnRzLnBzZDEiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXCINCn0NCmVsc2UNCnsNCglDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcaG9zdC5qc29uIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdyb290LkZ1bGxOYW1lKVwiDQp9DQpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcbG9jYWwuc2V0dGluZ3MuanNvbiIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5ncm9vdC5GdWxsTmFtZSlcIg0KDQojIEJ1aWxkIHRoZSBwcm9maWxlIGZpbGUNCiR0ZXh0ID0gQCgpDQokdGV4dCArPSBHZXQtQ29udGVudCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xwcm9maWxlLnBzMSIgLVJhdw0KZm9yZWFjaCAoJGZ1bmN0aW9uRmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xwcm9maWxlRnVuY3Rpb25zIiAtUmVjdXJzZSkpDQp7DQoJJHRleHQgKz0gR2V0LUNvbnRlbnQgLVBhdGggJGZ1bmN0aW9uRmlsZS5GdWxsTmFtZSAtUmF3DQp9DQokdGV4dCAtam9pbiAiYG5gbiIgfCBTZXQtQ29udGVudCAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXHByb2ZpbGUucHMxIg0KDQojIFppcCBJdA0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiQ3JlYXRpbmcgZnVuY3Rpb24gYXJjaGl2ZSBpbiAnJCgkV29ya2luZ0RpcmVjdG9yeSlcJG1vZHVsZU5hbWUuemlwJyINCkNvbXByZXNzLUFyY2hpdmUgLVBhdGggIiQoJHdvcmtpbmdyb290LkZ1bGxOYW1lKVwqIiAtRGVzdGluYXRpb25QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVwkbW9kdWxlTmFtZS56aXAiIC1Gb3JjZQEJkwAAAAmUAAAABpUAAAAYdnN0cy1wYWNrYWdlRnVuY3Rpb24ucHMxBpYAAAA4U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxidWlsZFx2c3RzLXBhY2thZ2VGdW5jdGlvbi5wczEJBgAAAAmYAAAACZkAAAABWgAAAA8AAAAGmgAAAKYGcGFyYW0gKA0KICAgIFtzdHJpbmddDQogICAgJFJlcG9zaXRvcnkgPSAnUFNHYWxsZXJ5Jw0KKQ0KDQokbW9kdWxlcyA9IEAoIlBlc3RlciIsICJQU0ZyYW1ld29yayIsICJQU01vZHVsZURldmVsb3BtZW50IiwgIlBTU2NyaXB0QW5hbHl6ZXIiKQ0KDQojIEF1dG9tYXRpY2FsbHkgYWRkIG1pc3NpbmcgZGVwZW5kZW5jaWVzDQokZGF0YSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw75cw75uYW1lw74ucHNkMSINCmZvcmVhY2ggKCRkZXBlbmRlbmN5IGluICRkYXRhLlJlcXVpcmVkTW9kdWxlcykgew0KICAgIGlmICgkZGVwZW5kZW5jeSAtaXMgW3N0cmluZ10pIHsNCiAgICAgICAgaWYgKCRtb2R1bGVzIC1jb250YWlucyAkZGVwZW5kZW5jeSkgeyBjb250aW51ZSB9DQogICAgICAgICRtb2R1bGVzICs9ICRkZXBlbmRlbmN5DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICBpZiAoJG1vZHVsZXMgLWNvbnRhaW5zICRkZXBlbmRlbmN5Lk1vZHVsZU5hbWUpIHsgY29udGludWUgfQ0KICAgICAgICAkbW9kdWxlcyArPSAkZGVwZW5kZW5jeS5Nb2R1bGVOYW1lDQogICAgfQ0KfQ0KDQpmb3JlYWNoICgkbW9kdWxlIGluICRtb2R1bGVzKSB7DQogICAgV3JpdGUtSG9zdCAiSW5zdGFsbGluZyAkbW9kdWxlIiAtRm9yZWdyb3VuZENvbG9yIEN5YW4NCiAgICBJbnN0YWxsLU1vZHVsZSAkbW9kdWxlIC1Gb3JjZSAtU2tpcFB1Ymxpc2hlckNoZWNrIC1SZXBvc2l0b3J5ICRSZXBvc2l0b3J5DQogICAgSW1wb3J0LU1vZHVsZSAkbW9kdWxlIC1Gb3JjZSAtUGFzc1RocnUNCn0BCZsAAAAJnAAAAAadAAAAFnZzdHMtcHJlcmVxdWlzaXRlcy5wczEGngAAADZTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGJ1aWxkXHZzdHMtcHJlcmVxdWlzaXRlcy5wczEJBgAAAAmgAAAACaEAAAABWwAAAA8AAAAGogAAAMoCIyBHdWlkZSBmb3IgYXZhaWxhYmxlIHZhcmlhYmxlcyBhbmQgd29ya2luZyB3aXRoIHNlY3JldHM6DQojIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3ZzdHMvYnVpbGQtcmVsZWFzZS9jb25jZXB0cy9kZWZpbml0aW9ucy9idWlsZC92YXJpYWJsZXM/dGFicz1wb3dlcnNoZWxsDQoNCiMgTmVlZHMgdG8gZW5zdXJlIHRoaW5ncyBhcmUgRG9uZSBSaWdodCBhbmQgb25seSBsZWdhbCBjb21taXRzIHRvIG1hc3RlciBnZXQgYnVpbHQNCg0KIyBSdW4gaW50ZXJuYWwgcGVzdGVyIHRlc3RzDQomICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+XHRlc3RzXHBlc3Rlci5wczEiAQmjAAAACaQAAAAGpQAAABF2c3RzLXZhbGlkYXRlLnBzMQamAAAAMVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cYnVpbGRcdnN0cy12YWxpZGF0ZS5wczEJBgAAAAmoAAAACakAAAABXAAAAAEAAAAJqgAAAAarAAAAA2JpbgasAAAAN1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxiaW4JBgAAAAmuAAAACa8AAAABXQAAAAEAAAAJsAAAAAaxAAAABWVuLXVzBrIAAAA5U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGVuLXVzCQYAAAAJtAAAAAm1AAAAAV4AAAABAAAACbYAAAAGtwAAAAlmdW5jdGlvbnMGuAAAAD1TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cZnVuY3Rpb25zCQYAAAAJugAAAAm7AAAAAV8AAAABAAAACbwAAAAGvQAAAAhpbnRlcm5hbAa+AAAAPFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbAkGAAAACcAAAAAJwQAAAAFgAAAAAQAAAAnCAAAABsMAAAAjU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24GxAAAAFdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24JBgAAAAnGAAAACccAAAABYQAAAAEAAAAJyAAAAAbJAAAABXRlc3RzBsoAAAA5U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHRlc3RzCQYAAAAJzAAAAAnNAAAAAWIAAAABAAAACc4AAAAGzwAAAAN4bWwG0AAAADdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75ceG1sCQYAAAAJ0gAAAAnTAAAAAWMAAAAPAAAABtQAAABuIyBDaGFuZ2Vsb2cNCiMjIDEuMC4wICjDviFkeW5hbWljc2NyaXB0Xzg0NDExMiHDvikNCiAtIE5ldzogU29tZSBTdHVmZg0KIC0gVXBkOiBNb2FyIFN0dWZmDQogLSBGaXg6IE11Y2ggU3R1ZmYBCdUAAAAJ1gAAAAbXAAAADGNoYW5nZWxvZy5tZAbYAAAAQFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxjaGFuZ2Vsb2cubWQJBgAAAAnaAAAACdsAAAABZAAAAA8AAAAG3AAAAI4IIyBQU0ZNb2R1bGUgZ3VpZGFuY2UNCg0KVGhpcyBpcyBhIGZpbmlzaGVkIG1vZHVsZSBsYXlvdXQgb3B0aW1pemVkIGZvciBpbXBsZW1lbnRpbmcgdGhlIFBTRnJhbWV3b3JrLg0KDQpJZiB5b3UgZG9uJ3QgY2FyZSB0byBkZWFsIHdpdGggdGhlIGRldGFpbHMsIHRoaXMgaXMgd2hhdCB5b3UgbmVlZCB0byBkbyB0byBnZXQgc3RhcnRlZCBzZWVpbmcgcmVzdWx0czoNCg0KIC0gQWRkIHRoZSBmdW5jdGlvbnMgeW91IHdhbnQgdG8gcHVibGlzaCB0byBgL2Z1bmN0aW9ucy9gDQogLSBVcGRhdGUgdGhlIGBGdW5jdGlvbnNUb0V4cG9ydGAgbm9kZSBpbiB0aGUgbW9kdWxlIG1hbmlmZXN0ICjDvm5hbWXDvi5wc2QxKS4gQWxsIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHNob3VsZCBiZSBpbiBhIGxpc3QuDQogLSBBZGQgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyB0aGUgdXNlciBzaG91bGQgbm90IHNlZSB0byBgL2ludGVybmFsL2Z1bmN0aW9ucy9gDQogDQogIyMgUGF0aCBXYXJuaW5nDQogDQogPiBJZiB5b3Ugd2FudCB5b3VyIG1vZHVsZSB0byBiZSBjb21wYXRpYmxlIHdpdGggTGludXggYW5kIE1hY09TLCBrZWVwIGluIG1pbmQgdGhhdCB0aG9zZSBPUyBhcmUgY2FzZSBzZW5zaXRpdmUgZm9yIHBhdGhzIGFuZCBmaWxlcy4NCiANCiBgSW1wb3J0LU1vZHVsZUZpbGVgIGlzIHByZWNvbmZpZ3VyZWQgdG8gcmVzb2x2ZSB0aGUgcGF0aCBvZiB0aGUgZmlsZXMgc3BlY2lmaWVkLCBzbyBpdCB3aWxsIHJlbGlhYmx5IGNvbnZlcnQgd2VpcmQgcGF0aCBub3RhdGlvbnMgdGhlIHN5c3RlbSBjYW4ndCBoYW5kbGUuDQogQ29udGVudCBpbXBvcnRlZCB0aHJvdWdoIHRoYXQgY29tbWFuZCB0aHVzIG5lZWQgbm90IG1pbmQgdGhlIHBhdGggc2VwYXJhdG9yLg0KIElmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB5b3VyIGNvZGUgdG9vIHdpbGwgc3Vydml2ZSBPUy1zcGVjaWZpYyBwYXRoIG5vdGF0aW9ucywgZ2V0IHVzZWQgdG8gdXNpbmcgYFJlc29sdmUtcGF0aGAgb3IgdGhlIG1vcmUgcG93ZXJmdWwgYFJlc29sdmUtUFNGUGF0aGAuAQndAAAACd4AAAAG3wAAAAlyZWFkbWUubWQG4AAAAD1TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75ccmVhZG1lLm1kCQYAAAAJ4gAAAAnjAAAAAWUAAAAPAAAABuQAAADOE0B7DQoJIyBTY3JpcHQgbW9kdWxlIG9yIGJpbmFyeSBtb2R1bGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYW5pZmVzdA0KCVJvb3RNb2R1bGUgICAgICAgID0gJ8O+bmFtZcO+LnBzbTEnDQoNCgkjIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgbW9kdWxlLg0KCU1vZHVsZVZlcnNpb24gICAgID0gJzEuMC4wJw0KDQoJIyBJRCB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgbW9kdWxlDQoJR1VJRCAgICAgICAgICAgICAgPSAnw74hZ3VpZFJvb3RNb2R1bGUhw74nDQoNCgkjIEF1dGhvciBvZiB0aGlzIG1vZHVsZQ0KCUF1dGhvciAgICAgICAgICAgID0gJ8O+YXV0aG9yw74nDQoNCgkjIENvbXBhbnkgb3IgdmVuZG9yIG9mIHRoaXMgbW9kdWxlDQoJQ29tcGFueU5hbWUgICAgICAgPSAnw75jb21wYW55w74nDQoNCgkjIENvcHlyaWdodCBzdGF0ZW1lbnQgZm9yIHRoaXMgbW9kdWxlDQoJQ29weXJpZ2h0ICAgICAgICAgPSAnQ29weXJpZ2h0IChjKSDDviF5ZWFyIcO+IMO+YXV0aG9yw74nDQoNCgkjIERlc2NyaXB0aW9uIG9mIHRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlDQoJRGVzY3JpcHRpb24gICAgICAgPSAnw75kZXNjcmlwdGlvbsO+Jw0KDQoJIyBNaW5pbXVtIHZlcnNpb24gb2YgdGhlIFdpbmRvd3MgUG93ZXJTaGVsbCBlbmdpbmUgcmVxdWlyZWQgYnkgdGhpcyBtb2R1bGUNCglQb3dlclNoZWxsVmVyc2lvbiA9ICc1LjAnDQoNCgkjIE1vZHVsZXMgdGhhdCBtdXN0IGJlIGltcG9ydGVkIGludG8gdGhlIGdsb2JhbCBlbnZpcm9ubWVudCBwcmlvciB0byBpbXBvcnRpbmcNCgkjIHRoaXMgbW9kdWxlDQoJUmVxdWlyZWRNb2R1bGVzICAgPSBAKA0KCQlAeyBNb2R1bGVOYW1lID0gJ1BTRnJhbWV3b3JrJzsgTW9kdWxlVmVyc2lvbiA9ICfDviFwc2ZyYW1ld29yayHDvicgfQ0KCQlAeyBNb2R1bGVOYW1lID0gJ01pY3Jvc29mdC5Qb3dlcnNoZWxsLlNlY3JldE1hbmFnZW1lbnQnOyBNb2R1bGVWZXJzaW9uID0gJ8O+IXNlY3JldE1hbmFnZW1lbnRWZXJzaW9uIcO+JyB9LA0KCSkNCg0KCSMgQXNzZW1ibGllcyB0aGF0IG11c3QgYmUgbG9hZGVkIHByaW9yIHRvIGltcG9ydGluZyB0aGlzIG1vZHVsZQ0KCSMgUmVxdWlyZWRBc3NlbWJsaWVzID0gQCgnYmluXMO+bmFtZcO+LmRsbCcpDQoNCgkjIFR5cGUgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQ0KCSMgVHlwZXNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uVHlwZXMucHMxeG1sJykNCg0KCSMgRm9ybWF0IGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUNCgkjIEZvcm1hdHNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uRm9ybWF0LnBzMXhtbCcpDQoNCgkjIEZ1bmN0aW9ucyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCUZ1bmN0aW9uc1RvRXhwb3J0ID0gJycNCg0KCSMgQ21kbGV0cyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCUNtZGxldHNUb0V4cG9ydCAgID0gJycNCg0KCSMgVmFyaWFibGVzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlDQoJVmFyaWFibGVzVG9FeHBvcnQgPSAnJw0KDQoJIyBBbGlhc2VzIHRvIGV4cG9ydCBmcm9tIHRoaXMgbW9kdWxlDQoJQWxpYXNlc1RvRXhwb3J0ICAgPSAnJw0KDQoJIyBMaXN0IG9mIGFsbCBtb2R1bGVzIHBhY2thZ2VkIHdpdGggdGhpcyBtb2R1bGUNCglNb2R1bGVMaXN0ICAgICAgICA9IEAoKQ0KDQoJIyBMaXN0IG9mIGFsbCBmaWxlcyBwYWNrYWdlZCB3aXRoIHRoaXMgbW9kdWxlDQoJRmlsZUxpc3QgICAgICAgICAgPSBAKCkNCg0KCSMgUHJpdmF0ZSBkYXRhIHRvIHBhc3MgdG8gdGhlIG1vZHVsZSBzcGVjaWZpZWQgaW4gTW9kdWxlVG9Qcm9jZXNzLiBUaGlzIG1heSBhbHNvIGNvbnRhaW4gYSBQU0RhdGEgaGFzaHRhYmxlIHdpdGggYWRkaXRpb25hbCBtb2R1bGUgbWV0YWRhdGEgdXNlZCBieSBQb3dlclNoZWxsLg0KCVByaXZhdGVEYXRhICAgICAgID0gQHsNCg0KCQkjU3VwcG9ydCBmb3IgUG93ZXJTaGVsbEdldCBnYWxsZXJpZXMuDQoJCVBTRGF0YSA9IEB7DQoNCgkJCSMgVGFncyBhcHBsaWVkIHRvIHRoaXMgbW9kdWxlLiBUaGVzZSBoZWxwIHdpdGggbW9kdWxlIGRpc2NvdmVyeSBpbiBvbmxpbmUgZ2FsbGVyaWVzLg0KCQkJIyBUYWdzID0gQCgpDQoNCgkJCSMgQSBVUkwgdG8gdGhlIGxpY2Vuc2UgZm9yIHRoaXMgbW9kdWxlLg0KCQkJIyBMaWNlbnNlVXJpID0gJycNCg0KCQkJIyBBIFVSTCB0byB0aGUgbWFpbiB3ZWJzaXRlIGZvciB0aGlzIHByb2plY3QuDQoJCQkjIFByb2plY3RVcmkgPSAnJw0KDQoJCQkjIEEgVVJMIHRvIGFuIGljb24gcmVwcmVzZW50aW5nIHRoaXMgbW9kdWxlLg0KCQkJIyBJY29uVXJpID0gJycNCg0KCQkJIyBSZWxlYXNlTm90ZXMgb2YgdGhpcyBtb2R1bGUNCgkJCSMgUmVsZWFzZU5vdGVzID0gJycNCg0KCQl9ICMgRW5kIG9mIFBTRGF0YSBoYXNodGFibGUNCg0KCX0gIyBFbmQgb2YgUHJpdmF0ZURhdGEgaGFzaHRhYmxlDQp9AQnlAAAACeYAAAAG5wAAAB5TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEG6AAAAFJTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxCQYAAAAJ6gAAAAnrAAAAAWYAAAAPAAAABuwAAAD5GiRzY3JpcHQ6TW9kdWxlUm9vdCA9ICRQU1NjcmlwdFJvb3QNCiRzY3JpcHQ6TW9kdWxlVmVyc2lvbiA9IChJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcw75uYW1lw74ucHNkMSIpLk1vZHVsZVZlcnNpb24NCg0KIyBEZXRlY3Qgd2hldGhlciBhdCBzb21lIGxldmVsIGRvdHNvdXJjaW5nIHdhcyBlbmZvcmNlZA0KJHNjcmlwdDpkb0RvdFNvdXJjZSA9IEdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgw75uYW1lw74uSW1wb3J0LkRvRG90U291cmNlIC1GYWxsYmFjayAkZmFsc2UNCmlmICgkw75uYW1lw75fZG90c291cmNlbW9kdWxlKSB7ICRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSAkdHJ1ZSB9DQoNCjwjDQpOb3RlIG9uIFJlc29sdmUtUGF0aDoNCkFsbCBwYXRocyBhcmUgc2VudCB0aHJvdWdoIFJlc29sdmUtUGF0aC9SZXNvbHZlLVBTRlBhdGggaW4gb3JkZXIgdG8gY29udmVydCB0aGVtIHRvIHRoZSBjb3JyZWN0IHBhdGggc2VwYXJhdG9yLg0KVGhpcyBhbGxvd3MgaWdub3JpbmcgcGF0aCBzZXBhcmF0b3JzIHRocm91Z2hvdXQgdGhlIGltcG9ydCBzZXF1ZW5jZSwgd2hpY2ggY291bGQgb3RoZXJ3aXNlIGNhdXNlIHRyb3VibGUgZGVwZW5kaW5nIG9uIE9TLg0KUmVzb2x2ZS1QYXRoIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHBhdGhzIHRoYXQgYWxyZWFkeSBleGlzdCwgUmVzb2x2ZS1QU0ZQYXRoIGNhbiBhY2NlcHQgdGhhdCB0aGUgbGFzdCBsZWFmIG15IG5vdCBleGlzdC4NClRoaXMgaXMgaW1wb3J0YW50IHdoZW4gdGVzdGluZyBmb3IgcGF0aHMuDQojPg0KDQojIERldGVjdCB3aGV0aGVyIGF0IHNvbWUgbGV2ZWwgbG9hZGluZyBpbmRpdmlkdWFsIG1vZHVsZSBmaWxlcywgcmF0aGVyIHRoYW4gdGhlIGNvbXBpbGVkIG1vZHVsZSB3YXMgZW5mb3JjZWQNCiRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5JbmRpdmlkdWFsRmlsZXMgLUZhbGxiYWNrICRmYWxzZQ0KaWYgKCTDvm5hbWXDvl9pbXBvcnRJbmRpdmlkdWFsRmlsZXMpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0NCmlmIChUZXN0LVBhdGggKFJlc29sdmUtUFNGUGF0aCAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXC4uXC5naXQiIC1TaW5nbGVJdGVtIC1OZXdDaGlsZCkpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0NCmlmICgiPHdhcyBub3QgY29tcGlsZWQ+IiAtZXEgJzx3YXMgbm90IGNvbXBpbGVkPicpIHsgJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9ICR0cnVlIH0NCg0KZnVuY3Rpb24gSW1wb3J0LU1vZHVsZUZpbGUNCnsNCgk8Iw0KCQkuU1lOT1BTSVMNCgkJCUxvYWRzIGZpbGVzIGludG8gdGhlIG1vZHVsZSBvbiBtb2R1bGUgaW1wb3J0Lg0KDQoJCS5ERVNDUklQVElPTg0KCQkJVGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uLg0KCQkJSXQgc2hvdWxkIGFsd2F5cyBiZSBkb3Rzb3VyY2VkIGl0c2VsZiwgaW4gb3JkZXIgdG8gcHJvcGVyIGZ1bmN0aW9uLg0KDQoJCQlUaGlzIHByb3ZpZGVzIGEgY2VudHJhbCBsb2NhdGlvbiB0byByZWFjdCB0byBmaWxlcyBiZWluZyBpbXBvcnRlZCwgaWYgbGF0ZXIgZGVzaXJlZA0KDQoJCS5QQVJBTUVURVIgUGF0aA0KCQkJVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gbG9hZA0KDQoJCS5FWEFNUExFDQoJCQlQUyBDOlw+IC4gSW1wb3J0LU1vZHVsZUZpbGUgLUZpbGUgJGZ1bmN0aW9uLkZ1bGxOYW1lDQoNCgkJCUltcG9ydHMgdGhlIGZpbGUgc3RvcmVkIGluICRmdW5jdGlvbiBhY2NvcmRpbmcgdG8gaW1wb3J0IHBvbGljeQ0KCSM+DQoJW0NtZGxldEJpbmRpbmcoKV0NCglQYXJhbSAoDQoJCVtzdHJpbmddDQoJCSRQYXRoDQoJKQ0KDQoJJHJlc29sdmVkUGF0aCA9ICRFeGVjdXRpb25Db250ZXh0LlNlc3Npb25TdGF0ZS5QYXRoLkdldFJlc29sdmVkUFNQYXRoRnJvbVBTUGF0aCgkUGF0aCkuUHJvdmlkZXJQYXRoDQoJaWYgKCRkb0RvdFNvdXJjZSkgeyAuICRyZXNvbHZlZFBhdGggfQ0KCWVsc2UgeyAkRXhlY3V0aW9uQ29udGV4dC5JbnZva2VDb21tYW5kLkludm9rZVNjcmlwdCgkZmFsc2UsIChbc2NyaXB0YmxvY2tdOjpDcmVhdGUoW2lvLmZpbGVdOjpSZWFkQWxsVGV4dCgkcmVzb2x2ZWRQYXRoKSkpLCAkbnVsbCwgJG51bGwpIH0NCn0NCg0KI3JlZ2lvbiBMb2FkIGluZGl2aWR1YWwgZmlsZXMNCmlmICgkaW1wb3J0SW5kaXZpZHVhbEZpbGVzKQ0Kew0KCSMgRXhlY3V0ZSBQcmVpbXBvcnQgYWN0aW9ucw0KCWZvcmVhY2ggKCRwYXRoIGluICgmICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEiKSkgew0KCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRwYXRoDQoJfQ0KDQoJIyBJbXBvcnQgYWxsIGludGVybmFsIGZ1bmN0aW9ucw0KCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcZnVuY3Rpb25zIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpDQoJew0KCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQ0KCX0NCg0KCSMgSW1wb3J0IGFsbCBpbnRlcm5hbCBmdW5jdGlvbnMgd2hpY2ggYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBFeHRlbnNpb24gYW5kIHRoZSBNYWluLU1vZHVsZQ0KCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cZnVuY3Rpb25zLnNoYXJlZGludGVybmFsIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpIHsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUNCgl9DQoNCgkjIEltcG9ydCBhbGwgcHVibGljIGZ1bmN0aW9ucw0KCWZvcmVhY2ggKCRmdW5jdGlvbiBpbiAoR2V0LUNoaWxkSXRlbSAiJE1vZHVsZVJvb3RcZnVuY3Rpb25zIiAtRmlsdGVyICIqLnBzMSIgLVJlY3Vyc2UgLUVycm9yQWN0aW9uIElnbm9yZSkpDQoJew0KCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQ0KCX0NCg0KCSMgRXhlY3V0ZSBQb3N0aW1wb3J0IGFjdGlvbnMNCglmb3JlYWNoICgkcGF0aCBpbiAoJiAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xwb3N0aW1wb3J0LnBzMSIpKSB7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJHBhdGgNCgl9DQoNCgkjIEVuZCBpdCBoZXJlLCBkbyBub3QgbG9hZCBjb21waWxlZCBjb2RlIGJlbG93DQoJcmV0dXJuDQp9DQojZW5kcmVnaW9uIExvYWQgaW5kaXZpZHVhbCBmaWxlcw0KDQojcmVnaW9uIExvYWQgY29tcGlsZWQgY29kZQ0KIjxjb21waWxlIGNvZGUgaW50byBoZXJlPiINCiNlbmRyZWdpb24gTG9hZCBjb21waWxlZCBjb2RlAQntAAAACe4AAAAG7wAAAB5TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzbTEG8AAAAFJTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc20xCQYAAAAJ8gAAAAnzAAAAAWwAAAADAAAACfQAAAACAAAAAgAAAAFwAAAABwAAAAkLAAAAAAAAAAAAAAABcQAAAAcAAAAJCwAAAAAAAAAAAAAAAXMAAAAHAAAACQsAAAAAAAAAAAAAAAF0AAAABwAAAAkLAAAAAAAAAAAAAAABeAAAAAcAAAAJCwAAAAAA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ZXMucHMxDQogICAgICBzaGVsbDogcG93ZXJzaGVsbA0KICAgIC0gbmFtZTogVmFsaWRhdGUNCiAgICAgIHJ1bjogLlxidWlsZFx2c3RzLXZhbGlkYXRlLnBzMQ0KICAgICAgc2hlbGw6IHBvd2Vyc2hlbGwNCiAgICAtIG5hbWU6IEJ1aWxkDQogICAgICBydW46IC5cYnVpbGRcdnN0cy1idWlsZC5wczEgLUFwaUtleSAkZW52OkFQSUtFWQ0KICAgICAgc2hlbGw6IHBvd2Vyc2hlbGwNCiAgICAgIGVudjoNCiAgICAgICAgQVBJS0VZOiAke3sgc2VjcmV0cy5BcGlLZXkgfX0NCgEJTQEAAAlOAQAABk8BAAAJYnVpbGQueW1sBlABAAA1U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlwuZ2l0aHViXHdvcmtmbG93c1xidWlsZC55bWwJBgAAAAlSAQAACVMBAAABHAEAAA8AAAAGVAEAAM8CIyBvbjogW3B1bGxfcmVxdWVzdF0NCm9uOg0KICB3b3JrZmxvd19kaXNwYXRjaDoNCg0Kam9iczoNCiAgdmFsaWRhdGU6DQoNCiAgICBydW5zLW9uOiB3aW5kb3dzLTIwMTkNCg0KICAgIHN0ZXBzOg0KICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2MQ0KICAgIC0gbmFtZTogSW5zdGFsbCBQcmVyZXF1aXNpdGVzDQogICAgICBydW46IC5cYnVpbGRcdnN0cy1wcmVyZXF1aXNpdGVzLnBzMQ0KICAgICAgc2hlbGw6IHBvd2Vyc2hlbGwNCiAgICAtIG5hbWU6IFZhbGlkYXRlDQogICAgICBydW46IC5cYnVpbGRcdnN0cy12YWxpZGF0ZS5wczENCiAgICAgIHNoZWxsOiBwb3dlcnNoZWxsDQoBCVUBAAAJVgEAAAZXAQAADHZhbGlkYXRlLnltbAZYAQAAOFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cLmdpdGh1Ylx3b3JrZmxvd3NcdmFsaWRhdGUueW1sCQYAAAAJWgEAAAlbAQAAASIBAAAPAAAABlwBAADuAiMgYmluIGZvbGRlcg0KDQpUaGUgYmluIGZvbGRlciBleGlzdHMgdG8gc3RvcmUgYmluYXJ5IGRhdGEuIEFuZCBzY3JpcHRzIHJlbGF0ZWQgdG8gdGhlIHR5cGUgc3lzdGVtLg0KDQpUaGlzIG1heSBpbmNsdWRlIHlvdXIgb3duIEMjLWJhc2VkIGxpYnJhcnksIHRoaXJkIHBhcnR5IGxpYnJhcmllcyB5b3Ugd2FudCB0byBpbmNsdWRlICh3YXRjaCB0aGUgbGljZW5zZSEpLCBvciBhIHNjcmlwdCBkZWNsYXJpbmcgdHlwZSBhY2NlbGVyYXRvcnMgKGVmZmVjdGl2ZWx5IGFsaWFzZXMgZm9yIC5ORVQgdHlwZXMpDQoNCkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFR5cGUgQWNjZWxlcmF0b3JzLCBzZWUgdGhlIGhlbHAgb24gU2V0LVBTRlR5cGVBbGlhcwEJXQEAAAleAQAABl8BAAAJcmVhZG1lLm1kBmABAABBU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGJpblxyZWFkbWUubWQJBgAAAAliAQAACWMBAAABIwEAAA8AAAAGZAEAAKUBVE9QSUMNCglhYm91dF/Dvm5hbWXDvg0KCQ0KU0hPUlQgREVTQ1JJUFRJT04NCglFeHBsYWlucyBob3cgdG8gdXNlIHRoZSDDvm5hbWXDviBwb3dlcnNoZWxsIG1vZHVsZQ0KCQ0KTE9ORyBERVNDUklQVElPTg0KCTxJbnNlcnQgQ29udGVudCBoZXJlPg0KDQpLRVlXT1JEUw0KCcO+bmFtZcO+AQllAQAACWYBAAAGZwEAABdhYm91dF/Dvm5hbWXDvi5oZWxwLnR4dAZoAQAAUVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxlbi11c1xhYm91dF/Dvm5hbWXDvi5oZWxwLnR4dAkGAAAACWoBAAAJawEAAAEkAQAADwAAAAZsAQAAnQEjIFRoaXMgaXMgd2hlcmUgdGhlIHN0cmluZ3MgZ28sIHRoYXQgYXJlIHdyaXR0ZW4gYnkNCiMgV3JpdGUtUFNGTWVzc2FnZSwgU3RvcC1QU0ZGdW5jdGlvbiBvciB0aGUgUFNGcmFtZXdvcmsgdmFsaWRhdGlvbiBzY3JpcHRibG9ja3MNCkB7DQoJJ2tleScgPSAnVmFsdWUnDQp9AQltAQAACW4BAAAGbwEAAAxzdHJpbmdzLnBzZDEGcAEAAEZTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cZW4tdXNcc3RyaW5ncy5wc2QxCQYAAAAJcgEAAAlzAQAAASUBAAAPAAAABnQBAADSASMgRnVuY3Rpb25zDQoNClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSB0aGUgZnVuY3Rpb25zIGdvLg0KDQpEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG1vZHVsZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViZGl2aWRlIHRoZW0gaW50byBzdWJmb2xkZXJzLg0KDQpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseQEJdQEAAAl2AQAABncBAAAJcmVhZG1lLm1kBngBAABHU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGZ1bmN0aW9uc1xyZWFkbWUubWQJBgAAAAl6AQAACXsBAAABJgEAAA8AAAAGfAEAAPEOZnVuY3Rpb24gUmVnaXN0ZXItw75mdW5jdGlvblByZWZpeMO+U2VjdXJlVmF1bHQgew0KICAgIDwjDQogICAgLlNZTk9QU0lTDQogICAgUmVnaXN0ZXJzIGEgbmV3IFNlY3JldHZhdWx0IG9mIHR5cGUgw75uYW1lw74uDQoNCiAgICAuREVTQ1JJUFRJT04NCiAgICBSZWdpc3RlcnMgYSBuZXcgU2VjcmV0dmF1bHQgb2YgdHlwZSDDvm5hbWXDvi4NCg0KICAgICNUT0RPIEFkZCBwYXJhbWV0ZXIgZGVzY3JpcHRpb24NCg0KICAgIC5OT1RFUw0KICAgIEdlbmVyYWwgbm90ZXMNCiAgICAjPg0KICAgIFtDbWRsZXRCaW5kaW5nKFN1cHBvcnRzU2hvdWxkUHJvY2VzcyldDQogICAgcGFyYW0gKA0KDQogICAgICAgIFtwYXJhbWV0ZXIobWFuZGF0b3J5ID0gJHRydWUsIFBhcmFtZXRlclNldE5hbWUgPSAiY21kTGluZSIpXQ0KICAgICAgICBbc3RyaW5nXSRWYXVsdE5hbWUNCiAgICAgICAgIyBUT0RPIGFkZCB5b3VyIHNwZWNpZmljIHBhcmFtZXRlcnMNCiAgICApDQogICAgIyBJbiBvcmRlciB0byByZWdpc3RlciBhIHZhdWx0IHlvdSBuZWVkIHRoZSBtb2R1bGUgbmFtZS4gRm9yIGRldiBwdXJwb3Nlcw0KICAgICMgdGhpcyBjb2RlIChzZWUgY29uZmlndXJhdGlvbi5wczEpIGVuYWJsZXMgdGhlIGRldGVjdGlvbiBpZiB0aGUgbW9kdWxlIGlzIGluc3RhbGxlZA0KICAgICMgb3IgdGhlIFBTRDEgZmlsZSBpcyBpbXBvcnRlZCBkaXJlY3RseS4NCiAgICAkbXlNb2R1bGVQYXRoID0gIiRNb2R1bGVSb290XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSINCiAgICAkcHNkRGF0YSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgJG15TW9kdWxlUGF0aA0KICAgICRyZWdpc3RlclBhcmFtID0gQHsNCiAgICAgICAgTW9kdWxlTmFtZSAgICAgID0gR2V0LVBTRkNvbmZpZ1ZhbHVlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkludGVyQWN0aXZlUmVnaXN0ZXIubW9kdWxlcGF0aCcNCiAgICAgICAgTmFtZSAgICAgICAgICAgID0gJFZhdWx0TmFtZQ0KICAgICAgICBWYXVsdFBhcmFtZXRlcnMgPSAkUFNCb3VuZFBhcmFtZXRlcnMgfCBDb252ZXJ0VG8tUFNGSGFzaHRhYmxlIC1Jbmhlcml0IC1FeGNsdWRlIEAoDQogICAgICAgICAgICAjIFRPRE8gSW5jbHVkZSBhbGwgZnVuY3Rpb24gcGFyYW1ldGVyIG5hbWVzIHdoaWNoIHNob3VsZCBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgVmF1bHQtUGFyYW1ldGVycw0KICAgICAgICAgICAgIyAnU2VydmVyJw0KICAgICAgICAgICAgIyAnUG9ydCcNCiAgICAgICAgICAgICMgJ0RhdGFiYXNlJw0KICAgICAgICAgICAgIyAnVXNlck5hbWUnDQogICAgICAgICkNCiAgICB9DQogICAgJHJlZ2lzdGVyUGFyYW0uVmF1bHRQYXJhbWV0ZXJzLnZlcnNpb24gPSAkcHNkRGF0YS5Nb2R1bGVWZXJzaW9uDQogICAgaWYgKCRQU0NtZGxldC5TaG91bGRQcm9jZXNzKCRuYW1lKSkgew0KICAgICAgICBXcml0ZS1QU0ZNZXNzYWdlICJSZWdpc3RlcmluZyBWYXVsdCAkdmF1bHQgd2l0aCBQYXJhbSAkKCRyZWdpc3RlclBhcmFtfENvbnZlcnRUby1Kc29uIC1Db21wcmVzcykiDQogICAgICAgIFJlZ2lzdGVyLVNlY3JldFZhdWx0IEByZWdpc3RlclBhcmFtDQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0ICJXaGF0SWYgdXNlZCwgbm8gdmF1bHQgcmVnaXN0ZXJlZC4iDQogICAgICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgIllvdSBtYXkgcmVnaXN0ZXIgdGhlIGNob3NlbiB2YXVsdCBsYXRlciB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpgcmBuQHJlZ2lzdGVyUGFyYW09JCgkcmVnaXN0ZXJQYXJhbXxDb252ZXJ0VG8tTWV0YWRhdGEgLUFzSGFzaHRhYmxlKWByYG5SZWdpc3Rlci3DvmZ1bmN0aW9uUHJlZml4w75TZWN1cmVWYXVsdCBAcmVnaXN0ZXJQYXJhbSINCiAgICB9DQp9AQl9AQAACX4BAAAGfwEAACpSZWdpc3Rlci3DvmZ1bmN0aW9uUHJlZml4w75TZWN1cmVWYXVsdC5wczEGgAEAAGhTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cZnVuY3Rpb25zXFJlZ2lzdGVyLcO+ZnVuY3Rpb25QcmVmaXjDvlNlY3VyZVZhdWx0LnBzMQkGAAAACYIBAAAJgwEAAAEnAQAAAQAAAAmEAQAABoUBAAAOY29uZmlndXJhdGlvbnMGhgEAAEtTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcY29uZmlndXJhdGlvbnMJBgAAAAmIAQAACYkBAAABKAEAAAEAAAAJigEAAAaLAQAACWZ1bmN0aW9ucwaMAQAARlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbFxmdW5jdGlvbnMJBgAAAAmOAQAACY8BAAABKQEAAAEAAAAJkAEAAAaRAQAADHNjcmlwdGJsb2NrcwaSAQAASVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbFxzY3JpcHRibG9ja3MJBgAAAAmUAQAACZUBAAABKgEAAAEAAAAJlgEAAAaXAQAAB3NjcmlwdHMGmAEAAERTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcc2NyaXB0cwkGAAAACZoBAAAJmwEAAAErAQAAAQAAAAmcAQAABp0BAAAEdGVwcAaeAQAAQVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbFx0ZXBwCQYAAAAJoAEAAAmhAQAAASwBAAABAAAACaIBAAAGowEAAANiaW4GpAEAAFtTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cYmluCQYAAAAJpgEAAAmnAQAAAS0BAAABAAAACagBAAAGqQEAAAVlbi11cwaqAQAAXVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxlbi11cwkGAAAACawBAAAJrQEAAAEuAQAAAQAAAAmuAQAABq8BAAAJZnVuY3Rpb25zBrABAABhU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9ucwkGAAAACbIBAAAJswEAAAEvAQAAAQAAAAm0AQAABrUBAAAYZnVuY3Rpb25zLnNoYXJlZGludGVybmFsBrYBAABwU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbAkGAAAACbgBAAAJuQEAAAEwAQAAAQAAAAm6AQAABrsBAAAIaW50ZXJuYWwGvAEAAGBTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWwJBgAAAAm+AQAACb8BAAABMQEAAAEAAAAJwAEAAAbBAQAABXRlc3RzBsIBAABdU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHRlc3RzCQYAAAAJxAEAAAnFAQAAATIBAAABAAAACcYBAAAGxwEAAAN4bWwGyAEAAFtTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25ceG1sCQYAAAAJygEAAAnLAQAAATMBAAAPAAAABswBAABuIyBDaGFuZ2Vsb2cNCiMjIDEuMC4wICjDviFkeW5hbWljc2NyaXB0XzM5NDQzMiHDvikNCiAtIE5ldzogU29tZSBTdHVmZg0KIC0gVXBkOiBNb2FyIFN0dWZmDQogLSBGaXg6IE11Y2ggU3R1ZmYBCc0BAAAJzgEAAAbPAQAADGNoYW5nZWxvZy5tZAbQAQAAZFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxjaGFuZ2Vsb2cubWQJBgAAAAnSAQAACdMBAAABNAEAAA8AAAAG1AEAAI4IIyBQU0ZNb2R1bGUgZ3VpZGFuY2UNCg0KVGhpcyBpcyBhIGZpbmlzaGVkIG1vZHVsZSBsYXlvdXQgb3B0aW1pemVkIGZvciBpbXBsZW1lbnRpbmcgdGhlIFBTRnJhbWV3b3JrLg0KDQpJZiB5b3UgZG9uJ3QgY2FyZSB0byBkZWFsIHdpdGggdGhlIGRldGFpbHMsIHRoaXMgaXMgd2hhdCB5b3UgbmVlZCB0byBkbyB0byBnZXQgc3RhcnRlZCBzZWVpbmcgcmVzdWx0czoNCg0KIC0gQWRkIHRoZSBmdW5jdGlvbnMgeW91IHdhbnQgdG8gcHVibGlzaCB0byBgL2Z1bmN0aW9ucy9gDQogLSBVcGRhdGUgdGhlIGBGdW5jdGlvbnNUb0V4cG9ydGAgbm9kZSBpbiB0aGUgbW9kdWxlIG1hbmlmZXN0ICjDvm5hbWXDvi5wc2QxKS4gQWxsIGZ1bmN0aW9ucyB5b3Ugd2FudCB0byBwdWJsaXNoIHNob3VsZCBiZSBpbiBhIGxpc3QuDQogLSBBZGQgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyB0aGUgdXNlciBzaG91bGQgbm90IHNlZSB0byBgL2ludGVybmFsL2Z1bmN0aW9ucy9gDQogDQogIyMgUGF0aCBXYXJuaW5nDQogDQogPiBJZiB5b3Ugd2FudCB5b3VyIG1vZHVsZSB0byBiZSBjb21wYXRpYmxlIHdpdGggTGludXggYW5kIE1hY09TLCBrZWVwIGluIG1pbmQgdGhhdCB0aG9zZSBPUyBhcmUgY2FzZSBzZW5zaXRpdmUgZm9yIHBhdGhzIGFuZCBmaWxlcy4NCiANCiBgSW1wb3J0LU1vZHVsZUZpbGVgIGlzIHByZWNvbmZpZ3VyZWQgdG8gcmVzb2x2ZSB0aGUgcGF0aCBvZiB0aGUgZmlsZXMgc3BlY2lmaWVkLCBzbyBpdCB3aWxsIHJlbGlhYmx5IGNvbnZlcnQgd2VpcmQgcGF0aCBub3RhdGlvbnMgdGhlIHN5c3RlbSBjYW4ndCBoYW5kbGUuDQogQ29udGVudCBpbXBvcnRlZCB0aHJvdWdoIHRoYXQgY29tbWFuZCB0aHVzIG5lZWQgbm90IG1pbmQgdGhlIHBhdGggc2VwYXJhdG9yLg0KIElmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB5b3VyIGNvZGUgdG9vIHdpbGwgc3Vydml2ZSBPUy1zcGVjaWZpYyBwYXRoIG5vdGF0aW9ucywgZ2V0IHVzZWQgdG8gdXNpbmcgYFJlc29sdmUtcGF0aGAgb3IgdGhlIG1vcmUgcG93ZXJmdWwgYFJlc29sdmUtUFNGUGF0aGAuAQnVAQAACdYBAAAG1wEAAAlyZWFkbWUubWQG2AEAAGFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25ccmVhZG1lLm1kCQYAAAAJ2gEAAAnbAQAAATUBAAAPAAAABtwBAACeEkB7DQoJIyBTY3JpcHQgbW9kdWxlIG9yIGJpbmFyeSBtb2R1bGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYW5pZmVzdA0KCVJvb3RNb2R1bGUgICAgICAgID0gJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNtMScNCg0KCSMgVmVyc2lvbiBudW1iZXIgb2YgdGhpcyBtb2R1bGUuDQoJTW9kdWxlVmVyc2lvbiA9ICcxLjAuMCcNCg0KCSMgSUQgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIG1vZHVsZQ0KCUdVSUQgPSAnw74hZ3VpZEV4dGVuc2lvbiHDvicNCg0KCSMgQXV0aG9yIG9mIHRoaXMgbW9kdWxlDQoJQXV0aG9yID0gJ8O+YXV0aG9yw74nDQoNCgkjIENvbXBhbnkgb3IgdmVuZG9yIG9mIHRoaXMgbW9kdWxlDQoJQ29tcGFueU5hbWUgPSAnw75jb21wYW55w74nDQoNCgkjIENvcHlyaWdodCBzdGF0ZW1lbnQgZm9yIHRoaXMgbW9kdWxlDQoJQ29weXJpZ2h0ID0gJ0NvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+Jw0KDQoJIyBEZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGlzIG1vZHVsZQ0KCURlc2NyaXB0aW9uID0gJ8O+ZGVzY3JpcHRpb27DvicNCg0KCSMgTWluaW11bSB2ZXJzaW9uIG9mIHRoZSBXaW5kb3dzIFBvd2VyU2hlbGwgZW5naW5lIHJlcXVpcmVkIGJ5IHRoaXMgbW9kdWxlDQoJUG93ZXJTaGVsbFZlcnNpb24gPSAnNS4wJw0KDQoJIyBNb2R1bGVzIHRoYXQgbXVzdCBiZSBpbXBvcnRlZCBpbnRvIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgcHJpb3IgdG8gaW1wb3J0aW5nDQoJIyB0aGlzIG1vZHVsZQ0KCVJlcXVpcmVkTW9kdWxlcyA9IEAoDQoJCUB7IE1vZHVsZU5hbWU9J1BTRnJhbWV3b3JrJzsgTW9kdWxlVmVyc2lvbj0nw74hcHNmdmVyc2lvbiHDvicgfQ0KCSkNCg0KCSMgQXNzZW1ibGllcyB0aGF0IG11c3QgYmUgbG9hZGVkIHByaW9yIHRvIGltcG9ydGluZyB0aGlzIG1vZHVsZQ0KCSMgUmVxdWlyZWRBc3NlbWJsaWVzID0gQCgnYmluXMO+bmFtZcO+LmRsbCcpDQoNCgkjIFR5cGUgZmlsZXMgKC5wczF4bWwpIHRvIGJlIGxvYWRlZCB3aGVuIGltcG9ydGluZyB0aGlzIG1vZHVsZQ0KCSMgVHlwZXNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uVHlwZXMucHMxeG1sJykNCg0KCSMgRm9ybWF0IGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUNCgkjIEZvcm1hdHNUb1Byb2Nlc3MgPSBAKCd4bWxcw75uYW1lw74uRm9ybWF0LnBzMXhtbCcpDQoNCgkjIEZ1bmN0aW9ucyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCUZ1bmN0aW9uc1RvRXhwb3J0ID0gJycNCg0KCSMgQ21kbGV0cyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCUNtZGxldHNUb0V4cG9ydCA9ICcnDQoNCgkjIFZhcmlhYmxlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCVZhcmlhYmxlc1RvRXhwb3J0ID0gJycNCg0KCSMgQWxpYXNlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCUFsaWFzZXNUb0V4cG9ydCA9ICcnDQoNCgkjIExpc3Qgb2YgYWxsIG1vZHVsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQ0KCU1vZHVsZUxpc3QgPSBAKCkNCg0KCSMgTGlzdCBvZiBhbGwgZmlsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQ0KCUZpbGVMaXN0ID0gQCgpDQoNCgkjIFByaXZhdGUgZGF0YSB0byBwYXNzIHRvIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGluIE1vZHVsZVRvUHJvY2Vzcy4gVGhpcyBtYXkgYWxzbyBjb250YWluIGEgUFNEYXRhIGhhc2h0YWJsZSB3aXRoIGFkZGl0aW9uYWwgbW9kdWxlIG1ldGFkYXRhIHVzZWQgYnkgUG93ZXJTaGVsbC4NCglQcml2YXRlRGF0YSA9IEB7DQoNCgkJI1N1cHBvcnQgZm9yIFBvd2VyU2hlbGxHZXQgZ2FsbGVyaWVzLg0KCQlQU0RhdGEgPSBAew0KDQoJCQkjIFRhZ3MgYXBwbGllZCB0byB0aGlzIG1vZHVsZS4gVGhlc2UgaGVscCB3aXRoIG1vZHVsZSBkaXNjb3ZlcnkgaW4gb25saW5lIGdhbGxlcmllcy4NCgkJCSMgVGFncyA9IEAoKQ0KDQoJCQkjIEEgVVJMIHRvIHRoZSBsaWNlbnNlIGZvciB0aGlzIG1vZHVsZS4NCgkJCSMgTGljZW5zZVVyaSA9ICcnDQoNCgkJCSMgQSBVUkwgdG8gdGhlIG1haW4gd2Vic2l0ZSBmb3IgdGhpcyBwcm9qZWN0Lg0KCQkJIyBQcm9qZWN0VXJpID0gJycNCg0KCQkJIyBBIFVSTCB0byBhbiBpY29uIHJlcHJlc2VudGluZyB0aGlzIG1vZHVsZS4NCgkJCSMgSWNvblVyaSA9ICcnDQoNCgkJCSMgUmVsZWFzZU5vdGVzIG9mIHRoaXMgbW9kdWxlDQoJCQkjIFJlbGVhc2VOb3RlcyA9ICcnDQoNCgkJfSAjIEVuZCBvZiBQU0RhdGEgaGFzaHRhYmxlDQoNCgl9ICMgRW5kIG9mIFByaXZhdGVEYXRhIGhhc2h0YWJsZQ0KfQEJ3QEAAAneAQAABt8BAAAoU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNkMQbgAQAAgAFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNkMQkGAAAACeIBAAAJ4wEAAAE2AQAADwAAAAbkAQAA1Rokc2NyaXB0Ok1vZHVsZVJvb3QgPSAkUFNTY3JpcHRSb290DQokc2NyaXB0Ok1vZHVsZVZlcnNpb24gPSAoSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXMO+bmFtZcO+LnBzZDEiKS5Nb2R1bGVWZXJzaW9uDQoNCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBkb3Rzb3VyY2luZyB3YXMgZW5mb3JjZWQNCiRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5Eb0RvdFNvdXJjZSAtRmFsbGJhY2sgJGZhbHNlDQppZiAoJMO+bmFtZcO+X2RvdHNvdXJjZW1vZHVsZSkgeyAkc2NyaXB0OmRvRG90U291cmNlID0gJHRydWUgfQ0KDQo8Iw0KTm90ZSBvbiBSZXNvbHZlLVBhdGg6DQpBbGwgcGF0aHMgYXJlIHNlbnQgdGhyb3VnaCBSZXNvbHZlLVBhdGgvUmVzb2x2ZS1QU0ZQYXRoIGluIG9yZGVyIHRvIGNvbnZlcnQgdGhlbSB0byB0aGUgY29ycmVjdCBwYXRoIHNlcGFyYXRvci4NClRoaXMgYWxsb3dzIGlnbm9yaW5nIHBhdGggc2VwYXJhdG9ycyB0aHJvdWdob3V0IHRoZSBpbXBvcnQgc2VxdWVuY2UsIHdoaWNoIGNvdWxkIG90aGVyd2lzZSBjYXVzZSB0cm91YmxlIGRlcGVuZGluZyBvbiBPUy4NClJlc29sdmUtUGF0aCBjYW4gb25seSBiZSB1c2VkIGZvciBwYXRocyB0aGF0IGFscmVhZHkgZXhpc3QsIFJlc29sdmUtUFNGUGF0aCBjYW4gYWNjZXB0IHRoYXQgdGhlIGxhc3QgbGVhZiBteSBub3QgZXhpc3QuDQpUaGlzIGlzIGltcG9ydGFudCB3aGVuIHRlc3RpbmcgZm9yIHBhdGhzLg0KIz4NCg0KIyBEZXRlY3Qgd2hldGhlciBhdCBzb21lIGxldmVsIGxvYWRpbmcgaW5kaXZpZHVhbCBtb2R1bGUgZmlsZXMsIHJhdGhlciB0aGFuIHRoZSBjb21waWxlZCBtb2R1bGUgd2FzIGVuZm9yY2VkDQokaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuSW5kaXZpZHVhbEZpbGVzIC1GYWxsYmFjayAkZmFsc2UNCmlmICgkw75uYW1lw75faW1wb3J0SW5kaXZpZHVhbEZpbGVzKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQppZiAoVGVzdC1QYXRoIChSZXNvbHZlLVBTRlBhdGggLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVwuLlwuZ2l0IiAtU2luZ2xlSXRlbSAtTmV3Q2hpbGQpKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQppZiAoIjx3YXMgbm90IGNvbXBpbGVkPiIgLWVxICc8d2FzIG5vdCBjb21waWxlZD4nKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQoNCmZ1bmN0aW9uIEltcG9ydC1Nb2R1bGVGaWxlDQp7DQoJPCMNCgkJLlNZTk9QU0lTDQoJCQlMb2FkcyBmaWxlcyBpbnRvIHRoZSBtb2R1bGUgb24gbW9kdWxlIGltcG9ydC4NCg0KCQkuREVTQ1JJUFRJT04NCgkJCVRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4NCgkJCUl0IHNob3VsZCBhbHdheXMgYmUgZG90c291cmNlZCBpdHNlbGYsIGluIG9yZGVyIHRvIHByb3BlciBmdW5jdGlvbi4NCg0KCQkJVGhpcyBwcm92aWRlcyBhIGNlbnRyYWwgbG9jYXRpb24gdG8gcmVhY3QgdG8gZmlsZXMgYmVpbmcgaW1wb3J0ZWQsIGlmIGxhdGVyIGRlc2lyZWQNCg0KCQkuUEFSQU1FVEVSIFBhdGgNCgkJCVRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGxvYWQNCg0KCQkuRVhBTVBMRQ0KCQkJUFMgQzpcPiAuIEltcG9ydC1Nb2R1bGVGaWxlIC1GaWxlICRmdW5jdGlvbi5GdWxsTmFtZQ0KDQoJCQlJbXBvcnRzIHRoZSBmaWxlIHN0b3JlZCBpbiAkZnVuY3Rpb24gYWNjb3JkaW5nIHRvIGltcG9ydCBwb2xpY3kNCgkjPg0KCVtDbWRsZXRCaW5kaW5nKCldDQoJUGFyYW0gKA0KCQlbc3RyaW5nXQ0KCQkkUGF0aA0KCSkNCg0KCSRyZXNvbHZlZFBhdGggPSAkRXhlY3V0aW9uQ29udGV4dC5TZXNzaW9uU3RhdGUuUGF0aC5HZXRSZXNvbHZlZFBTUGF0aEZyb21QU1BhdGgoJFBhdGgpLlByb3ZpZGVyUGF0aA0KCWlmICgkZG9Eb3RTb3VyY2UpIHsgLiAkcmVzb2x2ZWRQYXRoIH0NCgllbHNlIHsgJEV4ZWN1dGlvbkNvbnRleHQuSW52b2tlQ29tbWFuZC5JbnZva2VTY3JpcHQoJGZhbHNlLCAoW3NjcmlwdGJsb2NrXTo6Q3JlYXRlKFtpby5maWxlXTo6UmVhZEFsbFRleHQoJHJlc29sdmVkUGF0aCkpKSwgJG51bGwsICRudWxsKSB9DQp9DQoNCiNyZWdpb24gTG9hZCBpbmRpdmlkdWFsIGZpbGVzDQppZiAoJGltcG9ydEluZGl2aWR1YWxGaWxlcykNCnsNCgkjIEV4ZWN1dGUgUHJlaW1wb3J0IGFjdGlvbnMNCglmb3JlYWNoICgkcGF0aCBpbiAoJiAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xwcmVpbXBvcnQucHMxIikpIHsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkcGF0aA0KCX0NCg0KCSMgSW1wb3J0IGFsbCBpbnRlcm5hbCBmdW5jdGlvbnMNCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKQ0KCXsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUNCgl9DQoNCgkjIEltcG9ydCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zIHdoaWNoIGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUgRXh0ZW5zaW9uIGFuZCB0aGUgTWFpbi1Nb2R1bGUNCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGZ1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbCIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKSB7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lDQoJfQ0KDQoJIyBJbXBvcnQgYWxsIHB1YmxpYyBmdW5jdGlvbnMNCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGZ1bmN0aW9ucyIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKQ0KCXsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUNCgl9DQoNCgkjIEV4ZWN1dGUgUG9zdGltcG9ydCBhY3Rpb25zDQoJZm9yZWFjaCAoJHBhdGggaW4gKCYgIiRNb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEiKSkgew0KCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRwYXRoDQoJfQ0KDQoJIyBFbmQgaXQgaGVyZSwgZG8gbm90IGxvYWQgY29tcGlsZWQgY29kZSBiZWxvdw0KCXJldHVybg0KfQ0KI2VuZHJlZ2lvbiBMb2FkIGluZGl2aWR1YWwgZmlsZXMNCg0KI3JlZ2lvbiBMb2FkIGNvbXBpbGVkIGNvZGUNCiI8Y29tcGlsZSBjb2RlIGludG8gaGVyZT4iDQojZW5kcmVnaW9uIExvYWQgY29tcGlsZWQgY29kZQEJ5QEAAAnmAQAABucBAAAoU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNtMQboAQAAgAFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24ucHNtMQkGAAAACeoBAAAJ6wEAAAE4AQAAAQAAAAnsAQAABu0BAAAJZnVuY3Rpb25zBu4BAABDU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHRlc3RzXGZ1bmN0aW9ucwkGAAAACfABAAAJ8QEAAAE5AQAAAQAAAAnyAQAABvMBAAAHZ2VuZXJhbAb0AQAAQVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0c1xnZW5lcmFsCQYAAAAJ9gEAAAn3AQAAAToBAAAPAAAABvgBAACpG3BhcmFtICgNCgkkVGVzdEdlbmVyYWwgPSAkdHJ1ZSwNCgkNCgkkVGVzdEZ1bmN0aW9ucyA9ICR0cnVlLA0KCQ0KCVtWYWxpZGF0ZVNldCgnTm9uZScsICdOb3JtYWwnLCAnRGV0YWlsZWQnLCAnRGlhZ25vc3RpYycpXQ0KCVtBbGlhcygnU2hvdycpXQ0KCSRPdXRwdXQgPSAiTm9uZSIsDQoJDQoJJEluY2x1ZGUgPSAiKiIsDQoJDQoJJEV4Y2x1ZGUgPSAiIg0KKQ0KDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlN0YXJ0aW5nIFRlc3RzIg0KDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkltcG9ydGluZyBNb2R1bGUiDQoNCiRnbG9iYWw6dGVzdHJvb3QgPSAkUFNTY3JpcHRSb290DQokZ2xvYmFsOl9fcGVzdGVyX2RhdGEgPSBAeyB9DQoNClJlbW92ZS1Nb2R1bGUgw75uYW1lw74gLUVycm9yQWN0aW9uIElnbm9yZQ0KSW1wb3J0LU1vZHVsZSAiJFBTU2NyaXB0Um9vdFwuLlzDvm5hbWXDvi5wc2QxIg0KSW1wb3J0LU1vZHVsZSAiJFBTU2NyaXB0Um9vdFwuLlzDvm5hbWXDvi5wc20xIiAtRm9yY2UNCg0KIyBOZWVkIHRvIGltcG9ydCBleHBsaWNpdGx5IHNvIHdlIGNhbiB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gY2xhc3MNCkltcG9ydC1Nb2R1bGUgUGVzdGVyDQoNCsO+IXRlc3Rmb2xkZXIhw74NCg0KJHRvdGFsRmFpbGVkID0gMA0KJHRvdGFsUnVuID0gMA0KDQokdGVzdHJlc3VsdHMgPSBAKCkNCiRjb25maWcgPSBbUGVzdGVyQ29uZmlndXJhdGlvbl06OkRlZmF1bHQNCsO+IXBlc3RlcmNvbmZpZyHDvg0KDQojcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzDQppZiAoJFRlc3RHZW5lcmFsKQ0Kew0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiTW9kdWxlcyBpbXBvcnRlZCwgcHJvY2VlZGluZyB3aXRoIGdlbmVyYWwgdGVzdHMiDQoJZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRQU1NjcmlwdFJvb3RcZ2VuZXJhbCIgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5UZXN0cy5wczEiKSkNCgl7DQoJCWlmICgkZmlsZS5OYW1lIC1ub3RsaWtlICRJbmNsdWRlKSB7IGNvbnRpbnVlIH0NCgkJaWYgKCRmaWxlLk5hbWUgLWxpa2UgJEV4Y2x1ZGUpIHsgY29udGludWUgfQ0KDQoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyA8Yz0nZW0nPiQoJGZpbGUuTmFtZSk8L2M+Ig0KCQkkY29uZmlnLlRlc3RSZXN1bHQuT3V0cHV0UGF0aCA9IEpvaW4tUGF0aCAiJFBTU2NyaXB0Um9vdFwuLlwuLlxUZXN0UmVzdWx0cyIgIlRFU1QtJCgkZmlsZS5CYXNlTmFtZSkueG1sIg0KCQkkY29uZmlnLlJ1bi5QYXRoID0gJGZpbGUuRnVsbE5hbWUNCgkJJGNvbmZpZy5SdW4uUGFzc1RocnUgPSAkdHJ1ZQ0KCQkkY29uZmlnLk91dHB1dC5WZXJib3NpdHkgPSAkT3V0cHV0DQogICAgCSRyZXN1bHRzID0gSW52b2tlLVBlc3RlciAtQ29uZmlndXJhdGlvbiAkY29uZmlnDQoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpDQoJCXsNCgkJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQNCgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50DQoJCQkkcmVzdWx0LlRlc3RzIHwgV2hlcmUtT2JqZWN0IFJlc3VsdCAtbmUgJ1Bhc3NlZCcgfCBGb3JFYWNoLU9iamVjdCB7DQoJCQkJJHRlc3RyZXN1bHRzICs9IFtwc2N1c3RvbW9iamVjdF1Aew0KCQkJCQlCbG9jayAgICA9ICRfLkJsb2NrDQoJCQkJCU5hbWUJID0gIkl0ICQoJF8uTmFtZSkiDQoJCQkJCVJlc3VsdCAgID0gJF8uUmVzdWx0DQoJCQkJCU1lc3NhZ2UgID0gJF8uRXJyb3JSZWNvcmQuRGlzcGxheUVycm9yTWVzc2FnZQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCn0NCiNlbmRyZWdpb24gUnVuIEdlbmVyYWwgVGVzdHMNCg0KJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyIHwgT3V0LUhvc3QNCg0KI3JlZ2lvbiBUZXN0IENvbW1hbmRzDQppZiAoJFRlc3RGdW5jdGlvbnMpDQp7DQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJQcm9jZWVkaW5nIHdpdGggaW5kaXZpZHVhbCB0ZXN0cyINCglmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJFBTU2NyaXB0Um9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIipUZXN0cy5wczEiKSkNCgl7DQoJCWlmICgkZmlsZS5OYW1lIC1ub3RsaWtlICRJbmNsdWRlKSB7IGNvbnRpbnVlIH0NCgkJaWYgKCRmaWxlLk5hbWUgLWxpa2UgJEV4Y2x1ZGUpIHsgY29udGludWUgfQ0KCQkNCgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgU2lnbmlmaWNhbnQgLU1lc3NhZ2UgIiAgRXhlY3V0aW5nICQoJGZpbGUuTmFtZSkiDQoJCSRjb25maWcuVGVzdFJlc3VsdC5PdXRwdXRQYXRoID0gSm9pbi1QYXRoICIkUFNTY3JpcHRSb290XC4uXC4uXFRlc3RSZXN1bHRzIiAiVEVTVC0kKCRmaWxlLkJhc2VOYW1lKS54bWwiDQoJCSRjb25maWcuUnVuLlBhdGggPSAkZmlsZS5GdWxsTmFtZQ0KCQkkY29uZmlnLlJ1bi5QYXNzVGhydSA9ICR0cnVlDQoJCSRjb25maWcuT3V0cHV0LlZlcmJvc2l0eSA9ICRPdXRwdXQNCiAgICAJJHJlc3VsdHMgPSBJbnZva2UtUGVzdGVyIC1Db25maWd1cmF0aW9uICRjb25maWcNCgkJZm9yZWFjaCAoJHJlc3VsdCBpbiAkcmVzdWx0cykNCgkJew0KCQkJJHRvdGFsUnVuICs9ICRyZXN1bHQuVG90YWxDb3VudA0KCQkJJHRvdGFsRmFpbGVkICs9ICRyZXN1bHQuRmFpbGVkQ291bnQNCgkJCSRyZXN1bHQuVGVzdHMgfCBXaGVyZS1PYmplY3QgUmVzdWx0IC1uZSAnUGFzc2VkJyB8IEZvckVhY2gtT2JqZWN0IHsNCgkJCQkkdGVzdHJlc3VsdHMgKz0gW3BzY3VzdG9tb2JqZWN0XUB7DQoJCQkJCUJsb2NrICAgID0gJF8uQmxvY2sNCgkJCQkJTmFtZQkgPSAiSXQgJCgkXy5OYW1lKSINCgkJCQkJUmVzdWx0ICAgPSAkXy5SZXN1bHQNCgkJCQkJTWVzc2FnZSAgPSAkXy5FcnJvclJlY29yZC5EaXNwbGF5RXJyb3JNZXNzYWdlDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KI2VuZHJlZ2lvbiBUZXN0IENvbW1hbmRzDQoNCiR0ZXN0cmVzdWx0cyB8IFNvcnQtT2JqZWN0IERlc2NyaWJlLCBDb250ZXh0LCBOYW1lLCBSZXN1bHQsIE1lc3NhZ2UgfCBGb3JtYXQtTGlzdA0KDQppZiAoJHRvdGFsRmFpbGVkIC1lcSAwKSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICJBbGwgPGM9J2VtJz4kdG90YWxSdW48L2M+IHRlc3RzIGV4ZWN1dGVkIHdpdGhvdXQgYSBzaW5nbGUgZmFpbHVyZSEiIH0NCmVsc2UgeyBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBDcml0aWNhbCAtTWVzc2FnZSAiPGM9J2VtJz4kdG90YWxGYWlsZWQgdGVzdHM8L2M+IG91dCBvZiA8Yz0nc3ViJz4kdG90YWxSdW48L2M+IHRlc3RzIGZhaWxlZCEiIH0NCg0KaWYgKCR0b3RhbEZhaWxlZCAtZ3QgMCkNCnsNCgl0aHJvdyAiJHRvdGFsRmFpbGVkIC8gJHRvdGFsUnVuIHRlc3RzIGZhaWxlZCEiDQp9AQn5AQAACfoBAAAG+wEAAApwZXN0ZXIucHMxBvwBAABEU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHRlc3RzXHBlc3Rlci5wczEJBgAAAAn+AQAACf8BAAABOwEAAA8AAAAGAAIAAKIHIyBEZXNjcmlwdGlvbg0KDQpUaGlzIGlzIHRoZSBmb2xkZXIsIHdoZXJlIGFsbCB0aGUgdGVzdHMgZ28uDQoNClRob3NlIGFyZSBzdWJkaXZpZGVkIGluIHR3byBjYXRlZ29yaWVzOg0KDQogLSBHZW5lcmFsDQogLSBGdW5jdGlvbg0KDQojIyBHZW5lcmFsIFRlc3RzDQoNCkdlbmVyYWwgdGVzdHMgYXJlIGZ1bmN0aW9uIGdlbmVyaWMgYW5kIHRlc3QgZm9yIGdlbmVyYWwgcG9saWNpZXMuDQoNClRoZXNlIHRlc3Qgc2NhbiBhbnN3ZXIgcXVlc3Rpb25zIHN1Y2ggYXM6DQoNCiAtIElzIG15IG1vZHVsZSBmb2xsb3dpbmcgbXkgc3R5bGUgZ3VpZGVzPw0KIC0gRG9lcyBhbnkgb2YgbXkgc2NyaXB0cyBoYXZlIGEgc3ludGF4IGVycm9yPw0KIC0gRG8gbXkgc2NyaXB0cyB1c2UgY29tbWFuZHMgSSBkbyBub3Qgd2FudCB0aGVtIHRvIHVzZT8NCiAtIERvIG15IGNvbW1hbmRzIGZvbGxvdyBiZXN0IHByYWN0aWNlcz8NCiAtIERvIG15IGNvbW1hbmRzIGhhdmUgcHJvcGVyIGhlbHA/DQoNCkJhc2ljYWxseSwgdGhlc2UgYWxsb3cgYSBnZW5lcmFsIG1vZHVsZSBoZWFsdGggY2hlY2suDQoNClRoZXNlIHRlc3RzIGFyZSBhbHJlYWR5IHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhlIHRlbXBsYXRlLg0KDQojIyBGdW5jdGlvbiBUZXN0cw0KDQpBIGhlYWx0aHkgbW9kdWxlIHNob3VsZCBwcm92aWRlIHVuaXQgYW5kIGludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgY29tbWFuZHMgJiBjb21wb25lbnRzIGl0IHNoaXBzLg0KT25seSB0aGVuIGNhbiBiZSBndWFyYW50ZWVkLCB0aGF0IHRoZXkgd2lsbCBhY3R1YWxseSBwZXJmb3JtIGFzIHByb21pc2VkLg0KDQpIb3dldmVyLCBhcyBlYWNoIHN1Y2ggdGVzdCBtdXN0IGJlIHNwZWNpZmljIHRvIHRoZSBmdW5jdGlvbiBpdCB0ZXN0cywgdGhlcmUgY2Fubm90IGJlIG11Y2ggaW4gdGhlIHdheSBvZiB0ZW1wbGF0ZXMuAQkBAgAACQICAAAGAwIAAAlyZWFkbWUubWQGBAIAAENTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cdGVzdHNccmVhZG1lLm1kCQYAAAAJBgIAAAkHAgAAATwBAAAPAAAABggCAACsCyMgWE1MDQoNClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSBwcm9qZWN0IFhNTCBmaWxlcyBnbywgbm90YWJseToNCg0KIC0gRm9ybWF0IFhNTA0KIC0gVHlwZSBFeHRlbnNpb24gWE1MDQoNCkV4dGVybmFsIGhlbHAgZmlsZXMgc2hvdWxkIF9ub3RfIGJlIHBsYWNlZCBpbiB0aGlzIGZvbGRlciENCg0KIyMgTm90ZXMgb24gRmlsZXMgYW5kIE5hbWluZw0KDQpUaGVyZSBzaG91bGQgYmUgb25seSBvbmUgZm9ybWF0IGZpbGUgYW5kIG9uZSB0eXBlIGV4dGVuc2lvbiBmaWxlIHBlciBwcm9qZWN0LCBhcyBpbXBvcnRpbmcgdGhlbSBoYXMgYSBub3RhYmxlIGltcGFjdCBvbiBpbXBvcnQgdGltZXMuDQoNCiAtIFRoZSBGb3JtYXQgWE1MIHNob3VsZCBiZSBuYW1lZCBgw75uYW1lw74uRm9ybWF0LnBzMXhtbGANCiAtIFRoZSBUeXBlIEV4dGVuc2lvbiBYTUwgc2hvdWxkIGJlIG5hbWVkIGDDvm5hbWXDvi5UeXBlcy5wczF4bWxgDQoNCiMjIFRvb2xzDQoNCiMjIyBOZXctUFNNREZvcm1hdFRhYmxlRGVmaW5pdGlvbg0KDQpUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhbiBpbnB1dCBvYmplY3QgYW5kIGdlbmVyYXRlIGZvcm1hdCB4bWwgZm9yIGFuIGF1dG8tc2l6ZWQgdGFibGUuDQoNCkl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSB0byBnZXQgc3RhcnRlZCB3aXRoIGZvcm1hdHMuDQoNCiMjIyBHZXQtUFNGVHlwZVNlcmlhbGl6YXRpb25EYXRhDQoNCmBgYA0KQyMgV2FybmluZyENClRoaXMgc2VjdGlvbiBpcyBvbmx5IGludGVyZXN0IGlmIHlvdSdyZSB1c2luZyBDIyB0b2dldGhlciB3aXRoIFBvd2VyU2hlbGwuDQpgYGANCg0KVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdHlwZSBleHRlbnNpb24gWE1MIHRoYXQgYWxsb3dzIFBvd2VyU2hlbGwgdG8gY29udmVydCB0eXBlcyB3cml0dGVuIGluIEMjIHRvIGJlIHdyaXR0ZW4gdG8gZmlsZSBhbmQgcmVzdG9yZWQgZnJvbSBpdCB3aXRob3V0IGJlaW5nICdEZXNlcmlhbGl6ZWQnLiBBbHNvIHdvcmtzIGZvciBqb2JzIG9yIHJlbW90aW5nLCBpZiBib3RoIHNpZGVzIGhhdmUgdGhlIGBQU0ZyYW1ld29ya2AgbW9kdWxlIGFuZCB0eXBlIGV4dGVuc2lvbiBsb2FkZWQuDQoNCkluIG9yZGVyIGZvciBhIGNsYXNzIHRvIGJlIGVsaWdpYmxlIGZvciB0aGlzLCBpdCBuZWVkcyB0byBjb25mb3JtIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXM6DQoNCiAtIEhhdmUgdGhlIGBbU2VyaWFsaXphYmxlXWAgYXR0cmlidXRlDQogLSBCZSBwdWJsaWMNCiAtIEhhdmUgYW4gZW1wdHkgY29uc3RydWN0b3INCiAtIEFsbG93IGFsbCBwdWJsaWMgcHJvcGVydGllcy9maWVsZHMgdG8gYmUgc2V0IChldmVuIGlmIHNldHRpbmcgaXQgZG9lc24ndCBkbyBhbnl0aGluZykgd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24uDQoNCmBgYA0Kbm9uLXB1YmxpYyBwcm9wZXJ0aWVzIGFuZCBmaWVsZHMgd2lsbCBiZSBsb3N0IGluIHRoaXMgcHJvY2VzcyENCmBgYAEJCQIAAAkKAgAABgsCAAAJcmVhZG1lLm1kBgwCAABBU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHhtbFxyZWFkbWUubWQJBgAAAAkOAgAACQ8CAAABPQEAAA8AAAAGEAIAAOgFPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTE2Ij8+DQo8Q29uZmlndXJhdGlvbj4NCgk8Vmlld0RlZmluaXRpb25zPg0KCQk8IS0tIEZvby5CYXIgLS0+DQoJCTxWaWV3Pg0KCQkJPE5hbWU+Rm9vLkJhcjwvTmFtZT4NCgkJCTxWaWV3U2VsZWN0ZWRCeT4NCgkJCQk8VHlwZU5hbWU+Rm9vLkJhcjwvVHlwZU5hbWU+DQoJCQk8L1ZpZXdTZWxlY3RlZEJ5Pg0KCQkJPFRhYmxlQ29udHJvbD4NCgkJCQk8QXV0b1NpemUvPg0KCQkJCTxUYWJsZUhlYWRlcnM+DQoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+DQoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+DQoJCQkJPC9UYWJsZUhlYWRlcnM+DQoJCQkJPFRhYmxlUm93RW50cmllcz4NCgkJCQkJPFRhYmxlUm93RW50cnk+DQoJCQkJCQk8VGFibGVDb2x1bW5JdGVtcz4NCgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJCQk8UHJvcGVydHlOYW1lPkZvbzwvUHJvcGVydHlOYW1lPg0KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJCTxUYWJsZUNvbHVtbkl0ZW0+DQoJCQkJCQkJCTxQcm9wZXJ0eU5hbWU+QmFyPC9Qcm9wZXJ0eU5hbWU+DQoJCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW0+DQoJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbXM+DQoJCQkJCTwvVGFibGVSb3dFbnRyeT4NCgkJCQk8L1RhYmxlUm93RW50cmllcz4NCgkJCTwvVGFibGVDb250cm9sPg0KCQk8L1ZpZXc+DQoJPC9WaWV3RGVmaW5pdGlvbnM+DQo8L0NvbmZpZ3VyYXRpb24+AQkRAgAACRICAAAGEwIAABbDvm5hbWXDvi5Gb3JtYXQucHMxeG1sBhQCAABOU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHhtbFzDvm5hbWXDvi5Gb3JtYXQucHMxeG1sCQYAAAAJFgIAAAkXAgAAAT4BAAAPAAAABhgCAADgBzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQo8VHlwZXM+DQogIDwhLS0gRm9vLkJhciAtLT4NCiAgPFR5cGU+DQogICAgPE5hbWU+RGVzZXJpYWxpemVkLkZvby5CYXI8L05hbWU+DQogICAgPE1lbWJlcnM+DQogICAgICA8TWVtYmVyU2V0Pg0KICAgICAgICA8TmFtZT5QU1N0YW5kYXJkTWVtYmVyczwvTmFtZT4NCiAgICAgICAgPE1lbWJlcnM+DQogICAgICAgICAgPE5vdGVQcm9wZXJ0eT4NCiAgICAgICAgICAgIDxOYW1lPg0KICAgICAgICAgICAgICBUYXJnZXRUeXBlRm9yRGVzZXJpYWxpemF0aW9uDQogICAgICAgICAgICA8L05hbWU+DQogICAgICAgICAgICA8VmFsdWU+DQogICAgICAgICAgICAgIEZvby5CYXINCiAgICAgICAgICAgIDwvVmFsdWU+DQogICAgICAgICAgPC9Ob3RlUHJvcGVydHk+DQogICAgICAgIDwvTWVtYmVycz4NCiAgICAgIDwvTWVtYmVyU2V0Pg0KICAgIDwvTWVtYmVycz4NCiAgPC9UeXBlPg0KICA8VHlwZT4NCiAgICA8TmFtZT5Gb28uQmFyPC9OYW1lPg0K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cGVzdGVyY29uZmlnDQIRVAIAAAQAAAAGmwIAAARuYW1lDQMRVgIAAAQAAAAGnAIAAARuYW1lDQMRWAIAAAQAAAAGnQIAAARuYW1lDQMBXwIAAA8AAAAGngIAAMoQPCMNClRoaXMgaXMgYW4gZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUNCg0KQnkgZGVmYXVsdCwgaXQgaXMgZW5vdWdoIHRvIGhhdmUgYSBzaW5nbGUgb25lIG9mIHRoZW0sDQpob3dldmVyIGlmIHlvdSBoYXZlIGVub3VnaCBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIGp1c3RpZnkgaGF2aW5nIG11bHRpcGxlIGNvcGllcyBvZiBpdCwNCmZlZWwgdG90YWxseSBmcmVlIHRvIHNwbGl0IHRoZW0gaW50byBtdWx0aXBsZSBmaWxlcy4NCiM+DQoNCjwjDQojIEV4YW1wbGUgQ29uZmlndXJhdGlvbg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICfDvm5hbWXDvicgLU5hbWUgJ0V4YW1wbGUuU2V0dGluZycgLVZhbHVlIDEwIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdpbnRlZ2VyJyAtSGFuZGxlciB7IH0gLURlc2NyaXB0aW9uICJFeGFtcGxlIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gWW91ciBtb2R1bGUgY2FuIHRoZW4gdXNlIHRoZSBzZXR0aW5nIHVzaW5nICdHZXQtUFNGQ29uZmlnVmFsdWUnIg0KIz4NCg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICfDvm5hbWXDvicgLU5hbWUgJ0ltcG9ydC5Eb0RvdFNvdXJjZScgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGRvdHNvdXJjZWQgb24gaW1wb3J0LiBCeSBkZWZhdWx0LCB0aGUgZmlsZXMgb2YgdGhpcyBtb2R1bGUgYXJlIHJlYWQgYXMgc3RyaW5nIHZhbHVlIGFuZCBpbnZva2VkLCB3aGljaCBpcyBmYXN0ZXIgYnV0IHdvcnNlIG9uIGRlYnVnZ2luZy4iDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ8O+bmFtZcO+JyAtTmFtZSAnSW1wb3J0LkluZGl2aWR1YWxGaWxlcycgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGltcG9ydGVkIGluZGl2aWR1YWxseS4gRHVyaW5nIHRoZSBtb2R1bGUgYnVpbGQsIGFsbCBtb2R1bGUgY29kZSBpcyBjb21waWxlZCBpbnRvIGZldyBmaWxlcywgd2hpY2ggYXJlIGltcG9ydGVkIGluc3RlYWQgYnkgZGVmYXVsdC4gTG9hZGluZyB0aGUgY29tcGlsZWQgdmVyc2lvbnMgaXMgZmFzdGVyLCB1c2luZyB0aGUgaW5kaXZpZHVhbCBmaWxlcyBpcyBlYXNpZXIgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvdXQgYWRqdXN0bWVudHMuIg0KDQokY3VycmVudFBhdGggPSAiJE1vZHVsZVJvb3RcU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxIg0KJGxhdGVzdEluc3RhbGxlZE1vZHVsZXMgPSBnZXQtbW9kdWxlIFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74gLUxpc3RBdmFpbGFibGUgfCBTb3J0LU9iamVjdCB2ZXJzaW9uIC1EZXNjZW5kaW5nIHwgU2VsZWN0LU9iamVjdCAtRXhwYW5kUHJvcGVydHkgcGF0aCAtZmlyc3QgMQ0KV3JpdGUtUFNGTWVzc2FnZSAiQ2hlY2tpbmcgaWYgY3VycmVudCBtb2R1bGUgJyRjdXJyZW50UGF0aCcgYWdhaW5zdCBsYXRlc3QgaW5zdGFsbGVkIHZlcnNpb24gJyRsYXRlc3RJbnN0YWxsZWRNb2R1bGVzJyINCmlmICgkY3VycmVudFBhdGggLWVxICRsYXRlc3RJbnN0YWxsZWRNb2R1bGVzKSB7DQogICAgU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTmFtZSAnSW50ZXJBY3RpdmVSZWdpc3Rlci5tb2R1bGVwYXRoJyAtVmFsdWUgIlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74iIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIk1vZHVsZSBQYXRoIGZvciBWYXVsdCBSZWdpc3RyYXRpb24sIE5hbWUgb2YgdGhlIG1vZHVsZSBhcyBsYXRlc3QgaW5zdGFsbGVkIHZlcnNpb24iDQp9DQplbHNlIHsNCiAgICBTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74nIC1OYW1lICdJbnRlckFjdGl2ZVJlZ2lzdGVyLm1vZHVsZXBhdGgnIC1WYWx1ZSAkY3VycmVudFBhdGggLUluaXRpYWxpemUgLVZhbGlkYXRpb24gc3RyaW5nIC1EZXNjcmlwdGlvbiAiTW9kdWxlIFBhdGggZm9yIFZhdWx0IFJlZ2lzdHJhdGlvbiwgZGV2ZWxvcG1lbnQgcG9pbnQgdG8gbG9jYWwgbm9uIGluc3RhbGxlZCBQU00xIg0KfQEJnwIAAAmgAgAABqECAAARY29uZmlndXJhdGlvbi5wczEGogIAAF1TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcY29uZmlndXJhdGlvbnNcY29uZmlndXJhdGlvbi5wczEJBgAAAAmkAgAACaUCAAABYAIAAA8AAAAGpgIAAP4DIyBDb25maWd1cmF0aW9ucw0KDQpUaHJvdWdoIHRoZSBgUFNGcmFtZXdvcmtgIHlvdSBoYXZlIGEgc2ltcGxlIG1ldGhvZCB0aGF0IGFsbG93cyB5b3UgdG8gLi4uDQoNCiAtIFB1Ymxpc2ggc2V0dGluZ3MNCiAtIFdpdGggb25ib2FyZCBkb2N1bWVudGF0aW9uDQogLSBJbnB1dCB2YWxpZGF0aW9uDQogLSBTY3JpcHRzIHRoYXQgcnVuIG9uIGNoYW5nZSBvZiBzZXR0aW5ncw0KIC0gVGhhdCBjYW4gYmUgZGlzY292ZXJlZCBhbmQgdXBkYXRlZCBieSB0aGUgdXNlcg0KIC0gVGhhdCBjYW4gYmUgYWRtaW5pc3RyYXRlZCBieSBwb2xpY3kgJiBEU0MNCg0KVGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIGEgYml0IHRvbyBjb21wbGV4IHRvIGRlc2NyaWJlIGluIGEgaGVscCBmaWxlLCB5b3UgY2FuIGhvd2V2ZXIgdmlzaXQgdXMgYXQgaHR0cDovL3BzZnJhbWV3b3JrLm9yZyBmb3IgZGV0YWlsZWQgZ3VpZGFuY2UuDQoNCkFuIGV4YW1wbGUgY2FuIGJlIHNlZW4gaW4gdGhlIGF0dGFjaGVkIHBzMSBmaWxlAQmnAgAACagCAAAGqQIAAAlyZWFkbWUubWQGqgIAAFVTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcY29uZmlndXJhdGlvbnNccmVhZG1lLm1kCQYAAAAJrAIAAAmtAgAAAWECAAAPAAAABq4CAADbASMgRnVuY3Rpb25zDQoNClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIGdvLg0KDQpEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG1vZHVsZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViZGl2aWRlIHRoZW0gaW50byBzdWJmb2xkZXJzLg0KDQpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseQEJrwIAAAmwAgAABrECAAAJcmVhZG1lLm1kBrICAABQU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGludGVybmFsXGZ1bmN0aW9uc1xyZWFkbWUubWQJBgAAAAm0AgAACbUCAAABYgIAAA8AAAAGtgIAAIQDPCMNClN0b3JlZCBzY3JpcHRibG9ja3MgYXJlIGF2YWlsYWJsZSBpbiBbUHNmVmFsaWRhdGVTY3JpcHQoKV0gYXR0cmlidXRlcy4NClRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNlbnRyYWxseSBwcm92aWRlIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLA0Kd2l0aG91dCBoYXZpbmcgdG8gbWFpbnRhaW4gaXQgaW4gc2VwYXJhdGUgbG9jYXRpb25zLg0KDQpJdCBhbHNvIHByZXZlbnRzIGxlbmd0aHkgdmFsaWRhdGlvbiBzY3JpcHRibG9ja3MgZnJvbSBtYWtpbmcgeW91ciBwYXJhbWV0ZXIgYmxvY2sNCmhhcmQgdG8gcmVhZC4NCg0KU2V0LVBTRlNjcmlwdGJsb2NrIC1OYW1lICfDvm5hbWXDvi5TY3JpcHRCbG9ja05hbWUnIC1TY3JpcHRibG9jayB7DQoJDQp9DQojPgEJtwIAAAm4AgAABrkCAAAQc2NyaXB0YmxvY2tzLnBzMQa6AgAAWlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbFxzY3JpcHRibG9ja3Ncc2NyaXB0YmxvY2tzLnBzMQkGAAAACbwCAAAJvQIAAAFjAgAADwAAAAa+AgAA9glOZXctUFNGTGljZW5zZSAtUHJvZHVjdCAnw75uYW1lw74nIC1NYW51ZmFjdHVyZXIgJ8O+YXV0aG9yw74nIC1Qcm9kdWN0VmVyc2lvbiAkc2NyaXB0Ok1vZHVsZVZlcnNpb24gLVByb2R1Y3RUeXBlIE1vZHVsZSAtTmFtZSBNSVQgLVZlcnNpb24gIjEuMC4wLjAiIC1EYXRlIChHZXQtRGF0ZSAiw74hZGF0ZSHDviIpIC1UZXh0IEAiDQpDb3B5cmlnaHQgKGMpIMO+IXllYXIhw74gw75hdXRob3LDvg0KDQpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5DQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbA0KaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cw0KdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbA0KY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KDQpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwNCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQoNClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQ0KQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUg0KTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwNCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFDQpTT0ZUV0FSRS4NCiJAAQm/AgAACcACAAAGwQIAAAtsaWNlbnNlLnBzMQbCAgAAUFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbFxzY3JpcHRzXGxpY2Vuc2UucHMxCQYAAAAJxAIAAAnFAgAAAWQCAAAPAAAABsYCAAC3BjwjDQpBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYWZ0ZXIgaW1wb3J0aW5nIHRoZSBtYWluIGZ1bmN0aW9uIGNvZGUNCg0KV0FSTklORzogT05MWSBwcm92aWRlIHBhdGhzIHRvIGZpbGVzIQ0KDQpBZnRlciBidWlsZGluZyB0aGUgbW9kdWxlLCB0aGlzIGZpbGUgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQsIGFkZGluZyBhbnl0aGluZyBidXQgcGF0aHMgdG8gZmlsZXMgLi4uDQotIFdpbGwgbm90IHdvcmsgYWZ0ZXIgcHVibGlzaGluZw0KLSBDb3VsZCBicmVhayB0aGUgYnVpbGQgcHJvY2Vzcw0KIz4NCg0KJG1vZHVsZVJvb3QgPSBTcGxpdC1QYXRoIChTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QpDQoNCiMgTG9hZCBDb25maWd1cmF0aW9ucw0KKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGNvbmZpZ3VyYXRpb25zXCoucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKS5GdWxsTmFtZQ0KDQojIExvYWQgU2NyaXB0YmxvY2tzDQooR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0YmxvY2tzXCoucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKS5GdWxsTmFtZQ0KDQojIExvYWQgVGFiIEV4cGFuc2lvbg0KKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXHRlcHBcKi50ZXBwLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUNCg0KIyBMb2FkIFRhYiBFeHBhbnNpb24gQXNzaWdubWVudA0KIiRtb2R1bGVSb290XGludGVybmFsXHRlcHBcYXNzaWdubWVudC5wczEiDQoNCiMgTG9hZCBMaWNlbnNlDQoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xsaWNlbnNlLnBzMSIBCccCAAAJyAIAAAbJAgAADnBvc3RpbXBvcnQucHMxBsoCAABTU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEJBgAAAAnMAgAACc0CAAABZQIAAA8AAAAGzgIAALADPCMNCkFkZCBhbGwgdGhpbmdzIHlvdSB3YW50IHRvIHJ1biBiZWZvcmUgaW1wb3J0aW5nIHRoZSBtYWluIGZ1bmN0aW9uIGNvZGUuDQoNCldBUk5JTkc6IE9OTFkgcHJvdmlkZSBwYXRocyB0byBmaWxlcyENCg0KQWZ0ZXIgYnVpbGRpbmcgdGhlIG1vZHVsZSwgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkLCBhZGRpbmcgYW55dGhpbmcgYnV0IHBhdGhzIHRvIGZpbGVzIC4uLg0KLSBXaWxsIG5vdCB3b3JrIGFmdGVyIHB1Ymxpc2hpbmcNCi0gQ291bGQgYnJlYWsgdGhlIGJ1aWxkIHByb2Nlc3MNCiM+DQoNCiRtb2R1bGVSb290ID0gU3BsaXQtUGF0aCAoU3BsaXQtUGF0aCAkUFNTY3JpcHRSb290KQ0KDQojIExvYWQgdGhlIHN0cmluZ3MgdXNlZCBpbiBtZXNzYWdlcw0KIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNcc3RyaW5ncy5wczEiAQnPAgAACdACAAAG0QIAAA1wcmVpbXBvcnQucHMxBtICAABSU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGludGVybmFsXHNjcmlwdHNccHJlaW1wb3J0LnBzMQkGAAAACdQCAAAJ1QIAAAFmAgAADwAAAAbWAgAAuAM8Iw0KVGhpcyBmaWxlIGxvYWRzIHRoZSBzdHJpbmdzIGRvY3VtZW50cyBmcm9tIHRoZSByZXNwZWN0aXZlIGxhbmd1YWdlIGZvbGRlcnMuDQpUaGlzIGFsbG93cyBsb2NhbGl6aW5nIG1lc3NhZ2VzIGFuZCBlcnJvcnMuDQpMb2FkIHBzZDEgbGFuZ3VhZ2UgZmlsZXMgZm9yIGVhY2ggbGFuZ3VhZ2UgeW91IHdpc2ggdG8gc3VwcG9ydC4NClBhcnRpYWwgdHJhbnNsYXRpb25zIGFyZSBhY2NlcHRhYmxlIC0gd2hlbiBtaXNzaW5nIGEgY3VycmVudCBsYW5ndWFnZSBtZXNzYWdlLA0KaXQgd2lsbCBmYWxsYmFjayB0byBFbmdsaXNoIG9yIGFub3RoZXIgYXZhaWxhYmxlIGxhbmd1YWdlLg0KIz4NCkltcG9ydC1QU0ZMb2NhbGl6ZWRTdHJpbmcgLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVxlbi11c1wqLnBzZDEiIC1Nb2R1bGUgJ8O+bmFtZcO+JyAtTGFuZ3VhZ2UgJ2VuLVVTJwEJ1wIAAAnYAgAABtkCAAALc3RyaW5ncy5wczEG2gIAAFBTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcc2NyaXB0c1xzdHJpbmdzLnBzMQkGAAAACdwCAAAJ3QIAAAFnAgAADwAAAAbeAgAAcTwjDQojIEV4YW1wbGU6DQpSZWdpc3Rlci1QU0ZUZXBwQXJndW1lbnRDb21wbGV0ZXIgLUNvbW1hbmQgR2V0LUFsY29ob2wgLVBhcmFtZXRlciBUeXBlIC1OYW1lIMO+bmFtZcO+LmFsY29ob2wNCiM+AQnfAgAACeACAAAG4QIAAA5hc3NpZ25tZW50LnBzMQbiAgAAUFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbFx0ZXBwXGFzc2lnbm1lbnQucHMxCQYAAAAJ5AIAAAnlAgAAAWgCAAAPAAAABuYCAACjATwjDQojIEV4YW1wbGU6DQpSZWdpc3Rlci1QU0ZUZXBwU2NyaXB0YmxvY2sgLU5hbWUgIsO+bmFtZcO+LmFsY29ob2wiIC1TY3JpcHRCbG9jayB7ICdCZWVyJywnTWVhZCcsJ1doaXNrZXknLCdXaW5lJywnVm9ka2EnLCdSdW0gKDN5KScsICdSdW0gKDV5KScsICdSdW0gKDd5KScgfQ0KIz4BCecCAAAJ6AIAAAbpAgAAEGV4YW1wbGUudGVwcC5wczEG6gIAAFJTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcdGVwcFxleGFtcGxlLnRlcHAucHMxCQYAAAAJ7AIAAAntAgAAAWkCAAAPAAAABu4CAAC+ByMgVGFiIEV4cGFuc2lvbg0KDQojIyBEZXNjcmlwdGlvbg0KDQpNb2Rlcm4gVGFiIEV4cGFuc2lvbiB3YXMgb3BlbmVkIHRvIHVzZXJzIHdpdGggdGhlIG1vZHVsZSBgVGFiIEV4cGFuc2lvbiBQbHVzIFBsdXNgIChURVBQKS4NCg0KSXQgYWxsb3dzIHlvdSB0byBkZWZpbmUsIHdoYXQgb3B0aW9ucyBhIHVzZXIgaXMgb2ZmZXJlZCB3aGVuIHRhYmJpbmcgdGhyb3VnaCBpbnB1dCBvcHRpb25zLiBUaGlzIGNhbiBzYXZlIGEgbG90IG9mIHRpbWUgZm9yIHRoZSB1c2VyIGFuZCBpcyBjb25zaWRlcmVkIGEga2V5IGVsZW1lbnQgaW4gdXNlciBleHBlcmllbmNlLg0KDQpUaGUgYFBTRnJhbWV3b3JrYCBvZmZlcnMgYSBzaW1wbGlmaWVkIHdheSBvZiBvZmZlcmluZyBqdXN0IHRoaXMsIGFzIHRoZSB0d28gZXhhbXBsZSBmaWxlcyBzaG93Lg0KDQojIyBDb25jZXB0DQoNCkN1c3RvbSB0YWIgY29tcGxldGlvbiBpcyBkZWZpbmVkIGluIHR3byBzdGVwczoNCg0KIC0gRGVmaW5lIGEgc2NyaXB0YmxvY2sgdGhhdCBpcyBydW4gd2hlbiB0aGUgdXNlciBoaXRzIGBUQUJgIGFuZCBwcm92aWRlcyB0aGUgc3RyaW5ncyB0aGF0IGFyZSBoaXMgb3B0aW9ucy4NCiAtIEFzc2lnbiB0aGF0IHNjcmlwdGJsb2NrIHRvIHRoZSBwYXJhbWV0ZXIgb2YgYSBjb21tYW5kLiBZb3UgY2FuIGFzc2lnbiB0aGUgc2FtZSBzY3JpcHRibG9jayBtdWx0aXBsZSB0aW1lcy4NCg0KIyMgU3RydWN0dXJlDQoNCkltcG9ydCBvcmRlciBtYXR0ZXJzLiBJbiBvcmRlciB0byBtYWtlIHRoaW5ncyB3b3JrIHdpdGggdGhlIGRlZmF1bHQgc2NhZmZvbGQsIGZvbGxvdyB0aG9zZSBydWxlczoNCg0KIC0gQWxsIHNjcmlwdGZpbGVzIF9kZWZpbmluZ18gY29tcGxldGlvbiBzY3JpcHRibG9ja3MgbGlrZSB0aGlzOiBgKi50ZXBwLnBzMWANCiAtIFB1dCBhbGwgeW91ciBjb21wbGV0aW9uIGFzc2lnbm1lbnRzIGluIGBhc3NpZ25tZW50LnBzMWABCe8CAAAJ8AIAAAbxAgAACXJlYWRtZS5tZAbyAgAAS1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbFx0ZXBwXHJlYWRtZS5tZAkGAAAACfQCAAAJ9QIAAAFqAgAADwAAAAb2AgAA7gIjIGJpbiBmb2xkZXINCg0KVGhlIGJpbiBmb2xkZXIgZXhpc3RzIHRvIHN0b3JlIGJpbmFyeSBkYXRhLiBBbmQgc2NyaXB0cyByZWxhdGVkIHRvIHRoZSB0eXBlIHN5c3RlbS4NCg0KVGhpcyBtYXkgaW5jbHVkZSB5b3VyIG93biBDIy1iYXNlZCBsaWJyYXJ5LCB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMgeW91IHdhbnQgdG8gaW5jbHVkZSAod2F0Y2ggdGhlIGxpY2Vuc2UhKSwgb3IgYSBzY3JpcHQgZGVjbGFyaW5nIHR5cGUgYWNjZWxlcmF0b3JzIChlZmZlY3RpdmVseSBhbGlhc2VzIGZvciAuTkVUIHR5cGVzKQ0KDQpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBUeXBlIEFjY2VsZXJhdG9ycywgc2VlIHRoZSBoZWxwIG9uIFNldC1QU0ZUeXBlQWxpYXMBCfcCAAAJ+AIAAAb5AgAACXJlYWRtZS5tZAb6AgAAZVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxiaW5ccmVhZG1lLm1kCQYAAAAJ/AIAAAn9AgAAAWsCAAAPAAAABv4CAAClAVRPUElDDQoJYWJvdXRfw75uYW1lw74NCgkNClNIT1JUIERFU0NSSVBUSU9ODQoJRXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgw75uYW1lw74gcG93ZXJzaGVsbCBtb2R1bGUNCgkNCkxPTkcgREVTQ1JJUFRJT04NCgk8SW5zZXJ0IENvbnRlbnQgaGVyZT4NCg0KS0VZV09SRFMNCgnDvm5hbWXDvgEJ/wIAAAkAAwAABgEDAAAXYWJvdXRfw75uYW1lw74uaGVscC50eHQGAgMAAHVTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cZW4tdXNcYWJvdXRfw75uYW1lw74uaGVscC50eHQJBgAAAAkEAwAACQUDAAABbAIAAA8AAAAGBgMAAJ0BIyBUaGlzIGlzIHdoZXJlIHRoZSBzdHJpbmdzIGdvLCB0aGF0IGFyZSB3cml0dGVuIGJ5DQojIFdyaXRlLVBTRk1lc3NhZ2UsIFN0b3AtUFNGRnVuY3Rpb24gb3IgdGhlIFBTRnJhbWV3b3JrIHZhbGlkYXRpb24gc2NyaXB0YmxvY2tzDQpAew0KCSdrZXknID0gJ1ZhbHVlJw0KfQEJBwMAAAkIAwAABgkDAAAMc3RyaW5ncy5wc2QxBgoDAABqU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGVuLXVzXHN0cmluZ3MucHNkMQkGAAAACQwDAAAJDQMAAAFtAgAADwAAAAYOAwAAngxmdW5jdGlvbiBHZXQtU2VjcmV0IHsNCiAgICA8Iw0KICAgIC5TWU5PUFNJUw0KICAgIFF1ZXJ5IGEgc2luZ2xlIHNlY3JldC4NCg0KICAgIC5ERVNDUklQVElPTg0KICAgIFF1ZXJ5IGEgc2luZ2xlIHNlY3JldC4NCg0KICAgIC5QQVJBTUVURVIgTmFtZQ0KICAgIE5hbWUgdG8gYmUgc2VhcmNoZWQgZm9yLg0KDQogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUNCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0Lg0KDQogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4NCg0KICAgIC5FWEFNUExFDQogICAgR2V0LVNlY3JldCAtVmF1bHQgJFZhdWx0bmFtZSAtTmFtZSBmb28NCg0KICAgIFJldHVybnMgdGhlIHN0b3JlZCBzZWNyZXQgZm9yIHRoZSBlbnRyeSBmb28uDQoNCiAgICAuTk9URVMNCiAgICBHZW5lcmFsIG5vdGVzDQogICAgIz4NCiAgICBbQ21kbGV0QmluZGluZygpXQ0KICAgIHBhcmFtICgNCiAgICAgICAgW3N0cmluZ10gJE5hbWUsDQogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsDQogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgICkNCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUNCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICBpZiAoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzLlZlcmJvc2UpIHsgJFZlcmJvc2VQcmVmZXJlbmNlID0gJ2NvbnRpbnVlJyB9DQoNCiAgICBXcml0ZS1QU0ZNZXNzYWdlICJHZXQtU2VjcmV0LCBOYW1lPSROYW1lLCAkVmF1bHROYW1lLCBBZGRpdGlvbmFsUGFyYW1ldGVycz0kKCRBZGRpdGlvbmFsUGFyYW1ldGVyc3xDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIg0KICAgICMgVE9ETyBQZXJmb3JtIFJldHJpZXZhbCB2b29kb28gOy0pDQogICAgIyAkc2VjcmV0ID0gR2V0LcO+ZnVuY3Rpb25QcmVmaXjDvlNlY3JldA0KICAgICMgV3JpdGUtUFNGTWVzc2FnZSAiRm91bmQgYCRzZWNyZXQ9JCgkc2VjcmV0LmdldHR5cGUoKSkiDQogICAgIyAjIENoZWNrIGlmIG9ubHkgb25lIHNlY3JldCB3YXMgcmV0cmlldmVkDQogICAgIyBpZiAoJHNlY3JldC5Db3VudCAtZ3QgMSAtYW5kICRzZWNyZXQgLWlzbm90IFtoYXNodGFibGVdKSB7DQogICAgIyAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgRXJyb3IgJ011bHRpcGxlIGNyZWRlbnRpYWxzIGZvdW5kOyBTZWFyY2ggd2l0aCBHZXQtU2VjcmV0SW5mbyBhbmQgcmVxdWlyZSB0aGUgY29ycmVjdCBvbmUgYnkgKi5NZXRhRGF0YS5pZCcNCiAgICAjICAgICBXYWl0LVBTRk1lc3NhZ2UNCiAgICAjICAgICB0aHJvdyAnTXVsdGlwbGUgY3JlZGVudGlhbHMgZm91bmQ7IFNlYXJjaCB3aXRoIEdldC1TZWNyZXRJbmZvIGFuZCByZXF1aXJlIHRoZSBjb3JyZWN0IG9uZSBieSAqLk1ldGFEYXRhLmlkJw0KICAgICMgfQ0KICAgIHJldHVybiAkc2VjcmV0IHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMQ0KfQ0KDQoBCQ8DAAAJEAMAAAYRAwAADkdldC1TZWNyZXQucHMxBhIDAABwU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9uc1xHZXQtU2VjcmV0LnBzMQkGAAAACRQDAAAJFQMAAAFuAgAADwAAAAYWAwAAiAxmdW5jdGlvbiBHZXQtU2VjcmV0SW5mbyB7DQogICAgPCMNCiAgICAuU1lOT1BTSVMNCiAgICBSZXR1cm5zIFNlY3JldG1hbmFnZW1lbnRJbmZvcm1hdGlvbiBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIGVudHJpZXMuDQoNCiAgICAuREVTQ1JJUFRJT04NCiAgICBSZXR1cm5zIFNlY3JldG1hbmFnZW1lbnRJbmZvcm1hdGlvbiBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIGVudHJpZXMuDQoNCiAgICAuUEFSQU1FVEVSIEZpbHRlcg0KICAgIFRoZSBuYW1lIHRvIGJlIHNlYXJjaGVkDQoNCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQ0KICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuDQoNCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0Lg0KDQogICAgLkVYQU1QTEUNCiAgICBHZXQtU2VjcmV0SW5mbyAtVmF1bHQgJFZhdWx0bmFtZSAtTmFtZSBmb29iYXINCiAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgIFZhdWx0TmFtZQ0KICAgIC0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tICAgICAgICAgLS0tLS0tLS0tDQogICAgZm9vYmFyIFs1ZGQ5MzdjNC1iMGEwLWVkMTEtYTg3Ni0wMDUwNTZiY2U5NDhdIFBTQ3JlZGVudGlhbCBQV1NhZmVJbnQNCiAgICBmb29iYXIgW2VmMmZlMTFkLWIwYTAtZWQxMS1hODc2LTAwNTA1NmJjZTk0OF0gUFNDcmVkZW50aWFsIFBXU2FmZUludA0KDQogICAgUmV0dXJucyB0aGUgc3RvcmVkIHNlY3JldCBpbmZvLg0KDQogICAgLk5PVEVTDQogICAgR2VuZXJhbCBub3Rlcw0KICAgICM+DQogICAgW0NtZGxldEJpbmRpbmcoKV0NCiAgICBwYXJhbSAoDQogICAgICAgIFtzdHJpbmddICRGaWx0ZXIsDQogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsDQogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgICkNCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUNCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICBpZiAoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzLlZlcmJvc2UpIHsgJFZlcmJvc2VQcmVmZXJlbmNlID0gJ2NvbnRpbnVlJyB9DQoNCiAgICBXcml0ZS1QU0ZNZXNzYWdlICJHZXQtU2VjcmV0SW5mbywgRmlsdGVyPSRGaWx0ZXIsICRWYXVsdE5hbWUsIEFkZGl0aW9uYWxQYXJhbWV0ZXJzPSQoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzfENvbnZlcnRUby1Kc29uIC1Db21wcmVzcykiDQogICAgcmV0dXJuIEdldC1OZXR3cml4Q29udGFpbmVyIC1GaWx0ZXIgJEZpbHRlciAtVmF1bHROYW1lICRWYXVsdE5hbWUgLUFkZGl0aW9uYWxQYXJhbWV0ZXJzICRBZGRpdGlvbmFsUGFyYW1ldGVycyAtUmV0dXJuVHlwZSBTZWNyZXRJbmZvcm1hdGlvbg0KICAgICMgVE9ETyBQZXJmb3JtIHVwZGF0ZSB2b29kb28gOy0pDQp9DQoNCgEJFwMAAAkYAwAABhkDAAASR2V0LVNlY3JldEluZm8ucHMxBhoDAAB0U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9uc1xHZXQtU2VjcmV0SW5mby5wczEJBgAAAAkcAwAACR0DAAABbwIAAA8AAAAGHgMAANIBIyBGdW5jdGlvbnMNCg0KVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIHRoZSBmdW5jdGlvbnMgZ28uDQoNCkRlcGVuZGluZyBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgbW9kdWxlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBzdWJkaXZpZGUgdGhlbSBpbnRvIHN1YmZvbGRlcnMuDQoNClRoZSBtb2R1bGUgd2lsbCBwaWNrIHVwIGFsbCAucHMxIGZpbGVzIHJlY3Vyc2l2ZWx5AQkfAwAACSADAAAGIQMAAAlyZWFkbWUubWQGIgMAAGtTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cZnVuY3Rpb25zXHJlYWRtZS5tZAkGAAAACSQDAAAJJQMAAAFwAgAADwAAAAYmAwAAkQcNCmZ1bmN0aW9uIFJlbW92ZS1TZWNyZXQgew0KICAgIDwjDQogICAgLlNZTk9QU0lTDQogICAgUmVtb3ZlcyBhIHNlY3JldCBmcm9tIHRoZSB2YXVsdC4gTk9UIGltcGxlbWVudGVkIHlldC4NCg0KICAgIC5ERVNDUklQVElPTg0KICAgIFJlbW92ZXMgYSBzZWNyZXQgZnJvbSB0aGUgdmF1bHQuIE5PVCBpbXBsZW1lbnRlZCB5ZXQuDQoNCiAgICAuUEFSQU1FVEVSIE5hbWUNCiAgICBOYW1lIHRvIGJlIHNlYXJjaGVkIGZvci4NCg0KICAgIC5QQVJBTUVURVIgVmF1bHROYW1lDQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4NCg0KICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuDQoNCiAgICAuRVhBTVBMRQ0KICAgIEFuIGV4YW1wbGUNCiAgICBpcyBub3QgbmVjY2Vzc2FyeQ0KDQogICAgQXMgbm90IGltcGxlbWVudGVkDQoNCiAgICAuTk9URVMNCiAgICBHZW5lcmFsIG5vdGVzDQogICAgIz4NCiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNSZXZpZXdVbnVzZWRQYXJhbWV0ZXInLCAnJyldDQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTVXNlU2hvdWxkUHJvY2Vzc2ZvclN0YXRlQ2hhbmdpbmdGdW5jdGlvbnMnLCAnJyldDQogICAgW0NtZGxldEJpbmRpbmcoKV0NCiAgICBwYXJhbSAoDQogICAgICAgIFtzdHJpbmddICROYW1lLA0KICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLA0KICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICApDQogICAgdGhyb3cgIk5vdCBJbXBsZW1lbnRlZCINCn0NCg0KAQknAwAACSgDAAAGKQMAABFSZW1vdmUtU2VjcmV0LnBzMQYqAwAAc1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnNcUmVtb3ZlLVNlY3JldC5wczEJBgAAAAksAwAACS0DAAABcQIAAA8AAAAGLgMAAP0JZnVuY3Rpb24gU2V0LVNlY3JldCB7DQogICAgPCMNCiAgICAuU1lOT1BTSVMNCiAgICBVcGRhdGVzIGEgc2VjcmV0IHN0b3JlZCBpbiB0aGUgdmF1bHQuDQoNCiAgICAuREVTQ1JJUFRJT04NCiAgICBVcGRhdGVzIGEgc2VjcmV0IHN0b3JlZCBpbiB0aGUgdmF1bHQuDQoNCiAgICAuUEFSQU1FVEVSIE5hbWUNCiAgICBOYW1lIG9mIHRoZSBlbnRyeQ0KDQogICAgLlBBUkFNRVRFUiBTZWNyZXQNCiAgICBUaGUgTmV3IFNlY3JldC4gQ2FuIGJlIGEgU2VjdXJlU3RyaW5nIG9yIGEgUFNDcmVkZW50aWFsLW9iamVjdA0KDQogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUNCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0Lg0KDQogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4NCg0KICAgIC5FWEFNUExFDQogICAgU2V0LVNlY3JldCAtVmVyYm9zZSAtVmF1bHQgJFZhdWx0bmFtZSAtU2VjcmV0IChHZXQtQ3JlZGVudGlhbCkgLU5hbWUgZm9vDQoNCiAgICBVcGRhdGVzIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBvZiB0aGUgZW50cnkuDQoNCiAgICAuTk9URVMNCiAgICBHZW5lcmFsIG5vdGVzDQogICAgIz4NCiAgICBbQ21kbGV0QmluZGluZygpXQ0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1VzZVNob3VsZFByb2Nlc3Nmb3JTdGF0ZUNoYW5naW5nRnVuY3Rpb25zJywgJycpXQ0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1VzZU91dHB1dFR5cGVDb3JyZWN0bHknLCAnJyldDQogICAgcGFyYW0gKA0KICAgICAgICBbc3RyaW5nXSAkTmFtZSwNCiAgICAgICAgW29iamVjdF0gJFNlY3JldCwNCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwNCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQogICAgKQ0KICAgICMgV29ya2Fyb3VuZCBDYXNlU2Vuc2l0aXZlIEhhc2hUYWJsZQ0KICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgIGlmICgkQWRkaXRpb25hbFBhcmFtZXRlcnMuVmVyYm9zZSkgeyAkVmVyYm9zZVByZWZlcmVuY2UgPSAnY29udGludWUnIH0NCiAgICAjIFRPRE8gUGVyZm9ybSB1cGRhdGUgdm9vZG9vIDstKQ0KICAgIFdhaXQtUFNGTWVzc2FnZQ0KICAgIHJldHVybiAkdHJ1ZQ0KfQ0KDQoBCS8DAAAJMAMAAAYxAwAADlNldC1TZWNyZXQucHMxBjIDAABwU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9uc1xTZXQtU2VjcmV0LnBzMQkGAAAACTQDAAAJNQMAAAFyAgAADwAAAAY2AwAA1QtmdW5jdGlvbiBTZXQtU2VjcmV0SW5mbyB7DQogICAgPCMNCiAgICAuU1lOT1BTSVMNCiAgICBVcGRhdGVzIGFkZGl0aW9uYWwgZmllbGRzIG9mIGEgc2luZ2xlIGVudHJ5Lg0KDQogICAgLkRFU0NSSVBUSU9ODQogICAgVXBkYXRlcyBhZGRpdGlvbmFsIGZpZWxkcyBvZiBhIHNpbmdsZSBlbnRyeS4NCg0KICAgIC5QQVJBTUVURVIgTmFtZQ0KICAgIE5hbWUgb2YgdGhlIGVudHJ5DQoNCiAgICAuUEFSQU1FVEVSIE1ldGFkYXRhDQogICAgVGhlIEhhc2hUYWJsZSB3aXRoIHRoZSBmaWVsZHMgdG8gdXBkYXRlLg0KICAgIFBvc3NpYmxlIEtleXM6ICdVc2VybmFtZScsICdQYXNzd29yZCcsICdOYW1lJywgJ01lbW8nDQoNCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQ0KICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuDQoNCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0Lg0KDQogICAgLkVYQU1QTEUNCiAgICBTZXQtU2VjcmV0SW5mbyAgLVZhdWx0ICRWYXVsdG5hbWUgIC1OYW1lIGZvbyAtTWV0YWRhdGEgQHttZW1vPSdOb3RpeiAyJzt1c2VybmFtZT0nZm9vJztwYXNzd29yZD0kbXlOZXdTZWNyZXR9DQoNCiAgICBVcGRhdGVzIHRoZSBlbnRyeSB3aXRoIG5ldyBtZW1vLg0KDQogICAgLkVYQU1QTEUNCiAgICBTZXQtU2VjcmV0SW5mbyAgLVZhdWx0ICRWYXVsdG5hbWUgIC1OYW1lIGZvbyAtTWV0YWRhdGEgQHtuYW1lPSdCYXInfQ0KDQogICAgUmVuYW1lcyB0aGUgZW50cnkgJ2ZvbycgdG8gJ0JhcicNCg0KICAgIC5OT1RFUw0KICAgIEdlbmVyYWwgbm90ZXMNCiAgICAjPg0KICAgIFtDbWRsZXRCaW5kaW5nKCldDQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTVXNlU2hvdWxkUHJvY2Vzc2ZvclN0YXRlQ2hhbmdpbmdGdW5jdGlvbnMnLCAnJyldDQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTVXNlT3V0cHV0VHlwZUNvcnJlY3RseScsICcnKV0NCiAgICBwYXJhbSAoDQogICAgICAgIFtzdHJpbmddICROYW1lLA0KICAgICAgICBbaGFzaHRhYmxlXSAkTWV0YWRhdGEsDQogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsDQogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgICkNCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUNCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICBpZiAoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzLlZlcmJvc2UpIHsgJFZlcmJvc2VQcmVmZXJlbmNlID0gJ2NvbnRpbnVlJyB9DQogICAgIyBUT0RPIFBlcmZvcm0gdXBkYXRlIHZvb2RvbyA7LSkNCiAgICBXYWl0LVBTRk1lc3NhZ2UNCiAgICByZXR1cm4gJHRydWUNCn0NCgEJNwMAAAk4AwAABjkDAAASU2V0LVNlY3JldEluZm8ucHMxBjoDAAB0U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9uc1xTZXQtU2VjcmV0SW5mby5wczEJBgAAAAk8AwAACT0DAAABcwIAAA8AAAAGPgMAANkKDQpmdW5jdGlvbiBUZXN0LVNlY3JldFZhdWx0IHsNCiAgICA8Iw0KICAgIC5TWU5PUFNJUw0KICAgIFRlc3RzIGlmIHRoZSB2YXVsdCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBhbmQgaWYgaXQgaXMgdW5sb2NrZWQuDQoNCiAgICAuREVTQ1JJUFRJT04NCiAgICBUZXN0cyBpZiB0aGUgdmF1bHQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgYW5kIGlmIGl0IGlzIHVubG9ja2VkLg0KDQogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUNCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0Lg0KDQogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4NCg0KICAgIC5FWEFNUExFDQogICAgVGVzdC1TZWNyZXRWYXVsdCAtVmF1bHROYW1lICR2YXVsdG5hbWUNCg0KICAgIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsbA0KDQogICAgLk5PVEVTDQogICAgR2VuZXJhbCBub3Rlcw0KICAgICM+DQogICAgW0NtZGxldEJpbmRpbmcoKV0NCiAgICBwYXJhbSAoDQogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsDQogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgICkNCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUNCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICBpZiAoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzLlZlcmJvc2UpIHsgJFZlcmJvc2VQcmVmZXJlbmNlID0gJ2NvbnRpbnVlJyB9DQogICAgV3JpdGUtUFNGTWVzc2FnZSAgIlRlc3QtU2VjcmV0VmF1bHQgZnJvbSAkVmF1bHROYW1lLCBBZGRpdGlvbmFsUGFyYW1ldGVycz0kKCRBZGRpdGlvbmFsUGFyYW1ldGVyc3xDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIg0KDQogICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgVmVyYm9zZSAiU2VjcmV0TWFuYWdlbWVudDogVGVzdGluZyBWYXVsdCAke1ZhdWx0TmFtZX0iDQogICAgJHZhdWx0ID0gR2V0LVNlY3JldFZhdWx0ICRWYXVsdE5hbWUgLUVycm9yQWN0aW9uIFN0b3ANCiAgICBpZiAoJHZhdWx0Lk1vZHVsZU5hbWUgLW5lICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+Jykgew0KICAgICAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBFcnJvciAiJHZhdWx0TmFtZSB3YXMgZm91bmQgYnV0IGlzIG5vdCBhIMO+bmFtZcO+IFZhdWx0LiINCiAgICAgICAgV2FpdC1QU0ZNZXNzYWdlDQogICAgICAgIHJldHVybiAkZmFsc2UNCiAgICB9DQogICAgIyBUT0RPIFBlcmZvcm0gc29tZSB0ZXN0aW5nIHZvb2RvbyA7LSkNCiAgICByZXR1cm4gJHRydWUNCn0NCgEJPwMAAAlAAwAABkEDAAAUVGVzdC1TZWNyZXRWYXVsdC5wczEGQgMAAHZTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cZnVuY3Rpb25zXFRlc3QtU2VjcmV0VmF1bHQucHMxCQYAAAAJRAMAAAlFAwAAAXQCAAAPAAAABkYDAAD2CmZ1bmN0aW9uIFVubG9jay1TZWNyZXRWYXVsdCB7DQogICAgPCMNCiAgICAuU1lOT1BTSVMNCiAgICBVbmxvY2tzIHRoZSB2YXVsdC4NCg0KICAgIC5ERVNDUklQVElPTg0KICAgIFVubG9ja3MgdGhlIHZhdWx0Lg0KDQogICAgLlBBUkFNRVRFUiBQYXNzd29yZA0KICAgIFRoZSBwYXNzd29yZCBuZWVkZWQgZm9yIHVubG9ja2luZy4NCg0KICAgIC5QQVJBTUVURVIgVmF1bHROYW1lDQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4NCg0KICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuDQoNCiAgICAuRVhBTVBMRQ0KICAgIFVubG9jay1TZWNyZXRWYXVsdCAtVmF1bHROYW1lICR2YXVsdE5hbWUgLVBhc3N3b3JkIChSZWFkLUhvc3QgLUFzU2VjdXJlU3RyaW5nKQ0KDQogICAgVW5sb2NrcyB0aGUgdmF1bHQNCg0KICAgIC5OT1RFUw0KICAgIEdlbmVyYWwgbm90ZXMNCiAgICAjPg0KICAgIFtDbWRsZXRCaW5kaW5nKCldDQogICAgcGFyYW0gKA0KICAgICAgICBbU2VjdXJlU3RyaW5nXSAkUGFzc3dvcmQsDQogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsDQogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgICkNCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUNCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCg0KICAgIFdyaXRlLVBTRk1lc3NhZ2UgIlVubG9ja2luZyBTZWNyZXRWYXVsdCAkVmF1bHROYW1lLCBBZGRpdGlvbmFsUGFyYW1ldGVycz0kKCRBZGRpdGlvbmFsUGFyYW1ldGVyc3xDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIg0KICAgICR2YXVsdCA9IEdldC1TZWNyZXRWYXVsdCAkVmF1bHROYW1lIC1FcnJvckFjdGlvbiBTdG9wDQogICAgaWYgKCR2YXVsdC5Nb2R1bGVOYW1lIC1uZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicpIHsNCiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgRXJyb3IgIiR2YXVsdE5hbWUgd2FzIGZvdW5kIGJ1dCBpcyBub3QgYSDDvm5hbWXDviBWYXVsdC4iDQogICAgICAgIFdhaXQtUFNGTWVzc2FnZQ0KICAgICAgICByZXR1cm4gJGZhbHNlDQogICAgfQ0KICAgICMgVE9ETyBTaG91bGQgdGhlIG1hc3RlciBwYXNzd29yZCBiZSBjYWNoZWQ/DQogICAgIyBTZXQtVmFyaWFibGUgLU5hbWUgIlZhdWx0XyR7dmF1bHROYW1lfV9NYXN0ZXJQYXNzd29yZCIgLVNjb3BlIFNjcmlwdCAtVmFsdWUgJFBhc3N3b3JkIC1Gb3JjZQ0KDQogICAgIyBUT0RPIFBlcmZvcm0gdGhlIGNvbm5lY3Rpb24gdm9vZG9vIDstKQ0KICAgIHJldHVybiAkdHJ1ZQ0KfQEJRwMAAAlIAwAABkkDAAAWVW5sb2NrLVNlY3JldFZhdWx0LnBzMQZKAwAAeFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnNcVW5sb2NrLVNlY3JldFZhdWx0LnBzMQkGAAAACUwDAAAJTQMAAAF1AgAADwAAAAZOAwAAmAhmdW5jdGlvbiBVbnJlZ2lzdGVyLVNlY3JldFZhdWx0IHsNCiAgICA8Iw0KICAgIC5TWU5PUFNJUw0KICAgIFVucmVnaXN0ZXJzIHRoZSB2YXVsdCBhbmQgcmVtb3ZlcyBpbk1lbW9yeSBkYXRhIGZvciBzZWN1cml0eS4NCg0KICAgIC5ERVNDUklQVElPTg0KICAgIFVucmVnaXN0ZXJzIHRoZSB2YXVsdCBhbmQgcmVtb3ZlcyBpbk1lbW9yeSBkYXRhIGZvciBzZWN1cml0eS4NCg0KICAgIC5QQVJBTUVURVIgVmF1bHROYW1lDQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4NCg0KICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuDQoNCiAgICAuRVhBTVBMRQ0KICAgIFVucmVnaXN0ZXItU2VjcmV0VmF1bHQgLVZhdWx0TmFtZSAkdmF1bHROYW1lDQoNCiAgICBSZW1vdmVzIHRoZSByZWdpc3RyYXRpb24NCg0KICAgIC5OT1RFUw0KICAgIEdlbmVyYWwgbm90ZXMNCiAgICAjPg0KICAgIFtDbWRsZXRCaW5kaW5nKCldDQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTUmV2aWV3VW51c2VkUGFyYW1ldGVyJywgJycpXQ0KICAgIHBhcmFtICgNCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwNCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQogICAgKQ0KICAgICMgV29ya2Fyb3VuZCBDYXNlU2Vuc2l0aXZlIEhhc2hUYWJsZQ0KICAgICRBZGRpdGlvbmFsUGFyYW1ldGVycyA9IEB7fSArICRBZGRpdGlvbmFsUGFyYW1ldGVycw0KDQogICAgIyBUT0RPIEFkZCB5b3VyIHNwZWNpZmljIGRpc2Nvbm5lY3Rpb24gY29tbWFuZHMsIGUuZy4gcmVtb3ZpbmcgdGhlIHN0b3JlZCBtYXN0ZXIgcGFzc3dvcmQNCiAgICAjIFJlbW92ZS1WYXJpYWJsZSAtTmFtZSAiVmF1bHRfJHt2YXVsdE5hbWV9X01hc3RlclBhc3N3b3JkIiAtU2NvcGUgU2NyaXB0IC1Gb3JjZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQ0KfQ0KAQlPAwAACVADAAAGUQMAABpVbnJlZ2lzdGVyLVNlY3JldFZhdWx0LnBzMQZSAwAAfFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnNcVW5yZWdpc3Rlci1TZWNyZXRWYXVsdC5wczEJBgAAAAlUAwAACVUDAAABdgIAAA8AAAAGVgMAALACIyBGdW5jdGlvbnMuU2hhcmVkSW50ZXJuYWwNCg0KVGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIGludGVybmFsIGZ1bmN0aW9ucyBnbyB3aGljaCB3aWxsIGJlIGltcG9ydGVkIGZyb20gdGhlIG1haW4NCmFuZCB0aGUgZXh0ZW5zaW9uIG1vZHVsZS4NCg0KVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkuIElmIHRoZSBtb2R1bGUgaXMgYnVpbGQgd2l0aA0KJ3ZzdHMtYnVpbGQucHMxJyB0aGUgY29udGVudCBvZiBhbGwgKi5wczEgZmlsZXMgaXMgY29waWVkIGludG8gdGhlICoucHNtMSBmaWxlLgEJVwMAAAlYAwAABlkDAAAJcmVhZG1lLm1kBloDAAB6U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbFxyZWFkbWUubWQJBgAAAAlcAwAACV0DAAABdwIAAAEAAAAJXgMAAAZfAwAADmNvbmZpZ3VyYXRpb25zBmADAABvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXGNvbmZpZ3VyYXRpb25zCQYAAAAJYgMAAAljAwAAAXgCAAABAAAACWQDAAAGZQMAAAlmdW5jdGlvbnMGZgMAAGpTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWxcZnVuY3Rpb25zCQYAAAAJaAMAAAlpAwAAAXkCAAABAAAACWoDAAAGawMAAAxzY3JpcHRibG9ja3MGbAMAAG1TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWxcc2NyaXB0YmxvY2tzCQYAAAAJbgMAAAlvAwAAAXoCAAABAAAACXADAAAGcQMAAAdzY3JpcHRzBnIDAABoU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXHNjcmlwdHMJBgAAAAl0AwAACXUDAAABewIAAAEAAAAJdgMAAAZ3AwAABHRlcHAGeAMAAGVTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWxcdGVwcAkGAAAACXoDAAAJewMAAAF8AgAAAQAAAAl8AwAABn0DAAAJZnVuY3Rpb25zBn4DAABnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHRlc3RzXGZ1bmN0aW9ucwkGAAAACYADAAAJgQMAAAF9AgAAAQAAAAmCAwAABoMDAAAHZ2VuZXJhbAaEAwAAZVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblx0ZXN0c1xnZW5lcmFsCQYAAAAJhgMAAAmHAwAAAX4CAAAPAAAABogDAACpG3BhcmFtICgNCgkkVGVzdEdlbmVyYWwgPSAkdHJ1ZSwNCgkNCgkkVGVzdEZ1bmN0aW9ucyA9ICR0cnVlLA0KCQ0KCVtWYWxpZGF0ZVNldCgnTm9uZScsICdOb3JtYWwnLCAnRGV0YWlsZWQnLCAnRGlhZ25vc3RpYycpXQ0KCVtBbGlhcygnU2hvdycpXQ0KCSRPdXRwdXQgPSAiTm9uZSIsDQoJDQoJJEluY2x1ZGUgPSAiKiIsDQoJDQoJJEV4Y2x1ZGUgPSAiIg0KKQ0KDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlN0YXJ0aW5nIFRlc3RzIg0KDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkltcG9ydGluZyBNb2R1bGUiDQoNCiRnbG9iYWw6dGVzdHJvb3QgPSAkUFNTY3JpcHRSb290DQokZ2xvYmFsOl9fcGVzdGVyX2RhdGEgPSBAeyB9DQoNClJlbW92ZS1Nb2R1bGUgw75uYW1lw74gLUVycm9yQWN0aW9uIElnbm9yZQ0KSW1wb3J0LU1vZHVsZSAiJFBTU2NyaXB0Um9vdFwuLlzDvm5hbWXDvi5wc2QxIg0KSW1wb3J0LU1vZHVsZSAiJFBTU2NyaXB0Um9vdFwuLlzDvm5hbWXDvi5wc20xIiAtRm9yY2UNCg0KIyBOZWVkIHRvIGltcG9ydCBleHBsaWNpdGx5IHNvIHdlIGNhbiB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gY2xhc3MNCkltcG9ydC1Nb2R1bGUgUGVzdGVyDQoNCsO+IXRlc3Rmb2xkZXIhw74NCg0KJHRvdGFsRmFpbGVkID0gMA0KJHRvdGFsUnVuID0gMA0KDQokdGVzdHJlc3VsdHMgPSBAKCkNCiRjb25maWcgPSBbUGVzdGVyQ29uZmlndXJhdGlvbl06OkRlZmF1bHQNCsO+IXBlc3RlcmNvbmZpZyHDvg0KDQojcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzDQppZiAoJFRlc3RHZW5lcmFsKQ0Kew0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiTW9kdWxlcyBpbXBvcnRlZCwgcHJvY2VlZGluZyB3aXRoIGdlbmVyYWwgdGVzdHMiDQoJZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRQU1NjcmlwdFJvb3RcZ2VuZXJhbCIgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5UZXN0cy5wczEiKSkNCgl7DQoJCWlmICgkZmlsZS5OYW1lIC1ub3RsaWtlICRJbmNsdWRlKSB7IGNvbnRpbnVlIH0NCgkJaWYgKCRmaWxlLk5hbWUgLWxpa2UgJEV4Y2x1ZGUpIHsgY29udGludWUgfQ0KDQoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyA8Yz0nZW0nPiQoJGZpbGUuTmFtZSk8L2M+Ig0KCQkkY29uZmlnLlRlc3RSZXN1bHQuT3V0cHV0UGF0aCA9IEpvaW4tUGF0aCAiJFBTU2NyaXB0Um9vdFwuLlwuLlxUZXN0UmVzdWx0cyIgIlRFU1QtJCgkZmlsZS5CYXNlTmFtZSkueG1sIg0KCQkkY29uZmlnLlJ1bi5QYXRoID0gJGZpbGUuRnVsbE5hbWUNCgkJJGNvbmZpZy5SdW4uUGFzc1RocnUgPSAkdHJ1ZQ0KCQkkY29uZmlnLk91dHB1dC5WZXJib3NpdHkgPSAkT3V0cHV0DQogICAgCSRyZXN1bHRzID0gSW52b2tlLVBlc3RlciAtQ29uZmlndXJhdGlvbiAkY29uZmlnDQoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpDQoJCXsNCgkJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQNCgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50DQoJCQkkcmVzdWx0LlRlc3RzIHwgV2hlcmUtT2JqZWN0IFJlc3VsdCAtbmUgJ1Bhc3NlZCcgfCBGb3JFYWNoLU9iamVjdCB7DQoJCQkJJHRlc3RyZXN1bHRzICs9IFtwc2N1c3RvbW9iamVjdF1Aew0KCQkJCQlCbG9jayAgICA9ICRfLkJsb2NrDQoJCQkJCU5hbWUJID0gIkl0ICQoJF8uTmFtZSkiDQoJCQkJCVJlc3VsdCAgID0gJF8uUmVzdWx0DQoJCQkJCU1lc3NhZ2UgID0gJF8uRXJyb3JSZWNvcmQuRGlzcGxheUVycm9yTWVzc2FnZQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCn0NCiNlbmRyZWdpb24gUnVuIEdlbmVyYWwgVGVzdHMNCg0KJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyIHwgT3V0LUhvc3QNCg0KI3JlZ2lvbiBUZXN0IENvbW1hbmRzDQppZiAoJFRlc3RGdW5jdGlvbnMpDQp7DQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJQcm9jZWVkaW5nIHdpdGggaW5kaXZpZHVhbCB0ZXN0cyINCglmb3JlYWNoICgkZmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAiJFBTU2NyaXB0Um9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIipUZXN0cy5wczEiKSkNCgl7DQoJCWlmICgkZmlsZS5OYW1lIC1ub3RsaWtlICRJbmNsdWRlKSB7IGNvbnRpbnVlIH0NCgkJaWYgKCRmaWxlLk5hbWUgLWxpa2UgJEV4Y2x1ZGUpIHsgY29udGludWUgfQ0KCQkNCgkJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgU2lnbmlmaWNhbnQgLU1lc3NhZ2UgIiAgRXhlY3V0aW5nICQoJGZpbGUuTmFtZSkiDQoJCSRjb25maWcuVGVzdFJlc3VsdC5PdXRwdXRQYXRoID0gSm9pbi1QYXRoICIkUFNTY3JpcHRSb290XC4uXC4uXFRlc3RSZXN1bHRzIiAiVEVTVC0kKCRmaWxlLkJhc2VOYW1lKS54bWwiDQoJCSRjb25maWcuUnVuLlBhdGggPSAkZmlsZS5GdWxsTmFtZQ0KCQkkY29uZmlnLlJ1bi5QYXNzVGhydSA9ICR0cnVlDQoJCSRjb25maWcuT3V0cHV0LlZlcmJvc2l0eSA9ICRPdXRwdXQNCiAgICAJJHJlc3VsdHMgPSBJbnZva2UtUGVzdGVyIC1Db25maWd1cmF0aW9uICRjb25maWcNCgkJZm9yZWFjaCAoJHJlc3VsdCBpbiAkcmVzdWx0cykNCgkJew0KCQkJJHRvdGFsUnVuICs9ICRyZXN1bHQuVG90YWxDb3VudA0KCQkJJHRvdGFsRmFpbGVkICs9ICRyZXN1bHQuRmFpbGVkQ291bnQNCgkJCSRyZXN1bHQuVGVzdHMgfCBXaGVyZS1PYmplY3QgUmVzdWx0IC1uZSAnUGFzc2VkJyB8IEZvckVhY2gtT2JqZWN0IHsNCgkJCQkkdGVzdHJlc3VsdHMgKz0gW3BzY3VzdG9tb2JqZWN0XUB7DQoJCQkJCUJsb2NrICAgID0gJF8uQmxvY2sNCgkJCQkJTmFtZQkgPSAiSXQgJCgkXy5OYW1lKSINCgkJCQkJUmVzdWx0ICAgPSAkXy5SZXN1bHQNCgkJCQkJTWVzc2FnZSAgPSAkXy5FcnJvclJlY29yZC5EaXNwbGF5RXJyb3JNZXNzYWdlDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KI2VuZHJlZ2lvbiBUZXN0IENvbW1hbmRzDQoNCiR0ZXN0cmVzdWx0cyB8IFNvcnQtT2JqZWN0IERlc2NyaWJlLCBDb250ZXh0LCBOYW1lLCBSZXN1bHQsIE1lc3NhZ2UgfCBGb3JtYXQtTGlzdA0KDQppZiAoJHRvdGFsRmFpbGVkIC1lcSAwKSB7IFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIENyaXRpY2FsIC1NZXNzYWdlICJBbGwgPGM9J2VtJz4kdG90YWxSdW48L2M+IHRlc3RzIGV4ZWN1dGVkIHdpdGhvdXQgYSBzaW5nbGUgZmFpbHVyZSEiIH0NCmVsc2UgeyBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBDcml0aWNhbCAtTWVzc2FnZSAiPGM9J2VtJz4kdG90YWxGYWlsZWQgdGVzdHM8L2M+IG91dCBvZiA8Yz0nc3ViJz4kdG90YWxSdW48L2M+IHRlc3RzIGZhaWxlZCEiIH0NCg0KaWYgKCR0b3RhbEZhaWxlZCAtZ3QgMCkNCnsNCgl0aHJvdyAiJHRvdGFsRmFpbGVkIC8gJHRvdGFsUnVuIHRlc3RzIGZhaWxlZCEiDQp9AQmJAwAACYoDAAAGiwMAAApwZXN0ZXIucHMxBowDAABoU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHRlc3RzXHBlc3Rlci5wczEJBgAAAAmOAwAACY8DAAABfwIAAA8AAAAGkAMAAKIHIyBEZXNjcmlwdGlvbg0KDQpUaGlzIGlzIHRoZSBmb2xkZXIsIHdoZXJlIGFsbCB0aGUgdGVzdHMgZ28uDQoNClRob3NlIGFyZSBzdWJkaXZpZGVkIGluIHR3byBjYXRlZ29yaWVzOg0KDQogLSBHZW5lcmFsDQogLSBGdW5jdGlvbg0KDQojIyBHZW5lcmFsIFRlc3RzDQoNCkdlbmVyYWwgdGVzdHMgYXJlIGZ1bmN0aW9uIGdlbmVyaWMgYW5kIHRlc3QgZm9yIGdlbmVyYWwgcG9saWNpZXMuDQoNClRoZXNlIHRlc3Qgc2NhbiBhbnN3ZXIgcXVlc3Rpb25zIHN1Y2ggYXM6DQoNCiAtIElzIG15IG1vZHVsZSBmb2xsb3dpbmcgbXkgc3R5bGUgZ3VpZGVzPw0KIC0gRG9lcyBhbnkgb2YgbXkgc2NyaXB0cyBoYXZlIGEgc3ludGF4IGVycm9yPw0KIC0gRG8gbXkgc2NyaXB0cyB1c2UgY29tbWFuZHMgSSBkbyBub3Qgd2FudCB0aGVtIHRvIHVzZT8NCiAtIERvIG15IGNvbW1hbmRzIGZvbGxvdyBiZXN0IHByYWN0aWNlcz8NCiAtIERvIG15IGNvbW1hbmRzIGhhdmUgcHJvcGVyIGhlbHA/DQoNCkJhc2ljYWxseSwgdGhlc2UgYWxsb3cgYSBnZW5lcmFsIG1vZHVsZSBoZWFsdGggY2hlY2suDQoNClRoZXNlIHRlc3RzIGFyZSBhbHJlYWR5IHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhlIHRlbXBsYXRlLg0KDQojIyBGdW5jdGlvbiBUZXN0cw0KDQpBIGhlYWx0aHkgbW9kdWxlIHNob3VsZCBwcm92aWRlIHVuaXQgYW5kIGludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgY29tbWFuZHMgJiBjb21wb25lbnRzIGl0IHNoaXBzLg0KT25seSB0aGVuIGNhbiBiZSBndWFyYW50ZWVkLCB0aGF0IHRoZXkgd2lsbCBhY3R1YWxseSBwZXJmb3JtIGFzIHByb21pc2VkLg0KDQpIb3dldmVyLCBhcyBlYWNoIHN1Y2ggdGVzdCBtdXN0IGJlIHNwZWNpZmljIHRvIHRoZSBmdW5jdGlvbiBpdCB0ZXN0cywgdGhlcmUgY2Fubm90IGJlIG11Y2ggaW4gdGhlIHdheSBvZiB0ZW1wbGF0ZXMuAQmRAwAACZIDAAAGkwMAAAlyZWFkbWUubWQGlAMAAGdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cdGVzdHNccmVhZG1lLm1kCQYAAAAJlgMAAAmXAwAAAYACAAAPAAAABpgDAACsCyMgWE1MDQoNClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSBwcm9qZWN0IFhNTCBmaWxlcyBnbywgbm90YWJseToNCg0KIC0gRm9ybWF0IFhNTA0KIC0gVHlwZSBFeHRlbnNpb24gWE1MDQoNCkV4dGVybmFsIGhlbHAgZmlsZXMgc2hvdWxkIF9ub3RfIGJlIHBsYWNlZCBpbiB0aGlzIGZvbGRlciENCg0KIyMgTm90ZXMgb24gRmlsZXMgYW5kIE5hbWluZw0KDQpUaGVyZSBzaG91bGQgYmUgb25seSBvbmUgZm9ybWF0IGZpbGUgYW5kIG9uZSB0eXBlIGV4dGVuc2lvbiBmaWxlIHBlciBwcm9qZWN0LCBhcyBpbXBvcnRpbmcgdGhlbSBoYXMgYSBub3RhYmxlIGltcGFjdCBvbiBpbXBvcnQgdGltZXMuDQoNCiAtIFRoZSBGb3JtYXQgWE1MIHNob3VsZCBiZSBuYW1lZCBgw75uYW1lw74uRm9ybWF0LnBzMXhtbGANCiAtIFRoZSBUeXBlIEV4dGVuc2lvbiBYTUwgc2hvdWxkIGJlIG5hbWVkIGDDvm5hbWXDvi5UeXBlcy5wczF4bWxgDQoNCiMjIFRvb2xzDQoNCiMjIyBOZXctUFNNREZvcm1hdFRhYmxlRGVmaW5pdGlvbg0KDQpUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhbiBpbnB1dCBvYmplY3QgYW5kIGdlbmVyYXRlIGZvcm1hdCB4bWwgZm9yIGFuIGF1dG8tc2l6ZWQgdGFibGUuDQoNCkl0IHByb3ZpZGVzIGEgc2ltcGxlIHdheSB0byBnZXQgc3RhcnRlZCB3aXRoIGZvcm1hdHMuDQoNCiMjIyBHZXQtUFNGVHlwZVNlcmlhbGl6YXRpb25EYXRhDQoNCmBgYA0KQyMgV2FybmluZyENClRoaXMgc2VjdGlvbiBpcyBvbmx5IGludGVyZXN0IGlmIHlvdSdyZSB1c2luZyBDIyB0b2dldGhlciB3aXRoIFBvd2VyU2hlbGwuDQpgYGANCg0KVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdHlwZSBleHRlbnNpb24gWE1MIHRoYXQgYWxsb3dzIFBvd2VyU2hlbGwgdG8gY29udmVydCB0eXBlcyB3cml0dGVuIGluIEMjIHRvIGJlIHdyaXR0ZW4gdG8gZmlsZSBhbmQgcmVzdG9yZWQgZnJvbSBpdCB3aXRob3V0IGJlaW5nICdEZXNlcmlhbGl6ZWQnLiBBbHNvIHdvcmtzIGZvciBqb2JzIG9yIHJlbW90aW5nLCBpZiBib3RoIHNpZGVzIGhhdmUgdGhlIGBQU0ZyYW1ld29ya2AgbW9kdWxlIGFuZCB0eXBlIGV4dGVuc2lvbiBsb2FkZWQuDQoNCkluIG9yZGVyIGZvciBhIGNsYXNzIHRvIGJlIGVsaWdpYmxlIGZvciB0aGlzLCBpdCBuZWVkcyB0byBjb25mb3JtIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXM6DQoNCiAtIEhhdmUgdGhlIGBbU2VyaWFsaXphYmxlXWAgYXR0cmlidXRlDQogLSBCZSBwdWJsaWMNCiAtIEhhdmUgYW4gZW1wdHkgY29uc3RydWN0b3INCiAtIEFsbG93IGFsbCBwdWJsaWMgcHJvcGVydGllcy9maWVsZHMgdG8gYmUgc2V0IChldmVuIGlmIHNldHRpbmcgaXQgZG9lc24ndCBkbyBhbnl0aGluZykgd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24uDQoNCmBgYA0Kbm9uLXB1YmxpYyBwcm9wZXJ0aWVzIGFuZCBmaWVsZHMgd2lsbCBiZSBsb3N0IGluIHRoaXMgcHJvY2VzcyENCmBgYAEJmQMAAAmaAwAABpsDAAAJcmVhZG1lLm1kBpwDAABlU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHhtbFxyZWFkbWUubWQJBgAAAAmeAwAACZ8DAAABgQIAAA8AAAAGoAMAAOgFPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTE2Ij8+DQo8Q29uZmlndXJhdGlvbj4NCgk8Vmlld0RlZmluaXRpb25zPg0KCQk8IS0tIEZvby5CYXIgLS0+DQoJCTxWaWV3Pg0KCQkJPE5hbWU+Rm9vLkJhcjwvTmFtZT4NCgkJCTxWaWV3U2VsZWN0ZWRCeT4NCgkJCQk8VHlwZU5hbWU+Rm9vLkJhcjwvVHlwZU5hbWU+DQoJCQk8L1ZpZXdTZWxlY3RlZEJ5Pg0KCQkJPFRhYmxlQ29udHJvbD4NCgkJCQk8QXV0b1NpemUvPg0KCQkJCTxUYWJsZUhlYWRlcnM+DQoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+DQoJCQkJCTxUYWJsZUNvbHVtbkhlYWRlci8+DQoJCQkJPC9UYWJsZUhlYWRlcnM+DQoJCQkJPFRhYmxlUm93RW50cmllcz4NCgkJCQkJPFRhYmxlUm93RW50cnk+DQoJCQkJCQk8VGFibGVDb2x1bW5JdGVtcz4NCgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJCQk8UHJvcGVydHlOYW1lPkZvbzwvUHJvcGVydHlOYW1lPg0KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJCTxUYWJsZUNvbHVtbkl0ZW0+DQoJCQkJCQkJCTxQcm9wZXJ0eU5hbWU+QmFyPC9Qcm9wZXJ0eU5hbWU+DQoJCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW0+DQoJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbXM+DQoJCQkJCTwvVGFibGVSb3dFbnRyeT4NCgkJCQk8L1RhYmxlUm93RW50cmllcz4NCgkJCTwvVGFibGVDb250cm9sPg0KCQk8L1ZpZXc+DQoJPC9WaWV3RGVmaW5pdGlvbnM+DQo8L0NvbmZpZ3VyYXRpb24+AQmhAwAACaIDAAAGowMAABbDvm5hbWXDvi5Gb3JtYXQucHMxeG1sBqQDAAByU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHhtbFzDvm5hbWXDvi5Gb3JtYXQucHMxeG1sCQYAAAAJpgMAAAmnAwAAAYICAAAPAAAABqgDAADgBzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQo8VHlwZXM+DQogIDwhLS0gRm9vLkJhciAtLT4NCiAgPFR5cGU+DQogICAgPE5hbWU+RGVzZXJpYWxpemVkLkZvby5CYXI8L05hbWU+DQogICAgPE1lbWJlcnM+DQogICAgICA8TWVtYmVyU2V0Pg0KICAgICAgICA8TmFtZT5QU1N0YW5kYXJkTWVtYmVyczwvTmFtZT4NCiAgICAgICAgPE1lbWJlcnM+DQogICAgICAgICAgPE5vdGVQcm9wZXJ0eT4NCiAgICAgICAgICAgIDxOYW1lPg0KICAgICAgICAgICAgICBUYXJnZXRUeXBlRm9yRGVzZXJpYWxpemF0aW9uDQogICAgICAgICAgICA8L05hbWU+DQogICAgICAgICAgICA8VmFsdWU+DQogICAgICAgICAgICAgIEZvby5CYXINCiAgICAgICAgICAgIDwvVmFsdWU+DQogICAgICAgICAgPC9Ob3RlUHJvcGVydHk+DQogICAgICAgIDwvTWVtYmVycz4NCiAgICAgIDwvTWVtYmVyU2V0Pg0KICAgIDwvTWVtYmVycz4NCiAgPC9UeXBlPg0KICA8VHlwZT4NCiAgICA8TmFtZT5Gb28uQmFyPC9OYW1lPg0KICAgIDxNZW1iZXJzPg0KICAgICAgPENvZGVQcm9wZXJ0eSBJc0hpZGRlbj0idHJ1ZSI+DQogICAgICAgIDxOYW1lPlNlcmlhbGl6YXRpb25EYXRhPC9OYW1lPg0KICAgICAgICA8R2V0Q29kZVJlZmVyZW5jZT4NCiAgICAgICAgICA8VHlwZU5hbWU+UFNGcmFtZXdvcmsuU2VyaWFsaXphdGlvbi5TZXJpYWxpemF0aW9uVHlwZUNvbnZlcnRlcjwvVHlwZU5hbWU+DQogICAgICAgICAgPE1ldGhvZE5hbWU+R2V0U2VyaWFsaXphdGlvbkRhdGE8L01ldGhvZE5hbWU+DQogICAgICAgIDwvR2V0Q29kZVJlZmVyZW5jZT4NCiAgICAgIDwvQ29kZVByb3BlcnR5Pg0KICAgIDwvTWVtYmVycz4NCiAgICA8VHlwZUNvbnZlcnRlcj4NCiAgICAgIDxUeXBlTmFtZT5QU0ZyYW1ld29yay5TZXJpYWxpemF0aW9uLlNlcmlhbGl6YXRpb25UeXBlQ29udmVydGVyPC9UeXBlTmFtZT4NCiAgICA8L1R5cGVDb252ZXJ0ZXI+DQogIDwvVHlwZT4NCjwvVHlwZXM+AQmpAwAACaoDAAAGqwMAABXDvm5hbWXDvi5UeXBlcy5wczF4bWwGrAMAAHFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25ceG1sXMO+bmFtZcO+LlR5cGVzLnBzMXhtbAkGAAAACa4DAAAJrwMAAAGPAgAADwAAAAawAwAA1QEjIERlc2NyaXB0aW9uDQoNClRoaXMgaXMgd2hlcmUgdGhlIGZ1bmN0aW9uIHRlc3RzIGdvLg0KDQpNYWtlIHN1cmUgdG8gcHV0IHRoZW0gaW4gZm9sZGVycyByZWZsZWN0aW5nIHRoZSBhY3R1YWwgbW9kdWxlIHN0cnVjdHVyZS4NCg0KSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaW50ZXJuYWwgYW5kIHB1YmxpYyBmdW5jdGlvbnMgaGVyZS4BCbEDAAAJsgMAAAazAwAACXJlYWRtZS5tZAa0AwAATVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0c1xmdW5jdGlvbnNccmVhZG1lLm1kCQYAAAAJtgMAAAm3AwAAAZACAAAPAAAABrgDAACCBiMgTGlzdCBvZiBmb3JiaWRkZW4gY29tbWFuZHMNCiRnbG9iYWw6QmFubmVkQ29tbWFuZHMgPSBAKA0KCSdXcml0ZS1Ib3N0Jw0KCSdXcml0ZS1WZXJib3NlJw0KCSdXcml0ZS1XYXJuaW5nJw0KCSdXcml0ZS1FcnJvcicNCgknV3JpdGUtT3V0cHV0Jw0KCSdXcml0ZS1JbmZvcm1hdGlvbicNCgknV3JpdGUtRGVidWcnDQoJDQoJIyBVc2UgQ0lNIGluc3RlYWQgd2hlcmUgcG9zc2libGUNCgknR2V0LVdtaU9iamVjdCcNCgknSW52b2tlLVdtaU1ldGhvZCcNCgknUmVnaXN0ZXItV21pRXZlbnQnDQoJJ1JlbW92ZS1XbWlPYmplY3QnDQoJJ1NldC1XbWlJbnN0YW5jZScNCg0KCSMgVXNlIEdldC1XaW5FdmVudCBpbnN0ZWFkDQoJJ0dldC1FdmVudExvZycNCikNCg0KPCMNCglDb250YWlucyBsaXN0IG9mIGV4Y2VwdGlvbnMgZm9yIGJhbm5lZCBjbWRsZXRzLg0KCUluc2VydCB0aGUgZmlsZSBuYW1lcyBvZiBmaWxlcyB0aGF0IG1heSBjb250YWluIHRoZW0uDQoJDQoJRXhhbXBsZToNCgkiV3JpdGUtSG9zdCIgID0gQCgnV3JpdGUtUFNGSG9zdENvbG9yLnBzMScsJ1dyaXRlLVBTRk1lc3NhZ2UucHMxJykNCiM+DQokZ2xvYmFsOk1heUNvbnRhaW5Db21tYW5kID0gQHsNCgkiV3JpdGUtSG9zdCIgID0gQCgpDQoJIldyaXRlLVZlcmJvc2UiID0gQCgpDQoJIldyaXRlLVdhcm5pbmciID0gQCgpDQoJIldyaXRlLUVycm9yIiAgPSBAKCkNCgkiV3JpdGUtT3V0cHV0IiA9IEAoKQ0KCSJXcml0ZS1JbmZvcm1hdGlvbiIgPSBAKCkNCgkiV3JpdGUtRGVidWciID0gQCgpDQp9AQm5AwAACboDAAAGuwMAABxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxBrwDAABeU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHRlc3RzXGdlbmVyYWxcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQkGAAAACb4DAAAJvwMAAAGRAgAADwAAAAbAAwAA4BgkbW9kdWxlUm9vdCA9IChSZXNvbHZlLVBhdGggIiRnbG9iYWw6dGVzdHJvb3RcLi4iKS5QYXRoDQoNCi4gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxIg0KDQpEZXNjcmliZSAiVmVyaWZ5aW5nIGludGVncml0eSBvZiBtb2R1bGUgZmlsZXMiIHsNCglCZWZvcmVBbGwgew0KCQlmdW5jdGlvbiBHZXQtRmlsZUVuY29kaW5nDQoJCXsNCgkJPCMNCgkJCS5TWU5PUFNJUw0KCQkJCVRlc3RzIGEgZmlsZSBmb3IgZW5jb2RpbmcuDQoJCQkNCgkJCS5ERVNDUklQVElPTg0KCQkJCVRlc3RzIGEgZmlsZSBmb3IgZW5jb2RpbmcuDQoJCQkNCgkJCS5QQVJBTUVURVIgUGF0aA0KCQkJCVRoZSBmaWxlIHRvIHRlc3QNCgkJIz4NCgkJCVtDbWRsZXRCaW5kaW5nKCldDQoJCQlQYXJhbSAoDQoJCQkJW1BhcmFtZXRlcihNYW5kYXRvcnkgPSAkVHJ1ZSwgVmFsdWVGcm9tUGlwZWxpbmVCeVByb3BlcnR5TmFtZSA9ICRUcnVlKV0NCgkJCQlbQWxpYXMoJ0Z1bGxOYW1lJyldDQoJCQkJW3N0cmluZ10NCgkJCQkkUGF0aA0KCQkJKQ0KCQkJDQoJCQlpZiAoJFBTVmVyc2lvblRhYmxlLlBTVmVyc2lvbi5NYWpvciAtbHQgNikNCgkJCXsNCgkJCQlbYnl0ZVtdXSRieXRlID0gZ2V0LWNvbnRlbnQgLUVuY29kaW5nIGJ5dGUgLVJlYWRDb3VudCA0IC1Ub3RhbENvdW50IDQgLVBhdGggJFBhdGgNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlbYnl0ZVtdXSRieXRlID0gR2V0LUNvbnRlbnQgLUFzQnl0ZVN0cmVhbSAtUmVhZENvdW50IDQgLVRvdGFsQ291bnQgNCAtUGF0aCAkUGF0aA0KCQkJfQ0KCQkJDQoJCQlpZiAoJGJ5dGVbMF0gLWVxIDB4ZWYgLWFuZCAkYnl0ZVsxXSAtZXEgMHhiYiAtYW5kICRieXRlWzJdIC1lcSAweGJmKSB7ICdVVEY4IEJPTScgfQ0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMHhmZSAtYW5kICRieXRlWzFdIC1lcSAweGZmKSB7ICdVbmljb2RlJyB9DQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAwIC1hbmQgJGJ5dGVbMV0gLWVxIDAgLWFuZCAkYnl0ZVsyXSAtZXEgMHhmZSAtYW5kICRieXRlWzNdIC1lcSAweGZmKSB7ICdVVEYzMicgfQ0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMHgyYiAtYW5kICRieXRlWzFdIC1lcSAweDJmIC1hbmQgJGJ5dGVbMl0gLWVxIDB4NzYpIHsgJ1VURjcnIH0NCgkJCWVsc2UgeyAnVW5rbm93bicgfQ0KCQl9DQoJfQ0KDQoJQ29udGV4dCAiVmFsaWRhdGluZyBQUzEgU2NyaXB0IGZpbGVzIiB7DQoJCSRhbGxGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJG1vZHVsZVJvb3QgLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIg0KCQkNCgkJZm9yZWFjaCAoJGZpbGUgaW4gJGFsbEZpbGVzKQ0KCQl7DQoJCQkkbmFtZSA9ICRmaWxlLkZ1bGxOYW1lLlJlcGxhY2UoIiRtb2R1bGVSb290XCIsICcnKQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIHdpdGggQnl0ZSBPcmRlciBNYXJrIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsNCgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCBCT00nDQoJCQl9DQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHRyYWlsaW5nIHNwYWNlIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsNCgkJCQkoJGZpbGUgfCBTZWxlY3QtU3RyaW5nICJccyQiIHwgV2hlcmUtT2JqZWN0IHsgJF8uTGluZS5UcmltKCkuTGVuZ3RoIC1ndCAwfSkuTGluZU51bWJlciB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQkJfQ0KCQkJDQoJCQkkdG9rZW5zID0gJG51bGwNCgkJCSRwYXJzZUVycm9ycyA9ICRudWxsDQoJCQkkYXN0ID0gW1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uTGFuZ3VhZ2UuUGFyc2VyXTo6UGFyc2VGaWxlKCRmaWxlLkZ1bGxOYW1lLCBbcmVmXSR0b2tlbnMsIFtyZWZdJHBhcnNlRXJyb3JzKQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyBzeW50YXggZXJyb3JzIiAtVGVzdENhc2VzIEB7IHBhcnNlRXJyb3JzID0gJHBhcnNlRXJyb3JzIH0gew0KCQkJCSRwYXJzZUVycm9ycyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQkJfQ0KCQkJDQoJCQlmb3JlYWNoICgkY29tbWFuZCBpbiAkZ2xvYmFsOkJhbm5lZENvbW1hbmRzKQ0KCQkJew0KCQkJCWlmICgkZ2xvYmFsOk1heUNvbnRhaW5Db21tYW5kWyIkY29tbWFuZCJdIC1ub3Rjb250YWlucyAkZmlsZS5OYW1lKQ0KCQkJCXsNCgkJCQkJSXQgIlskbmFtZV0gU2hvdWxkIG5vdCB1c2UgJGNvbW1hbmQiIC1UZXN0Q2FzZXMgQHsgdG9rZW5zID0gJHRva2VuczsgY29tbWFuZCA9ICRjb21tYW5kIH0gew0KCQkJCQkJJHRva2VucyB8IFdoZXJlLU9iamVjdCBUZXh0IC1FUSAkY29tbWFuZCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KCQ0KCUNvbnRleHQgIlZhbGlkYXRpbmcgaGVscC50eHQgaGVscCBmaWxlcyIgew0KCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIiouaGVscC50eHQiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIg0KCQkNCgkJZm9yZWFjaCAoJGZpbGUgaW4gJGFsbEZpbGVzKQ0KCQl7DQoJCQkkbmFtZSA9ICRmaWxlLkZ1bGxOYW1lLlJlcGxhY2UoIiRtb2R1bGVSb290XCIsICcnKQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsNCgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCBCT00nDQoJCQl9DQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHRyYWlsaW5nIHNwYWNlIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsNCgkJCQkoJGZpbGUgfCBTZWxlY3QtU3RyaW5nICJccyQiIHwgV2hlcmUtT2JqZWN0IHsgJF8uTGluZS5UcmltKCkuTGVuZ3RoIC1ndCAwIH0gfCBNZWFzdXJlLU9iamVjdCkuQ291bnQgfCBTaG91bGQgLUJlIDANCgkJCX0NCgkJfQ0KCX0NCn0BCcEDAAAJwgMAAAbDAwAAF0ZpbGVJbnRlZ3JpdHkuVGVzdHMucHMxBsQDAABZU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHRlc3RzXGdlbmVyYWxcRmlsZUludGVncml0eS5UZXN0cy5wczEJBgAAAAnGAwAACccDAAABkgIAAA8AAAAGyAMAAJ0FIyBMaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkDQokZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zID0gQCgNCiAgICANCikNCg0KPCMNCiAgTGlzdCBvZiBhcnJheWVkIGVudW1lcmF0aW9ucy4gVGhlc2UgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LiBBZGQgZnVsbCBuYW1lLg0KICBFeGFtcGxlOg0KDQogICJTcWxjb2xsYWJvcmF0aXZlLkRiYXRvb2xzLkNvbm5lY3Rpb24uTWFuYWdlbWVudENvbm5lY3Rpb25UeXBlW10iDQojPg0KJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMgPSBAKA0KCQ0KKQ0KDQo8Iw0KICBTb21lIHR5cGVzIG9uIHBhcmFtZXRlcnMganVzdCBmYWlsIHRoZWlyIHZhbGlkYXRpb24gbm8gbWF0dGVyIHdoYXQuDQogIEZvciB0aG9zZSBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIHNraXAgdGhlbSwgYnkgYWRkaW5nIHRoZW0gdG8gdGhpcyBoYXNodGFibGUuDQogIEFkZCBieSBmb2xsb3dpbmcgdGhpcyBjb252ZW50aW9uOiA8Y29tbWFuZCBuYW1lPiA9IEAoPGxpc3Qgb2YgcGFyYW1ldGVyIG5hbWVzPikNCiAgRXhhbXBsZToNCg0KICAiR2V0LURiYUNtT2JqZWN0IiAgICAgICA9IEAoIkRvTm90VXNlIikNCiM+DQokZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUgPSBAew0KICAgIA0KfQ0KAQnJAwAACcoDAAAGywMAABNIZWxwLkV4Y2VwdGlvbnMucHMxBswDAABVU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHRlc3RzXGdlbmVyYWxcSGVscC5FeGNlcHRpb25zLnBzMQkGAAAACc4DAAAJzwMAAAGTAgAADwAAAAbQAwAAzjQ8Iw0KICAgIC5OT1RFUw0KICAgICAgICBUaGUgb3JpZ2luYWwgdGVzdCB0aGlzIGlzIGJhc2VkIHVwb24gd2FzIHdyaXR0ZW4gYnkgSnVuZSBCbGVuZGVyLg0KCQlBZnRlciBzZXZlcmFsIHJvdW5kcyBvZiBtb2RpZmljYXRpb25zIGl0IHN0YW5kcyBub3cgYXMgaXQgaXMsIGJ1dCB0aGUgaG9ub3IgcmVtYWlucyBoZXJzLg0KDQoJCVRoYW5rIHlvdSBKdW5lLCBmb3IgYWxsIHlvdSBoYXZlIGRvbmUhDQoNCiAgICAuREVTQ1JJUFRJT04NCgkJVGhpcyB0ZXN0IGV2YWx1YXRlcyB0aGUgaGVscCBmb3IgYWxsIGNvbW1hbmRzIGluIGEgbW9kdWxlLg0KDQoJLlBBUkFNRVRFUiBTa2lwVGVzdA0KCQlEaXNhYmxlcyB0aGlzIHRlc3QuDQoJDQoJLlBBUkFNRVRFUiBDb21tYW5kUGF0aA0KCQlMaXN0IG9mIHBhdGhzIHVuZGVyIHdoaWNoIHRoZSBzY3JpcHQgZmlsZXMgYXJlIHN0b3JlZC4NCgkJVGhpcyB0ZXN0IGFzc3VtZXMgdGhhdCBhbGwgZnVuY3Rpb25zIGhhdmUgdGhlaXIgb3duIGZpbGUgdGhhdCBpcyBuYW1lZCBhZnRlciB0aGVtc2VsdmVzLg0KCQlUaGVzZSBwYXRocyBhcmUgdXNlZCB0byBzZWFyY2ggZm9yIGNvbW1hbmRzIHRoYXQgc2hvdWxkIGV4aXN0IGFuZCBiZSB0ZXN0ZWQuDQoJCVdpbGwgc2VhcmNoIHJlY3Vyc2l2ZWx5IGFuZCBhY2NlcHRzIHdpbGRjYXJkcywgbWFrZSBzdXJlIG9ubHkgZnVuY3Rpb25zIGFyZSBmb3VuZA0KDQoJLlBBUkFNRVRFUiBNb2R1bGVOYW1lDQoJCU5hbWUgb2YgdGhlIG1vZHVsZSB0byBiZSB0ZXN0ZWQuDQoJCVRoZSBtb2R1bGUgbXVzdCBhbHJlYWR5IGJlIGltcG9ydGVkDQoNCgkuUEFSQU1FVEVSIEV4Y2VwdGlvbnNGaWxlDQoJCUZpbGUgaW4gd2hpY2ggZXhjZXB0aW9ucyBhbmQgYWRqdXN0bWVudHMgYXJlIGNvbmZpZ3VyZWQuDQoJCUluIGl0IHRoZXJlIHNob3VsZCBiZSB0d28gYXJyYXlzIGFuZCBhIGhhc2h0YWJsZSBkZWZpbmVkOg0KCQkJJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucw0KCQkJJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMNCgkJCSRnbG9iYWw6SGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZQ0KCQlUaGVzZSBjYW4gYmUgdXNlZCB0byB0d2VhayB0aGUgdGVzdHMgc2xpZ2h0bHkgaW4gY2FzZXMgb2YgbmVlZC4NCgkJU2VlIHRoZSBleGFtcGxlIGZpbGUgZm9yIGV4cGxhbmF0aW9ucyBvbiBlYWNoIG9mIHRoZXNlIHVzYWdlIGFuZCBlZmZlY3QuDQojPg0KW0NtZGxldEJpbmRpbmcoKV0NClBhcmFtICgNCglbc3dpdGNoXQ0KCSRTa2lwVGVzdCwNCgkNCglbc3RyaW5nW11dDQoJJENvbW1hbmRQYXRoID0gQCgiJGdsb2JhbDp0ZXN0cm9vdFwuLlxmdW5jdGlvbnMiLCAiJGdsb2JhbDp0ZXN0cm9vdFwuLlxpbnRlcm5hbFxmdW5jdGlvbnMiKSwNCgkNCglbc3RyaW5nXQ0KCSRNb2R1bGVOYW1lID0gIsO+bmFtZcO+IiwNCgkNCglbc3RyaW5nXQ0KCSRFeGNlcHRpb25zRmlsZSA9ICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcSGVscC5FeGNlcHRpb25zLnBzMSINCikNCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0NCi4gJEV4Y2VwdGlvbnNGaWxlDQoNCiRpbmNsdWRlZE5hbWVzID0gKEdldC1DaGlsZEl0ZW0gJENvbW1hbmRQYXRoIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIikuQmFzZU5hbWUNCiRjb21tYW5kVHlwZXMgPSBAKCdDbWRsZXQnLCAnRnVuY3Rpb24nKQ0KaWYgKCRQU1ZlcnNpb25UYWJsZS5QU0VkaXRpb24gLWVxICdEZXNrdG9wJyApIHsgJGNvbW1hbmRUeXBlcyArPSAnV29ya2Zsb3cnIH0NCiRjb21tYW5kcyA9IEdldC1Db21tYW5kIC1Nb2R1bGUgKEdldC1Nb2R1bGUgJE1vZHVsZU5hbWUpIC1Db21tYW5kVHlwZSAkY29tbWFuZFR5cGVzIHwgV2hlcmUtT2JqZWN0IE5hbWUgLUluICRpbmNsdWRlZE5hbWVzDQoNCiMjIFdoZW4gdGVzdGluZyBoZWxwLCByZW1lbWJlciB0aGF0IGhlbHAgaXMgY2FjaGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBzZXNzaW9uLg0KIyMgVG8gdGVzdCwgcmVzdGFydCBzZXNzaW9uLg0KDQoNCmZvcmVhY2ggKCRjb21tYW5kIGluICRjb21tYW5kcykgew0KICAgICRjb21tYW5kTmFtZSA9ICRjb21tYW5kLk5hbWUNCiAgICANCiAgICAjIFNraXAgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBvbiB0aGUgZXhjbHVzaW9ucyBsaXN0DQogICAgaWYgKCRnbG9iYWw6RnVuY3Rpb25IZWxwVGVzdEV4Y2VwdGlvbnMgLWNvbnRhaW5zICRjb21tYW5kTmFtZSkgeyBjb250aW51ZSB9DQogICAgDQogICAgIyBUaGUgbW9kdWxlLXF1YWxpZmllZCBjb21tYW5kIGZhaWxzIG9uIE1pY3Jvc29mdC5Qb3dlclNoZWxsLkFyY2hpdmUgY21kbGV0cw0KICAgICRIZWxwID0gR2V0LUhlbHAgJGNvbW1hbmROYW1lIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlDQoJDQoJRGVzY3JpYmUgIlRlc3QgaGVscCBmb3IgJGNvbW1hbmROYW1lIiB7DQogICAgICAgIA0KCQkjIElmIGhlbHAgaXMgbm90IGZvdW5kLCBzeW5vcHNpcyBpbiBhdXRvLWdlbmVyYXRlZCBoZWxwIGlzIHRoZSBzeW50YXggZGlhZ3JhbQ0KCQlJdCAic2hvdWxkIG5vdCBiZSBhdXRvLWdlbmVyYXRlZCIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7DQoJCQkkSGVscC5TeW5vcHNpcyB8IFNob3VsZCAtTm90IC1CZUxpa2UgJypgW2A8Q29tbW9uUGFyYW1ldGVyc2A+YF0qJw0KCQl9DQogICAgICAgIA0KCQkjIFNob3VsZCBiZSBhIGRlc2NyaXB0aW9uIGZvciBldmVyeSBmdW5jdGlvbg0KCQlJdCAiZ2V0cyBkZXNjcmlwdGlvbiBmb3IgJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsNCgkJCSRIZWxwLkRlc2NyaXB0aW9uIHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KICAgICAgICANCgkJIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUNCgkJSXQgImdldHMgZXhhbXBsZSBjb2RlIGZyb20gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsNCgkJCSgkSGVscC5FeGFtcGxlcy5FeGFtcGxlIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuQ29kZSB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQoJCX0NCgkNCgkJIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUgZGVzY3JpcHRpb24NCgkJSXQgImdldHMgZXhhbXBsZSBoZWxwIGZyb20gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsNCgkJCSgkSGVscC5FeGFtcGxlcy5FeGFtcGxlLlJlbWFya3MgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KICAgICAgICANCiAgICAgICAgQ29udGV4dCAiVGVzdCBwYXJhbWV0ZXIgaGVscCBmb3IgJGNvbW1hbmROYW1lIiB7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRjb21tb24gPSAnRGVidWcnLCAnRXJyb3JBY3Rpb24nLCAnRXJyb3JWYXJpYWJsZScsICdJbmZvcm1hdGlvbkFjdGlvbicsICdJbmZvcm1hdGlvblZhcmlhYmxlJywgJ091dEJ1ZmZlcicsICdPdXRWYXJpYWJsZScsICdQaXBlbGluZVZhcmlhYmxlJywgJ1ZlcmJvc2UnLCAnV2FybmluZ0FjdGlvbicsICdXYXJuaW5nVmFyaWFibGUnDQogICAgICAgICAgICANCiAgICAgICAgICAgICRwYXJhbWV0ZXJzID0gJGNvbW1hbmQuUGFyYW1ldGVyU2V0cy5QYXJhbWV0ZXJzIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IE5hbWUgLVVuaXF1ZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1ub3RpbiAkY29tbW9uDQogICAgICAgICAgICAkcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVycy5OYW1lDQogICAgICAgICAgICAkSGVscFBhcmFtZXRlck5hbWVzID0gJEhlbHAuUGFyYW1ldGVycy5QYXJhbWV0ZXIuTmFtZSB8IFNvcnQtT2JqZWN0IC1VbmlxdWUNCiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbWV0ZXIgaW4gJHBhcmFtZXRlcnMpIHsNCiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyTmFtZSA9ICRwYXJhbWV0ZXIuTmFtZQ0KICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJIZWxwID0gJEhlbHAucGFyYW1ldGVycy5wYXJhbWV0ZXIgfCBXaGVyZS1PYmplY3QgTmFtZSAtRVEgJHBhcmFtZXRlck5hbWUNCgkJCQ0KCQkJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IHBhcmFtZXRlcg0KCQkJCUl0ICJnZXRzIGhlbHAgZm9yIHBhcmFtZXRlcjogJHBhcmFtZXRlck5hbWUgOiBpbiAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwIH0gew0KCQkJCQkkcGFyYW1ldGVySGVscC5EZXNjcmlwdGlvbi5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCgkJCQl9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGNvZGVNYW5kYXRvcnkgPSAkcGFyYW1ldGVyLklzTWFuZGF0b3J5LnRvU3RyaW5nKCkNCgkJCQlJdCAiaGVscCBmb3IgJHBhcmFtZXRlck5hbWUgcGFyYW1ldGVyIGluICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBNYW5kYXRvcnkgdmFsdWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwOyBjb2RlTWFuZGF0b3J5ID0gJGNvZGVNYW5kYXRvcnkgfSB7DQoJCQkJCSRwYXJhbWV0ZXJIZWxwLlJlcXVpcmVkIHwgU2hvdWxkIC1CZSAkY29kZU1hbmRhdG9yeQ0KCQkJCX0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoJEhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGVbJGNvbW1hbmROYW1lXSAtY29udGFpbnMgJHBhcmFtZXRlck5hbWUpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRjb2RlVHlwZSA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5OYW1lDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5Jc0VudW0pIHsNCiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQ0KICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSAkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGU6OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZSkNCgkJCQkJCSMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQ0KCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gew0KCQkJCQkJJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWVHcm91cC5wYXJhbWV0ZXJWYWx1ZSB8IFNob3VsZCAtYmUgJG5hbWVzDQoJCQkJCX0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZWlmICgkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuRnVsbE5hbWUgLWluICRIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMpIHsNCiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQ0KICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSBbRW51bV06OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5EZWNsYXJlZE1lbWJlcnNbMF0uUmV0dXJuVHlwZSkNCgkJCQkJSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwOyBuYW1lcyA9ICRuYW1lcyB9IHsNCgkJCQkJCSRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcw0KCQkJCQl9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAjIFRvIGF2b2lkIGNhbGxpbmcgVHJpbSBtZXRob2Qgb24gYSBudWxsIG9iamVjdC4NCiAgICAgICAgICAgICAgICAgICAgJGhlbHBUeXBlID0gaWYgKCRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlKSB7ICRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlLlRyaW0oKSB9DQoJCQkJCSMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQ0KCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBoZWxwVHlwZSA9ICRoZWxwVHlwZTsgY29kZVR5cGUgPSAkY29kZVR5cGUgfSB7DQoJCQkJCQkkaGVscFR5cGUgfCBTaG91bGQgLWJlICRjb2RlVHlwZQ0KCQkJCQl9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZm9yZWFjaCAoJGhlbHBQYXJtIGluICRIZWxwUGFyYW1ldGVyTmFtZXMpIHsNCgkJCQkjIFNob3VsZG4ndCBmaW5kIGV4dHJhIHBhcmFtZXRlcnMgaW4gaGVscC4NCgkJCQlJdCAiZmluZHMgaGVscCBwYXJhbWV0ZXIgaW4gY29kZTogJGhlbHBQYXJtIiAtVGVzdENhc2VzIEB7IGhlbHBQYXJtID0gJGhlbHBQYXJtOyBwYXJhbWV0ZXJOYW1lcyA9ICRwYXJhbWV0ZXJOYW1lcyB9IHsNCgkJCQkJJGhlbHBQYXJtIC1pbiAkcGFyYW1ldGVyTmFtZXMgfCBTaG91bGQgLUJlICR0cnVlDQoJCQkJfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQEJ0QMAAAnSAwAABtMDAAAOSGVscC5UZXN0cy5wczEG1AMAAFBTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cdGVzdHNcZ2VuZXJhbFxIZWxwLlRlc3RzLnBzMQkGAAAACdYDAAAJ1wMAAAGUAgAADwAAAAbYAwAAyxVEZXNjcmliZSAiVmFsaWRhdGluZyB0aGUgbW9kdWxlIG1hbmlmZXN0IiB7DQoJJG1vZHVsZVJvb3QgPSAoUmVzb2x2ZS1QYXRoICIkZ2xvYmFsOnRlc3Ryb290XC4uIikuUGF0aA0KCSRtYW5pZmVzdCA9ICgoR2V0LUNvbnRlbnQgIiRtb2R1bGVSb290XMO+bmFtZcO+LnBzZDEiKSAtam9pbiAiYG4iKSB8IEludm9rZS1FeHByZXNzaW9uDQoJQ29udGV4dCAiQmFzaWMgcmVzb3VyY2VzIHZhbGlkYXRpb24iIHsNCgkJJGZpbGVzID0gR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSINCgkJSXQgIkV4cG9ydHMgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgcHVibGljIGZvbGRlciIgLVRlc3RDYXNlcyBAeyBmaWxlcyA9ICRmaWxlczsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7DQoJCQkNCgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJzw9JykuSW5wdXRPYmplY3QNCgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KCQlJdCAiRXhwb3J0cyBubyBmdW5jdGlvbiB0aGF0IGlzbid0IGFsc28gcHJlc2VudCBpbiB0aGUgcHVibGljIGZvbGRlciIgLVRlc3RDYXNlcyBAeyBmaWxlcyA9ICRmaWxlczsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7DQoJCQkkZnVuY3Rpb25zID0gKENvbXBhcmUtT2JqZWN0IC1SZWZlcmVuY2VPYmplY3QgJGZpbGVzLkJhc2VOYW1lIC1EaWZmZXJlbmNlT2JqZWN0ICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFdoZXJlLU9iamVjdCBTaWRlSW5kaWNhdG9yIC1MaWtlICc9PicpLklucHV0T2JqZWN0DQoJCQkkZnVuY3Rpb25zIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCX0NCgkJDQoJCUl0ICJFeHBvcnRzIG5vbmUgb2YgaXRzIGludGVybmFsIGZ1bmN0aW9ucyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gew0KCQkJJGZpbGVzID0gR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSAtRmlsdGVyICIqLnBzMSINCgkJCSRmaWxlcyB8IFdoZXJlLU9iamVjdCBCYXNlTmFtZSAtSW4gJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCX0NCgl9DQoJDQoJQ29udGV4dCAiSW5kaXZpZHVhbCBmaWxlIHZhbGlkYXRpb24iIHsNCgkJSXQgIlRoZSByb290IG1vZHVsZSBmaWxlIGV4aXN0cyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gew0KCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkKCRtYW5pZmVzdC5Sb290TW9kdWxlKSIgfCBTaG91bGQgLUJlICR0cnVlDQoJCX0NCgkJDQoJCWZvcmVhY2ggKCRmb3JtYXQgaW4gJG1hbmlmZXN0LkZvcm1hdHNUb1Byb2Nlc3MpDQoJCXsNCgkJCUl0ICJUaGUgZmlsZSAkZm9ybWF0IHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IGZvcm1hdCA9ICRmb3JtYXQgfSB7DQoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkZm9ybWF0IiB8IFNob3VsZCAtQmUgJHRydWUNCgkJCX0NCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJHR5cGUgaW4gJG1hbmlmZXN0LlR5cGVzVG9Qcm9jZXNzKQ0KCQl7DQoJCQlJdCAiVGhlIGZpbGUgJHR5cGUgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgdHlwZSA9ICR0eXBlIH0gew0KCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJHR5cGUiIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KCQkJfQ0KCQl9DQoJCQ0KCQlmb3JlYWNoICgkYXNzZW1ibHkgaW4gJG1hbmlmZXN0LlJlcXVpcmVkQXNzZW1ibGllcykNCgkJew0KICAgICAgICAgICAgaWYgKCRhc3NlbWJseSAtbGlrZSAiKi5kbGwiKSB7DQogICAgICAgICAgICAgICAgSXQgIlRoZSBmaWxlICRhc3NlbWJseSBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBhc3NlbWJseSA9ICRhc3NlbWJseSB9IHsNCiAgICAgICAgICAgICAgICAgICAgVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkYXNzZW1ibHkiIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIEl0ICJUaGUgZmlsZSAkYXNzZW1ibHkgc2hvdWxkIGxvYWQgZnJvbSB0aGUgR0FDIiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgYXNzZW1ibHkgPSAkYXNzZW1ibHkgfSB7DQogICAgICAgICAgICAgICAgICAgIHsgQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSAkYXNzZW1ibHkgfSB8IFNob3VsZCAtTm90IC1UaHJvdw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KCQkNCgkJZm9yZWFjaCAoJHRhZyBpbiAkbWFuaWZlc3QuUHJpdmF0ZURhdGEuUFNEYXRhLlRhZ3MpDQoJCXsNCgkJCUl0ICJUYWdzIHNob3VsZCBoYXZlIG5vIHNwYWNlcyBpbiBuYW1lIiAtVGVzdENhc2VzIEB7IHRhZyA9ICR0YWcgfSB7DQoJCQkJJHRhZyAtbWF0Y2ggIiAiIHwgU2hvdWxkIC1CZSAkZmFsc2UNCgkJCX0NCgkJfQ0KCX0NCn0BCdkDAAAJ2gMAAAbbAwAAEk1hbmlmZXN0LlRlc3RzLnBzMQbcAwAAVFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0c1xnZW5lcmFsXE1hbmlmZXN0LlRlc3RzLnBzMQkGAAAACd4DAAAJ3wMAAAGVAgAADwAAAAbgAwAAlglbQ21kbGV0QmluZGluZygpXQ0KUGFyYW0gKA0KCVtzd2l0Y2hdDQoJJFNraXBUZXN0LA0KCQ0KCVtzdHJpbmdbXV0NCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpDQopDQoNCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0NCg0KJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQoNCkRlc2NyaWJlICdJbnZva2luZyBQU1NjcmlwdEFuYWx5emVyIGFnYWluc3QgY29tbWFuZGJhc2UnIHsNCgkkY29tbWFuZEZpbGVzID0gZm9yZWFjaCAoJHBhdGggaW4gJENvbW1hbmRQYXRoKSB7DQogICAgICAgIEdldC1DaGlsZEl0ZW0gLVBhdGggJHBhdGggLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiDQogICAgfQ0KCSRzY3JpcHRBbmFseXplclJ1bGVzID0gR2V0LVNjcmlwdEFuYWx5emVyUnVsZQ0KCQ0KCWZvcmVhY2ggKCRmaWxlIGluICRjb21tYW5kRmlsZXMpDQoJew0KCQlDb250ZXh0ICJBbmFseXppbmcgJCgkZmlsZS5CYXNlTmFtZSkiIHsNCgkJCSRhbmFseXNpcyA9IEludm9rZS1TY3JpcHRBbmFseXplciAtUGF0aCAkZmlsZS5GdWxsTmFtZSAtRXhjbHVkZVJ1bGUgUFNBdm9pZFRyYWlsaW5nV2hpdGVzcGFjZSwgUFNTaG91bGRQcm9jZXNzDQoJCQkNCgkJCWZvckVhY2ggKCRydWxlIGluICRzY3JpcHRBbmFseXplclJ1bGVzKQ0KCQkJew0KCQkJCUl0ICJTaG91bGQgcGFzcyAkcnVsZSIgLVRlc3RDYXNlcyBAeyBhbmFseXNpcyA9ICRhbmFseXNpczsgcnVsZSA9ICRydWxlIH0gew0KCQkJCQlJZiAoJGFuYWx5c2lzLlJ1bGVOYW1lIC1jb250YWlucyAkcnVsZSkNCgkJCQkJew0KCQkJCQkJJGFuYWx5c2lzIHwgV2hlcmUtT2JqZWN0IFJ1bGVOYW1lIC1FUSAkcnVsZSAtb3V0dmFyaWFibGUgZmFpbHVyZXMgfCBGb3JFYWNoLU9iamVjdCB7ICRudWxsID0gJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyLkFkZCgkXykgfQ0KCQkJCQkJDQoJCQkJCQkxIHwgU2hvdWxkIC1CZSAwDQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkwIHwgU2hvdWxkIC1CZSAwDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9AQnhAwAACeIDAAAG4wMAABpQU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQbkAwAAXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0c1xnZW5lcmFsXFBTU2NyaXB0QW5hbHl6ZXIuVGVzdHMucHMxCQYAAAAJ5gMAAAnnAwAAAZYCAAAPAAAABugDAADmByRleGNlcHRpb25zID0gQHsgfQ0KDQo8Iw0KQSBsaXN0IG9mIGVudHJpZXMgdGhhdCBNQVkgYmUgaW4gdGhlIGxhbmd1YWdlIGZpbGVzLCB3aXRob3V0IGNhdXNpbmcgdGhlIHRlc3RzIHRvIGZhaWwuDQpUaGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4gbW9kdWxlcyB0aGF0IGdlbmVyYXRlIGxvY2FsaXplZCBtZXNzYWdlcyBzdHJhaWdodCBmcm9tIEMjLg0KU3BlY2lmeSB0aGUgZnVsbCBrZXkgYXMgaXQgaXMgd3JpdHRlbiBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMsIGRvIG5vdCBwcmVwZW5kIHRoZSBtb2R1bGVuYW1lLA0KYXMgeW91IHdvdWxkIGhhdmUgdG8gaW4gQyMgY29kZS4NCg0KRXhhbXBsZToNCiRleGNlcHRpb25zWydMZWdhbFN1cnBsdXMnXSA9IEAoDQogICAgJ0V4Y2VwdGlvbi5TdHJlYW1zLkZhaWxlZENyZWF0ZScNCiAgICAnRXhjZXB0aW9uLlN0cmVhbXMuRmFpbGVkRGlzcG9zZScNCikNCiM+DQokZXhjZXB0aW9uc1snTGVnYWxTdXJwbHVzJ10gPSBAKA0KDQopDQo8Iw0KQSBsaXN0IG9mIGVudHJpZXMgdGhhdCBNQVkgYmUgdXNlZCB3aXRob3V0IG5lZWRpbmcgdG8gaGF2ZSB0ZXh0IGRlZmluZWQuDQpUaGlzIGlzIGludGVuZGVkIGZvciBtb2R1bGVzIChyZS0pdXNpbmcgc3RyaW5ncyBwcm92aWRlZCBieSBhbm90aGVyIG1vZHVsZQ0KIz4NCiRleGNlcHRpb25zWydOb1RleHROZWVkZWQnXSA9IEAoDQoJJ1ZhbGlkYXRlLkZTUGF0aCcNCgknVmFsaWRhdGUuRlNQYXRoLkZpbGUnDQoJJ1ZhbGlkYXRlLkZTUGF0aC5GaWxlT3JQYXJlbnQnDQoJJ1ZhbGlkYXRlLkZTUGF0aC5Gb2xkZXInDQoJJ1ZhbGlkYXRlLlBhdGgnDQoJJ1ZhbGlkYXRlLlBhdGguQ29udGFpbmVyJw0KCSdWYWxpZGF0ZS5QYXRoLkxlYWYnDQoJJ1ZhbGlkYXRlLlRpbWVTcGFuLlBvc2l0aXZlJw0KCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUnDQoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZS5GaWxlJw0KCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUuSHR0cHMnDQopDQoNCiRleGNlcHRpb25zAQnpAwAACeoDAAAG6wMAABZzdHJpbmdzLkV4Y2VwdGlvbnMucHMxBuwDAABYU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHRlc3RzXGdlbmVyYWxcc3RyaW5ncy5FeGNlcHRpb25zLnBzMQkGAAAACe4DAAAJ7wMAAAGXAgAADwAAAAbwAwAAlwg8Iw0KLkRFU0NSSVBUSU9ODQogICAgVGhpcyB0ZXN0IHZlcmlmaWVzLCB0aGF0IGFsbCBzdHJpbmdzIHRoYXQgaGF2ZSBiZWVuIHVzZWQsDQogICAgYXJlIGxpc3RlZCBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMgYW5kIHRodXMgaGF2ZSBhIG1lc3NhZ2UgYmVpbmcgZGlzcGxheWVkLg0KDQogICAgSXQgYWxzbyBjaGVja3MsIHdoZXRoZXIgdGhlIGxhbmd1YWdlIGZpbGVzIGhhdmUgb3JwaGFuZWQgZW50cmllcyB0aGF0IG5lZWQgY2xlYW5pbmcgdXAuDQojPg0KDQoNCg0KRGVzY3JpYmUgIlRlc3RpbmcgbG9jYWxpemF0aW9uIHN0cmluZ3MiIHsNCgkkbW9kdWxlUm9vdCA9IChHZXQtTW9kdWxlIMO+bmFtZcO+KS5Nb2R1bGVCYXNlDQoJJHN0cmluZ3NSZXN1bHRzID0gRXhwb3J0LVBTTURTdHJpbmcgLU1vZHVsZVJvb3QgJG1vZHVsZVJvb3QNCgkkZXhjZXB0aW9ucyA9ICYgIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxzdHJpbmdzLkV4Y2VwdGlvbnMucHMxIg0KCQ0KCWZvcmVhY2ggKCRzdHJpbmdFbnRyeSBpbiAkc3RyaW5nc1Jlc3VsdHMpIHsNCiAgICAgICAgaWYgKCRzdHJpbmdFbnRyeS5TdHJpbmcgLWVxICJr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DAMAAAcAAAAJCwAAAAAAAAAAAAAAAQ0DAAAHAAAACQsAAAAAAAAAAAAAAAEPAwAABwAAAAkJBAAAAQAAAAEAAAABEAMAAAcAAAAJCwAAAAAAAAAAAAAAARQDAAAHAAAACQsAAAAAAAAAAAAAAAEVAwAABwAAAAkLAAAAAAAAAAAAAAABFwMAAAcAAAAJCwAAAAAAAAAAAAAAARgDAAAHAAAACQsAAAAAAAAAAAAAAAEcAwAABwAAAAkLAAAAAAAAAAAAAAABHQMAAAcAAAAJCwAAAAAAAAAAAAAAAR8DAAAHAAAACQsAAAAAAAAAAAAAAAEgAwAABwAAAAkLAAAAAAAAAAAAAAABJAMAAAcAAAAJCwAAAAAAAAAAAAAAASUDAAAHAAAACQsAAAAAAAAAAAAAAAEnAwAABwAAAAkLAAAAAAAAAAAAAAABKAMAAAcAAAAJCwAAAAAAAAAAAAAAASwDAAAHAAAACQsAAAAAAAAAAAAAAAEtAwAABwAAAAkLAAAAAAAAAAAAAAABLwMAAAcAAAAJCwAAAAAAAAAAAAAAATADAAAHAAAACQsAAAAAAAAAAAAAAAE0AwAABwAAAAkLAAAAAAAAAAAAAAABNQMAAAcAAAAJCwAAAAAAAAAAAAAAATcDAAAHAAAACQsAAAAAAAAAAAAAAAE4AwAABwAAAAkLAAAAAAAAAAAAAAABPAMAAAcAAAAJCwAAAAAAAAAAAAAAAT0DAAAHAAAACQsAAAAAAAAAAAAAAAE/AwAABwAAAAkLBAAAAQAAAAEAAAABQAMAAAcAAAAJCwAAAAAAAAAAAAAAAUQDAAAHAAAACQsAAAAAAAAAAAAAAAFFAwAABwAAAAkLAAAAAAAAAAAAAAABRwMAAAcAAAAJDQQAAAEAAAABAAAAAUgDAAAHAAAACQsAAAAAAAAAAAAAAAFMAwAABwAAAAkLAAAAAAAAAAAAAAABTQMAAAcAAAAJCwAAAAAAAAAAAAAAAU8DAAAHAAAACQsAAAAAAAAAAAAAAAFQAwAABwAAAAkLAAAAAAAAAAAAAAABVAMAAAcAAAAJCwAAAAAAAAAAAAAAAVUDAAAHAAAACQsAAAAAAAAAAAAAAAFXAwAABwAAAAkLAAAAAAAAAAAAAAABWAMAAAcAAAAJCwAAAAAAAAAAAAAAAVwDAAAHAAAACQsAAAAAAAAAAAAA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AxEmBAAABAAAAAZVBAAABG5hbWUNAxEoBAAABAAAAAZWBAAABG5hbWUNAxEqBAAABAAAAAZXBAAABG5hbWUNAwE6BAAADwAAAAZYBAAA7RU8Iw0KVGhpcyBpcyBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZQ0KDQpCeSBkZWZhdWx0LCBpdCBpcyBlbm91Z2ggdG8gaGF2ZSBhIHNpbmdsZSBvbmUgb2YgdGhlbSwNCmhvd2V2ZXIgaWYgeW91IGhhdmUgZW5vdWdoIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8ganVzdGlmeSBoYXZpbmcgbXVsdGlwbGUgY29waWVzIG9mIGl0LA0KZmVlbCB0b3RhbGx5IGZyZWUgdG8gc3BsaXQgdGhlbSBpbnRvIG11bHRpcGxlIGZpbGVzLg0KIz4NCg0KPCMNCiMgRXhhbXBsZSBDb25maWd1cmF0aW9uDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ8O+bmFtZcO+JyAtTmFtZSAnRXhhbXBsZS5TZXR0aW5nJyAtVmFsdWUgMTAgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2ludGVnZXInIC1IYW5kbGVyIHsgfSAtRGVzY3JpcHRpb24gIkV4YW1wbGUgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBZb3VyIG1vZHVsZSBjYW4gdGhlbiB1c2UgdGhlIHNldHRpbmcgdXNpbmcgJ0dldC1QU0ZDb25maWdWYWx1ZSciDQojPg0KDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ8O+bmFtZcO+JyAtTmFtZSAnSW1wb3J0LkRvRG90U291cmNlJyAtVmFsdWUgJGZhbHNlIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdib29sJyAtRGVzY3JpcHRpb24gIldoZXRoZXIgdGhlIG1vZHVsZSBmaWxlcyBzaG91bGQgYmUgZG90c291cmNlZCBvbiBpbXBvcnQuIEJ5IGRlZmF1bHQsIHRoZSBmaWxlcyBvZiB0aGlzIG1vZHVsZSBhcmUgcmVhZCBhcyBzdHJpbmcgdmFsdWUgYW5kIGludm9rZWQsIHdoaWNoIGlzIGZhc3RlciBidXQgd29yc2Ugb24gZGVidWdnaW5nLiINClNldC1QU0ZDb25maWcgLU1vZHVsZSAnw75uYW1lw74nIC1OYW1lICdJbXBvcnQuSW5kaXZpZHVhbEZpbGVzJyAtVmFsdWUgJGZhbHNlIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdib29sJyAtRGVzY3JpcHRpb24gIldoZXRoZXIgdGhlIG1vZHVsZSBmaWxlcyBzaG91bGQgYmUgaW1wb3J0ZWQgaW5kaXZpZHVhbGx5LiBEdXJpbmcgdGhlIG1vZHVsZSBidWlsZCwgYWxsIG1vZHVsZSBjb2RlIGlzIGNvbXBpbGVkIGludG8gZmV3IGZpbGVzLCB3aGljaCBhcmUgaW1wb3J0ZWQgaW5zdGVhZCBieSBkZWZhdWx0LiBMb2FkaW5nIHRoZSBjb21waWxlZCB2ZXJzaW9ucyBpcyBmYXN0ZXIsIHVzaW5nIHRoZSBpbmRpdmlkdWFsIGZpbGVzIGlzIGVhc2llciBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIG91dCBhZGp1c3RtZW50cy4iDQoNClNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdDb25zb2xlTG9nZ2luZy5lbmFibGVkJyAtVmFsdWUgJHRydWUgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2Jvb2wnIC1EZXNjcmlwdGlvbiAiSWYgc2V0IHRvIGAkdHJ1ZSwgTWVzc2FnZXMgZnJvbSB0aGUgbW9kdWxlIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBtYWluIGNvbnNvbGUiDQojIFNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdDb25zb2xlTG9nZ2luZy5zdHlsZScgLVZhbHVlICdDT046ICVNZXNzYWdlJScgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gc3RyaW5nIC1EZXNjcmlwdGlvbiAiV2hhdCBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSBjb25zb2xlPyINCiMgU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLnN0eWxlJyAtVmFsdWUgJyVUYWdzJXwlTGV2ZWwlfCVNb2R1bGUlfCVGdW5jdGlvbk5hbWUlOiAlTWVzc2FnZSUnIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIldoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZT8iDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnQ29uc29sZUxvZ2dpbmcuc3R5bGUnIC1WYWx1ZSAnWyVMZXZlbCVdICVNZXNzYWdlJScgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gc3RyaW5nIC1EZXNjcmlwdGlvbiAiV2hhdCBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSBjb25zb2xlPyINCiMgUG9zc2libGUgbGV2ZWxzOiBDcml0aWNhbCAoMSksIEltcG9ydGFudCAvIE91dHB1dCAvIEhvc3QgKDIpLCBTaWduaWZpY2FudCAoMyksIFZlcnlWZXJib3NlICg0KSwgVmVyYm9zZSAoNSksIFNvbWV3aGF0VmVyYm9zZSAoNiksIFN5c3RlbSAoNyksIERlYnVnICg4KSwgSW50ZXJuYWxDb21tZW50ICg5KSwgV2FybmluZw0KIyAgICAgICAgICg2NjYpIEVpdGhlciBvbmUgb2YgdGhlIHN0cmluZ3Mgb3IgaXRzIHJlc3BlY3RpdmUgbnVtYmVyIHdpbGwgZG8gYXMgaW5wdXQuDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnQ29uc29sZUxvZ2dpbmcuTWluTGV2ZWwnIC1WYWx1ZSAxIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIGludGVnZXIgLURlc2NyaXB0aW9uICJGcm9tIHdoaWNoIGxldmVsIHN0YXJ0aW5nIG9uIHNob3VsZCBtZXNzYWdlcyBiZSBzZW50IHRvIHRoZSBwcm92aWRlcj8iDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnQ29uc29sZUxvZ2dpbmcuTWF4TGV2ZWwnIC1WYWx1ZSAxIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIGludGVnZXIgLURlc2NyaXB0aW9uICJVcCB0byB3aGljaCBsZXZlbCBzaG91bGQgbWVzc2FnZXMgYmUgc2VudCB0byB0aGUgcHJvdmlkZXI/Ig0KAQlZBAAACVoEAAAGWwQAABFjb25maWd1cmF0aW9uLnBzMQZcBAAAgQFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWxcY29uZmlndXJhdGlvbnNcY29uZmlndXJhdGlvbi5wczEJBgAAAAleBAAACV8EAAABOwQAAA8AAAAGYAQAAP4DIyBDb25maWd1cmF0aW9ucw0KDQpUaHJvdWdoIHRoZSBgUFNGcmFtZXdvcmtgIHlvdSBoYXZlIGEgc2ltcGxlIG1ldGhvZCB0aGF0IGFsbG93cyB5b3UgdG8gLi4uDQoNCiAtIFB1Ymxpc2ggc2V0dGluZ3MNCiAtIFdpdGggb25ib2FyZCBkb2N1bWVudGF0aW9uDQogLSBJbnB1dCB2YWxpZGF0aW9uDQogLSBTY3JpcHRzIHRoYXQgcnVuIG9uIGNoYW5nZSBvZiBzZXR0aW5ncw0KIC0gVGhhdCBjYW4gYmUgZGlzY292ZXJlZCBhbmQgdXBkYXRlZCBieSB0aGUgdXNlcg0KIC0gVGhhdCBjYW4gYmUgYWRtaW5pc3RyYXRlZCBieSBwb2xpY3kgJiBEU0MNCg0KVGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIGEgYml0IHRvbyBjb21wbGV4IHRvIGRlc2NyaWJlIGluIGEgaGVscCBmaWxlLCB5b3UgY2FuIGhvd2V2ZXIgdmlzaXQgdXMgYXQgaHR0cDovL3BzZnJhbWV3b3JrLm9yZyBmb3IgZGV0YWlsZWQgZ3VpZGFuY2UuDQoNCkFuIGV4YW1wbGUgY2FuIGJlIHNlZW4gaW4gdGhlIGF0dGFjaGVkIHBzMSBmaWxlAQlhBAAACWIEAAAGYwQAAAlyZWFkbWUubWQGZAQAAHlTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWxcY29uZmlndXJhdGlvbnNccmVhZG1lLm1kCQYAAAAJZgQAAAlnBAAAATwEAAAPAAAABmgEAADbASMgRnVuY3Rpb25zDQoNClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIGdvLg0KDQpEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG1vZHVsZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViZGl2aWRlIHRoZW0gaW50byBzdWJmb2xkZXJzLg0KDQpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseQEJaQQAAAlqBAAABmsEAAAJcmVhZG1lLm1kBmwEAAB0U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXGZ1bmN0aW9uc1xyZWFkbWUubWQJBgAAAAluBAAACW8EAAABPQQAAA8AAAAGcAQAAIQDPCMNClN0b3JlZCBzY3JpcHRibG9ja3MgYXJlIGF2YWlsYWJsZSBpbiBbUHNmVmFsaWRhdGVTY3JpcHQoKV0gYXR0cmlidXRlcy4NClRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNlbnRyYWxseSBwcm92aWRlIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLA0Kd2l0aG91dCBoYXZpbmcgdG8gbWFpbnRhaW4gaXQgaW4gc2VwYXJhdGUgbG9jYXRpb25zLg0KDQpJdCBhbHNvIHByZXZlbnRzIGxlbmd0aHkgdmFsaWRhdGlvbiBzY3JpcHRibG9ja3MgZnJvbSBtYWtpbmcgeW91ciBwYXJhbWV0ZXIgYmxvY2sNCmhhcmQgdG8gcmVhZC4NCg0KU2V0LVBTRlNjcmlwdGJsb2NrIC1OYW1lICfDvm5hbWXDvi5TY3JpcHRCbG9ja05hbWUnIC1TY3JpcHRibG9jayB7DQoJDQp9DQojPgEJcQQAAAlyBAAABnMEAAAQc2NyaXB0YmxvY2tzLnBzMQZ0BAAAflNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxpbnRlcm5hbFxzY3JpcHRibG9ja3Ncc2NyaXB0YmxvY2tzLnBzMQkGAAAACXYEAAAJdwQAAAE+BAAADwAAAAZ4BAAA9wZXcml0ZS1QU0ZNZXNzYWdlICJDb25maWd1cmUgQ29uc29sZSBMb2dnaW5nIg0KaWYgKEdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLkNvbnNvbGVMb2dnaW5nLmVuYWJsZWQnIC1GYWxsYmFjayAkZmFsc2UpIHsNCiAgICAkcHJvdmlkZXJQYXJhbT1Aew0KICAgICAgICBOYW1lPSJjb25zb2xlIg0KICAgICAgICBFbmFibGVkPSR0cnVlDQogICAgICAgIHN0eWxlPUdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLkNvbnNvbGVMb2dnaW5nLnN0eWxlJw0KICAgICAgICBNaW5MZXZlbD1HZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi5Db25zb2xlTG9nZ2luZy5NaW5MZXZlbCcNCiAgICAgICAgTWF4TGV2ZWw9R2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24uQ29uc29sZUxvZ2dpbmcuTWF4TGV2ZWwnDQogICAgICAgIEluc3RhbmNlTmFtZSA9ICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LmNvbnNvbGUnDQogICAgfQ0KICAgIFdyaXRlLVBTRk1lc3NhZ2UgIkNvbmZpZ3VyZSBDb25zb2xlIExvZ2dpbmcgd2l0aCBQYXJhbT0kKCRwcm92aWRlclBhcmFtfENvbnZlcnRUby1Kc29uIC1Db21wcmVzcykiDQogICAgU2V0LVBTRkxvZ2dpbmdQcm92aWRlciBAcHJvdmlkZXJQYXJhbSAtSW5jbHVkZU1vZHVsZXMgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJw0KDQp9ZWxzZXsNCiAgICBXcml0ZS1QU0ZNZXNzYWdlICJOT1QgQ29uZmlndXJlIENvbnNvbGUgTG9nZ2luZyINCn0NCgEJeQQAAAl6BAAABnsEAAATY29uc29sZV9sb2dnaW5nLnBzMQZ8BAAAfFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxpbnRlcm5hbFxzY3JpcHRzXGNvbnNvbGVfbG9nZ2luZy5wczEJBgAAAAl+BAAACX8EAAABPwQAAA8AAAAGgAQAAPYJTmV3LVBTRkxpY2Vuc2UgLVByb2R1Y3QgJ8O+bmFtZcO+JyAtTWFudWZhY3R1cmVyICfDvmF1dGhvcsO+JyAtUHJvZHVjdFZlcnNpb24gJHNjcmlwdDpNb2R1bGVWZXJzaW9uIC1Qcm9kdWN0VHlwZSBNb2R1bGUgLU5hbWUgTUlUIC1WZXJzaW9uICIxLjAuMC4wIiAtRGF0ZSAoR2V0LURhdGUgIsO+IWRhdGUhw74iKSAtVGV4dCBAIg0KQ29weXJpZ2h0IChjKSDDviF5ZWFyIcO+IMO+YXV0aG9yw74NCg0KUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQ0Kb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwNCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMNCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwNCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCg0KVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsDQpjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KDQpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQpGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVINCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sDQpPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQ0KU09GVFdBUkUuDQoiQAEJgQQAAAmCBAAABoMEAAALbGljZW5zZS5wczEGhAQAAHRTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWxcc2NyaXB0c1xsaWNlbnNlLnBzMQkGAAAACYYEAAAJhwQAAAFABAAADwAAAAaIBAAAtwY8Iw0KQWRkIGFsbCB0aGluZ3MgeW91IHdhbnQgdG8gcnVuIGFmdGVyIGltcG9ydGluZyB0aGUgbWFpbiBmdW5jdGlvbiBjb2RlDQoNCldBUk5JTkc6IE9OTFkgcHJvdmlkZSBwYXRocyB0byBmaWxlcyENCg0KQWZ0ZXIgYnVpbGRpbmcgdGhlIG1vZHVsZSwgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkLCBhZGRpbmcgYW55dGhpbmcgYnV0IHBhdGhzIHRvIGZpbGVzIC4uLg0KLSBXaWxsIG5vdCB3b3JrIGFmdGVyIHB1Ymxpc2hpbmcNCi0gQ291bGQgYnJlYWsgdGhlIGJ1aWxkIHByb2Nlc3MNCiM+DQoNCiRtb2R1bGVSb290ID0gU3BsaXQtUGF0aCAoU3BsaXQtUGF0aCAkUFNTY3JpcHRSb290KQ0KDQojIExvYWQgQ29uZmlndXJhdGlvbnMNCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxjb25maWd1cmF0aW9uc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUNCg0KIyBMb2FkIFNjcmlwdGJsb2Nrcw0KKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdGJsb2Nrc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUNCg0KIyBMb2FkIFRhYiBFeHBhbnNpb24NCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFx0ZXBwXCoudGVwcC5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lDQoNCiMgTG9hZCBUYWIgRXhwYW5zaW9uIEFzc2lnbm1lbnQNCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFx0ZXBwXGFzc2lnbm1lbnQucHMxIg0KDQojIExvYWQgTGljZW5zZQ0KIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNcbGljZW5zZS5wczEiAQmJBAAACYoEAAAGiwQAAA5wb3N0aW1wb3J0LnBzMQaMBAAAd1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxpbnRlcm5hbFxzY3JpcHRzXHBvc3RpbXBvcnQucHMxCQYAAAAJjgQAAAmPBAAAAUEEAAAPAAAABpAEAACwAzwjDQpBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYmVmb3JlIGltcG9ydGluZyB0aGUgbWFpbiBmdW5jdGlvbiBjb2RlLg0KDQpXQVJOSU5HOiBPTkxZIHByb3ZpZGUgcGF0aHMgdG8gZmlsZXMhDQoNCkFmdGVyIGJ1aWxkaW5nIHRoZSBtb2R1bGUsIHRoaXMgZmlsZSB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZCwgYWRkaW5nIGFueXRoaW5nIGJ1dCBwYXRocyB0byBmaWxlcyAuLi4NCi0gV2lsbCBub3Qgd29yayBhZnRlciBwdWJsaXNoaW5nDQotIENvdWxkIGJyZWFrIHRoZSBidWlsZCBwcm9jZXNzDQojPg0KDQokbW9kdWxlUm9vdCA9IFNwbGl0LVBhdGggKFNwbGl0LVBhdGggJFBTU2NyaXB0Um9vdCkNCg0KIyBMb2FkIHRoZSBzdHJpbmdzIHVzZWQgaW4gbWVzc2FnZXMNCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHN0cmluZ3MucHMxIgEJkQQAAAmSBAAABpMEAAANcHJlaW1wb3J0LnBzMQaUBAAAdlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxpbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEJBgAAAAmWBAAACZcEAAABQgQAAA8AAAAGmAQAALgDPCMNClRoaXMgZmlsZSBsb2FkcyB0aGUgc3RyaW5ncyBkb2N1bWVudHMgZnJvbSB0aGUgcmVzcGVjdGl2ZSBsYW5ndWFnZSBmb2xkZXJzLg0KVGhpcyBhbGxvd3MgbG9jYWxpemluZyBtZXNzYWdlcyBhbmQgZXJyb3JzLg0KTG9hZCBwc2QxIGxhbmd1YWdlIGZpbGVzIGZvciBlYWNoIGxhbmd1YWdlIHlvdSB3aXNoIHRvIHN1cHBvcnQuDQpQYXJ0aWFsIHRyYW5zbGF0aW9ucyBhcmUgYWNjZXB0YWJsZSAtIHdoZW4gbWlzc2luZyBhIGN1cnJlbnQgbGFuZ3VhZ2UgbWVzc2FnZSwNCml0IHdpbGwgZmFsbGJhY2sgdG8gRW5nbGlzaCBvciBhbm90aGVyIGF2YWlsYWJsZSBsYW5ndWFnZS4NCiM+DQpJbXBvcnQtUFNGTG9jYWxpemVkU3RyaW5nIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcZW4tdXNcKi5wc2QxIiAtTW9kdWxlICfDvm5hbWXDvicgLUxhbmd1YWdlICdlbi1VUycBCZkEAAAJmgQAAAabBAAAC3N0cmluZ3MucHMxBpwEAAB0U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXHNjcmlwdHNcc3RyaW5ncy5wczEJBgAAAAmeBAAACZ8EAAABQwQAAA8AAAAGoAQAAHE8Iw0KIyBFeGFtcGxlOg0KUmVnaXN0ZXItUFNGVGVwcEFyZ3VtZW50Q29tcGxldGVyIC1Db21tYW5kIEdldC1BbGNvaG9sIC1QYXJhbWV0ZXIgVHlwZSAtTmFtZSDDvm5hbWXDvi5hbGNvaG9sDQojPgEJoQQAAAmiBAAABqMEAAAOYXNzaWdubWVudC5wczEGpAQAAHRTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWxcdGVwcFxhc3NpZ25tZW50LnBzMQkGAAAACaYEAAAJpwQAAAFEBAAADwAAAAaoBAAAowE8Iw0KIyBFeGFtcGxlOg0KUmVnaXN0ZXItUFNGVGVwcFNjcmlwdGJsb2NrIC1OYW1lICLDvm5hbWXDvi5hbGNvaG9sIiAtU2NyaXB0QmxvY2sgeyAnQmVlcicsJ01lYWQnLCdXaGlza2V5JywnV2luZScsJ1ZvZGthJywnUnVtICgzeSknLCAnUnVtICg1eSknLCAnUnVtICg3eSknIH0NCiM+AQmpBAAACaoEAAAGqwQAABBleGFtcGxlLnRlcHAucHMxBqwEAAB2U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXHRlcHBcZXhhbXBsZS50ZXBwLnBzMQkGAAAACa4EAAAJrwQAAAFFBAAADwAAAAawBAAAvgcjIFRhYiBFeHBhbnNpb24NCg0KIyMgRGVzY3JpcHRpb24NCg0KTW9kZXJuIFRhYiBFeHBhbnNpb24gd2FzIG9wZW5lZCB0byB1c2VycyB3aXRoIHRoZSBtb2R1bGUgYFRhYiBFeHBhbnNpb24gUGx1cyBQbHVzYCAoVEVQUCkuDQoNCkl0IGFsbG93cyB5b3UgdG8gZGVmaW5lLCB3aGF0IG9wdGlvbnMgYSB1c2VyIGlzIG9mZmVyZWQgd2hlbiB0YWJiaW5nIHRocm91Z2ggaW5wdXQgb3B0aW9ucy4gVGhpcyBjYW4gc2F2ZSBhIGxvdCBvZiB0aW1lIGZvciB0aGUgdXNlciBhbmQgaXMgY29uc2lkZXJlZCBhIGtleSBlbGVtZW50IGluIHVzZXIgZXhwZXJpZW5jZS4NCg0KVGhlIGBQU0ZyYW1ld29ya2Agb2ZmZXJzIGEgc2ltcGxpZmllZCB3YXkgb2Ygb2ZmZXJpbmcganVzdCB0aGlzLCBhcyB0aGUgdHdvIGV4YW1wbGUgZmlsZXMgc2hvdy4NCg0KIyMgQ29uY2VwdA0KDQpDdXN0b20gdGFiIGNvbXBsZXRpb24gaXMgZGVmaW5lZCBpbiB0d28gc3RlcHM6DQoNCiAtIERlZmluZSBhIHNjcmlwdGJsb2NrIHRoYXQgaXMgcnVuIHdoZW4gdGhlIHVzZXIgaGl0cyBgVEFCYCBhbmQgcHJvdmlkZXMgdGhlIHN0cmluZ3MgdGhhdCBhcmUgaGlzIG9wdGlvbnMuDQogLSBBc3NpZ24gdGhhdCBzY3JpcHRibG9jayB0byB0aGUgcGFyYW1ldGVyIG9mIGEgY29tbWFuZC4gWW91IGNhbiBhc3NpZ24gdGhlIHNhbWUgc2NyaXB0YmxvY2sgbXVsdGlwbGUgdGltZXMuDQoNCiMjIFN0cnVjdHVyZQ0KDQpJbXBvcnQgb3JkZXIgbWF0dGVycy4gSW4gb3JkZXIgdG8gbWFrZSB0aGluZ3Mgd29yayB3aXRoIHRoZSBkZWZhdWx0IHNjYWZmb2xkLCBmb2xsb3cgdGhvc2UgcnVsZXM6DQoNCiAtIEFsbCBzY3JpcHRmaWxlcyBfZGVmaW5pbmdfIGNvbXBsZXRpb24gc2NyaXB0YmxvY2tzIGxpa2UgdGhpczogYCoudGVwcC5wczFgDQogLSBQdXQgYWxsIHlvdXIgY29tcGxldGlvbiBhc3NpZ25tZW50cyBpbiBgYXNzaWdubWVudC5wczFgAQmxBAAACbIEAAAGswQAAAlyZWFkbWUubWQGtAQAAG9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWxcdGVwcFxyZWFkbWUubWQJBgAAAAm2BAAACbcEAAABRgQAAA8AAAAGuAQAANUBIyBEZXNjcmlwdGlvbg0KDQpUaGlzIGlzIHdoZXJlIHRoZSBmdW5jdGlvbiB0ZXN0cyBnby4NCg0KTWFrZSBzdXJlIHRvIHB1dCB0aGVtIGluIGZvbGRlcnMgcmVmbGVjdGluZyB0aGUgYWN0dWFsIG1vZHVsZSBzdHJ1Y3R1cmUuDQoNCkl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGludGVybmFsIGFuZCBwdWJsaWMgZnVuY3Rpb25zIGhlcmUuAQm5BAAACboEAAAGuwQAAAlyZWFkbWUubWQGvAQAAHFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cdGVzdHNcZnVuY3Rpb25zXHJlYWRtZS5tZAkGAAAACb4EAAAJvwQAAAFHBAAADwAAAAbABAAAggYjIExpc3Qgb2YgZm9yYmlkZGVuIGNvbW1hbmRzDQokZ2xvYmFsOkJhbm5lZENvbW1hbmRzID0gQCgNCgknV3JpdGUtSG9zdCcNCgknV3JpdGUtVmVyYm9zZScNCgknV3JpdGUtV2FybmluZycNCgknV3JpdGUtRXJyb3InDQoJJ1dyaXRlLU91dHB1dCcNCgknV3JpdGUtSW5mb3JtYXRpb24nDQoJJ1dyaXRlLURlYnVnJw0KCQ0KCSMgVXNlIENJTSBpbnN0ZWFkIHdoZXJlIHBvc3NpYmxlDQoJJ0dldC1XbWlPYmplY3QnDQoJJ0ludm9rZS1XbWlNZXRob2QnDQoJJ1JlZ2lzdGVyLVdtaUV2ZW50Jw0KCSdSZW1vdmUtV21pT2JqZWN0Jw0KCSdTZXQtV21pSW5zdGFuY2UnDQoNCgkjIFVzZSBHZXQtV2luRXZlbnQgaW5zdGVhZA0KCSdHZXQtRXZlbnRMb2cnDQopDQoNCjwjDQoJQ29udGFpbnMgbGlzdCBvZiBleGNlcHRpb25zIGZvciBiYW5uZWQgY21kbGV0cy4NCglJbnNlcnQgdGhlIGZpbGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBtYXkgY29udGFpbiB0aGVtLg0KCQ0KCUV4YW1wbGU6DQoJIldyaXRlLUhvc3QiICA9IEAoJ1dyaXRlLVBTRkhvc3RDb2xvci5wczEnLCdXcml0ZS1QU0ZNZXNzYWdlLnBzMScpDQojPg0KJGdsb2JhbDpNYXlDb250YWluQ29tbWFuZCA9IEB7DQoJIldyaXRlLUhvc3QiICA9IEAoKQ0KCSJXcml0ZS1WZXJib3NlIiA9IEAoKQ0KCSJXcml0ZS1XYXJuaW5nIiA9IEAoKQ0KCSJXcml0ZS1FcnJvciIgID0gQCgpDQoJIldyaXRlLU91dHB1dCIgPSBAKCkNCgkiV3JpdGUtSW5mb3JtYXRpb24iID0gQCgpDQoJIldyaXRlLURlYnVnIiA9IEAoKQ0KfQEJwQQAAAnCBAAABsMEAAAcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQbEBAAAggFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cdGVzdHNcZ2VuZXJhbFxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxCQYAAAAJxgQAAAnHBAAAAUgEAAAPAAAABsgEAADgGCRtb2R1bGVSb290ID0gKFJlc29sdmUtUGF0aCAiJGdsb2JhbDp0ZXN0cm9vdFwuLiIpLlBhdGgNCg0KLiAiJGdsb2JhbDp0ZXN0cm9vdFxnZW5lcmFsXEZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEiDQoNCkRlc2NyaWJlICJWZXJpZnlpbmcgaW50ZWdyaXR5IG9mIG1vZHVsZSBmaWxlcyIgew0KCUJlZm9yZUFsbCB7DQoJCWZ1bmN0aW9uIEdldC1GaWxlRW5jb2RpbmcNCgkJew0KCQk8Iw0KCQkJLlNZTk9QU0lTDQoJCQkJVGVzdHMgYSBmaWxlIGZvciBlbmNvZGluZy4NCgkJCQ0KCQkJLkRFU0NSSVBUSU9ODQoJCQkJVGVzdHMgYSBmaWxlIGZvciBlbmNvZGluZy4NCgkJCQ0KCQkJLlBBUkFNRVRFUiBQYXRoDQoJCQkJVGhlIGZpbGUgdG8gdGVzdA0KCQkjPg0KCQkJW0NtZGxldEJpbmRpbmcoKV0NCgkJCVBhcmFtICgNCgkJCQlbUGFyYW1ldGVyKE1hbmRhdG9yeSA9ICRUcnVlLCBWYWx1ZUZyb21QaXBlbGluZUJ5UHJvcGVydHlOYW1lID0gJFRydWUpXQ0KCQkJCVtBbGlhcygnRnVsbE5hbWUnKV0NCgkJCQlbc3RyaW5nXQ0KCQkJCSRQYXRoDQoJCQkpDQoJCQkNCgkJCWlmICgkUFNWZXJzaW9uVGFibGUuUFNWZXJzaW9uLk1ham9yIC1sdCA2KQ0KCQkJew0KCQkJCVtieXRlW11dJGJ5dGUgPSBnZXQtY29udGVudCAtRW5jb2RpbmcgYnl0ZSAtUmVhZENvdW50IDQgLVRvdGFsQ291bnQgNCAtUGF0aCAkUGF0aA0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCVtieXRlW11dJGJ5dGUgPSBHZXQtQ29udGVudCAtQXNCeXRlU3RyZWFtIC1SZWFkQ291bnQgNCAtVG90YWxDb3VudCA0IC1QYXRoICRQYXRoDQoJCQl9DQoJCQkNCgkJCWlmICgkYnl0ZVswXSAtZXEgMHhlZiAtYW5kICRieXRlWzFdIC1lcSAweGJiIC1hbmQgJGJ5dGVbMl0gLWVxIDB4YmYpIHsgJ1VURjggQk9NJyB9DQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAweGZlIC1hbmQgJGJ5dGVbMV0gLWVxIDB4ZmYpIHsgJ1VuaWNvZGUnIH0NCgkJCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDAgLWFuZCAkYnl0ZVsxXSAtZXEgMCAtYW5kICRieXRlWzJdIC1lcSAweGZlIC1hbmQgJGJ5dGVbM10gLWVxIDB4ZmYpIHsgJ1VURjMyJyB9DQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAweDJiIC1hbmQgJGJ5dGVbMV0gLWVxIDB4MmYgLWFuZCAkYnl0ZVsyXSAtZXEgMHg3NikgeyAnVVRGNycgfQ0KCQkJZWxzZSB7ICdVbmtub3duJyB9DQoJCX0NCgl9DQoNCglDb250ZXh0ICJWYWxpZGF0aW5nIFBTMSBTY3JpcHQgZmlsZXMiIHsNCgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIgfCBXaGVyZS1PYmplY3QgRnVsbE5hbWUgLU5vdExpa2UgIiRtb2R1bGVSb290XHRlc3RzXCoiDQoJCQ0KCQlmb3JlYWNoICgkZmlsZSBpbiAkYWxsRmlsZXMpDQoJCXsNCgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpDQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIFVURjggZW5jb2Rpbmcgd2l0aCBCeXRlIE9yZGVyIE1hcmsiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gew0KCQkJCUdldC1GaWxlRW5jb2RpbmcgLVBhdGggJGZpbGUuRnVsbE5hbWUgfCBTaG91bGQgLUJlICdVVEY4IEJPTScNCgkJCX0NCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gew0KCQkJCSgkZmlsZSB8IFNlbGVjdC1TdHJpbmcgIlxzJCIgfCBXaGVyZS1PYmplY3QgeyAkXy5MaW5lLlRyaW0oKS5MZW5ndGggLWd0IDB9KS5MaW5lTnVtYmVyIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCQl9DQoJCQkNCgkJCSR0b2tlbnMgPSAkbnVsbA0KCQkJJHBhcnNlRXJyb3JzID0gJG51bGwNCgkJCSRhc3QgPSBbU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5MYW5ndWFnZS5QYXJzZXJdOjpQYXJzZUZpbGUoJGZpbGUuRnVsbE5hbWUsIFtyZWZdJHRva2VucywgW3JlZl0kcGFyc2VFcnJvcnMpDQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHN5bnRheCBlcnJvcnMiIC1UZXN0Q2FzZXMgQHsgcGFyc2VFcnJvcnMgPSAkcGFyc2VFcnJvcnMgfSB7DQoJCQkJJHBhcnNlRXJyb3JzIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCQl9DQoJCQkNCgkJCWZvcmVhY2ggKCRjb21tYW5kIGluICRnbG9iYWw6QmFubmVkQ29tbWFuZHMpDQoJCQl7DQoJCQkJaWYgKCRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmRbIiRjb21tYW5kIl0gLW5vdGNvbnRhaW5zICRmaWxlLk5hbWUpDQoJCQkJew0KCQkJCQlJdCAiWyRuYW1lXSBTaG91bGQgbm90IHVzZSAkY29tbWFuZCIgLVRlc3RDYXNlcyBAeyB0b2tlbnMgPSAkdG9rZW5zOyBjb21tYW5kID0gJGNvbW1hbmQgfSB7DQoJCQkJCQkkdG9rZW5zIHwgV2hlcmUtT2JqZWN0IFRleHQgLUVRICRjb21tYW5kIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoJDQoJQ29udGV4dCAiVmFsaWRhdGluZyBoZWxwLnR4dCBoZWxwIGZpbGVzIiB7DQoJCSRhbGxGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJG1vZHVsZVJvb3QgLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5oZWxwLnR4dCIgfCBXaGVyZS1PYmplY3QgRnVsbE5hbWUgLU5vdExpa2UgIiRtb2R1bGVSb290XHRlc3RzXCoiDQoJCQ0KCQlmb3JlYWNoICgkZmlsZSBpbiAkYWxsRmlsZXMpDQoJCXsNCgkJCSRuYW1lID0gJGZpbGUuRnVsbE5hbWUuUmVwbGFjZSgiJG1vZHVsZVJvb3RcIiwgJycpDQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIFVURjggZW5jb2RpbmciIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gew0KCQkJCUdldC1GaWxlRW5jb2RpbmcgLVBhdGggJGZpbGUuRnVsbE5hbWUgfCBTaG91bGQgLUJlICdVVEY4IEJPTScNCgkJCX0NCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gdHJhaWxpbmcgc3BhY2UiIC1UZXN0Q2FzZXMgQHsgZmlsZSA9ICRmaWxlIH0gew0KCQkJCSgkZmlsZSB8IFNlbGVjdC1TdHJpbmcgIlxzJCIgfCBXaGVyZS1PYmplY3QgeyAkXy5MaW5lLlRyaW0oKS5MZW5ndGggLWd0IDAgfSB8IE1lYXN1cmUtT2JqZWN0KS5Db3VudCB8IFNob3VsZCAtQmUgMA0KCQkJfQ0KCQl9DQoJfQ0KfQEJyQQAAAnKBAAABssEAAAXRmlsZUludGVncml0eS5UZXN0cy5wczEGzAQAAH1TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cdGVzdHNcZ2VuZXJhbFxGaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQkGAAAACc4EAAAJzwQAAAFJBAAADwAAAAbQBAAAnQUjIExpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQNCiRnbG9iYWw6RnVuY3Rpb25IZWxwVGVzdEV4Y2VwdGlvbnMgPSBAKA0KICAgIA0KKQ0KDQo8Iw0KICBMaXN0IG9mIGFycmF5ZWQgZW51bWVyYXRpb25zLiBUaGVzZSBuZWVkIHRvIGJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuIEFkZCBmdWxsIG5hbWUuDQogIEV4YW1wbGU6DQoNCiAgIlNxbGNvbGxhYm9yYXRpdmUuRGJhdG9vbHMuQ29ubmVjdGlvbi5NYW5hZ2VtZW50Q29ubmVjdGlvblR5cGVbXSINCiM+DQokZ2xvYmFsOkhlbHBUZXN0RW51bWVyYXRlZEFycmF5cyA9IEAoDQoJDQopDQoNCjwjDQogIFNvbWUgdHlwZXMgb24gcGFyYW1ldGVycyBqdXN0IGZhaWwgdGhlaXIgdmFsaWRhdGlvbiBubyBtYXR0ZXIgd2hhdC4NCiAgRm9yIHRob3NlIGl0IGJlY29tZXMgcG9zc2libGUgdG8gc2tpcCB0aGVtLCBieSBhZGRpbmcgdGhlbSB0byB0aGlzIGhhc2h0YWJsZS4NCiAgQWRkIGJ5IGZvbGxvd2luZyB0aGlzIGNvbnZlbnRpb246IDxjb21tYW5kIG5hbWU+ID0gQCg8bGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXM+KQ0KICBFeGFtcGxlOg0KDQogICJHZXQtRGJhQ21PYmplY3QiICAgICAgID0gQCgiRG9Ob3RVc2UiKQ0KIz4NCiRnbG9iYWw6SGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZSA9IEB7DQogICAgDQp9DQoBCdEEAAAJ0gQAAAbTBAAAE0hlbHAuRXhjZXB0aW9ucy5wczEG1AQAAHlTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cdGVzdHNcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxCQYAAAAJ1gQAAAnXBAAAAUoEAAAPAAAABtgEAADONDwjDQogICAgLk5PVEVTDQogICAgICAgIFRoZSBvcmlnaW5hbCB0ZXN0IHRoaXMgaXMgYmFzZWQgdXBvbiB3YXMgd3JpdHRlbiBieSBKdW5lIEJsZW5kZXIuDQoJCUFmdGVyIHNldmVyYWwgcm91bmRzIG9mIG1vZGlmaWNhdGlvbnMgaXQgc3RhbmRzIG5vdyBhcyBpdCBpcywgYnV0IHRoZSBob25vciByZW1haW5zIGhlcnMuDQoNCgkJVGhhbmsgeW91IEp1bmUsIGZvciBhbGwgeW91IGhhdmUgZG9uZSENCg0KICAgIC5ERVNDUklQVElPTg0KCQlUaGlzIHRlc3QgZXZhbHVhdGVzIHRoZSBoZWxwIGZvciBhbGwgY29tbWFuZHMgaW4gYSBtb2R1bGUuDQoNCgkuUEFSQU1FVEVSIFNraXBUZXN0DQoJCURpc2FibGVzIHRoaXMgdGVzdC4NCgkNCgkuUEFSQU1FVEVSIENvbW1hbmRQYXRoDQoJCUxpc3Qgb2YgcGF0aHMgdW5kZXIgd2hpY2ggdGhlIHNjcmlwdCBmaWxlcyBhcmUgc3RvcmVkLg0KCQlUaGlzIHRlc3QgYXNzdW1lcyB0aGF0IGFsbCBmdW5jdGlvbnMgaGF2ZSB0aGVpciBvd24gZmlsZSB0aGF0IGlzIG5hbWVkIGFmdGVyIHRoZW1zZWx2ZXMuDQoJCVRoZXNlIHBhdGhzIGFyZSB1c2VkIHRvIHNlYXJjaCBmb3IgY29tbWFuZHMgdGhhdCBzaG91bGQgZXhpc3QgYW5kIGJlIHRlc3RlZC4NCgkJV2lsbCBzZWFyY2ggcmVjdXJzaXZlbHkgYW5kIGFjY2VwdHMgd2lsZGNhcmRzLCBtYWtlIHN1cmUgb25seSBmdW5jdGlvbnMgYXJlIGZvdW5kDQoNCgkuUEFSQU1FVEVSIE1vZHVsZU5hbWUNCgkJTmFtZSBvZiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZC4NCgkJVGhlIG1vZHVsZSBtdXN0IGFscmVhZHkgYmUgaW1wb3J0ZWQNCg0KCS5QQVJBTUVURVIgRXhjZXB0aW9uc0ZpbGUNCgkJRmlsZSBpbiB3aGljaCBleGNlcHRpb25zIGFuZCBhZGp1c3RtZW50cyBhcmUgY29uZmlndXJlZC4NCgkJSW4gaXQgdGhlcmUgc2hvdWxkIGJlIHR3byBhcnJheXMgYW5kIGEgaGFzaHRhYmxlIGRlZmluZWQ6DQoJCQkkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zDQoJCQkkZ2xvYmFsOkhlbHBUZXN0RW51bWVyYXRlZEFycmF5cw0KCQkJJGdsb2JhbDpIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlDQoJCVRoZXNlIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHRoZSB0ZXN0cyBzbGlnaHRseSBpbiBjYXNlcyBvZiBuZWVkLg0KCQlTZWUgdGhlIGV4YW1wbGUgZmlsZSBmb3IgZXhwbGFuYXRpb25zIG9uIGVhY2ggb2YgdGhlc2UgdXNhZ2UgYW5kIGVmZmVjdC4NCiM+DQpbQ21kbGV0QmluZGluZygpXQ0KUGFyYW0gKA0KCVtzd2l0Y2hdDQoJJFNraXBUZXN0LA0KCQ0KCVtzdHJpbmdbXV0NCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpLA0KCQ0KCVtzdHJpbmddDQoJJE1vZHVsZU5hbWUgPSAiw75uYW1lw74iLA0KCQ0KCVtzdHJpbmddDQoJJEV4Y2VwdGlvbnNGaWxlID0gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxIZWxwLkV4Y2VwdGlvbnMucHMxIg0KKQ0KaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQ0KLiAkRXhjZXB0aW9uc0ZpbGUNCg0KJGluY2x1ZGVkTmFtZXMgPSAoR2V0LUNoaWxkSXRlbSAkQ29tbWFuZFBhdGggLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiKS5CYXNlTmFtZQ0KJGNvbW1hbmRUeXBlcyA9IEAoJ0NtZGxldCcsICdGdW5jdGlvbicpDQppZiAoJFBTVmVyc2lvblRhYmxlLlBTRWRpdGlvbiAtZXEgJ0Rlc2t0b3AnICkgeyAkY29tbWFuZFR5cGVzICs9ICdXb3JrZmxvdycgfQ0KJGNvbW1hbmRzID0gR2V0LUNvbW1hbmQgLU1vZHVsZSAoR2V0LU1vZHVsZSAkTW9kdWxlTmFtZSkgLUNvbW1hbmRUeXBlICRjb21tYW5kVHlwZXMgfCBXaGVyZS1PYmplY3QgTmFtZSAtSW4gJGluY2x1ZGVkTmFtZXMNCg0KIyMgV2hlbiB0ZXN0aW5nIGhlbHAsIHJlbWVtYmVyIHRoYXQgaGVscCBpcyBjYWNoZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHNlc3Npb24uDQojIyBUbyB0ZXN0LCByZXN0YXJ0IHNlc3Npb24uDQoNCg0KZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGNvbW1hbmRzKSB7DQogICAgJGNvbW1hbmROYW1lID0gJGNvbW1hbmQuTmFtZQ0KICAgIA0KICAgICMgU2tpcCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIG9uIHRoZSBleGNsdXNpb25zIGxpc3QNCiAgICBpZiAoJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucyAtY29udGFpbnMgJGNvbW1hbmROYW1lKSB7IGNvbnRpbnVlIH0NCiAgICANCiAgICAjIFRoZSBtb2R1bGUtcXVhbGlmaWVkIGNvbW1hbmQgZmFpbHMgb24gTWljcm9zb2Z0LlBvd2VyU2hlbGwuQXJjaGl2ZSBjbWRsZXRzDQogICAgJEhlbHAgPSBHZXQtSGVscCAkY29tbWFuZE5hbWUgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUNCgkNCglEZXNjcmliZSAiVGVzdCBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgDQoJCSMgSWYgaGVscCBpcyBub3QgZm91bmQsIHN5bm9wc2lzIGluIGF1dG8tZ2VuZXJhdGVkIGhlbHAgaXMgdGhlIHN5bnRheCBkaWFncmFtDQoJCUl0ICJzaG91bGQgbm90IGJlIGF1dG8tZ2VuZXJhdGVkIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsNCgkJCSRIZWxwLlN5bm9wc2lzIHwgU2hvdWxkIC1Ob3QgLUJlTGlrZSAnKmBbYDxDb21tb25QYXJhbWV0ZXJzYD5gXSonDQoJCX0NCiAgICAgICAgDQoJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IGZ1bmN0aW9uDQoJCUl0ICJnZXRzIGRlc2NyaXB0aW9uIGZvciAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gew0KCQkJJEhlbHAuRGVzY3JpcHRpb24gfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQogICAgICAgIA0KCQkjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZQ0KCQlJdCAiZ2V0cyBleGFtcGxlIGNvZGUgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gew0KCQkJKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5Db2RlIHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KCQ0KCQkjIFNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZXhhbXBsZSBkZXNjcmlwdGlvbg0KCQlJdCAiZ2V0cyBleGFtcGxlIGhlbHAgZnJvbSAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gew0KCQkJKCRIZWxwLkV4YW1wbGVzLkV4YW1wbGUuUmVtYXJrcyB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQogICAgICAgIA0KICAgICAgICBDb250ZXh0ICJUZXN0IHBhcmFtZXRlciBoZWxwIGZvciAkY29tbWFuZE5hbWUiIHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGNvbW1vbiA9ICdEZWJ1ZycsICdFcnJvckFjdGlvbicsICdFcnJvclZhcmlhYmxlJywgJ0luZm9ybWF0aW9uQWN0aW9uJywgJ0luZm9ybWF0aW9uVmFyaWFibGUnLCAnT3V0QnVmZmVyJywgJ091dFZhcmlhYmxlJywgJ1BpcGVsaW5lVmFyaWFibGUnLCAnVmVyYm9zZScsICdXYXJuaW5nQWN0aW9uJywgJ1dhcm5pbmdWYXJpYWJsZScNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHBhcmFtZXRlcnMgPSAkY29tbWFuZC5QYXJhbWV0ZXJTZXRzLlBhcmFtZXRlcnMgfCBTb3J0LU9iamVjdCAtUHJvcGVydHkgTmFtZSAtVW5pcXVlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLW5vdGluICRjb21tb24NCiAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lcyA9ICRwYXJhbWV0ZXJzLk5hbWUNCiAgICAgICAgICAgICRIZWxwUGFyYW1ldGVyTmFtZXMgPSAkSGVscC5QYXJhbWV0ZXJzLlBhcmFtZXRlci5OYW1lIHwgU29ydC1PYmplY3QgLVVuaXF1ZQ0KICAgICAgICAgICAgZm9yZWFjaCAoJHBhcmFtZXRlciBpbiAkcGFyYW1ldGVycykgew0KICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJOYW1lID0gJHBhcmFtZXRlci5OYW1lDQogICAgICAgICAgICAgICAgJHBhcmFtZXRlckhlbHAgPSAkSGVscC5wYXJhbWV0ZXJzLnBhcmFtZXRlciB8IFdoZXJlLU9iamVjdCBOYW1lIC1FUSAkcGFyYW1ldGVyTmFtZQ0KCQkJDQoJCQkJIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgcGFyYW1ldGVyDQoJCQkJSXQgImdldHMgaGVscCBmb3IgcGFyYW1ldGVyOiAkcGFyYW1ldGVyTmFtZSA6IGluICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHAgfSB7DQoJCQkJCSRwYXJhbWV0ZXJIZWxwLkRlc2NyaXB0aW9uLlRleHQgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KCQkJCX0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkY29kZU1hbmRhdG9yeSA9ICRwYXJhbWV0ZXIuSXNNYW5kYXRvcnkudG9TdHJpbmcoKQ0KCQkJCUl0ICJoZWxwIGZvciAkcGFyYW1ldGVyTmFtZSBwYXJhbWV0ZXIgaW4gJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IE1hbmRhdG9yeSB2YWx1ZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IGNvZGVNYW5kYXRvcnkgPSAkY29kZU1hbmRhdG9yeSB9IHsNCgkJCQkJJHBhcmFtZXRlckhlbHAuUmVxdWlyZWQgfCBTaG91bGQgLUJlICRjb2RlTWFuZGF0b3J5DQoJCQkJfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICgkSGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZVskY29tbWFuZE5hbWVdIC1jb250YWlucyAkcGFyYW1ldGVyTmFtZSkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGNvZGVUeXBlID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLk5hbWUNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLklzRW51bSkgew0KICAgICAgICAgICAgICAgICAgICAjIEVudW1lcmF0aW9ucyBvZnRlbiBoYXZlIGlzc3VlcyB3aXRoIHRoZSB0eXBlbmFtZSBub3QgYmVpbmcgcmVsaWFibHkgYXZhaWxhYmxlDQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlKQ0KCQkJCQkJIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlDQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscDsgbmFtZXMgPSAkbmFtZXMgfSB7DQoJCQkJCQkkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMNCgkJCQkJfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5GdWxsTmFtZSAtaW4gJEhlbHBUZXN0RW51bWVyYXRlZEFycmF5cykgew0KICAgICAgICAgICAgICAgICAgICAjIEVudW1lcmF0aW9ucyBvZnRlbiBoYXZlIGlzc3VlcyB3aXRoIHRoZSB0eXBlbmFtZSBub3QgYmVpbmcgcmVsaWFibHkgYXZhaWxhYmxlDQogICAgICAgICAgICAgICAgICAgICRuYW1lcyA9IFtFbnVtXTo6R2V0TmFtZXMoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkRlY2xhcmVkTWVtYmVyc1swXS5SZXR1cm5UeXBlKQ0KCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gew0KCQkJCQkJJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWVHcm91cC5wYXJhbWV0ZXJWYWx1ZSB8IFNob3VsZCAtYmUgJG5hbWVzDQoJCQkJCX0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICMgVG8gYXZvaWQgY2FsbGluZyBUcmltIG1ldGhvZCBvbiBhIG51bGwgb2JqZWN0Lg0KICAgICAgICAgICAgICAgICAgICAkaGVscFR5cGUgPSBpZiAoJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUpIHsgJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWUuVHJpbSgpIH0NCgkJCQkJIyBQYXJhbWV0ZXIgdHlwZSBpbiBIZWxwIHNob3VsZCBtYXRjaCBjb2RlDQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IGhlbHBUeXBlID0gJGhlbHBUeXBlOyBjb2RlVHlwZSA9ICRjb2RlVHlwZSB9IHsNCgkJCQkJCSRoZWxwVHlwZSB8IFNob3VsZCAtYmUgJGNvZGVUeXBlDQoJCQkJCX0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3JlYWNoICgkaGVscFBhcm0gaW4gJEhlbHBQYXJhbWV0ZXJOYW1lcykgew0KCQkJCSMgU2hvdWxkbid0IGZpbmQgZXh0cmEgcGFyYW1ldGVycyBpbiBoZWxwLg0KCQkJCUl0ICJmaW5kcyBoZWxwIHBhcmFtZXRlciBpbiBjb2RlOiAkaGVscFBhcm0iIC1UZXN0Q2FzZXMgQHsgaGVscFBhcm0gPSAkaGVscFBhcm07IHBhcmFtZXRlck5hbWVzID0gJHBhcmFtZXRlck5hbWVzIH0gew0KCQkJCQkkaGVscFBhcm0gLWluICRwYXJhbWV0ZXJOYW1lcyB8IFNob3VsZCAtQmUgJHRydWUNCgkJCQl9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9AQnZBAAACdoEAAAG2wQAAA5IZWxwLlRlc3RzLnBzMQbcBAAAdFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblx0ZXN0c1xnZW5lcmFsXEhlbHAuVGVzdHMucHMxCQYAAAAJ3gQAAAnfBAAAAUsEAAAPAAAABuAEAADLFURlc2NyaWJlICJWYWxpZGF0aW5nIHRoZSBtb2R1bGUgbWFuaWZlc3QiIHsNCgkkbW9kdWxlUm9vdCA9IChSZXNvbHZlLVBhdGggIiRnbG9iYWw6dGVzdHJvb3RcLi4iKS5QYXRoDQoJJG1hbmlmZXN0ID0gKChHZXQtQ29udGVudCAiJG1vZHVsZVJvb3Rcw75uYW1lw74ucHNkMSIpIC1qb2luICJgbiIpIHwgSW52b2tlLUV4cHJlc3Npb24NCglDb250ZXh0ICJCYXNpYyByZXNvdXJjZXMgdmFsaWRhdGlvbiIgew0KCQkkZmlsZXMgPSBHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIg0KCQlJdCAiRXhwb3J0cyBhbGwgZnVuY3Rpb25zIGluIHRoZSBwdWJsaWMgZm9sZGVyIiAtVGVzdENhc2VzIEB7IGZpbGVzID0gJGZpbGVzOyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsNCgkJCQ0KCQkJJGZ1bmN0aW9ucyA9IChDb21wYXJlLU9iamVjdCAtUmVmZXJlbmNlT2JqZWN0ICRmaWxlcy5CYXNlTmFtZSAtRGlmZmVyZW5jZU9iamVjdCAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBXaGVyZS1PYmplY3QgU2lkZUluZGljYXRvciAtTGlrZSAnPD0nKS5JbnB1dE9iamVjdA0KCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJCUl0ICJFeHBvcnRzIG5vIGZ1bmN0aW9uIHRoYXQgaXNuJ3QgYWxzbyBwcmVzZW50IGluIHRoZSBwdWJsaWMgZm9sZGVyIiAtVGVzdENhc2VzIEB7IGZpbGVzID0gJGZpbGVzOyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsNCgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJz0+JykuSW5wdXRPYmplY3QNCgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KCQkNCgkJSXQgIkV4cG9ydHMgbm9uZSBvZiBpdHMgaW50ZXJuYWwgZnVuY3Rpb25zIiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7DQoJCQkkZmlsZXMgPSBHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxmdW5jdGlvbnMiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIioucHMxIg0KCQkJJGZpbGVzIHwgV2hlcmUtT2JqZWN0IEJhc2VOYW1lIC1JbiAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KCX0NCgkNCglDb250ZXh0ICJJbmRpdmlkdWFsIGZpbGUgdmFsaWRhdGlvbiIgew0KCQlJdCAiVGhlIHJvb3QgbW9kdWxlIGZpbGUgZXhpc3RzIiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7DQoJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCQoJG1hbmlmZXN0LlJvb3RNb2R1bGUpIiB8IFNob3VsZCAtQmUgJHRydWUNCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJGZvcm1hdCBpbiAkbWFuaWZlc3QuRm9ybWF0c1RvUHJvY2VzcykNCgkJew0KCQkJSXQgIlRoZSBmaWxlICRmb3JtYXQgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgZm9ybWF0ID0gJGZvcm1hdCB9IHsNCgkJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCRmb3JtYXQiIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KCQkJfQ0KCQl9DQoJCQ0KCQlmb3JlYWNoICgkdHlwZSBpbiAkbWFuaWZlc3QuVHlwZXNUb1Byb2Nlc3MpDQoJCXsNCgkJCUl0ICJUaGUgZmlsZSAkdHlwZSBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyB0eXBlID0gJHR5cGUgfSB7DQoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkdHlwZSIgfCBTaG91bGQgLUJlICR0cnVlDQoJCQl9DQoJCX0NCgkJDQoJCWZvcmVhY2ggKCRhc3NlbWJseSBpbiAkbWFuaWZlc3QuUmVxdWlyZWRBc3NlbWJsaWVzKQ0KCQl7DQogICAgICAgICAgICBpZiAoJGFzc2VtYmx5IC1saWtlICIqLmRsbCIpIHsNCiAgICAgICAgICAgICAgICBJdCAiVGhlIGZpbGUgJGFzc2VtYmx5IHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IGFzc2VtYmx5ID0gJGFzc2VtYmx5IH0gew0KICAgICAgICAgICAgICAgICAgICBUZXN0LVBhdGggIiRtb2R1bGVSb290XCRhc3NlbWJseSIgfCBTaG91bGQgLUJlICR0cnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgSXQgIlRoZSBmaWxlICRhc3NlbWJseSBzaG91bGQgbG9hZCBmcm9tIHRoZSBHQUMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBhc3NlbWJseSA9ICRhc3NlbWJseSB9IHsNCiAgICAgICAgICAgICAgICAgICAgeyBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lICRhc3NlbWJseSB9IHwgU2hvdWxkIC1Ob3QgLVRocm93DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoJCQ0KCQlmb3JlYWNoICgkdGFnIGluICRtYW5pZmVzdC5Qcml2YXRlRGF0YS5QU0RhdGEuVGFncykNCgkJew0KCQkJSXQgIlRhZ3Mgc2hvdWxkIGhhdmUgbm8gc3BhY2VzIGluIG5hbWUiIC1UZXN0Q2FzZXMgQHsgdGFnID0gJHRhZyB9IHsNCgkJCQkkdGFnIC1tYXRjaCAiICIgfCBTaG91bGQgLUJlICRmYWxzZQ0KCQkJfQ0KCQl9DQoJfQ0KfQEJ4QQAAAniBAAABuMEAAASTWFuaWZlc3QuVGVzdHMucHMxBuQEAAB4U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHRlc3RzXGdlbmVyYWxcTWFuaWZlc3QuVGVzdHMucHMxCQYAAAAJ5gQAAAnnBAAAAUwEAAAPAAAABugEAACWCVtDbWRsZXRCaW5kaW5nKCldDQpQYXJhbSAoDQoJW3N3aXRjaF0NCgkkU2tpcFRlc3QsDQoJDQoJW3N0cmluZ1tdXQ0KCSRDb21tYW5kUGF0aCA9IEAoIiRnbG9iYWw6dGVzdHJvb3RcLi5cZnVuY3Rpb25zIiwgIiRnbG9iYWw6dGVzdHJvb3RcLi5caW50ZXJuYWxcZnVuY3Rpb25zIikNCikNCg0KaWYgKCRTa2lwVGVzdCkgeyByZXR1cm4gfQ0KDQokZ2xvYmFsOl9fcGVzdGVyX2RhdGEuU2NyaXB0QW5hbHl6ZXIgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QNCg0KRGVzY3JpYmUgJ0ludm9raW5nIFBTU2NyaXB0QW5hbHl6ZXIgYWdhaW5zdCBjb21tYW5kYmFzZScgew0KCSRjb21tYW5kRmlsZXMgPSBmb3JlYWNoICgkcGF0aCBpbiAkQ29tbWFuZFBhdGgpIHsNCiAgICAgICAgR2V0LUNoaWxkSXRlbSAtUGF0aCAkcGF0aCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSINCiAgICB9DQoJJHNjcmlwdEFuYWx5emVyUnVsZXMgPSBHZXQtU2NyaXB0QW5hbHl6ZXJSdWxlDQoJDQoJZm9yZWFjaCAoJGZpbGUgaW4gJGNvbW1hbmRGaWxlcykNCgl7DQoJCUNvbnRleHQgIkFuYWx5emluZyAkKCRmaWxlLkJhc2VOYW1lKSIgew0KCQkJJGFuYWx5c2lzID0gSW52b2tlLVNjcmlwdEFuYWx5emVyIC1QYXRoICRmaWxlLkZ1bGxOYW1lIC1FeGNsdWRlUnVsZSBQU0F2b2lkVHJhaWxpbmdXaGl0ZXNwYWNlLCBQU1Nob3VsZFByb2Nlc3MNCgkJCQ0KCQkJZm9yRWFjaCAoJHJ1bGUgaW4gJHNjcmlwdEFuYWx5emVyUnVsZXMpDQoJCQl7DQoJCQkJSXQgIlNob3VsZCBwYXNzICRydWxlIiAtVGVzdENhc2VzIEB7IGFuYWx5c2lzID0gJGFuYWx5c2lzOyBydWxlID0gJHJ1bGUgfSB7DQoJCQkJCUlmICgkYW5hbHlzaXMuUnVsZU5hbWUgLWNvbnRhaW5zICRydWxlKQ0KCQkJCQl7DQoJCQkJCQkkYW5hbHlzaXMgfCBXaGVyZS1PYmplY3QgUnVsZU5hbWUgLUVRICRydWxlIC1vdXR2YXJpYWJsZSBmYWlsdXJlcyB8IEZvckVhY2gtT2JqZWN0IHsgJG51bGwgPSAkZ2xvYmFsOl9fcGVzdGVyX2RhdGEuU2NyaXB0QW5hbHl6ZXIuQWRkKCRfKSB9DQoJCQkJCQkNCgkJCQkJCTEgfCBTaG91bGQgLUJlIDANCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCTAgfCBTaG91bGQgLUJlIDANCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCn0BCekEAAAJ6gQAAAbrBAAAGlBTU2NyaXB0QW5hbHl6ZXIuVGVzdHMucHMxBuwEAACAAVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblx0ZXN0c1xnZW5lcmFsXFBTU2NyaXB0QW5hbHl6ZXIuVGVzdHMucHMxCQYAAAAJ7gQAAAnvBAAAAU0EAAAPAAAABvAEAADmByRleGNlcHRpb25zID0gQHsgfQ0KDQo8Iw0KQSBsaXN0IG9mIGVudHJpZXMgdGhhdCBNQVkgYmUgaW4gdGhlIGxhbmd1YWdlIGZpbGVzLCB3aXRob3V0IGNhdXNpbmcgdGhlIHRlc3RzIHRvIGZhaWwuDQpUaGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4gbW9kdWxlcyB0aGF0IGdlbmVyYXRlIGxvY2FsaXplZCBtZXNzYWdlcyBzdHJhaWdodCBmcm9tIEMjLg0KU3BlY2lmeSB0aGUgZnVsbCBrZXkgYXMgaXQgaXMgd3JpdHRlbiBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMsIGRvIG5vdCBwcmVwZW5kIHRoZSBtb2R1bGVuYW1lLA0KYXMgeW91IHdvdWxkIGhhdmUgdG8gaW4gQyMgY29kZS4NCg0KRXhhbXBsZToNCiRleGNlcHRpb25zWydMZWdhbFN1cnBsdXMnXSA9IEAoDQogICAgJ0V4Y2VwdGlvbi5TdHJlYW1zLkZhaWxlZENyZWF0ZScNCiAgICAnRXhjZXB0aW9uLlN0cmVhbXMuRmFpbGVkRGlzcG9zZScNCikNCiM+DQokZXhjZXB0aW9uc1snTGVnYWxTdXJwbHVzJ10gPSBAKA0KDQopDQo8Iw0KQSBsaXN0IG9mIGVudHJpZXMgdGhhdCBNQVkgYmUgdXNlZCB3aXRob3V0IG5lZWRpbmcgdG8gaGF2ZSB0ZXh0IGRlZmluZWQuDQpUaGlzIGlzIGludGVuZGVkIGZvciBtb2R1bGVzIChyZS0pdXNpbmcgc3RyaW5ncyBwcm92aWRlZCBieSBhbm90aGVyIG1vZHVsZQ0KIz4NCiRleGNlcHRpb25zWydOb1RleHROZWVkZWQnXSA9IEAoDQoJJ1ZhbGlkYXRlLkZTUGF0aCcNCgknVmFsaWRhdGUuRlNQYXRoLkZpbGUnDQoJJ1ZhbGlkYXRlLkZTUGF0aC5GaWxlT3JQYXJlbnQnDQoJJ1ZhbGlkYXRlLkZTUGF0aC5Gb2xkZXInDQoJJ1ZhbGlkYXRlLlBhdGgnDQoJJ1ZhbGlkYXRlLlBhdGguQ29udGFpbmVyJw0KCSdWYWxpZGF0ZS5QYXRoLkxlYWYnDQoJJ1ZhbGlkYXRlLlRpbWVTcGFuLlBvc2l0aXZlJw0KCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUnDQoJJ1ZhbGlkYXRlLlVyaS5BYnNvbHV0ZS5GaWxlJw0KCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUuSHR0cHMnDQopDQoNCiRleGNlcHRpb25zAQnxBAAACfIEAAAG8wQAABZzdHJpbmdzLkV4Y2VwdGlvbnMucHMxBvQEAAB8U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHRlc3RzXGdlbmVyYWxcc3RyaW5ncy5FeGNlcHRpb25zLnBzMQkGAAAACfYEAAAJ9wQAAAFOBAAADwAAAAb4BAAAlwg8Iw0KLkRFU0NSSVBUSU9ODQogICAgVGhpcyB0ZXN0IHZlcmlmaWVzLCB0aGF0IGFsbCBzdHJpbmdzIHRoYXQgaGF2ZSBiZWVuIHVzZWQsDQogICAgYXJlIGxpc3RlZCBpbiB0aGUgbGFuZ3VhZ2UgZmlsZXMgYW5kIHRodXMgaGF2ZSBhIG1lc3NhZ2UgYmVpbmcgZGlzcGxheWVkLg0KDQogICAgSXQgYWxzbyBjaGVja3MsIHdoZXRoZXIgdGhlIGxhbmd1YWdlIGZpbGVzIGhhdmUgb3JwaGFuZWQgZW50cmllcyB0aGF0IG5lZWQgY2xlYW5pbmcgdXAuDQojPg0KDQoNCg0KRGVzY3JpYmUgIlRlc3RpbmcgbG9jYWxpemF0aW9uIHN0cmluZ3MiIHsNCgkkbW9kdWxlUm9vdCA9IChHZXQtTW9kdWxlIMO+bmFtZcO+KS5Nb2R1bGVCYXNlDQoJJHN0cmluZ3NSZXN1bHRzID0gRXhwb3J0LVBTTURTdHJpbmcgLU1vZHVsZVJvb3QgJG1vZHVsZVJvb3QNCgkkZXhjZXB0aW9ucyA9ICYgIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxzdHJpbmdzLkV4Y2VwdGlvbnMucHMxIg0KCQ0KCWZvcmVhY2ggKCRzdHJpbmdFbnRyeSBpbiAkc3RyaW5nc1Jlc3VsdHMpIHsNCiAgICAgICAgaWYgKCRzdHJpbmdFbnRyeS5TdHJpbmcgLWVxICJrZXkiKSB7IGNvbnRpbnVlIH0gIyBTa2lwcGluZyB0aGUgdGVtcGxhdGUgZGVmYXVsdCBlbnRyeQ0KCQlJdCAiU2hvdWxkIGJlIHVzZWQgJiBoYXZlIHRleHQ6ICQoJHN0cmluZ0VudHJ5LlN0cmluZykiIC1UZXN0Q2FzZXMgQHsgc3RyaW5nRW50cnkgPSAkc3RyaW5nRW50cnk7IGV4Y2VwdGlvbnMgPSAkZXhjZXB0aW9ucyB9IHsNCiAgICAgICAgICAgIGlmICgkZXhjZXB0aW9ucy5MZWdhbFN1cnBsdXMgLW5vdGNvbnRhaW5zICRzdHJpbmdFbnRyeS5TdHJpbmcpIHsNCiAgICAgICAgICAgICAgICAkc3RyaW5nRW50cnkuU3VycGx1cyB8IFNob3VsZCAtQmVGYWxzZQ0KCQkJfQ0KCQkJaWYgKCRleGNlcHRpb25zLk5vVGV4dE5lZWRlZCAtbm90Y29udGFpbnMgJHN0cmluZ0VudHJ5LlN0cmluZykgew0KCQkJCSRzdHJpbmdFbnRyeS5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCgkJCX0NCiAgICAgICAgfQ0KICAgIH0NCn0BCfkEAAAJ+gQAAAb7BAAAEXN0cmluZ3MuVGVzdHMucHMxBvwEAAB3U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHRlc3RzXGdlbmVyYWxcc3RyaW5ncy5UZXN0cy5wczEJBgAAAAn+BAAACf8EAAABWQQA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</BA>
            </MS>
          </Obj>
        </LST>
      </Obj>
      <I32 N="Generation">1</I32>
    </Props>
    <MS>
      <BA N="SerializationData">AAEAAAD/////AQAAAAAAAAAMAgAAAEpQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGUMAAAABE5hbWUEVHlwZQdWZXJzaW9uC0Rlc2NyaXB0aW9uBkF1dGhvcglDcmVhdGVkT24EVGFncwpQYXJhbWV0ZXJzB1NjcmlwdHMLUGFyYW1ldGVyczIIQ2hpbGRyZW4KR2VuZXJhdGlvbgEEAwEBAAMDAwMDAClQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlVHlwZQIAAAAOU3lzdGVtLlZlcnNpb24Nf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXYACU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdCwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXYgCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlci5QYXJhbWV0ZXJCYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dngFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZSwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQgCAAAABgMAAAAaU2VjcmV0TWFuYWdlbWVudC5FeHRlbnNpb24F/P///ylQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlVHlwZQEAAAAHdmFsdWVfXwAIAgAAAAEAAAAJBQAAAAYGAAAAJ0V4dGVuc2lvbiBtb2R1bGUgZm9yIFNlY3JldCBNYW5hZ2VtZW50LgYHAAAAElNhc2NoYSBTcGlla2VybWFubgBAmebnGduICQgAAAAJCQAAAAkKAAAACQsAAAAJDAAAAAEAAAAEBQAAAA5TeXN0ZW0uVmVyc2lvbgQAAAAGX01ham9yBl9NaW5vcgZfQnVpbGQJX1JldmlzaW9uAAAAAAgICAgBAAAAAAAAAAAAAAAAAAAABAgAAAB/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQMAAAAGX2l0ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgJDQAAAAIAAAAAAAAAAQkAAAAIAAAACQ4AAAAFAAAABQAAAAQKAAAAgAJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dBAAAAAdWZXJzaW9uCENvbXBhcmVyCEhhc2hTaXplDUtleVZhbHVlUGFpcnMAAwADCBZTeXN0ZW0uT3JkaW5hbENvbXBhcmVyCIQCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0LCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dW10MAAAACQ8AAAARAAAACRAAAAAECwAAAIgCU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlci5QYXJhbWV0ZXJCYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1dAwAAAAdWZXJzaW9uCENvbXBhcmVyCEhhc2hTaXplAAMACBZTeXN0ZW0uT3JkaW5hbENvbXBhcmVyCAAAAAAJDwAAAAAAAAAEDAAAAJ4BU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2UsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAAC9QU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlRlbXBsYXRlSXRlbUJhc2VbXQIAAAAICAkSAAAAAQAAAAEAAAARDQAAAAIAAAAGEwAAAAZtb2R1bGUGFAAAAAtwc2ZyYW1ld29yaxEOAAAACAAAAAYVAAAABG5hbWUGFgAAAA5mdW5jdGlvblByZWZpeAYXAAAABmF1dGhvcgYYAAAAB2NvbXBhbnkGGQAAAAtkZXNjcmlwdGlvbg0DBA8AAAAWU3lzdGVtLk9yZGluYWxDb21wYXJlcgEAAAALX2lnbm9yZUNhc2UAAQEHEAAAAAABAAAADAAAAAOCAlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLktleVZhbHVlUGFpcmAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtQU01vZHVsZURldmVsb3BtZW50LlRlbXBsYXRlLlBhcmFtZXRlclNjcmlwdCwgUFNNb2R1bGVEZXZlbG9wbWVudCwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGxdXQTm////ggJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5QYXJhbWV0ZXJTY3JpcHQsIFBTTW9kdWxlRGV2ZWxvcG1lbnQsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0CAAAAA2tleQV2YWx1ZQEELFBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0AgAAAAYbAAAABHllYXIJHAAAAAHj////5v///wYeAAAADmd1aWRSb290TW9kdWxlCR8AAAAB4P///+b///8GIQAAAApwc2Z2ZXJzaW9uCSIAAAAB3f///+b///8GJAAAAA1ndWlkRXh0ZW5zaW9uCSUAAAAB2v///+b///8GJwAAAARndWlkCSgAAAAB1////+b///8GKgAAABRkeW5hbWljc2NyaXB0XzM5NDQzMgkrAAAAAdT////m////Bi0AAAALcHNmcmFtZXdvcmsJLgAAAAHR////5v///wYwAAAABGRhdGUJMQAAAAHO////5v///wYzAAAADHBlc3RlcmNvbmZpZwk0AAAAAcv////m////BjYAAAAUZHluYW1pY3NjcmlwdF84NDQxMTIJNwAAAAHI////5v///wY5AAAAF3NlY3JldE1hbmFnZW1lbnRWZXJzaW9uCToAAAABxf///+b///8GPAAAAAp0ZXN0Zm9sZGVyCT0AAAAHEgAAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAk+AAAADQMMPwAAAF9TeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLCBWZXJzaW9uPTMuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQUcAAAALFBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuUGFyYW1ldGVyU2NyaXB0AgAAAAROYW1lC1NjcmlwdEJsb2NrAQQ7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXI/AAAAAgAAAAkbAAAACUEAAAABHwAAABwAAAAJHgAAAAlDAAAAASIAAAAcAAAACSEAAAAJRQAAAAElAAAAHAAAAAkkAAAACUcAAAABKAAAABwAAAAJJwAAAAlJAAAAASsAAAAcAAAACSoAAAAJSwAAAAEuAAAAHAAAAAktAAAACU0AAAABMQAAABwAAAAJMAAAAAlPAAAAATQAAAAcAAAACTMAAAAJUQAAAAE3AAAAHAAAAAk2AAAACVMAAAABOgAAABwAAAAJOQAAAAlVAAAAAT0AAAAcAAAACTwAAAAJVwAAAAU+AAAAL1BTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtRm9sZGVyBgAAAAhDaGlsZHJlbgROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQDAQEBAwOeAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlLCBQU01vZHVsZURldmVsb3BtZW50LCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbF1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQIAAAAJWAAAAAZZAAAAGVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74GWgAAABlTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+BlsAAAACw74JXAAAAAldAAAABUEAAAA7U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5TY3JpcHRCbG9ja1NlcmlhbGl6YXRpb25IZWxwZXIBAAAAClNjcmlwdFRleHQBPwAAAAZeAAAAIA0KCQkJR2V0LURhdGUgLUZvcm1hdCAieXl5eSINCgkJAUMAAABBAAAABl8AAAAsDQoJCQlbU3lzdGVtLkd1aWRdOjpOZXdHdWlkKCkuVG9TdHJpbmcoKQ0KCQkBRQAAAEEAAAAGYAAAADQNCgkJCShHZXQtTW9kdWxlIFBTRnJhbWV3b3JrKS5WZXJzaW9uLlRvU3RyaW5nKCkNCgkJAUcAAABBAAAABmEAAAAsDQoJCQlbU3lzdGVtLkd1aWRdOjpOZXdHdWlkKCkuVG9TdHJpbmcoKQ0KCQkBSQAAAEEAAAAGYgAAACwNCgkJCVtTeXN0ZW0uR3VpZF06Ok5ld0d1aWQoKS5Ub1N0cmluZygpDQoJCQFLAAAAQQAAAAZjAAAAJg0KCQkgR2V0LURhdGUgLUZvcm1hdCAneXl5eS1NTS1kZCcNCgkJAU0AAABBAAAABmQAAAA0DQoJCQkoR2V0LU1vZHVsZSBQU0ZyYW1ld29yaykuVmVyc2lvbi5Ub1N0cmluZygpDQoJCQFPAAAAQQAAAAZlAAAAJg0KCQkJR2V0LURhdGUgLUZvcm1hdCAieXl5eS1NTS1kZCINCgkJAVEAAABBAAAABmYAAAAGDQoNCgkJAVMAAABBAAAABmcAAAAmDQoJCSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5LU1NLWRkJw0KCQkBVQAAAEEAAAAGaAAAAE4NCgkJCShHZXQtTW9kdWxlIE1pY3Jvc29mdC5Qb3dlcnNoZWxsLlNlY3JldE1hbmFnZW1lbnQpLlZlcnNpb24uVG9TdHJpbmcoKQ0KCQkBVwAAAEEAAAAGaQAAAAYNCg0KCQkBWAAAAAwAAAAJagAAAAcAAAAHAAAAAVwAAAAIAAAACWsAAAABAAAAAQAAAAFdAAAACAAAAAlsAAAAAAAAAAAAAAAHagAAAAABAAAACAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAltAAAACW4AAAAJbwAAAAlwAAAACXEAAAAJcgAAAAlzAAAAChFrAAAABAAAAAZ0AAAABG5hbWUNAxFsAAAAAAAAAAFtAAAAPgAAAAl1AAAABnYAAAAHLmdpdGh1YgZ3AAAAIVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cLmdpdGh1YglbAAAACXkAAAAJegAAAAFuAAAAPgAAAAl7AAAABnwAAAAFYnVpbGQGfQAAAB9TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGJ1aWxkCVsAAAAJfwAAAAmAAAAAAW8AAAA+AAAACYEAAAAGggAAABlTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+BoMAAAAzU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+CVsAAAAJhQAAAAmGAAAABXAAAAAtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1GaWxlCQAAAAVWYWx1ZQlQbGFpblRleHQUQ29udGVudFBhcmFtZXRlckZsYXQWQ29udGVudFBhcmFtZXRlclNjcmlwdAROYW1lDFJlbGF0aXZlUGF0aApJZGVudGlmaWVyF0ZpbGVTeXN0ZW1QYXJhbWV0ZXJGbGF0GUZpbGVTeXN0ZW1QYXJhbWV0ZXJTY3JpcHQBAAMDAQEBAwMBf1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV1/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXX9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1df1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0CAAAABocAAABCIyBBdXRvIGRldGVjdCB0ZXh0IGZpbGVzIGFuZCBwZXJmb3JtIExGIG5vcm1hbGl6YXRpb24NCiogdGV4dD1hdXRvAQmIAAAACYkAAAAGigAAAA4uZ2l0YXR0cmlidXRlcwaLAAAAKFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cLmdpdGF0dHJpYnV0ZXMJWwAAAAmNAAAACY4AAAABcQAAAHAAAAAGjwAAANIDDQojIGlnbm9yZSB0aGUgc2V0dGluZ3MgZm9sZGVyIGFuZCBmaWxlcyBmb3IgVlNDb2RlIGFuZCBQU1MNCi52c2NvZGUvKg0KKi5wc3Byb2oNCipUZW1wUG9pbnQqDQoNCiMgSWdub3JlIHN0YWdpbmcgaW5mbyBmcm9tIFZpc3VhbCBTdHVkaW8NCmxpYnJhcnkvw75uYW1lw74vLnZzLyoNCmxpYnJhcnkvw75uYW1lw74vw75uYW1lw74vYmluLyoNCmxpYnJhcnkvw75uYW1lw74vw75uYW1lw74vb2JqLyoNCg0KIyBpZ25vcmUgUG93ZXJTaGVsbCBTdHVkaW8gTWV0YURhdGENCsO+bmFtZcO+L8O+bmFtZcO+LnBzcHJvag0Kw75uYW1lw74vw75uYW1lw74ucHNwcm9qLmJhaw0Kw75uYW1lw74vw75uYW1lw74ucHNwcm9qcw0Kw75uYW1lw74vw75uYW1lw74ucHNwcm9qDQoNCiMgaWdub3JlIHRoZSBUZXN0UmVzdWx0cw0KVGVzdFJlc3VsdHMvKg0KDQojIGlnbm9yZSB0aGUgcHVibGlzaGluZyBEaXJlY3RvcnkNCnB1Ymxpc2gvKgEJkAAAAAmRAAAABpIAAAAKLmdpdGlnbm9yZQaTAAAAJFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cLmdpdGlnbm9yZQlbAAAACZUAAAAJlgAAAAFyAAAAcAAAAAaXAAAAxAhNSVQgTGljZW5zZQ0KDQpDb3B5cmlnaHQgKGMpIMO+IXllYXIhw74gw75hdXRob3LDvg0KDQpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5DQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbA0KaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cw0KdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbA0KY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KDQpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwNCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQoNClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQ0KQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUg0KTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwNCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFDQpTT0ZUV0FSRS4BCZgAAAAJmQAAAAaaAAAAB0xJQ0VOU0UGmwAAACFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XExJQ0VOU0UJWwAAAAmdAAAACZ4AAAABcwAAAHAAAAAGnwAAAIIKIyBEZXNjcmlwdGlvbg0KDQpJbnNlcnQgYSB1c2VmdWwgZGVzY3JpcHRpb24gZm9yIHRoZSDDvm5hbWXDviBwcm9qZWN0IGhlcmUuDQoNClJlbWVtYmVyLCBpdCdzIHRoZSBmaXJzdCB0aGluZyBhIHZpc2l0b3Igd2lsbCBzZWUuDQoNCiMgUHJvamVjdCBTZXR1cCBJbnN0cnVjdGlvbnMNCiMjIFdvcmtpbmcgd2l0aCB0aGUgbGF5b3V0DQoNCi0gRG9uJ3QgdG91Y2ggdGhlIHBzbTEgZmlsZQ0KLSBQbGFjZSBmdW5jdGlvbnMgeW91IGV4cG9ydCBpbiBgZnVuY3Rpb25zL2AgKGNhbiBoYXZlIHN1YmZvbGRlcnMpDQotIFBsYWNlIHByaXZhdGUvaW50ZXJuYWwgZnVuY3Rpb25zIGludmlzaWJsZSB0byB0aGUgdXNlciBpbiBgaW50ZXJuYWwvZnVuY3Rpb25zYCAoY2FuIGhhdmUgc3ViZm9sZGVycykNCi0gRG9uJ3QgYWRkIGNvZGUgZGlyZWN0bHkgdG8gdGhlIGBwb3N0aW1wb3J0LnBzMWAgb3IgYHByZWltcG9ydC5wczFgLg0KICBUaG9zZSBmaWxlcyBhcmUgZGVzaWduZWQgdG8gaW1wb3J0IG90aGVyIGZpbGVzIG9ubHkuDQotIFdoZW4gYWRkaW5nIGZpbGVzICYgZm9sZGVycywgbWFrZSBzdXJlIHRoZXkgYXJlIGNvdmVyZWQgYnkgZWl0aGVyIGBwb3N0aW1wb3J0LnBzMWAgb3IgYHByZWltcG9ydC5wczFgLg0KICBUaGlzIGFkZHMgdGhlbSB0byBib3RoIHRoZSBpbXBvcnQgYW5kIHRoZSBidWlsZCBzZXF1ZW5jZS4NCg0KIyMgU2V0dGluZyB1cCBDSS9DRA0KDQo+IFRvIGNyZWF0ZSBhIFBSIHZhbGlk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YW1lcyBlLmcuLCBbdXNlcjEsIHVzZXIyXQ0KcGF0cmVvbjogIyBSZXBsYWNlIHdpdGggYSBzaW5nbGUgUGF0cmVvbiB1c2VybmFtZQ0Kb3Blbl9jb2xsZWN0aXZlOiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBPcGVuIENvbGxlY3RpdmUgdXNlcm5hbWUNCmtvX2ZpOiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBLby1maSB1c2VybmFtZQ0KdGlkZWxpZnQ6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIFRpZGVsaWZ0IHBsYXRmb3JtLW5hbWUvcGFja2FnZS1uYW1lIGUuZy4sIG5wbS9iYWJlbA0KY29tbXVuaXR5X2JyaWRnZTogIyBSZXBsYWNlIHdpdGggYSBzaW5nbGUgQ29tbXVuaXR5IEJyaWRnZSBwcm9qZWN0LW5hbWUgZS5nLiwgY2xvdWQtZm91bmRyeQ0KbGliZXJhcGF5OiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBMaWJlcmFwYXkgdXNlcm5hbWUNCmlzc3VlaHVudDogIyBSZXBsYWNlIHdpdGggYSBzaW5nbGUgSXNzdWVIdW50IHVzZXJuYW1lDQpvdGVjaGllOiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBPdGVjaGllIHVzZXJuYW1lDQpjdXN0b206ICMgUmVwbGFjZSB3aXRoIHVwIHRvIDQgY3VzdG9tIHNwb25zb3JzaGlwIFVSTHMgZS5nLiwgWydsaW5rMScsICdsaW5rMiddDQoBCdQAAAAJ1QAAAAbWAAAAC0ZVTkRJTkcueW1sBtcAAAAtU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlwuZ2l0aHViXEZVTkRJTkcueW1sCVsAAAAJ2QAAAAnaAAAAAbcAAABwAAAABtsAAACoByMgU2V0dGluZyB1cCB0aGUgcmVsZWFzZSBwaXBlbGluZToNCg0KIyMgUHJlbGltaW5hcnkNCg0KU2V0dGluZyB1cCBhIHJlbGVhc2UgcGlwZWxpbmUsIHNldCB0aGUgdHJpZ2dlciB0byBkbyBjb250aW51b3VzIGludGVncmF0aW9uIGFnYWluc3QgdGhlIG1hc3RlciBicmFuY2ggb25seS4NCkluIFN0YWdlIDEgc2V0IHVwIGEgdGFza3NlcXVlbmNlOg0KDQojIyAxKSBQb3dlclNoZWxsIFRhc2s6IFByZXJlcXVpc2l0ZXMNCg0KSGF2ZSBpdCBleGVjdXRlIGB2c3RzLXByZXJlcXVpc2l0ZXMucHMxYA0KDQojIyAyKSBQb3dlclNoZWxsIFRhc2s6IFZhbGlkYXRlDQoNCkhhdmUgaXQgZXhlY3V0ZSBgdnN0cy1wcmVyZXF1aXNpdGVzLnBzMWANCg0KIyMgMykgUG93ZXJTaGVsbCBUYXNrOiBCdWlsZA0KDQpIYXZlIGl0IGV4ZWN1dGUgYHZzdHMtYnVpbGQucHMxYC4NClRoZSB0YXNrIHJlcXVpcmVzIHR3byBwYXJhbWV0ZXJzOg0KDQogLSBgLUxvY2FsUmVwb2ANCiAtIGAtV29ya2luZ0RpcmVjdG9yeSAkKFN5c3RlbS5EZWZhdWx0V29ya2luZ0RpcmVjdG9yeSkvX++/vW5hbWXvv71gDQoNCiMjIDQpIFB1Ymxpc2ggVGVzdCBSZXN1bHRzDQoNCkNvbmZpZ3VyZSB0YXNrIHRvIHBpY2sgdXAgbnVuaXQgdHlwZSBvZiB0ZXN0cyAocmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQganVuaXQpLg0KQ29uZmlndXJlIHRhc2sgdG8gZXhlY3V0ZSwgZXZlbiBpZiBwcmV2aW91cyBzdGVwcyBmYWlsZWQgb3IgdGhlIHRhc2sgc2VxdWVuY2Ugd2FzIGNhbmNlbGxlZC4NCg0KIyMgNSkgUG93ZXJTaGVsbCBUYXNrOiBQYWNrYWdlIEZ1bmN0aW9uDQoNCkhhdmUgaXQgZXhlY3V0ZSBgdnN0cy1wYWNrYWdlRnVuY3Rpb24ucHMxYA0KDQojIyA2KSBBenVyZSBGdW5jdGlvbiBBcHBEZXBsb3kNCg0KQ29uZmlndXJlIHRvIHB1Ymxpc2ggdG8gdGhlIGNvcnJlY3QgZnVuY3Rpb24gYXBwLgEJ3AAAAAndAAAABt4AAAAXQXp1cmVGdW5jdGlvbi5yZWFkbWUubWQG3wAAADdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGJ1aWxkXEF6dXJlRnVuY3Rpb24ucmVhZG1lLm1kCVsAAAAJ4QAAAAniAAAAAbgAAABwAAAABuMAAACwJTwjDQpUaGlzIHNjcmlwdCBwdWJsaXNoZXMgdGhlIG1vZHVsZSB0byB0aGUgZ2FsbGVyeS4NCkl0IGV4cGVjdHMgYXMgaW5wdXQgYW4gQXBpS2V5IGF1dGhvcml6ZWQgdG8gcHVibGlzaCB0aGUgbW9kdWxlLg0KDQpJbnNlcnQgYW55IGJ1aWxkIHN0ZXBzIHlvdSBtYXkgbmVlZCB0byB0YWtlIGJlZm9yZSBwdWJsaXNoaW5nIGl0IGhlcmUuDQojPg0KcGFyYW0gKA0KCSRBcGlLZXksDQoNCgkkV29ya2luZ0RpcmVjdG9yeSwNCg0KCSRSZXBvc2l0b3J5ID0gJ1BTR2FsbGVyeScsDQoNCglbc3dpdGNoXQ0KCSRMb2NhbFJlcG8sDQoNCglbc3dpdGNoXQ0KCSRTa2lwUHVibGlzaCwNCg0KCVtzd2l0Y2hdDQoJJEF1dG9WZXJzaW9uDQopDQoNCiNyZWdpb24gSGFuZGxlIFdvcmtpbmcgRGlyZWN0b3J5IERlZmF1bHRzDQppZiAoLW5vdCAkV29ya2luZ0RpcmVjdG9yeSkNCnsNCglpZiAoJGVudjpSRUxFQVNFX1BSSU1BUllBUlRJRkFDVFNPVVJDRUFMSUFTKQ0KCXsNCgkJJFdvcmtpbmdEaXJlY3RvcnkgPSBKb2luLVBhdGggLVBhdGggJGVudjpTWVNURU1fREVGQVVMVFdPUktJTkdESVJFQ1RPUlkgLUNoaWxkUGF0aCAkZW52OlJFTEVBU0VfUFJJTUFSWUFSVElGQUNUU09VUkNFQUxJQVMNCgl9DQoJZWxzZSB7ICRXb3JraW5nRGlyZWN0b3J5ID0gJGVudjpTWVNURU1fREVGQVVMVFdPUktJTkdESVJFQ1RPUlkgfQ0KfQ0KaWYgKC1ub3QgJFdvcmtpbmdEaXJlY3RvcnkpIHsgJFdvcmtpbmdEaXJlY3RvcnkgPSBTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QgfQ0KI2VuZHJlZ2lvbiBIYW5kbGUgV29ya2luZyBEaXJlY3RvcnkgRGVmYXVsdHMNCg0KIyBQcmVwYXJlIHB1Ymxpc2ggZm9sZGVyDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkNyZWF0aW5nIGFuZCBwb3B1bGF0aW5nIHB1Ymxpc2hpbmcgZGlyZWN0b3J5Ig0KJHB1Ymxpc2hEaXIgPSBOZXctSXRlbSAtUGF0aCAkV29ya2luZ0RpcmVjdG9yeSAtTmFtZSBwdWJsaXNoIC1JdGVtVHlwZSBEaXJlY3RvcnkgLUZvcmNlDQpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXMO+bmFtZcO+IiAtRGVzdGluYXRpb24gJHB1Ymxpc2hEaXIuRnVsbE5hbWUgLVJlY3Vyc2UgLUZvcmNlDQoNCiNyZWdpb24gR2F0aGVyIHRleHQgZGF0YSB0byBjb21waWxlDQokdGV4dCA9IEAoKQ0KJHByb2Nlc3NlZCA9IEAoKQ0KDQojIEdhdGhlciBTdHVmZiB0byBydW4gYmVmb3JlDQpmb3JlYWNoICgkZmlsZVBhdGggaW4gKCYgIiQoJFBTU2NyaXB0Um9vdClcLi5cw75uYW1lw75caW50ZXJuYWxcc2NyaXB0c1xwcmVpbXBvcnQucHMxIikpDQp7DQoJaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJGZpbGVQYXRoKSkgeyBjb250aW51ZSB9DQoNCgkkaXRlbSA9IEdldC1JdGVtICRmaWxlUGF0aA0KCWlmICgkaXRlbS5QU0lzQ29udGFpbmVyKSB7IGNvbnRpbnVlIH0NCglpZiAoJGl0ZW0uRnVsbE5hbWUgLWluICRwcm9jZXNzZWQpIHsgY29udGludWUgfQ0KCSR0ZXh0ICs9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRpdGVtLkZ1bGxOYW1lKQ0KCSRwcm9jZXNzZWQgKz0gJGl0ZW0uRnVsbE5hbWUNCn0NCg0KIyBHYXRoZXIgY29tbWFuZHMNCkdldC1DaGlsZEl0ZW0gLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXMO+bmFtZcO+XGludGVybmFsXGZ1bmN0aW9uc1wiIC1SZWN1cnNlIC1GaWxlIC1GaWx0ZXIgIioucHMxIiB8IEZvckVhY2gtT2JqZWN0IHsNCgkkdGV4dCArPSBbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgkXy5GdWxsTmFtZSkNCn0NCkdldC1DaGlsZEl0ZW0gLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cZnVuY3Rpb25zLnNoYXJlZGludGVybmFsXCIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiIHwgRm9yRWFjaC1PYmplY3Qgew0KCSR0ZXh0ICs9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRfLkZ1bGxOYW1lKQ0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFZlcmJvc2UgLU1lc3NhZ2UgIiAjMyBJbXBvcnRpbmcgY29udGVudCBmcm9tICQoJF8uRnVsbE5hbWUpIg0KfQ0KR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw75cZnVuY3Rpb25zXCIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiIHwgRm9yRWFjaC1PYmplY3Qgew0KCSR0ZXh0ICs9IFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCRfLkZ1bGxOYW1lKQ0KfQ0KDQojIEdhdGhlciBzdHVmZiB0byBydW4gYWZ0ZXJ3YXJkcw0KZm9yZWFjaCAoJGZpbGVQYXRoIGluICgmICIkKCRQU1NjcmlwdFJvb3QpXC4uXMO+bmFtZcO+XGludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEiKSkNCnsNCglpZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkZmlsZVBhdGgpKSB7IGNvbnRpbnVlIH0NCg0KCSRpdGVtID0gR2V0LUl0ZW0gJGZpbGVQYXRoDQoJaWYgKCRpdGVtLlBTSXNDb250YWluZXIpIHsgY29udGludWUgfQ0KCWlmICgkaXRlbS5GdWxsTmFtZSAtaW4gJHByb2Nlc3NlZCkgeyBjb250aW51ZSB9DQoJJHRleHQgKz0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJGl0ZW0uRnVsbE5hbWUpDQoJJHByb2Nlc3NlZCArPSAkaXRlbS5GdWxsTmFtZQ0KfQ0KI2VuZHJlZ2lvbiBHYXRoZXIgdGV4dCBkYXRhIHRvIGNvbXBpbGUNCg0KI3JlZ2lvbiBVcGRhdGUgdGhlIHBzbTEgZmlsZQ0KJGZpbGVEYXRhID0gR2V0LUNvbnRlbnQgLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXMO+bmFtZcO+XMO+bmFtZcO+LnBzbTEiIC1SYXcNCiRmaWxlRGF0YSA9ICRmaWxlRGF0YS5SZXBsYWNlKCciPHdhcyBub3QgY29tcGlsZWQ+IicsICciPHdhcyBjb21waWxlZD4iJykNCiRmaWxlRGF0YSA9ICRmaWxlRGF0YS5SZXBsYWNlKCciPGNvbXBpbGUgY29kZSBpbnRvIGhlcmU+IicsICgkdGV4dCAtam9pbiAiYG5gbiIpKQ0KW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxUZXh0KCIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVzDvm5hbWXDvlzDvm5hbWXDvi5wc20xIiwgJGZpbGVEYXRhLCBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpVVEY4KQ0KI2VuZHJlZ2lvbiBVcGRhdGUgdGhlIHBzbTEgZmlsZQ0KDQojcmVnaW9uIFVwZGF0aW5nIHRoZSBNb2R1bGUgVmVyc2lvbg0KaWYgKCRBdXRvVmVyc2lvbikNCnsNCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlVwZGF0aW5nIG1vZHVsZSB2ZXJzaW9uIG51bWJlcnMuIg0KCXRyeSB7IFt2ZXJzaW9uXSRyZW1vdGVWZXJzaW9uID0gKEZpbmQtTW9kdWxlICfDvm5hbWXDvicgLVJlcG9zaXRvcnkgJFJlcG9zaXRvcnkgLUVycm9yQWN0aW9uIFN0b3ApLlZlcnNpb24gfQ0KCWNhdGNoDQoJew0KCQlTdG9wLVBTRkZ1bmN0aW9uIC1NZXNzYWdlICJGYWlsZWQgdG8gYWNjZXNzICQoJFJlcG9zaXRvcnkpIiAtRW5hYmxlRXhjZXB0aW9uICR0cnVlIC1FcnJvclJlY29yZCAkXw0KCX0NCglpZiAoLW5vdCAkcmVtb3RlVmVyc2lvbikNCgl7DQoJCVN0b3AtUFNGRnVuY3Rpb24gLU1lc3NhZ2UgIkNvdWxkbid0IGZpbmQgw75uYW1lw74gb24gcmVwb3NpdG9yeSAkKCRSZXBvc2l0b3J5KSIgLUVuYWJsZUV4Y2VwdGlvbiAkdHJ1ZQ0KCX0NCgkkbmV3QnVpbGROdW1iZXIgPSAkcmVtb3RlVmVyc2lvbi5CdWlsZCArIDENCglbdmVyc2lvbl0kbG9jYWxWZXJzaW9uID0gKEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJHB1Ymxpc2hEaXIuRnVsbE5hbWUpXMO+bmFtZcO+XMO+bmFtZcO+LnBzZDEiKS5Nb2R1bGVWZXJzaW9uDQoJVXBkYXRlLU1vZHVsZU1hbmlmZXN0IC1QYXRoICIkKCRwdWJsaXNoRGlyLkZ1bGxOYW1lKVzDvm5hbWXDvlzDvm5hbWXDvi5wc2QxIiAtTW9kdWxlVmVyc2lvbiAiJCgkbG9jYWxWZXJzaW9uLk1ham9yKS4kKCRsb2NhbFZlcnNpb24uTWlub3IpLiQoJG5ld0J1aWxkTnVtYmVyKSINCn0NCiNlbmRyZWdpb24gVXBkYXRpbmcgdGhlIE1vZHVsZSBWZXJzaW9uDQoNCiNyZWdpb24gUHVibGlzaA0KaWYgKCRTa2lwUHVibGlzaCkgeyByZXR1cm4gfQ0KaWYgKCRMb2NhbFJlcG8pDQp7DQoJIyBEZXBlbmRlbmNpZXMgbXVzdCBnbyBmaXJzdA0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiQ3JlYXRpbmcgTnVnZXQgUGFja2FnZSBmb3IgbW9kdWxlOiBQU0ZyYW1ld29yayINCglOZXctUFNNRE1vZHVsZU51Z2V0UGFja2FnZSAtTW9kdWxlUGF0aCAoR2V0LU1vZHVsZSAtTmFtZSBQU0ZyYW1ld29yaykuTW9kdWxlQmFzZSAtUGFja2FnZVBhdGggLg0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiQ3JlYXRpbmcgTnVnZXQgUGFja2FnZSBmb3IgbW9kdWxlOiDDvm5hbWXDviINCglOZXctUFNNRE1vZHVsZU51Z2V0UGFja2FnZSAtTW9kdWxlUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw74iIC1QYWNrYWdlUGF0aCAuDQp9DQplbHNlDQp7DQoJIyBQdWJsaXNoIHRvIEdhbGxlcnkNCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIlB1Ymxpc2hpbmcgdGhlIMO+bmFtZcO+IG1vZHVsZSB0byAkKCRSZXBvc2l0b3J5KSINCglQdWJsaXNoLU1vZHVsZSAtUGF0aCAiJCgkcHVibGlzaERpci5GdWxsTmFtZSlcw75uYW1lw74iIC1OdUdldEFwaUtleSAkQXBpS2V5IC1Gb3JjZSAtUmVwb3NpdG9yeSAkUmVwb3NpdG9yeQ0KfQ0KI2VuZHJlZ2lvbiBQdWJsaXNoAQnkAAAACeUAAAAG5gAAAA52c3RzLWJ1aWxkLnBzMQbnAAAALlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cYnVpbGRcdnN0cy1idWlsZC5wczEJWwAAAAnpAAAACeoAAAABuQAAAHAAAAAG6wAAALxBDQo8Iw0KCS5TWU5PUFNJUw0KCQlCdWlsZCBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgYSBjbGllbnQgbW9kdWxlIGZvciBSRVNUIEFQSSBlbmRwb2ludHMgb2YgYSBBenVyZSBQb3dlclNoZWxsIEZ1bmN0aW9ucyBwcm9qZWN0Lg0KCQ0KCS5ERVNDUklQVElPTg0KCQlCdWlsZCBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgYSBjbGllbnQgbW9kdWxlIGZvciBSRVNUIEFQSSBlbmRwb2ludHMgb2YgYSBBenVyZSBQb3dlclNoZWxsIEZ1bmN0aW9ucyBwcm9qZWN0Lg0KCQ0KCS5QQVJBTUVURVIgQXBpS2V5DQoJCVRoZSBBUEkga2V5IHRvIHVzZSB0byBwdWJsaXNoIHRoZSBtb2R1bGUgdG8gYSBOdWdldCBSZXBvc2l0b3J5DQoJDQoJLlBBUkFNRVRFUiBXb3JraW5nRGlyZWN0b3J5DQoJCVRoZSByb290IGZvbGRlciBmcm9tIHdoaWNoIHRvIGJ1aWxkIHRoZSBtb2R1bGUuDQoJDQoJLlBBUkFNRVRFUiBSZXBvc2l0b3J5DQoJCVRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5IHRvIHB1Ymxpc2ggdG8uDQoJCURlZmF1bHRzIHRvIFBTR2FsbGVyeS4NCgkNCgkuUEFSQU1FVEVSIExvY2FsUmVwbw0KCQlJbnN0ZWFkIG9mIHB1Ymxpc2hpbmcgdG8gYSBnYWxsZXJ5LCBkcm9wIGEgbnVnZXQgcGFja2FnZSBpbiB0aGUgcm9vdCBmb2xkZXIuDQoJCVRoaXMgcGFja2FnZSBjYW4gdGhlbiBiZSBwaWNrZWQgdXAgaW4gYSBsYXRlciBzdGVwIGZvciBwdWJsaXNoaW5nIHRvIEF6dXJlIEFydGlmYWN0cy4NCg0KCS5QQVJBTUVURVIgTW9kdWxlTmFtZQ0KCQlUaGUgbmFtZSB0byBnaXZlIHRvIHRoZSBjbGllbnQgbW9kdWxlLg0KCQlCeSBkZWZhdWx0LCB0aGUgY2xpZW50IG1vZHVsZSB3aWxsIGJlIG5hbWVkICc8TW9kdWxlTmFtZT4uQ2xpZW50Jy4NCgkNCgkuUEFSQU1FVEVSIEluY2x1ZGVGb3JtYXQNCgkJSW5jbHVkZSB0aGUgZm9ybWF0IHhtbCBvZiB0aGUgc291cmNlIG1vZHVsZSBmb3IgdGhlIGNsaWVudCBtb2R1bGUuDQoJDQoJLlBBUkFNRVRFUiBJbmNsdWRlVHlwZQ0KCQlJbmNsdWRlIHRoZSB0eXBlIGV4dGVuc2lvbiB4bWwgb2YgdGhlIHNvdXJjZSBtb2R1bGUgZm9yIHRoZSBjbGllbnQgbW9kdWxlLg0KCQ0KCS5QQVJBTUVURVIgSW5jbHVkZUFzc2VtYmx5DQoJCUluY2x1ZGUgdGhlIGJpbmFyaWVzIG9mIHRoZSBzb3VyY2UgbW9kdWxlIGZvciB0aGUgY2xpZW50IG1vZHVsZS4NCiM+DQpwYXJhbSAoDQoJJEFwaUtleSwNCgkNCgkkV29ya2luZ0RpcmVjdG9yeSwNCgkNCgkkUmVwb3NpdG9yeSA9ICdQU0dhbGxlcnknLA0KCQ0KCVtzd2l0Y2hdDQoJJExvY2FsUmVwbywNCgkNCgkkTW9kdWxlTmFtZSwNCgkNCglbc3dpdGNoXQ0KCSRJbmNsdWRlRm9ybWF0LA0KCQ0KCVtzd2l0Y2hdDQoJJEluY2x1ZGVUeXBlLA0KCQ0KCVtzd2l0Y2hdDQoJJEluY2x1ZGVBc3NlbWJseQ0KKQ0KDQojcmVnaW9uIEhhbmRsZSBXb3JraW5nIERpcmVjdG9yeSBEZWZhdWx0cw0KaWYgKC1ub3QgJFdvcmtpbmdEaXJlY3RvcnkpDQp7DQoJaWYgKCRlbnY6UkVMRUFTRV9QUklNQVJZQVJUSUZBQ1RTT1VSQ0VBTElBUykNCgl7DQoJCSRXb3JraW5nRGlyZWN0b3J5ID0gSm9pbi1QYXRoIC1QYXRoICRlbnY6U1lTVEVNX0RFRkFVTFRXT1JLSU5HRElSRUNUT1JZIC1DaGlsZFBhdGggJGVudjpSRUxFQVNFX1BSSU1BUllBUlRJRkFDVFNPVVJDRUFMSUFTDQoJfQ0KCWVsc2UgeyAkV29ya2luZ0RpcmVjdG9yeSA9ICRlbnY6U1lTVEVNX0RFRkFVTFRXT1JLSU5HRElSRUNUT1JZIH0NCn0NCiNlbmRyZWdpb24gSGFuZGxlIFdvcmtpbmcgRGlyZWN0b3J5IERlZmF1bHRzDQoNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgJ1N0YXJ0aW5nIEJ1aWxkOiBDbGllbnQgTW9kdWxlJw0KJHBhcmVudE1vZHVsZSA9ICfDvm5hbWXDvicNCmlmICgtbm90ICRNb2R1bGVOYW1lKSB7ICRNb2R1bGVOYW1lID0gJ8O+bmFtZcO+LkNsaWVudCcgfQ0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAnQ3JlYXRpbmcgRm9sZGVyIFN0cnVjdHVyZScNCiR3b3JraW5nUm9vdCA9IE5ldy1JdGVtIC1QYXRoICRXb3JraW5nRGlyZWN0b3J5IC1OYW1lICRNb2R1bGVOYW1lIC1JdGVtVHlwZSBEaXJlY3RvcnkNCiRwdWJsaXNoUm9vdCA9IEpvaW4tUGF0aCAtUGF0aCAkV29ya2luZ0RpcmVjdG9yeSAtQ2hpbGRQYXRoICdwdWJsaXNoXMO+bmFtZcO+Jw0KQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGNsaWVudE1vZHVsZVxmdW5jdGlvbnMiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIgLVJlY3Vyc2UNCkNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xjbGllbnRNb2R1bGVcaW50ZXJuYWwiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIgLVJlY3Vyc2UNCkNvcHktSXRlbSAtUGF0aCAiJCgkcHVibGlzaFJvb3QpXGVuLXVzIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdSb290LkZ1bGxOYW1lKVwiIC1SZWN1cnNlDQokZnVuY3Rpb25Gb2xkZXIgPSBHZXQtSXRlbSAtUGF0aCAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXGZ1bmN0aW9ucyINCg0KI3JlZ2lvbiBDcmVhdGUgRnVuY3Rpb25zDQokZW5jb2RpbmcgPSBbUFNGRW5jb2RpbmddJ3V0ZjgnDQokZnVuY3Rpb25zVGV4dCA9IEdldC1Db250ZW50IC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGNsaWVudE1vZHVsZVxmdW5jdGlvbi5wczEiIC1SYXcNCg0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAnQ3JlYXRpbmcgRnVuY3Rpb25zJw0KZm9yZWFjaCAoJGZ1bmN0aW9uU291cmNlRmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkcHVibGlzaFJvb3QpXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbHRlciAnKi5wczEnKSkNCnsNCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICIgIFByb2Nlc3NpbmcgZnVuY3Rpb246ICQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkiDQoJJGNvbmRlbnNlZE5hbWUgPSAkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lIC1yZXBsYWNlICctJywgJycNCgkNCgkjcmVnaW9uIExvYWQgT3ZlcnJpZGVzDQoJJG92ZXJyaWRlID0gQHsgfQ0KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpLnBzZDEiKQ0KCXsNCgkJJG92ZXJyaWRlID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHNkMSINCgl9DQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGNvbmRlbnNlZE5hbWUpLnBzZDEiKQ0KCXsNCgkJJG92ZXJyaWRlID0gSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGNvbmRlbnNlZE5hbWUpLnBzZDEiDQoJfQ0KCWlmICgkb3ZlcnJpZGUuTm9DbGllbnRGdW5jdGlvbikNCgl7DQoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIiAgICBPdmVycmlkZSAnTm9DbGllbnRGdW5jdGlvbicgZGV0ZWN0ZWQsIHNraXBwaW5nISINCgkJY29udGludWUNCgl9DQoJDQoJIyBJZiB0aGVyZSBpcyBhbiBkZWZpbml0aW9uIG92ZXJyaWRlLCB1c2UgaXQgYW5kIGNvbnRpbnVlDQoJaWYgKFRlc3QtUGF0aCAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkucHMxIikNCgl7DQoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIiAgICBPdmVycmlkZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRldGVjdGVkLCB1c2luZyBvdmVycmlkZSINCgkJQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5wczEiIC1EZXN0aW5hdGlvbiAkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUNCgkJY29udGludWUNCgl9DQoJDQoJIyBGaWd1cmUgb3V0IHRoZSBSZXN0IE1ldGhvZCB0byB1c2UNCgkkbWV0aG9kTmFtZSA9ICdQb3N0Jw0KCWlmICgkb3ZlcnJpZGUuUmVzdE1ldGhvZHMpDQoJew0KCQkkbWV0aG9kTmFtZSA9ICRvdmVycmlkZS5SZXN0TWV0aG9kcyB8IFdoZXJlLU9iamVjdCB7ICRfIC1uZSAnR2V0JyB9IHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMQ0KCX0NCgkNCgkjZW5kcmVnaW9uIExvYWQgT3ZlcnJpZGVzDQoJDQoJJGN1cnJlbnRGdW5jdGlvbnNUZXh0ID0gJGZ1bmN0aW9uc1RleHQgLXJlcGxhY2UgJyVmdW5jdGlvbm5hbWUlJywgJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSAtcmVwbGFjZSAnJWNvbmRlbnNlZG5hbWUlJywgJGNvbmRlbnNlZE5hbWUgLXJlcGxhY2UgJyVtZXRob2QlJywgJG1ldGhvZE5hbWUNCgkNCgkkcGFyc2VkRnVuY3Rpb24gPSBSZWFkLVBTTURTY3JpcHQgLVBhdGggJGZ1bmN0aW9uU291cmNlRmlsZS5GdWxsTmFtZQ0KCSRmdW5jdGlvbkFzdCA9ICRwYXJzZWRGdW5jdGlvbi5Bc3QuRW5kQmxvY2suU3RhdGVtZW50cyB8IFdoZXJlLU9iamVjdCB7DQoJCSRfIC1pcyBbU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5MYW5ndWFnZS5GdW5jdGlvbkRlZmluaXRpb25Bc3RdDQoJfSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDENCgkNCgkkZW5kID0gJGZ1bmN0aW9uQXN0LkJvZHkuUGFyYW1CbG9jay5FeHRlbnQuRW5kT2ZmU2V0DQoJJHN0YXJ0ID0gJGZ1bmN0aW9uQXN0LkJvZHkuRXh0ZW50LlN0YXJ0T2ZmU2V0ICsgMQ0KCSRjdXJyZW50RnVuY3Rpb25zVGV4dCA9ICRjdXJyZW50RnVuY3Rpb25zVGV4dC5SZXBsYWNlKCclcGFyYW1ldGVyJScsICRmdW5jdGlvbkFzdC5Cb2R5LkV4dGVudC5UZXh0LlN1YlN0cmluZygxLCAoJGVuZCAtICRzdGFydCkpKQ0KCQ0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIiAgICBDcmVhdGluZyBmaWxlOiAkKCRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSlcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLk5hbWUpIg0KCVtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsVGV4dCgiJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5OYW1lKSIsICRjdXJyZW50RnVuY3Rpb25zVGV4dCwgJGVuY29kaW5nKQ0KfQ0KJGZ1bmN0aW9uc1RvRXhwb3J0ID0gKEdldC1DaGlsZEl0ZW0gLVBhdGggJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lIC1SZWN1cnNlIC1GaWx0ZXIgKi5wczEpLkJhc2VOYW1lIHwgU29ydC1PYmplY3QNCiNlbmRyZWdpb24gQ3JlYXRlIEZ1bmN0aW9ucw0KDQojcmVnaW9uIENyZWF0ZSBDb3JlIE1vZHVsZSBGaWxlcw0KIyBHZXQgTWFuaWZlc3Qgb2YgcHVibGlzaGVkIHZlcnNpb24sIGluIG9yZGVyIHRvIGNhdGNoIGJ1aWxkLXBoYXNlIGNoYW5nZXMgc3VjaCBhcyBtb2R1bGUgdmVyc2lvbi4NCiRvcmlnaW5hbE1hbmlmZXN0RGF0YSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiRwdWJsaXNoUm9vdFzDvm5hbWXDvi5wc2QxIg0KJHByZXJlcUhhc2ggPSBAew0KCU1vZHVsZU5hbWUgICAgPSAnUFNGcmFtZXdvcmsnDQoJTW9kdWxlVmVyc2lvbiA9IChHZXQtTW9kdWxlIFBTRnJhbWV3b3JrKS5WZXJzaW9uDQp9DQokcGFyYW1OZXdNb2R1bGVNYW5pZmVzdCA9IEB7DQoJUGF0aAkJCSAgPSAoJ3swfVx7MX0ucHNkMScgLWYgJHdvcmtpbmdSb290LkZ1bGxOYW1lLCAkTW9kdWxlTmFtZSkNCglGdW5jdGlvbnNUb0V4cG9ydCA9ICRmdW5jdGlvbnNUb0V4cG9ydA0KCUNvbXBhbnlOYW1lCSAgICAgID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLkNvbXBhbnlOYW1lDQoJQXV0aG9yCQkgICAgICA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5BdXRob3INCglEZXNjcmlwdGlvbgkgICAgICA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5EZXNjcmlwdGlvbg0KCU1vZHVsZVZlcnNpb24JICA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5Nb2R1bGVWZXJzaW9uDQoJUm9vdE1vZHVsZQkgICAgICA9ICgnezB9LnBzbTEnIC1mICRNb2R1bGVOYW1lKQ0KCUNvcHlyaWdodAkJICA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5Db3B5cmlnaHQNCglUeXBlc1RvUHJvY2VzcyAgICA9IEAoKQ0KCUZvcm1hdHNUb1Byb2Nlc3MgID0gQCgpDQoJUmVxdWlyZWRBc3NlbWJsaWVzID0gQCgpDQoJUmVxdWlyZWRNb2R1bGVzICAgPSBAKCRwcmVyZXFIYXNoKQ0KCUNvbXBhdGlibGVQU0VkaXRpb25zID0gJ0NvcmUnLCAnRGVza3RvcCcNCglQb3dlclNoZWxsVmVyc2lvbiA9ICc1LjEnDQp9DQoNCmlmICgkSW5jbHVkZUFzc2VtYmx5KSB7ICRwYXJhbU5ld01vZHVsZU1hbmlmZXN0LlJlcXVpcmVkQXNzZW1ibGllcyA9ICRvcmlnaW5hbE1hbmlmZXN0RGF0YS5SZXF1aXJlZEFzc2VtYmxpZXMgfQ0KaWYgKCRJbmNsdWRlRm9ybWF0KSB7ICRwYXJhbU5ld01vZHVsZU1hbmlmZXN0LkZvcm1hdHNUb1Byb2Nlc3MgPSAkb3JpZ2luYWxNYW5pZmVzdERhdGEuRm9ybWF0c1RvUHJvY2VzcyB9DQppZiAoJEluY2x1ZGVUeXBlKSB7ICRwYXJhbU5ld01vZHVsZU1hbmlmZXN0LlR5cGVzVG9Qcm9jZXNzID0gJG9yaWdpbmFsTWFuaWZlc3REYXRhLlR5cGVzVG9Qcm9jZXNzIH0NCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIkNyZWF0aW5nIE1vZHVsZSBNYW5pZmVzdCBmb3IgbW9kdWxlOiAkTW9kdWxlTmFtZSINCk5ldy1Nb2R1bGVNYW5pZmVzdCBAcGFyYW1OZXdNb2R1bGVNYW5pZmVzdA0KDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJDb3B5aW5nIGFkZGl0aW9uYWwgbW9kdWxlIGZpbGVzIg0KQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGNsaWVudE1vZHVsZVxtb2R1bGVyb290LnBzbTEiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCQoJE1vZHVsZU5hbWUpLnBzbTEiDQpDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXExJQ0VOU0UiIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCINCiNlbmRyZWdpb24gQ3JlYXRlIENvcmUgTW9kdWxlIEZpbGVzDQoNCiNyZWdpb24gVHJhbnNmZXIgQWRkaXRpb25hbCBDb250ZW50DQppZiAoJEluY2x1ZGVBc3NlbWJseSkNCnsNCglDb3B5LUl0ZW0gLVBhdGggIiRwdWJsaXNoUm9vdFxiaW4iIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ1Jvb3QuRnVsbE5hbWUpXCIgLVJlY3Vyc2UNCn0NCmlmICgkSW5jbHVkZUZvcm1hdCAtb3IgJEluY2x1ZGVUeXBlKQ0Kew0KCUNvcHktSXRlbSAtUGF0aCAiJHB1Ymxpc2hSb290XHhtbCIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5nUm9vdC5GdWxsTmFtZSlcIiAtUmVjdXJzZQ0KfQ0KI2VuZHJlZ2lvbiBUcmFuc2ZlciBBZGRpdGlvbmFsIENvbnRlbnQNCg0KI3JlZ2lvbiBQdWJsaXNoDQppZiAoJExvY2FsUmVwbykNCnsNCgkjIERlcGVuZGVuY2llcyBtdXN0IGdvIGZpcnN0DQoJV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJDcmVhdGluZyBOdWdldCBQYWNrYWdlIGZvciBtb2R1bGU6IFBTRnJhbWV3b3JrIg0KCU5ldy1QU01ETW9kdWxlTnVnZXRQYWNrYWdlIC1Nb2R1bGVQYXRoIChHZXQtTW9kdWxlIC1OYW1lIFBTRnJhbWV3b3JrKS5Nb2R1bGVCYXNlIC1QYWNrYWdlUGF0aCAuIC1XYXJuaW5nQWN0aW9uIFNpbGVudGx5Q29udGludWUNCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIkNyZWF0aW5nIE51Z2V0IFBhY2thZ2UgZm9yIG1vZHVsZTogw75uYW1lw74iDQoJTmV3LVBTTURNb2R1bGVOdWdldFBhY2thZ2UgLU1vZHVsZVBhdGggJHdvcmtpbmdSb290LkZ1bGxOYW1lIC1QYWNrYWdlUGF0aCAuIC1FbmFibGVFeGNlcHRpb24NCn0NCmVsc2UNCnsNCgkjIFB1Ymxpc2ggdG8gR2FsbGVyeQ0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHVibGlzaGluZyB0aGUgw75uYW1lw74gbW9kdWxlIHRvICQoJFJlcG9zaXRvcnkpIg0KCVB1Ymxpc2gtTW9kdWxlIC1QYXRoICR3b3JraW5nUm9vdC5GdWxsTmFtZSAtTnVHZXRBcGlLZXkgJEFwaUtleSAtRm9yY2UgLVJlcG9zaXRvcnkgJFJlcG9zaXRvcnkNCn0NCiNlbmRyZWdpb24gUHVibGlzaAEJ7AAAAAntAAAABu4AAAAjdnN0cy1jcmVhdGVGdW5jdGlvbkNsaWVudE1vZHVsZS5wczEG7wAAAENTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGJ1aWxkXHZzdHMtY3JlYXRlRnVuY3Rpb25DbGllbnRNb2R1bGUucHMxCVsAAAAJ8QAAAAnyAAAAAboAAABwAAAABvMAAACbLA0KPCMNCgkuU1lOT1BTSVMNCgkJUGFja2FnZXMgYW4gQXp1cmUgRnVuY3Rpb25zIHByb2plY3QsIHJlYWR5IHRvIHJlbGVhc2UuDQoJDQoJLkRFU0NSSVBUSU9ODQoJCVBhY2thZ2VzIGFuIEF6dXJlIEZ1bmN0aW9ucyBwcm9qZWN0LCByZWFkeSB0byByZWxlYXNlLg0KCQlTaG91bGQgYmUgcGFydCBvZiB0aGUgcmVsZWFzZSBwaXBlbGluZSwgYWZ0ZXIgZW5zdXJpbmcgdmFsaWRhdGlvbi4NCg0KCQlMb29rIGludG8gdGhlICdBenVyZUZ1bmN0aW9uUmVzdCcgdGVtcGxhdGUgZm9yIGdlbmVyYXRpbmcgZnVuY3Rpb25zIGZvciB0aGUgbW9kdWxlIGlmIHlvdSBkby4NCgkNCgkuUEFSQU1FVEVSIFdvcmtpbmdEaXJlY3RvcnkNCgkJVGhlIHJvb3QgZm9sZGVyIHRvIHdvcmsgZnJvbS4NCgkNCgkuUEFSQU1FVEVSIFJlcG9zaXRvcnkNCgkJVGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkgdG8gdXNlIGZvciBnYXRoZXJpbmcgZGVwZW5kZW5jaWVzIGZyb20uDQojPg0KcGFyYW0gKA0KCSRXb3JraW5nRGlyZWN0b3J5ID0gIiQoJGVudjpTWVNURU1fREVGQVVMVFdPUktJTkdESVJFQ1RPUlkpXF/Dvm5hbWXDviIsDQoJDQoJJFJlcG9zaXRvcnkgPSAnUFNHYWxsZXJ5JywNCg0KCVtzd2l0Y2hdDQoJJEluY2x1ZGVBWg0KKQ0KDQokbW9kdWxlTmFtZSA9ICfDvm5hbWXDvicNCg0KIyBQcmVwYXJlIFBhdGhzDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJDcmVhdGluZyB3b3JraW5nIGZvbGRlcnMiDQokbW9kdWxlUm9vdCA9IEpvaW4tUGF0aCAtUGF0aCAkV29ya2luZ0RpcmVjdG9yeSAtQ2hpbGRQYXRoICdwdWJsaXNoJw0KJHdvcmtpbmdSb290ID0gTmV3LUl0ZW0gLVBhdGggJFdvcmtpbmdEaXJlY3RvcnkgLU5hbWUgJ3dvcmtpbmcnIC1JdGVtVHlwZSBEaXJlY3RvcnkNCiRtb2R1bGVzRm9sZGVyID0gTmV3LUl0ZW0gLVBhdGggJHdvcmtpbmdSb290LkZ1bGxOYW1lIC1OYW1lIE1vZHVsZXMgLUl0ZW1UeXBlIERpcmVjdG9yeQ0KDQojIEZpbGwgb3V0IHRoZSBtb2R1bGVzIGZvbGRlcg0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAiVHJhbnNmZXJpbmcgYnVpbHQgbW9kdWxlIGRhdGEgaW50byB3b3JraW5nIGRpcmVjdG9yeSINCkNvcHktSXRlbSAtUGF0aCAiJG1vZHVsZVJvb3RcJG1vZHVsZU5hbWUiIC1EZXN0aW5hdGlvbiAkbW9kdWxlc0ZvbGRlci5GdWxsTmFtZSAtUmVjdXJzZSAtRm9yY2UNCmZvcmVhY2ggKCRkZXBlbmRlbmN5IGluIChJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkbW9kdWxlUm9vdFwkbW9kdWxlTmFtZVwkbW9kdWxlTmFtZS5wc2QxIikuUmVxdWlyZWRNb2R1bGVzKQ0Kew0KCSRwYXJhbSA9IEB7DQoJCVJlcG9zaXRvcnkgPSAkUmVwb3NpdG9yeQ0KCQlOYW1lCSAgID0gJGRlcGVuZGVuY3kuTW9kdWxlTmFtZQ0KCQlQYXRoCSAgID0gJG1vZHVsZXNGb2xkZXIuRnVsbE5hbWUNCgl9DQoJaWYgKCRkZXBlbmRlbmN5IC1pcyBbc3RyaW5nXSkgeyAkcGFyYW1bJ05hbWUnXSA9ICRkZXBlbmRlbmN5IH0NCglpZiAoJGRlcGVuZGVuY3kuUmVxdWlyZWRWZXJzaW9uKQ0KCXsNCgkJJHBhcmFtWydSZXF1aXJlZFZlcnNpb24nXSA9ICRkZXBlbmRlbmN5LlJlcXVpcmVkVmVyc2lvbg0KCX0NCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJQcmVwYXJpbmcgRGVwZW5kZW5jeTogJCgkcGFyYW1bJ05hbWUnXSkiDQoJU2F2ZS1Nb2R1bGUgQHBhcmFtDQp9DQoNCiMgR2VuZXJhdGUgZnVuY3Rpb24gY29uZmlndXJhdGlvbg0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAtTWVzc2FnZSAnR2VuZXJhdGluZyBmdW5jdGlvbiBjb25maWd1cmF0aW9uJw0KJHJ1blRlbXBsYXRlID0gR2V0LUNvbnRlbnQgLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNccnVuLnBzMSIgLVJhdw0KZm9yZWFjaCAoJGZ1bmN0aW9uU291cmNlRmlsZSBpbiAoR2V0LUNoaWxkSXRlbSAtUGF0aCAiJCgkbW9kdWxlUm9vdClcJG1vZHVsZU5hbWVcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsdGVyICcqLnBzMScpKQ0Kew0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIiAgUHJvY2Vzc2luZyBmdW5jdGlvbjogJGZ1bmN0aW9uU291cmNlRmlsZSINCgkkY29uZGVuc2VkTmFtZSA9ICRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUgLXJlcGxhY2UgJy0nLCAnJw0KCSRmdW5jdGlvbkZvbGRlciA9IE5ldy1JdGVtIC1QYXRoICR3b3JraW5nUm9vdC5GdWxsTmFtZSAtTmFtZSAkY29uZGVuc2VkTmFtZSAtSXRlbVR5cGUgRGlyZWN0b3J5DQoJDQoJI3JlZ2lvbiBMb2FkIE92ZXJyaWRlcw0KCSRvdmVycmlkZSA9IEB7IH0NCglpZiAoVGVzdC1QYXRoIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5wc2QxIikNCgl7DQoJCSRvdmVycmlkZSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRmdW5jdGlvblNvdXJjZUZpbGUuQmFzZU5hbWUpLnBzZDEiDQoJfQ0KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5wc2QxIikNCgl7DQoJCSRvdmVycmlkZSA9IEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5wc2QxIg0KCX0NCgkjZW5kcmVnaW9uIExvYWQgT3ZlcnJpZGVzDQoJDQoJI3JlZ2lvbiBDcmVhdGUgRnVuY3Rpb24gQ29uZmlndXJhdGlvbg0KCSRyZXN0TWV0aG9kcyA9ICdnZXQnLCAncG9zdCcNCglpZiAoJG92ZXJyaWRlLlJlc3RNZXRob2RzKSB7ICRyZXN0TWV0aG9kcyA9ICRvdmVycmlkZS5SZXN0TWV0aG9kcyB9DQoJDQoJU2V0LUNvbnRlbnQgLVBhdGggIiQoJGZ1bmN0aW9uRm9sZGVyLkZ1bGxOYW1lKVxmdW5jdGlvbi5qc29uIiAtVmFsdWUgQCINCnsNCiAgICAiYmluZGluZ3MiOiBbDQogICAgICAgIHsNCiAgICAgICAgImF1dGhMZXZlbCI6ICJmdW5jdGlvbiIsDQogICAgICAgICJ0eXBlIjogImh0dHBUcmlnZ2VyIiwNCiAgICAgICAgImRpcmVjdGlvbiI6ICJpbiIsDQogICAgICAgICJuYW1lIjogIlJlcXVlc3QiLA0KICAgICAgICAibWV0aG9kcyI6IFsNCiAgICAgICAgICAgICIkKCRyZXN0TWV0aG9kcyAtam9pbiAiYCIsDQogICAgICAgICAgICBgIiIpIg0KICAgICAgICBdDQogICAgICAgIH0sDQogICAgICAgIHsNCiAgICAgICAgInR5cGUiOiAiaHR0cCIsDQogICAgICAgICJkaXJlY3Rpb24iOiAib3V0IiwNCiAgICAgICAgIm5hbWUiOiAiUmVzcG9uc2UiDQogICAgICAgIH0NCiAgICBdLA0KICAgICJkaXNhYmxlZCI6IGZhbHNlDQp9DQoiQA0KCSNlbmRyZWdpb24gQ3JlYXRlIEZ1bmN0aW9uIENvbmZpZ3VyYXRpb24NCgkNCgkjcmVnaW9uIE92ZXJyaWRlIEZ1bmN0aW9uIENvbmZpZ3VyYXRpb24NCglpZiAoVGVzdC1QYXRoIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGZ1bmN0aW9uT3ZlcnJpZGVcJCgkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lKS5qc29uIikNCgl7DQoJCUNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGZ1bmN0aW9uU291cmNlRmlsZS5CYXNlTmFtZSkuanNvbiIgLURlc3RpbmF0aW9uICIkKCRmdW5jdGlvbkZvbGRlci5GdWxsTmFtZSlcZnVuY3Rpb24uanNvbiIgLUZvcmNlDQoJfQ0KCWlmIChUZXN0LVBhdGggLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcZnVuY3Rpb25PdmVycmlkZVwkKCRjb25kZW5zZWROYW1lKS5qc29uIikNCgl7DQoJCUNvcHktSXRlbSAtUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcYXpGdW5jdGlvblJlc291cmNlc1xmdW5jdGlvbk92ZXJyaWRlXCQoJGNvbmRlbnNlZE5hbWUpLmpzb24iIC1EZXN0aW5hdGlvbiAiJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXGZ1bmN0aW9uLmpzb24iIC1Gb3JjZQ0KCX0NCgkjZW5kcmVnaW9uIE92ZXJyaWRlIEZ1bmN0aW9uIENvbmZpZ3VyYXRpb24NCgkNCgkjIEdlbmVyYXRlIHRoZSBydW4ucHMxIGZpbGUNCgkkcnVuVGV4dCA9ICRydW5UZW1wbGF0ZSAtcmVwbGFjZSAnJWZ1bmN0aW9ubmFtZSUnLCAkZnVuY3Rpb25Tb3VyY2VGaWxlLkJhc2VOYW1lDQoJJHJ1blRleHQgfCBTZXQtQ29udGVudCAtUGF0aCAiJCgkZnVuY3Rpb25Gb2xkZXIuRnVsbE5hbWUpXHJ1bi5wczEiIC1FbmNvZGluZyBVVEY4DQp9DQoNCiMgVHJhbnNmZXIgY29tbW9uIGZpbGVzDQpXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0IC1NZXNzYWdlICJUcmFuc2ZlcmluZyBjb3JlIGZ1bmN0aW9uIGRhdGEiDQppZiAoJEluY2x1ZGVBWikNCnsNCglDb3B5LUl0ZW0gLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNcaG9zdC1hei5qc29uIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdyb290LkZ1bGxOYW1lKVxob3N0Lmpzb24iDQoJQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXHJlcXVpcmVtZW50cy5wc2QxIiAtRGVzdGluYXRpb24gIiQoJHdvcmtpbmdyb290LkZ1bGxOYW1lKVwiDQp9DQplbHNlDQp7DQoJQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGhvc3QuanNvbiIgLURlc3RpbmF0aW9uICIkKCR3b3JraW5ncm9vdC5GdWxsTmFtZSlcIg0KfQ0KQ29weS1JdGVtIC1QYXRoICIkKCRXb3JraW5nRGlyZWN0b3J5KVxhekZ1bmN0aW9uUmVzb3VyY2VzXGxvY2FsLnNldHRpbmdzLmpzb24iIC1EZXN0aW5hdGlvbiAiJCgkd29ya2luZ3Jvb3QuRnVsbE5hbWUpXCINCg0KIyBCdWlsZCB0aGUgcHJvZmlsZSBmaWxlDQokdGV4dCA9IEAoKQ0KJHRleHQgKz0gR2V0LUNvbnRlbnQgLVBhdGggIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNccHJvZmlsZS5wczEiIC1SYXcNCmZvcmVhY2ggKCRmdW5jdGlvbkZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiQoJFdvcmtpbmdEaXJlY3RvcnkpXGF6RnVuY3Rpb25SZXNvdXJjZXNccHJvZmlsZUZ1bmN0aW9ucyIgLVJlY3Vyc2UpKQ0Kew0KCSR0ZXh0ICs9IEdldC1Db250ZW50IC1QYXRoICRmdW5jdGlvbkZpbGUuRnVsbE5hbWUgLVJhdw0KfQ0KJHRleHQgLWpvaW4gImBuYG4iIHwgU2V0LUNvbnRlbnQgIiQoJHdvcmtpbmdyb290LkZ1bGxOYW1lKVxwcm9maWxlLnBzMSINCg0KIyBaaXAgSXQNCldyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEhvc3QgLU1lc3NhZ2UgIkNyZWF0aW5nIGZ1bmN0aW9uIGFyY2hpdmUgaW4gJyQoJFdvcmtpbmdEaXJlY3RvcnkpXCRtb2R1bGVOYW1lLnppcCciDQpDb21wcmVzcy1BcmNoaXZlIC1QYXRoICIkKCR3b3JraW5ncm9vdC5GdWxsTmFtZSlcKiIgLURlc3RpbmF0aW9uUGF0aCAiJCgkV29ya2luZ0RpcmVjdG9yeSlcJG1vZHVsZU5hbWUuemlwIiAtRm9yY2UBCfQAAAAJ9QAAAAb2AAAAGHZzdHMtcGFja2FnZUZ1bmN0aW9uLnBzMQb3AAAAOFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cYnVpbGRcdnN0cy1wYWNrYWdlRnVuY3Rpb24ucHMxCVsAAAAJ+QAAAAn6AAAAAbsAAABwAAAABvsAAACmBnBhcmFtICgNCiAgICBbc3RyaW5nXQ0KICAgICRSZXBvc2l0b3J5ID0gJ1BTR2FsbGVyeScNCikNCg0KJG1vZHVsZXMgPSBAKCJQZXN0ZXIiLCAiUFNGcmFtZXdvcmsiLCAiUFNNb2R1bGVEZXZlbG9wbWVudCIsICJQU1NjcmlwdEFuYWx5emVyIikNCg0KIyBBdXRvbWF0aWNhbGx5IGFkZCBtaXNzaW5nIGRlcGVuZGVuY2llcw0KJGRhdGEgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlIC1QYXRoICIkUFNTY3JpcHRSb290XC4uXMO+bmFtZcO+XMO+bmFtZcO+LnBzZDEiDQpmb3JlYWNoICgkZGVwZW5kZW5jeSBpbiAkZGF0YS5SZXF1aXJlZE1vZHVsZXMpIHsNCiAgICBpZiAoJGRlcGVuZGVuY3kgLWlzIFtzdHJpbmddKSB7DQogICAgICAgIGlmICgkbW9kdWxlcyAtY29udGFpbnMgJGRlcGVuZGVuY3kpIHsgY29udGludWUgfQ0KICAgICAgICAkbW9kdWxlcyArPSAkZGVwZW5kZW5jeQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgaWYgKCRtb2R1bGVzIC1jb250YWlucyAkZGVwZW5kZW5jeS5Nb2R1bGVOYW1lKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgJG1vZHVsZXMgKz0gJGRlcGVuZGVuY3kuTW9kdWxlTmFtZQ0KICAgIH0NCn0NCg0KZm9yZWFjaCAoJG1vZHVsZSBpbiAkbW9kdWxlcykgew0KICAgIFdyaXRlLUhvc3QgIkluc3RhbGxpbmcgJG1vZHVsZSIgLUZvcmVncm91bmRDb2xvciBDeWFuDQogICAgSW5zdGFsbC1Nb2R1bGUgJG1vZHVsZSAtRm9yY2UgLVNraXBQdWJsaXNoZXJDaGVjayAtUmVwb3NpdG9yeSAkUmVwb3NpdG9yeQ0KICAgIEltcG9ydC1Nb2R1bGUgJG1vZHVsZSAtRm9yY2UgLVBhc3NUaHJ1DQp9AQn8AAAACf0AAAAG/gAAABZ2c3RzLXByZXJlcXVpc2l0ZXMucHMxBv8AAAA2U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxidWlsZFx2c3RzLXByZXJlcXVpc2l0ZXMucHMxCVsAAAAJAQEAAAkCAQAAAbwAAABwAAAABgMBAADKAiMgR3VpZGUgZm9yIGF2YWlsYWJsZSB2YXJpYWJsZXMgYW5kIHdvcmtpbmcgd2l0aCBzZWNyZXRzOg0KIyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy92c3RzL2J1aWxkLXJlbGVhc2UvY29uY2VwdHMvZGVmaW5pdGlvbnMvYnVpbGQvdmFyaWFibGVzP3RhYnM9cG93ZXJzaGVsbA0KDQojIE5lZWRzIHRvIGVuc3VyZSB0aGluZ3MgYXJlIERvbmUgUmlnaHQgYW5kIG9ubHkgbGVnYWwgY29tbWl0cyB0byBtYXN0ZXIgZ2V0IGJ1aWx0DQoNCiMgUnVuIGludGVybmFsIHBlc3RlciB0ZXN0cw0KJiAiJFBTU2NyaXB0Um9vdFwuLlzDvm5hbWXDvlx0ZXN0c1xwZXN0ZXIucHMxIgEJBAEAAAkFAQAABgYBAAARdnN0cy12YWxpZGF0ZS5wczEGBwEAADFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGJ1aWxkXHZzdHMtdmFsaWRhdGUucHMxCVsAAAAJCQEAAAkKAQAAAb0AAAA+AAAACQsBAAAGDAEAAANiaW4GDQEAADdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cYmluCVsAAAAJDwEAAAkQAQAAAb4AAAA+AAAACREBAAAGEgEAAAVlbi11cwYTAQAAOVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxlbi11cwlbAAAACRUBAAAJFgEAAAG/AAAAPgAAAAkXAQAABhgBAAAJZnVuY3Rpb25zBhkBAAA9U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGZ1bmN0aW9ucwlbAAAACRsBAAAJHAEAAAHAAAAAPgAAAAkdAQAABh4BAAAIaW50ZXJuYWwGHwEAADxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWwJWwAAAAkhAQAACSIBAAABwQAAAD4AAAAJIwEAAAYkAQAAI1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uBiUBAABXU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uCVsAAAAJJwEAAAkoAQAAAcIAAAA+AAAACSkBAAAGKgEAAAV0ZXN0cwYrAQAAOVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0cwlbAAAACS0BAAAJLgEAAAHDAAAAPgAAAAkvAQAABjABAAADeG1sBjEBAAA3U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHhtbAlbAAAACTMBAAAJNAEAAAHEAAAAcAAAAAY1AQAAbiMgQ2hhbmdlbG9nDQojIyAxLjAuMCAow74hZHluYW1pY3NjcmlwdF84NDQxMTIhw74pDQogLSBOZXc6IFNvbWUgU3R1ZmYNCiAtIFVwZDogTW9hciBTdHVmZg0KIC0gRml4OiBNdWNoIFN0dWZmAQk2AQAACTcBAAAGOAEAAAxjaGFuZ2Vsb2cubWQGOQEAAEBTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cY2hhbmdlbG9nLm1kCVsAAAAJOwEAAAk8AQAAAcUAAABwAAAABj0BAACOCCMgUFNGTW9kdWxlIGd1aWRhbmNlDQoNClRoaXMgaXMgYSBmaW5pc2hlZCBtb2R1bGUgbGF5b3V0IG9wdGltaXplZCBmb3IgaW1wbGVtZW50aW5nIHRoZSBQU0ZyYW1ld29yay4NCg0KSWYgeW91IGRvbid0IGNhcmUgdG8gZGVhbCB3aXRoIHRoZSBkZXRhaWxzLCB0aGlzIGlzIHdoYXQgeW91IG5lZWQgdG8gZG8gdG8gZ2V0IHN0YXJ0ZWQgc2VlaW5nIHJlc3VsdHM6DQoNCiAtIEFkZCB0aGUgZnVuY3Rpb25zIHlvdSB3YW50IHRvIHB1Ymxpc2ggdG8gYC9mdW5jdGlvbnMvYA0KIC0gVXBkYXRlIHRoZSBgRnVuY3Rpb25zVG9FeHBvcnRgIG5vZGUgaW4gdGhlIG1vZHVsZSBtYW5pZmVzdCAow75uYW1lw74ucHNkMSkuIEFsbCBmdW5jdGlvbnMgeW91IHdhbnQgdG8gcHVibGlzaCBzaG91bGQgYmUgaW4gYSBsaXN0Lg0KIC0gQWRkIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgdGhlIHVzZXIgc2hvdWxkIG5vdCBzZWUgdG8gYC9pbnRlcm5hbC9mdW5jdGlvbnMvYA0KIA0KICMjIFBhdGggV2FybmluZw0KIA0KID4gSWYgeW91IHdhbnQgeW91ciBtb2R1bGUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIExpbnV4IGFuZCBNYWNPUywga2VlcCBpbiBtaW5kIHRoYXQgdGhvc2UgT1MgYXJlIGNhc2Ugc2Vuc2l0aXZlIGZvciBwYXRocyBhbmQgZmlsZXMuDQogDQogYEltcG9ydC1Nb2R1bGVGaWxlYCBpcyBwcmVjb25maWd1cmVkIHRvIHJlc29sdmUgdGhlIHBhdGggb2YgdGhlIGZpbGVzIHNwZWNpZmllZCwgc28gaXQgd2lsbCByZWxpYWJseSBjb252ZXJ0IHdlaXJkIHBhdGggbm90YXRpb25zIHRoZSBzeXN0ZW0gY2FuJ3QgaGFuZGxlLg0KIENvbnRlbnQgaW1wb3J0ZWQgdGhyb3VnaCB0aGF0IGNvbW1hbmQgdGh1cyBuZWVkIG5vdCBtaW5kIHRoZSBwYXRoIHNlcGFyYXRvci4NCiBJZiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgeW91ciBjb2RlIHRvbyB3aWxsIHN1cnZpdmUgT1Mtc3BlY2lmaWMgcGF0aCBub3RhdGlvbnMsIGdldCB1c2VkIHRvIHVzaW5nIGBSZXNvbHZlLXBhdGhgIG9yIHRoZSBtb3JlIHBvd2VyZnVsIGBSZXNvbHZlLVBTRlBhdGhgLgEJPgEAAAk/AQAABkABAAAJcmVhZG1lLm1kBkEBAAA9U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHJlYWRtZS5tZAlbAAAACUMBAAAJRAEAAAHGAAAAcAAAAAZFAQAAzhNAew0KCSMgU2NyaXB0IG1vZHVsZSBvciBiaW5hcnkgbW9kdWxlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFuaWZlc3QNCglSb290TW9kdWxlICAgICAgICA9ICfDvm5hbWXDvi5wc20xJw0KDQoJIyBWZXJzaW9uIG51bWJlciBvZiB0aGlzIG1vZHVsZS4NCglNb2R1bGVWZXJzaW9uICAgICA9ICcxLjAuMCcNCg0KCSMgSUQgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIG1vZHVsZQ0KCUdVSUQgICAgICAgICAgICAgID0gJ8O+IWd1aWRSb290TW9kdWxlIcO+Jw0KDQoJIyBBdXRob3Igb2YgdGhpcyBtb2R1bGUNCglBdXRob3IgICAgICAgICAgICA9ICfDvmF1dGhvcsO+Jw0KDQoJIyBDb21wYW55IG9yIHZlbmRvciBvZiB0aGlzIG1vZHVsZQ0KCUNvbXBhbnlOYW1lICAgICAgID0gJ8O+Y29tcGFuecO+Jw0KDQoJIyBDb3B5cmlnaHQgc3RhdGVtZW50IGZvciB0aGlzIG1vZHVsZQ0KCUNvcHlyaWdodCAgICAgICAgID0gJ0NvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+Jw0KDQoJIyBEZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGlzIG1vZHVsZQ0KCURlc2NyaXB0aW9uICAgICAgID0gJ8O+ZGVzY3JpcHRpb27DvicNCg0KCSMgTWluaW11bSB2ZXJzaW9uIG9mIHRoZSBXaW5kb3dzIFBvd2VyU2hlbGwgZW5naW5lIHJlcXVpcmVkIGJ5IHRoaXMgbW9kdWxlDQoJUG93ZXJTaGVsbFZlcnNpb24gPSAnNS4wJw0KDQoJIyBNb2R1bGVzIHRoYXQgbXVzdCBiZSBpbXBvcnRlZCBpbnRvIHRoZSBnbG9iYWwgZW52aXJvbm1lbnQgcHJpb3IgdG8gaW1wb3J0aW5nDQoJIyB0aGlzIG1vZHVsZQ0KCVJlcXVpcmVkTW9kdWxlcyAgID0gQCgNCgkJQHsgTW9kdWxlTmFtZSA9ICdQU0ZyYW1ld29yayc7IE1vZHVsZVZlcnNpb24gPSAnw74hcHNmcmFtZXdvcmshw74nIH0NCgkJQHsgTW9kdWxlTmFtZSA9ICdNaWNyb3NvZnQuUG93ZXJzaGVsbC5TZWNyZXRNYW5hZ2VtZW50JzsgTW9kdWxlVmVyc2lvbiA9ICfDviFzZWNyZXRNYW5hZ2VtZW50VmVyc2lvbiHDvicgfSwNCgkpDQoNCgkjIEFzc2VtYmxpZXMgdGhhdCBtdXN0IGJlIGxvYWRlZCBwcmlvciB0byBpbXBvcnRpbmcgdGhpcyBtb2R1bGUNCgkjIFJlcXVpcmVkQXNzZW1ibGllcyA9IEAoJ2JpblzDvm5hbWXDvi5kbGwnKQ0KDQoJIyBUeXBlIGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUNCgkjIFR5cGVzVG9Qcm9jZXNzID0gQCgneG1sXMO+bmFtZcO+LlR5cGVzLnBzMXhtbCcpDQoNCgkjIEZvcm1hdCBmaWxlcyAoLnBzMXhtbCkgdG8gYmUgbG9hZGVkIHdoZW4gaW1wb3J0aW5nIHRoaXMgbW9kdWxlDQoJIyBGb3JtYXRzVG9Qcm9jZXNzID0gQCgneG1sXMO+bmFtZcO+LkZvcm1hdC5wczF4bWwnKQ0KDQoJIyBGdW5jdGlvbnMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglGdW5jdGlvbnNUb0V4cG9ydCA9ICcnDQoNCgkjIENtZGxldHMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglDbWRsZXRzVG9FeHBvcnQgICA9ICcnDQoNCgkjIFZhcmlhYmxlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCVZhcmlhYmxlc1RvRXhwb3J0ID0gJycNCg0KCSMgQWxpYXNlcyB0byBleHBvcnQgZnJvbSB0aGlzIG1vZHVsZQ0KCUFsaWFzZXNUb0V4cG9ydCAgID0gJycNCg0KCSMgTGlzdCBvZiBhbGwgbW9kdWxlcyBwYWNrYWdlZCB3aXRoIHRoaXMgbW9kdWxlDQoJTW9kdWxlTGlzdCAgICAgICAgPSBAKCkNCg0KCSMgTGlzdCBvZiBhbGwgZmlsZXMgcGFja2FnZWQgd2l0aCB0aGlzIG1vZHVsZQ0KCUZpbGVMaXN0ICAgICAgICAgID0gQCgpDQoNCgkjIFByaXZhdGUgZGF0YSB0byBwYXNzIHRvIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGluIE1vZHVsZVRvUHJvY2Vzcy4gVGhpcyBtYXkgYWxzbyBjb250YWluIGEgUFNEYXRhIGhhc2h0YWJsZSB3aXRoIGFkZGl0aW9uYWwgbW9kdWxlIG1ldGFkYXRhIHVzZWQgYnkgUG93ZXJTaGVsbC4NCglQcml2YXRlRGF0YSAgICAgICA9IEB7DQoNCgkJI1N1cHBvcnQgZm9yIFBvd2VyU2hlbGxHZXQgZ2FsbGVyaWVzLg0KCQlQU0RhdGEgPSBAew0KDQoJCQkjIFRhZ3MgYXBwbGllZCB0byB0aGlzIG1vZHVsZS4gVGhlc2UgaGVscCB3aXRoIG1vZHVsZSBkaXNjb3ZlcnkgaW4gb25saW5lIGdhbGxlcmllcy4NCgkJCSMgVGFncyA9IEAoKQ0KDQoJCQkjIEEgVVJMIHRvIHRoZSBsaWNlbnNlIGZvciB0aGlzIG1vZHVsZS4NCgkJCSMgTGljZW5zZVVyaSA9ICcnDQoNCgkJCSMgQSBVUkwgdG8gdGhlIG1haW4gd2Vic2l0ZSBmb3IgdGhpcyBwcm9qZWN0Lg0KCQkJIyBQcm9qZWN0VXJpID0gJycNCg0KCQkJIyBBIFVSTCB0byBhbiBpY29uIHJlcHJlc2VudGluZyB0aGlzIG1vZHVsZS4NCgkJCSMgSWNvblVyaSA9ICcnDQoNCgkJCSMgUmVsZWFzZU5vdGVzIG9mIHRoaXMgbW9kdWxlDQoJCQkjIFJlbGVhc2VOb3RlcyA9ICcnDQoNCgkJfSAjIEVuZCBvZiBQU0RhdGEgaGFzaHRhYmxlDQoNCgl9ICMgRW5kIG9mIFByaXZhdGVEYXRhIGhhc2h0YWJsZQ0KfQEJRgEAAAlHAQAABkgBAAAeU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5wc2QxBkkBAABSU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMQlbAAAACUsBAAAJTAEAAAHHAAAAcAAAAAZNAQAA+Rokc2NyaXB0Ok1vZHVsZVJvb3QgPSAkUFNTY3JpcHRSb290DQokc2NyaXB0Ok1vZHVsZVZlcnNpb24gPSAoSW1wb3J0LVBvd2VyU2hlbGxEYXRhRmlsZSAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXMO+bmFtZcO+LnBzZDEiKS5Nb2R1bGVWZXJzaW9uDQoNCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBkb3Rzb3VyY2luZyB3YXMgZW5mb3JjZWQNCiRzY3JpcHQ6ZG9Eb3RTb3VyY2UgPSBHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lIMO+bmFtZcO+LkltcG9ydC5Eb0RvdFNvdXJjZSAtRmFsbGJhY2sgJGZhbHNlDQppZiAoJMO+bmFtZcO+X2RvdHNvdXJjZW1vZHVsZSkgeyAkc2NyaXB0OmRvRG90U291cmNlID0gJHRydWUgfQ0KDQo8Iw0KTm90ZSBvbiBSZXNvbHZlLVBhdGg6DQpBbGwgcGF0aHMgYXJlIHNlbnQgdGhyb3VnaCBSZXNvbHZlLVBhdGgvUmVzb2x2ZS1QU0ZQYXRoIGluIG9yZGVyIHRvIGNvbnZlcnQgdGhlbSB0byB0aGUgY29ycmVjdCBwYXRoIHNlcGFyYXRvci4NClRoaXMgYWxsb3dzIGlnbm9yaW5nIHBhdGggc2VwYXJhdG9ycyB0aHJvdWdob3V0IHRoZSBpbXBvcnQgc2VxdWVuY2UsIHdoaWNoIGNvdWxkIG90aGVyd2lzZSBjYXVzZSB0cm91YmxlIGRlcGVuZGluZyBvbiBPUy4NClJlc29sdmUtUGF0aCBjYW4gb25seSBiZSB1c2VkIGZvciBwYXRocyB0aGF0IGFscmVhZHkgZXhpc3QsIFJlc29sdmUtUFNGUGF0aCBjYW4gYWNjZXB0IHRoYXQgdGhlIGxhc3QgbGVhZiBteSBub3QgZXhpc3QuDQpUaGlzIGlzIGltcG9ydGFudCB3aGVuIHRlc3RpbmcgZm9yIHBhdGhzLg0KIz4NCg0KIyBEZXRlY3Qgd2hldGhlciBhdCBzb21lIGxldmVsIGxvYWRpbmcgaW5kaXZpZHVhbCBtb2R1bGUgZmlsZXMsIHJhdGhlciB0aGFuIHRoZSBjb21waWxlZCBtb2R1bGUgd2FzIGVuZm9yY2VkDQokaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuSW5kaXZpZHVhbEZpbGVzIC1GYWxsYmFjayAkZmFsc2UNCmlmICgkw75uYW1lw75faW1wb3J0SW5kaXZpZHVhbEZpbGVzKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQppZiAoVGVzdC1QYXRoIChSZXNvbHZlLVBTRlBhdGggLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVwuLlwuZ2l0IiAtU2luZ2xlSXRlbSAtTmV3Q2hpbGQpKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQppZiAoIjx3YXMgbm90IGNvbXBpbGVkPiIgLWVxICc8d2FzIG5vdCBjb21waWxlZD4nKSB7ICRpbXBvcnRJbmRpdmlkdWFsRmlsZXMgPSAkdHJ1ZSB9DQoNCmZ1bmN0aW9uIEltcG9ydC1Nb2R1bGVGaWxlDQp7DQoJPCMNCgkJLlNZTk9QU0lTDQoJCQlMb2FkcyBmaWxlcyBpbnRvIHRoZSBtb2R1bGUgb24gbW9kdWxlIGltcG9ydC4NCg0KCQkuREVTQ1JJUFRJT04NCgkJCVRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbi4NCgkJCUl0IHNob3VsZCBhbHdheXMgYmUgZG90c291cmNlZCBpdHNlbGYsIGluIG9yZGVyIHRvIHByb3BlciBmdW5jdGlvbi4NCg0KCQkJVGhpcyBwcm92aWRlcyBhIGNlbnRyYWwgbG9jYXRpb24gdG8gcmVhY3QgdG8gZmlsZXMgYmVpbmcgaW1wb3J0ZWQsIGlmIGxhdGVyIGRlc2lyZWQNCg0KCQkuUEFSQU1FVEVSIFBhdGgNCgkJCVRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGxvYWQNCg0KCQkuRVhBTVBMRQ0KCQkJUFMgQzpcPiAuIEltcG9ydC1Nb2R1bGVGaWxlIC1GaWxlICRmdW5jdGlvbi5GdWxsTmFtZQ0KDQoJCQlJbXBvcnRzIHRoZSBmaWxlIHN0b3JlZCBpbiAkZnVuY3Rpb24gYWNjb3JkaW5nIHRvIGltcG9ydCBwb2xpY3kNCgkjPg0KCVtDbWRsZXRCaW5kaW5nKCldDQoJUGFyYW0gKA0KCQlbc3RyaW5nXQ0KCQkkUGF0aA0KCSkNCg0KCSRyZXNvbHZlZFBhdGggPSAkRXhlY3V0aW9uQ29udGV4dC5TZXNzaW9uU3RhdGUuUGF0aC5HZXRSZXNvbHZlZFBTUGF0aEZyb21QU1BhdGgoJFBhdGgpLlByb3ZpZGVyUGF0aA0KCWlmICgkZG9Eb3RTb3VyY2UpIHsgLiAkcmVzb2x2ZWRQYXRoIH0NCgllbHNlIHsgJEV4ZWN1dGlvbkNvbnRleHQuSW52b2tlQ29tbWFuZC5JbnZva2VTY3JpcHQoJGZhbHNlLCAoW3NjcmlwdGJsb2NrXTo6Q3JlYXRlKFtpby5maWxlXTo6UmVhZEFsbFRleHQoJHJlc29sdmVkUGF0aCkpKSwgJG51bGwsICRudWxsKSB9DQp9DQoNCiNyZWdpb24gTG9hZCBpbmRpdmlkdWFsIGZpbGVzDQppZiAoJGltcG9ydEluZGl2aWR1YWxGaWxlcykNCnsNCgkjIEV4ZWN1dGUgUHJlaW1wb3J0IGFjdGlvbnMNCglmb3JlYWNoICgkcGF0aCBpbiAoJiAiJE1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xwcmVpbXBvcnQucHMxIikpIHsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkcGF0aA0KCX0NCg0KCSMgSW1wb3J0IGFsbCBpbnRlcm5hbCBmdW5jdGlvbnMNCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKQ0KCXsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUNCgl9DQoNCgkjIEltcG9ydCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zIHdoaWNoIGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUgRXh0ZW5zaW9uIGFuZCB0aGUgTWFpbi1Nb2R1bGUNCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbCIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKSB7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lDQoJfQ0KDQoJIyBJbXBvcnQgYWxsIHB1YmxpYyBmdW5jdGlvbnMNCglmb3JlYWNoICgkZnVuY3Rpb24gaW4gKEdldC1DaGlsZEl0ZW0gIiRNb2R1bGVSb290XGZ1bmN0aW9ucyIgLUZpbHRlciAiKi5wczEiIC1SZWN1cnNlIC1FcnJvckFjdGlvbiBJZ25vcmUpKQ0KCXsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkZnVuY3Rpb24uRnVsbE5hbWUNCgl9DQoNCgkjIEV4ZWN1dGUgUG9zdGltcG9ydCBhY3Rpb25zDQoJZm9yZWFjaCAoJHBhdGggaW4gKCYgIiRNb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNccG9zdGltcG9ydC5wczEiKSkgew0KCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRwYXRoDQoJfQ0KDQoJIyBFbmQgaXQgaGVyZSwgZG8gbm90IGxvYWQgY29tcGlsZWQgY29kZSBiZWxvdw0KCXJldHVybg0KfQ0KI2Vu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AAamAQAADmd1aWRSb290TW9kdWxlBqcBAAAEeWVhcgaoAQAAC3BzZnJhbWV3b3JrBqkBAAAXc2VjcmV0TWFuYWdlbWVudFZlcnNpb24RdgEAAAQAAAAGqgEAAARuYW1lDQMReAEAAAQAAAAGqwEAAARuYW1lDQMRegEAAAQAAAAGrAEAAARuYW1lDQMBfAEAAHAAAAAGrQEAAPoDb246DQogIHdvcmtmbG93X2Rpc3BhdGNoOg0KICAjIHB1c2g6DQogICMgICBicmFuY2hlczoNCiAgIyAgICAgLSBtYXN0ZXINCg0Kam9iczoNCiAgYnVpbGQ6DQoNCiAgICBydW5zLW9uOiB3aW5kb3dzLTIwMTkNCg0KICAgIHN0ZXBzOg0KICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2MQ0KICAgIC0gbmFtZTogSW5zdGFsbCBQcmVyZXF1aXNpdGVzDQogICAgICBydW46IC5cYnVpbGRcdnN0cy1wcmVyZXF1aXNpdGVzLnBzMQ0KICAgICAgc2hlbGw6IHBvd2Vyc2hlbGwNCiAgICAtIG5hbWU6IFZhbGlkYXRlDQogICAgICBydW46IC5cYnVpbGRcdnN0cy12YWxpZGF0ZS5wczENCiAgICAgIHNoZWxsOiBwb3dlcnNoZWxsDQogICAgLSBuYW1lOiBCdWlsZA0KICAgICAgcnVuOiAuXGJ1aWxkXHZzdHMtYnVpbGQucHMxIC1BcGlLZXkgJGVudjpBUElLRVkNCiAgICAgIHNoZWxsOiBwb3dlcnNoZWxsDQogICAgICBlbnY6DQogICAgICAgIEFQSUtFWTogJHt7IHNlY3JldHMuQXBpS2V5IH19DQoBCa4BAAAJrwEAAAawAQAACWJ1aWxkLnltbAaxAQAANVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cLmdpdGh1Ylx3b3JrZmxvd3NcYnVpbGQueW1sCVsAAAAJswEAAAm0AQAAAX0BAABwAAAABrUBAADPAiMgb246IFtwdWxsX3JlcXVlc3RdDQpvbjoNCiAgd29ya2Zsb3dfZGlzcGF0Y2g6DQoNCmpvYnM6DQogIHZhbGlkYXRlOg0KDQogICAgcnVucy1vbjogd2luZG93cy0yMDE5DQoNCiAgICBzdGVwczoNCiAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjENCiAgICAtIG5hbWU6IEluc3RhbGwgUHJlcmVxdWlzaXRlcw0KICAgICAgcnVuOiAuXGJ1aWxkXHZzdHMtcHJlcmVxdWlzaXRlcy5wczENCiAgICAgIHNoZWxsOiBwb3dlcnNoZWxsDQogICAgLSBuYW1lOiBWYWxpZGF0ZQ0KICAgICAgcnVuOiAuXGJ1aWxkXHZzdHMtdmFsaWRhdGUucHMxDQogICAgICBzaGVsbDogcG93ZXJzaGVsbA0KAQm2AQAACbcBAAAGuAEAAAx2YWxpZGF0ZS55bWwGuQEAADhTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XC5naXRodWJcd29ya2Zsb3dzXHZhbGlkYXRlLnltbAlbAAAACbsBAAAJvAEAAAGDAQAAcAAAAAa9AQAA7gIjIGJpbiBmb2xkZXINCg0KVGhlIGJpbiBmb2xkZXIgZXhpc3RzIHRvIHN0b3JlIGJpbmFyeSBkYXRhLiBBbmQgc2NyaXB0cyByZWxhdGVkIHRvIHRoZSB0eXBlIHN5c3RlbS4NCg0KVGhpcyBtYXkgaW5jbHVkZSB5b3VyIG93biBDIy1iYXNlZCBsaWJyYXJ5LCB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMgeW91IHdhbnQgdG8gaW5jbHVkZSAod2F0Y2ggdGhlIGxpY2Vuc2UhKSwgb3IgYSBzY3JpcHQgZGVjbGFyaW5nIHR5cGUgYWNjZWxlcmF0b3JzIChlZmZlY3RpdmVseSBhbGlhc2VzIGZvciAuTkVUIHR5cGVzKQ0KDQpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBUeXBlIEFjY2VsZXJhdG9ycywgc2VlIHRoZSBoZWxwIG9uIFNldC1QU0ZUeXBlQWxpYXMBCb4BAAAJvwEAAAbAAQAACXJlYWRtZS5tZAbBAQAAQVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxiaW5ccmVhZG1lLm1kCVsAAAAJwwEAAAnEAQAAAYQBAABwAAAABsUBAAClAVRPUElDDQoJYWJvdXRfw75uYW1lw74NCgkNClNIT1JUIERFU0NSSVBUSU9ODQoJRXhwbGFpbnMgaG93IHRvIHVzZSB0aGUgw75uYW1lw74gcG93ZXJzaGVsbCBtb2R1bGUNCgkNCkxPTkcgREVTQ1JJUFRJT04NCgk8SW5zZXJ0IENvbnRlbnQgaGVyZT4NCg0KS0VZV09SRFMNCgnDvm5hbWXDvgEJxgEAAAnHAQAABsgBAAAXYWJvdXRfw75uYW1lw74uaGVscC50eHQGyQEAAFFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cZW4tdXNcYWJvdXRfw75uYW1lw74uaGVscC50eHQJWwAAAAnLAQAACcwBAAABhQEAAHAAAAAGzQEAAJ0BIyBUaGlzIGlzIHdoZXJlIHRoZSBzdHJpbmdzIGdvLCB0aGF0IGFyZSB3cml0dGVuIGJ5DQojIFdyaXRlLVBTRk1lc3NhZ2UsIFN0b3AtUFNGRnVuY3Rpb24gb3IgdGhlIFBTRnJhbWV3b3JrIHZhbGlkYXRpb24gc2NyaXB0YmxvY2tzDQpAew0KCSdrZXknID0gJ1ZhbHVlJw0KfQEJzgEAAAnPAQAABtABAAAMc3RyaW5ncy5wc2QxBtEBAABGU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGVuLXVzXHN0cmluZ3MucHNkMQlbAAAACdMBAAAJ1AEAAAGGAQAAcAAAAAbVAQAA0gEjIEZ1bmN0aW9ucw0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGZ1bmN0aW9ucyBnby4NCg0KRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4NCg0KVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCdYBAAAJ1wEAAAbYAQAACXJlYWRtZS5tZAbZAQAAR1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxmdW5jdGlvbnNccmVhZG1lLm1kCVsAAAAJ2wEAAAncAQAAAYcBAABwAAAABt0BAADxDmZ1bmN0aW9uIFJlZ2lzdGVyLcO+ZnVuY3Rpb25QcmVmaXjDvlNlY3VyZVZhdWx0IHsNCiAgICA8Iw0KICAgIC5TWU5PUFNJUw0KICAgIFJlZ2lzdGVycyBhIG5ldyBTZWNyZXR2YXVsdCBvZiB0eXBlIMO+bmFtZcO+Lg0KDQogICAgLkRFU0NSSVBUSU9ODQogICAgUmVnaXN0ZXJzIGEgbmV3IFNlY3JldHZhdWx0IG9mIHR5cGUgw75uYW1lw74uDQoNCiAgICAjVE9ETyBBZGQgcGFyYW1ldGVyIGRlc2NyaXB0aW9uDQoNCiAgICAuTk9URVMNCiAgICBHZW5lcmFsIG5vdGVzDQogICAgIz4NCiAgICBbQ21kbGV0QmluZGluZyhTdXBwb3J0c1Nob3VsZFByb2Nlc3MpXQ0KICAgIHBhcmFtICgNCg0KICAgICAgICBbcGFyYW1ldGVyKG1hbmRhdG9yeSA9ICR0cnVlLCBQYXJhbWV0ZXJTZXROYW1lID0gImNtZExpbmUiKV0NCiAgICAgICAgW3N0cmluZ10kVmF1bHROYW1lDQogICAgICAgICMgVE9ETyBhZGQgeW91ciBzcGVjaWZpYyBwYXJhbWV0ZXJzDQogICAgKQ0KICAgICMgSW4gb3JkZXIgdG8gcmVnaXN0ZXIgYSB2YXVsdCB5b3UgbmVlZCB0aGUgbW9kdWxlIG5hbWUuIEZvciBkZXYgcHVycG9zZXMNCiAgICAjIHRoaXMgY29kZSAoc2VlIGNvbmZpZ3VyYXRpb24ucHMxKSBlbmFibGVzIHRoZSBkZXRlY3Rpb24gaWYgdGhlIG1vZHVsZSBpcyBpbnN0YWxsZWQNCiAgICAjIG9yIHRoZSBQU0QxIGZpbGUgaXMgaW1wb3J0ZWQgZGlyZWN0bHkuDQogICAgJG15TW9kdWxlUGF0aCA9ICIkTW9kdWxlUm9vdFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzZDEiDQogICAgJHBzZERhdGEgPSBJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlICRteU1vZHVsZVBhdGgNCiAgICAkcmVnaXN0ZXJQYXJhbSA9IEB7DQogICAgICAgIE1vZHVsZU5hbWUgICAgICA9IEdldC1QU0ZDb25maWdWYWx1ZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5JbnRlckFjdGl2ZVJlZ2lzdGVyLm1vZHVsZXBhdGgnDQogICAgICAgIE5hbWUgICAgICAgICAgICA9ICRWYXVsdE5hbWUNCiAgICAgICAgVmF1bHRQYXJhbWV0ZXJzID0gJFBTQm91bmRQYXJhbWV0ZXJzIHwgQ29udmVydFRvLVBTRkhhc2h0YWJsZSAtSW5oZXJpdCAtRXhjbHVkZSBAKA0KICAgICAgICAgICAgIyBUT0RPIEluY2x1ZGUgYWxsIGZ1bmN0aW9uIHBhcmFtZXRlciBuYW1lcyB3aGljaCBzaG91bGQgYmUgdHJhbnNmZXJyZWQgdG8gdGhlIFZhdWx0LVBhcmFtZXRlcnMNCiAgICAgICAgICAgICMgJ1NlcnZlcicNCiAgICAgICAgICAgICMgJ1BvcnQnDQogICAgICAgICAgICAjICdEYXRhYmFzZScNCiAgICAgICAgICAgICMgJ1VzZXJOYW1lJw0KICAgICAgICApDQogICAgfQ0KICAgICRyZWdpc3RlclBhcmFtLlZhdWx0UGFyYW1ldGVycy52ZXJzaW9uID0gJHBzZERhdGEuTW9kdWxlVmVyc2lvbg0KICAgIGlmICgkUFNDbWRsZXQuU2hvdWxkUHJvY2VzcygkbmFtZSkpIHsNCiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAiUmVnaXN0ZXJpbmcgVmF1bHQgJHZhdWx0IHdpdGggUGFyYW0gJCgkcmVnaXN0ZXJQYXJhbXxDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIg0KICAgICAgICBSZWdpc3Rlci1TZWNyZXRWYXVsdCBAcmVnaXN0ZXJQYXJhbQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSG9zdCAiV2hhdElmIHVzZWQsIG5vIHZhdWx0IHJlZ2lzdGVyZWQuIg0KICAgICAgICBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBIb3N0ICJZb3UgbWF5IHJlZ2lzdGVyIHRoZSBjaG9zZW4gdmF1bHQgbGF0ZXIgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6YHJgbkByZWdpc3RlclBhcmFtPSQoJHJlZ2lzdGVyUGFyYW18Q29udmVydFRvLU1ldGFkYXRhIC1Bc0hhc2h0YWJsZSlgcmBuUmVnaXN0ZXItw75mdW5jdGlvblByZWZpeMO+U2VjdXJlVmF1bHQgQHJlZ2lzdGVyUGFyYW0iDQogICAgfQ0KfQEJ3gEAAAnfAQAABuABAAAqUmVnaXN0ZXItw75mdW5jdGlvblByZWZpeMO+U2VjdXJlVmF1bHQucHMxBuEBAABoU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGZ1bmN0aW9uc1xSZWdpc3Rlci3DvmZ1bmN0aW9uUHJlZml4w75TZWN1cmVWYXVsdC5wczEJWwAAAAnjAQAACeQBAAABiAEAAD4AAAAJ5QEAAAbmAQAADmNvbmZpZ3VyYXRpb25zBucBAABLU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGludGVybmFsXGNvbmZpZ3VyYXRpb25zCVsAAAAJ6QEAAAnqAQAAAYkBAAA+AAAACesBAAAG7AEAAAlmdW5jdGlvbnMG7QEAAEZTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcZnVuY3Rpb25zCVsAAAAJ7wEAAAnwAQAAAYoBAAA+AAAACfEBAAAG8gEAAAxzY3JpcHRibG9ja3MG8wEAAElTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcc2NyaXB0YmxvY2tzCVsAAAAJ9QEAAAn2AQAAAYsBAAA+AAAACfcBAAAG+AEAAAdzY3JpcHRzBvkBAABEU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGludGVybmFsXHNjcmlwdHMJWwAAAAn7AQAACfwBAAABjAEAAD4AAAAJ/QEAAAb+AQAABHRlcHAG/wEAAEFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcdGVwcAlbAAAACQECAAAJAgIAAAGNAQAAPgAAAAkDAgAABgQCAAADYmluBgUCAABbU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGJpbglbAAAACQcCAAAJCAIAAAGOAQAAPgAAAAkJAgAABgoCAAAFZW4tdXMGCwIAAF1TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cZW4tdXMJWwAAAAkNAgAACQ4CAAABjwEAAD4AAAAJDwIAAAYQAgAACWZ1bmN0aW9ucwYRAgAAYVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnMJWwAAAAkTAgAACRQCAAABkAEAAD4AAAAJFQIAAAYWAgAAGGZ1bmN0aW9ucy5zaGFyZWRpbnRlcm5hbAYXAgAAcFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnMuc2hhcmVkaW50ZXJuYWwJWwAAAAkZAgAACRoCAAABkQEAAD4AAAAJGwIAAAYcAgAACGludGVybmFsBh0CAABgU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsCVsAAAAJHwIAAAkgAgAAAZIBAAA+AAAACSECAAAGIgIAAAV0ZXN0cwYjAgAAXVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblx0ZXN0cwlbAAAACSUCAAAJJgIAAAGTAQAAPgAAAAknAgAABigCAAADeG1sBikCAABbU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHhtbAlbAAAACSsCAAAJLAIAAAGUAQAAcAAAAAYtAgAAbiMgQ2hhbmdlbG9nDQojIyAxLjAuMCAow74hZHluYW1pY3NjcmlwdF8zOTQ0MzIhw74pDQogLSBOZXc6IFNvbWUgU3R1ZmYNCiAtIFVwZDogTW9hciBTdHVmZg0KIC0gRml4OiBNdWNoIFN0dWZmAQkuAgAACS8CAAAGMAIAAAxjaGFuZ2Vsb2cubWQGMQIAAGRTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cY2hhbmdlbG9nLm1kCVsAAAAJMwIAAAk0AgAAAZUBAABwAAAABjUCAACOCCMgUFNGTW9kdWxlIGd1aWRhbmNlDQoNClRoaXMgaXMgYSBmaW5pc2hlZCBtb2R1bGUgbGF5b3V0IG9wdGltaXplZCBmb3IgaW1wbGVtZW50aW5nIHRoZSBQU0ZyYW1ld29yay4NCg0KSWYgeW91IGRvbid0IGNhcmUgdG8gZGVhbCB3aXRoIHRoZSBkZXRhaWxzLCB0aGlzIGlzIHdoYXQgeW91IG5lZWQgdG8gZG8gdG8gZ2V0IHN0YXJ0ZWQgc2VlaW5nIHJlc3VsdHM6DQoNCiAtIEFkZCB0aGUgZnVuY3Rpb25zIHlvdSB3YW50IHRvIHB1Ymxpc2ggdG8gYC9mdW5jdGlvbnMvYA0KIC0gVXBkYXRlIHRoZSBgRnVuY3Rpb25zVG9FeHBvcnRgIG5vZGUgaW4gdGhlIG1vZHVsZSBtYW5pZmVzdCAow75uYW1lw74ucHNkMSkuIEFsbCBmdW5jdGlvbnMgeW91IHdhbnQgdG8gcHVibGlzaCBzaG91bGQgYmUgaW4gYSBsaXN0Lg0KIC0gQWRkIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgdGhlIHVzZXIgc2hvdWxkIG5vdCBzZWUgdG8gYC9pbnRlcm5hbC9mdW5jdGlvbnMvYA0KIA0KICMjIFBhdGggV2FybmluZw0KIA0KID4gSWYgeW91IHdhbnQgeW91ciBtb2R1bGUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIExpbnV4IGFuZCBNYWNPUywga2VlcCBpbiBtaW5kIHRoYXQgdGhvc2UgT1MgYXJlIGNhc2Ugc2Vuc2l0aXZlIGZvciBwYXRocyBhbmQgZmlsZXMuDQogDQogYEltcG9ydC1Nb2R1bGVGaWxlYCBpcyBwcmVjb25maWd1cmVkIHRvIHJlc29sdmUgdGhlIHBhdGggb2YgdGhlIGZpbGVzIHNwZWNpZmllZCwgc28gaXQgd2lsbCByZWxpYWJseSBjb252ZXJ0IHdlaXJkIHBhdGggbm90YXRpb25zIHRoZSBzeXN0ZW0gY2FuJ3QgaGFuZGxlLg0KIENvbnRlbnQgaW1wb3J0ZWQgdGhyb3VnaCB0aGF0IGNvbW1hbmQgdGh1cyBuZWVkIG5vdCBtaW5kIHRoZSBwYXRoIHNlcGFyYXRvci4NCiBJZiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgeW91ciBjb2RlIHRvbyB3aWxsIHN1cnZpdmUgT1Mtc3BlY2lmaWMgcGF0aCBub3RhdGlvbnMsIGdldCB1c2VkIHRvIHVzaW5nIGBSZXNvbHZlLXBhdGhgIG9yIHRoZSBtb3JlIHBvd2VyZnVsIGBSZXNvbHZlLVBTRlBhdGhgLgEJNgIAAAk3AgAABjgCAAAJcmVhZG1lLm1kBjkCAABhU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHJlYWRtZS5tZAlbAAAACTsCAAAJPAIAAAGWAQAAcAAAAAY9AgAAnhJAew0KCSMgU2NyaXB0IG1vZHVsZSBvciBiaW5hcnkgbW9kdWxlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFuaWZlc3QNCglSb290TW9kdWxlICAgICAgICA9ICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LnBzbTEnDQoNCgkjIFZlcnNpb24gbnVtYmVyIG9mIHRoaXMgbW9kdWxlLg0KCU1vZHVsZVZlcnNpb24gPSAnMS4wLjAnDQoNCgkjIElEIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBtb2R1bGUNCglHVUlEID0gJ8O+IWd1aWRFeHRlbnNpb24hw74nDQoNCgkjIEF1dGhvciBvZiB0aGlzIG1vZHVsZQ0KCUF1dGhvciA9ICfDvmF1dGhvcsO+Jw0KDQoJIyBDb21wYW55IG9yIHZlbmRvciBvZiB0aGlzIG1vZHVsZQ0KCUNvbXBhbnlOYW1lID0gJ8O+Y29tcGFuecO+Jw0KDQoJIyBDb3B5cmlnaHQgc3RhdGVtZW50IGZvciB0aGlzIG1vZHVsZQ0KCUNvcHlyaWdodCA9ICdDb3B5cmlnaHQgKGMpIMO+IXllYXIhw74gw75hdXRob3LDvicNCg0KCSMgRGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUNCglEZXNjcmlwdGlvbiA9ICfDvmRlc2NyaXB0aW9uw74nDQoNCgkjIE1pbmltdW0gdmVyc2lvbiBvZiB0aGUgV2luZG93cyBQb3dlclNoZWxsIGVuZ2luZSByZXF1aXJlZCBieSB0aGlzIG1vZHVsZQ0KCVBvd2VyU2hlbGxWZXJzaW9uID0gJzUuMCcNCg0KCSMgTW9kdWxlcyB0aGF0IG11c3QgYmUgaW1wb3J0ZWQgaW50byB0aGUgZ2xvYmFsIGVudmlyb25tZW50IHByaW9yIHRvIGltcG9ydGluZw0KCSMgdGhpcyBtb2R1bGUNCglSZXF1aXJlZE1vZHVsZXMgPSBAKA0KCQlAeyBNb2R1bGVOYW1lPSdQU0ZyYW1ld29yayc7IE1vZHVsZVZlcnNpb249J8O+IXBzZnZlcnNpb24hw74nIH0NCgkpDQoNCgkjIEFzc2VtYmxpZXMgdGhhdCBtdXN0IGJlIGxvYWRlZCBwcmlvciB0byBpbXBvcnRpbmcgdGhpcyBtb2R1bGUNCgkjIFJlcXVpcmVkQXNzZW1ibGllcyA9IEAoJ2JpblzDvm5hbWXDvi5kbGwnKQ0KDQoJIyBUeXBlIGZpbGVzICgucHMxeG1sKSB0byBiZSBsb2FkZWQgd2hlbiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUNCgkjIFR5cGVzVG9Qcm9jZXNzID0gQCgneG1sXMO+bmFtZcO+LlR5cGVzLnBzMXhtbCcpDQoNCgkjIEZvcm1hdCBmaWxlcyAoLnBzMXhtbCkgdG8gYmUgbG9hZGVkIHdoZW4gaW1wb3J0aW5nIHRoaXMgbW9kdWxlDQoJIyBGb3JtYXRzVG9Qcm9jZXNzID0gQCgneG1sXMO+bmFtZcO+LkZvcm1hdC5wczF4bWwnKQ0KDQoJIyBGdW5jdGlvbnMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglGdW5jdGlvbnNUb0V4cG9ydCA9ICcnDQoNCgkjIENtZGxldHMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglDbWRsZXRzVG9FeHBvcnQgPSAnJw0KDQoJIyBWYXJpYWJsZXMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglWYXJpYWJsZXNUb0V4cG9ydCA9ICcnDQoNCgkjIEFsaWFzZXMgdG8gZXhwb3J0IGZyb20gdGhpcyBtb2R1bGUNCglBbGlhc2VzVG9FeHBvcnQgPSAnJw0KDQoJIyBMaXN0IG9mIGFsbCBtb2R1bGVzIHBhY2thZ2VkIHdpdGggdGhpcyBtb2R1bGUNCglNb2R1bGVMaXN0ID0gQCgpDQoNCgkjIExpc3Qgb2YgYWxsIGZpbGVzIHBhY2thZ2VkIHdpdGggdGhpcyBtb2R1bGUNCglGaWxlTGlzdCA9IEAoKQ0KDQoJIyBQcml2YXRlIGRhdGEgdG8gcGFzcyB0byB0aGUgbW9kdWxlIHNwZWNpZmllZCBpbiBNb2R1bGVUb1Byb2Nlc3MuIFRoaXMgbWF5IGFsc28gY29udGFpbiBhIFBTRGF0YSBoYXNodGFibGUgd2l0aCBhZGRpdGlvbmFsIG1vZHVsZSBtZXRhZGF0YSB1c2VkIGJ5IFBvd2VyU2hlbGwuDQoJUHJpdmF0ZURhdGEgPSBAew0KDQoJCSNTdXBwb3J0IGZvciBQb3dlclNoZWxsR2V0IGdhbGxlcmllcy4NCgkJUFNEYXRhID0gQHsNCg0KCQkJIyBUYWdzIGFwcGxpZWQgdG8gdGhpcyBtb2R1bGUuIFRoZXNlIGhlbHAgd2l0aCBtb2R1bGUgZGlzY292ZXJ5IGluIG9ubGluZSBnYWxsZXJpZXMuDQoJCQkjIFRhZ3MgPSBAKCkNCg0KCQkJIyBBIFVSTCB0byB0aGUgbGljZW5zZSBmb3IgdGhpcyBtb2R1bGUuDQoJCQkjIExpY2Vuc2VVcmkgPSAnJw0KDQoJCQkjIEEgVVJMIHRvIHRoZSBtYWluIHdlYnNpdGUgZm9yIHRoaXMgcHJvamVjdC4NCgkJCSMgUHJvamVjdFVyaSA9ICcnDQoNCgkJCSMgQSBVUkwgdG8gYW4gaWNvbiByZXByZXNlbnRpbmcgdGhpcyBtb2R1bGUuDQoJCQkjIEljb25VcmkgPSAnJw0KDQoJCQkjIFJlbGVhc2VOb3RlcyBvZiB0aGlzIG1vZHVsZQ0KCQkJIyBSZWxlYXNlTm90ZXMgPSAnJw0KDQoJCX0gIyBFbmQgb2YgUFNEYXRhIGhhc2h0YWJsZQ0KDQoJfSAjIEVuZCBvZiBQcml2YXRlRGF0YSBoYXNodGFibGUNCn0BCT4CAAAJPwIAAAZAAgAAKFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLnBzZDEGQQIAAIABU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLnBzZDEJWwAAAAlDAgAACUQCAAABlwEAAHAAAAAGRQIAANUaJHNjcmlwdDpNb2R1bGVSb290ID0gJFBTU2NyaXB0Um9vdA0KJHNjcmlwdDpNb2R1bGVWZXJzaW9uID0gKEltcG9ydC1Qb3dlclNoZWxsRGF0YUZpbGUgLVBhdGggIiQoJHNjcmlwdDpNb2R1bGVSb290KVzDvm5hbWXDvi5wc2QxIikuTW9kdWxlVmVyc2lvbg0KDQojIERldGVjdCB3aGV0aGVyIGF0IHNvbWUgbGV2ZWwgZG90c291cmNpbmcgd2FzIGVuZm9yY2VkDQokc2NyaXB0OmRvRG90U291cmNlID0gR2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSDDvm5hbWXDvi5JbXBvcnQuRG9Eb3RTb3VyY2UgLUZhbGxiYWNrICRmYWxzZQ0KaWYgKCTDvm5hbWXDvl9kb3Rzb3VyY2Vtb2R1bGUpIHsgJHNjcmlwdDpkb0RvdFNvdXJjZSA9ICR0cnVlIH0NCg0KPCMNCk5vdGUgb24gUmVzb2x2ZS1QYXRoOg0KQWxsIHBhdGhzIGFyZSBzZW50IHRocm91Z2ggUmVzb2x2ZS1QYXRoL1Jlc29sdmUtUFNGUGF0aCBpbiBvcmRlciB0byBjb252ZXJ0IHRoZW0gdG8gdGhlIGNvcnJlY3QgcGF0aCBzZXBhcmF0b3IuDQpUaGlzIGFsbG93cyBpZ25vcmluZyBwYXRoIHNlcGFyYXRvcnMgdGhyb3VnaG91dCB0aGUgaW1wb3J0IHNlcXVlbmNlLCB3aGljaCBjb3VsZCBvdGhlcndpc2UgY2F1c2UgdHJvdWJsZSBkZXBlbmRpbmcgb24gT1MuDQpSZXNvbHZlLVBhdGggY2FuIG9ubHkgYmUgdXNlZCBmb3IgcGF0aHMgdGhhdCBhbHJlYWR5IGV4aXN0LCBSZXNvbHZlLVBTRlBhdGggY2FuIGFjY2VwdCB0aGF0IHRoZSBsYXN0IGxlYWYgbXkgbm90IGV4aXN0Lg0KVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiB0ZXN0aW5nIGZvciBwYXRocy4NCiM+DQoNCiMgRGV0ZWN0IHdoZXRoZXIgYXQgc29tZSBsZXZlbCBsb2FkaW5nIGluZGl2aWR1YWwgbW9kdWxlIGZpbGVzLCByYXRoZXIgdGhhbiB0aGUgY29tcGlsZWQgbW9kdWxlIHdhcyBlbmZvcmNlZA0KJGltcG9ydEluZGl2aWR1YWxGaWxlcyA9IEdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgw75uYW1lw74uSW1wb3J0LkluZGl2aWR1YWxGaWxlcyAtRmFsbGJhY2sgJGZhbHNlDQppZiAoJMO+bmFtZcO+X2ltcG9ydEluZGl2aWR1YWxGaWxlcykgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQ0KaWYgKFRlc3QtUGF0aCAoUmVzb2x2ZS1QU0ZQYXRoIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcLi5cLmdpdCIgLVNpbmdsZUl0ZW0gLU5ld0NoaWxkKSkgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQ0KaWYgKCI8d2FzIG5vdCBjb21waWxlZD4iIC1lcSAnPHdhcyBub3QgY29tcGlsZWQ+JykgeyAkaW1wb3J0SW5kaXZpZHVhbEZpbGVzID0gJHRydWUgfQ0KDQpmdW5jdGlvbiBJbXBvcnQtTW9kdWxlRmlsZQ0Kew0KCTwjDQoJCS5TWU5PUFNJUw0KCQkJTG9hZHMgZmlsZXMgaW50byB0aGUgbW9kdWxlIG9uIG1vZHVsZSBpbXBvcnQuDQoNCgkJLkRFU0NSSVBUSU9ODQoJCQlUaGlzIGhlbHBlciBmdW5jdGlvbiBpcyB1c2VkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24uDQoJCQlJdCBzaG91bGQgYWx3YXlzIGJlIGRvdHNvdXJjZWQgaXRzZWxmLCBpbiBvcmRlciB0byBwcm9wZXIgZnVuY3Rpb24uDQoNCgkJCVRoaXMgcHJvdmlkZXMgYSBjZW50cmFsIGxvY2F0aW9uIHRvIHJlYWN0IHRvIGZpbGVzIGJlaW5nIGltcG9ydGVkLCBpZiBsYXRlciBkZXNpcmVkDQoNCgkJLlBBUkFNRVRFUiBQYXRoDQoJCQlUaGUgcGF0aCB0byB0aGUgZmlsZSB0byBsb2FkDQoNCgkJLkVYQU1QTEUNCgkJCVBTIEM6XD4gLiBJbXBvcnQtTW9kdWxlRmlsZSAtRmlsZSAkZnVuY3Rpb24uRnVsbE5hbWUNCg0KCQkJSW1wb3J0cyB0aGUgZmlsZSBzdG9yZWQgaW4gJGZ1bmN0aW9uIGFjY29yZGluZyB0byBpbXBvcnQgcG9saWN5DQoJIz4NCglbQ21kbGV0QmluZGluZygpXQ0KCVBhcmFtICgNCgkJW3N0cmluZ10NCgkJJFBhdGgNCgkpDQoNCgkkcmVzb2x2ZWRQYXRoID0gJEV4ZWN1dGlvbkNvbnRleHQuU2Vzc2lvblN0YXRlLlBhdGguR2V0UmVzb2x2ZWRQU1BhdGhGcm9tUFNQYXRoKCRQYXRoKS5Qcm92aWRlclBhdGgNCglpZiAoJGRvRG90U291cmNlKSB7IC4gJHJlc29sdmVkUGF0aCB9DQoJZWxzZSB7ICRFeGVjdXRpb25Db250ZXh0Lkludm9rZUNvbW1hbmQuSW52b2tlU2NyaXB0KCRmYWxzZSwgKFtzY3JpcHRibG9ja106OkNyZWF0ZShbaW8uZmlsZV06OlJlYWRBbGxUZXh0KCRyZXNvbHZlZFBhdGgpKSksICRudWxsLCAkbnVsbCkgfQ0KfQ0KDQojcmVnaW9uIExvYWQgaW5kaXZpZHVhbCBmaWxlcw0KaWYgKCRpbXBvcnRJbmRpdmlkdWFsRmlsZXMpDQp7DQoJIyBFeGVjdXRlIFByZWltcG9ydCBhY3Rpb25zDQoJZm9yZWFjaCAoJHBhdGggaW4gKCYgIiRNb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNccHJlaW1wb3J0LnBzMSIpKSB7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJHBhdGgNCgl9DQoNCgkjIEltcG9ydCBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zDQoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxmdW5jdGlvbnMiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkNCgl7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lDQoJfQ0KDQoJIyBJbXBvcnQgYWxsIGludGVybmFsIGZ1bmN0aW9ucyB3aGljaCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIEV4dGVuc2lvbiBhbmQgdGhlIE1haW4tTW9kdWxlDQoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxmdW5jdGlvbnMuc2hhcmVkaW50ZXJuYWwiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkgew0KCQkuIEltcG9ydC1Nb2R1bGVGaWxlIC1QYXRoICRmdW5jdGlvbi5GdWxsTmFtZQ0KCX0NCg0KCSMgSW1wb3J0IGFsbCBwdWJsaWMgZnVuY3Rpb25zDQoJZm9yZWFjaCAoJGZ1bmN0aW9uIGluIChHZXQtQ2hpbGRJdGVtICIkTW9kdWxlUm9vdFxmdW5jdGlvbnMiIC1GaWx0ZXIgIioucHMxIiAtUmVjdXJzZSAtRXJyb3JBY3Rpb24gSWdub3JlKSkNCgl7DQoJCS4gSW1wb3J0LU1vZHVsZUZpbGUgLVBhdGggJGZ1bmN0aW9uLkZ1bGxOYW1lDQoJfQ0KDQoJIyBFeGVjdXRlIFBvc3RpbXBvcnQgYWN0aW9ucw0KCWZvcmVhY2ggKCRwYXRoIGluICgmICIkTW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHBvc3RpbXBvcnQucHMxIikpIHsNCgkJLiBJbXBvcnQtTW9kdWxlRmlsZSAtUGF0aCAkcGF0aA0KCX0NCg0KCSMgRW5kIGl0IGhlcmUsIGRvIG5vdCBsb2FkIGNvbXBpbGVkIGNvZGUgYmVsb3cNCglyZXR1cm4NCn0NCiNlbmRyZWdpb24gTG9hZCBpbmRpdmlkdWFsIGZpbGVzDQoNCiNyZWdpb24gTG9hZCBjb21waWxlZCBjb2RlDQoiPGNvbXBpbGUgY29kZSBpbnRvIGhlcmU+Ig0KI2VuZHJlZ2lvbiBMb2FkIGNvbXBpbGVkIGNvZGUBCUYCAAAJRwIAAAZIAgAAKFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLnBzbTEGSQIAAIABU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLnBzbTEJWwAAAAlLAgAACUwCAAABmQEAAD4AAAAJTQIAAAZOAgAACWZ1bmN0aW9ucwZPAgAAQ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0c1xmdW5jdGlvbnMJWwAAAAlRAgAACVICAAABmgEAAD4AAAAJUwIAAAZUAgAAB2dlbmVyYWwGVQIAAEFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cdGVzdHNcZ2VuZXJhbAlbAAAACVcCAAAJWAIAAAGbAQAAcAAAAAZZAgAAqRtwYXJhbSAoDQoJJFRlc3RHZW5lcmFsID0gJHRydWUsDQoJDQoJJFRlc3RGdW5jdGlvbnMgPSAkdHJ1ZSwNCgkNCglbVmFsaWRhdGVTZXQoJ05vbmUnLCAnTm9ybWFsJywgJ0RldGFpbGVkJywgJ0RpYWdub3N0aWMnKV0NCglbQWxpYXMoJ1Nob3cnKV0NCgkkT3V0cHV0ID0gIk5vbmUiLA0KCQ0KCSRJbmNsdWRlID0gIioiLA0KCQ0KCSRFeGNsdWRlID0gIiINCikNCg0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJTdGFydGluZyBUZXN0cyINCg0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJJbXBvcnRpbmcgTW9kdWxlIg0KDQokZ2xvYmFsOnRlc3Ryb290ID0gJFBTU2NyaXB0Um9vdA0KJGdsb2JhbDpfX3Blc3Rlcl9kYXRhID0gQHsgfQ0KDQpSZW1vdmUtTW9kdWxlIMO+bmFtZcO+IC1FcnJvckFjdGlvbiBJZ25vcmUNCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw74ucHNkMSINCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw74ucHNtMSIgLUZvcmNlDQoNCiMgTmVlZCB0byBpbXBvcnQgZXhwbGljaXRseSBzbyB3ZSBjYW4gdXNlIHRoZSBjb25maWd1cmF0aW9uIGNsYXNzDQpJbXBvcnQtTW9kdWxlIFBlc3Rlcg0KDQrDviF0ZXN0Zm9sZGVyIcO+DQoNCiR0b3RhbEZhaWxlZCA9IDANCiR0b3RhbFJ1biA9IDANCg0KJHRlc3RyZXN1bHRzID0gQCgpDQokY29uZmlnID0gW1Blc3RlckNvbmZpZ3VyYXRpb25dOjpEZWZhdWx0DQrDviFwZXN0ZXJjb25maWchw74NCg0KI3JlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cw0KaWYgKCRUZXN0R2VuZXJhbCkNCnsNCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIk1vZHVsZXMgaW1wb3J0ZWQsIHByb2NlZWRpbmcgd2l0aCBnZW5lcmFsIHRlc3RzIg0KCWZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkUFNTY3JpcHRSb290XGdlbmVyYWwiIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIiouVGVzdHMucHMxIikpDQoJew0KCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9DQoJCWlmICgkZmlsZS5OYW1lIC1saWtlICRFeGNsdWRlKSB7IGNvbnRpbnVlIH0NCg0KCQlXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBTaWduaWZpY2FudCAtTWVzc2FnZSAiICBFeGVjdXRpbmcgPGM9J2VtJz4kKCRmaWxlLk5hbWUpPC9jPiINCgkJJGNvbmZpZy5UZXN0UmVzdWx0Lk91dHB1dFBhdGggPSBKb2luLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi5cVGVzdFJlc3VsdHMiICJURVNULSQoJGZpbGUuQmFzZU5hbWUpLnhtbCINCgkJJGNvbmZpZy5SdW4uUGF0aCA9ICRmaWxlLkZ1bGxOYW1lDQoJCSRjb25maWcuUnVuLlBhc3NUaHJ1ID0gJHRydWUNCgkJJGNvbmZpZy5PdXRwdXQuVmVyYm9zaXR5ID0gJE91dHB1dA0KICAgIAkkcmVzdWx0cyA9IEludm9rZS1QZXN0ZXIgLUNvbmZpZ3VyYXRpb24gJGNvbmZpZw0KCQlmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQ0KCQl7DQoJCQkkdG90YWxSdW4gKz0gJHJlc3VsdC5Ub3RhbENvdW50DQoJCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudA0KCQkJJHJlc3VsdC5UZXN0cyB8IFdoZXJlLU9iamVjdCBSZXN1bHQgLW5lICdQYXNzZWQnIHwgRm9yRWFjaC1PYmplY3Qgew0KCQkJCSR0ZXN0cmVzdWx0cyArPSBbcHNjdXN0b21vYmplY3RdQHsNCgkJCQkJQmxvY2sgICAgPSAkXy5CbG9jaw0KCQkJCQlOYW1lCSA9ICJJdCAkKCRfLk5hbWUpIg0KCQkJCQlSZXN1bHQgICA9ICRfLlJlc3VsdA0KCQkJCQlNZXNzYWdlICA9ICRfLkVycm9yUmVjb3JkLkRpc3BsYXlFcnJvck1lc3NhZ2UNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQojZW5kcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzDQoNCiRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplciB8IE91dC1Ib3N0DQoNCiNyZWdpb24gVGVzdCBDb21tYW5kcw0KaWYgKCRUZXN0RnVuY3Rpb25zKQ0Kew0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHJvY2VlZGluZyB3aXRoIGluZGl2aWR1YWwgdGVzdHMiDQoJZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRQU1NjcmlwdFJvb3RcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqVGVzdHMucHMxIikpDQoJew0KCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9DQoJCWlmICgkZmlsZS5OYW1lIC1saWtlICRFeGNsdWRlKSB7IGNvbnRpbnVlIH0NCgkJDQoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyAkKCRmaWxlLk5hbWUpIg0KCQkkY29uZmlnLlRlc3RSZXN1bHQuT3V0cHV0UGF0aCA9IEpvaW4tUGF0aCAiJFBTU2NyaXB0Um9vdFwuLlwuLlxUZXN0UmVzdWx0cyIgIlRFU1QtJCgkZmlsZS5CYXNlTmFtZSkueG1sIg0KCQkkY29uZmlnLlJ1bi5QYXRoID0gJGZpbGUuRnVsbE5hbWUNCgkJJGNvbmZpZy5SdW4uUGFzc1RocnUgPSAkdHJ1ZQ0KCQkkY29uZmlnLk91dHB1dC5WZXJib3NpdHkgPSAkT3V0cHV0DQogICAgCSRyZXN1bHRzID0gSW52b2tlLVBlc3RlciAtQ29uZmlndXJhdGlvbiAkY29uZmlnDQoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpDQoJCXsNCgkJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQNCgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50DQoJCQkkcmVzdWx0LlRlc3RzIHwgV2hlcmUtT2JqZWN0IFJlc3VsdCAtbmUgJ1Bhc3NlZCcgfCBGb3JFYWNoLU9iamVjdCB7DQoJCQkJJHRlc3RyZXN1bHRzICs9IFtwc2N1c3RvbW9iamVjdF1Aew0KCQkJCQlCbG9jayAgICA9ICRfLkJsb2NrDQoJCQkJCU5hbWUJID0gIkl0ICQoJF8uTmFtZSkiDQoJCQkJCVJlc3VsdCAgID0gJF8uUmVzdWx0DQoJCQkJCU1lc3NhZ2UgID0gJF8uRXJyb3JSZWNvcmQuRGlzcGxheUVycm9yTWVzc2FnZQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCn0NCiNlbmRyZWdpb24gVGVzdCBDb21tYW5kcw0KDQokdGVzdHJlc3VsdHMgfCBTb3J0LU9iamVjdCBEZXNjcmliZSwgQ29udGV4dCwgTmFtZSwgUmVzdWx0LCBNZXNzYWdlIHwgRm9ybWF0LUxpc3QNCg0KaWYgKCR0b3RhbEZhaWxlZCAtZXEgMCkgeyBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBDcml0aWNhbCAtTWVzc2FnZSAiQWxsIDxjPSdlbSc+JHRvdGFsUnVuPC9jPiB0ZXN0cyBleGVjdXRlZCB3aXRob3V0IGEgc2luZ2xlIGZhaWx1cmUhIiB9DQplbHNlIHsgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgQ3JpdGljYWwgLU1lc3NhZ2UgIjxjPSdlbSc+JHRvdGFsRmFpbGVkIHRlc3RzPC9jPiBvdXQgb2YgPGM9J3N1Yic+JHRvdGFsUnVuPC9jPiB0ZXN0cyBmYWlsZWQhIiB9DQoNCmlmICgkdG90YWxGYWlsZWQgLWd0IDApDQp7DQoJdGhyb3cgIiR0b3RhbEZhaWxlZCAvICR0b3RhbFJ1biB0ZXN0cyBmYWlsZWQhIg0KfQEJWgIAAAlbAgAABlwCAAAKcGVzdGVyLnBzMQZdAgAARFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0c1xwZXN0ZXIucHMxCVsAAAAJXwIAAAlgAgAAAZwBAABwAAAABmECAACiByMgRGVzY3JpcHRpb24NCg0KVGhpcyBpcyB0aGUgZm9sZGVyLCB3aGVyZSBhbGwgdGhlIHRlc3RzIGdvLg0KDQpUaG9zZSBhcmUgc3ViZGl2aWRlZCBpbiB0d28gY2F0ZWdvcmllczoNCg0KIC0gR2VuZXJhbA0KIC0gRnVuY3Rpb24NCg0KIyMgR2VuZXJhbCBUZXN0cw0KDQpHZW5lcmFsIHRlc3RzIGFyZSBmdW5jdGlvbiBnZW5lcmljIGFuZCB0ZXN0IGZvciBnZW5lcmFsIHBvbGljaWVzLg0KDQpUaGVzZSB0ZXN0IHNjYW4gYW5zd2VyIHF1ZXN0aW9ucyBzdWNoIGFzOg0KDQogLSBJcyBteSBtb2R1bGUgZm9sbG93aW5nIG15IHN0eWxlIGd1aWRlcz8NCiAtIERvZXMgYW55IG9mIG15IHNjcmlwdHMgaGF2ZSBhIHN5bnRheCBlcnJvcj8NCiAtIERvIG15IHNjcmlwdHMgdXNlIGNvbW1hbmRzIEkgZG8gbm90IHdhbnQgdGhlbSB0byB1c2U/DQogLSBEbyBteSBjb21tYW5kcyBmb2xsb3cgYmVzdCBwcmFjdGljZXM/DQogLSBEbyBteSBjb21tYW5kcyBoYXZlIHByb3BlciBoZWxwPw0KDQpCYXNpY2FsbHksIHRoZXNlIGFsbG93IGEgZ2VuZXJhbCBtb2R1bGUgaGVhbHRoIGNoZWNrLg0KDQpUaGVzZSB0ZXN0cyBhcmUgYWxyZWFkeSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZSB0ZW1wbGF0ZS4NCg0KIyMgRnVuY3Rpb24gVGVzdHMNCg0KQSBoZWFsdGh5IG1vZHVsZSBzaG91bGQgcHJvdmlkZSB1bml0IGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgdGhlIGNvbW1hbmRzICYgY29tcG9uZW50cyBpdCBzaGlwcy4NCk9ubHkgdGhlbiBjYW4gYmUgZ3VhcmFudGVlZCwgdGhhdCB0aGV5IHdpbGwgYWN0dWFsbHkgcGVyZm9ybSBhcyBwcm9taXNlZC4NCg0KSG93ZXZlciwgYXMgZWFjaCBzdWNoIHRlc3QgbXVzdCBiZSBzcGVjaWZpYyB0byB0aGUgZnVuY3Rpb24gaXQgdGVzdHMsIHRoZXJlIGNhbm5vdCBiZSBtdWNoIGluIHRoZSB3YXkgb2YgdGVtcGxhdGVzLgEJYgIAAAljAgAABmQCAAAJcmVhZG1lLm1kBmUCAABDU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHRlc3RzXHJlYWRtZS5tZAlbAAAACWcCAAAJaAIAAAGdAQAAcAAAAAZpAgAArAsjIFhNTA0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgcHJvamVjdCBYTUwgZmlsZXMgZ28sIG5vdGFibHk6DQoNCiAtIEZvcm1hdCBYTUwNCiAtIFR5cGUgRXh0ZW5zaW9uIFhNTA0KDQpFeHRlcm5hbCBoZWxwIGZpbGVzIHNob3VsZCBfbm90XyBiZSBwbGFjZWQgaW4gdGhpcyBmb2xkZXIhDQoNCiMjIE5vdGVzIG9uIEZpbGVzIGFuZCBOYW1pbmcNCg0KVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGZvcm1hdCBmaWxlIGFuZCBvbmUgdHlwZSBleHRlbnNpb24gZmlsZSBwZXIgcHJvamVjdCwgYXMgaW1wb3J0aW5nIHRoZW0gaGFzIGEgbm90YWJsZSBpbXBhY3Qgb24gaW1wb3J0IHRpbWVzLg0KDQogLSBUaGUgRm9ybWF0IFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LkZvcm1hdC5wczF4bWxgDQogLSBUaGUgVHlwZSBFeHRlbnNpb24gWE1MIHNob3VsZCBiZSBuYW1lZCBgw75uYW1lw74uVHlwZXMucHMxeG1sYA0KDQojIyBUb29scw0KDQojIyMgTmV3LVBTTURGb3JtYXRUYWJsZURlZmluaXRpb24NCg0KVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYW4gaW5wdXQgb2JqZWN0IGFuZCBnZW5lcmF0ZSBmb3JtYXQgeG1sIGZvciBhbiBhdXRvLXNpemVkIHRhYmxlLg0KDQpJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBmb3JtYXRzLg0KDQojIyMgR2V0LVBTRlR5cGVTZXJpYWxpemF0aW9uRGF0YQ0KDQpgYGANCkMjIFdhcm5pbmchDQpUaGlzIHNlY3Rpb24gaXMgb25seSBpbnRlcmVzdCBpZiB5b3UncmUgdXNpbmcgQyMgdG9nZXRoZXIgd2l0aCBQb3dlclNoZWxsLg0KYGBgDQoNClRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHR5cGUgZXh0ZW5zaW9uIFhNTCB0aGF0IGFsbG93cyBQb3dlclNoZWxsIHRvIGNvbnZlcnQgdHlwZXMgd3JpdHRlbiBpbiBDIyB0byBiZSB3cml0dGVuIHRvIGZpbGUgYW5kIHJlc3RvcmVkIGZyb20gaXQgd2l0aG91dCBiZWluZyAnRGVzZXJpYWxpemVkJy4gQWxzbyB3b3JrcyBmb3Igam9icyBvciByZW1vdGluZywgaWYgYm90aCBzaWRlcyBoYXZlIHRoZSBgUFNGcmFtZXdvcmtgIG1vZHVsZSBhbmQgdHlwZSBleHRlbnNpb24gbG9hZGVkLg0KDQpJbiBvcmRlciBmb3IgYSBjbGFzcyB0byBiZSBlbGlnaWJsZSBmb3IgdGhpcywgaXQgbmVlZHMgdG8gY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOg0KDQogLSBIYXZlIHRoZSBgW1NlcmlhbGl6YWJsZV1gIGF0dHJpYnV0ZQ0KIC0gQmUgcHVibGljDQogLSBIYXZlIGFuIGVtcHR5IGNvbnN0cnVjdG9yDQogLSBBbGxvdyBhbGwgcHVibGljIHByb3BlcnRpZXMvZmllbGRzIHRvIGJlIHNldCAoZXZlbiBpZiBzZXR0aW5nIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcpIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLg0KDQpgYGANCm5vbi1wdWJsaWMgcHJvcGVydGllcyBhbmQgZmllbGRzIHdpbGwgYmUgbG9zdCBpbiB0aGlzIHByb2Nlc3MhDQpgYGABCWoCAAAJawIAAAZsAgAACXJlYWRtZS5tZAZtAgAAQVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx4bWxccmVhZG1lLm1kCVsAAAAJbwIAAAlwAgAAAZ4BAABwAAAABnECAADoBTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi0xNiI/Pg0KPENvbmZpZ3VyYXRpb24+DQoJPFZpZXdEZWZpbml0aW9ucz4NCgkJPCEtLSBGb28uQmFyIC0tPg0KCQk8Vmlldz4NCgkJCTxOYW1lPkZvby5CYXI8L05hbWU+DQoJCQk8Vmlld1NlbGVjdGVkQnk+DQoJCQkJPFR5cGVOYW1lPkZvby5CYXI8L1R5cGVOYW1lPg0KCQkJPC9WaWV3U2VsZWN0ZWRCeT4NCgkJCTxUYWJsZUNvbnRyb2w+DQoJCQkJPEF1dG9TaXplLz4NCgkJCQk8VGFibGVIZWFkZXJzPg0KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPg0KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPg0KCQkJCTwvVGFibGVIZWFkZXJzPg0KCQkJCTxUYWJsZVJvd0VudHJpZXM+DQoJCQkJCTxUYWJsZVJvd0VudHJ5Pg0KCQkJCQkJPFRhYmxlQ29sdW1uSXRlbXM+DQoJCQkJCQkJPFRhYmxlQ29sdW1uSXRlbT4NCgkJCQkJCQkJPFByb3BlcnR5TmFtZT5Gb288L1Byb3BlcnR5TmFtZT4NCgkJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbT4NCgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJCQk8UHJvcGVydHlOYW1lPkJhcjwvUHJvcGVydHlOYW1lPg0KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW1zPg0KCQkJCQk8L1RhYmxlUm93RW50cnk+DQoJCQkJPC9UYWJsZVJvd0VudHJpZXM+DQoJCQk8L1RhYmxlQ29udHJvbD4NCgkJPC9WaWV3Pg0KCTwvVmlld0RlZmluaXRpb25zPg0KPC9Db25maWd1cmF0aW9uPgEJcgIAAAlzAgAABnQCAAAWw75uYW1lw74uRm9ybWF0LnBzMXhtbAZ1AgAATlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx4bWxcw75uYW1lw74uRm9ybWF0LnBzMXhtbAlbAAAACXcCAAAJeAIAAAGfAQAAcAAAAAZ5AgAA4Ac8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KPFR5cGVzPg0KICA8IS0tIEZvby5CYXIgLS0+DQogIDxUeXBlPg0KICAgIDxOYW1lPkRlc2VyaWFsaXplZC5Gb28uQmFyPC9OYW1lPg0KICAgIDxNZW1iZXJzPg0KICAgICAgPE1lbWJlclNldD4NCiAgICAgICAgPE5hbWU+UFNTdGFuZGFyZE1lbWJlcnM8L05hbWU+DQogICAgICAgIDxNZW1iZXJzPg0KICAgICAgICAgIDxOb3RlUHJvcGVydHk+DQogICAgICAgICAgICA8TmFtZT4NCiAgICAgICAgICAgICAgVGFyZ2V0VHlwZUZvckRlc2VyaWFsaXphdGlvbg0KICAgICAgICAgICAgPC9OYW1lPg0KICAgICAgICAgICAgPFZhbHVlPg0KICAgICAgICAgICAgICBGb28uQmFyDQogICAgICAgICAgICA8L1ZhbHVlPg0KICAgICAgICAgIDwvTm90ZVByb3BlcnR5Pg0KICAgICAgICA8L01lbWJlcnM+DQogICAgICA8L01lbWJlclNldD4NCiAgICA8L01lbWJlcnM+DQogIDwvVHlwZT4NCiAgPFR5cGU+DQogICAgPE5hbWU+Rm9vLkJhcjwvTmFtZT4NCiAgICA8TWVtYmVycz4NCiAgICAgIDxDb2RlUHJvcGVydHkgSXNIaWRkZW49InRydWUiPg0KICAgICAgICA8TmFtZT5TZXJpYWxpemF0aW9uRGF0YTwvTmFtZT4NCiAgICAgICAgPEdldENvZGVSZWZlcmVuY2U+DQogICAgICAgICAgPFR5cGVOYW1lPlBTRnJhbWV3b3JrLlNlcmlhbGl6YXRpb24uU2VyaWFsaXphdGlvblR5cGVDb252ZXJ0ZXI8L1R5cGVOYW1lPg0KICAgICAgICAgIDxNZXRob2ROYW1lPkdldFNlcmlhbGl6YXRpb25EYXRhPC9NZXRob2ROYW1lPg0KICAgICAgICA8L0dldENvZGVSZWZlcmVuY2U+DQogICAgICA8L0NvZGVQcm9wZXJ0eT4NCiAgICA8L01lbWJlcnM+DQogICAgPFR5cGVDb252ZXJ0ZXI+DQogICAgICA8VHlwZU5hbWU+UFNGcmFtZXdvcmsuU2VyaWFsaXphdGlvbi5TZXJpYWxpemF0aW9uVHlwZUNvbnZlcnRlcjwvVHlwZU5hbWU+DQogICAgPC9UeXBlQ29udmVydGVyPg0KICA8L1R5cGU+DQo8L1R5cGVzPgEJegIAAAl7AgAABnwCAAAVw75uYW1lw74uVHlwZXMu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jgIAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAnDAgAADQMHkAIAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAnEAgAACcUCAAAJxgIAAAnHAgAAB5ICAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJyAIAAAnJAgAACcoCAAAKB5QCAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJywIAAA0DB5YCAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJzAIAAAnNAgAADQIHmAIAAAABAAAAEAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAnOAgAACc8CAAAJ0AIAAAnRAgAACdICAAAJ0wIAAAnUAgAACdUCAAAJ1gIAAA0HB5oCAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJ1wIAAA0DB5wCAAAAAQAAAAgAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJ2AIAAAnZAgAACdoCAAAJ2wIAAAncAgAADQMHngIAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAndAgAACd4CAAAJ3wIAAAngAgAAB6ACAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJ4QIAAAniAgAACeMCAAAKEaICAAAEAAAABuQCAAAUZHluYW1pY3NjcmlwdF8zOTQ0MzINAxGkAgAABAAAAAblAgAABG5hbWUNAxGmAgAABAAAAAbmAgAABG5hbWUG5wIAAAZhdXRob3IG6AIAAAdjb21wYW55BukCAAALZGVzY3JpcHRpb24RpwIAAAQAAAAG6gIAAA1ndWlkRXh0ZW5zaW9uBusCAAAEeWVhcgbsAgAACnBzZnZlcnNpb24KEagCAAAEAAAABu0CAAAEbmFtZQ0DEaoCAAAEAAAABu4CAAAEbmFtZQ0DEawCAAAEAAAABu8CAAAEbmFtZQ0DB64CAAAAAQAAAAQAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJ8AIAAA0DB7ACAAAAAQAAAAgAAAAELVBTTW9kdWxlRGV2ZWxvcG1lbnQuVGVtcGxhdGUuVGVtcGxhdGVJdGVtQmFzZQIAAAAJ8QIAAAnyAgAACfMCAAAJ9AIAAAn1AgAACfYCAAAJ9wIAAAn4AgAAEbICAAAEAAAABvkCAAAEbmFtZQ0DEbMCAAAEAAAABvoCAAAKdGVzdGZvbGRlcgb7AgAADHBlc3RlcmNvbmZpZw0CEbUCAAAEAAAABvwCAAAEbmFtZQ0DEbcCAAAEAAAABv0CAAAEbmFtZQ0DEbkCAAAEAAAABv4CAAAEbmFtZQ0DAcACAABwAAAABv8CAADKEDwjDQpUaGlzIGlzIGFuIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlDQoNCkJ5IGRlZmF1bHQsIGl0IGlzIGVub3VnaCB0byBoYXZlIGEgc2luZ2xlIG9uZSBvZiB0aGVtLA0KaG93ZXZlciBpZiB5b3UgaGF2ZSBlbm91Z2ggY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBqdXN0aWZ5IGhhdmluZyBtdWx0aXBsZSBjb3BpZXMgb2YgaXQsDQpmZWVsIHRvdGFsbHkgZnJlZSB0byBzcGxpdCB0aGVtIGludG8gbXVsdGlwbGUgZmlsZXMuDQojPg0KDQo8Iw0KIyBFeGFtcGxlIENvbmZpZ3VyYXRpb24NClNldC1QU0ZDb25maWcgLU1vZHVsZSAnw75uYW1lw74nIC1OYW1lICdFeGFtcGxlLlNldHRpbmcnIC1WYWx1ZSAxMCAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnaW50ZWdlcicgLUhhbmRsZXIgeyB9IC1EZXNjcmlwdGlvbiAiRXhhbXBsZSBjb25maWd1cmF0aW9uIHNldHRpbmcuIFlvdXIgbW9kdWxlIGNhbiB0aGVuIHVzZSB0aGUgc2V0dGluZyB1c2luZyAnR2V0LVBTRkNvbmZpZ1ZhbHVlJyINCiM+DQoNClNldC1QU0ZDb25maWcgLU1vZHVsZSAnw75uYW1lw74nIC1OYW1lICdJbXBvcnQuRG9Eb3RTb3VyY2UnIC1WYWx1ZSAkZmFsc2UgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2Jvb2wnIC1EZXNjcmlwdGlvbiAiV2hldGhlciB0aGUgbW9kdWxlIGZpbGVzIHNob3VsZCBiZSBkb3Rzb3VyY2VkIG9uIGltcG9ydC4gQnkgZGVmYXVsdCwgdGhlIGZpbGVzIG9mIHRoaXMgbW9kdWxlIGFyZSByZWFkIGFzIHN0cmluZyB2YWx1ZSBhbmQgaW52b2tlZCwgd2hpY2ggaXMgZmFzdGVyIGJ1dCB3b3JzZSBvbiBkZWJ1Z2dpbmcuIg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICfDvm5hbWXDvicgLU5hbWUgJ0ltcG9ydC5JbmRpdmlkdWFsRmlsZXMnIC1WYWx1ZSAkZmFsc2UgLUluaXRpYWxpemUgLVZhbGlkYXRpb24gJ2Jvb2wnIC1EZXNjcmlwdGlvbiAiV2hldGhlciB0aGUgbW9kdWxlIGZpbGVzIHNob3VsZCBiZSBpbXBvcnRlZCBpbmRpdmlkdWFsbHkuIER1cmluZyB0aGUgbW9kdWxlIGJ1aWxkLCBhbGwgbW9kdWxlIGNvZGUgaXMgY29tcGlsZWQgaW50byBmZXcgZmlsZXMsIHdoaWNoIGFyZSBpbXBvcnRlZCBpbnN0ZWFkIGJ5IGRlZmF1bHQuIExvYWRpbmcgdGhlIGNvbXBpbGVkIHZlcnNpb25zIGlzIGZhc3RlciwgdXNpbmcgdGhlIGluZGl2aWR1YWwgZmlsZXMgaXMgZWFzaWVyIGZvciBkZWJ1Z2dpbmcgYW5kIHRlc3Rpbmcgb3V0IGFkanVzdG1lbnRzLiINCg0KJGN1cnJlbnRQYXRoID0gIiRNb2R1bGVSb290XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74ucHNkMSINCiRsYXRlc3RJbnN0YWxsZWRNb2R1bGVzID0gZ2V0LW1vZHVsZSBTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+IC1MaXN0QXZhaWxhYmxlIHwgU29ydC1PYmplY3QgdmVyc2lvbiAtRGVzY2VuZGluZyB8IFNlbGVjdC1PYmplY3QgLUV4cGFuZFByb3BlcnR5IHBhdGggLWZpcnN0IDENCldyaXRlLVBTRk1lc3NhZ2UgIkNoZWNraW5nIGlmIGN1cnJlbnQgbW9kdWxlICckY3VycmVudFBhdGgnIGFnYWluc3QgbGF0ZXN0IGluc3RhbGxlZCB2ZXJzaW9uICckbGF0ZXN0SW5zdGFsbGVkTW9kdWxlcyciDQppZiAoJGN1cnJlbnRQYXRoIC1lcSAkbGF0ZXN0SW5zdGFsbGVkTW9kdWxlcykgew0KICAgIFNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicgLU5hbWUgJ0ludGVyQWN0aXZlUmVnaXN0ZXIubW9kdWxlcGF0aCcgLVZhbHVlICJTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+IiAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBzdHJpbmcgLURlc2NyaXB0aW9uICJNb2R1bGUgUGF0aCBmb3IgVmF1bHQgUmVnaXN0cmF0aW9uLCBOYW1lIG9mIHRoZSBtb2R1bGUgYXMgbGF0ZXN0IGluc3RhbGxlZCB2ZXJzaW9uIg0KfQ0KZWxzZSB7DQogICAgU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+JyAtTmFtZSAnSW50ZXJBY3RpdmVSZWdpc3Rlci5tb2R1bGVwYXRoJyAtVmFsdWUgJGN1cnJlbnRQYXRoIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIk1vZHVsZSBQYXRoIGZvciBWYXVsdCBSZWdpc3RyYXRpb24sIGRldmVsb3BtZW50IHBvaW50IHRvIGxvY2FsIG5vbiBpbnN0YWxsZWQgUFNNMSINCn0BCQADAAAJAQMAAAYCAwAAEWNvbmZpZ3VyYXRpb24ucHMxBgMDAABdU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGludGVybmFsXGNvbmZpZ3VyYXRpb25zXGNvbmZpZ3VyYXRpb24ucHMxCVsAAAAJBQMAAAkGAwAAAcECAABwAAAABgcDAAD+AyMgQ29uZmlndXJhdGlvbnMNCg0KVGhyb3VnaCB0aGUgYFBTRnJhbWV3b3JrYCB5b3UgaGF2ZSBhIHNpbXBsZSBtZXRob2QgdGhhdCBhbGxvd3MgeW91IHRvIC4uLg0KDQogLSBQdWJsaXNoIHNldHRpbmdzDQogLSBXaXRoIG9uYm9hcmQgZG9jdW1lbnRhdGlvbg0KIC0gSW5wdXQgdmFsaWRhdGlvbg0KIC0gU2NyaXB0cyB0aGF0IHJ1biBvbiBjaGFuZ2Ugb2Ygc2V0dGluZ3MNCiAtIFRoYXQgY2FuIGJlIGRpc2NvdmVyZWQgYW5kIHVwZGF0ZWQgYnkgdGhlIHVzZXINCiAtIFRoYXQgY2FuIGJlIGFkbWluaXN0cmF0ZWQgYnkgcG9saWN5ICYgRFNDDQoNClRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBhIGJpdCB0b28gY29tcGxleCB0byBkZXNjcmliZSBpbiBhIGhlbHAgZmlsZSwgeW91IGNhbiBob3dldmVyIHZpc2l0IHVzIGF0IGh0dHA6Ly9wc2ZyYW1ld29yay5vcmcgZm9yIGRldGFpbGVkIGd1aWRhbmNlLg0KDQpBbiBleGFtcGxlIGNhbiBiZSBzZWVuIGluIHRoZSBhdHRhY2hlZCBwczEgZmlsZQEJCAMAAAkJAwAABgoDAAAJcmVhZG1lLm1kBgsDAABVU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGludGVybmFsXGNvbmZpZ3VyYXRpb25zXHJlYWRtZS5tZAlbAAAACQ0DAAAJDgMAAAHCAgAAcAAAAAYPAwAA2wEjIEZ1bmN0aW9ucw0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGludGVybmFsIGZ1bmN0aW9ucyBnby4NCg0KRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4NCg0KVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCRADAAAJEQMAAAYSAwAACXJlYWRtZS5tZAYTAwAAUFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbFxmdW5jdGlvbnNccmVhZG1lLm1kCVsAAAAJFQMAAAkWAwAAAcMCAABwAAAABhcDAACEAzwjDQpTdG9yZWQgc2NyaXB0YmxvY2tzIGFyZSBhdmFpbGFibGUgaW4gW1BzZlZhbGlkYXRlU2NyaXB0KCldIGF0dHJpYnV0ZXMuDQpUaGlzIG1ha2VzIGl0IGVhc2llciB0byBjZW50cmFsbHkgcHJvdmlkZSB0aGUgc2FtZSBzY3JpcHRibG9jayBtdWx0aXBsZSB0aW1lcywNCndpdGhvdXQgaGF2aW5nIHRvIG1haW50YWluIGl0IGluIHNlcGFyYXRlIGxvY2F0aW9ucy4NCg0KSXQgYWxzbyBwcmV2ZW50cyBsZW5ndGh5IHZhbGlkYXRpb24gc2NyaXB0YmxvY2tzIGZyb20gbWFraW5nIHlvdXIgcGFyYW1ldGVyIGJsb2NrDQpoYXJkIHRvIHJlYWQuDQoNClNldC1QU0ZTY3JpcHRibG9jayAtTmFtZSAnw75uYW1lw74uU2NyaXB0QmxvY2tOYW1lJyAtU2NyaXB0YmxvY2sgew0KCQ0KfQ0KIz4BCRgDAAAJGQMAAAYaAwAAEHNjcmlwdGJsb2Nrcy5wczEGGwMAAFpTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcc2NyaXB0YmxvY2tzXHNjcmlwdGJsb2Nrcy5wczEJWwAAAAkdAwAACR4DAAABxAIAAHAAAAAGHwMAAPYJTmV3LVBTRkxpY2Vuc2UgLVByb2R1Y3QgJ8O+bmFtZcO+JyAtTWFudWZhY3R1cmVyICfDvmF1dGhvcsO+JyAtUHJvZHVjdFZlcnNpb24gJHNjcmlwdDpNb2R1bGVWZXJzaW9uIC1Qcm9kdWN0VHlwZSBNb2R1bGUgLU5hbWUgTUlUIC1WZXJzaW9uICIxLjAuMC4wIiAtRGF0ZSAoR2V0LURhdGUgIsO+IWRhdGUhw74iKSAtVGV4dCBAIg0KQ29weXJpZ2h0IChjKSDDviF5ZWFyIcO+IMO+YXV0aG9yw74NCg0KUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQ0Kb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwNCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMNCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwNCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcw0KZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCg0KVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsDQpjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KDQpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQpGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVINCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sDQpPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQ0KU09GVFdBUkUuDQoiQAEJIAMAAAkhAwAABiIDAAALbGljZW5zZS5wczEGIwMAAFBTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcc2NyaXB0c1xsaWNlbnNlLnBzMQlbAAAACSUDAAAJJgMAAAHFAgAAcAAAAAYnAwAAtwY8Iw0KQWRkIGFsbCB0aGluZ3MgeW91IHdhbnQgdG8gcnVuIGFmdGVyIGltcG9ydGluZyB0aGUgbWFpbiBmdW5jdGlvbiBjb2RlDQoNCldBUk5JTkc6IE9OTFkgcHJvdmlkZSBwYXRocyB0byBmaWxlcyENCg0KQWZ0ZXIgYnVpbGRpbmcgdGhlIG1vZHVsZSwgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkLCBhZGRpbmcgYW55dGhpbmcgYnV0IHBhdGhzIHRvIGZpbGVzIC4uLg0KLSBXaWxsIG5vdCB3b3JrIGFmdGVyIHB1Ymxpc2hpbmcNCi0gQ291bGQgYnJlYWsgdGhlIGJ1aWxkIHByb2Nlc3MNCiM+DQoNCiRtb2R1bGVSb290ID0gU3BsaXQtUGF0aCAoU3BsaXQtUGF0aCAkUFNTY3JpcHRSb290KQ0KDQojIExvYWQgQ29uZmlndXJhdGlvbnMNCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxjb25maWd1cmF0aW9uc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUNCg0KIyBMb2FkIFNjcmlwdGJsb2Nrcw0KKEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdGJsb2Nrc1wqLnBzMSIgLUVycm9yQWN0aW9uIElnbm9yZSkuRnVsbE5hbWUNCg0KIyBMb2FkIFRhYiBFeHBhbnNpb24NCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFx0ZXBwXCoudGVwcC5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lDQoNCiMgTG9hZCBUYWIgRXhwYW5zaW9uIEFzc2lnbm1lbnQNCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFx0ZXBwXGFzc2lnbm1lbnQucHMxIg0KDQojIExvYWQgTGljZW5zZQ0KIiRtb2R1bGVSb290XGludGVybmFsXHNjcmlwdHNcbGljZW5zZS5wczEiAQkoAwAACSkDAAAGKgMAAA5wb3N0aW1wb3J0LnBzMQYrAwAAU1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbFxzY3JpcHRzXHBvc3RpbXBvcnQucHMxCVsAAAAJLQMAAAkuAwAAAcYCAABwAAAABi8DAACwAzwjDQpBZGQgYWxsIHRoaW5ncyB5b3Ugd2FudCB0byBydW4gYmVmb3JlIGltcG9ydGluZyB0aGUgbWFpbiBmdW5jdGlvbiBjb2RlLg0KDQpXQVJOSU5HOiBPTkxZIHByb3ZpZGUgcGF0aHMgdG8gZmlsZXMhDQoNCkFmdGVyIGJ1aWxkaW5nIHRoZSBtb2R1bGUsIHRoaXMgZmlsZSB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZCwgYWRkaW5nIGFueXRoaW5nIGJ1dCBwYXRocyB0byBmaWxlcyAuLi4NCi0gV2lsbCBub3Qgd29yayBhZnRlciBwdWJsaXNoaW5nDQotIENvdWxkIGJyZWFrIHRoZSBidWlsZCBwcm9jZXNzDQojPg0KDQokbW9kdWxlUm9vdCA9IFNwbGl0LVBhdGggKFNwbGl0LVBhdGggJFBTU2NyaXB0Um9vdCkNCg0KIyBMb2FkIHRoZSBzdHJpbmdzIHVzZWQgaW4gbWVzc2FnZXMNCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXHN0cmluZ3MucHMxIgEJMAMAAAkxAwAABjIDAAANcHJlaW1wb3J0LnBzMQYzAwAAUlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxpbnRlcm5hbFxzY3JpcHRzXHByZWltcG9ydC5wczEJWwAAAAk1AwAACTYDAAABxwIAAHAAAAAGNwMAALgDPCMNClRoaXMgZmlsZSBsb2FkcyB0aGUgc3RyaW5ncyBkb2N1bWVudHMgZnJvbSB0aGUgcmVzcGVjdGl2ZSBsYW5ndWFnZSBmb2xkZXJzLg0KVGhpcyBhbGxvd3MgbG9jYWxpemluZyBtZXNzYWdlcyBhbmQgZXJyb3JzLg0KTG9hZCBwc2QxIGxhbmd1YWdlIGZpbGVzIGZvciBlYWNoIGxhbmd1YWdlIHlvdSB3aXNoIHRvIHN1cHBvcnQuDQpQYXJ0aWFsIHRyYW5zbGF0aW9ucyBhcmUgYWNjZXB0YWJsZSAtIHdoZW4gbWlzc2luZyBhIGN1cnJlbnQgbGFuZ3VhZ2UgbWVzc2FnZSwNCml0IHdpbGwgZmFsbGJhY2sgdG8gRW5nbGlzaCBvciBhbm90aGVyIGF2YWlsYWJsZSBsYW5ndWFnZS4NCiM+DQpJbXBvcnQtUFNGTG9jYWxpemVkU3RyaW5nIC1QYXRoICIkKCRzY3JpcHQ6TW9kdWxlUm9vdClcZW4tdXNcKi5wc2QxIiAtTW9kdWxlICfDvm5hbWXDvicgLUxhbmd1YWdlICdlbi1VUycBCTgDAAAJOQMAAAY6AwAAC3N0cmluZ3MucHMxBjsDAABQU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGludGVybmFsXHNjcmlwdHNcc3RyaW5ncy5wczEJWwAAAAk9AwAACT4DAAAByAIAAHAAAAAGPwMAAHE8Iw0KIyBFeGFtcGxlOg0KUmVnaXN0ZXItUFNGVGVwcEFyZ3VtZW50Q29tcGxldGVyIC1Db21tYW5kIEdldC1BbGNvaG9sIC1QYXJhbWV0ZXIgVHlwZSAtTmFtZSDDvm5hbWXDvi5hbGNvaG9sDQojPgEJQAMAAAlBAwAABkIDAAAOYXNzaWdubWVudC5wczEGQwMAAFBTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcdGVwcFxhc3NpZ25tZW50LnBzMQlbAAAACUUDAAAJRgMAAAHJAgAAcAAAAAZHAwAAowE8Iw0KIyBFeGFtcGxlOg0KUmVnaXN0ZXItUFNGVGVwcFNjcmlwdGJsb2NrIC1OYW1lICLDvm5hbWXDvi5hbGNvaG9sIiAtU2NyaXB0QmxvY2sgeyAnQmVlcicsJ01lYWQnLCdXaGlza2V5JywnV2luZScsJ1ZvZGthJywnUnVtICgzeSknLCAnUnVtICg1eSknLCAnUnVtICg3eSknIH0NCiM+AQlIAwAACUkDAAAGSgMAABBleGFtcGxlLnRlcHAucHMxBksDAABSU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XGludGVybmFsXHRlcHBcZXhhbXBsZS50ZXBwLnBzMQlbAAAACU0DAAAJTgMAAAHKAgAAcAAAAAZPAwAAvgcjIFRhYiBFeHBhbnNpb24NCg0KIyMgRGVzY3JpcHRpb24NCg0KTW9kZXJuIFRhYiBFeHBhbnNpb24gd2FzIG9wZW5lZCB0byB1c2VycyB3aXRoIHRoZSBtb2R1bGUgYFRhYiBFeHBhbnNpb24gUGx1cyBQbHVzYCAoVEVQUCkuDQoNCkl0IGFsbG93cyB5b3UgdG8gZGVmaW5lLCB3aGF0IG9wdGlvbnMgYSB1c2VyIGlzIG9mZmVyZWQgd2hlbiB0YWJiaW5nIHRocm91Z2ggaW5wdXQgb3B0aW9ucy4gVGhpcyBjYW4gc2F2ZSBhIGxvdCBvZiB0aW1lIGZvciB0aGUgdXNlciBhbmQgaXMgY29uc2lkZXJlZCBhIGtleSBlbGVtZW50IGluIHVzZXIgZXhwZXJpZW5jZS4NCg0KVGhlIGBQU0ZyYW1ld29ya2Agb2ZmZXJzIGEgc2ltcGxpZmllZCB3YXkgb2Ygb2ZmZXJpbmcganVzdCB0aGlzLCBhcyB0aGUgdHdvIGV4YW1wbGUgZmlsZXMgc2hvdy4NCg0KIyMgQ29uY2VwdA0KDQpDdXN0b20gdGFiIGNvbXBsZXRpb24gaXMgZGVmaW5lZCBpbiB0d28gc3RlcHM6DQoNCiAtIERlZmluZSBhIHNjcmlwdGJsb2NrIHRoYXQgaXMgcnVuIHdoZW4gdGhlIHVzZXIgaGl0cyBgVEFCYCBhbmQgcHJvdmlkZXMgdGhlIHN0cmluZ3MgdGhhdCBhcmUgaGlzIG9wdGlvbnMuDQogLSBBc3NpZ24gdGhhdCBzY3JpcHRibG9jayB0byB0aGUgcGFyYW1ldGVyIG9mIGEgY29tbWFuZC4gWW91IGNhbiBhc3NpZ24gdGhlIHNhbWUgc2NyaXB0YmxvY2sgbXVsdGlwbGUgdGltZXMuDQoNCiMjIFN0cnVjdHVyZQ0KDQpJbXBvcnQgb3JkZXIgbWF0dGVycy4gSW4gb3JkZXIgdG8gbWFrZSB0aGluZ3Mgd29yayB3aXRoIHRoZSBkZWZhdWx0IHNjYWZmb2xkLCBmb2xsb3cgdGhvc2UgcnVsZXM6DQoNCiAtIEFsbCBzY3JpcHRmaWxlcyBfZGVmaW5pbmdfIGNvbXBsZXRpb24gc2NyaXB0YmxvY2tzIGxpa2UgdGhpczogYCoudGVwcC5wczFgDQogLSBQdXQgYWxsIHlvdXIgY29tcGxldGlvbiBhc3NpZ25tZW50cyBpbiBgYXNzaWdubWVudC5wczFgAQlQAwAACVEDAAAGUgMAAAlyZWFkbWUubWQGUwMAAEtTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75caW50ZXJuYWxcdGVwcFxyZWFkbWUubWQJWwAAAAlVAwAACVYDAAABywIAAHAAAAAGVwMAAO4CIyBiaW4gZm9sZGVyDQoNClRoZSBiaW4gZm9sZGVyIGV4aXN0cyB0byBzdG9yZSBiaW5hcnkgZGF0YS4gQW5kIHNjcmlwdHMgcmVsYXRlZCB0byB0aGUgdHlwZSBzeXN0ZW0uDQoNClRoaXMgbWF5IGluY2x1ZGUgeW91ciBvd24gQyMtYmFzZWQgbGlicmFyeSwgdGhpcmQgcGFydHkgbGlicmFyaWVzIHlvdSB3YW50IHRvIGluY2x1ZGUgKHdhdGNoIHRoZSBsaWNlbnNlISksIG9yIGEgc2NyaXB0IGRlY2xhcmluZyB0eXBlIGFjY2VsZXJhdG9ycyAoZWZmZWN0aXZlbHkgYWxpYXNlcyBmb3IgLk5FVCB0eXBlcykNCg0KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gVHlwZSBBY2NlbGVyYXRvcnMsIHNlZSB0aGUgaGVscCBvbiBTZXQtUFNGVHlwZUFsaWFzAQlYAwAACVkDAAAGWgMAAAlyZWFkbWUubWQGWwMAAGVTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cYmluXHJlYWRtZS5tZAlbAAAACV0DAAAJXgMAAAHMAgAAcAAAAAZfAwAApQFUT1BJQw0KCWFib3V0X8O+bmFtZcO+DQoJDQpTSE9SVCBERVNDUklQVElPTg0KCUV4cGxhaW5zIGhvdyB0byB1c2UgdGhlIMO+bmFtZcO+IHBvd2Vyc2hlbGwgbW9kdWxlDQoJDQpMT05HIERFU0NSSVBUSU9ODQoJPEluc2VydCBDb250ZW50IGhlcmU+DQoNCktFWVdPUkRTDQoJw75uYW1lw74BCWADAAAJYQMAAAZiAwAAF2Fib3V0X8O+bmFtZcO+LmhlbHAudHh0BmMDAAB1U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGVuLXVzXGFib3V0X8O+bmFtZcO+LmhlbHAudHh0CVsAAAAJZQMAAAlmAwAAAc0CAABwAAAABmcDAACdASMgVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBnbywgdGhhdCBhcmUgd3JpdHRlbiBieQ0KIyBXcml0ZS1QU0ZNZXNzYWdlLCBTdG9wLVBTRkZ1bmN0aW9uIG9yIHRoZSBQU0ZyYW1ld29yayB2YWxpZGF0aW9uIHNjcmlwdGJsb2Nrcw0KQHsNCgkna2V5JyA9ICdWYWx1ZScNCn0BCWgDAAAJaQMAAAZqAwAADHN0cmluZ3MucHNkMQZrAwAAalNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxlbi11c1xzdHJpbmdzLnBzZDEJWwAAAAltAwAACW4DAAABzgIAAHAAAAAGbwMAAJ4MZnVuY3Rpb24gR2V0LVNlY3JldCB7DQogICAgPCMNCiAgICAuU1lOT1BTSVMNCiAgICBRdWVyeSBhIHNpbmdsZSBzZWNyZXQuDQoNCiAgICAuREVTQ1JJUFRJT04NCiAgICBRdWVyeSBhIHNpbmdsZSBzZWNyZXQuDQoNCiAgICAuUEFSQU1FVEVSIE5hbWUNCiAgICBOYW1lIHRvIGJlIHNlYXJjaGVkIGZvci4NCg0KICAgIC5QQVJBTUVURVIgVmF1bHROYW1lDQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4NCg0KICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuDQoNCiAgICAuRVhBTVBMRQ0KICAgIEdldC1TZWNyZXQgLVZhdWx0ICRWYXVsdG5hbWUgLU5hbWUgZm9vDQoNCiAgICBSZXR1cm5zIHRoZSBzdG9yZWQgc2VjcmV0IGZvciB0aGUgZW50cnkgZm9vLg0KDQogICAgLk5PVEVTDQogICAgR2VuZXJhbCBub3Rlcw0KICAgICM+DQogICAgW0NtZGxldEJpbmRpbmcoKV0NCiAgICBwYXJhbSAoDQogICAgICAgIFtzdHJpbmddICROYW1lLA0KICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLA0KICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICApDQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlDQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQogICAgaWYgKCRBZGRpdGlvbmFsUGFyYW1ldGVycy5WZXJib3NlKSB7ICRWZXJib3NlUHJlZmVyZW5jZSA9ICdjb250aW51ZScgfQ0KDQogICAgV3JpdGUtUFNGTWVzc2FnZSAiR2V0LVNlY3JldCwgTmFtZT0kTmFtZSwgJFZhdWx0TmFtZSwgQWRkaXRpb25hbFBhcmFtZXRlcnM9JCgkQWRkaXRpb25hbFBhcmFtZXRlcnN8Q29udmVydFRvLUpzb24gLUNvbXByZXNzKSINCiAgICAjIFRPRE8gUGVyZm9ybSBSZXRyaWV2YWwgdm9vZG9vIDstKQ0KICAgICMgJHNlY3JldCA9IEdldC3DvmZ1bmN0aW9uUHJlZml4w75TZWNyZXQNCiAgICAjIFdyaXRlLVBTRk1lc3NhZ2UgIkZvdW5kIGAkc2VjcmV0PSQoJHNlY3JldC5nZXR0eXBlKCkpIg0KICAgICMgIyBDaGVjayBpZiBvbmx5IG9uZSBzZWNyZXQgd2FzIHJldHJpZXZlZA0KICAgICMgaWYgKCRzZWNyZXQuQ291bnQgLWd0IDEgLWFuZCAkc2VjcmV0IC1pc25vdCBbaGFzaHRhYmxlXSkgew0KICAgICMgICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEVycm9yICdNdWx0aXBsZSBjcmVkZW50aWFscyBmb3VuZDsgU2VhcmNoIHdpdGggR2V0LVNlY3JldEluZm8gYW5kIHJlcXVpcmUgdGhlIGNvcnJlY3Qgb25lIGJ5ICouTWV0YURhdGEuaWQnDQogICAgIyAgICAgV2FpdC1QU0ZNZXNzYWdlDQogICAgIyAgICAgdGhyb3cgJ011bHRpcGxlIGNyZWRlbnRpYWxzIGZvdW5kOyBTZWFyY2ggd2l0aCBHZXQtU2VjcmV0SW5mbyBhbmQgcmVxdWlyZSB0aGUgY29ycmVjdCBvbmUgYnkgKi5NZXRhRGF0YS5pZCcNCiAgICAjIH0NCiAgICByZXR1cm4gJHNlY3JldCB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDENCn0NCg0KAQlwAwAACXEDAAAGcgMAAA5HZXQtU2VjcmV0LnBzMQZzAwAAcFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnNcR2V0LVNlY3JldC5wczEJWwAAAAl1AwAACXYDAAABzwIAAHAAAAAGdwMAAIgMZnVuY3Rpb24gR2V0LVNlY3JldEluZm8gew0KICAgIDwjDQogICAgLlNZTk9QU0lTDQogICAgUmV0dXJucyBTZWNyZXRtYW5hZ2VtZW50SW5mb3JtYXRpb24gb2JqZWN0cyBmb3IgdGhlIHJlcXVlc3RlZCBlbnRyaWVzLg0KDQogICAgLkRFU0NSSVBUSU9ODQogICAgUmV0dXJucyBTZWNyZXRtYW5hZ2VtZW50SW5mb3JtYXRpb24gb2JqZWN0cyBmb3IgdGhlIHJlcXVlc3RlZCBlbnRyaWVzLg0KDQogICAgLlBBUkFNRVRFUiBGaWx0ZXINCiAgICBUaGUgbmFtZSB0byBiZSBzZWFyY2hlZA0KDQogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUNCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0Lg0KDQogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4NCg0KICAgIC5FWEFNUExFDQogICAgR2V0LVNlY3JldEluZm8gLVZhdWx0ICRWYXVsdG5hbWUgLU5hbWUgZm9vYmFyDQogICAgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICBWYXVsdE5hbWUNCiAgICAtLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLSAgICAgICAgIC0tLS0tLS0tLQ0KICAgIGZvb2JhciBbNWRkOTM3YzQtYjBhMC1lZDExLWE4NzYtMDA1MDU2YmNlOTQ4XSBQU0NyZWRlbnRpYWwgUFdTYWZlSW50DQogICAgZm9vYmFyIFtlZjJmZTExZC1iMGEwLWVkMTEtYTg3Ni0wMDUwNTZiY2U5NDhdIFBTQ3JlZGVudGlhbCBQV1NhZmVJbnQNCg0KICAgIFJldHVybnMgdGhlIHN0b3JlZCBzZWNyZXQgaW5mby4NCg0KICAgIC5OT1RFUw0KICAgIEdlbmVyYWwgbm90ZXMNCiAgICAjPg0KICAgIFtDbWRsZXRCaW5kaW5nKCldDQogICAgcGFyYW0gKA0KICAgICAgICBbc3RyaW5nXSAkRmlsdGVyLA0KICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLA0KICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICApDQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlDQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQogICAgaWYgKCRBZGRpdGlvbmFsUGFyYW1ldGVycy5WZXJib3NlKSB7ICRWZXJib3NlUHJlZmVyZW5jZSA9ICdjb250aW51ZScgfQ0KDQogICAgV3JpdGUtUFNGTWVzc2FnZSAiR2V0LVNlY3JldEluZm8sIEZpbHRlcj0kRmlsdGVyLCAkVmF1bHROYW1lLCBBZGRpdGlvbmFsUGFyYW1ldGVycz0kKCRBZGRpdGlvbmFsUGFyYW1ldGVyc3xDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIg0KICAgIHJldHVybiBHZXQtTmV0d3JpeENvbnRhaW5lciAtRmlsdGVyICRGaWx0ZXIgLVZhdWx0TmFtZSAkVmF1bHROYW1lIC1BZGRpdGlvbmFsUGFyYW1ldGVycyAkQWRkaXRpb25hbFBhcmFtZXRlcnMgLVJldHVyblR5cGUgU2VjcmV0SW5mb3JtYXRpb24NCiAgICAjIFRPRE8gUGVyZm9ybSB1cGRhdGUgdm9vZG9vIDstKQ0KfQ0KDQoBCXgDAAAJeQMAAAZ6AwAAEkdldC1TZWNyZXRJbmZvLnBzMQZ7AwAAdFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnNcR2V0LVNlY3JldEluZm8ucHMxCVsAAAAJfQMAAAl+AwAAAdACAABwAAAABn8DAADSASMgRnVuY3Rpb25zDQoNClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSB0aGUgZnVuY3Rpb25zIGdvLg0KDQpEZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIG1vZHVsZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gc3ViZGl2aWRlIHRoZW0gaW50byBzdWJmb2xkZXJzLg0KDQpUaGUgbW9kdWxlIHdpbGwgcGljayB1cCBhbGwgLnBzMSBmaWxlcyByZWN1cnNpdmVseQEJgAMAAAmBAwAABoIDAAAJcmVhZG1lLm1kBoMDAABrU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9uc1xyZWFkbWUubWQJWwAAAAmFAwAACYYDAAAB0QIAAHAAAAAGhwMAAJEHDQpmdW5jdGlvbiBSZW1vdmUtU2VjcmV0IHsNCiAgICA8Iw0KICAgIC5TWU5PUFNJUw0KICAgIFJlbW92ZXMgYSBzZWNyZXQgZnJvbSB0aGUgdmF1bHQuIE5PVCBpbXBsZW1lbnRlZCB5ZXQuDQoNCiAgICAuREVTQ1JJUFRJT04NCiAgICBSZW1vdmVzIGEgc2VjcmV0IGZyb20gdGhlIHZhdWx0LiBOT1QgaW1wbGVtZW50ZWQgeWV0Lg0KDQogICAgLlBBUkFNRVRFUiBOYW1lDQogICAgTmFtZSB0byBiZSBzZWFyY2hlZCBmb3IuDQoNCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQ0KICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuDQoNCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0Lg0KDQogICAgLkVYQU1QTEUNCiAgICBBbiBleGFtcGxlDQogICAgaXMgbm90IG5lY2Nlc3NhcnkNCg0KICAgIEFzIG5vdCBpbXBsZW1lbnRlZA0KDQogICAgLk5PVEVTDQogICAgR2VuZXJhbCBub3Rlcw0KICAgICM+DQogICAgW0RpYWdub3N0aWNzLkNvZGVBbmFseXNpcy5TdXBwcmVzc01lc3NhZ2VBdHRyaWJ1dGUoJ1BTUmV2aWV3VW51c2VkUGFyYW1ldGVyJywgJycpXQ0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1VzZVNob3VsZFByb2Nlc3Nmb3JTdGF0ZUNoYW5naW5nRnVuY3Rpb25zJywgJycpXQ0KICAgIFtDbWRsZXRCaW5kaW5nKCldDQogICAgcGFyYW0gKA0KICAgICAgICBbc3RyaW5nXSAkTmFtZSwNCiAgICAgICAgW3N0cmluZ10gJFZhdWx0TmFtZSwNCiAgICAgICAgW2hhc2h0YWJsZV0gJEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQogICAgKQ0KICAgIHRocm93ICJOb3QgSW1wbGVtZW50ZWQiDQp9DQoNCgEJiAMAAAmJAwAABooDAAARUmVtb3ZlLVNlY3JldC5wczEGiwMAAHNTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cZnVuY3Rpb25zXFJlbW92ZS1TZWNyZXQucHMxCVsAAAAJjQMAAAmOAwAAAdICAABwAAAABo8DAAD9CWZ1bmN0aW9uIFNldC1TZWNyZXQgew0KICAgIDwjDQogICAgLlNZTk9QU0lTDQogICAgVXBkYXRlcyBhIHNlY3JldCBzdG9yZWQgaW4gdGhlIHZhdWx0Lg0KDQogICAgLkRFU0NSSVBUSU9ODQogICAgVXBkYXRlcyBhIHNlY3JldCBzdG9yZWQgaW4gdGhlIHZhdWx0Lg0KDQogICAgLlBBUkFNRVRFUiBOYW1lDQogICAgTmFtZSBvZiB0aGUgZW50cnkNCg0KICAgIC5QQVJBTUVURVIgU2VjcmV0DQogICAgVGhlIE5ldyBTZWNyZXQuIENhbiBiZSBhIFNlY3VyZVN0cmluZyBvciBhIFBTQ3JlZGVudGlhbC1vYmplY3QNCg0KICAgIC5QQVJBTUVURVIgVmF1bHROYW1lDQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4NCg0KICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuDQoNCiAgICAuRVhBTVBMRQ0KICAgIFNldC1TZWNyZXQgLVZlcmJvc2UgLVZhdWx0ICRWYXVsdG5hbWUgLVNlY3JldCAoR2V0LUNyZWRlbnRpYWwpIC1OYW1lIGZvbw0KDQogICAgVXBkYXRlcyB1c2VybmFtZSBhbmQgcGFzc3dvcmQgb2YgdGhlIGVudHJ5Lg0KDQogICAgLk5PVEVTDQogICAgR2VuZXJhbCBub3Rlcw0KICAgICM+DQogICAgW0NtZGxldEJpbmRpbmcoKV0NCiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNVc2VTaG91bGRQcm9jZXNzZm9yU3RhdGVDaGFuZ2luZ0Z1bmN0aW9ucycsICcnKV0NCiAgICBbRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzLlN1cHByZXNzTWVzc2FnZUF0dHJpYnV0ZSgnUFNVc2VPdXRwdXRUeXBlQ29ycmVjdGx5JywgJycpXQ0KICAgIHBhcmFtICgNCiAgICAgICAgW3N0cmluZ10gJE5hbWUsDQogICAgICAgIFtvYmplY3RdICRTZWNyZXQsDQogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsDQogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgICkNCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUNCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICBpZiAoJEFkZGl0aW9uYWxQYXJhbWV0ZXJzLlZlcmJvc2UpIHsgJFZlcmJvc2VQcmVmZXJlbmNlID0gJ2NvbnRpbnVlJyB9DQogICAgIyBUT0RPIFBlcmZvcm0gdXBkYXRlIHZvb2RvbyA7LSkNCiAgICBXYWl0LVBTRk1lc3NhZ2UNCiAgICByZXR1cm4gJHRydWUNCn0NCg0KAQmQAwAACZEDAAAGkgMAAA5TZXQtU2VjcmV0LnBzMQaTAwAAcFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnNcU2V0LVNlY3JldC5wczEJWwAAAAmVAwAACZYDAAAB0wIAAHAAAAAGlwMAANULZnVuY3Rpb24gU2V0LVNlY3JldEluZm8gew0KICAgIDwjDQogICAgLlNZTk9QU0lTDQogICAgVXBkYXRlcyBhZGRpdGlvbmFsIGZpZWxkcyBvZiBhIHNpbmdsZSBlbnRyeS4NCg0KICAgIC5ERVNDUklQVElPTg0KICAgIFVwZGF0ZXMgYWRkaXRpb25hbCBmaWVsZHMgb2YgYSBzaW5nbGUgZW50cnkuDQoNCiAgICAuUEFSQU1FVEVSIE5hbWUNCiAgICBOYW1lIG9mIHRoZSBlbnRyeQ0KDQogICAgLlBBUkFNRVRFUiBNZXRhZGF0YQ0KICAgIFRoZSBIYXNoVGFibGUgd2l0aCB0aGUgZmllbGRzIHRvIHVwZGF0ZS4NCiAgICBQb3NzaWJsZSBLZXlzOiAnVXNlcm5hbWUnLCAnUGFzc3dvcmQnLCAnTmFtZScsICdNZW1vJw0KDQogICAgLlBBUkFNRVRFUiBWYXVsdE5hbWUNCiAgICBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHZhdWx0Lg0KDQogICAgLlBBUkFNRVRFUiBBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgIEFkZGl0aW9uYWwgcGFyYW1ldGVycyB3aGljaCB3aGVyZSBjb25maWd1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSB2YXVsdC4NCg0KICAgIC5FWEFNUExFDQogICAgU2V0LVNlY3JldEluZm8gIC1WYXVsdCAkVmF1bHRuYW1lICAtTmFtZSBmb28gLU1ldGFkYXRhIEB7bWVtbz0nTm90aXogMic7dXNlcm5hbWU9J2Zvbyc7cGFzc3dvcmQ9JG15TmV3U2VjcmV0fQ0KDQogICAgVXBkYXRlcyB0aGUgZW50cnkgd2l0aCBuZXcgbWVtby4NCg0KICAgIC5FWEFNUExFDQogICAgU2V0LVNlY3JldEluZm8gIC1WYXVsdCAkVmF1bHRuYW1lICAtTmFtZSBmb28gLU1ldGFkYXRhIEB7bmFtZT0nQmFyJ30NCg0KICAgIFJlbmFtZXMgdGhlIGVudHJ5ICdmb28nIHRvICdCYXInDQoNCiAgICAuTk9URVMNCiAgICBHZW5lcmFsIG5vdGVzDQogICAgIz4NCiAgICBbQ21kbGV0QmluZGluZygpXQ0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1VzZVNob3VsZFByb2Nlc3Nmb3JTdGF0ZUNoYW5naW5nRnVuY3Rpb25zJywgJycpXQ0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1VzZU91dHB1dFR5cGVDb3JyZWN0bHknLCAnJyldDQogICAgcGFyYW0gKA0KICAgICAgICBbc3RyaW5nXSAkTmFtZSwNCiAgICAgICAgW2hhc2h0YWJsZV0gJE1ldGFkYXRhLA0KICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLA0KICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICApDQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlDQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQogICAgaWYgKCRBZGRpdGlvbmFsUGFyYW1ldGVycy5WZXJib3NlKSB7ICRWZXJib3NlUHJlZmVyZW5jZSA9ICdjb250aW51ZScgfQ0KICAgICMgVE9ETyBQZXJmb3JtIHVwZGF0ZSB2b29kb28gOy0pDQogICAgV2FpdC1QU0ZNZXNzYWdlDQogICAgcmV0dXJuICR0cnVlDQp9DQoBCZgDAAAJmQMAAAaaAwAAElNldC1TZWNyZXRJbmZvLnBzMQabAwAAdFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnNcU2V0LVNlY3JldEluZm8ucHMxCVsAAAAJnQMAAAmeAwAAAdQCAABwAAAABp8DAADZCg0KZnVuY3Rpb24gVGVzdC1TZWNyZXRWYXVsdCB7DQogICAgPCMNCiAgICAuU1lOT1BTSVMNCiAgICBUZXN0cyBpZiB0aGUgdmF1bHQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgYW5kIGlmIGl0IGlzIHVubG9ja2VkLg0KDQogICAgLkRFU0NSSVBUSU9ODQogICAgVGVzdHMgaWYgdGhlIHZhdWx0IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCBpZiBpdCBpcyB1bmxvY2tlZC4NCg0KICAgIC5QQVJBTUVURVIgVmF1bHROYW1lDQogICAgVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB2YXVsdC4NCg0KICAgIC5QQVJBTUVURVIgQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgd2hpY2ggd2hlcmUgY29uZmlndXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgdmF1bHQuDQoNCiAgICAuRVhBTVBMRQ0KICAgIFRlc3QtU2VjcmV0VmF1bHQgLVZhdWx0TmFtZSAkdmF1bHRuYW1lDQoNCiAgICBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bGwNCg0KICAgIC5OT1RFUw0KICAgIEdlbmVyYWwgbm90ZXMNCiAgICAjPg0KICAgIFtDbWRsZXRCaW5kaW5nKCldDQogICAgcGFyYW0gKA0KICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLA0KICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICApDQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlDQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQogICAgaWYgKCRBZGRpdGlvbmFsUGFyYW1ldGVycy5WZXJib3NlKSB7ICRWZXJib3NlUHJlZmVyZW5jZSA9ICdjb250aW51ZScgfQ0KICAgIFdyaXRlLVBTRk1lc3NhZ2UgICJUZXN0LVNlY3JldFZhdWx0IGZyb20gJFZhdWx0TmFtZSwgQWRkaXRpb25hbFBhcmFtZXRlcnM9JCgkQWRkaXRpb25hbFBhcmFtZXRlcnN8Q29udmVydFRvLUpzb24gLUNvbXByZXNzKSINCg0KICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFZlcmJvc2UgIlNlY3JldE1hbmFnZW1lbnQ6IFRlc3RpbmcgVmF1bHQgJHtWYXVsdE5hbWV9Ig0KICAgICR2YXVsdCA9IEdldC1TZWNyZXRWYXVsdCAkVmF1bHROYW1lIC1FcnJvckFjdGlvbiBTdG9wDQogICAgaWYgKCR2YXVsdC5Nb2R1bGVOYW1lIC1uZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvicpIHsNCiAgICAgICAgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgRXJyb3IgIiR2YXVsdE5hbWUgd2FzIGZvdW5kIGJ1dCBpcyBub3QgYSDDvm5hbWXDviBWYXVsdC4iDQogICAgICAgIFdhaXQtUFNGTWVzc2FnZQ0KICAgICAgICByZXR1cm4gJGZhbHNlDQogICAgfQ0KICAgICMgVE9ETyBQZXJmb3JtIHNvbWUgdGVzdGluZyB2b29kb28gOy0pDQogICAgcmV0dXJuICR0cnVlDQp9DQoBCaADAAAJoQMAAAaiAwAAFFRlc3QtU2VjcmV0VmF1bHQucHMxBqMDAAB2U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGZ1bmN0aW9uc1xUZXN0LVNlY3JldFZhdWx0LnBzMQlbAAAACaUDAAAJpgMAAAHVAgAAcAAAAAanAwAA9gpmdW5jdGlvbiBVbmxvY2stU2VjcmV0VmF1bHQgew0KICAgIDwjDQogICAgLlNZTk9QU0lTDQogICAgVW5sb2NrcyB0aGUgdmF1bHQuDQoNCiAgICAuREVTQ1JJUFRJT04NCiAgICBVbmxvY2tzIHRoZSB2YXVsdC4NCg0KICAgIC5QQVJBTUVURVIgUGFzc3dvcmQNCiAgICBUaGUgcGFzc3dvcmQgbmVlZGVkIGZvciB1bmxvY2tpbmcuDQoNCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQ0KICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuDQoNCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0Lg0KDQogICAgLkVYQU1QTEUNCiAgICBVbmxvY2stU2VjcmV0VmF1bHQgLVZhdWx0TmFtZSAkdmF1bHROYW1lIC1QYXNzd29yZCAoUmVhZC1Ib3N0IC1Bc1NlY3VyZVN0cmluZykNCg0KICAgIFVubG9ja3MgdGhlIHZhdWx0DQoNCiAgICAuTk9URVMNCiAgICBHZW5lcmFsIG5vdGVzDQogICAgIz4NCiAgICBbQ21kbGV0QmluZGluZygpXQ0KICAgIHBhcmFtICgNCiAgICAgICAgW1NlY3VyZVN0cmluZ10gJFBhc3N3b3JkLA0KICAgICAgICBbc3RyaW5nXSAkVmF1bHROYW1lLA0KICAgICAgICBbaGFzaHRhYmxlXSAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCiAgICApDQogICAgIyBXb3JrYXJvdW5kIENhc2VTZW5zaXRpdmUgSGFzaFRhYmxlDQogICAgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzID0gQHt9ICsgJEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQoNCiAgICBXcml0ZS1QU0ZNZXNzYWdlICJVbmxvY2tpbmcgU2VjcmV0VmF1bHQgJFZhdWx0TmFtZSwgQWRkaXRpb25hbFBhcmFtZXRlcnM9JCgkQWRkaXRpb25hbFBhcmFtZXRlcnN8Q29udmVydFRvLUpzb24gLUNvbXByZXNzKSINCiAgICAkdmF1bHQgPSBHZXQtU2VjcmV0VmF1bHQgJFZhdWx0TmFtZSAtRXJyb3JBY3Rpb24gU3RvcA0KICAgIGlmICgkdmF1bHQuTW9kdWxlTmFtZSAtbmUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74nKSB7DQogICAgICAgIFdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEVycm9yICIkdmF1bHROYW1lIHdhcyBmb3VuZCBidXQgaXMgbm90IGEgw75uYW1lw74gVmF1bHQuIg0KICAgICAgICBXYWl0LVBTRk1lc3NhZ2UNCiAgICAgICAgcmV0dXJuICRmYWxzZQ0KICAgIH0NCiAgICAjIFRPRE8gU2hvdWxkIHRoZSBtYXN0ZXIgcGFzc3dvcmQgYmUgY2FjaGVkPw0KICAgICMgU2V0LVZhcmlhYmxlIC1OYW1lICJWYXVsdF8ke3ZhdWx0TmFtZX1fTWFzdGVyUGFzc3dvcmQiIC1TY29wZSBTY3JpcHQgLVZhbHVlICRQYXNzd29yZCAtRm9yY2UNCg0KICAgICMgVE9ETyBQZXJmb3JtIHRoZSBjb25uZWN0aW9uIHZvb2RvbyA7LSkNCiAgICByZXR1cm4gJHRydWUNCn0BCagDAAAJqQMAAAaqAwAAFlVubG9jay1TZWNyZXRWYXVsdC5wczEGqwMAAHhTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cZnVuY3Rpb25zXFVubG9jay1TZWNyZXRWYXVsdC5wczEJWwAAAAmtAwAACa4DAAAB1gIAAHAAAAAGrwMAAJgIZnVuY3Rpb24gVW5yZWdpc3Rlci1TZWNyZXRWYXVsdCB7DQogICAgPCMNCiAgICAuU1lOT1BTSVMNCiAgICBVbnJlZ2lzdGVycyB0aGUgdmF1bHQgYW5kIHJlbW92ZXMgaW5NZW1vcnkgZGF0YSBmb3Igc2VjdXJpdHkuDQoNCiAgICAuREVTQ1JJUFRJT04NCiAgICBVbnJlZ2lzdGVycyB0aGUgdmF1bHQgYW5kIHJlbW92ZXMgaW5NZW1vcnkgZGF0YSBmb3Igc2VjdXJpdHkuDQoNCiAgICAuUEFSQU1FVEVSIFZhdWx0TmFtZQ0KICAgIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdmF1bHQuDQoNCiAgICAuUEFSQU1FVEVSIEFkZGl0aW9uYWxQYXJhbWV0ZXJzDQogICAgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHdoaWNoIHdoZXJlIGNvbmZpZ3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHZhdWx0Lg0KDQogICAgLkVYQU1QTEUNCiAgICBVbnJlZ2lzdGVyLVNlY3JldFZhdWx0IC1WYXVsdE5hbWUgJHZhdWx0TmFtZQ0KDQogICAgUmVtb3ZlcyB0aGUgcmVnaXN0cmF0aW9uDQoNCiAgICAuTk9URVMNCiAgICBHZW5lcmFsIG5vdGVzDQogICAgIz4NCiAgICBbQ21kbGV0QmluZGluZygpXQ0KICAgIFtEaWFnbm9zdGljcy5Db2RlQW5hbHlzaXMuU3VwcHJlc3NNZXNzYWdlQXR0cmlidXRlKCdQU1Jldmlld1VudXNlZFBhcmFtZXRlcicsICcnKV0NCiAgICBwYXJhbSAoDQogICAgICAgIFtzdHJpbmddICRWYXVsdE5hbWUsDQogICAgICAgIFtoYXNodGFibGVdICRBZGRpdGlvbmFsUGFyYW1ldGVycw0KICAgICkNCiAgICAjIFdvcmthcm91bmQgQ2FzZVNlbnNpdGl2ZSBIYXNoVGFibGUNCiAgICAkQWRkaXRpb25hbFBhcmFtZXRlcnMgPSBAe30gKyAkQWRkaXRpb25hbFBhcmFtZXRlcnMNCg0KICAgICMgVE9ETyBBZGQgeW91ciBzcGVjaWZpYyBkaXNjb25uZWN0aW9uIGNvbW1hbmRzLCBlLmcuIHJlbW92aW5nIHRoZSBzdG9yZWQgbWFzdGVyIHBhc3N3b3JkDQogICAgIyBSZW1vdmUtVmFyaWFibGUgLU5hbWUgIlZhdWx0XyR7dmF1bHROYW1lfV9NYXN0ZXJQYXNzd29yZCIgLVNjb3BlIFNjcmlwdCAtRm9yY2UgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUNCn0NCgEJsAMAAAmxAwAABrIDAAAaVW5yZWdpc3Rlci1TZWNyZXRWYXVsdC5wczEGswMAAHxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cZnVuY3Rpb25zXFVucmVnaXN0ZXItU2VjcmV0VmF1bHQucHMxCVsAAAAJtQMAAAm2AwAAAdcCAABwAAAABrcDAACwAiMgRnVuY3Rpb25zLlNoYXJlZEludGVybmFsDQoNClRoaXMgaXMgdGhlIGZvbGRlciB3aGVyZSBpbnRlcm5hbCBmdW5jdGlvbnMgZ28gd2hpY2ggd2lsbCBiZSBpbXBvcnRlZCBmcm9tIHRoZSBtYWluDQphbmQgdGhlIGV4dGVuc2lvbiBtb2R1bGUuDQoNClRoZSBtb2R1bGUgd2lsbCBwaWNrIHVwIGFsbCAucHMxIGZpbGVzIHJlY3Vyc2l2ZWx5LiBJZiB0aGUgbW9kdWxlIGlzIGJ1aWxkIHdpdGgNCid2c3RzLWJ1aWxkLnBzMScgdGhlIGNvbnRlbnQgb2YgYWxsICoucHMxIGZpbGVzIGlzIGNvcGllZCBpbnRvIHRoZSAqLnBzbTEgZmlsZS4BCbgDAAAJuQMAAAa6AwAACXJlYWRtZS5tZAa7AwAAelNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxmdW5jdGlvbnMuc2hhcmVkaW50ZXJuYWxccmVhZG1lLm1kCVsAAAAJvQMAAAm+AwAAAdgCAAA+AAAACb8DAAAGwAMAAA5jb25maWd1cmF0aW9ucwbBAwAAb1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxpbnRlcm5hbFxjb25maWd1cmF0aW9ucwlbAAAACcMDAAAJxAMAAAHZAgAAPgAAAAnFAwAABsYDAAAJZnVuY3Rpb25zBscDAABqU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXGZ1bmN0aW9ucwlbAAAACckDAAAJygMAAAHaAgAAPgAAAAnLAwAABswDAAAMc2NyaXB0YmxvY2tzBs0DAABtU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXHNjcmlwdGJsb2NrcwlbAAAACc8DAAAJ0AMAAAHbAgAAPgAAAAnRAwAABtIDAAAHc2NyaXB0cwbTAwAAaFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxpbnRlcm5hbFxzY3JpcHRzCVsAAAAJ1QMAAAnWAwAAAdwCAAA+AAAACdcDAAAG2AMAAAR0ZXBwBtkDAABlU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXHRlcHAJWwAAAAnbAwAACdwDAAAB3QIAAD4AAAAJ3QMAAAbeAwAACWZ1bmN0aW9ucwbfAwAAZ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblx0ZXN0c1xmdW5jdGlvbnMJWwAAAAnhAwAACeIDAAAB3gIAAD4AAAAJ4wMAAAbkAwAAB2dlbmVyYWwG5QMAAGVTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cdGVzdHNcZ2VuZXJhbAlbAAAACecDAAAJ6AMAAAHfAgAAcAAAAAbpAwAAqRtwYXJhbSAoDQoJJFRlc3RHZW5lcmFsID0gJHRydWUsDQoJDQoJJFRlc3RGdW5jdGlvbnMgPSAkdHJ1ZSwNCgkNCglbVmFsaWRhdGVTZXQoJ05vbmUnLCAnTm9ybWFsJywgJ0RldGFpbGVkJywgJ0RpYWdub3N0aWMnKV0NCglbQWxpYXMoJ1Nob3cnKV0NCgkkT3V0cHV0ID0gIk5vbmUiLA0KCQ0KCSRJbmNsdWRlID0gIioiLA0KCQ0KCSRFeGNsdWRlID0gIiINCikNCg0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJTdGFydGluZyBUZXN0cyINCg0KV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgSW1wb3J0YW50IC1NZXNzYWdlICJJbXBvcnRpbmcgTW9kdWxlIg0KDQokZ2xvYmFsOnRlc3Ryb290ID0gJFBTU2NyaXB0Um9vdA0KJGdsb2JhbDpfX3Blc3Rlcl9kYXRhID0gQHsgfQ0KDQpSZW1vdmUtTW9kdWxlIMO+bmFtZcO+IC1FcnJvckFjdGlvbiBJZ25vcmUNCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw74ucHNkMSINCkltcG9ydC1Nb2R1bGUgIiRQU1NjcmlwdFJvb3RcLi5cw75uYW1lw74ucHNtMSIgLUZvcmNlDQoNCiMgTmVlZCB0byBpbXBvcnQgZXhwbGljaXRseSBzbyB3ZSBjYW4gdXNlIHRoZSBjb25maWd1cmF0aW9uIGNsYXNzDQpJbXBvcnQtTW9kdWxlIFBlc3Rlcg0KDQrDviF0ZXN0Zm9sZGVyIcO+DQoNCiR0b3RhbEZhaWxlZCA9IDANCiR0b3RhbFJ1biA9IDANCg0KJHRlc3RyZXN1bHRzID0gQCgpDQokY29uZmlnID0gW1Blc3RlckNvbmZpZ3VyYXRpb25dOjpEZWZhdWx0DQrDviFwZXN0ZXJjb25maWchw74NCg0KI3JlZ2lvbiBSdW4gR2VuZXJhbCBUZXN0cw0KaWYgKCRUZXN0R2VuZXJhbCkNCnsNCglXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBJbXBvcnRhbnQgLU1lc3NhZ2UgIk1vZHVsZXMgaW1wb3J0ZWQsIHByb2NlZWRpbmcgd2l0aCBnZW5lcmFsIHRlc3RzIg0KCWZvcmVhY2ggKCRmaWxlIGluIChHZXQtQ2hpbGRJdGVtICIkUFNTY3JpcHRSb290XGdlbmVyYWwiIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIiouVGVzdHMucHMxIikpDQoJew0KCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9DQoJCWlmICgkZmlsZS5OYW1lIC1saWtlICRFeGNsdWRlKSB7IGNvbnRpbnVlIH0NCg0KCQlXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBTaWduaWZpY2FudCAtTWVzc2FnZSAiICBFeGVjdXRpbmcgPGM9J2VtJz4kKCRmaWxlLk5hbWUpPC9jPiINCgkJJGNvbmZpZy5UZXN0UmVzdWx0Lk91dHB1dFBhdGggPSBKb2luLVBhdGggIiRQU1NjcmlwdFJvb3RcLi5cLi5cVGVzdFJlc3VsdHMiICJURVNULSQoJGZpbGUuQmFzZU5hbWUpLnhtbCINCgkJJGNvbmZpZy5SdW4uUGF0aCA9ICRmaWxlLkZ1bGxOYW1lDQoJCSRjb25maWcuUnVuLlBhc3NUaHJ1ID0gJHRydWUNCgkJJGNvbmZpZy5PdXRwdXQuVmVyYm9zaXR5ID0gJE91dHB1dA0KICAgIAkkcmVzdWx0cyA9IEludm9rZS1QZXN0ZXIgLUNvbmZpZ3VyYXRpb24gJGNvbmZpZw0KCQlmb3JlYWNoICgkcmVzdWx0IGluICRyZXN1bHRzKQ0KCQl7DQoJCQkkdG90YWxSdW4gKz0gJHJlc3VsdC5Ub3RhbENvdW50DQoJCQkkdG90YWxGYWlsZWQgKz0gJHJlc3VsdC5GYWlsZWRDb3VudA0KCQkJJHJlc3VsdC5UZXN0cyB8IFdoZXJlLU9iamVjdCBSZXN1bHQgLW5lICdQYXNzZWQnIHwgRm9yRWFjaC1PYmplY3Qgew0KCQkJCSR0ZXN0cmVzdWx0cyArPSBbcHNjdXN0b21vYmplY3RdQHsNCgkJCQkJQmxvY2sgICAgPSAkXy5CbG9jaw0KCQkJCQlOYW1lCSA9ICJJdCAkKCRfLk5hbWUpIg0KCQkJCQlSZXN1bHQgICA9ICRfLlJlc3VsdA0KCQkJCQlNZXNzYWdlICA9ICRfLkVycm9yUmVjb3JkLkRpc3BsYXlFcnJvck1lc3NhZ2UNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9DQojZW5kcmVnaW9uIFJ1biBHZW5lcmFsIFRlc3RzDQoNCiRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplciB8IE91dC1Ib3N0DQoNCiNyZWdpb24gVGVzdCBDb21tYW5kcw0KaWYgKCRUZXN0RnVuY3Rpb25zKQ0Kew0KCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIEltcG9ydGFudCAtTWVzc2FnZSAiUHJvY2VlZGluZyB3aXRoIGluZGl2aWR1YWwgdGVzdHMiDQoJZm9yZWFjaCAoJGZpbGUgaW4gKEdldC1DaGlsZEl0ZW0gIiRQU1NjcmlwdFJvb3RcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqVGVzdHMucHMxIikpDQoJew0KCQlpZiAoJGZpbGUuTmFtZSAtbm90bGlrZSAkSW5jbHVkZSkgeyBjb250aW51ZSB9DQoJCWlmICgkZmlsZS5OYW1lIC1saWtlICRFeGNsdWRlKSB7IGNvbnRpbnVlIH0NCgkJDQoJCVdyaXRlLVBTRk1lc3NhZ2UgLUxldmVsIFNpZ25pZmljYW50IC1NZXNzYWdlICIgIEV4ZWN1dGluZyAkKCRmaWxlLk5hbWUpIg0KCQkkY29uZmlnLlRlc3RSZXN1bHQuT3V0cHV0UGF0aCA9IEpvaW4tUGF0aCAiJFBTU2NyaXB0Um9vdFwuLlwuLlxUZXN0UmVzdWx0cyIgIlRFU1QtJCgkZmlsZS5CYXNlTmFtZSkueG1sIg0KCQkkY29uZmlnLlJ1bi5QYXRoID0gJGZpbGUuRnVsbE5hbWUNCgkJJGNvbmZpZy5SdW4uUGFzc1RocnUgPSAkdHJ1ZQ0KCQkkY29uZmlnLk91dHB1dC5WZXJib3NpdHkgPSAkT3V0cHV0DQogICAgCSRyZXN1bHRzID0gSW52b2tlLVBlc3RlciAtQ29uZmlndXJhdGlvbiAkY29uZmlnDQoJCWZvcmVhY2ggKCRyZXN1bHQgaW4gJHJlc3VsdHMpDQoJCXsNCgkJCSR0b3RhbFJ1biArPSAkcmVzdWx0LlRvdGFsQ291bnQNCgkJCSR0b3RhbEZhaWxlZCArPSAkcmVzdWx0LkZhaWxlZENvdW50DQoJCQkkcmVzdWx0LlRlc3RzIHwgV2hlcmUtT2JqZWN0IFJlc3VsdCAtbmUgJ1Bhc3NlZCcgfCBGb3JFYWNoLU9iamVjdCB7DQoJCQkJJHRlc3RyZXN1bHRzICs9IFtwc2N1c3RvbW9iamVjdF1Aew0KCQkJCQlCbG9jayAgICA9ICRfLkJsb2NrDQoJCQkJCU5hbWUJID0gIkl0ICQoJF8uTmFtZSkiDQoJCQkJCVJlc3VsdCAgID0gJF8uUmVzdWx0DQoJCQkJCU1lc3NhZ2UgID0gJF8uRXJyb3JSZWNvcmQuRGlzcGxheUVycm9yTWVzc2FnZQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCn0NCiNlbmRyZWdpb24gVGVzdCBDb21tYW5kcw0KDQokdGVzdHJlc3VsdHMgfCBTb3J0LU9iamVjdCBEZXNjcmliZSwgQ29udGV4dCwgTmFtZSwgUmVzdWx0LCBNZXNzYWdlIHwgRm9ybWF0LUxpc3QNCg0KaWYgKCR0b3RhbEZhaWxlZCAtZXEgMCkgeyBXcml0ZS1QU0ZNZXNzYWdlIC1MZXZlbCBDcml0aWNhbCAtTWVzc2FnZSAiQWxsIDxjPSdlbSc+JHRvdGFsUnVuPC9jPiB0ZXN0cyBleGVjdXRlZCB3aXRob3V0IGEgc2luZ2xlIGZhaWx1cmUhIiB9DQplbHNlIHsgV3JpdGUtUFNGTWVzc2FnZSAtTGV2ZWwgQ3JpdGljYWwgLU1lc3NhZ2UgIjxjPSdlbSc+JHRvdGFsRmFpbGVkIHRlc3RzPC9jPiBvdXQgb2YgPGM9J3N1Yic+JHRvdGFsUnVuPC9jPiB0ZXN0cyBmYWlsZWQhIiB9DQoNCmlmICgkdG90YWxGYWlsZWQgLWd0IDApDQp7DQoJdGhyb3cgIiR0b3RhbEZhaWxlZCAvICR0b3RhbFJ1biB0ZXN0cyBmYWlsZWQhIg0KfQEJ6gMAAAnrAwAABuwDAAAKcGVzdGVyLnBzMQbtAwAAaFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblx0ZXN0c1xwZXN0ZXIucHMxCVsAAAAJ7wMAAAnwAwAAAeACAABwAAAABvEDAACiByMgRGVzY3JpcHRpb24NCg0KVGhpcyBpcyB0aGUgZm9sZGVyLCB3aGVyZSBhbGwgdGhlIHRlc3RzIGdvLg0KDQpUaG9zZSBhcmUgc3ViZGl2aWRlZCBpbiB0d28gY2F0ZWdvcmllczoNCg0KIC0gR2VuZXJhbA0KIC0gRnVuY3Rpb24NCg0KIyMgR2VuZXJhbCBUZXN0cw0KDQpHZW5lcmFsIHRlc3RzIGFyZSBmdW5jdGlvbiBnZW5lcmljIGFuZCB0ZXN0IGZvciBnZW5lcmFsIHBvbGljaWVzLg0KDQpUaGVzZSB0ZXN0IHNjYW4gYW5zd2VyIHF1ZXN0aW9ucyBzdWNoIGFzOg0KDQogLSBJcyBteSBtb2R1bGUgZm9sbG93aW5nIG15IHN0eWxlIGd1aWRlcz8NCiAtIERvZXMgYW55IG9mIG15IHNjcmlwdHMgaGF2ZSBhIHN5bnRheCBlcnJvcj8NCiAtIERvIG15IHNjcmlwdHMgdXNlIGNvbW1hbmRzIEkgZG8gbm90IHdhbnQgdGhlbSB0byB1c2U/DQogLSBEbyBteSBjb21tYW5kcyBmb2xsb3cgYmVzdCBwcmFjdGljZXM/DQogLSBEbyBteSBjb21tYW5kcyBoYXZlIHByb3BlciBoZWxwPw0KDQpCYXNpY2FsbHksIHRoZXNlIGFsbG93IGEgZ2VuZXJhbCBtb2R1bGUgaGVhbHRoIGNoZWNrLg0KDQpUaGVzZSB0ZXN0cyBhcmUgYWxyZWFkeSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZSB0ZW1wbGF0ZS4NCg0KIyMgRnVuY3Rpb24gVGVzdHMNCg0KQSBoZWFsdGh5IG1vZHVsZSBzaG91bGQgcHJvdmlkZSB1bml0IGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgdGhlIGNvbW1hbmRzICYgY29tcG9uZW50cyBpdCBzaGlwcy4NCk9ubHkgdGhlbiBjYW4gYmUgZ3VhcmFudGVlZCwgdGhhdCB0aGV5IHdpbGwgYWN0dWFsbHkgcGVyZm9ybSBhcyBwcm9taXNlZC4NCg0KSG93ZXZlciwgYXMgZWFjaCBzdWNoIHRlc3QgbXVzdCBiZSBzcGVjaWZpYyB0byB0aGUgZnVuY3Rpb24gaXQgdGVzdHMsIHRoZXJlIGNhbm5vdCBiZSBtdWNoIGluIHRoZSB3YXkgb2YgdGVtcGxhdGVzLgEJ8gMAAAnzAwAABvQDAAAJcmVhZG1lLm1kBvUDAABnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHRlc3RzXHJlYWRtZS5tZAlbAAAACfcDAAAJ+AMAAAHhAgAAcAAAAAb5AwAArAsjIFhNTA0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgcHJvamVjdCBYTUwgZmlsZXMgZ28sIG5vdGFibHk6DQoNCiAtIEZvcm1hdCBYTUwNCiAtIFR5cGUgRXh0ZW5zaW9uIFhNTA0KDQpFeHRlcm5hbCBoZWxwIGZpbGVzIHNob3VsZCBfbm90XyBiZSBwbGFjZWQgaW4gdGhpcyBmb2xkZXIhDQoNCiMjIE5vdGVzIG9uIEZpbGVzIGFuZCBOYW1pbmcNCg0KVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGZvcm1hdCBmaWxlIGFuZCBvbmUgdHlwZSBleHRlbnNpb24gZmlsZSBwZXIgcHJvamVjdCwgYXMgaW1wb3J0aW5nIHRoZW0gaGFzIGEgbm90YWJsZSBpbXBhY3Qgb24gaW1wb3J0IHRpbWVzLg0KDQogLSBUaGUgRm9ybWF0IFhNTCBzaG91bGQgYmUgbmFtZWQgYMO+bmFtZcO+LkZvcm1hdC5wczF4bWxgDQogLSBUaGUgVHlwZSBFeHRlbnNpb24gWE1MIHNob3VsZCBiZSBuYW1lZCBgw75uYW1lw74uVHlwZXMucHMxeG1sYA0KDQojIyBUb29scw0KDQojIyMgTmV3LVBTTURGb3JtYXRUYWJsZURlZmluaXRpb24NCg0KVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYW4gaW5wdXQgb2JqZWN0IGFuZCBnZW5lcmF0ZSBmb3JtYXQgeG1sIGZvciBhbiBhdXRvLXNpemVkIHRhYmxlLg0KDQpJdCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBmb3JtYXRzLg0KDQojIyMgR2V0LVBTRlR5cGVTZXJpYWxpemF0aW9uRGF0YQ0KDQpgYGANCkMjIFdhcm5pbmchDQpUaGlzIHNlY3Rpb24gaXMgb25seSBpbnRlcmVzdCBpZiB5b3UncmUgdXNpbmcgQyMgdG9nZXRoZXIgd2l0aCBQb3dlclNoZWxsLg0KYGBgDQoNClRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHR5cGUgZXh0ZW5zaW9uIFhNTCB0aGF0IGFsbG93cyBQb3dlclNoZWxsIHRvIGNvbnZlcnQgdHlwZXMgd3JpdHRlbiBpbiBDIyB0byBiZSB3cml0dGVuIHRvIGZpbGUgYW5kIHJlc3RvcmVkIGZyb20gaXQgd2l0aG91dCBiZWluZyAnRGVzZXJpYWxpemVkJy4gQWxzbyB3b3JrcyBmb3Igam9icyBvciByZW1vdGluZywgaWYgYm90aCBzaWRlcyBoYXZlIHRoZSBgUFNGcmFtZXdvcmtgIG1vZHVsZSBhbmQgdHlwZSBleHRlbnNpb24gbG9hZGVkLg0KDQpJbiBvcmRlciBmb3IgYSBjbGFzcyB0byBiZSBlbGlnaWJsZSBmb3IgdGhpcywgaXQgbmVlZHMgdG8gY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOg0KDQogLSBIYXZlIHRoZSBgW1NlcmlhbGl6YWJsZV1gIGF0dHJpYnV0ZQ0KIC0gQmUgcHVibGljDQogLSBIYXZlIGFuIGVtcHR5IGNvbnN0cnVjdG9yDQogLSBBbGxvdyBhbGwgcHVibGljIHByb3BlcnRpZXMvZmllbGRzIHRvIGJlIHNldCAoZXZlbiBpZiBzZXR0aW5nIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcpIHdpdGhvdXQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLg0KDQpgYGANCm5vbi1wdWJsaWMgcHJvcGVydGllcyBhbmQgZmllbGRzIHdpbGwgYmUgbG9zdCBpbiB0aGlzIHByb2Nlc3MhDQpgYGABCfoDAAAJ+wMAAAb8AwAACXJlYWRtZS5tZAb9AwAAZVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblx4bWxccmVhZG1lLm1kCVsAAAAJ/wMAAAkABAAAAeICAABwAAAABgEEAADoBTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi0xNiI/Pg0KPENvbmZpZ3VyYXRpb24+DQoJPFZpZXdEZWZpbml0aW9ucz4NCgkJPCEtLSBGb28uQmFyIC0tPg0KCQk8Vmlldz4NCgkJCTxOYW1lPkZvby5CYXI8L05hbWU+DQoJCQk8Vmlld1NlbGVjdGVkQnk+DQoJCQkJPFR5cGVOYW1lPkZvby5CYXI8L1R5cGVOYW1lPg0KCQkJPC9WaWV3U2VsZWN0ZWRCeT4NCgkJCTxUYWJsZUNvbnRyb2w+DQoJCQkJPEF1dG9TaXplLz4NCgkJCQk8VGFibGVIZWFkZXJzPg0KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPg0KCQkJCQk8VGFibGVDb2x1bW5IZWFkZXIvPg0KCQkJCTwvVGFibGVIZWFkZXJzPg0KCQkJCTxUYWJsZVJvd0VudHJpZXM+DQoJCQkJCTxUYWJsZVJvd0VudHJ5Pg0KCQkJCQkJPFRhYmxlQ29sdW1uSXRlbXM+DQoJCQkJCQkJPFRhYmxlQ29sdW1uSXRlbT4NCgkJCQkJCQkJPFByb3BlcnR5TmFtZT5Gb288L1Byb3BlcnR5TmFtZT4NCgkJCQkJCQk8L1RhYmxlQ29sdW1uSXRlbT4NCgkJCQkJCQk8VGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJCQk8UHJvcGVydHlOYW1lPkJhcjwvUHJvcGVydHlOYW1lPg0KCQkJCQkJCTwvVGFibGVDb2x1bW5JdGVtPg0KCQkJCQkJPC9UYWJsZUNvbHVtbkl0ZW1zPg0KCQkJCQk8L1RhYmxlUm93RW50cnk+DQoJCQkJPC9UYWJsZVJvd0VudHJpZXM+DQoJCQk8L1RhYmxlQ29udHJvbD4NCgkJPC9WaWV3Pg0KCTwvVmlld0RlZmluaXRpb25zPg0KPC9Db25maWd1cmF0aW9uPgEJAgQAAAkDBAAABgQEAAAWw75uYW1lw74uRm9ybWF0LnBzMXhtbAYFBAAAclNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblx4bWxcw75uYW1lw74uRm9ybWF0LnBzMXhtbAlbAAAACQcEAAAJCAQAAAHjAgAAcAAAAAYJBAAA4Ac8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pg0KPFR5cGVzPg0KICA8IS0tIEZvby5CYXIgLS0+DQogIDxUeXBlPg0KICAgIDxOYW1lPkRlc2VyaWFsaXplZC5Gb28uQmFyPC9OYW1lPg0KICAgIDxNZW1iZXJzPg0KICAgICAgPE1lbWJlclNldD4NCiAgICAgICAgPE5hbWU+UFNTdGFuZGFyZE1lbWJlcnM8L05hbWU+DQogICAgICAgIDxNZW1iZXJzPg0KICAgICAgICAgIDxOb3RlUHJvcGVydHk+DQogICAgICAgICAgICA8TmFtZT4NCiAgICAgICAgICAgICAgVGFyZ2V0VHlwZUZvckRlc2VyaWFsaXphdGlvbg0KICAgICAgICAgICAgPC9OYW1lPg0KICAgICAgICAgICAgPFZhbHVlPg0KICAgICAgICAgICAgICBGb28uQmFyDQogICAgICAgICAgICA8L1ZhbHVlPg0KICAgICAgICAgIDwvTm90ZVByb3BlcnR5Pg0KICAgICAgICA8L01lbWJlcnM+DQogICAgICA8L01lbWJlclNldD4NCiAgICA8L01lbWJlcnM+DQogIDwvVHlwZT4NCiAgPFR5cGU+DQogICAgPE5hbWU+Rm9vLkJhcjwvTmFtZT4NCiAgICA8TWVtYmVycz4NCiAgICAgIDxDb2RlUHJvcGVydHkgSXNIaWRkZW49InRydWUiPg0KICAgICAgICA8TmFtZT5TZXJpYWxpemF0aW9uRGF0YTwvTmFtZT4NCiAgICAgICAgPEdldENvZGVSZWZlcmVuY2U+DQogICAgICAgICAgPFR5cGVOYW1lPlBTRnJhbWV3b3JrLlNlcmlhbGl6YXRpb24uU2VyaWFsaXphdGlvblR5cGVDb252ZXJ0ZXI8L1R5cGVOYW1lPg0KICAgICAgICAgIDxNZXRob2ROYW1lPkdldFNlcmlhbGl6YXRpb25EYXRhPC9NZXRob2ROYW1lPg0KICAgICAgICA8L0dldENvZGVSZWZlcmVuY2U+DQogICAgICA8L0NvZGVQcm9wZXJ0eT4NCiAgICA8L01lbWJlcnM+DQogICAgPFR5cGVDb252ZXJ0ZXI+DQogICAgICA8VHlwZU5hbWU+UFNGcmFtZXdvcmsuU2VyaWFsaXphdGlvbi5TZXJpYWxpemF0aW9uVHlwZUNvbnZlcnRlcjwvVHlwZU5hbWU+DQogICAgPC9UeXBlQ29udmVydGVyPg0KICA8L1R5cGU+DQo8L1R5cGVzPgEJCgQAAAkLBAAABgwEAAAVw75uYW1lw74uVHlwZXMucHMxeG1sBg0EAABxU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHhtbFzDvm5hbWXDvi5UeXBlcy5wczF4bWwJWwAAAAkPBAAACRAEAAAB8AIAAHAAAAAGEQQAANUBIyBEZXNjcmlwdGlvbg0KDQpUaGlzIGlzIHdoZXJlIHRoZSBmdW5jdGlvbiB0ZXN0cyBnby4NCg0KTWFrZSBzdXJlIHRvIHB1dCB0aGVtIGluIGZvbGRlcnMgcmVmbGVjdGluZyB0aGUgYWN0dWFsIG1vZHVsZSBzdHJ1Y3R1cmUuDQoNCkl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGludGVybmFsIGFuZCBwdWJsaWMgZnVuY3Rpb25zIGhlcmUuAQkSBAAACRMEAAAGFAQAAAlyZWFkbWUubWQGFQQAAE1TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cdGVzdHNcZnVuY3Rpb25zXHJlYWRtZS5tZAlbAAAACRcEAAAJGAQAAAHxAgAAcAAAAAYZBAAAggYjIExpc3Qgb2YgZm9yYmlkZGVuIGNvbW1hbmRzDQokZ2xvYmFsOkJhbm5lZENvbW1hbmRzID0gQCgNCgknV3JpdGUtSG9zdCcNCgknV3JpdGUtVmVyYm9zZScNCgknV3JpdGUtV2FybmluZycNCgknV3JpdGUtRXJyb3InDQoJJ1dyaXRlLU91dHB1dCcNCgknV3JpdGUtSW5mb3JtYXRpb24nDQoJJ1dyaXRlLURlYnVnJw0KCQ0KCSMgVXNlIENJTSBpbnN0ZWFkIHdoZXJlIHBvc3NpYmxlDQoJJ0dldC1XbWlPYmplY3QnDQoJJ0ludm9rZS1XbWlNZXRob2QnDQoJJ1JlZ2lzdGVyLVdtaUV2ZW50Jw0KCSdSZW1vdmUtV21pT2JqZWN0Jw0KCSdTZXQtV21pSW5zdGFuY2UnDQoNCgkjIFVzZSBHZXQtV2luRXZlbnQgaW5zdGVhZA0KCSdHZXQtRXZlbnRMb2cnDQopDQoNCjwjDQoJQ29udGFpbnMgbGlzdCBvZiBleGNlcHRpb25zIGZvciBiYW5uZWQgY21kbGV0cy4NCglJbnNlcnQgdGhlIGZpbGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBtYXkgY29udGFpbiB0aGVtLg0KCQ0KCUV4YW1wbGU6DQoJIldyaXRlLUhvc3QiICA9IEAoJ1dyaXRlLVBTRkhvc3RDb2xvci5wczEnLCdXcml0ZS1QU0ZNZXNzYWdlLnBzMScpDQojPg0KJGdsb2JhbDpNYXlDb250YWluQ29tbWFuZCA9IEB7DQoJIldyaXRlLUhvc3QiICA9IEAoKQ0KCSJXcml0ZS1WZXJib3NlIiA9IEAoKQ0KCSJXcml0ZS1XYXJuaW5nIiA9IEAoKQ0KCSJXcml0ZS1FcnJvciIgID0gQCgpDQoJIldyaXRlLU91dHB1dCIgPSBAKCkNCgkiV3JpdGUtSW5mb3JtYXRpb24iID0gQCgpDQoJIldyaXRlLURlYnVnIiA9IEAoKQ0KfQEJGgQAAAkbBAAABhwEAAAcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQYdBAAAXlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0c1xnZW5lcmFsXEZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEJWwAAAAkfBAAACSAEAAAB8gIAAHAAAAAGIQQAAOAYJG1vZHVsZVJvb3QgPSAoUmVzb2x2ZS1QYXRoICIkZ2xvYmFsOnRlc3Ryb290XC4uIikuUGF0aA0KDQouICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMSINCg0KRGVzY3JpYmUgIlZlcmlmeWluZyBpbnRlZ3JpdHkgb2YgbW9kdWxlIGZpbGVzIiB7DQoJQmVmb3JlQWxsIHsNCgkJZnVuY3Rpb24gR2V0LUZpbGVFbmNvZGluZw0KCQl7DQoJCTwjDQoJCQkuU1lOT1BTSVMNCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLg0KCQkJDQoJCQkuREVTQ1JJUFRJT04NCgkJCQlUZXN0cyBhIGZpbGUgZm9yIGVuY29kaW5nLg0KCQkJDQoJCQkuUEFSQU1FVEVSIFBhdGgNCgkJCQlUaGUgZmlsZSB0byB0ZXN0DQoJCSM+DQoJCQlbQ21kbGV0QmluZGluZygpXQ0KCQkJUGFyYW0gKA0KCQkJCVtQYXJhbWV0ZXIoTWFuZGF0b3J5ID0gJFRydWUsIFZhbHVlRnJvbVBpcGVsaW5lQnlQcm9wZXJ0eU5hbWUgPSAkVHJ1ZSldDQoJCQkJW0FsaWFzKCdGdWxsTmFtZScpXQ0KCQkJCVtzdHJpbmddDQoJCQkJJFBhdGgNCgkJCSkNCgkJCQ0KCQkJaWYgKCRQU1ZlcnNpb25UYWJsZS5QU1ZlcnNpb24uTWFqb3IgLWx0IDYpDQoJCQl7DQoJCQkJW2J5dGVbXV0kYnl0ZSA9IGdldC1jb250ZW50IC1FbmNvZGluZyBieXRlIC1SZWFkQ291bnQgNCAtVG90YWxDb3VudCA0IC1QYXRoICRQYXRoDQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJW2J5dGVbXV0kYnl0ZSA9IEdldC1Db250ZW50IC1Bc0J5dGVTdHJlYW0gLVJlYWRDb3VudCA0IC1Ub3RhbENvdW50IDQgLVBhdGggJFBhdGgNCgkJCX0NCgkJCQ0KCQkJaWYgKCRieXRlWzBdIC1lcSAweGVmIC1hbmQgJGJ5dGVbMV0gLWVxIDB4YmIgLWFuZCAkYnl0ZVsyXSAtZXEgMHhiZikgeyAnVVRGOCBCT00nIH0NCgkJCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVsxXSAtZXEgMHhmZikgeyAnVW5pY29kZScgfQ0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMCAtYW5kICRieXRlWzFdIC1lcSAwIC1hbmQgJGJ5dGVbMl0gLWVxIDB4ZmUgLWFuZCAkYnl0ZVszXSAtZXEgMHhmZikgeyAnVVRGMzInIH0NCgkJCWVsc2VpZiAoJGJ5dGVbMF0gLWVxIDB4MmIgLWFuZCAkYnl0ZVsxXSAtZXEgMHgyZiAtYW5kICRieXRlWzJdIC1lcSAweDc2KSB7ICdVVEY3JyB9DQoJCQllbHNlIHsgJ1Vua25vd24nIH0NCgkJfQ0KCX0NCg0KCUNvbnRleHQgIlZhbGlkYXRpbmcgUFMxIFNjcmlwdCBmaWxlcyIgew0KCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIiB8IFdoZXJlLU9iamVjdCBGdWxsTmFtZSAtTm90TGlrZSAiJG1vZHVsZVJvb3RcdGVzdHNcKiINCgkJDQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykNCgkJew0KCQkJJG5hbWUgPSAkZmlsZS5GdWxsTmFtZS5SZXBsYWNlKCIkbW9kdWxlUm9vdFwiLCAnJykNCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgVVRGOCBlbmNvZGluZyB3aXRoIEJ5dGUgT3JkZXIgTWFyayIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7DQoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjggQk9NJw0KCQkJfQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyB0cmFpbGluZyBzcGFjZSIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7DQoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMH0pLkxpbmVOdW1iZXIgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJCX0NCgkJCQ0KCQkJJHRva2VucyA9ICRudWxsDQoJCQkkcGFyc2VFcnJvcnMgPSAkbnVsbA0KCQkJJGFzdCA9IFtTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLkxhbmd1YWdlLlBhcnNlcl06OlBhcnNlRmlsZSgkZmlsZS5GdWxsTmFtZSwgW3JlZl0kdG9rZW5zLCBbcmVmXSRwYXJzZUVycm9ycykNCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgbm8gc3ludGF4IGVycm9ycyIgLVRlc3RDYXNlcyBAeyBwYXJzZUVycm9ycyA9ICRwYXJzZUVycm9ycyB9IHsNCgkJCQkkcGFyc2VFcnJvcnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJCX0NCgkJCQ0KCQkJZm9yZWFjaCAoJGNvbW1hbmQgaW4gJGdsb2JhbDpCYW5uZWRDb21tYW5kcykNCgkJCXsNCgkJCQlpZiAoJGdsb2JhbDpNYXlDb250YWluQ29tbWFuZFsiJGNvbW1hbmQiXSAtbm90Y29udGFpbnMgJGZpbGUuTmFtZSkNCgkJCQl7DQoJCQkJCUl0ICJbJG5hbWVdIFNob3VsZCBub3QgdXNlICRjb21tYW5kIiAtVGVzdENhc2VzIEB7IHRva2VucyA9ICR0b2tlbnM7IGNvbW1hbmQgPSAkY29tbWFuZCB9IHsNCgkJCQkJCSR0b2tlbnMgfCBXaGVyZS1PYmplY3QgVGV4dCAtRVEgJGNvbW1hbmQgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCgkNCglDb250ZXh0ICJWYWxpZGF0aW5nIGhlbHAudHh0IGhlbHAgZmlsZXMiIHsNCgkJJGFsbEZpbGVzID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbW9kdWxlUm9vdCAtUmVjdXJzZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLmhlbHAudHh0IiB8IFdoZXJlLU9iamVjdCBGdWxsTmFtZSAtTm90TGlrZSAiJG1vZHVsZVJvb3RcdGVzdHNcKiINCgkJDQoJCWZvcmVhY2ggKCRmaWxlIGluICRhbGxGaWxlcykNCgkJew0KCQkJJG5hbWUgPSAkZmlsZS5GdWxsTmFtZS5SZXBsYWNlKCIkbW9kdWxlUm9vdFwiLCAnJykNCgkJCQ0KCQkJSXQgIlskbmFtZV0gU2hvdWxkIGhhdmUgVVRGOCBlbmNvZGluZyIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7DQoJCQkJR2V0LUZpbGVFbmNvZGluZyAtUGF0aCAkZmlsZS5GdWxsTmFtZSB8IFNob3VsZCAtQmUgJ1VURjggQk9NJw0KCQkJfQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyB0cmFpbGluZyBzcGFjZSIgLVRlc3RDYXNlcyBAeyBmaWxlID0gJGZpbGUgfSB7DQoJCQkJKCRmaWxlIHwgU2VsZWN0LVN0cmluZyAiXHMkIiB8IFdoZXJlLU9iamVjdCB7ICRfLkxpbmUuVHJpbSgpLkxlbmd0aCAtZ3QgMCB9IHwgTWVhc3VyZS1PYmplY3QpLkNvdW50IHwgU2hvdWxkIC1CZSAwDQoJCQl9DQoJCX0NCgl9DQp9AQkiBAAACSMEAAAGJAQAABdGaWxlSW50ZWdyaXR5LlRlc3RzLnBzMQYlBAAAWVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0c1xnZW5lcmFsXEZpbGVJbnRlZ3JpdHkuVGVzdHMucHMxCVsAAAAJJwQAAAkoBAAAAfMCAABwAAAABikEAACdBSMgTGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaWdub3JlZA0KJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucyA9IEAoDQogICAgDQopDQoNCjwjDQogIExpc3Qgb2YgYXJyYXllZCBlbnVtZXJhdGlvbnMuIFRoZXNlIG5lZWQgdG8gYmUgdHJlYXRlZCBkaWZmZXJlbnRseS4gQWRkIGZ1bGwgbmFtZS4NCiAgRXhhbXBsZToNCg0KICAiU3FsY29sbGFib3JhdGl2ZS5EYmF0b29scy5Db25uZWN0aW9uLk1hbmFnZW1lbnRDb25uZWN0aW9uVHlwZVtdIg0KIz4NCiRnbG9iYWw6SGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzID0gQCgNCgkNCikNCg0KPCMNCiAgU29tZSB0eXBlcyBvbiBwYXJhbWV0ZXJzIGp1c3QgZmFpbCB0aGVpciB2YWxpZGF0aW9uIG5vIG1hdHRlciB3aGF0Lg0KICBGb3IgdGhvc2UgaXQgYmVjb21lcyBwb3NzaWJsZSB0byBza2lwIHRoZW0sIGJ5IGFkZGluZyB0aGVtIHRvIHRoaXMgaGFzaHRhYmxlLg0KICBBZGQgYnkgZm9sbG93aW5nIHRoaXMgY29udmVudGlvbjogPGNvbW1hbmQgbmFtZT4gPSBAKDxsaXN0IG9mIHBhcmFtZXRlciBuYW1lcz4pDQogIEV4YW1wbGU6DQoNCiAgIkdldC1EYmFDbU9iamVjdCIgICAgICAgPSBAKCJEb05vdFVzZSIpDQojPg0KJGdsb2JhbDpIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlID0gQHsNCiAgICANCn0NCgEJKgQAAAkrBAAABiwEAAATSGVscC5FeGNlcHRpb25zLnBzMQYtBAAAVVNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0c1xnZW5lcmFsXEhlbHAuRXhjZXB0aW9ucy5wczEJWwAAAAkvBAAACTAEAAAB9AIAAHAAAAAGMQQAAM40PCMNCiAgICAuTk9URVMNCiAgICAgICAgVGhlIG9yaWdpbmFsIHRlc3QgdGhpcyBpcyBiYXNlZCB1cG9uIHdhcyB3cml0dGVuIGJ5IEp1bmUgQmxlbmRlci4NCgkJQWZ0ZXIgc2V2ZXJhbCByb3VuZHMgb2YgbW9kaWZpY2F0aW9ucyBpdCBzdGFuZHMgbm93IGFzIGl0IGlzLCBidXQgdGhlIGhvbm9yIHJlbWFpbnMgaGVycy4NCg0KCQlUaGFuayB5b3UgSnVuZSwgZm9yIGFsbCB5b3UgaGF2ZSBkb25lIQ0KDQogICAgLkRFU0NSSVBUSU9ODQoJCVRoaXMgdGVzdCBldmFsdWF0ZXMgdGhlIGhlbHAgZm9yIGFsbCBjb21tYW5kcyBpbiBhIG1vZHVsZS4NCg0KCS5QQVJBTUVURVIgU2tpcFRlc3QNCgkJRGlzYWJsZXMgdGhpcyB0ZXN0Lg0KCQ0KCS5QQVJBTUVURVIgQ29tbWFuZFBhdGgNCgkJTGlzdCBvZiBwYXRocyB1bmRlciB3aGljaCB0aGUgc2NyaXB0IGZpbGVzIGFyZSBzdG9yZWQuDQoJCVRoaXMgdGVzdCBhc3N1bWVzIHRoYXQgYWxsIGZ1bmN0aW9ucyBoYXZlIHRoZWlyIG93biBmaWxlIHRoYXQgaXMgbmFtZWQgYWZ0ZXIgdGhlbXNlbHZlcy4NCgkJVGhlc2UgcGF0aHMgYXJlIHVzZWQgdG8gc2VhcmNoIGZvciBjb21tYW5kcyB0aGF0IHNob3VsZCBleGlzdCBhbmQgYmUgdGVzdGVkLg0KCQlXaWxsIHNlYXJjaCByZWN1cnNpdmVseSBhbmQgYWNjZXB0cyB3aWxkY2FyZHMsIG1ha2Ugc3VyZSBvbmx5IGZ1bmN0aW9ucyBhcmUgZm91bmQNCg0KCS5QQVJBTUVURVIgTW9kdWxlTmFtZQ0KCQlOYW1lIG9mIHRoZSBtb2R1bGUgdG8gYmUgdGVzdGVkLg0KCQlUaGUgbW9kdWxlIG11c3QgYWxyZWFkeSBiZSBpbXBvcnRlZA0KDQoJLlBBUkFNRVRFUiBFeGNlcHRpb25zRmlsZQ0KCQlGaWxlIGluIHdoaWNoIGV4Y2VwdGlvbnMgYW5kIGFkanVzdG1lbnRzIGFyZSBjb25maWd1cmVkLg0KCQlJbiBpdCB0aGVyZSBzaG91bGQgYmUgdHdvIGFycmF5cyBhbmQgYSBoYXNodGFibGUgZGVmaW5lZDoNCgkJCSRnbG9iYWw6RnVuY3Rpb25IZWxwVGVzdEV4Y2VwdGlvbnMNCgkJCSRnbG9iYWw6SGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzDQoJCQkkZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUNCgkJVGhlc2UgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhlIHRlc3RzIHNsaWdodGx5IGluIGNhc2VzIG9mIG5lZWQuDQoJCVNlZSB0aGUgZXhhbXBsZSBmaWxlIGZvciBleHBsYW5hdGlvbnMgb24gZWFjaCBvZiB0aGVzZSB1c2FnZSBhbmQgZWZmZWN0Lg0KIz4NCltDbWRsZXRCaW5kaW5nKCldDQpQYXJhbSAoDQoJW3N3aXRjaF0NCgkkU2tpcFRlc3QsDQoJDQoJW3N0cmluZ1tdXQ0KCSRDb21tYW5kUGF0aCA9IEAoIiRnbG9iYWw6dGVzdHJvb3RcLi5cZnVuY3Rpb25zIiwgIiRnbG9iYWw6dGVzdHJvb3RcLi5caW50ZXJuYWxcZnVuY3Rpb25zIiksDQoJDQoJW3N0cmluZ10NCgkkTW9kdWxlTmFtZSA9ICLDvm5hbWXDviIsDQoJDQoJW3N0cmluZ10NCgkkRXhjZXB0aW9uc0ZpbGUgPSAiJGdsb2JhbDp0ZXN0cm9vdFxnZW5lcmFsXEhlbHAuRXhjZXB0aW9ucy5wczEiDQopDQppZiAoJFNraXBUZXN0KSB7IHJldHVybiB9DQouICRFeGNlcHRpb25zRmlsZQ0KDQokaW5jbHVkZWROYW1lcyA9IChHZXQtQ2hpbGRJdGVtICRDb21tYW5kUGF0aCAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSIpLkJhc2VOYW1lDQokY29tbWFuZFR5cGVzID0gQCgnQ21kbGV0JywgJ0Z1bmN0aW9uJykNCmlmICgkUFNWZXJzaW9uVGFibGUuUFNFZGl0aW9uIC1lcSAnRGVza3RvcCcgKSB7ICRjb21tYW5kVHlwZXMgKz0gJ1dvcmtmbG93JyB9DQokY29tbWFuZHMgPSBHZXQtQ29tbWFuZCAtTW9kdWxlIChHZXQtTW9kdWxlICRNb2R1bGVOYW1lKSAtQ29tbWFuZFR5cGUgJGNvbW1hbmRUeXBlcyB8IFdoZXJlLU9iamVjdCBOYW1lIC1JbiAkaW5jbHVkZWROYW1lcw0KDQojIyBXaGVuIHRlc3RpbmcgaGVscCwgcmVtZW1iZXIgdGhhdCBoZWxwIGlzIGNhY2hlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc2Vzc2lvbi4NCiMjIFRvIHRlc3QsIHJlc3RhcnQgc2Vzc2lvbi4NCg0KDQpmb3JlYWNoICgkY29tbWFuZCBpbiAkY29tbWFuZHMpIHsNCiAgICAkY29tbWFuZE5hbWUgPSAkY29tbWFuZC5OYW1lDQogICAgDQogICAgIyBTa2lwIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgb24gdGhlIGV4Y2x1c2lvbnMgbGlzdA0KICAgIGlmICgkZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zIC1jb250YWlucyAkY29tbWFuZE5hbWUpIHsgY29udGludWUgfQ0KICAgIA0KICAgICMgVGhlIG1vZHVsZS1xdWFsaWZpZWQgY29tbWFuZCBmYWlscyBvbiBNaWNyb3NvZnQuUG93ZXJTaGVsbC5BcmNoaXZlIGNtZGxldHMNCiAgICAkSGVscCA9IEdldC1IZWxwICRjb21tYW5kTmFtZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQ0KCQ0KCURlc2NyaWJlICJUZXN0IGhlbHAgZm9yICRjb21tYW5kTmFtZSIgew0KICAgICAgICANCgkJIyBJZiBoZWxwIGlzIG5vdCBmb3VuZCwgc3lub3BzaXMgaW4gYXV0by1nZW5lcmF0ZWQgaGVscCBpcyB0aGUgc3ludGF4IGRpYWdyYW0NCgkJSXQgInNob3VsZCBub3QgYmUgYXV0by1nZW5lcmF0ZWQiIC1UZXN0Q2FzZXMgQHsgSGVscCA9ICRIZWxwIH0gew0KCQkJJEhlbHAuU3lub3BzaXMgfCBTaG91bGQgLU5vdCAtQmVMaWtlICcqYFtgPENvbW1vblBhcmFtZXRlcnNgPmBdKicNCgkJfQ0KICAgICAgICANCgkJIyBTaG91bGQgYmUgYSBkZXNjcmlwdGlvbiBmb3IgZXZlcnkgZnVuY3Rpb24NCgkJSXQgImdldHMgZGVzY3JpcHRpb24gZm9yICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7DQoJCQkkSGVscC5EZXNjcmlwdGlvbiB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQoJCX0NCiAgICAgICAgDQoJCSMgU2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBleGFtcGxlDQoJCUl0ICJnZXRzIGV4YW1wbGUgY29kZSBmcm9tICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7DQoJCQkoJEhlbHAuRXhhbXBsZXMuRXhhbXBsZSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDEpLkNvZGUgfCBTaG91bGQgLU5vdCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJDQoJCSMgU2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBleGFtcGxlIGRlc2NyaXB0aW9uDQoJCUl0ICJnZXRzIGV4YW1wbGUgaGVscCBmcm9tICRjb21tYW5kTmFtZSIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7DQoJCQkoJEhlbHAuRXhhbXBsZXMuRXhhbXBsZS5SZW1hcmtzIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQoJCX0NCiAgICAgICAgDQogICAgICAgIENvbnRleHQgIlRlc3QgcGFyYW1ldGVyIGhlbHAgZm9yICRjb21tYW5kTmFtZSIgew0KICAgICAgICAgICAgDQogICAgICAgICAgICAkY29tbW9uID0gJ0RlYnVnJywgJ0Vycm9yQWN0aW9uJywgJ0Vycm9yVmFyaWFibGUnLCAnSW5mb3JtYXRpb25BY3Rpb24nLCAnSW5mb3JtYXRpb25WYXJpYWJsZScsICdPdXRCdWZmZXInLCAnT3V0VmFyaWFibGUnLCAnUGlwZWxpbmVWYXJpYWJsZScsICdWZXJib3NlJywgJ1dhcm5pbmdBY3Rpb24nLCAnV2FybmluZ1ZhcmlhYmxlJw0KICAgICAgICAgICAgDQogICAgICAgICAgICAkcGFyYW1ldGVycyA9ICRjb21tYW5kLlBhcmFtZXRlclNldHMuUGFyYW1ldGVycyB8IFNvcnQtT2JqZWN0IC1Qcm9wZXJ0eSBOYW1lIC1VbmlxdWUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbm90aW4gJGNvbW1vbg0KICAgICAgICAgICAgJHBhcmFtZXRlck5hbWVzID0gJHBhcmFtZXRlcnMuTmFtZQ0KICAgICAgICAgICAgJEhlbHBQYXJhbWV0ZXJOYW1lcyA9ICRIZWxwLlBhcmFtZXRlcnMuUGFyYW1ldGVyLk5hbWUgfCBTb3J0LU9iamVjdCAtVW5pcXVlDQogICAgICAgICAgICBmb3JlYWNoICgkcGFyYW1ldGVyIGluICRwYXJhbWV0ZXJzKSB7DQogICAgICAgICAgICAgICAgJHBhcmFtZXRlck5hbWUgPSAkcGFyYW1ldGVyLk5hbWUNCiAgICAgICAgICAgICAgICAkcGFyYW1ldGVySGVscCA9ICRIZWxwLnBhcmFtZXRlcnMucGFyYW1ldGVyIHwgV2hlcmUtT2JqZWN0IE5hbWUgLUVRICRwYXJhbWV0ZXJOYW1lDQoJCQkNCgkJCQkjIFNob3VsZCBiZSBhIGRlc2NyaXB0aW9uIGZvciBldmVyeSBwYXJhbWV0ZXINCgkJCQlJdCAiZ2V0cyBoZWxwIGZvciBwYXJhbWV0ZXI6ICRwYXJhbWV0ZXJOYW1lIDogaW4gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscCB9IHsNCgkJCQkJJHBhcmFtZXRlckhlbHAuRGVzY3JpcHRpb24uVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQoJCQkJfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRjb2RlTWFuZGF0b3J5ID0gJHBhcmFtZXRlci5Jc01hbmRhdG9yeS50b1N0cmluZygpDQoJCQkJSXQgImhlbHAgZm9yICRwYXJhbWV0ZXJOYW1lIHBhcmFtZXRlciBpbiAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgTWFuZGF0b3J5IHZhbHVlIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscDsgY29kZU1hbmRhdG9yeSA9ICRjb2RlTWFuZGF0b3J5IH0gew0KCQkJCQkkcGFyYW1ldGVySGVscC5SZXF1aXJlZCB8IFNob3VsZCAtQmUgJGNvZGVNYW5kYXRvcnkNCgkJCQl9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKCRIZWxwVGVzdFNraXBQYXJhbWV0ZXJUeXBlWyRjb21tYW5kTmFtZV0gLWNvbnRhaW5zICRwYXJhbWV0ZXJOYW1lKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkY29kZVR5cGUgPSAkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuTmFtZQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuSXNFbnVtKSB7DQogICAgICAgICAgICAgICAgICAgICMgRW51bWVyYXRpb25zIG9mdGVuIGhhdmUgaXNzdWVzIHdpdGggdGhlIHR5cGVuYW1lIG5vdCBiZWluZyByZWxpYWJseSBhdmFpbGFibGUNCiAgICAgICAgICAgICAgICAgICAgJG5hbWVzID0gJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlOjpHZXROYW1lcygkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUpDQoJCQkJCQkjIFBhcmFtZXRlciB0eXBlIGluIEhlbHAgc2hvdWxkIG1hdGNoIGNvZGUNCgkJCQkJSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwOyBuYW1lcyA9ICRuYW1lcyB9IHsNCgkJCQkJCSRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcw0KCQkJCQl9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2VpZiAoJHBhcmFtZXRlci5QYXJhbWV0ZXJUeXBlLkZ1bGxOYW1lIC1pbiAkSGVscFRlc3RFbnVtZXJhdGVkQXJyYXlzKSB7DQogICAgICAgICAgICAgICAgICAgICMgRW51bWVyYXRpb25zIG9mdGVuIGhhdmUgaXNzdWVzIHdpdGggdGhlIHR5cGVuYW1lIG5vdCBiZWluZyByZWxpYWJseSBhdmFpbGFibGUNCiAgICAgICAgICAgICAgICAgICAgJG5hbWVzID0gW0VudW1dOjpHZXROYW1lcygkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuRGVjbGFyZWRNZW1iZXJzWzBdLlJldHVyblR5cGUpDQoJCQkJCUl0ICJoZWxwIGZvciAkY29tbWFuZE5hbWUgaGFzIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGUgZm9yICRwYXJhbWV0ZXJOYW1lIiAtVGVzdENhc2VzIEB7IHBhcmFtZXRlckhlbHAgPSAkcGFyYW1ldGVySGVscDsgbmFtZXMgPSAkbmFtZXMgfSB7DQoJCQkJCQkkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZUdyb3VwLnBhcmFtZXRlclZhbHVlIHwgU2hvdWxkIC1iZSAkbmFtZXMNCgkJCQkJfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIyBUbyBhdm9pZCBjYWxsaW5nIFRyaW0gbWV0aG9kIG9uIGEgbnVsbCBvYmplY3QuDQogICAgICAgICAgICAgICAgICAgICRoZWxwVHlwZSA9IGlmICgkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZSkgeyAkcGFyYW1ldGVySGVscC5wYXJhbWV0ZXJWYWx1ZS5UcmltKCkgfQ0KCQkJCQkjIFBhcmFtZXRlciB0eXBlIGluIEhlbHAgc2hvdWxkIG1hdGNoIGNvZGUNCgkJCQkJSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIC1UZXN0Q2FzZXMgQHsgaGVscFR5cGUgPSAkaGVscFR5cGU7IGNvZGVUeXBlID0gJGNvZGVUeXBlIH0gew0KCQkJCQkJJGhlbHBUeXBlIHwgU2hvdWxkIC1iZSAkY29kZVR5cGUNCgkJCQkJfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGZvcmVhY2ggKCRoZWxwUGFybSBpbiAkSGVscFBhcmFtZXRlck5hbWVzKSB7DQoJCQkJIyBTaG91bGRuJ3QgZmluZCBleHRyYSBwYXJhbWV0ZXJzIGluIGhlbHAuDQoJCQkJSXQgImZpbmRzIGhlbHAgcGFyYW1ldGVyIGluIGNvZGU6ICRoZWxwUGFybSIgLVRlc3RDYXNlcyBAeyBoZWxwUGFybSA9ICRoZWxwUGFybTsgcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVyTmFtZXMgfSB7DQoJCQkJCSRoZWxwUGFybSAtaW4gJHBhcmFtZXRlck5hbWVzIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KCQkJCX0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0BCTIEAAAJMwQAAAY0BAAADkhlbHAuVGVzdHMucHMxBjUEAABQU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XHRlc3RzXGdlbmVyYWxcSGVscC5UZXN0cy5wczEJWwAAAAk3BAAACTgEAAAB9QIAAHAAAAAGOQQAAMsVRGVzY3JpYmUgIlZhbGlkYXRpbmcgdGhlIG1vZHVsZSBtYW5pZmVzdCIgew0KCSRtb2R1bGVSb290ID0gKFJlc29sdmUtUGF0aCAiJGdsb2JhbDp0ZXN0cm9vdFwuLiIpLlBhdGgNCgkkbWFuaWZlc3QgPSAoKEdldC1Db250ZW50ICIkbW9kdWxlUm9vdFzDvm5hbWXDvi5wc2QxIikgLWpvaW4gImBuIikgfCBJbnZva2UtRXhwcmVzc2lvbg0KCUNvbnRleHQgIkJhc2ljIHJlc291cmNlcyB2YWxpZGF0aW9uIiB7DQoJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiDQoJCUl0ICJFeHBvcnRzIGFsbCBmdW5jdGlvbnMgaW4gdGhlIHB1YmxpYyBmb2xkZXIiIC1UZXN0Q2FzZXMgQHsgZmlsZXMgPSAkZmlsZXM7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gew0KCQkJDQoJCQkkZnVuY3Rpb25zID0gKENvbXBhcmUtT2JqZWN0IC1SZWZlcmVuY2VPYmplY3QgJGZpbGVzLkJhc2VOYW1lIC1EaWZmZXJlbmNlT2JqZWN0ICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFdoZXJlLU9iamVjdCBTaWRlSW5kaWNhdG9yIC1MaWtlICc8PScpLklucHV0T2JqZWN0DQoJCQkkZnVuY3Rpb25zIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCX0NCgkJSXQgIkV4cG9ydHMgbm8gZnVuY3Rpb24gdGhhdCBpc24ndCBhbHNvIHByZXNlbnQgaW4gdGhlIHB1YmxpYyBmb2xkZXIiIC1UZXN0Q2FzZXMgQHsgZmlsZXMgPSAkZmlsZXM7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gew0KCQkJJGZ1bmN0aW9ucyA9IChDb21wYXJlLU9iamVjdCAtUmVmZXJlbmNlT2JqZWN0ICRmaWxlcy5CYXNlTmFtZSAtRGlmZmVyZW5jZU9iamVjdCAkbWFuaWZlc3QuRnVuY3Rpb25zVG9FeHBvcnQgfCBXaGVyZS1PYmplY3QgU2lkZUluZGljYXRvciAtTGlrZSAnPT4nKS5JbnB1dE9iamVjdA0KCQkJJGZ1bmN0aW9ucyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJCQ0KCQlJdCAiRXhwb3J0cyBub25lIG9mIGl0cyBpbnRlcm5hbCBmdW5jdGlvbnMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsNCgkJCSRmaWxlcyA9IEdldC1DaGlsZEl0ZW0gIiRtb2R1bGVSb290XGludGVybmFsXGZ1bmN0aW9ucyIgLVJlY3Vyc2UgLUZpbGUgLUZpbHRlciAiKi5wczEiDQoJCQkkZmlsZXMgfCBXaGVyZS1PYmplY3QgQmFzZU5hbWUgLUluICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQl9DQoJfQ0KCQ0KCUNvbnRleHQgIkluZGl2aWR1YWwgZmlsZSB2YWxpZGF0aW9uIiB7DQoJCUl0ICJUaGUgcm9vdCBtb2R1bGUgZmlsZSBleGlzdHMiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBtYW5pZmVzdCA9ICRtYW5pZmVzdCB9IHsNCgkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJCgkbWFuaWZlc3QuUm9vdE1vZHVsZSkiIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KCQl9DQoJCQ0KCQlmb3JlYWNoICgkZm9ybWF0IGluICRtYW5pZmVzdC5Gb3JtYXRzVG9Qcm9jZXNzKQ0KCQl7DQoJCQlJdCAiVGhlIGZpbGUgJGZvcm1hdCBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBmb3JtYXQgPSAkZm9ybWF0IH0gew0KCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGZvcm1hdCIgfCBTaG91bGQgLUJlICR0cnVlDQoJCQl9DQoJCX0NCgkJDQoJCWZvcmVhY2ggKCR0eXBlIGluICRtYW5pZmVzdC5UeXBlc1RvUHJvY2VzcykNCgkJew0KCQkJSXQgIlRoZSBmaWxlICR0eXBlIHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IHR5cGUgPSAkdHlwZSB9IHsNCgkJCQlUZXN0LVBhdGggIiRtb2R1bGVSb290XCR0eXBlIiB8IFNob3VsZCAtQmUgJHRydWUNCgkJCX0NCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJGFzc2VtYmx5IGluICRtYW5pZmVzdC5SZXF1aXJlZEFzc2VtYmxpZXMpDQoJCXsNCiAgICAgICAgICAgIGlmICgkYXNzZW1ibHkgLWxpa2UgIiouZGxsIikgew0KICAgICAgICAgICAgICAgIEl0ICJUaGUgZmlsZSAkYXNzZW1ibHkgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgYXNzZW1ibHkgPSAkYXNzZW1ibHkgfSB7DQogICAgICAgICAgICAgICAgICAgIFRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJGFzc2VtYmx5IiB8IFNob3VsZCAtQmUgJHRydWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBJdCAiVGhlIGZpbGUgJGFzc2VtYmx5IHNob3VsZCBsb2FkIGZyb20gdGhlIEdBQyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IGFzc2VtYmx5ID0gJGFzc2VtYmx5IH0gew0KICAgICAgICAgICAgICAgICAgICB7IEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgJGFzc2VtYmx5IH0gfCBTaG91bGQgLU5vdCAtVGhyb3cNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCgkJDQoJCWZvcmVhY2ggKCR0YWcgaW4gJG1hbmlmZXN0LlByaXZhdGVEYXRhLlBTRGF0YS5UYWdzKQ0KCQl7DQoJCQlJdCAiVGFncyBzaG91bGQgaGF2ZSBubyBzcGFjZXMgaW4gbmFtZSIgLVRlc3RDYXNlcyBAeyB0YWcgPSAkdGFnIH0gew0KCQkJCSR0YWcgLW1hdGNoICIgIiB8IFNob3VsZCAtQmUgJGZhbHNlDQoJCQl9DQoJCX0NCgl9DQp9AQk6BAAACTsEAAAGPAQAABJNYW5pZmVzdC5UZXN0cy5wczEGPQQAAFRTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cdGVzdHNcZ2VuZXJhbFxNYW5pZmVzdC5UZXN0cy5wczEJWwAAAAk/BAAACUAEAAAB9gIAAHAAAAAGQQQAAJYJW0NtZGxldEJpbmRpbmcoKV0NClBhcmFtICgNCglbc3dpdGNoXQ0KCSRTa2lwVGVzdCwNCgkNCglbc3RyaW5nW11dDQoJJENvbW1hbmRQYXRoID0gQCgiJGdsb2JhbDp0ZXN0cm9vdFwuLlxmdW5jdGlvbnMiLCAiJGdsb2JhbDp0ZXN0cm9vdFwuLlxpbnRlcm5hbFxmdW5jdGlvbnMiKQ0KKQ0KDQppZiAoJFNraXBUZXN0KSB7IHJldHVybiB9DQoNCiRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplciA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KDQpEZXNjcmliZSAnSW52b2tpbmcgUFNTY3JpcHRBbmFseXplciBhZ2FpbnN0IGNvbW1hbmRiYXNlJyB7DQoJJGNvbW1hbmRGaWxlcyA9IGZvcmVhY2ggKCRwYXRoIGluICRDb21tYW5kUGF0aCkgew0KICAgICAgICBHZXQtQ2hpbGRJdGVtIC1QYXRoICRwYXRoIC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIg0KICAgIH0NCgkkc2NyaXB0QW5hbHl6ZXJSdWxlcyA9IEdldC1TY3JpcHRBbmFseXplclJ1bGUNCgkNCglmb3JlYWNoICgkZmlsZSBpbiAkY29tbWFuZEZpbGVzKQ0KCXsNCgkJQ29udGV4dCAiQW5hbHl6aW5nICQoJGZpbGUuQmFzZU5hbWUpIiB7DQoJCQkkYW5hbHlzaXMgPSBJbnZva2UtU2NyaXB0QW5hbHl6ZXIgLVBhdGggJGZpbGUuRnVsbE5hbWUgLUV4Y2x1ZGVSdWxlIFBTQXZvaWRUcmFpbGluZ1doaXRlc3BhY2UsIFBTU2hvdWxkUHJvY2Vzcw0KCQkJDQoJCQlmb3JFYWNoICgkcnVsZSBpbiAkc2NyaXB0QW5hbHl6ZXJSdWxlcykNCgkJCXsNCgkJCQlJdCAiU2hvdWxkIHBhc3MgJHJ1bGUiIC1UZXN0Q2FzZXMgQHsgYW5hbHlzaXMgPSAkYW5hbHlzaXM7IHJ1bGUgPSAkcnVsZSB9IHsNCgkJCQkJSWYgKCRhbmFseXNpcy5SdWxlTmFtZSAtY29udGFpbnMgJHJ1bGUpDQoJCQkJCXsNCgkJCQkJCSRhbmFseXNpcyB8IFdoZXJlLU9iamVjdCBSdWxlTmFtZSAtRVEgJHJ1bGUgLW91dHZhcmlhYmxlIGZhaWx1cmVzIHwgRm9yRWFjaC1PYmplY3QgeyAkbnVsbCA9ICRnbG9iYWw6X19wZXN0ZXJfZGF0YS5TY3JpcHRBbmFseXplci5BZGQoJF8pIH0NCgkJCQkJCQ0KCQkJCQkJMSB8IFNob3VsZCAtQmUgMA0KCQkJCQl9DQoJCQkJCWVsc2UNCgkJCQkJew0KCQkJCQkJMCB8IFNob3VsZCAtQmUgMA0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQEJQgQAAAlDBAAABkQEAAAaUFNTY3JpcHRBbmFseXplci5UZXN0cy5wczEGRQQAAFxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cdGVzdHNcZ2VuZXJhbFxQU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQlbAAAACUcEAAAJSAQAAAH3AgAAcAAAAAZJBAAA5gckZXhjZXB0aW9ucyA9IEB7IH0NCg0KPCMNCkEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgTUFZIGJlIGluIHRoZSBsYW5ndWFnZSBmaWxlcywgd2l0aG91dCBjYXVzaW5nIHRoZSB0ZXN0cyB0byBmYWlsLg0KVGhpcyBpcyBjb21tb25seSB1c2VkIGluIG1vZHVsZXMgdGhhdCBnZW5lcmF0ZSBsb2NhbGl6ZWQgbWVzc2FnZXMgc3RyYWlnaHQgZnJvbSBDIy4NClNwZWNpZnkgdGhlIGZ1bGwga2V5IGFzIGl0IGlzIHdyaXR0ZW4gaW4gdGhlIGxhbmd1YWdlIGZpbGVzLCBkbyBub3QgcHJlcGVuZCB0aGUgbW9kdWxlbmFtZSwNCmFzIHlvdSB3b3VsZCBoYXZlIHRvIGluIEMjIGNvZGUuDQoNCkV4YW1wbGU6DQokZXhjZXB0aW9uc1snTGVnYWxTdXJwbHVzJ10gPSBAKA0KICAgICdFeGNlcHRpb24uU3RyZWFtcy5GYWlsZWRDcmVhdGUnDQogICAgJ0V4Y2VwdGlvbi5TdHJlYW1zLkZhaWxlZERpc3Bvc2UnDQopDQojPg0KJGV4Y2VwdGlvbnNbJ0xlZ2FsU3VycGx1cyddID0gQCgNCg0KKQ0KPCMNCkEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgTUFZIGJlIHVzZWQgd2l0aG91dCBuZWVkaW5nIHRvIGhhdmUgdGV4dCBkZWZpbmVkLg0KVGhpcyBpcyBpbnRlbmRlZCBmb3IgbW9kdWxlcyAocmUtKXVzaW5nIHN0cmluZ3MgcHJvdmlkZWQgYnkgYW5vdGhlciBtb2R1bGUNCiM+DQokZXhjZXB0aW9uc1snTm9UZXh0TmVlZGVkJ10gPSBAKA0KCSdWYWxpZGF0ZS5GU1BhdGgnDQoJJ1ZhbGlkYXRlLkZTUGF0aC5GaWxlJw0KCSdWYWxpZGF0ZS5GU1BhdGguRmlsZU9yUGFyZW50Jw0KCSdWYWxpZGF0ZS5GU1BhdGguRm9sZGVyJw0KCSdWYWxpZGF0ZS5QYXRoJw0KCSdWYWxpZGF0ZS5QYXRoLkNvbnRhaW5lcicNCgknVmFsaWRhdGUuUGF0aC5MZWFmJw0KCSdWYWxpZGF0ZS5UaW1lU3Bhbi5Qb3NpdGl2ZScNCgknVmFsaWRhdGUuVXJpLkFic29sdXRlJw0KCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUuRmlsZScNCgknVmFsaWRhdGUuVXJpLkFic29sdXRlLkh0dHBzJw0KKQ0KDQokZXhjZXB0aW9ucwEJSgQAAAlLBAAABkwEAAAWc3RyaW5ncy5FeGNlcHRpb25zLnBzMQZNBAAAWFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0c1xnZW5lcmFsXHN0cmluZ3MuRXhjZXB0aW9ucy5wczEJWwAAAAlPBAAACVAEAAAB+AIAAHAAAAAGUQQAAJcIPCMNCi5ERVNDUklQVElPTg0KICAgIFRoaXMgdGVzdCB2ZXJpZmllcywgdGhhdCBhbGwgc3RyaW5ncyB0aGF0IGhhdmUgYmVlbiB1c2VkLA0KICAgIGFyZSBsaXN0ZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGVzIGFuZCB0aHVzIGhhdmUgYSBtZXNzYWdlIGJlaW5nIGRpc3BsYXllZC4NCg0KICAgIEl0IGFsc28gY2hlY2tzLCB3aGV0aGVyIHRoZSBsYW5ndWFnZSBmaWxlcyBoYXZlIG9ycGhhbmVkIGVudHJpZXMgdGhhdCBuZWVkIGNsZWFuaW5nIHVwLg0KIz4NCg0KDQoNCkRlc2NyaWJlICJUZXN0aW5nIGxvY2FsaXphdGlvbiBzdHJpbmdzIiB7DQoJJG1vZHVsZVJvb3QgPSAoR2V0LU1vZHVsZSDDvm5hbWXDvikuTW9kdWxlQmFzZQ0KCSRzdHJpbmdzUmVzdWx0cyA9IEV4cG9ydC1QU01EU3RyaW5nIC1Nb2R1bGVSb290ICRtb2R1bGVSb290DQoJJGV4Y2VwdGlvbnMgPSAmICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcc3RyaW5ncy5FeGNlcHRpb25zLnBzMSINCgkNCglmb3JlYWNoICgkc3RyaW5nRW50cnkgaW4gJHN0cmluZ3NSZXN1bHRzKSB7DQogICAgICAgIGlmICgkc3RyaW5nRW50cnkuU3RyaW5nIC1lcSAia2V5IikgeyBjb250aW51ZSB9ICMgU2tpcHBpbmcgdGhlIHRlbXBsYXRlIGRlZmF1bHQgZW50cnkNCgkJSXQgIlNob3VsZCBiZSB1c2VkICYgaGF2ZSB0ZXh0OiAkKCRzdHJpbmdFbnRyeS5TdHJpbmcpIiAtVGVzdENhc2VzIEB7IHN0cmluZ0VudHJ5ID0gJHN0cmluZ0VudHJ5OyBleGNlcHRpb25zID0gJGV4Y2VwdGlvbnMgfSB7DQogICAgICAgICAgICBpZiAoJGV4Y2VwdGlvbnMuTGVnYWxTdXJwbHVzIC1ub3Rjb250YWlucyAkc3RyaW5nRW50cnkuU3RyaW5nKSB7DQogICAgICAgICAgICAgICAgJHN0cmluZ0VudHJ5LlN1cnBsdXMgfCBTaG91bGQgLUJlRmFsc2UNCgkJCX0NCgkJCWlmICgkZXhjZXB0aW9ucy5Ob1RleHROZWVkZWQgLW5vdGNvbnRhaW5zICRzdHJpbmdFbnRyeS5TdHJpbmcpIHsNCgkJCQkkc3RyaW5nRW50cnkuVGV4dCB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQoJCQl9DQogICAgICAgIH0NCiAgICB9DQp9AQlSBAAACVMEAAAGVAQAABFzdHJpbmdzLlRlc3RzLnBzMQZVBAAAU1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlx0ZXN0c1xnZW5lcmFsXHN0cmluZ3MuVGVzdHMucHMxCVsAAAAJVwQAAAlYBAAAAQADAAAIAAAACVkEAAABAAAAAQAAAAEBAwAACAAAAAlsAAAAAAAAAAAAAAABBQMAAAgAAAAJbAAAAAAAAAAAAAAAAQYDAAAIAAAACWwAAAAAAAAAAAAAAAEIAwAACAAAAAlsAAAAAAAAAAAAAAABCQMAAAgAAAAJbAAAAAAAAAAAAAAAAQ0DAAAIAAAACWwAAAAAAAAAAAAAAAEOAwAACAAAAAlsAAAAAAAAAAAAAAABEAMAAAgAAAAJbAAAAAAAAAAAAAAAAREDAAAIAAAACWwAAAAAAAAAAAAAAAEVAwAACAAAAAlsAAAAAAAAAAAAAAABFgMAAAgAAAAJbAAAAAAAAAAAAAAAARgDAAAIAAAACVsEAAABAAAAAQAAAAEZAwAACAAAAAlsAAAAAAAAAAAAAAABHQMAAAgAAAAJbAAAAAAAAAAAAAAAAR4DAAAIAAAACWwAAAAAAAAAAAAAAAEgAwAACAAAAAldBAAAAgAAAAIAAAABIQMAAAgAAAAJXgQAAAIAAAACAAAAASUDAAAIAAAACWwAAAAAAAAAAAAAAAEmAwAACAAAAAlsAAAAAAAAAAAAAAABKAMAAAgAAAAJbAAAAAAAAAAAAAAAASkDAAAIAAAACWwAAAAAAAAAAAAAAAEtAwAACAAAAAlsAAAAAAAAAAAAAAABLgMAAAgAAAAJbAAAAAAAAAAAAAAAATADAAAIAAAACWwAAAAAAAAAAAAAAAExAwAACAAAAAlsAAAAAAAAAAAAAAABNQMAAAgAAAAJbAAAAAAAAAAAAAAAATYDAAAIAAAACWwAAAAAAAAAAAAAAAE4AwAACAAAAAlgBAAAAQAAAAEAAAABOQMAAAgAAAAJbAAAAAAAAAAAAAAAAT0DAAAIAAAACWwAAAAAAAAAAAAAAAE+AwAACAAAAAlsAAAAAAAAAAAAAAABQAMAAAgAAAAJYgQAAAEAAAABAAAAAUEDAAAIAAAACWwAAAAAAAAAAAAAAAFFAwAACAAAAAlsAAAAAAAAAAAAAAABRgMAAAgAAAAJbAAAAAAAAAAAAAAAAUgDAAAIAAAACWQEAAABAAAAAQAAAAFJAwAACAAAAAlsAAAAAAAAAAAAAAABTQMAAAgAAAAJbAAAAAAAAAAAAAAAAU4DAAAIAAAACWwAAAAAAAAAAAAAAAFQAwAACAAAAAlsAAAAAAAAAAAAAAABUQMAAAgAAAAJbAAAAAAAAAAAAAAAAVUDAAAIAAAACWwAAAAAAAAAAAAAAAFWAwAACAAAAAlsAAAAAAAAAAAAAAABWAMAAAgAAAAJbAAAAAAAAAAAAAAAAVkDAAAIAAAACWwAAAAAAAAAAAAAAAFdAwAACAAAAAlsAAAAAAAAAAAAAAABXgMAAAgAAAAJbAAAAAAAAAAAAAAAAWADAAAIAAAACWYEAAABAAAAAQAAAAFhAwAACAAAAAlsAAAAAAAAAAAAAAABZQMAAAgAAAAJaAQAAAEAAAABAAAAAWYDAAAIAAAACWwAAAAAAAAAAAAAAAFoAwAACAAAAAlsAAAAAAAAAAAAAAABaQMAAAgAAAAJbAAAAAAAAAAAAAAAAW0DAAAIAAAACWwAAAAAAAAAAAAAAAFuAwAACAAAAAlsAAAAAAAAAAAAAAABcAMAAAgAAAAJagQAAAEAAAABAAAAAXEDAAAIAAAACWwAAAAAAAAAAAAAAAF1AwAACAAAAAlsAAAAAAAAAAAAAAABdgMAAAgAAAAJbAAAAAAAAAAAAAAAAXgDAAAIAAAACWwAAAAAAAAAAAAAAAF5AwAACAAAAAlsAAAAAAAAAAAAAAABfQMAAAgAAAAJbAAAAAAAAAAAAAAAAX4DAAAIAAAACWwAAAAAAAAAAAAAAAGAAwAACAAAAAlsAAAAAAAAAAAAAAABgQMAAAgAAAAJbAAAAAAAAAAAAAAAAYUDAAAIAAAACWwAAAAAAAAAAAAAAAGGAwAACAAAAAlsAAAAAAAAAAAAAAABiAMAAAgAAAAJbAAAAAAAAAAAAAAAAYkDAAAIAAAACWwAAAAAAAAAAAAAAAGNAwAACAAAAAlsAAAAAAAAAAAAAAABjgMAAAgAAAAJbAAAAAAAAAAAAAAAAZADAAAIAAAACWwAAAAAAAAAAAAAAAGRAwAACAAAAAlsAAAAAAAAAAAAAAABlQMAAAgAAAAJbAAAAAAAAAAAAAAAAZYDAAAIAAAACWwAAAAAAAAAAAAAAAGYAwAACAAAAAlsAAAAAAAAAAAAAAAB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AAmjBAAADQMHeAQAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmkBAAACaUEAAAJpgQAAAoHegQAAAABAAAABAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmnBAAADQMHfAQAAAABAAAACAAAAAQtUFNNb2R1bGVEZXZlbG9wbWVudC5UZW1wbGF0ZS5UZW1wbGF0ZUl0ZW1CYXNlAgAAAAmoBAAACakEAAAJqgQAAAmrBAAACawEAAAJrQQAAAmuBAAACa8EAAARfgQAAAQAAAAGsAQAAARuYW1lDQMRfwQAAAQAAAAGsQQAAAp0ZXN0Zm9sZGVyBrIEAAAMcGVzdGVyY29uZmlnDQIRgQQAAAQAAAAGswQAAARuYW1lDQMRgwQAAAQAAAAGtAQAAARuYW1lDQMRhQQAAAQAAAAGtQQAAARuYW1lDQMRhwQAAAQAAAAGtgQAAARuYW1lDQMRiQQAAAQAAAAGtwQAAARuYW1lDQMRiwQAAAQAAAAGuAQAAARuYW1lDQMBmwQAAHAAAAAGuQQAAO0VPCMNClRoaXMgaXMgYW4gZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUNCg0KQnkgZGVmYXVsdCwgaXQgaXMgZW5vdWdoIHRvIGhhdmUgYSBzaW5nbGUgb25lIG9mIHRoZW0sDQpob3dldmVyIGlmIHlvdSBoYXZlIGVub3VnaCBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIGp1c3RpZnkgaGF2aW5nIG11bHRpcGxlIGNvcGllcyBvZiBpdCwNCmZlZWwgdG90YWxseSBmcmVlIHRvIHNwbGl0IHRoZW0gaW50byBtdWx0aXBsZSBmaWxlcy4NCiM+DQoNCjwjDQojIEV4YW1wbGUgQ29uZmlndXJhdGlvbg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICfDvm5hbWXDvicgLU5hbWUgJ0V4YW1wbGUuU2V0dGluZycgLVZhbHVlIDEwIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdpbnRlZ2VyJyAtSGFuZGxlciB7IH0gLURlc2NyaXB0aW9uICJFeGFtcGxlIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gWW91ciBtb2R1bGUgY2FuIHRoZW4gdXNlIHRoZSBzZXR0aW5nIHVzaW5nICdHZXQtUFNGQ29uZmlnVmFsdWUnIg0KIz4NCg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICfDvm5hbWXDvicgLU5hbWUgJ0ltcG9ydC5Eb0RvdFNvdXJjZScgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGRvdHNvdXJjZWQgb24gaW1wb3J0LiBCeSBkZWZhdWx0LCB0aGUgZmlsZXMgb2YgdGhpcyBtb2R1bGUgYXJlIHJlYWQgYXMgc3RyaW5nIHZhbHVlIGFuZCBpbnZva2VkLCB3aGljaCBpcyBmYXN0ZXIgYnV0IHdvcnNlIG9uIGRlYnVnZ2luZy4iDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ8O+bmFtZcO+JyAtTmFtZSAnSW1wb3J0LkluZGl2aWR1YWxGaWxlcycgLVZhbHVlICRmYWxzZSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiAnYm9vbCcgLURlc2NyaXB0aW9uICJXaGV0aGVyIHRoZSBtb2R1bGUgZmlsZXMgc2hvdWxkIGJlIGltcG9ydGVkIGluZGl2aWR1YWxseS4gRHVyaW5nIHRoZSBtb2R1bGUgYnVpbGQsIGFsbCBtb2R1bGUgY29kZSBpcyBjb21waWxlZCBpbnRvIGZldyBmaWxlcywgd2hpY2ggYXJlIGltcG9ydGVkIGluc3RlYWQgYnkgZGVmYXVsdC4gTG9hZGluZyB0aGUgY29tcGlsZWQgdmVyc2lvbnMgaXMgZmFzdGVyLCB1c2luZyB0aGUgaW5kaXZpZHVhbCBmaWxlcyBpcyBlYXNpZXIgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvdXQgYWRqdXN0bWVudHMuIg0KDQpTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnQ29uc29sZUxvZ2dpbmcuZW5hYmxlZCcgLVZhbHVlICR0cnVlIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uICdib29sJyAtRGVzY3JpcHRpb24gIklmIHNldCB0byBgJHRydWUsIE1lc3NhZ2VzIGZyb20gdGhlIG1vZHVsZSB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgbWFpbiBjb25zb2xlIg0KIyBTZXQtUFNGQ29uZmlnIC1Nb2R1bGUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uJyAtTmFtZSAnQ29uc29sZUxvZ2dpbmcuc3R5bGUnIC1WYWx1ZSAnQ09OOiAlTWVzc2FnZSUnIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIldoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZT8iDQojIFNldC1QU0ZDb25maWcgLU1vZHVsZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24nIC1OYW1lICdDb25zb2xlTG9nZ2luZy5zdHlsZScgLVZhbHVlICclVGFncyV8JUxldmVsJXwlTW9kdWxlJXwlRnVuY3Rpb25OYW1lJTogJU1lc3NhZ2UlJyAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBzdHJpbmcgLURlc2NyaXB0aW9uICJXaGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnNvbGU/Ig0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLnN0eWxlJyAtVmFsdWUgJ1slTGV2ZWwlXSAlTWVzc2FnZSUnIC1Jbml0aWFsaXplIC1WYWxpZGF0aW9uIHN0cmluZyAtRGVzY3JpcHRpb24gIldoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZT8iDQojIFBvc3NpYmxlIGxldmVsczogQ3JpdGljYWwgKDEpLCBJbXBvcnRhbnQgLyBPdXRwdXQgLyBIb3N0ICgyKSwgU2lnbmlmaWNhbnQgKDMpLCBWZXJ5VmVyYm9zZSAoNCksIFZlcmJvc2UgKDUpLCBTb21ld2hhdFZlcmJvc2UgKDYpLCBTeXN0ZW0gKDcpLCBEZWJ1ZyAoOCksIEludGVybmFsQ29tbWVudCAoOSksIFdhcm5pbmcNCiMgICAgICAgICAoNjY2KSBFaXRoZXIgb25lIG9mIHRoZSBzdHJpbmdzIG9yIGl0cyByZXNwZWN0aXZlIG51bWJlciB3aWxsIGRvIGFzIGlucHV0Lg0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLk1pbkxldmVsJyAtVmFsdWUgMSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBpbnRlZ2VyIC1EZXNjcmlwdGlvbiAiRnJvbSB3aGljaCBsZXZlbCBzdGFydGluZyBvbiBzaG91bGQgbWVzc2FnZXMgYmUgc2VudCB0byB0aGUgcHJvdmlkZXI/Ig0KU2V0LVBTRkNvbmZpZyAtTW9kdWxlICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicgLU5hbWUgJ0NvbnNvbGVMb2dnaW5nLk1heExldmVsJyAtVmFsdWUgMSAtSW5pdGlhbGl6ZSAtVmFsaWRhdGlvbiBpbnRlZ2VyIC1EZXNjcmlwdGlvbiAiVXAgdG8gd2hpY2ggbGV2ZWwgc2hvdWxkIG1lc3NhZ2VzIGJlIHNlbnQgdG8gdGhlIHByb3ZpZGVyPyINCgEJugQAAAm7BAAABrwEAAARY29uZmlndXJhdGlvbi5wczEGvQQAAIEBU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXGNvbmZpZ3VyYXRpb25zXGNvbmZpZ3VyYXRpb24ucHMxCVsAAAAJvwQAAAnABAAAAZwEAABwAAAABsEEAAD+AyMgQ29uZmlndXJhdGlvbnMNCg0KVGhyb3VnaCB0aGUgYFBTRnJhbWV3b3JrYCB5b3UgaGF2ZSBhIHNpbXBsZSBtZXRob2QgdGhhdCBhbGxvd3MgeW91IHRvIC4uLg0KDQogLSBQdWJsaXNoIHNldHRpbmdzDQogLSBXaXRoIG9uYm9hcmQgZG9jdW1lbnRhdGlvbg0KIC0gSW5wdXQgdmFsaWRhdGlvbg0KIC0gU2NyaXB0cyB0aGF0IHJ1biBvbiBjaGFuZ2Ugb2Ygc2V0dGluZ3MNCiAtIFRoYXQgY2FuIGJlIGRpc2NvdmVyZWQgYW5kIHVwZGF0ZWQgYnkgdGhlIHVzZXINCiAtIFRoYXQgY2FuIGJlIGFkbWluaXN0cmF0ZWQgYnkgcG9saWN5ICYgRFNDDQoNClRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBhIGJpdCB0b28gY29tcGxleCB0byBkZXNjcmliZSBpbiBhIGhlbHAgZmlsZSwgeW91IGNhbiBob3dldmVyIHZpc2l0IHVzIGF0IGh0dHA6Ly9wc2ZyYW1ld29yay5vcmcgZm9yIGRldGFpbGVkIGd1aWRhbmNlLg0KDQpBbiBleGFtcGxlIGNhbiBiZSBzZWVuIGluIHRoZSBhdHRhY2hlZCBwczEgZmlsZQEJwgQAAAnDBAAABsQEAAAJcmVhZG1lLm1kBsUEAAB5U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXGNvbmZpZ3VyYXRpb25zXHJlYWRtZS5tZAlbAAAACccEAAAJyAQAAAGdBAAAcAAAAAbJBAAA2wEjIEZ1bmN0aW9ucw0KDQpUaGlzIGlzIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGludGVybmFsIGZ1bmN0aW9ucyBnby4NCg0KRGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBtb2R1bGUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHN1YmRpdmlkZSB0aGVtIGludG8gc3ViZm9sZGVycy4NCg0KVGhlIG1vZHVsZSB3aWxsIHBpY2sgdXAgYWxsIC5wczEgZmlsZXMgcmVjdXJzaXZlbHkBCcoEAAAJywQAAAbMBAAACXJlYWRtZS5tZAbNBAAAdFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxpbnRlcm5hbFxmdW5jdGlvbnNccmVhZG1lLm1kCVsAAAAJzwQAAAnQBAAAAZ4EAABwAAAABtEEAACEAzwjDQpTdG9yZWQgc2NyaXB0YmxvY2tzIGFyZSBhdmFpbGFibGUgaW4gW1BzZlZhbGlkYXRlU2NyaXB0KCldIGF0dHJpYnV0ZXMuDQpUaGlzIG1ha2VzIGl0IGVhc2llciB0byBjZW50cmFsbHkgcHJvdmlkZSB0aGUgc2FtZSBzY3JpcHRibG9jayBtdWx0aXBsZSB0aW1lcywNCndpdGhvdXQgaGF2aW5nIHRvIG1haW50YWluIGl0IGluIHNlcGFyYXRlIGxvY2F0aW9ucy4NCg0KSXQgYWxzbyBwcmV2ZW50cyBsZW5ndGh5IHZhbGlkYXRpb24gc2NyaXB0YmxvY2tzIGZyb20gbWFraW5nIHlvdXIgcGFyYW1ldGVyIGJsb2NrDQpoYXJkIHRvIHJlYWQuDQoNClNldC1QU0ZTY3JpcHRibG9jayAtTmFtZSAnw75uYW1lw74uU2NyaXB0QmxvY2tOYW1lJyAtU2NyaXB0YmxvY2sgew0KCQ0KfQ0KIz4BCdIEAAAJ0wQAAAbUBAAAEHNjcmlwdGJsb2Nrcy5wczEG1QQAAH5TZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWxcc2NyaXB0YmxvY2tzXHNjcmlwdGJsb2Nrcy5wczEJWwAAAAnXBAAACdgEAAABnwQAAHAAAAAG2QQAAPcGV3JpdGUtUFNGTWVzc2FnZSAiQ29uZmlndXJlIENvbnNvbGUgTG9nZ2luZyINCmlmIChHZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi5Db25zb2xlTG9nZ2luZy5lbmFibGVkJyAtRmFsbGJhY2sgJGZhbHNlKSB7DQogICAgJHByb3ZpZGVyUGFyYW09QHsNCiAgICAgICAgTmFtZT0iY29uc29sZSINCiAgICAgICAgRW5hYmxlZD0kdHJ1ZQ0KICAgICAgICBzdHlsZT1HZXQtUFNGQ29uZmlnVmFsdWUgLUZ1bGxOYW1lICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbi5Db25zb2xlTG9nZ2luZy5zdHlsZScNCiAgICAgICAgTWluTGV2ZWw9R2V0LVBTRkNvbmZpZ1ZhbHVlIC1GdWxsTmFtZSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb24uQ29uc29sZUxvZ2dpbmcuTWluTGV2ZWwnDQogICAgICAgIE1heExldmVsPUdldC1QU0ZDb25maWdWYWx1ZSAtRnVsbE5hbWUgJ1NlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uLkNvbnNvbGVMb2dnaW5nLk1heExldmVsJw0KICAgICAgICBJbnN0YW5jZU5hbWUgPSAnU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5jb25zb2xlJw0KICAgIH0NCiAgICBXcml0ZS1QU0ZNZXNzYWdlICJDb25maWd1cmUgQ29uc29sZSBMb2dnaW5nIHdpdGggUGFyYW09JCgkcHJvdmlkZXJQYXJhbXxDb252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MpIg0KICAgIFNldC1QU0ZMb2dnaW5nUHJvdmlkZXIgQHByb3ZpZGVyUGFyYW0gLUluY2x1ZGVNb2R1bGVzICdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvbicNCg0KfWVsc2V7DQogICAgV3JpdGUtUFNGTWVzc2FnZSAiTk9UIENvbmZpZ3VyZSBDb25zb2xlIExvZ2dpbmciDQp9DQoBCdoEAAAJ2wQAAAbcBAAAE2NvbnNvbGVfbG9nZ2luZy5wczEG3QQAAHxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWxcc2NyaXB0c1xjb25zb2xlX2xvZ2dpbmcucHMxCVsAAAAJ3wQAAAngBAAAAaAEAABwAAAABuEEAAD2CU5ldy1QU0ZMaWNlbnNlIC1Qcm9kdWN0ICfDvm5hbWXDvicgLU1hbnVmYWN0dXJlciAnw75hdXRob3LDvicgLVByb2R1Y3RWZXJzaW9uICRzY3JpcHQ6TW9kdWxlVmVyc2lvbiAtUHJvZHVjdFR5cGUgTW9kdWxlIC1OYW1lIE1JVCAtVmVyc2lvbiAiMS4wLjAuMCIgLURhdGUgKEdldC1EYXRlICLDviFkYXRlIcO+IikgLVRleHQgQCINCkNvcHlyaWdodCAoYykgw74heWVhciHDviDDvmF1dGhvcsO+DQoNClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkNCm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsDQppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzDQp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQpjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQoNClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbA0KY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCg0KVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFDQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLA0KT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUNClNPRlRXQVJFLg0KIkABCeIEAAAJ4wQAAAbkBAAAC2xpY2Vuc2UucHMxBuUEAAB0U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXHNjcmlwdHNcbGljZW5zZS5wczEJWwAAAAnnBAAACegEAAABoQQAAHAAAAAG6QQAALcGPCMNCkFkZCBhbGwgdGhpbmdzIHlvdSB3YW50IHRvIHJ1biBhZnRlciBpbXBvcnRpbmcgdGhlIG1haW4gZnVuY3Rpb24gY29kZQ0KDQpXQVJOSU5HOiBPTkxZIHByb3ZpZGUgcGF0aHMgdG8gZmlsZXMhDQoNCkFmdGVyIGJ1aWxkaW5nIHRoZSBtb2R1bGUsIHRoaXMgZmlsZSB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZCwgYWRkaW5nIGFueXRoaW5nIGJ1dCBwYXRocyB0byBmaWxlcyAuLi4NCi0gV2lsbCBub3Qgd29yayBhZnRlciBwdWJsaXNoaW5nDQotIENvdWxkIGJyZWFrIHRoZSBidWlsZCBwcm9jZXNzDQojPg0KDQokbW9kdWxlUm9vdCA9IFNwbGl0LVBhdGggKFNwbGl0LVBhdGggJFBTU2NyaXB0Um9vdCkNCg0KIyBMb2FkIENvbmZpZ3VyYXRpb25zDQooR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcY29uZmlndXJhdGlvbnNcKi5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lDQoNCiMgTG9hZCBTY3JpcHRibG9ja3MNCihHZXQtQ2hpbGRJdGVtICIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRibG9ja3NcKi5wczEiIC1FcnJvckFjdGlvbiBJZ25vcmUpLkZ1bGxOYW1lDQoNCiMgTG9hZCBUYWIgRXhwYW5zaW9uDQooR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcdGVwcFwqLnRlcHAucHMxIiAtRXJyb3JBY3Rpb24gSWdub3JlKS5GdWxsTmFtZQ0KDQojIExvYWQgVGFiIEV4cGFuc2lvbiBBc3NpZ25tZW50DQoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcdGVwcFxhc3NpZ25tZW50LnBzMSINCg0KIyBMb2FkIExpY2Vuc2UNCiIkbW9kdWxlUm9vdFxpbnRlcm5hbFxzY3JpcHRzXGxpY2Vuc2UucHMxIgEJ6gQAAAnrBAAABuwEAAAOcG9zdGltcG9ydC5wczEG7QQAAHdTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWxcc2NyaXB0c1xwb3N0aW1wb3J0LnBzMQlbAAAACe8EAAAJ8AQAAAGiBAAAcAAAAAbxBAAAsAM8Iw0KQWRkIGFsbCB0aGluZ3MgeW91IHdhbnQgdG8gcnVuIGJlZm9yZSBpbXBvcnRpbmcgdGhlIG1haW4gZnVuY3Rpb24gY29kZS4NCg0KV0FSTklORzogT05MWSBwcm92aWRlIHBhdGhzIHRvIGZpbGVzIQ0KDQpBZnRlciBidWlsZGluZyB0aGUgbW9kdWxlLCB0aGlzIGZpbGUgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQsIGFkZGluZyBhbnl0aGluZyBidXQgcGF0aHMgdG8gZmlsZXMgLi4uDQotIFdpbGwgbm90IHdvcmsgYWZ0ZXIgcHVibGlzaGluZw0KLSBDb3VsZCBicmVhayB0aGUgYnVpbGQgcHJvY2Vzcw0KIz4NCg0KJG1vZHVsZVJvb3QgPSBTcGxpdC1QYXRoIChTcGxpdC1QYXRoICRQU1NjcmlwdFJvb3QpDQoNCiMgTG9hZCB0aGUgc3RyaW5ncyB1c2VkIGluIG1lc3NhZ2VzDQoiJG1vZHVsZVJvb3RcaW50ZXJuYWxcc2NyaXB0c1xzdHJpbmdzLnBzMSIBCfIEAAAJ8wQAAAb0BAAADXByZWltcG9ydC5wczEG9QQAAHZTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25caW50ZXJuYWxcc2NyaXB0c1xwcmVpbXBvcnQucHMxCVsAAAAJ9wQAAAn4BAAAAaMEAABwAAAABvkEAAC4AzwjDQpUaGlzIGZpbGUgbG9hZHMgdGhlIHN0cmluZ3MgZG9jdW1lbnRzIGZyb20gdGhlIHJlc3BlY3RpdmUgbGFuZ3VhZ2UgZm9sZGVycy4NClRoaXMgYWxsb3dzIGxvY2FsaXppbmcgbWVzc2FnZXMgYW5kIGVycm9ycy4NCkxvYWQgcHNkMSBsYW5ndWFnZSBmaWxlcyBmb3IgZWFjaCBsYW5ndWFnZSB5b3Ugd2lzaCB0byBzdXBwb3J0Lg0KUGFydGlhbCB0cmFuc2xhdGlvbnMgYXJlIGFjY2VwdGFibGUgLSB3aGVuIG1pc3NpbmcgYSBjdXJyZW50IGxhbmd1YWdlIG1lc3NhZ2UsDQppdCB3aWxsIGZhbGxiYWNrIHRvIEVuZ2xpc2ggb3IgYW5vdGhlciBhdmFpbGFibGUgbGFuZ3VhZ2UuDQojPg0KSW1wb3J0LVBTRkxvY2FsaXplZFN0cmluZyAtUGF0aCAiJCgkc2NyaXB0Ok1vZHVsZVJvb3QpXGVuLXVzXCoucHNkMSIgLU1vZHVsZSAnw75uYW1lw74nIC1MYW5ndWFnZSAnZW4tVVMnAQn6BAAACfsEAAAG/AQAAAtzdHJpbmdzLnBzMQb9BAAAdFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxpbnRlcm5hbFxzY3JpcHRzXHN0cmluZ3MucHMxCVsAAAAJ/wQAAAkABQAAAaQEAABwAAAABgEFAABxPCMNCiMgRXhhbXBsZToNClJlZ2lzdGVyLVBTRlRlcHBBcmd1bWVudENvbXBsZXRlciAtQ29tbWFuZCBHZXQtQWxjb2hvbCAtUGFyYW1ldGVyIFR5cGUgLU5hbWUgw75uYW1lw74uYWxjb2hvbA0KIz4BCQIFAAAJAwUAAAYEBQAADmFzc2lnbm1lbnQucHMxBgUFAAB0U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXHRlcHBcYXNzaWdubWVudC5wczEJWwAAAAkHBQAACQgFAAABpQQAAHAAAAAGCQUAAKMBPCMNCiMgRXhhbXBsZToNClJlZ2lzdGVyLVBTRlRlcHBTY3JpcHRibG9jayAtTmFtZSAiw75uYW1lw74uYWxjb2hvbCIgLVNjcmlwdEJsb2NrIHsgJ0JlZXInLCdNZWFkJywnV2hpc2tleScsJ1dpbmUnLCdWb2RrYScsJ1J1bSAoM3kpJywgJ1J1bSAoNXkpJywgJ1J1bSAoN3kpJyB9DQojPgEJCgUAAAkLBQAABgwFAAAQZXhhbXBsZS50ZXBwLnBzMQYNBQAAdlNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblxpbnRlcm5hbFx0ZXBwXGV4YW1wbGUudGVwcC5wczEJWwAAAAkPBQAACRAFAAABpgQAAHAAAAAGEQUAAL4HIyBUYWIgRXhwYW5zaW9uDQoNCiMjIERlc2NyaXB0aW9uDQoNCk1vZGVybiBUYWIgRXhwYW5zaW9uIHdhcyBvcGVuZWQgdG8gdXNlcnMgd2l0aCB0aGUgbW9kdWxlIGBUYWIgRXhwYW5zaW9uIFBsdXMgUGx1c2AgKFRFUFApLg0KDQpJdCBhbGxvd3MgeW91IHRvIGRlZmluZSwgd2hhdCBvcHRpb25zIGEgdXNlciBpcyBvZmZlcmVkIHdoZW4gdGFiYmluZyB0aHJvdWdoIGlucHV0IG9wdGlvbnMuIFRoaXMgY2FuIHNhdmUgYSBsb3Qgb2YgdGltZSBmb3IgdGhlIHVzZXIgYW5kIGlzIGNvbnNpZGVyZWQgYSBrZXkgZWxlbWVudCBpbiB1c2VyIGV4cGVyaWVuY2UuDQoNClRoZSBgUFNGcmFtZXdvcmtgIG9mZmVycyBhIHNpbXBsaWZpZWQgd2F5IG9mIG9mZmVyaW5nIGp1c3QgdGhpcywgYXMgdGhlIHR3byBleGFtcGxlIGZpbGVzIHNob3cuDQoNCiMjIENvbmNlcHQNCg0KQ3VzdG9tIHRhYiBjb21wbGV0aW9uIGlzIGRlZmluZWQgaW4gdHdvIHN0ZXBzOg0KDQogLSBEZWZpbmUgYSBzY3JpcHRibG9jayB0aGF0IGlzIHJ1biB3aGVuIHRoZSB1c2VyIGhpdHMgYFRBQmAgYW5kIHByb3ZpZGVzIHRoZSBzdHJpbmdzIHRoYXQgYXJlIGhpcyBvcHRpb25zLg0KIC0gQXNzaWduIHRoYXQgc2NyaXB0YmxvY2sgdG8gdGhlIHBhcmFtZXRlciBvZiBhIGNvbW1hbmQuIFlvdSBjYW4gYXNzaWduIHRoZSBzYW1lIHNjcmlwdGJsb2NrIG11bHRpcGxlIHRpbWVzLg0KDQojIyBTdHJ1Y3R1cmUNCg0KSW1wb3J0IG9yZGVyIG1hdHRlcnMuIEluIG9yZGVyIHRvIG1ha2UgdGhpbmdzIHdvcmsgd2l0aCB0aGUgZGVmYXVsdCBzY2FmZm9sZCwgZm9sbG93IHRob3NlIHJ1bGVzOg0KDQogLSBBbGwgc2NyaXB0ZmlsZXMgX2RlZmluaW5nXyBjb21wbGV0aW9uIHNjcmlwdGJsb2NrcyBsaWtlIHRoaXM6IGAqLnRlcHAucHMxYA0KIC0gUHV0IGFsbCB5b3VyIGNvbXBsZXRpb24gYXNzaWdubWVudHMgaW4gYGFzc2lnbm1lbnQucHMxYAEJEgUAAAkTBQAABhQFAAAJcmVhZG1lLm1kBhUFAABvU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXGludGVybmFsXHRlcHBccmVhZG1lLm1kCVsAAAAJFwUAAAkYBQAAAacEAABwAAAABhkFAADVASMgRGVzY3JpcHRpb24NCg0KVGhpcyBpcyB3aGVyZSB0aGUgZnVuY3Rpb24gdGVzdHMgZ28uDQoNCk1ha2Ugc3VyZSB0byBwdXQgdGhlbSBpbiBmb2xkZXJzIHJlZmxlY3RpbmcgdGhlIGFjdHVhbCBtb2R1bGUgc3RydWN0dXJlLg0KDQpJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBpbnRlcm5hbCBhbmQgcHVibGljIGZ1bmN0aW9ucyBoZXJlLgEJGgUAAAkbBQAABhwFAAAJcmVhZG1lLm1kBh0FAABxU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHRlc3RzXGZ1bmN0aW9uc1xyZWFkbWUubWQJWwAAAAkfBQAACSAFAAABqAQAAHAAAAAGIQUAAIIGIyBMaXN0IG9mIGZvcmJpZGRlbiBjb21tYW5kcw0KJGdsb2JhbDpCYW5uZWRDb21tYW5kcyA9IEAoDQoJJ1dyaXRlLUhvc3QnDQoJJ1dyaXRlLVZlcmJvc2UnDQoJJ1dyaXRlLVdhcm5pbmcnDQoJJ1dyaXRlLUVycm9yJw0KCSdXcml0ZS1PdXRwdXQnDQoJJ1dyaXRlLUluZm9ybWF0aW9uJw0KCSdXcml0ZS1EZWJ1ZycNCgkNCgkjIFVzZSBDSU0gaW5zdGVhZCB3aGVyZSBwb3NzaWJsZQ0KCSdHZXQtV21pT2JqZWN0Jw0KCSdJbnZva2UtV21pTWV0aG9kJw0KCSdSZWdpc3Rlci1XbWlFdmVudCcNCgknUmVtb3ZlLVdtaU9iamVjdCcNCgknU2V0LVdtaUluc3RhbmNlJw0KDQoJIyBVc2UgR2V0LVdpbkV2ZW50IGluc3RlYWQNCgknR2V0LUV2ZW50TG9nJw0KKQ0KDQo8Iw0KCUNvbnRhaW5zIGxpc3Qgb2YgZXhjZXB0aW9ucyBmb3IgYmFubmVkIGNtZGxldHMuDQoJSW5zZXJ0IHRoZSBmaWxlIG5hbWVzIG9mIGZpbGVzIHRoYXQgbWF5IGNvbnRhaW4gdGhlbS4NCgkNCglFeGFtcGxlOg0KCSJXcml0ZS1Ib3N0IiAgPSBAKCdXcml0ZS1QU0ZIb3N0Q29sb3IucHMxJywnV3JpdGUtUFNGTWVzc2FnZS5wczEnKQ0KIz4NCiRnbG9iYWw6TWF5Q29udGFpbkNvbW1hbmQgPSBAew0KCSJXcml0ZS1Ib3N0IiAgPSBAKCkNCgkiV3JpdGUtVmVyYm9zZSIgPSBAKCkNCgkiV3JpdGUtV2FybmluZyIgPSBAKCkNCgkiV3JpdGUtRXJyb3IiICA9IEAoKQ0KCSJXcml0ZS1PdXRwdXQiID0gQCgpDQoJIldyaXRlLUluZm9ybWF0aW9uIiA9IEAoKQ0KCSJXcml0ZS1EZWJ1ZyIgPSBAKCkNCn0BCSIFAAAJIwUAAAYkBQAAHEZpbGVJbnRlZ3JpdHkuRXhjZXB0aW9ucy5wczEGJQUAAIIBU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHRlc3RzXGdlbmVyYWxcRmlsZUludGVncml0eS5FeGNlcHRpb25zLnBzMQlbAAAACScFAAAJKAUAAAGpBAAAcAAAAAYpBQAA4BgkbW9kdWxlUm9vdCA9IChSZXNvbHZlLVBhdGggIiRnbG9iYWw6dGVzdHJvb3RcLi4iKS5QYXRoDQoNCi4gIiRnbG9iYWw6dGVzdHJvb3RcZ2VuZXJhbFxGaWxlSW50ZWdyaXR5LkV4Y2VwdGlvbnMucHMxIg0KDQpEZXNjcmliZSAiVmVyaWZ5aW5nIGludGVncml0eSBvZiBtb2R1bGUgZmlsZXMiIHsNCglCZWZvcmVBbGwgew0KCQlmdW5jdGlvbiBHZXQtRmlsZUVuY29kaW5nDQoJCXsNCgkJPCMNCgkJCS5TWU5PUFNJUw0KCQkJCVRlc3RzIGEgZmlsZSBmb3IgZW5jb2RpbmcuDQoJCQkNCgkJCS5ERVNDUklQVElPTg0KCQkJCVRlc3RzIGEgZmlsZSBmb3IgZW5jb2RpbmcuDQoJCQkNCgkJCS5QQVJBTUVURVIgUGF0aA0KCQkJCVRoZSBmaWxlIHRvIHRlc3QNCgkJIz4NCgkJCVtDbWRsZXRCaW5kaW5nKCldDQoJCQlQYXJhbSAoDQoJCQkJW1BhcmFtZXRlcihNYW5kYXRvcnkgPSAkVHJ1ZSwgVmFsdWVGcm9tUGlwZWxpbmVCeVByb3BlcnR5TmFtZSA9ICRUcnVlKV0NCgkJCQlbQWxpYXMoJ0Z1bGxOYW1lJyldDQoJCQkJW3N0cmluZ10NCgkJCQkkUGF0aA0KCQkJKQ0KCQkJDQoJCQlpZiAoJFBTVmVyc2lvblRhYmxlLlBTVmVyc2lvbi5NYWpvciAtbHQgNikNCgkJCXsNCgkJCQlbYnl0ZVtdXSRieXRlID0gZ2V0LWNvbnRlbnQgLUVuY29kaW5nIGJ5dGUgLVJlYWRDb3VudCA0IC1Ub3RhbENvdW50IDQgLVBhdGggJFBhdGgNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlbYnl0ZVtdXSRieXRlID0gR2V0LUNvbnRlbnQgLUFzQnl0ZVN0cmVhbSAtUmVhZENvdW50IDQgLVRvdGFsQ291bnQgNCAtUGF0aCAkUGF0aA0KCQkJfQ0KCQkJDQoJCQlpZiAoJGJ5dGVbMF0gLWVxIDB4ZWYgLWFuZCAkYnl0ZVsxXSAtZXEgMHhiYiAtYW5kICRieXRlWzJdIC1lcSAweGJmKSB7ICdVVEY4IEJPTScgfQ0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMHhmZSAtYW5kICRieXRlWzFdIC1lcSAweGZmKSB7ICdVbmljb2RlJyB9DQoJCQllbHNlaWYgKCRieXRlWzBdIC1lcSAwIC1hbmQgJGJ5dGVbMV0gLWVxIDAgLWFuZCAkYnl0ZVsyXSAtZXEgMHhmZSAtYW5kICRieXRlWzNdIC1lcSAweGZmKSB7ICdVVEYzMicgfQ0KCQkJZWxzZWlmICgkYnl0ZVswXSAtZXEgMHgyYiAtYW5kICRieXRlWzFdIC1lcSAweDJmIC1hbmQgJGJ5dGVbMl0gLWVxIDB4NzYpIHsgJ1VURjcnIH0NCgkJCWVsc2UgeyAnVW5rbm93bicgfQ0KCQl9DQoJfQ0KDQoJQ29udGV4dCAiVmFsaWRhdGluZyBQUzEgU2NyaXB0IGZpbGVzIiB7DQoJCSRhbGxGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJG1vZHVsZVJvb3QgLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIg0KCQkNCgkJZm9yZWFjaCAoJGZpbGUgaW4gJGFsbEZpbGVzKQ0KCQl7DQoJCQkkbmFtZSA9ICRmaWxlLkZ1bGxOYW1lLlJlcGxhY2UoIiRtb2R1bGVSb290XCIsICcnKQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIHdpdGggQnl0ZSBPcmRlciBNYXJrIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsNCgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCBCT00nDQoJCQl9DQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHRyYWlsaW5nIHNwYWNlIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsNCgkJCQkoJGZpbGUgfCBTZWxlY3QtU3RyaW5nICJccyQiIHwgV2hlcmUtT2JqZWN0IHsgJF8uTGluZS5UcmltKCkuTGVuZ3RoIC1ndCAwfSkuTGluZU51bWJlciB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQkJfQ0KCQkJDQoJCQkkdG9rZW5zID0gJG51bGwNCgkJCSRwYXJzZUVycm9ycyA9ICRudWxsDQoJCQkkYXN0ID0gW1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uTGFuZ3VhZ2UuUGFyc2VyXTo6UGFyc2VGaWxlKCRmaWxlLkZ1bGxOYW1lLCBbcmVmXSR0b2tlbnMsIFtyZWZdJHBhcnNlRXJyb3JzKQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBubyBzeW50YXggZXJyb3JzIiAtVGVzdENhc2VzIEB7IHBhcnNlRXJyb3JzID0gJHBhcnNlRXJyb3JzIH0gew0KCQkJCSRwYXJzZUVycm9ycyB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQkJfQ0KCQkJDQoJCQlmb3JlYWNoICgkY29tbWFuZCBpbiAkZ2xvYmFsOkJhbm5lZENvbW1hbmRzKQ0KCQkJew0KCQkJCWlmICgkZ2xvYmFsOk1heUNvbnRhaW5Db21tYW5kWyIkY29tbWFuZCJdIC1ub3Rjb250YWlucyAkZmlsZS5OYW1lKQ0KCQkJCXsNCgkJCQkJSXQgIlskbmFtZV0gU2hvdWxkIG5vdCB1c2UgJGNvbW1hbmQiIC1UZXN0Q2FzZXMgQHsgdG9rZW5zID0gJHRva2VuczsgY29tbWFuZCA9ICRjb21tYW5kIH0gew0KCQkJCQkJJHRva2VucyB8IFdoZXJlLU9iamVjdCBUZXh0IC1FUSAkY29tbWFuZCB8IFNob3VsZCAtQmVOdWxsT3JFbXB0eQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KCQ0KCUNvbnRleHQgIlZhbGlkYXRpbmcgaGVscC50eHQgaGVscCBmaWxlcyIgew0KCQkkYWxsRmlsZXMgPSBHZXQtQ2hpbGRJdGVtIC1QYXRoICRtb2R1bGVSb290IC1SZWN1cnNlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIiouaGVscC50eHQiIHwgV2hlcmUtT2JqZWN0IEZ1bGxOYW1lIC1Ob3RMaWtlICIkbW9kdWxlUm9vdFx0ZXN0c1wqIg0KCQkNCgkJZm9yZWFjaCAoJGZpbGUgaW4gJGFsbEZpbGVzKQ0KCQl7DQoJCQkkbmFtZSA9ICRmaWxlLkZ1bGxOYW1lLlJlcGxhY2UoIiRtb2R1bGVSb290XCIsICcnKQ0KCQkJDQoJCQlJdCAiWyRuYW1lXSBTaG91bGQgaGF2ZSBVVEY4IGVuY29kaW5nIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsNCgkJCQlHZXQtRmlsZUVuY29kaW5nIC1QYXRoICRmaWxlLkZ1bGxOYW1lIHwgU2hvdWxkIC1CZSAnVVRGOCBCT00nDQoJCQl9DQoJCQkNCgkJCUl0ICJbJG5hbWVdIFNob3VsZCBoYXZlIG5vIHRyYWlsaW5nIHNwYWNlIiAtVGVzdENhc2VzIEB7IGZpbGUgPSAkZmlsZSB9IHsNCgkJCQkoJGZpbGUgfCBTZWxlY3QtU3RyaW5nICJccyQiIHwgV2hlcmUtT2JqZWN0IHsgJF8uTGluZS5UcmltKCkuTGVuZ3RoIC1ndCAwIH0gfCBNZWFzdXJlLU9iamVjdCkuQ291bnQgfCBTaG91bGQgLUJlIDANCgkJCX0NCgkJfQ0KCX0NCn0BCSoFAAAJKwUAAAYsBQAAF0ZpbGVJbnRlZ3JpdHkuVGVzdHMucHMxBi0FAAB9U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHRlc3RzXGdlbmVyYWxcRmlsZUludGVncml0eS5UZXN0cy5wczEJWwAAAAkvBQAACTAFAAABqgQAAHAAAAAGMQUAAJ0FIyBMaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkDQokZ2xvYmFsOkZ1bmN0aW9uSGVscFRlc3RFeGNlcHRpb25zID0gQCgNCiAgICANCikNCg0KPCMNCiAgTGlzdCBvZiBhcnJheWVkIGVudW1lcmF0aW9ucy4gVGhlc2UgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LiBBZGQgZnVsbCBuYW1lLg0KICBFeGFtcGxlOg0KDQogICJTcWxjb2xsYWJvcmF0aXZlLkRiYXRvb2xzLkNvbm5lY3Rpb24uTWFuYWdlbWVudENvbm5lY3Rpb25UeXBlW10iDQojPg0KJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMgPSBAKA0KCQ0KKQ0KDQo8Iw0KICBTb21lIHR5cGVzIG9uIHBhcmFtZXRlcnMganVzdCBmYWlsIHRoZWlyIHZhbGlkYXRpb24gbm8gbWF0dGVyIHdoYXQuDQogIEZvciB0aG9zZSBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIHNraXAgdGhlbSwgYnkgYWRkaW5nIHRoZW0gdG8gdGhpcyBoYXNodGFibGUuDQogIEFkZCBieSBmb2xsb3dpbmcgdGhpcyBjb252ZW50aW9uOiA8Y29tbWFuZCBuYW1lPiA9IEAoPGxpc3Qgb2YgcGFyYW1ldGVyIG5hbWVzPikNCiAgRXhhbXBsZToNCg0KICAiR2V0LURiYUNtT2JqZWN0IiAgICAgICA9IEAoIkRvTm90VXNlIikNCiM+DQokZ2xvYmFsOkhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGUgPSBAew0KICAgIA0KfQ0KAQkyBQAACTMFAAAGNAUAABNIZWxwLkV4Y2VwdGlvbnMucHMxBjUFAAB5U2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw74uRXh0ZW5zaW9uXHRlc3RzXGdlbmVyYWxcSGVscC5FeGNlcHRpb25zLnBzMQlbAAAACTcFAAAJOAUAAAGrBAAAcAAAAAY5BQAAzjQ8Iw0KICAgIC5OT1RFUw0KICAgICAgICBUaGUgb3JpZ2luYWwgdGVzdCB0aGlzIGlzIGJhc2VkIHVwb24gd2FzIHdyaXR0ZW4gYnkgSnVuZSBCbGVuZGVyLg0KCQlBZnRlciBzZXZlcmFsIHJvdW5kcyBvZiBtb2RpZmljYXRpb25zIGl0IHN0YW5kcyBub3cgYXMgaXQgaXMsIGJ1dCB0aGUgaG9ub3IgcmVtYWlucyBoZXJzLg0KDQoJCVRoYW5rIHlvdSBKdW5lLCBmb3IgYWxsIHlvdSBoYXZlIGRvbmUhDQoNCiAgICAuREVTQ1JJUFRJT04NCgkJVGhpcyB0ZXN0IGV2YWx1YXRlcyB0aGUgaGVscCBmb3IgYWxsIGNvbW1hbmRzIGluIGEgbW9kdWxlLg0KDQoJLlBBUkFNRVRFUiBTa2lwVGVzdA0KCQlEaXNhYmxlcyB0aGlzIHRlc3QuDQoJDQoJLlBBUkFNRVRFUiBDb21tYW5kUGF0aA0KCQlMaXN0IG9mIHBhdGhzIHVuZGVyIHdoaWNoIHRoZSBzY3JpcHQgZmlsZXMgYXJlIHN0b3JlZC4NCgkJVGhpcyB0ZXN0IGFzc3VtZXMgdGhhdCBhbGwgZnVuY3Rpb25zIGhhdmUgdGhlaXIgb3duIGZpbGUgdGhhdCBpcyBuYW1lZCBhZnRlciB0aGVtc2VsdmVzLg0KCQlUaGVzZSBwYXRocyBhcmUgdXNlZCB0byBzZWFyY2ggZm9yIGNvbW1hbmRzIHRoYXQgc2hvdWxkIGV4aXN0IGFuZCBiZSB0ZXN0ZWQuDQoJCVdpbGwgc2VhcmNoIHJlY3Vyc2l2ZWx5IGFuZCBhY2NlcHRzIHdpbGRjYXJkcywgbWFrZSBzdXJlIG9ubHkgZnVuY3Rpb25zIGFyZSBmb3VuZA0KDQoJLlBBUkFNRVRFUiBNb2R1bGVOYW1lDQoJCU5hbWUgb2YgdGhlIG1vZHVsZSB0byBiZSB0ZXN0ZWQuDQoJCVRoZSBtb2R1bGUgbXVzdCBhbHJlYWR5IGJlIGltcG9ydGVkDQoNCgkuUEFSQU1FVEVSIEV4Y2VwdGlvbnNGaWxlDQoJCUZpbGUgaW4gd2hpY2ggZXhjZXB0aW9ucyBhbmQgYWRqdXN0bWVudHMgYXJlIGNvbmZpZ3VyZWQuDQoJCUluIGl0IHRoZXJlIHNob3VsZCBiZSB0d28gYXJyYXlzIGFuZCBhIGhhc2h0YWJsZSBkZWZpbmVkOg0KCQkJJGdsb2JhbDpGdW5jdGlvbkhlbHBUZXN0RXhjZXB0aW9ucw0KCQkJJGdsb2JhbDpIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMNCgkJCSRnbG9iYWw6SGVscFRlc3RTa2lwUGFyYW1ldGVyVHlwZQ0KCQlUaGVzZSBjYW4gYmUgdXNlZCB0byB0d2VhayB0aGUgdGVzdHMgc2xpZ2h0bHkgaW4gY2FzZXMgb2YgbmVlZC4NCgkJU2VlIHRoZSBleGFtcGxlIGZpbGUgZm9yIGV4cGxhbmF0aW9ucyBvbiBlYWNoIG9mIHRoZXNlIHVzYWdlIGFuZCBlZmZlY3QuDQojPg0KW0NtZGxldEJpbmRpbmcoKV0NClBhcmFtICgNCglbc3dpdGNoXQ0KCSRTa2lwVGVzdCwNCgkNCglbc3RyaW5nW11dDQoJJENvbW1hbmRQYXRoID0gQCgiJGdsb2JhbDp0ZXN0cm9vdFwuLlxmdW5jdGlvbnMiLCAiJGdsb2JhbDp0ZXN0cm9vdFwuLlxpbnRlcm5hbFxmdW5jdGlvbnMiKSwNCgkNCglbc3RyaW5nXQ0KCSRNb2R1bGVOYW1lID0gIsO+bmFtZcO+IiwNCgkNCglbc3RyaW5nXQ0KCSRFeGNlcHRpb25zRmlsZSA9ICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcSGVscC5FeGNlcHRpb25zLnBzMSINCikNCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0NCi4gJEV4Y2VwdGlvbnNGaWxlDQoNCiRpbmNsdWRlZE5hbWVzID0gKEdldC1DaGlsZEl0ZW0gJENvbW1hbmRQYXRoIC1SZWN1cnNlIC1GaWxlIHwgV2hlcmUtT2JqZWN0IE5hbWUgLWxpa2UgIioucHMxIikuQmFzZU5hbWUNCiRjb21tYW5kVHlwZXMgPSBAKCdDbWRsZXQnLCAnRnVuY3Rpb24nKQ0KaWYgKCRQU1ZlcnNpb25UYWJsZS5QU0VkaXRpb24gLWVxICdEZXNrdG9wJyApIHsgJGNvbW1hbmRUeXBlcyArPSAnV29ya2Zsb3cnIH0NCiRjb21tYW5kcyA9IEdldC1Db21tYW5kIC1Nb2R1bGUgKEdldC1Nb2R1bGUgJE1vZHVsZU5hbWUpIC1Db21tYW5kVHlwZSAkY29tbWFuZFR5cGVzIHwgV2hlcmUtT2JqZWN0IE5hbWUgLUluICRpbmNsdWRlZE5hbWVzDQoNCiMjIFdoZW4gdGVzdGluZyBoZWxwLCByZW1lbWJlciB0aGF0IGhlbHAgaXMgY2FjaGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBzZXNzaW9uLg0KIyMgVG8gdGVzdCwgcmVzdGFydCBzZXNzaW9uLg0KDQoNCmZvcmVhY2ggKCRjb21tYW5kIGluICRjb21tYW5kcykgew0KICAgICRjb21tYW5kTmFtZSA9ICRjb21tYW5kLk5hbWUNCiAgICANCiAgICAjIFNraXAgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBvbiB0aGUgZXhjbHVzaW9ucyBsaXN0DQogICAgaWYgKCRnbG9iYWw6RnVuY3Rpb25IZWxwVGVzdEV4Y2VwdGlvbnMgLWNvbnRhaW5zICRjb21tYW5kTmFtZSkgeyBjb250aW51ZSB9DQogICAgDQogICAgIyBUaGUgbW9kdWxlLXF1YWxpZmllZCBjb21tYW5kIGZhaWxzIG9uIE1pY3Jvc29mdC5Qb3dlclNoZWxsLkFyY2hpdmUgY21kbGV0cw0KICAgICRIZWxwID0gR2V0LUhlbHAgJGNvbW1hbmROYW1lIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlDQoJDQoJRGVzY3JpYmUgIlRlc3QgaGVscCBmb3IgJGNvbW1hbmROYW1lIiB7DQogICAgICAgIA0KCQkjIElmIGhlbHAgaXMgbm90IGZvdW5kLCBzeW5vcHNpcyBpbiBhdXRvLWdlbmVyYXRlZCBoZWxwIGlzIHRoZSBzeW50YXggZGlhZ3JhbQ0KCQlJdCAic2hvdWxkIG5vdCBiZSBhdXRvLWdlbmVyYXRlZCIgLVRlc3RDYXNlcyBAeyBIZWxwID0gJEhlbHAgfSB7DQoJCQkkSGVscC5TeW5vcHNpcyB8IFNob3VsZCAtTm90IC1CZUxpa2UgJypgW2A8Q29tbW9uUGFyYW1ldGVyc2A+YF0qJw0KCQl9DQogICAgICAgIA0KCQkjIFNob3VsZCBiZSBhIGRlc2NyaXB0aW9uIGZvciBldmVyeSBmdW5jdGlvbg0KCQlJdCAiZ2V0cyBkZXNjcmlwdGlvbiBmb3IgJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsNCgkJCSRIZWxwLkRlc2NyaXB0aW9uIHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KICAgICAgICANCgkJIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUNCgkJSXQgImdldHMgZXhhbXBsZSBjb2RlIGZyb20gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsNCgkJCSgkSGVscC5FeGFtcGxlcy5FeGFtcGxlIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMSkuQ29kZSB8IFNob3VsZCAtTm90IC1CZU51bGxPckVtcHR5DQoJCX0NCgkNCgkJIyBTaG91bGQgYmUgYXQgbGVhc3Qgb25lIGV4YW1wbGUgZGVzY3JpcHRpb24NCgkJSXQgImdldHMgZXhhbXBsZSBoZWxwIGZyb20gJGNvbW1hbmROYW1lIiAtVGVzdENhc2VzIEB7IEhlbHAgPSAkSGVscCB9IHsNCgkJCSgkSGVscC5FeGFtcGxlcy5FeGFtcGxlLlJlbWFya3MgfCBTZWxlY3QtT2JqZWN0IC1GaXJzdCAxKS5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KICAgICAgICANCiAgICAgICAgQ29udGV4dCAiVGVzdCBwYXJhbWV0ZXIgaGVscCBmb3IgJGNvbW1hbmROYW1lIiB7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRjb21tb24gPSAnRGVidWcnLCAnRXJyb3JBY3Rpb24nLCAnRXJyb3JWYXJpYWJsZScsICdJbmZvcm1hdGlvbkFjdGlvbicsICdJbmZvcm1hdGlvblZhcmlhYmxlJywgJ091dEJ1ZmZlcicsICdPdXRWYXJpYWJsZScsICdQaXBlbGluZVZhcmlhYmxlJywgJ1ZlcmJvc2UnLCAnV2FybmluZ0FjdGlvbicsICdXYXJuaW5nVmFyaWFibGUnDQogICAgICAgICAgICANCiAgICAgICAgICAgICRwYXJhbWV0ZXJzID0gJGNvbW1hbmQuUGFyYW1ldGVyU2V0cy5QYXJhbWV0ZXJzIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IE5hbWUgLVVuaXF1ZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1ub3RpbiAkY29tbW9uDQogICAgICAgICAgICAkcGFyYW1ldGVyTmFtZXMgPSAkcGFyYW1ldGVycy5OYW1lDQogICAgICAgICAgICAkSGVscFBhcmFtZXRlck5hbWVzID0gJEhlbHAuUGFyYW1ldGVycy5QYXJhbWV0ZXIuTmFtZSB8IFNvcnQtT2JqZWN0IC1VbmlxdWUNCiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJhbWV0ZXIgaW4gJHBhcmFtZXRlcnMpIHsNCiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyTmFtZSA9ICRwYXJhbWV0ZXIuTmFtZQ0KICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJIZWxwID0gJEhlbHAucGFyYW1ldGVycy5wYXJhbWV0ZXIgfCBXaGVyZS1PYmplY3QgTmFtZSAtRVEgJHBhcmFtZXRlck5hbWUNCgkJCQ0KCQkJCSMgU2hvdWxkIGJlIGEgZGVzY3JpcHRpb24gZm9yIGV2ZXJ5IHBhcmFtZXRlcg0KCQkJCUl0ICJnZXRzIGhlbHAgZm9yIHBhcmFtZXRlcjogJHBhcmFtZXRlck5hbWUgOiBpbiAkY29tbWFuZE5hbWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwIH0gew0KCQkJCQkkcGFyYW1ldGVySGVscC5EZXNjcmlwdGlvbi5UZXh0IHwgU2hvdWxkIC1Ob3QgLUJlTnVsbE9yRW1wdHkNCgkJCQl9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGNvZGVNYW5kYXRvcnkgPSAkcGFyYW1ldGVyLklzTWFuZGF0b3J5LnRvU3RyaW5nKCkNCgkJCQlJdCAiaGVscCBmb3IgJHBhcmFtZXRlck5hbWUgcGFyYW1ldGVyIGluICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBNYW5kYXRvcnkgdmFsdWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwOyBjb2RlTWFuZGF0b3J5ID0gJGNvZGVNYW5kYXRvcnkgfSB7DQoJCQkJCSRwYXJhbWV0ZXJIZWxwLlJlcXVpcmVkIHwgU2hvdWxkIC1CZSAkY29kZU1hbmRhdG9yeQ0KCQkJCX0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoJEhlbHBUZXN0U2tpcFBhcmFtZXRlclR5cGVbJGNvbW1hbmROYW1lXSAtY29udGFpbnMgJHBhcmFtZXRlck5hbWUpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRjb2RlVHlwZSA9ICRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5OYW1lDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5Jc0VudW0pIHsNCiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQ0KICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSAkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGU6OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZSkNCgkJCQkJCSMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQ0KCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBwYXJhbWV0ZXJIZWxwID0gJHBhcmFtZXRlckhlbHA7IG5hbWVzID0gJG5hbWVzIH0gew0KCQkJCQkJJHBhcmFtZXRlckhlbHAucGFyYW1ldGVyVmFsdWVHcm91cC5wYXJhbWV0ZXJWYWx1ZSB8IFNob3VsZCAtYmUgJG5hbWVzDQoJCQkJCX0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZWlmICgkcGFyYW1ldGVyLlBhcmFtZXRlclR5cGUuRnVsbE5hbWUgLWluICRIZWxwVGVzdEVudW1lcmF0ZWRBcnJheXMpIHsNCiAgICAgICAgICAgICAgICAgICAgIyBFbnVtZXJhdGlvbnMgb2Z0ZW4gaGF2ZSBpc3N1ZXMgd2l0aCB0aGUgdHlwZW5hbWUgbm90IGJlaW5nIHJlbGlhYmx5IGF2YWlsYWJsZQ0KICAgICAgICAgICAgICAgICAgICAkbmFtZXMgPSBbRW51bV06OkdldE5hbWVzKCRwYXJhbWV0ZXIuUGFyYW1ldGVyVHlwZS5EZWNsYXJlZE1lbWJlcnNbMF0uUmV0dXJuVHlwZSkNCgkJCQkJSXQgImhlbHAgZm9yICRjb21tYW5kTmFtZSBoYXMgY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBmb3IgJHBhcmFtZXRlck5hbWUiIC1UZXN0Q2FzZXMgQHsgcGFyYW1ldGVySGVscCA9ICRwYXJhbWV0ZXJIZWxwOyBuYW1lcyA9ICRuYW1lcyB9IHsNCgkJCQkJCSRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlR3JvdXAucGFyYW1ldGVyVmFsdWUgfCBTaG91bGQgLWJlICRuYW1lcw0KCQkJCQl9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAjIFRvIGF2b2lkIGNhbGxpbmcgVHJpbSBtZXRob2Qgb24gYSBudWxsIG9iamVjdC4NCiAgICAgICAgICAgICAgICAgICAgJGhlbHBUeXBlID0gaWYgKCRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlKSB7ICRwYXJhbWV0ZXJIZWxwLnBhcmFtZXRlclZhbHVlLlRyaW0oKSB9DQoJCQkJCSMgUGFyYW1ldGVyIHR5cGUgaW4gSGVscCBzaG91bGQgbWF0Y2ggY29kZQ0KCQkJCQlJdCAiaGVscCBmb3IgJGNvbW1hbmROYW1lIGhhcyBjb3JyZWN0IHBhcmFtZXRlciB0eXBlIGZvciAkcGFyYW1ldGVyTmFtZSIgLVRlc3RDYXNlcyBAeyBoZWxwVHlwZSA9ICRoZWxwVHlwZTsgY29kZVR5cGUgPSAkY29kZVR5cGUgfSB7DQoJCQkJCQkkaGVscFR5cGUgfCBTaG91bGQgLWJlICRjb2RlVHlwZQ0KCQkJCQl9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZm9yZWFjaCAoJGhlbHBQYXJtIGluICRIZWxwUGFyYW1ldGVyTmFtZXMpIHsNCgkJCQkjIFNob3VsZG4ndCBmaW5kIGV4dHJhIHBhcmFtZXRlcnMgaW4gaGVscC4NCgkJCQlJdCAiZmluZHMgaGVscCBwYXJhbWV0ZXIgaW4gY29kZTogJGhlbHBQYXJtIiAtVGVzdENhc2VzIEB7IGhlbHBQYXJtID0gJGhlbHBQYXJtOyBwYXJhbWV0ZXJOYW1lcyA9ICRwYXJhbWV0ZXJOYW1lcyB9IHsNCgkJCQkJJGhlbHBQYXJtIC1pbiAkcGFyYW1ldGVyTmFtZXMgfCBTaG91bGQgLUJlICR0cnVlDQoJCQkJfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQEJOgUAAAk7BQAABjwFAAAOSGVscC5UZXN0cy5wczEGPQUAAHRTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cdGVzdHNcZ2VuZXJhbFxIZWxwLlRlc3RzLnBzMQlbAAAACT8FAAAJQAUAAAGsBAAAcAAAAAZBBQAAyxVEZXNjcmliZSAiVmFsaWRhdGluZyB0aGUgbW9kdWxlIG1hbmlmZXN0IiB7DQoJJG1vZHVsZVJvb3QgPSAoUmVzb2x2ZS1QYXRoICIkZ2xvYmFsOnRlc3Ryb290XC4uIikuUGF0aA0KCSRtYW5pZmVzdCA9ICgoR2V0LUNvbnRlbnQgIiRtb2R1bGVSb290XMO+bmFtZcO+LnBzZDEiKSAtam9pbiAiYG4iKSB8IEludm9rZS1FeHByZXNzaW9uDQoJQ29udGV4dCAiQmFzaWMgcmVzb3VyY2VzIHZhbGlkYXRpb24iIHsNCgkJJGZpbGVzID0gR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSB8IFdoZXJlLU9iamVjdCBOYW1lIC1saWtlICIqLnBzMSINCgkJSXQgIkV4cG9ydHMgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgcHVibGljIGZvbGRlciIgLVRlc3RDYXNlcyBAeyBmaWxlcyA9ICRmaWxlczsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7DQoJCQkNCgkJCSRmdW5jdGlvbnMgPSAoQ29tcGFyZS1PYmplY3QgLVJlZmVyZW5jZU9iamVjdCAkZmlsZXMuQmFzZU5hbWUgLURpZmZlcmVuY2VPYmplY3QgJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgV2hlcmUtT2JqZWN0IFNpZGVJbmRpY2F0b3IgLUxpa2UgJzw9JykuSW5wdXRPYmplY3QNCgkJCSRmdW5jdGlvbnMgfCBTaG91bGQgLUJlTnVsbE9yRW1wdHkNCgkJfQ0KCQlJdCAiRXhwb3J0cyBubyBmdW5jdGlvbiB0aGF0IGlzbid0IGFsc28gcHJlc2VudCBpbiB0aGUgcHVibGljIGZvbGRlciIgLVRlc3RDYXNlcyBAeyBmaWxlcyA9ICRmaWxlczsgbWFuaWZlc3QgPSAkbWFuaWZlc3QgfSB7DQoJCQkkZnVuY3Rpb25zID0gKENvbXBhcmUtT2JqZWN0IC1SZWZlcmVuY2VPYmplY3QgJGZpbGVzLkJhc2VOYW1lIC1EaWZmZXJlbmNlT2JqZWN0ICRtYW5pZmVzdC5GdW5jdGlvbnNUb0V4cG9ydCB8IFdoZXJlLU9iamVjdCBTaWRlSW5kaWNhdG9yIC1MaWtlICc9PicpLklucHV0T2JqZWN0DQoJCQkkZnVuY3Rpb25zIHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCX0NCgkJDQoJCUl0ICJFeHBvcnRzIG5vbmUgb2YgaXRzIGludGVybmFsIGZ1bmN0aW9ucyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gew0KCQkJJGZpbGVzID0gR2V0LUNoaWxkSXRlbSAiJG1vZHVsZVJvb3RcaW50ZXJuYWxcZnVuY3Rpb25zIiAtUmVjdXJzZSAtRmlsZSAtRmlsdGVyICIqLnBzMSINCgkJCSRmaWxlcyB8IFdoZXJlLU9iamVjdCBCYXNlTmFtZSAtSW4gJG1hbmlmZXN0LkZ1bmN0aW9uc1RvRXhwb3J0IHwgU2hvdWxkIC1CZU51bGxPckVtcHR5DQoJCX0NCgl9DQoJDQoJQ29udGV4dCAiSW5kaXZpZHVhbCBmaWxlIHZhbGlkYXRpb24iIHsNCgkJSXQgIlRoZSByb290IG1vZHVsZSBmaWxlIGV4aXN0cyIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IG1hbmlmZXN0ID0gJG1hbmlmZXN0IH0gew0KCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkKCRtYW5pZmVzdC5Sb290TW9kdWxlKSIgfCBTaG91bGQgLUJlICR0cnVlDQoJCX0NCgkJDQoJCWZvcmVhY2ggKCRmb3JtYXQgaW4gJG1hbmlmZXN0LkZvcm1hdHNUb1Byb2Nlc3MpDQoJCXsNCgkJCUl0ICJUaGUgZmlsZSAkZm9ybWF0IHNob3VsZCBleGlzdCIgLVRlc3RDYXNlcyBAeyBtb2R1bGVSb290ID0gJG1vZHVsZVJvb3Q7IGZvcm1hdCA9ICRmb3JtYXQgfSB7DQoJCQkJVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkZm9ybWF0IiB8IFNob3VsZCAtQmUgJHRydWUNCgkJCX0NCgkJfQ0KCQkNCgkJZm9yZWFjaCAoJHR5cGUgaW4gJG1hbmlmZXN0LlR5cGVzVG9Qcm9jZXNzKQ0KCQl7DQoJCQlJdCAiVGhlIGZpbGUgJHR5cGUgc2hvdWxkIGV4aXN0IiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgdHlwZSA9ICR0eXBlIH0gew0KCQkJCVRlc3QtUGF0aCAiJG1vZHVsZVJvb3RcJHR5cGUiIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KCQkJfQ0KCQl9DQoJCQ0KCQlmb3JlYWNoICgkYXNzZW1ibHkgaW4gJG1hbmlmZXN0LlJlcXVpcmVkQXNzZW1ibGllcykNCgkJew0KICAgICAgICAgICAgaWYgKCRhc3NlbWJseSAtbGlrZSAiKi5kbGwiKSB7DQogICAgICAgICAgICAgICAgSXQgIlRoZSBmaWxlICRhc3NlbWJseSBzaG91bGQgZXhpc3QiIC1UZXN0Q2FzZXMgQHsgbW9kdWxlUm9vdCA9ICRtb2R1bGVSb290OyBhc3NlbWJseSA9ICRhc3NlbWJseSB9IHsNCiAgICAgICAgICAgICAgICAgICAgVGVzdC1QYXRoICIkbW9kdWxlUm9vdFwkYXNzZW1ibHkiIHwgU2hvdWxkIC1CZSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIEl0ICJUaGUgZmlsZSAkYXNzZW1ibHkgc2hvdWxkIGxvYWQgZnJvbSB0aGUgR0FDIiAtVGVzdENhc2VzIEB7IG1vZHVsZVJvb3QgPSAkbW9kdWxlUm9vdDsgYXNzZW1ibHkgPSAkYXNzZW1ibHkgfSB7DQogICAgICAgICAgICAgICAgICAgIHsgQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSAkYXNzZW1ibHkgfSB8IFNob3VsZCAtTm90IC1UaHJvdw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KCQkNCgkJZm9yZWFjaCAoJHRhZyBpbiAkbWFuaWZlc3QuUHJpdmF0ZURhdGEuUFNEYXRhLlRhZ3MpDQoJCXsNCgkJCUl0ICJUYWdzIHNob3VsZCBoYXZlIG5vIHNwYWNlcyBpbiBuYW1lIiAtVGVzdENhc2VzIEB7IHRhZyA9ICR0YWcgfSB7DQoJCQkJJHRhZyAtbWF0Y2ggIiAiIHwgU2hvdWxkIC1CZSAkZmFsc2UNCgkJCX0NCgkJfQ0KCX0NCn0BCUIFAAAJQwUAAAZEBQAAEk1hbmlmZXN0LlRlc3RzLnBzMQZFBQAAeFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblx0ZXN0c1xnZW5lcmFsXE1hbmlmZXN0LlRlc3RzLnBzMQlbAAAACUcFAAAJSAUAAAGtBAAAcAAAAAZJBQAAlglbQ21kbGV0QmluZGluZygpXQ0KUGFyYW0gKA0KCVtzd2l0Y2hdDQoJJFNraXBUZXN0LA0KCQ0KCVtzdHJpbmdbXV0NCgkkQ29tbWFuZFBhdGggPSBAKCIkZ2xvYmFsOnRlc3Ryb290XC4uXGZ1bmN0aW9ucyIsICIkZ2xvYmFsOnRlc3Ryb290XC4uXGludGVybmFsXGZ1bmN0aW9ucyIpDQopDQoNCmlmICgkU2tpcFRlc3QpIHsgcmV0dXJuIH0NCg0KJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQoNCkRlc2NyaWJlICdJbnZva2luZyBQU1NjcmlwdEFuYWx5emVyIGFnYWluc3QgY29tbWFuZGJhc2UnIHsNCgkkY29tbWFuZEZpbGVzID0gZm9yZWFjaCAoJHBhdGggaW4gJENvbW1hbmRQYXRoKSB7DQogICAgICAgIEdldC1DaGlsZEl0ZW0gLVBhdGggJHBhdGggLVJlY3Vyc2UgfCBXaGVyZS1PYmplY3QgTmFtZSAtbGlrZSAiKi5wczEiDQogICAgfQ0KCSRzY3JpcHRBbmFseXplclJ1bGVzID0gR2V0LVNjcmlwdEFuYWx5emVyUnVsZQ0KCQ0KCWZvcmVhY2ggKCRmaWxlIGluICRjb21tYW5kRmlsZXMpDQoJew0KCQlDb250ZXh0ICJBbmFseXppbmcgJCgkZmlsZS5CYXNlTmFtZSkiIHsNCgkJCSRhbmFseXNpcyA9IEludm9rZS1TY3JpcHRBbmFseXplciAtUGF0aCAkZmlsZS5GdWxsTmFtZSAtRXhjbHVkZVJ1bGUgUFNBdm9pZFRyYWlsaW5nV2hpdGVzcGFjZSwgUFNTaG91bGRQcm9jZXNzDQoJCQkNCgkJCWZvckVhY2ggKCRydWxlIGluICRzY3JpcHRBbmFseXplclJ1bGVzKQ0KCQkJew0KCQkJCUl0ICJTaG91bGQgcGFzcyAkcnVsZSIgLVRlc3RDYXNlcyBAeyBhbmFseXNpcyA9ICRhbmFseXNpczsgcnVsZSA9ICRydWxlIH0gew0KCQkJCQlJZiAoJGFuYWx5c2lzLlJ1bGVOYW1lIC1jb250YWlucyAkcnVsZSkNCgkJCQkJew0KCQkJCQkJJGFuYWx5c2lzIHwgV2hlcmUtT2JqZWN0IFJ1bGVOYW1lIC1FUSAkcnVsZSAtb3V0dmFyaWFibGUgZmFpbHVyZXMgfCBGb3JFYWNoLU9iamVjdCB7ICRudWxsID0gJGdsb2JhbDpfX3Blc3Rlcl9kYXRhLlNjcmlwdEFuYWx5emVyLkFkZCgkXykgfQ0KCQkJCQkJDQoJCQkJCQkxIHwgU2hvdWxkIC1CZSAwDQoJCQkJCX0NCgkJCQkJZWxzZQ0KCQkJCQl7DQoJCQkJCQkwIHwgU2hvdWxkIC1CZSAwDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQp9AQlKBQAACUsFAAAGTAUAABpQU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQZNBQAAgAFTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+XFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvi5FeHRlbnNpb25cdGVzdHNcZ2VuZXJhbFxQU1NjcmlwdEFuYWx5emVyLlRlc3RzLnBzMQlbAAAACU8FAAAJUAUAAAGuBAAAcAAAAAZRBQAA5gckZXhjZXB0aW9ucyA9IEB7IH0NCg0KPCMNCkEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgTUFZIGJlIGluIHRoZSBsYW5ndWFnZSBmaWxlcywgd2l0aG91dCBjYXVzaW5nIHRoZSB0ZXN0cyB0byBmYWlsLg0KVGhpcyBpcyBjb21tb25seSB1c2VkIGluIG1vZHVsZXMgdGhhdCBnZW5lcmF0ZSBsb2NhbGl6ZWQgbWVzc2FnZXMgc3RyYWlnaHQgZnJvbSBDIy4NClNwZWNpZnkgdGhlIGZ1bGwga2V5IGFzIGl0IGlzIHdyaXR0ZW4gaW4gdGhlIGxhbmd1YWdlIGZpbGVzLCBkbyBub3QgcHJlcGVuZCB0aGUgbW9kdWxlbmFtZSwNCmFzIHlvdSB3b3VsZCBoYXZlIHRvIGluIEMjIGNvZGUuDQoNCkV4YW1wbGU6DQokZXhjZXB0aW9uc1snTGVnYWxTdXJwbHVzJ10gPSBAKA0KICAgICdFeGNlcHRpb24uU3RyZWFtcy5GYWlsZWRDcmVhdGUnDQogICAgJ0V4Y2VwdGlvbi5TdHJlYW1zLkZhaWxlZERpc3Bvc2UnDQopDQojPg0KJGV4Y2VwdGlvbnNbJ0xlZ2FsU3VycGx1cyddID0gQCgNCg0KKQ0KPCMNCkEgbGlzdCBvZiBlbnRyaWVzIHRoYXQgTUFZIGJlIHVzZWQgd2l0aG91dCBuZWVkaW5nIHRvIGhhdmUgdGV4dCBkZWZpbmVkLg0KVGhpcyBpcyBpbnRlbmRlZCBmb3IgbW9kdWxlcyAocmUtKXVzaW5nIHN0cmluZ3MgcHJvdmlkZWQgYnkgYW5vdGhlciBtb2R1bGUNCiM+DQokZXhjZXB0aW9uc1snTm9UZXh0TmVlZGVkJ10gPSBAKA0KCSdWYWxpZGF0ZS5GU1BhdGgnDQoJJ1ZhbGlkYXRlLkZTUGF0aC5GaWxlJw0KCSdWYWxpZGF0ZS5GU1BhdGguRmlsZU9yUGFyZW50Jw0KCSdWYWxpZGF0ZS5GU1BhdGguRm9sZGVyJw0KCSdWYWxpZGF0ZS5QYXRoJw0KCSdWYWxpZGF0ZS5QYXRoLkNvbnRhaW5lcicNCgknVmFsaWRhdGUuUGF0aC5MZWFmJw0KCSdWYWxpZGF0ZS5UaW1lU3Bhbi5Qb3NpdGl2ZScNCgknVmFsaWRhdGUuVXJpLkFic29sdXRlJw0KCSdWYWxpZGF0ZS5VcmkuQWJzb2x1dGUuRmlsZScNCgknVmFsaWRhdGUuVXJpLkFic29sdXRlLkh0dHBzJw0KKQ0KDQokZXhjZXB0aW9ucwEJUgUAAAlTBQAABlQFAAAWc3RyaW5ncy5FeGNlcHRpb25zLnBzMQZVBQAAfFNlY3JldE1hbmFnZW1lbnQuw75uYW1lw75cU2VjcmV0TWFuYWdlbWVudC7Dvm5hbWXDvlxTZWNyZXRNYW5hZ2VtZW50LsO+bmFtZcO+LkV4dGVuc2lvblx0ZXN0c1xnZW5lcmFsXHN0cmluZ3MuRXhjZXB0aW9ucy5wczEJWwAAAAlXBQAACVgFAAABrwQAAHAAAAAGWQUAAJcIPCMNCi5ERVNDUklQVElPTg0KICAgIFRoaXMgdGVzdCB2ZXJpZmllcywgdGhhdCBhbGwgc3RyaW5ncyB0aGF0IGhhdmUgYmVlbiB1c2VkLA0KICAgIGFyZSBsaXN0ZWQgaW4gdGhlIGxhbmd1YWdlIGZpbGVzIGFuZCB0aHVzIGhhdmUgYSBtZXNzYWdlIGJlaW5nIGRpc3BsYXllZC4NCg0KICAgIEl0IGFsc28gY2hlY2tzLCB3aGV0aGVyIHRoZSBsYW5ndWFnZSBmaWxlcyBoYXZlIG9ycGhhbmVkIGVudHJpZXMgdGhhdCBuZWVkIGNsZWFuaW5nIHVwLg0KIz4NCg0KDQoNCkRlc2NyaWJlICJUZXN0aW5nIGxvY2FsaXphdGlvbiBzdHJpbmdzIiB7DQoJJG1vZHVsZVJvb3QgPSAoR2V0LU1vZHVsZSDDvm5hbWXDvikuTW9kdWxlQmFzZQ0KCSRzdHJpbmdzUmVzdWx0cyA9IEV4cG9ydC1QU01EU3RyaW5nIC1Nb2R1bGVSb290ICRtb2R1bGVSb290DQoJJGV4Y2VwdGlvbnMgPSAmICIkZ2xvYmFsOnRlc3Ryb290XGdlbmVyYWxcc3RyaW5ncy5FeGNlcHRpb25zLnBzMSINCgkNCglmb3JlYWNoICgkc3RyaW5nRW50cnkgaW4gJHN0cmluZ3NSZXN1bHRzKSB7DQogICAgICAgIGlmICgkc3RyaW5nRW50cnkuU3RyaW5nIC1lcSAia2V5IikgeyBjb250aW51ZSB9ICMgU2tpcHBpbmcgdGhlIHRlbXBsYXRlIGRlZmF1bHQgZW50cnkNCgkJSXQgIlNob3VsZCBiZSB1c2VkICYgaGF2ZSB0ZXh0OiAkKCRzdHJpbmdFbnRyeS5TdHJpbmcpIiAtVGVzdENhc2VzIEB7IHN0cmluZ0VudHJ5ID0gJHN0cmluZ0VudHJ5OyBleGNlcHRpb25zID0gJGV4Y2VwdGlvbnMgfSB7DQogICAgICAgICAgICBpZiAoJGV4Y2VwdGlvbnMuTGVnYWxTdXJwbHVzIC1ub3Rjb250YWlucyAkc3RyaW5nRW50cnkuU3Ry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</BA>
    </MS>
  </Obj>
</Objs>