<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>ITSMCore</Name>
    <Version>11.1.2</Version>
    <Vendor>Rother OSS GmbH</Vendor>
    <URL>https://otobo.io/</URL>
    <License>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</License>
    <ChangeLog Date="2026-07-27 10:28:04" Version="11.1.2">Update to beta2; Fix external source for Service reference fields (#4).</ChangeLog>
    <ChangeLog Date="2026-06-22 08:36:00" Version="11.1.1">Update to OTOBO 11.1.</ChangeLog>
    <Description Lang="en">The OTOBO::ITSM Core package.</Description>
    <Description Lang="de">Das OTOBO::ITSM Core Paket.</Description>
    <Description Lang="hu">Az OTOBO::ITSM alapcsomag.</Description>
    <Framework>11.1.x</Framework>
    <IntroInstall Lang="en" Title="Install Information" Type="pre">

        &lt;br/&gt;
        &lt;strong&gt;WELCOME&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        You are about to install the OTOBO package ITSMCore.&lt;br/&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        &lt;strong&gt;REQUIRED OTOBO PACKAGES&lt;/strong&gt;
        &lt;ul&gt;
        &lt;li&gt;GeneralCatalog 11.1.0&lt;/li&gt;
        &lt;/ul&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroInstall>
    <IntroInstall Lang="de" Title="Installation Information" Type="pre">

        &lt;br/&gt;
        &lt;strong&gt;WILLKOMMEN&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        Sie sind im Begriff das OTOBO-Paket ITSMCore zu installieren.&lt;br/&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        &lt;strong&gt;BENÖTIGTE OTOBO-PAKETE&lt;/strong&gt;
        &lt;ul&gt;
        &lt;li&gt;GeneralCatalog 11.1.0&lt;/li&gt;
        &lt;/ul&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroInstall>
    <IntroInstall Lang="es" Title="Información de Instalación" Type="pre">

        &lt;br/&gt;
        &lt;strong&gt;BIENVENIDO&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        Usted está apunto de instalar el modulo ITSMCore de OTOBO.&lt;br/&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        &lt;strong&gt;PAQUETES REQUERIDOS&lt;/strong&gt;
        &lt;ul&gt;
        &lt;li&gt;GeneralCatalog 11.1.0&lt;/li&gt;
        &lt;/ul&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroInstall>
    <IntroInstall Lang="hu" Title="Telepítési információk" Type="pre">

        &lt;br/&gt;
        &lt;strong&gt;ÜDVÖZÖLJÜK&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        Ön az ITSMCore OTOBO csomag telepítésére készül.&lt;br/&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        &lt;strong&gt;SZÜKSÉGES OTOBO CSOMAGOK&lt;/strong&gt;
        &lt;ul&gt;
        &lt;li&gt;GeneralCatalog 11.1.0&lt;/li&gt;
        &lt;/ul&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroInstall>
    <IntroInstall Lang="en" Title="Installation Information" Type="post">

        &lt;br/&gt;
        &lt;strong&gt;NOTICE&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        In order to grant users access to the service menu, you need to add them as member to the group 'itsm-service'.
        &lt;br/&gt;
        &lt;br/&gt;
        The menu items that were added by this package will be visible after you log-in to the system again.
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroInstall>
    <IntroInstall Lang="de" Title="Installation Information" Type="post">

        &lt;br/&gt;
        &lt;strong&gt;HINWEIS&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        Um Benutzern Zugriff auf das Service-Menü zu gewähren, müssen diese Mitglied der neuen Gruppe 'itsm-service' sein.
        &lt;br/&gt;
        &lt;br/&gt;
        Die von diesem Paket hinzugefügten Menü-Punkte sind erst nach einem erneuten Anmeldevorgang im System sichtbar.
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroInstall>
    <IntroInstall Lang="es" Title="Información de Instalación" Type="post">

        &lt;br/&gt;
        &lt;strong&gt;AVISO&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        Para poder permitir el acceso a los usuarios al menu de servicios, usted necesita agregarlos como miembros del grupo 'itsm-service'.&lt;br/&gt;
        &lt;br/&gt;
        Los elementos del menu que fueron agregados por este packete serán visibles despues de que cierre y abra su sesion de nuevo.
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroInstall>
    <IntroInstall Lang="hu" Title="Telepítési információk" Type="post">

        &lt;br/&gt;
        &lt;strong&gt;FIGYELMEZTETÉS&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        Annak érdekében, hogy hozzáférést adjon a felhasználók számára a szolgáltatás menühöz, hozzá kell adnia őket az „itsm-service” csoporthoz tagként.
        &lt;br/&gt;
        &lt;br/&gt;
        Azok a menüpontok, amelyeket ez a csomag adott hozzá, azután lesznek láthatóak, miután ismét bejelentkezik a rendszerbe.
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroInstall>
    <IntroUninstall Lang="en" Title="Uninstallation Information" Type="pre">

        &lt;br/&gt;
        &lt;strong&gt;ATTENTION&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        If you uninstall this package, all database tables that were created during installation will be deleted.
        All data from these tables will be irrevocably lost!
        &lt;br/&gt;
        &lt;br/&gt;
        The group 'itsm-service' that was created during package installation will be deactivated.
        You can activate this group again in the admin area.
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroUninstall>
    <IntroUninstall Lang="de" Title="Uninstallation Information" Type="pre">

        &lt;br/&gt;
        &lt;strong&gt;ACHTUNG&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        Bei der Deinstallation werden die von diesem Paket angelegten Datenbank-Tabellen gelöscht.
        Alle darin enthaltenen Daten gehen unwiderruflich verloren!
        &lt;br/&gt;
        &lt;br/&gt;
        Die von diesem Paket angelegte Gruppe 'itsm-service' wird deaktiviert.
        Sie kann jederzeit im Admin-Bereich wieder aktiviert werden.
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroUninstall>
    <IntroUninstall Lang="es" Title="Información de Desinstalación" Type="pre">

        &lt;br/&gt;
        &lt;strong&gt;ATENCIÓN&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        Si usted desinstala este paquete, todas las tablas de la base de datos creadas durante la instalación serán borradas.
        ¡Todos los datos de esas tablas serán irrevocablemente perdidos!.
        &lt;br/&gt;
        &lt;br/&gt;
        El grupo 'itsm-service' que fue creado durante la instalación será desactivado.
        Usted puede activar este grupo de nuevo en el area de admin.
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroUninstall>
    <IntroUninstall Lang="hu" Title="Eltávolítási információk" Type="pre">

        &lt;br/&gt;
        &lt;strong&gt;FIGYELEM&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        Ha eltávolítja ezt a csomagot, akkor a telepítés során létrehozott összes adatbázistábla törlésre kerül.
        Az ezekben a táblákban lévő összes adat visszavonhatatlanul el fog veszni!
        &lt;br/&gt;
        &lt;br/&gt;
        A csomagtelepítés során létrehozott „itsm-service” csoport ki lesz kapcsolva.
        Ezt a csoportot az adminisztrációs területen tudja ismét bekapcsolni.
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroUninstall>
    <IntroUpgrade Lang="en" Title="Upgrade Information" Type="pre">

        &lt;br/&gt;
        &lt;strong&gt;WELCOME&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        You are about to upgrade the OTOBO package ITSMCore.&lt;br/&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        &lt;strong&gt;REQUIRED OTOBO PACKAGES&lt;/strong&gt;
        &lt;ul&gt;
        &lt;li&gt;GeneralCatalog 11.1.0&lt;/li&gt;
        &lt;/ul&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroUpgrade>
    <IntroUpgrade Lang="de" Title="Upgrade Information" Type="pre">

        &lt;br/&gt;
        &lt;strong&gt;WILLKOMMEN&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        Sie sind im Begriff das OTOBO-Paket ITSMCore zu aktualisieren.&lt;br/&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        &lt;strong&gt;BENÖTIGTE OTOBO-PAKETE&lt;/strong&gt;
        &lt;ul&gt;
        &lt;li&gt;GeneralCatalog 11.1.0&lt;/li&gt;
        &lt;/ul&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroUpgrade>
    <IntroUpgrade Lang="es" Title="Información de Actualización" Type="pre">

        &lt;br/&gt;
        &lt;strong&gt;BIENVENIDO&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        Usted está apunto de instalar el modulo ITSMCore de OTOBO.&lt;br/&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        &lt;strong&gt;PAQUETES REQUERIDOS&lt;/strong&gt;
        &lt;ul&gt;
        &lt;li&gt;GeneralCatalog 11.1.0&lt;/li&gt;
        &lt;/ul&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroUpgrade>
    <IntroUpgrade Lang="hu" Title="Frissítési információk" Type="pre">

        &lt;br/&gt;
        &lt;strong&gt;ÜDVÖZÖLJÜK&lt;/strong&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        Ön az ITSMCore OTOBO csomag frissítésére készül.&lt;br/&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        &lt;strong&gt;SZÜKSÉGES OTOBO CSOMAGOK&lt;/strong&gt;
        &lt;ul&gt;
        &lt;li&gt;GeneralCatalog 11.1.0&lt;/li&gt;
        &lt;/ul&gt;
        &lt;br/&gt;
        &lt;br/&gt;
        ((enjoy))&lt;br/&gt;
        &lt;br/&gt;

    </IntroUpgrade>
    <PackageMerge Name="ITSM" TargetVersion="11.0.0"></PackageMerge>
    <PackageRequired Version="11.1.0">GeneralCatalog</PackageRequired>
    <CodeInstall Type="post">

        # create the package name
        my $CodeModule = 'var::packagesetup::' . $Param{Structure}-&gt;{Name}-&gt;{Content};

        $Kernel::OM-&gt;Get($CodeModule)-&gt;CodeInstall();

    </CodeInstall>
    <CodeUpgrade Type="post">

        # create the package name
        my $CodeModule = 'var::packagesetup::' . $Param{Structure}-&gt;{Name}-&gt;{Content};

        # discard internally stored object, so that the next access to object creates them newly
        $Kernel::OM-&gt;ObjectsDiscard(
            Objects            =&gt; [$CodeModule],
            ForcePackageReload =&gt; 1,
        );

        $Kernel::OM-&gt;Get($CodeModule)-&gt;CodeUpgrade();

    </CodeUpgrade>
    <CodeUninstall Type="pre">

        # create the package name
        my $CodeModule = 'var::packagesetup::' . $Param{Structure}-&gt;{Name}-&gt;{Content};

        $Kernel::OM-&gt;Get($CodeModule)-&gt;CodeUninstall();

    </CodeUninstall>
    <CodeReinstall Type="post">

        # create the package name
        my $CodeModule = 'var::packagesetup::' . $Param{Structure}-&gt;{Name}-&gt;{Content};

        $Kernel::OM-&gt;Get($CodeModule)-&gt;CodeReinstall();

    </CodeReinstall>
    <BuildCommitID>fa74aa3bed72bb0bc44309149a48cd9a33e0f69f</BuildCommitID>
    <BuildDate>2026-07-27 10:28:09</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="doc/itsm-core-database.dia" Permission="660" Encode="Base64">H4sIAAAAAAACA+1dXZPaOBZ9z6+gyMtMFVHr05bDdKZ2UjW7WzVT2ZpkXuaFEqCmvTE2ZZvuMA/721eyoRuMjcG2nCYRqWQGuOhK4p6jqyMh/fTzl2UweJBx4kfh7RABOBzIcBbN/XBxO/zz069v+PDnd69+mvvirfq7iMVyoD4RJvrZ7fA+TVdvb24eHx9BsElEGsUg8NcgkTf/E0EgbpTRzfDdq8Fgv4C5SIV+bfuqSNPYn65TOQjFUt4Op2L2eRFH63A+zK22drMoiOLBgwhuh6/vssfwZlvMzUE5J8peiYWcxlJ8ri4aqofnNSl6JeNisctVlPjKJN2sjkwqytH/7tlsrRJlFC7evf4Hep1XafvCc1llFa10ki5FvPDDYz+qb4K8IzDgGGPVGczjHnSpi3Z9crm7ab/ugn7dxf2685PJKorTWPjpsctpFAVShLnXOxEksrmjZCYCFWOn2gUBw4QjBgnjunkuwc393flpGnXUpPzlJwBeCuZF7M9PY/nAoqKUR3+e3k++1HRg8w7Ly98YK//BT/xpIMta4Idp7gC1L37TTfHFbygj9eePt4yIvLTKUWPOJZPs8lFjsfbnMqkJtUObipLut2Y3db1etDu3Y/KXCmN45iIQGxlvi//lefQebL9gNdzEazkciFnqP+ye7fVJNP2vnKXbxn5MRTgX8XzwZvBJfkmHe7nJcODPb4cf4GFvFdunSlP8eNRdq+g5phDg1GMjRIDrIlrsiWMuqXIznRa9xKohIlwEsuAJAZdDb0zUf4mrnlNAOG7oOdXdUhP7BZsqgs9yiAO7Qrrx4dMfHwfO4Ff1jcvHKP5ckXycgGYV10dhWuZYvz64E0s/2Kj6iTAZDpJ0o2NIJab5R/8lgweZ+jOxH+qX1+Be+ov70jrsD9sOPHigdj4P4/Ki2Gzi7pCzKpjLvdN/2jlSecIiXMryr1SG6+V2MDrTSykjXQaSh6xKRZg8V4XUYC9/MWemM6jqF/m3L+Pf/FDuERbcEhZqS1gQYMzQyCGAQ0YM8hUECDnEcUZvIIDMhRiRscsAJS7W3r2mZDmVf0+y9jRp5bGliwHUpswFuM6UApqZ4vpSGSCEsZFqOqUO91Czts6iOJTxRIdIUh1/8Kgmpe9d4ljl6nJShPxxoiL0nxYesqTzOI6eE04MKznzYmcZ91f3Im5W9Fwk94EMF6fagbsliL/8xV9iUSCIXUaD2xKEAgSCrjfCKoTdph1+FkMUPI278RyraUwtP1S6+uqmF7c1iv3DwbIQ1+g8djj1uUvqJNZppFL29DAZrJ18d4GLihyftEWEQ7ffFTWNiCdPOmNjaLznmeGmnvvM8b+znB6qRODwQU0n9ZXBaCypzxtmk3oT3ERbcxNT08p+uGnnacdNz54tN1luOhmMlpteHDf9+ftvipbeByJJSmQG1paXMBthxyAbqRDzmM6ePTamipG8EcEAs2YeZSCXk3yubaZJmYOayS7iwKX7cMUtfB0RRMGZU5hZo4b8XVhgPuDbRMYP/kwOflD8LUMdXz+WUvAl/pJUxjLSEVzltbULhdxlyYSqs/LFVH1WzNLWs6OqLlqvVrFMksnTG4lxV9FKxiJV37AxV7v1vTMblS0LtXJ0ZpPaO9rGm7Gee4zFqocvKHMj7hQ+J7N7ccSjTyxKYVMpNOumSSbllQtunflIxWLRhX7RSvpEHUqftUpuMY+6xMOdHwT1Hg53WV0+SzDbhjCKlyKYFDL746x+Fq1jX69Py8fj5P59/mZD3Ww7LNTXIfSX03UyWEZhNAg6rsUqCjbLKF7d+7P6iugaJCsxkx1XYqaTUv2/L+L7eBG12TFTbRXOnnY2REdtZolOLHO3icQzHBPv8NEBEM/wyrsI8lo/uNMoNuVuP0yNNakyAywKR+tl8GRcLyAd7ZUtJP66zIk/70xFKkxijvypbKYzX6q/17IXbex49mTOV5ZB+4GfbrpRbs6fsJ25n7RB92mYTpJZVB4bjd1ViFK9AGcW+3ro0d+TxY/Fz7eEn4tkzecp+E3NbGe5UviTpqafu/KTwx3GbeRipwO5mFDjcjEhmVzsAkhHFJqXi5s26Ry5GCPged+UXBwIKxVbqdhKxVYqtlKxlYqtVNyBVGyuDlYotkKxFYqtUGyFYisUW6HLCsVdAGfph5PUV8wzlenED2f+XE92LI4sjqxg/I0Jxm7rcxegM8Lc5HELkGU7jF0tGSOtto4oAdyoZNymUWdtMWbtGlCb4zLgdpFZn5KJZ/5qIoIgmqmAtBqx1YitRmw1YqsRW43YasRWI7YasdWIrUZsNeKXrxH3KA9P/YVVtqyyZbcSW2XY4uc7x4+/XOnx20LHQsdC5zLorGI/iu24Y8FjwdMkb5Mildnifm/gmVctEFn0WPRcI3qmGzvwWOhY6FwEnXsRLuzAY9Fj0dMcPXbgsdCxezCvcA9m/fnTvPU+TEJHCJvch6kdQADdMdL7LxFW7gD1Xv5x0//+9PH391Es7TVXpq+5KoSgscOm7e1Wpm+38trfboWye58YwNTBRm+3gtntVtldVpAhPuYceFT5RhADxrnRy63KG1lyywwCXnZjFQdOjSnX16/qUh3g1plywPG2pdTh9more7VVV+xQkaag1vd0esDFhI9cCojjMYPEsHOkoEE8NtYn1EOeOeasqeM+05Z/SgVLEbwXqQiihU1eDCcvVXFpk5jrvaKz9R2diHpqYEUj7gLHabr19Lwr+BwA1Wif3dHpccJdb6ydM4eN1CgPXe4ZzGMqm3lsyhhADuQjDwFeY+pyQBF19S2drkNOm3qA6ERGNR4SgjG1uYzNZTojiZPXdKLW93Qq1CKT9/c6SP/+FeHs969Q8QQbEQcgZvJazkKbSoZLzVPwXCtd31N2+ve2hzad37555g2bXRFCl7dvPjFJGKrI0BroEcfs3hncq6jXSZsK7zTKft89eH5XM33R11GpnYKr9ZWfavxwTZ5HSp3sPFKsJgU7cKkUEBoFV6FNJbDB9Qaqyl4tpA5sLKTMQAr2Cyl6JZCigF4bpChgtZA6sLGQMgMp3C+kWBcpIDefArr7KaCaMhlPAflJ9dmrN9C1rIXUgY2FlBlI8X4h5VwhpCgG7OVDSteyDlKHNhZSRiCFOx+l/hMFmyots/VBXQ4xDCgIOOdYQ8ohHI+z5VjlEhCnqV99WsAZqCI1oHFQ45bLcD4RcRw9ntDBcMuiJ3VyGGwK5mcXtcIh61ZyOxXJvItIJn1EMj6IZNJLJJO6SCY2kvuM5KqF8NY7ZBgBjqZHk1Px3IcLMMJszDwVzm5GyS7EV7ACvk5Urw9+8Oc/fmer36j31e+SYDS28F08z8sufHdHS7j1/hyqgiAb7Ezuzdk6wYBsiYmTzCe/Cl5SJPBZppPdD9EtQ/XBUGVxaSnqGimq9a4cgoCW+41mTrkPkmdOlAKGtMfryJsW+c7BySzfOmj5qQ9+KglKS08vmZ5OSBQYt8+iDK+xslyiUAyVSRRqdMyXWU1LFIWGlRg4jVtuJQoD+9vwVWzBoSPiAjXS5lLb198u4JB6A1VjchoJwPMKVnYpppulGOdwKcbrdXETv/wtOGpY8EbYuzZI4ZrtAqpdLi1YWUh1Ayn2VSHFrgNSBOqNolc1SsHT+0RzSB1aWUgZgRRCXWOqSmJpvfsGceCwEULA5Drr1gkELmTjJ4/0ChSW70xNUaRX+F0RNX6WREkAWj3lGuVet4OTbQCizshzAUeu2RNudo4wxuO9p57jWlKypFQViZaYrpGYOjhyS2UrUIUDAxgRxygzbT0RQDDRJ3BRFYFEe3Y9cgUJ04dPf3x8+1afxDVwvrujLKjjUUoJ9SjkiHqueZqqiEvLU9fIU14nPMWyYUsflWWap1gWeZwRR6VQHCCEtGfqOcieFfhil8tdh3C9ooggZOpf3AtHlcWk5agr5CgCu+AoruOBq+HSOEfxPPL0b/4JA8xj2q/D4BWcZoohct9A/gZTO9/rg6RKg9KS1Fclqfx5IDYyfvcqf6L+LmKxfPfq/1u6Nm/8zAAA</File>
        <File Location="doc/itsm-core-database.png" Permission="660" Encode="Base64">iVBORw0KGgoAAAANSUhEUgAABh4AAAQzCAIAAAATmsFNAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeVxU9f7H8TMzMLKM7JtsAu56gVxRTMu85ZZ7Zemt/NnD602veb334W3RzKyr2aJl137dq/UrLcs9N0i7aoUiLvgQQhBFAVkFBBzZhtl+f5zuNA0wDIiz0Ov5R4+Z71m+3zOkHt7z+X6PRK/XCwAAAAAAAEDbOdl6AAAAALCISqUqLCx0cnLq3r27rccCAADwM6mtBwAAAACL6PV6nU5HyTkAALArREsAAACOQQyVJBKJrQcCAADwC6IlAAAAx0C9EgAAsEOstQQAAGApvV5fW1srCIJCobBJ7wJVSwAAwM5QtQQAAGApnU5XUlJSUlJik96JlgAAgB0iWgIAALCUbaekES0BAAA7xIQ4AACAtrFVuOPs7Ozp6SmXy23SOwAAQLOIlgAAACxl27ohFxcXFxcXm3QNAADQEibEAQAAWIpntAEAAJggWgIAALAUqx0BAACYIFoCAABoG6IlAAAAA6IlAAAASzEhDgAAwATREgAAgKWYEAcAAGCCaAkAAKBtiJYAAAAMiJYAAAAsRdUSAACACaIlAAAAS7HWEgAAgAknWw8AAADAwdiqaqmsrOz27du+vr4+Pj42GQAAAEBTVC0BAABYyrYT4piOBwAA7BBVSwAAAJay7YQ4Pz8/Hx8fmUxmwzEAAACYIFoCAACwlG3rhmQyGbkSAACwN0yIAwAAaBumpAEAABgQLQEAAFiK1Y4AAABMEC0BAABYyrZrLQEAANghoiUAAABLUbUEAABggmW8AQAALNWlSxdPT08XFxdbDwQAAMBeSKjrBgAAAAAAQPswIQ4AAAAAAADtxIQ4AAAAx1BdXa3X6z08PGQyma3HAgAA8DOiJQAAAMdw69YtnU7n7u5OtAQAAOwHE+IAAAAcg7hEplTK/RsAALAj3JoAAAA4BjFakkgkth4IAADAL4iWAAAAHIBOpxNfEC0BAAC7QrQEAADgAMSSJYEJcQAAwM5wawIAAOAAmA0HAADsE0+IAwAAsNTNmzdramr8/Pw8PT2t3LU4IY5oCQAA2BuqlgAAACyl0+l0Op1hbpo1UbUEAADsE1VLAAAAlgoICPDz85PJZNbvWoyWWGgJAADYG6IlAAAAS8lkMpvkSgIT4gAAgL3iiy8AAAAHwIQ4AABgn4iWAAAAHAAT4gAAgH3i7gQAAMABMCEOAADYJ6IlAAAAB8CEOAAAYJ+IlgAAABwAE+IAAIB94u4EAADAATAhDgAA2CeiJQAAAAdA1RIAALBPTrYeAAAAgMO4c+eOTqdTKBQymczKXbPWEgAAsE9ESwAAAJaqqKjQaDRdunSxfrTEhDgAAGCfqKkGAACwlA1Lh6haAgAA9omqJQAAgLaxSb6jUCjkcrmrq6v1uwYAADCDaAkAAMBSYumQTbi7u7u7u9uqdwAAgJYwIQ4AAMBSzEoDAAAwQbQEAABgKaIlAAAAE0RLAAAAFjHMhiNaAgAAMCBaAgAAsAjREgAAQFNESwAAAG1DtAQAAGBAtAQAAGARqpYAAACaIloCAACwCGt4AwAANEW0BAAAYBHbRktqtVqn09mkawAAADOIlgAAACxiw2hJo9Hk5eVdv37d+l0DAACYR7QEAABgERtGS2K9EnPxAACAHXKy9QAAAAAcgw2jJblc3qtXL+v3CwAA0CqqlgAAACzCMt4AAABNES0BAABYRIyWAAAAYIxoCQAAwCJULQEAADRFtAQAAGARoiUAAICmiJYAAAAsQrQEAADQFE+IAwAAsIhcLvf29nZ2drb1QAAAAOyIhAUpAQAAAAAA0D5MiAMAAAAAAEA7MSEOAADA3imVSpVKpVAoXF1dbT0WAACAX6FqCQAAwN7V1tZWV1erVCpbDwQAAMAU0RIAAIC90+l0giBIpdy5AQAAu8MNCgAAgL0jWgIAAHaLGxQAAAB7Jz7Sl2gJAADYIW5QAAAA7B1VSwAAwG5xgwIAAGARvV6v0+nEAiIrE6MliURi/a4BAADMc7L1AAAAABxDWVmZUqn09fX18fGxctdULQEAALvFDQoAAIBFxHol65cO6fV61loCAAB2i6olAAAAiwQEBAQEBFg/WhJLlgSiJQAAYJeIlgAAACxiq2THMBuOtZYAAIAd4rsvAAAAu8ZCSwAAwJ5xjwIAAGDXtFqtQLQEAADsFfcoAAAAdo2qJQAAYM+4RwEAALBrREsAAMCecY8CAABg14iWAACAPeMeBQAAwK4RLQEAAHvGPQoAAIBdE6MlmUxm64EAAAA0w8nWAwAAAHAMlZWVOp3Oy8vLycmqd1BULQEAAHvGPQoAAIBFqqurq6qqtFqtlfslWgIAAPaMexQAAACL6PV6QRAkEomV+xXDLKIlAABgn5gQBwAAYBFbRUs+Pj6enp4uLi5W7hcAAMASREsAAAAWsVW05OrqauUeAQAALEdlNQAAQOvEXEmwRbQEAABgz4iWAAAA2oBoCQAAwBjREgAAQOuoWgIAAGgW0RIAAEDriJYAAACaRbQEAADQOlut4Q0AAGDniJYAAABaR7QEAADQLKIlAACA1ul0OoFoCQAAoAmiJQAAgNbZqmpJq9XW19c3NjZauV8AAAALES0BAAC0ToyWpFJr3zvV1dUVFhaWlZVZuV8AAAALES0BAAC0zlZVSxKJpEuXLnK53Mr9AgAAWMjJ1gMAAABwALZaa0mhUCgUCit3CgAAYDmqlgAAAFrHE+IAAACaRbQEAADQOluttQQAAGDnuD0CAABona0mxAEAANg5oiUAAIDWMSEOAACgWURLAAAArWNCHAAAQLN4QhwAAEDr3NzcZDKZXC639UAAAADsi0T8Cg4AAAAAAOBeWLVqlcl/LTxKp9OlpqZmZGSUlZWpVKouXbr4+flFREQMGDAgKCioaReCIMTFxU2YMKHp2RISEs6ePWuys4FGo0lLS7ty5UpJSUldXZ1MJvPx8endu/ewYcPc3d0tHPBvFlVLAAAAAADA7jQ2Nm7btq2goMDQUl9fX1BQUFBQkJSU1FJElZ6e/vDDDzs5/SruUKvV6enpLXVUWFi4a9eu27dvG1o0Gk1JSUlJScnp06cnTpx433333e3FdGpESwAAAHZKp9MVFhbKZLLg4GBWEAcAdA5NI6GWqpmOHj1aUFDg7u4+ZsyYXr16KRQKtVpdUVGRm5ubkZHR7MlDQkKKiooyMzNjYmKM2zMzMxsaGsStJocUFhZ+9tlnGo0mODg4Li6ue/fuCoVCo9FUVlZeuXLl3Llz33zzDdGSeURLAAAAdkqr1apUKolEQq4EAPgNunTpkiAIM2bM6NGjh9gik8lCQ0NDQ0NHjRrV7CGDBg0qKipKTU01iZYuXLggCMLgwYNNoiWtVrt7926NRjNkyJCJEycantfh5OQUHBwcHBwcHx+fkJDQ4ZfWyRAtAQAA2CmtVisIgkwms/VAAACwgTt37giCEBYWZvkh0dHRR44cyc/Pr6io8PPzExsrKiry8/Plcvnvfve7AwcOGO+fnp5eXV0dFBRknCsZk8vl06ZNM24pKChITk4uKCior693dXUNDw+Pj48PDQ013keswHrttddSU1MvXLhQUVGhVqtfe+01cWtVVVVycvK1a9eUSqWTk1O3bt3i4uL69u1r+WXaG6IlAAAAO6XT6QRBaPZOFwCATq9r1663b9/Oycnp37+/hYeI+dGFCxcuXLjwyCOPiI1iyVJ0dHTTJ71mZ2cLgjB8+HAL/7U9d+5cQkKC4XloNTU1mZmZWVlZjz766ODBg012Pnz48Pnz500ar127tmPHjsbGRvGtRqPJzc3Nzc0dPXr0Qw89ZOFl2huiJQAAADslRktULQEAfptiYmKSkpL27t177dq1Pn36hISEWPKwtsGDB1+4cCEtLW3s2LEymUyr1V68eFEQhEGDBjXduaSkRBCE7t27WzKe0tLSxMREvV4/cODA+++/38vLq7q6Oikp6eLFiwkJCWFhYQEBAcb7p6amxsfHDxo0yMfHR4yulErlzp07Gxsbo6Oj4+PjfX196+vrL126dOLEiR9//LFHjx4WjsTeEC0BAADYKXFCHFVLAIDfpgcffFCpVKalpaWmpqampgqC4OHhERERERsba1h9qamQkJDAwMCbN29evnx5wIABly9frqurCwoKCgkJabpzbW2tIAhdu3a1ZDxnzpzR6XS9e/eeOnWq2OLr6ztt2rSampqcnJyUlJQpU6YY7z906FBD5ZQoJSVFpVLFxsZOnz5dbJHL5fHx8TKZLDEx8ezZsw4aLXGnAgAA0DqNRqNWqw0F8NZB1RIA4LdMJpNNnz79+eefHzVqVHh4uFwuVyqV6enp27Zt27lzp/gFTLPEuWniPDgxk2o6W60d8vPzBUG4//77TdrFNcXz8vJM2ocMGWLSkpOTIwhCXFycSfuAAQMEQSgoKLj7QdoEVUsAAACtKywsVKvVoaGhrq6uVuuUqiUAAAIDAwMDAwVB0Ov1N2/ezMzMTElJyczM9PPza2lxopiYmO++++769evXr1/Pzc11dnaOjo5udk93d/fbt2/fuXPH29u71ZEolUpBEPz9/U3axXlw4qLjxpqes6qqShCELVu2iJdjaBdfiyVUjog7FQAAgNZJJBKpVGrllIeqJQAADCQSSVBQ0EMPPSTOJktPT29pTxcXl/79++v1+t27d+v1+gEDBri4uDS7Z7du3YT/liN1OGdnZ5MWMULS6XQ6nU5vRNxqpg7LzlG1BAAA0DqbrH1A1RIAAE317NlTaK5KyNjgwYPT0tLq6uqEFhbwFvXp0+fy5cspKSkxMTGt/oPr4eFRWVlZXl4eHh5u3F5WViZYtmCTp6fnrVu3Fi9e7Ovr2+rODoQ7FQAAADtF1RIAAE0VFhYKgqBQKMzsEx4eLs5c8/f3N0mCjMXExHh5eZWWliYkJIj/7JpobGz85ptvxNfi90ynTp0y2efkyZOCIERERLQ68t69ezd7BkdH1RIAAICdomoJAPBbtmnTpr59+3bv3t3f39/d3V2v19+5c+fy5ctilNO/f3/zhy9atKjVLmQy2WOPPfbZZ5+dP3++uLh4+PDh3bt3VygUGo2msrLyypUrZ8+era2tnTZtmiAIcXFxaWlp2dnZBw8eHDlypKen5+3bt5OSkq5evSqTyZouzt1UfHx8WlrahQsXamtrhw0bFhAQ4O7u3tjYWFlZmZeX99NPPy1YsMCyz8a+EC0BAADYKfHrU6IlAMBvU3l5eXl5eVJSUtNNYWFhDz74YIf0EhoaOnfu3F27dhUXF+/du9dkq1wuF3MlQRCCgoImTJiQkJCQmpoqPnhOJJFIJk6cKK41bl7Xrl1nz569Y8eO7Ozs7OzsDhm/PSBaAgAAsFNi1RIT4gAAv02LFi26fPlyfn5+WVmZ+PQ0Nze3wMDAAQMGxMbGduBXL6GhoYsXLxYrkkpLS+vq6mQymY+PT+/evYcNG+bu7m7Yc+jQoYGBgadPn75x40Z9fb2rq2t4eHh8fHxYWJjlfS1cuPD8+fPZ2dkVFRWNjY1yudzX17dXr16t1mHZLYnx4+4AAABgP65evSoIQmRkpJMTXwcCAAA7RX014PBWrVq1atUqW48CANDBDE8gpmoJAADYM74Bs7HGxsbz589fuXKlvLy8oaHBxcXFz8+vT58+Q4YMkcvlht0sDw6apgzOzs5eXl49e/YcOXJk0yX0dTpdampqRkZGWVmZSqXq0qWLn59fRETEgAEDgoKCLOy0sLDwzJkz+fn5tbW1rq6uERERQ4cOteQhzWaui6wEAPAbZ1hoSSKR2HosAAAALSJasqX8/Pxdu3bV1NQYWmpra2tra/Pz80+dOvXEE09Yks60Sq1Wi4uf/fTTT88995y3t7dhU2Nj47Zt2woKCgwt9fX1BQUFBQUFSUlJFoY733///Q8//GCYWVlTU5ORkZGRkUE2BADA3eDxcAAAwCEQLdlMQUHB1q1btVptcHDwyJEju3fv7urqWl9ff+PGjVOnThUVFW3duvV//ud/QkNDheZKeMQWS6p+amtrCwoKjhw5UlVVdfz48ZkzZxr2+f777wsKCtzd3ceMGdOrVy+FQqFWqysqKnJzczMyMiy5inPnzn3//fdSqTQ+Pn7gwIHe3t4NDQ3Xr18/c+aM5R8FIRRgnySSzr8e35o1a5KTkw8dOmRmH8PnMHHixNGjR7/00kvWGh3sSGNj461bt5ycnPz9/a3WKWt4AwAAh0C0ZBtarXbPnj1arfa+++6bMmWK4QtJhULRv3//vn37Hjhw4OLFi7t37168ePFd3lO6u7v37dvXzc3t008/vX79uvGmS5cuCYIwY8aMHj16iC0ymSw0NDQ0NHTUqFGtnrm2tva7774TBGHy5MkDBw40dBcdHR0dHX03YwZgHfYZHrV1VO2+itra2g0bNiQnJ1t4nvXr148ePXrJkiWurq7t6A4OTaPR1NTUdOnSxZqdihPiiJYAAICdI1qyjfT09Orqan9//8mTJzctdJdKpZMnTy4qKhJnsd13331336O4cJJKpTJuvHPnjiAIlj8l0URaWlpjY2NYWJghV7oXxJqm1157LTU19cKFCxUVFWq1+rXXXhMEoaio6OLFi3l5eVVVVRKJxNPTs0+fPvfff7/Jb32GCq+LFy+eO3euvLxcKpWGhYWNHTtW/FjS0tLEdr1eHxYW9vDDDzddZ6qqqio5OfnatWtKpdLJyalbt25xcXF9+/Y17PD+++9XV1cvWLCgW7duYsu+ffvS0tIEQYiNjZ0+fbrYWFJS8q9//cvb23vJkiWGYwsKCpKTkwsKCoyfXikWrFnyOTSlUqn27t2bnZ0tlUonTJgwdOjQNn7q6LRM0pMOzJU6MKVq63kM+7d1DHv37o2Pj+/Vq5eF/fbt23fIkCH79+9/8skn2zRCSxQXFzc2NkZERHT4mdEhxJTHymseUbUEAAAcAtGSbWRnZwuCMHz48JbuF2UyWVxc3KFDh7KzszskWiopKREEwcPDw7ixa9eut2/fzsnJ6d+/fzvOee3aNUEQYmJi7n54rTp8+PD58+dNGjdv3mz8tqKioqKiIjMzc/78+W5ubiY7JyYmGk/Tu3r1an5+/vz588+dO3f27FlD+7Vr1woLCxcsWODj42PcuGPHjsbGRvGtRqPJzc3Nzc0dPXr0Qw89JDZGRUVduHAhNzfXEC3l5uaavBAEQSwci4yMNLScO3cuISHBeLGqzMzMrKysRx99dPDgwZZ8Diaqqqq++uqrsrIyNze3xx9/3LgvAMYOHjz4+OOPt+mQJ5544sCBAx0bLZWWlr755puJiYliJSnsk/i3tJWjJQ8PDzc3N9ZaAgAAdo5oyTaKi4uFX+cLTYlbxT3vRl1dXX5+/pEjRwRBMJmnFhMTk5SUtHfv3mvXrvXp0yckJMTd3d3yM5eVlQmCEBYWdunSpeTk5LKyMplMFhAQMHDgwPvuu69j779TU1Pj4+MHDRrk4+NjuMmOiIgYPHhweHi4QqFobGwsLi4+fvx4UVFRUlLSuHHjTM5w7ty5kSNHDho0yMPD4+bNm/v37y8vL//yyy+VSmXT9qSkpKlTp4oHKpXKnTt3NjY2RkdHx8fH+/r61tfXX7p06cSJEz/++GOPHj3E1dYjIyPFaCk+Pl4QhIqKCqVSqVAo9Hq9UqmsqKjw8/MT/hszGX70paWliYmJer1+4MCB999/v5eXV3V1dVJS0sWLFxMSEsLCwgICAlr9HIzl5eXt3Lmzrq4uICDgqaeeMl61HRD/VIr/NfyeLL7QaDSrV6/+/PPPlUrlihUr/va3vxkfmJqaOnXq1GXLli1ZskSn061Zs+aTTz65ffv2tGnTPvzwQ3d396ZnbmkA69ate++99zQazVNPPbV+/XrxUZgSiWT9+vXr168vKirS6XSGUalUqhdffPHrr78WBOHJJ59ct26dOB2p2f1NxjB69OiFCxcaMqAbN24MHz48KyvL09PTMJ7z58+vXbvWeHhiv42NjUuXLv3666+dnZ1NPoqRI0e++eab7f4RmCguLl69evVnn32mUqk2btzo4uLSUWdGhxP/37ByyiOVSo0fFwsAAGCfiJZso66uTmhSQ2RC3Cru2Q5N18aOjo4ePXq0ccuDDz6oVCrT0tJSU1NTU1PFTiMiImJjYw2rL5lRX18vCEJGRsbJkyfFFrVafePGjRs3bly9evXxxx+3MF1qaZFyY0OHDn3kkUdMGufOnWt47erq2qNHDz8/vw0bNly5cqVptDRy5MixY8eKr0NDQydOnPj5559XV1ePGjWqabtxnVFKSopKpTKe1CaXy+Pj42UyWWJi4tmzZw3RkiAI+fn5Wq1WJpMZIiS9Xp+RkZGbm+vn56fVavPz8wWjaOnMmTM6na53796GJMvX13fatGk1NTU5OTkpKSlTpkxp9XMwOH/+fEJCgk6n69Onz4wZM6y8Jgjsn5i/NBv9rFu3Likp6fjx4z4+PqtXrzbedOjQoXnz5m3evFn8v/T999///vvvjx8/7uXl9cILL6xcufK9994zc2YT33333YULFwRBmDt37tq1aw2TOn/44YczZ84EBwcb7/yPf/zj0qVLYqXeM888s2bNmtdff72l/U3GsHz58qVLlz7xxBNiFrB69eolS5YY50qCIJSWlhrKDI2tWbPmypUr6enper3+mWeeMd4UHBx894m/IAhFRUWvvfbatm3b9Hq9Wq1WKBS+vr67du0St+bk5JSXl7d0rJubW2xs7N2PAW1SV1d3+/ZtFxcXIvtOady4cebvygAAgBlES78Vnp6eDzzwgMn8O5lMNn369Pj4+IyMjPz8/NLSUqVSmZ6enp6e3r9//5kzZ5pf30H8Fe7UqVMuLi7jxo3r3bu3IAhXrlz59ttvMzMzz507N2zYsI4a/5AhQ5o2KpXK5OTk69evV1dXG2arCYJw+/btpjsPGjTI+K3hN9Jm28VVqEQ5OTmCIMTFxZmccMCAAYmJiQUFBeJbhUIREBBQVlZWVFQUHh5uPPEtIyPj+vXrQ4cOLSwsVKvVAQEBCoVCPEpMmu6//36Tk48aNSonJycvL8+Sz0F0+PDhc+fOiWcbO3aslWdtwNF99tln+/btEzPlDRs2GNo3bdq0Zs2aw4cPG1bs2rx58zfffCP+v/3uu+/GxcW99957lnf0wQcfhISECILw/vvvT5061RAtffDBBya5kiAIX3755cGDB8V1xzZu3Dht2jRDtNTs/sbGjRunUCi+/vrr2bNnX7169ciRIxs3bjTZp6Us7Isvvjhw4IA4zo0bN3b4cwl0Ot3HH3/8xRdfCIKgVqsFQZDJZP/3f/9n2CEvL6+ysrKlw11cXNo3ixl3Q61Wq9VqJycnyog6n5MnT6ampvLHCgCAdiNasg03NzelUqlUKo0X9DGhVCrFPdvXhVj4o9FoysrKvvvuu9zc3C+//HLhwoXOzs4mewYGBgYGBgqCoNfrb968mZmZmZKSkpmZ6efnZ1hIqFlyuby+vl6v148fP96wIJS4pPf+/fsvXrxoYbTUtEapqabfEpeXl3/66adi5ZQJjUbTtNHLy8v4raGip9l2ceVUUVVVlSAIW7ZsEX79i6j4ura21tASGRlZVlZ2/fr1sLAwMRWKiooSd8vLy9Pr9U0XWhJ/yk0fZS3OgzNOuERmvi0Xc6UxY8Y88MADLe0DtKSwsLBnz55N29evX//ss88arwSfn59vvIB9W+cHRUVFiS969OhRVFRkaA8PD2+6c3FxsWH/nj17trq/ieXLl7/44ouzZs167bXX/v73vzf967Rbt27FxcVNL7yoqMi4X5MhNVvo1CZSqfSNN9544YUX3n777U2bNkmlUqVSuXbtWjPZMWyusrLy1q1bHh4e4r+Y6EzE6mMAANBuLAxpG+KX7cazrpoSt5r/Wr5VTk5OwcHBs2fP9vf3r6qqSklJMbOzRCIJCgp66KGHxJlf6enp5k9uiDnEeiUD8a2Z2Rzt0DQR+89//lNfXx8SEvLMM88sW7Zs5cqVq1atWrFiRUtnaKmKp9XqHjEb0ul0Op1Ob0TcahxCiZlRbm5uaWlpfX29j4+Pl5eXt7e3t7d3fX19SUmJ+DM1/MraDk0/BwPxwVJnzpwx/vUbMNHS//BhYWFigZ6JH374YdeuXe+8846hJTw8PDc31/AHwfBHwMJCOTFgFV+IZUFmDg8ODjbsn5OT0+r+Jo1TpkyRy+Uvv/zy6dOnFyxY0HT/IUOGnDp1qml7SEiIoV/xeQUGp06d6qh6TH9//3feeefGjRsLFy6Uy+UrV67skNPiHrHJWksAAAAOgTsk2+jTp48gCCkpKcbBhDGtVis+zkzc8y45OzuLaw+lpKQ0W9FjQvyWvmnJjAnzX93f6wlZYlnQY489FhUV5e7uLt7u37p1q8M7EhdnWbx48aoWGPaMiIiQSqWFhYXiEwAN1UlilpSdnV1UVCSVSo2/HRVXdmgaw4lLpHft2tXycc6ZMycqKqqurm7r1q1NZ9IBIj8/v6ysrKbtc+fOXbx48fXr16uqqpYuXWpoDw0N/eGHHz755BPDctfPP//8/Pnzs7KyGhsbf/rpJ8M62S2d2cTSpUuLioqKioqWLl06Z84c8zs/9dRTS5YsKSwsLCwsXLJkyVNPPdWmq5NIJMuXL3/nnXdWrFjR7CSmyZMn7969u2n77NmzDeP8y1/+Yrxp9+7dkydPNj+MNvHz83v77beLiopiY2MvX77cgWdGx7LJE+IAAAAcAtGSbcTExHh5eZWXlx88eFCn05ls1el0Bw8eLC8v9/Ly6qg1Pnr27BkcHFxbW3vx4sVWdy4sLBQEwbAeUEv69esnvrh69apx+5UrV4TmJnl1LDGVc3L61aTO5OTkDu9ILMJqtrTBhIuLS7du3bRarVgdZqhOEjMmMUns1q2b8UOgxJip6cnFldHFQiQLOTs7z549u2fPniqV6osvvjZupdoAACAASURBVBB/CoCJl156KT4+vumvx8uWLYuPj3/ggQd69OhhMtcsODj4+++/37Zt2xtvvCEIwuLFi6dMmTJjxgwPD485c+YY4p6Wzmxi7NixgwYNio6O7tGjxyuvvGJ+5xUrVvTr12/IkCFDhgwZMGDA8uXL23p1MpmsV69ezz77bLP7z5w5MyUlpekfluXLl0dFRUVHRw8aNMh44fzs7OyzZ88aVvTvQL6+vmvXrjWeaQh7I/5jTbQEAADQFNGSbchkMnGR7IsXL27ZsuXSpUs1NTVarba2tjYzM/OTTz65ePGiYZ+O6nTkyJGCIJw+fdowmWvTpk3Hjh3Lycm5ffu2RqNRq9WVlZXJycniU4paXc+yR48e4ny9b7/9Ni0tra6urq6u7uLFi0eOHBEEYfDgwR018maJq13s37+/vLxcrVaXlZXt378/LS2twzuKj493c3O7cOHCV199de3atTt37uh0uoaGhuLi4uTk5H/961/GO4spUkNDg0QiMQRDkZGREolEpVIJTWbDxcXFSaXS7OzsgwcPVlZWarXaysrK/fv3X716VSaTNV073DwnJ6cnn3yyd+/eGo3m66+//umnn+7mwtEp/fWvf62qqjL8JWB44ezs/I9//KOgoKCystJQtWTYGhQUlJmZ+eqrrwqCIJVKFy9enJWV1dDQkJ6ebni4ocmZW/L3v//95s2blZWVH330kWHJM5OjDG9dXFw2btxYWlpaWlq6ceNGQyzb0v5Nx7B169bXX3/dJIM2cHNz++tf/9r0ert06fK///u/lZWVN2/eXLZsmfH5//rXv7q6upq/RnRKVC0BAAC0hGW8bSYsLOyZZ57ZuXNncXGx4YHTBu7u7o8//nhYWFgH9tivXz9vb+9bt25lZ2eL342Xl5eXl5cnJSU1O7wHH3zQ/AklEsljjz326aef1tTU7Nu3z3hTbGysuJ73vfPggw9u3749JyfHeIGYYcOGnT17tmM76tq16+zZs3fs2JGdnS3OdDMjKipKLDgKDAx0d3cXG93d3QMCAm7evCn8eg1vQRCCgoImTJiQkJCQmpqamppqaJdIJBMnTmzHYrFOTk6zZs3atWvX5cuX9+7dq1KpWBgYv006nW7Lli15eXmzZs0ys9vLL79s+TkPHz581+OCo7L+WktarVapVDo5ObVpcjQAAID1ES3ZUvfu3ZcsWXL+/Pns7Ozy8vKGhgYXFxd/f//evXsPGTLE8H1+R5FKpSNGjEhISDh16pQYLS1atOjy5cv5+fllZWXik87c3NwCAwMHDBgQGxtryQ20j4/P888/n5SUlJ2drVQqnZ2dg4KCBg8e3OHP6m6qV69es2fP/vHHH0tKSqRSqb+//+DBgwcNGtTh0ZIgCKGhoQsXLhR/UhUVFY2NjXK53NfXt1evXia1XWFhYU5OThqNxiRCioqKunnzppOTU9PHWg0dOjQwMPD06dM3btyor693dXUNDw+Pj49vd7Aok8meeOKJPXv2XLp06dChQw0NDffff3/7TgW0T7OVHa0WNHUsmUwWERGxa9cu1l1Gh7D+hLjGxsaKigq5XE60BAAA7JzEyvf6AAAADqeoqKiuri4oKMhqQY9KpaqurnZycvL19bVOj79Z3bt3T0xMbHUdAAAA0BKqlgAAAFph/aqlLl26tGNaNAAAgPUxTQAAAKAVYrTE/EoAAICmuEMCAABohfWX8QYAAHAU3CEBAAC0wvoT4gAAABwF0RIAAEArmBAHAADQEu6QAAAAWiFOiKNqCQAAoCmeEAcAANCKkJAQnU4nk8lsPRAAAAC7Q7QEAADQCjc3N1sPAQAAwE4xIQ4AAAAAAADtRNUSAACAfdFoNHl5eTKZLDIy0tZjAQAAaAVVSwAAAPZFq9Xq9Xpx7XAAAAA7R7QEAABgX7RarSAIrBoOAAAcAtESAACAfSFaAgAADoRoCQAAwL4QLQEAAAdCtAQAAGBfiJYAAIADIVoCAAAwR6PR1NXVNTY2Wq1HoiUAAOBAiJYAAADMUSqVRUVF1dXVVuuRaAkAADgQoiUAAABzpFJply5dnJ2drdajGC05OTlZrUcAAIB245YFAADAHC8vLy8vL2v2SNUSAABwIFQtAQAA2BeNRiMQLQEAAAdBtAQAAGBH9Hq9TqcTiJYAAICDIFoCAACwI+JsOIFoCQAAOAiiJQAAADvCQksAAMCxEC0BAADYEaIlAADgWIiWAAAA7AjREgAAcCxESwAAAHaEaAkAADgWoiUAAAA7QrQEAAAcC9ESAABAi/R6/Y0bN4qKinQ6nXV6JFoCAACOxcnWAwAAALBfOp1OpVIJgiCVWukLOaIlAADgWKhaAgAAaJFYrCSRSKzWo0QikUgkREsAAMBRULUEAADQIjFaslrJkiAIQUFBVusLAADg7lG1BAAA0CLrR0sAAACOhfskAACAFhEtAQAAmMd9EgAAQIuIlgAAAMzjPgkAAKBFREsAAADmcZ8EAADQIqIlAAAA87hPAgAAaBHREgAAgHncJwEAIKxZs+bRRx81v49EIhFfTJw48a233rr3g4JdIFoCAAAwj/skAMBvXW1t7YYNGzZs2CC+NURILVm/fv369evr6+vv/dBge3q9XiBaAgAAaBn3SQCA37q9e/fGx8f36tVLfCtGCWb07dt3yJAh+/fv79hhqNXqjj0hOoSVq5aqq6tLSkpqa2ut0x0AAMDdI1oCAPzWHTx48PHHH2/TIU888cSBAwc6agApKSlTp07Nz8/vqBOiA2m1WsGK0VJ9fX1NTQ05IwAAcCBESwAAO2IyGc3w9tixY4MGDXJ1dY2IiNiyZYvYqNPp3nzzzcjISB8fn3nz5hkKPSQSyYYNG8LCwsQ4oNljjZ0/f37EiBFNO21sbFy0aJGvr29QUNA777xjfMjIkSPPnj1799ebmpo6evToESNGKBSKnj173v0J0eGsXLXk5eXl7+/v5uZmne4AAADuHtESAMABPP3008uXL6+urv7xxx9TUlLExvfff//7778/fvz4tWvX1Gr1ypUrDfv/8MMPZ86cEUOBZo81Vlpa2q1bt6bta9asuXLlSnp6+vnz5xMTE403BQcHFxcX380VpaWl/f73vx85cuTJkydlMtnq1avv5my4d6wcLbm6unp5ecnlcut0BwAAcPckra4oAQCA1Ugkv/qHyfA2PDx82bJl06ZNCwsLM2zt16/fN99806dPH0EQbt68GRcXl5eXJx6Vl5fXvXt3cbdmjzXm6up669YtQ52IodOePXseOHCgf//+giBkZGRER0cbxlZbW+vv719XV9eOa9TpdC+88MJHH30kkUjE2MLZ2VmhUBh2UCqV4iSslrS60DgAg8DAwJKSEjM7dO/ePTExUfyTDgAA2oFoCQBgR1qKli5cuPDGG28kJSX5+Ph88MEHEyZMEATBzc3N+DFtUqlUTGTEyMaQvzR7rLGoqKijR48a5qMZOnV1da2qqnJxcREEoaGhwdXV1TC2q1evjh8//tq1a+27zPr6+o8//viNN97QarVKpdLFxSUjI8PHx0fcWl5ebia0kslkxjkU7rW8vDy9Xh8aGurs7GzrsaDN3nvvve3bt1dWVprZh2gJAIC75GTrAQAA8AsXF5e6ujqxgKi0tNTQPmjQoH379un1+oSEhHnz5ok1COHh4d9++21ERETT8xjX9TR7rLEhQ4acOnWq6VJHISEh169fF3/hNEmRTp06NWzYsHZfpqur69KlS//0pz9t3rx59erVt27d+vjjjw3LOXl7e7f7zOhYer1eo9EIghAVFSWTyWw9HLSZl5eXrYcAAEDnx1pLAAA7Mnjw4Hfffbe2tjY3N3fBggWG9qeeeiozM1N8bJZh1Zvnn39+/vz5WVlZjY2NP/3005NPPtnsOZs91tjkyZN3797dtH327NlLly4tKioqKir6y1/+Yrxp9+7dkydPbu9V/szV1fWFF14oLCzcuHHj4cOHKyoq7vKE6HDijEXBimstAQAAOBzukwAAduTjjz9OTEz08/MbM2bM+PHjDe1Tp06dMWOGp6fnq6+++sUXX4iNixcvnjJlyowZMzw8PObMmfPUU081e85mjzU2c+bMlJSUK1eumLQvX748KioqOjp60KBBjzzyiKE9Ozv77Nmz06dPv9urFQRBEFxcXBYvXnzx4kWmqNshcYqlVCplfSsAAICWsNYSAADC2rVrT548efjwYUt2njRp0qhRo1566aV7PSrYnDghTqfTdenSxdZjQXusWLHio48+Yq0lAADuKdZaAgBAePnlly3f2cIECp2ARCJh9W4AAADzmBAHAABgF9RqdUNDgzgLDwAAwFEQLQEAANiFqqqqgoKC6upqWw8EAACgDYiWAAAA7IJYrySTyWw9EAAAgDYgWgIAALALREsAAMARES0BAADYBaIlAADgiIiWAAAA7ALREgAAcERESwAAALan1+vFaMnJycnWYwEAAGgD7l0AAACad+fOHa1W6+7u7uzsfK/7EnMliURC1RIAAHAsREsAAADNq6ysbGxslMvlVouWyJUAAIDDIVoCAABonkKhUKvV1pmhptFoBKIlAADggIiWAAAAmufr62u1vqhaAgAADoplvAEAAGxPrFpiDW8AAOBwiJYAAABsj6olAADgoIiWAAAAbE+MlqhaAgAADodoCQAAwPZYxhsAADgooiUAAADbY0IcAABwUERLAAAAtscy3gAAwEERLQEAANiYXq/X6XQCVUsAAMABES0BAADYmDgbTiKREC0BAACHQ9E1AABAM8rKypRKpa+vr7e3973uizW8AQCA46JqCQAAoBlarVav10skEuv0JRAtAQAAx0TVEgAAQDOsGffIZLKuXbuyhjcAAHBE3MEAAAA0w5rraru4uAQFBVmhIwAAgA7HhDgAAIBmiFVLUik3SwAAAOZwtwQAANAM1j8CAACwBNESAACAKb1er9frBaIlAACA1hAtAQAAmBJLliQSCRPiAAAAzONuCQAAwBQLLQEAAFiIGyYAAABT1nw8HAAAgEMjWgIAADBF1RIAAICFuGECAAAwxePhAAAALORk6wEAAADYHTFacnKyxp1SbW1tSUmJm5tbcHCwFboDAADoWFQtAQAAmLJm1ZJGo9Hr9VboCAAA4F6gagkAAMCURqMRrBUteXh4uLu7ky4BAAAHRbQEAABgyppVSxKJxDoz7wAAAO4FJsQBAACYYhlvAAAACxEtAQAAmCJaAgAAsBDREgAAgCmiJQAAAAsRLQEAAPyKmCsJREsAAAAWYM1IAACAX9HpdE5OTnq9XiKR2HosAAAA9o5oCQAA4FecnZ0jIyNtPQoAAADHwIQ4AAAAAAAAtBPREgAAgM2oVKrKysra2lpbDwQAAKCdiJYAAABspqGh4datW7dv37b1QAAAANqJaAkAAMBmxKfROTmx/CUAAHBUREsAAAA2o9FoBEGQyWS2HggAAEA7ES0BAADYjFi1RLQEAAAcF9ESAACAzYhVS0yIAwAAjotoCQAAwGaoWgIAAI6OaAkAAOAXer2+uLj45s2ber3eCt2xjDcAAHB0REsAAAC/0Gg0tbW1d+7ckUgk97ovnU6n0+kEqpYAAIAj4ysyAACAX8hkssDAQGuWLEkkEqmUb/sAAICjIloCAAD4hVQq9fDwsE5frOENAAA6Ab4iAwAAsA3W8AYAAJ0A0RIAAIBtULUEAAA6AaIlAAAA26BqCQAAdAJESwAAALYhRktULQEAAIdGtAQAAGAb4oQ4qpYAAIBDI1oCAACwDaqWAABAJ0C0BAAAYBtULQEAgE6AaAkAAOBner2+vr5erVZbpzuqlgAAQCdAtAQAAPAzlUpVWFhYWFhohb60Wq1erxeoWgIAAA6OaAkAAOBn1iwjEvuSSqUSicQK3QEAANwjFGADAAD8zJqLH8lkssDAQLFwCQAAwHERLQEAAPxMjJasU7Ukk8k8PDys0BEAAMA9xYQ4AACAn4mT1Fj8CAAAwHJESwAAAD+zZtUSAABA50C0BAAA8DOiJQAAgLYiWgIAAPiZGC05OzvbeiAAAAAOg2gJAABAEARBp9OJay1RtQQAAGA5oiUAAABB+G/JklQqlUq5QQIAALAUd04AAACCwEJLAAAA7UK0BAAAIAjWjZb0en19fb1arbZCXwAAAPcU0RIAAIAgCIIY9FhnDW+VSlVYWFhYWGiFvgAAAO4pSr4BAAAEwepVS3K5XCaTWaEvAACAe4poCQAAQBCsGy25urp2797dCh0BAADca0RLwC+KiopUKpWtR4FOwsPDw8/Pz9ajANAGLOMNAADQDtw8Ab+YMWNGVlYWv1Tg7jU0NMybN++f//ynrQcCoA2sudYSAABAp8Gv0MCvfPPNNw899JCtRwGHt27duoKCAluPAkAbaLVavV4vULUEAADQRjwhDgAA4OfZcDKZTCKR2HosAAAAjoRoCQAAgIWWAAAA2on7JwAAAEEmk3l4eBAtAQAAtBX3T4Bdk0gk4tofuEt8kgDMc3FxcXFxsfUoAAAAHA8T4gA0r7q6esyYMbYehf0aMWKEUqm09SgAAAAAwMaIlgC7ZsNCmzfffPPxxx/vwBMGBwd34NnaqsM/yTlz5qxZs6ZjzwngN6KhoaGwsLC8vNzWAwEAAOgAREvA3VKpVLYeQjPuclSVlZUHDhz44x//2IFnLikpMb+DfX6SLVmwYMGePXsqKyttPRAAjketVtfX1zvWX3oAAAAtIVoCWrRv3z65XC6RSDw9PWfMmHHixInf/e53xjvs2LEjJCTExcVFoVCMGzcuNTXVeKtEIhGfYH306NHY2NjevXsfPnzYeJPh+dYmb0VXr15t2ijKzs6eOXOmt7e3q6vrqFGjjh071rt3bwtHZaHPP/981qxZJsvZmjlzSEiIRCKJiooS3/bo0UMikYSFhYlve/bsKV6IxIiFZxZ3rqmpmTZtmlwul8vl+/btM2xt9WckmP0ks7Kypk2bFhISEhISMmPGjOzsbAv7FQTB2dl5xowZn3/+eeufJgD8mlarFQRBJpPZeiAAAAAdgGgJaNGsWbN27Nih1+urqqr+9a9/FRUVlZWVGbaeOHFi69athw4dqqurKy0tfeWVVxYtWnT+/HnDDuIMrA8++ODs2bOJiYnZ2dmfffaZuOnOnTuBgYG1tbXi25qamsDAwDt37hj33qtXr2bncGVlZY0fP378+PGXLl1SKpVfffXV1atXDbUzrY7KQocOHXr44YeNW8yf+dSpU+PHjz916pT49uTJk+PHjz958qT4NicnR7wWvRELzyzuuWzZsr/97W8qlWrHjh2zZs0yHGv+Z9TqJ/nss89u2LChqKioqKho/fr1c+fONaRL5vsVjRs37sCBAxZ/qADwMzFa4ml0AACgk9AD+K9hw4YdO3bM8LZr166JiYm3b99udufRo0fn5uYat6Snp//+9783bhEE4ejRo4a3Go3G8HrOnDlffPGF+Hrbtm1/+MMfmu2l6R/SKVOmfP755y1dgiWjsoSfn19FRUWbzpyfnz9+/PiioqLCwsLx48fn5+ebnLOlv3BaPbMgCDt37mz2POZ/RuZ7nzx5ckJCgnFLQkLC1KlTLelXVFZW5uvr22x3b7311qJFi1odFYDfptLS0itXrty6dcvWA+n8li9f7u3tbX6f8PDwS5cuWWc8AAB0SnxdBrQoJSVl8eLFJ0+eDAoK+t3vfufq6vrhhx9269ZN3Hr27NnIyEiTQ9zc3ExajGt/jOc+PP300+vXr58zZ44gCNu2bfvb3/5m4ahOnDixZcuWlrZaOKpWVVVVeXp6tunM4eHh//73v5977jm9Xr9582bDbLhWWTLmlhYUN/8zMu/EiROGOjLRsGHDTEqTzC9k7uXldfv2bUv6AgBjGo1GoGoJAAB0FtzTAC3q37//sWPHjFsmTZpkWC/J1dU1KysrIiKifSf//e9//9xzz4krW2dmZo4dO9bCA7VabbPLBnXIqAw8PT2rq6v9/PzaceaWFjZqyd2M2fzPqFX6JhPlmraYUV1d7eXlZfn+AOyWVquVSqVt+rvrLrsTWGsJAAB0Fqy1BLRBQkKC4fWkSZO+/PLLdp9KJpPNmjVr+/btX3755axZsyz/BWPEiBFm1ve5y1EZREdHX7p0qU1nvnHjxh//+MdPPvlky5Yt8+fPv3HjhvkuDI9G6qgxi4x/RuaNGTMmJSXFuOX06dOWZ3yCIGRkZMTExLRhcADs1c2bN3NycqxWh0jVEgAA6EyIloAW+fv779+/v6qqSnybnJzs7Oxs2Lp27drNmze/+eabeXl5arW6srLyyJEjkyZNsvz8Tz/99NatW7dt2/b0009bftSaNWteffXV//znP3q9vr6+Pjs7e8uWLfPmzeuoUYmmTJly9OhR4xbzZ87Pz1+wYMGnn34aHBwcEhLyySefLFiwID8/3/gMzs7O4kPWSkpKPvzww/j4+Lsfs/mfkXnr1q1bsWJFcnKyRqPRaDTJyckrV65ct26dhYcLgnD06NHJkydbvj8Au2XldbWpWgIAAJ0J0RLQosjIyODg4IULFwYHBw8ePPjJJ5/csWOHYWtoaOipU6dycnKGDh2qUCji4+NN1u4RJ1ZIjJic/7777tPpdHq9PjY21mST8SEmhw8bNmzfvn3r1q3z9vYODg5++umnGxoa/vnPf1o4Kgs9++yzO3fuVKvVFl7v8OHDv/322+HDh4tv4+Livv32W0N4JBIfsiaVSuPi4nJycg4dOmTJmQ0fQrNvzf+MzH+S/fr12759+1tvveXt7e3t7b1u3bqvvvqqT58+lvQrCIJard6zZ8+zzz7b1s8WgB0KCwuLjIx0dXW1Ql9iriQQLQEAgM5C0qaFRYDOLS4ubu3atQ899JCtB2IX/v73v4eHh//5z3+29UDs1KZNm27cuNFSldO6desKCgoMkR8AGKhUqhs3bshksqioKFuPpfNbsWLFRx99VFlZaWaf7t27JyYm9u/f32qjAgCgk6FqCUDzli9f/sUXX9h6FPZrz549r7zyiq1HAcDxWHnyHQAAwL3GbQ2A5nl6epqscg1jx48ft/UQADgkcQ1vZsMBAIBOg2gJAADAeljDG7Ct2tray5cv23oUsCq5XB4dHW3rUQCdGdESAACA9YhVS0yIA2wlMzNz5MiRYWFhth4IrEStVuv1+oKCAlsPBOjMuK0BAACwHqqWAJvr2bNnZmamrUcBK7l8+fLDDz9s61EAnRzLeAMAAFgPVUsAAKCTIVoCAACwHqqWAABAJ8M3ZsAvrl69OnbsWFuPAp1ETEyMrYcAoHVqtbqiosLFxcXb29s6PRItAQCAToZoCfhFjx49Xn311VGjRtl6IHB4H3zwQWlpqa1HAaB1KpWqpqZGo9FYJ1rS6/VitMSEOOA3RSKR6PV6W48CAO4VbmuAX0ilUoVCYbUvrtGJubq68nsj4BAaGxsFQXB2drZOd2KuJJFIqFoCcE+lp6fHxsYKgtBspGV+KwC0FWstAQCA3y61Wi0Iglwut053Tk5OkZGR4eHh1ukOgJ2wfoITExNjplPzW++d4OBg63cKwAqIlgAAwG+XWLVktWhJEAQnJydrdgcA9qOkpMT8DiqVyjojAdCxiJYARyKRSMxsMrP17s8PAJ2SlSfEAehksrOzZ86c6e3t7erqOmrUqGPHjvXu3dt4h6tXrzZ7kyY21tTUzJw5093dvV+/frt377a837fffnvo0KEeHh5hYWFLly69detWB1yMIAiCkJWVNW3atJCQkJCQkBkzZmRnZxtvNX+9ZkbVs2dP8UOQGDE+844dO0JCQlxcXBQKxbhx41JTUzvqigBYAdESYE63bt1MWrp27dpRJ6+rq2vrIWZKlzukqtnyk3Tg5wAAtqLVanU6nWDdqiUAnUZWVtb48ePHjx9/6dIlpVL51VdfXb16tbKy0nifXr16NXt/JTa+++678+fPv3Xr1pEjRz788MNjx45Z2HVsbOy5c+eUSmVaWppCoZg+ffrdX44gCFlZWc8+++yGDRuKioqKiorWr18/d+5cQ7rU6vWaGVVOTo54yXojhq0nTpzYunXroUOH6urqSktLX3nllUWLFp0/f75DLgqAFRAtAeaYPOTLx8enpqam6Tct4tuEhARBEBISEiQSSVhYmKH92LFjAQEBQ4YMyc/PF/cvLy8fOnSou7t7YGDgn//8Z0syJvG0Jl/v1NbWzp07V6FQDBw4MCMjw+SQYcOGDRs2zMIrbfb8YsuHH34YGhoql8v37dtn/nMAAMciliw5OTnxVxmAdnjppZdef/31+fPnBwcHOzs7h4aG/ulPf6qoqLD8DAMHDhw/fryLi0t4ePi77767du1aCw8cN26c+MLHx2fVqlUnT55s8+ib8+KLL77++uuRkZHi24iIiJUrV7744ovi21avt92jWrVq1aZNmwYOHOjq6qpQKB544IHNmze//PLLHXJRAKyAaAloA/FrmabftJw+fXr48OETJ04UBGHChAlDhgw5fPiw8N/vo27dulVQUPDiiy8uXbpU3H/ZsmXvvvtuY2PjtWvXxo4du2zZsla7njhxYtOvvF588cVu3bpVVlZ+9913Bw8eNNlqMsh2nF9sKS4uzszM3LFjx6xZs8x/DgDgWKy8hjeATubEiRMTJky4mzOMGjXK8DomJubs2bOWHKVSqdasWdO3b183Nzc/P79x48Z11P3YiRMn4uLijFuGDRt2/Phxw1Yz13s3ozp79mxkZKTxXLmYmJjk5OR2XwgAK+PZ2EAzQkJCiouLxdfiV9nBwcFFRUUt7T98+PBu3brt3bt3xowZe/bs6dmzZ0xMjGHrI4880qVLlwkTJjz33HNiy8GDBz///HPDDv7+/ps2bWrHOLdv356TkyOXy/38/P74xz++8sorxlvPnTvXjnM2JX6BNn36dPF3MFjo5MmTCxYssPUo0DnNmzfP5NYfwpxH4AAAIABJREFU7WP9NbwBdCZarbZjax4t/OvoL3/5i7+//8mTJ728vNRqdX5+fr9+/TpqDC191yi0dr13MypXV9esrKyIiIh2DRmA7REtAc0wpEgSicTM9y2NjY2GO4A1a9Y89thjkyZNWr169Z49e5rd38np5z9xgwcPPnr0aIcO+edfkGzC+HOAQdeuXaOiomw9CnRCW7duHTVqFNFSh2ANbwB3Y8SIEQcOHJg3b167z5CcnPzoo4+Kr9PT0wcPHmzJUV9//XVubq6Xl5cgCE5OTr6+vu0egIkxY8akpKRMmjTJ0HL69OmxY8eKr81fbztGpVKpunTpIgjCpEmTvvzyy+XLl3fANQCwBaIloG2cnZ337dv36KOP/uc//1m7du2PP/4otvft23fEiBGTJ0+Oi4vr1auX8SEnT5585JFHEhMTH374YbFlwoQJW7ZsGT9+fHBwsFTa/nmpTz755Hvvvbdq1ary8vK3337bZKu40JKFldVt1dLnAIPY2FjD2gRAB0pJSbH1EDoPJsQBuBtr1qyZPn16eHj42LFjGxoabty4kZSUlJyc/Omnn1p4huvXrx89evSBBx4oKytbtmzZmjVrLDmqV69e//73vxctWqRSqQ4ePLh9+/a7uIhfWbdu3ezZs729vQ23kStXrvzqq6/Ereav15JRiTeQ06dPLykp2b1792effSY+CW7t2rX333+/Xq//wx/+EBIScufOnXPnzm3cuFFcYgKA/WOtJcCcgIAAkxZxySFvb+8tW7Z88sknxptefvnlH3/8ceXKlSaHBAcH9+jRY8OGDevXrxdbXnjhhfLy8lGjRvn4+IwbN+6tt95qdSSGBbONV85+5513CgsLvb29J0yYIH6DZFylrNVqLZ/i3uz5DS0m/zX/OQCAQ9Dr9VaOlvR6/a1bt6qrq1mlDugchg0btm/fvnXr1nl7ewcHBz/99NMNDQ3//Oc/DTsYP/Ok2eefLFy4cM+ePX5+fmPGjFm4cGF8fLwl/W7bti0xMTEgICAmJubSpUu7d+8Wfn0TaL5fM1v79eu3ffv2t956y9vb29vbe926/2fv3oObOs/Ej7/yRcZIvglbimwTEhIugTYtYAxkw6+zJA4YAsUuxewsBQbadNKEsKElXMJk0kzBEJt4E2/oUvACTRpCgvFyM7kRZoBAApvutjUOFEMAW8YXLBssY1uypN8fp1EU2ZZlIevo8v38wUjvOed5n3NagvToPc/ZvGfPnlGjRnlyvn1mJb75ABkRETFp0qSqqqrDhw9L4+np6Z999llVVdXEiRPVavUjjzxy/PjxXbt2eXI1AAQCdzf7AOFm0qRJ+fn506ZN8+7w4uLiK1euFBUVOQ+6v6UOoWrz5s3V1dXOHy4BX8nJyfnJT36ycOFCuRMJehaL5erVqwqF4sEHH/TPjF1dXV9//bU/Z8T69eu3bt3q8jB4F8OGDTt69OiYMWP8lhXkde7cucWLF1dWVsqdCJ8S/eTChQtZWVnV1dVyJwKEMm6IA3zD8ZuMc2nJ8XMQnxsAINDI0sM7MTGRfxEAAECIobQE+EaPXxX4/gAAAcv/PbyjoqJSUlL8Nh2AQMYPkABCCb2WgECh0+kU3eh0OrnzAoDQJJWWpIcTAYCf2b8hdyIA4AOUloBAUV9fb++mvr5e7rwAIDR1dnYKHg8HIPAMGzas+8+NkmHDhsmdHQD0gBviAABAOJKl1xIA9OnatWtypwAA/cOqJQAAEHbMZrPdblcoFJSWAAAA7hKrlgAAQNixWCyCJUtAWLJarWaz+euvv5Y7EfiJwWCw2WxyZwGEOEpLAAAg7KhUquHDh1utVrkTAeBvFy9evHz58vDhw+VOBP7DExuAgUZpCfCH/j5Z1idPopUeattjnIF+0q2b+G6y8kl8APBQZGRkZGSk3FkA8LcxY8Y89NBDlZWVcicCP7lw4UJWVpbcWQAhjl5LgDt6vd4ncbrXQeLi4vq1v08m9TqfAZ3at/Fd+Pa8AOBucEcGAAAISZSWAHfq6uqc33Z0dKxYsUKn0+n1+l27do0cOVIalx4H29LSsmzZsri4uFWrVjkOKS8vl7Y6x9FoNCaTyfEcWedNPe7f27xCiOXLl48aNUqlUmVlZR0/frzPM+pXPtLb8vJyx4FDhw71In5bW9uSJUvUavW4ceMqKipcDsnMzMzMzOwzczfxpZHi4uL09HSlUllWVub+vADA/7q6ui5fvnz58mW5EwEAAPAxSktAP6xbt85sNldUVFy5ckWlUhmNRmlcWkSTm5s7depUg8EwY8YMxyEzZ87svsRGOtD+DedNPe7f27xCiPz8/IsXL7a0tKxZs2bOnDl9nkK/8jlz5szkyZNnzpwphMjOzs7IyDhy5IgX8VevXq3X641G48cff3zo0CGXrd0vQn/jSyO1tbWVlZV79+7Ny8tzf14A4H9dXV1CiIgIPnoBAIBQQ68loAdpaWm1tbXSa2m1S2pqqsFg2LNnz/nz5zUajRDipz/96U9/+lPnow4ePKhWq4UQjz32mG/z6W3eS5curVy58vTp052dnePHjzeZTL6dd/LkyXq9fv/+/bm5uaWlpQ8++ODDDz/sRZx33nmnqqpKqVQmJyc/9dRT69atc9567tw5n2Sbn58vhMjJyZEe/CS7//7v//7888/lzgIh6PLlyw8++ODChQvlTgT9I7UMj4rioxcQTAaifaQnB8rSphMAvMbnG6AHBoNBeuHy77T0m3NvpLqSF8xms/sHYPc27/z58xcsWFBSUqLRaG7evOmrzlDO+WzcuHHevHmzZs165ZVXSktLfRL87oN4PbU/HzQ+ceLEZ555xm/TIXzk5eX5vI4MP5D+S07jcCAw6fX6GzdudB933z7Su9vtPTmwv3WifrWhbG1t7VdwAOgTpSWgH+bNm1dYWLhx48bGxsZTp06Vlpa+/fbb3oWKjo4uKyt78sknP/nkk/z8/BMnTngxr8FgyMjIiI+Pr6ysfPfdd73LxH0+o0ePnjJlyuzZsydNmjRixAjvgi9YsGDLli0vv/xyY2Pjq6++6rJVarR09uzZu8m/N/26zr6Vlpb2+OOP+206hA+eoBykpFVLlJaAwOTSXlMIUV5ePmvWLPHdqk1bW9szzzyzb9++ESNGvPXWWy6H9OsjzfXr1+fPn3/x4sWcnJzi4mKVSuVm3jt37qxYsWLfvn3333//nj17Ro8e7dihx/2l0tUbb7yxefPmhoaGvXv35uTkCKc2lNJuLHQC4Cvc8A+4o9Vqnd8WFha2tLRotdqxY8ceOHCgoKBAGpf+he6xXbRjxGWT1BIoKSlpx44dJSUl7vfvbd5t27YtW7ZMo9GsWbNm0aJFjkzczNvffIQQa9euPXHixEsvveTJFesxfkFBQU1NTVJSUnZ29tKlS53zFEJYrVbPP9n0GN8x4vKn+/MCAH+SVi1xQxwQLAa6feSuXbv27dt3+fJltVr9wgsv9DmvRqOpq6s7efLkBx98IJyqQrShBBAIuCkX+NakSZPy8/OnTZsmdyKBpbi4+MqVK0VFRXInEkw2b95cXV39H//xH3InghCUmpr64x//+Pe//73ciQQrm81WX1+vVCqHDBniz3lv3LhhMplSUlISExP9OW+YW79+/datW50ff9HdsGHDjh49OmbMGL9lBXmdO3du8eLFlZWV4rvtNSVSe03HW5feCBqNpqqqSmp/2dTUlJyc7N2XKYVCUVNTk5aWJoQwGo2jR49uaGhw2cE5slarvXDhgjRvY2OjVqt1mbd7ryXnkd5eh4kLFy5kZWVVV1fLnQgQyvjpDIA7juU/lJYAhIbOzk6TyRQVFeXn0hJtvIEA1Ft7TU/4qn2kzWbr89mRzsu9fVgY8nMbSgAhjBviALjDkmkAISY6Olqr1SYlJfl5Xtp4AyFAah9psVhqa2s3b97ssjUzM1Nqt+SJ7du319TUNDc3b9iwYf78+e53zsvLKyoqstlsJpNpx44d3qT+DakNpcViOXr0KE0hAfgKpSUA/aPT6RTd6HQ6ufMCAI9ERUUlJCT4/6402ngDgcylvaYYyPaR0iFLlizJzc0dPny4yWTatGmT+3k3bdpUV1eXnJz86KOPzp49u888aUMJwM9YlQ2gf+rr6+VOAQCCjM1ms9lsghvigEDV/eNNj0UilUq1e/fu3bt397jPl19+6clcjqN6fJZcj/MOHjx4+/bt27dvt1gshw8fdm4N1uP+zoMuO+Tk5PjqVj4AcODzDfCt5ubm/Pz8nTt3yp0Igt758+fvv/9+ubMAECikJUsKhaLPjioA0KMXX3xx48aNSqVy5syZn376qdzpAMB3UFoCvmWxWEwmU3Nzs9yJIOi1t7ffvn1b7iwABAruhgNwlzZs2LBhwwa5swCAnlFaAr6l1Wo3bNgwbdo0uRNB0Nu8eTPPuAXgIPXw5m44AAAQkliVDQAAMLBYtQQAAEIYv54B3/H3v/89ISFB7iwQ9AwGg9wpAAggUmmJVUsAACAk8REH+FZaWlpBQYHcWSBELFy4UO4UAAQK6YY4Vi0BAICQRGkJ+Nb+/fvlTgEAMFAsFktHR0dMTIxSqfTz1NwQBwAAQhi9lgAAQFhoa2urq6u7efOm/6emtAQAAEIYpSUAABAWOjs7hRAxMTH+n5peS0CYUCgUA7p/b0F6i+OT+O6ndrPp7mcf6PwB+AqlJQAAEBY6OjqEEIMGDfL/1JGRkVFRUaxaAgKWXq/3SRy73e4yEhcX16/9fTKp1/kM6NS+je/Ct+cFoL8oLQEAgNBns9nMZrOQadVSenr6/fff7/8eTwA8VFdX5/y2o6NjxYoVOp1Or9fv2rVr5MiR0ri0EqelpWXZsmVxcXGrVq1yHFJeXt59nY5GozGZTIpvOG/qcf/e5hVCLF++fNSoUSqVKisr6/jx432eUb/ykd6Wl5c7Dhw6dKgX8dva2pYsWaJWq8eNG1dRUeFySGZmZmZmZp+Zu4kvjRQXF6enpyuVyrKyMvfnBcBvKC0BAIDQJ9WVpNVDcucCINCtW7fObDZXVFRcuXJFpVIZjUZpXFpEk5ubO3XqVIPBMGPGDMchM2fO7L7ERjrQ/g3nTT3u39u8Qoj8/PyLFy+2tLSsWbNmzpw5fZ5Cv/I5c+bM5MmTZ86cKYTIzs7OyMg4cuSIF/FXr16t1+uNRuPHH3986NAhl63dL0J/40sjtbW1lZWVe/fuzcvLc39eAPxGwd89AACCSGpq6o9//OPf//73cicSZJqbm2/evKlSqVJTU+XOBf6zfv36rVu3On8/727YsGFHjx4dM2aMF/F/9KMf1dTUeJsd5NHZ2RkZGXnt2jUhRFpaWm1trfPW1NRUg8Gg1+vPnz+v0Wi6H65QKFpbW9VqdY/BFQrXr1fdR9xs7W3eS5curVy58vTp052dnePHjz958qSHs3ieT25u7sKFC3Nzc/ft21daWrpnz57ecnYTTaPRVFVVSfk3NTUlJyff5ZdN9/n39trFhQsXsrKyqqur7yYTAO7xwx0AAAh9MjZaQgi7fv365s2bH3jgAbkTQT9UVlb+7ne/k14bDAbphUthoqury02E3upKfTKbze5vjO1t3vnz5y9YsKCkpESj0dy8edNXnaGc89m4ceO8efNmzZr1yiuvlJaW+iT43QfxempuQAb8jNISAAAIfe3t7UKI2NhYuRNBqBkzZsz3vvc9ubNAP9hstj576s+bN6+wsHDjxo2NjY2nTp0qLS19++23vZsuOjq6rKzsySef/OSTT/Lz80+cOOHFvAaDISMjIz4+vrKy8t133/UuE/f5jB49esqUKbNnz540adKIESO8C75gwYItW7a8/PLLjY2Nr776qstWqdHS2bNn7yb/3vTrOgPwOXotAQCAEGexWKxWq0KhYNUSgB5ptVrnt4WFhS0tLVqtduzYsQcOHCgoKJDGpRbRPbaLdoy4bJJaAiUlJe3YsaOkpMT9/r3Nu23btmXLlmk0mjVr1ixatMiRiZt5+5uPEGLt2rUnTpx46aWXPLliPcYvKCioqalJSkrKzs5eunSpc55CCKvV6vn9cT3Gd4y4/On+vAD4AauWAABAiJPuhouJieHJQQB6VF9f7/xWpVJt3bp169atLru5qYz0tiknJ6fHW8N63L+3eXNycnJycno8trd5+5uPEOLIkSNPP/10n8+GcxNfpVLt3r179+7dPe7z5ZdfehLZTXw3J+7mvAD4AaUlAAAQ4qS74ViyBAC9cVTei4qK5M0EQDCitAQAAEIcPbwBwD2eGw7gbtBrCQAAhDKbzdbZ2Snk6+Hd0NBQW1srlbcAIFjodDpFNzqdTu68AAQiVi0BAIBQJtV0oqKioqLk+djT3t5uNpsTExNlmR0AvOPSfwoA3KC0BAAAQplUWpJryZIQQqvVWiyWmJgYuRIAAAAYUJSWAABAKJO9h3dsbKyMhS0AAICBRmkJ+NaxY8eMRqPcWQD9MGzYsMzMTLmzAAIaPbwBAAAGFKUl4Fvr1q3r6urSaDRyJwJ4pKamJjMzk9IS4EZnZ6fNZouIiOB+NAAAgAFCaQn4joKCgmnTpsmdBeCRrVu3fvHFF3JnAQQ0aclSTEyMQqGQOxcAwUehUNjtdrmz6JubPKX/+t3lWQTLdQAglwi5EwAAABgonZ2dgrvhAPRFr9f3OO7/ekpcXJwXR7nJ0yen4HkQ7/IHEOwoLQEAgJCVkpIydOjQhIQEuRMBENDq6upcRsrLyxUKhfOCR+ltUVFRXFzc6dOnS0pK4uLiysrKHJuOHTum1WozMjKuXbvmOGr58uWjRo1SqVRZWVnHjx+XBjs6OlasWKHT6fR6/a5du0aOHCmNazQak8mk+IYnmXfPUwjR1ta2ZMkStVo9bty4iooKl0P6dTd9j/GlkeLi4vT0dKVSKV0E7/IHEBq4IQ4AAIQshULBkiUMHJvNdvv27ebmZrkTQT+0trZ6sgZn5syZdrvduT4ivbVarTt37pw1a9aSJUt27tyZl5dnNpulTU1NTdXV1QcPHnz++ef3798vHZWfn19cXGyxWE6cODFnzpzW1lYhxLp168xmc0VFhVqtPnz4sOMxMkajsb+3nnXPUwixevVqvV5vNBpv3769fft2l0PuPr40UltbW1lZeezYMekieJc/gNDA33zgW5MmTcrPz6fXUigJ7c83Uq+l3bt3y50I/Co1NfXHP/7x73//e7kTAYLA+vXrt27d6v7xr8OGDTt69OiYMWO8iB8dHT1o0KDo6GhvE4QMurq6EhMTr1+/LoRIS0urra113pqammowGBxvXT5ION72+KK5uTkxMdFkMqWmpt6+fVsIcenSpZUrV54+fbqzs3P8+PEnT56Udtbr9efPn+/x0THefXRxOUqj0VRVVUnxm5qakpOTfd5ryXmkt9cB4sKFC1lZWdXV1XInAoQyVi0BweSvf/3rD37wAzGQd/63tLTk5OQ4FmzDxZQpUz788MP4+Hi5EwEQHDo6Oux2u1KpjIyMlDsXDIi33npr7ty5cmeBfjh37tzixYul144qkm8LIlFR//iSNX/+/AULFpSUlGg0mps3bzo6OnV1dXkSx2w2K5XKu0xGWk8kC5/kDyAo0GsJCCYPP/zwQP8Q9Lvf/e6nP/2pDwOmpqb6MFp/+fxy/eu//uvGjRt9GxNACGtqaqqpqblz547ciQAYcKdOnTKbzUePHs3KypJGDAZDRkZGfHx8ZWXlG2+84dhz3rx5hYWFQojGxsaysrKFCxc6NkVHR5eVlVkslqNHjz7++OPeZbJgwYItW7ZYLJba2trNmze7bO1Xr6X+8kn+AIIOpSUA3zIajQcPHnzqqae6b5KesuSFGzduuN/B68iy+OUvf1laWur+3goAcLBarUIIliwBAU6r1bqMOBpRO79w/On8wiE1NfWBBx4oKip67bXXpJFt27YtW7ZMo9GsWbNm0aJFjqMKCwtbWlq0Wu3YsWMPHDhQUFDgCLJ37968vLykpKQdO3aUlJT0mXn3PIUQBQUFNTU1SUlJ2dnZS5cudcnWarV6/ttbj/G7XxDHpv7mDyA0UFoCAkVZWZlSqVQoFAkJCbm5ucePH//e977n+eGvvvrqxIkT4+Pjhw4d+vzzzzc1NXmRw+7du/Py8hyruCV79+5NS0sbNGiQWq2ePn36l19+6diUlpamUCiGDx8uvX3ggQcUCsXQoUOltw8++KDzZ5HuzwpxE1na2WQyzZ07V6lUOj98RHh2rS5dutTb00m++uqruXPnpqWlpaWl5ebmXrx40cN5hRDR0dG5ubm0NwLgIem2F0pLQICrr693GbF/l/OI47X47vro8ePHV1dXnz59Oi0tTRrJycm5evXqnTt3ysvLR48e7ThKpVJt3bq1oaGhoaFh165djhvlpEPMZrPJZCotLR0xYkSfmXfPU4q/e/duk8n0l7/8RVrz7pznl19+ee7cOQ+vTI/xe7ssXuQPIDRQWgICRV5e3t69e+12e3Nz87Zt2wwGQ0NDg+eH/+AHPzh37tzt27f/8pe/qNXqnJwcL3I4fPiwYwm35Pjx43/84x8PHz58586durq6devWPfPMM//zP/8jbf3ss89mzJjx2WefSW9PnTo1Y8aMU6dOSW+rqqpcPnM4f6xxH1nac9WqVb/+9a87OzulX8Acx3pyrUaMGNHjL3JfffXV4sWLi4qKDAaDwWB47bXXlixZ4qguuZ9XMn369IMHD3p8UQGENZvNJigtAaHOZeUOAIQbSktAoBg0aFBsbOzt27cjIiJSUlIWLlzYr9LS9OnTpRcajebll1921Hf65a9//evYsWOdR15++eU333xz3LhxsbGxarX6Rz/60fbt29euXSttve+++7Zt27Z06dLa2lqDwbB06dJt27YNGzbMk7ncR5ZMmzZt6tSpCoUiJyfHYrE4xu/mWq1evfq3v/3t/fff7ziFl156afXq1Z7MK/n+97//t7/9zcPpAIQzm80mFawpLQGhrftPaAAQVnhCHBAoPv/88+XLl586deqee+753ve+FxsbW1xc7LxA2o3Ozs4tW7b88Y9/vH79+uDBg3/4wx969+Gmubk5ISHBeeTs2bOOKozD4MGDHa/vvffeP/zhD8uWLbPb7du3b3fcDdenPiMLIXprKH431+r48eO7du1yHsnMzHRZmuS+kXliYuKtW7c8mQuAXDo7O+vr61Uq1ZAhQ2RMQ7obLiIigrUMALym0+m6/4Sm1Wq738QHAHKhtAQEijFjxhw7dsx5ZNasWUeOHPHk2H/7t39LSUk5depUYmKixWK5du3aQw895EUOCQkJLS0tycnJjpHY2Nivvvrqvvvu6/PY3hob9cbzyN3dzbUSPT02rl+VuJaWlsTERM/3B+B/d+7c6ezsdOkc53/08AZw9yghAQh83BAHBK7y8nIP93z33XdXrlyZnJwcFRUVGxvr9a/03//+98+fP+88MmvWrD/96U9uDrl+/fpTTz1VUlKyY8eOX/ziF9evX3c/heN5cH1G7hfPr9U///M/f/75584jZ86ceeyxxzyfq6Ki4uGHH+5HcgD8LiEhQa/Xy14FprQEAADCAaUlIFCkpKQcOHCgublZenv69Ono6GgPjx0xYsQf/vCHtrY2o9G4e/fuhQsXepfDnDlzPvroI+eR/Pz87du3/+53v7t69arFYjEajR9++OGsWbOkrdeuXfvlL3/5X//1X6mpqWlpaSUlJb/85S+vXbvmHCE6Olp6yNqNGzeKi4sfeeQRTyK7dzfXavPmzevXrz99+nRXV1dXV9fp06dfeumlzZs3e3i4EOKjjz6aPXu25/sD8L+IiAi1Wu1yj63/UVoCAADhgNISECjuv//+1NTUX/3qV6mpqRMmTFiwYMHevXudd1B8w+W1EOKtt946evSoVqt9+OGHz58/v2/fPuHVY0oWL1783nvvOTeuTk9P/+yzz6qqqiZOnKhWqx955BHnXkWTJ0/+4IMPJk+eLL2dNGnSBx984CgeSaSHrEVEREyaNKmqqurw4cOeRHZ50orL27u5Vg899NA777yzadOmpKSkpKSkzZs379mzZ9SoUZ7MK4SwWCylpaWLFy/u77UFEIYoLQEAgHBAryUgUJw9e1YIsWfPnt52cNMPaNSoUcePH/dwZzeGDBmSk5Ozbdu2Z5991jGYlpbm0vfa4caNG85vq6uru++Tk5NjNpt7PNxNZJf8Xd7ezbUSQjz00EMHDx70Yl4hxB/+8IecnJykpCQ38QFAQmkJAACEA1YtAfiOF1988e2335Y7i8BVWlq6bt06ubMAEBwoLQHhxlePgxzox0q6id/fB7P0Nz6AkERpCcB3JCQkuHS5hrNPP/00ISFB7iwABAdKS0Cw0Ov1Ponj3bJxT+LExcX5JHJv8T3Z5JP4Lnx7XgDkQmkJAABgQFBaAoJFXV2d81tp5c6xY8e0Wm1GRobjESXSeEtLy7Jly+Li4latWuU4pLy8vPt6H4vFsmbNmlGjRo0cOfKFF15wtAjobxyNRmMymVzaRzriSM/JlQ4cOnSo+zPtMX5bW9uSJUvUavW4ceMqKipcDsnMzMzMzHQf1n18aaS4uDg9PV2pVEoPeHFzXgCCDr2WAAAABgSlpWDx4Ycfnj9/3osD7Xb76dOnnR9/gcB3+fLlrq4u9/vY7XaFQtHU1FRdXX3w4MHnn39+//79jvHc3NxFixYVFRWdO3fOccjMmTOlrc5x1q9fn56efvHiRSHE66+/vn79+ldffdWLOEajUaFQdF8KdObMmeeff37mzJlCiOzs7IyMjJKSEven1mP81atX6/V6o9F4+/bt7du3d78a7mP2GV8aqa2traysPHbsWF5enlRl6+28AAQdSksAAAADgtJSUHj00UelRR9esNlsH3744f/+7//6NiUMqNu3bzuqgWlpabW1tdJrqRqSmppqMBikkSeeeCImJiY7O3vZsmVmcdkwAAAgAElEQVTOEQ4ePKhWq4UQjz32mPu5du/efeHCBen1okWLxowZI5WW+hunN5MnT9br9fv378/NzS0tLX3wwQcffvhhL+K88847VVVVSqUyOTn5qaeecmkr6Vz5uhv5+flCiJycHKqxQOihtAQAAEJEe3t7c3NzXFxcIDTvsNls0k/xlJYC3J/+9Cevj42Ojv7tb387d+5cH+aDgXbu3LnFixdLrx1VJPdrZ6KivvOlSaoHechN2H7FcWY2m5VKpfR648aN8+bNmzVr1iuvvFJaWupdQJfgdx/E66kd5wUguFBaAr7V0dHxySefOH68AgLcuXPnTCaT3FkAAcRkMrW1tUVGRgZCaUlasqRQKCIiaG0JBKVTp0498cQTR48ezcrK8i7CokWLtm/fLrVS2rZt289+9jOvk4mOji4rK3vyySc/+eST/Pz8EydOSOOjR4+eMmXK7NmzJ02aNGLECO+CL1iwYMuWLS+//HJjY6PzuiqJ1Gjp7NmzXifvRm/nBSC4UFoCvlVfX/+f//mf/FqCYNHe3n7ffffJnQUQQO7cuSOEGDx4sNyJCMHdcEBQ0Wq13QdTU1MfeOCBoUOHvv/++9KIdNOco5GQ84okx6D0Qtr0u9/97sUXX5Raa//Lv/zLhg0bvIsjhNi7d29eXp5SqZw+fbpLQ6W1a9eOGTPm0qVLnpxpj/ELCgp+9atfJSUlPfDAA2+99dbrr7/uvIzLarV6XiLvMb7jfB1tmBzx3ZwXgCBCaQn41rBhw/Lz86dNmyZ3IoBHtm7d+sUXX8idBRAoLBaL2WxWKBQqlUruXISgtAQElfr6+u6D48ePr66udh5xc3dbj5uUSmVBQUFBQYEnO7vflJOT09utakeOHHn66af7fDacm/gqlWr37t27d+/ucZ8vv/zSk8hu4jsPuuzg5rwABBFKSwAAIBS0tbUJIQYNGhQgN6BFRkbGx8dHR0fLnQiAfnNZWRPIHKuEioqK5M0EQDijtAQAAEKBVFoKkCVLQohBgwYNGjRI7iwAeCPwK0oOQZQqgBAWED/rAQAA3A2bzdbe3i4CptESAMhFp9MputHpdHLnBSCUsWoJCCZuFma79Hr0eXwACGTt7e12uz0qKiomJkbuXABATj32jQKAAcWqJcAdvV7vMuLDB1pLTzLqFy+aPvoqvotAeLA3ADi0trYKIdRqtdyJAAAAhB1KS4A7dXV1zm81Go3JZHIsLXaMS2/Ly8uFEOXl5QqFQnpIhzR+7NgxrVabkZFx7do1af/GxsaJEyeqVCqdTvfss896UmOSwjpPKoRoa2tbsmSJWq0eN25cRUWFyyGZmZmZmZkenmmP8aWR4uLi9PR0pVJZVlbm/joAgCzsdrvUaInSEgAAgP9RWgL6wWg0CiHs33CMnzlzZvLkyTNnzhRCZGdnZ2RkHDlyRHyzCKipqam6unr16tXPP/+8tP+qVasKCwvNZvPly5cfe+yxVatW9Tn1zJkzuy8pWr16tV6vNxqNH3/88aFDh1y2uiTpRXxppLa2trKycu/evXl5ee6vAwDI4s6dOzabLSoqKjY2Vu5cAAAAwg69loAepKWl1dbWSq+lVTmpqakGg6G3/SdPnqzX6/fv35+bm1taWvrggw8+/PDDjq1PPPFETExMdnb2smXLpJFDhw7t3r3bsUNKSsqbb77pRZ7vvPNOVVWVUqlMTk5+6qmn1q1b57z13LlzXsTsLj8/XwiRk5NjsVh8EhA+dOLEiaysLLmzgF8ZjUY3/zkKTyaTSQTSs+EAIEDI2EbTJ21AAQQLSktADxxf29z/e2w2m5VKpfR648aN8+bNmzVr1iuvvFJaWtrj/lFR//gbN2HChI8++sinKQuz2ezbgP2a2nEd4GejR4/+9a9/LXcW8KsTJ05IN39BYrfbpdISd8MB8Jper79x48ZdBrlz547nD6mMi4uTmsQNXBzRz8pOv+btk91u96Rtgq+uAwCZ2QF8IzMz89ixY84j3f+OREdH79+/32w2l5eXT5061XnTz3/+86ysrJ///OcuEQ4dOtTZ2fnee+/Nnz9fGnzttde2b99eXV1ttVr7laFLPk8//fS6devMZrPBYFixYoXL1okTJ06cOPFu4ruMOL92cx3gN2+++eaiRYvkzgL+NmjQoGnTpsmdRQBpa2v7+9//fvnyZbkTQSB68cUXk5KSBi5+VFRUWVnZwMXHQDh79uxDDz3kMujyEai9vf25557TarX33HPPzp07R4wY4dhNCNHc3Lx06VK1Wv2b3/xGGm9oaMjIyBBCaLXaZ555pq2tzRHq2WefHTly5ODBgx9//PFPP/1UGkxKSurxG5mbOD3qLY7dbpeaM4huHQxee+01tVr92Wef7dixQ61W79+/v895Pf9IaTKZFi9erFKpfvjDH/7tb39znn1Ar4N7X331VXp6+t1EANAnei0B7mi1WpcRqeVQUlLSjh07SkpKnDetXbv2xIkTL730ksshqampDzzwQFFR0WuvvSaNPPfcc42NjVOnTtVoNNOnT9+0aVOfmTgaZjt3zi4oKKipqUlKSsrOzl66dKn4Zu2xRKpbeXimPcZ3jLj86f46AIA/BeaSpa6urkuXLl25ckXuRAB4Q/rprqKi4sqVKyqVSuoyKb5ZBJSbmzt16lSDwTBjxgxp3E0bzfz8/IsXL7a0tKxZs2bOnDnSYG9tK/vbjtNN+8vubTSlt1ardefOnbNmzaqoqNi5c6fUSdP9vN2D98ZNG9ABvQ4AZCfbzbdAAJo0aVJ+fv60adO8O7y4uPjKlStFRUXOgzLe4o6Qt3Xr1i+++MK5bxfCQWxs7COPPHLs2DG5EwkIdrv966+/tlqtaWlpAXXfhNlsvnbtWmRk5PDhw+XOJaytX79+69atjrqAz0VHR7///vtz584doPgYCOfOnVu8eHFlZaX4bntNidReU6/Xnz9/XqPRdD9coVC0tra6lLOHDBni/H+zlJSUhoYGIcSlS5dWrlx5+vTpzs7O8ePHnzx50vGxsMePiL3FccP9R02XrY63Li+8mLdHGo2mqqpKum5NTU3JycnSLH64Dm5cuHAhKyururra6wgA+sSqJcA3FArFc8899+///u8ug+K7K4kAAD7U3t5utVojIyMD7dlw0dHRw4cPv/fee+VOBIA7BoPBsV5GeiE13Ozq6nJzVPdlkhMmTHC+McRRB5k/f/6jjz761VdftbS0vPfee70FdHTM7C2Oh7zuvHmX8/aZjJ+vAwD/o7QE+EaPS5F7HAQA+Irj2XCBVsRXKBSRkZGOpzcACC7z5s0rLCwUQjQ2NpaVlS1cuND9/tnZ2Tt27KipqbHZbM7jBoMhIyMjPj6+srLyjTfecN4UHR1dVlZmsViOHj36+OOPu4/jRo9x+sv9vJmZmZmZmZ7EWbBgwZYtWywWS21t7ebNmx3jfrgOAORFaQkIFDqdTtGNTqeTOy8ACFyB2WgJQNBxaa9ZWFjY0tKi1WrHjh174MCBgoICady5MaVzRbu3Nprbtm1btmyZRqNZs2bNokWLRF9tK71ox9lb+8vubTRdVtN7kr/E8/advbUB9cN1ACAvusAA37rLXkuAn9FrKTzRa8mhvb29pqYmIiJi+PDhgbZqCQGCXkvozrnXEsIBvZYAP2CdNgAACEoxMTH33HOP1WqlrgQAACAjSksAACAoRURExMXFyZ0FAABAuKPXEgAAAAAEKNpxAgh8rFoCAAAAgABVX18vdwoA0AdWLQG+NND9PgYivssjTgaUryZyE8efp+O1wM8QAAAAADxEaQlwR6/X92v/u3/kovu+If2Kf+fOHU926zNmj3G862/iq0dSuonTfZOH10Hin74tnl8H+sgAQcpoNBqNRqvVKnciAAAAA47SEuBOXV2d47W0HKaoqCguLu706dMlJSVxcXFlZWXS1vLy8u7rZaSR4uLi9PR0pVLp2Lk3Go3GZDI57qJ33tQ9vpt8GhsbJ06cqFKpdDrds88+60lt5fr165MnT05KSlq6dGlbW5s02FscN3n2pl/Xp6OjY8WKFTqdTq/X79q1a+TIke7jtLW1LVmyRK1Wjxs3rqKiwjHeW/69zdvbeZWVlSmVSoVCER8f/+ijjzrnI4TIzMzMzMz05CL09zp4cZ0BBIjm5uampiZKSwAAIBxQWgI8Ja00sVqtO3funDVrVkVFxc6dO/Py8qStM2fO7L4URRqpra2trKzcu3evY+feGI1G6SiJ86bu8d3ks2rVqsLCQrPZfPny5ccee2zVqlV9nt2uXbv27dt3+fJltVr9wgsvSIO9xXGTZ2/6dX3WrVtnNpsrKiquXLmiUqmk6dzEWb16tV6vNxqNH3/88aFDhxzjveXf27y9ndeiRYuefPJJi8VSV1f3m9/8pqWlxeUsPF+F1K/r4MV1BhAI7Ha7zWYTQkRGRsqdCwAAwIBT8HUFcJg0aVJ+fv60adPS0tJqa2udN6WmphoMBoXiH39lur+QuLx1Gem+tTv3+/Q2ncuLIUOGOJdjUlJSGhoa3E9aU1OTlpYmhDAajaNHj5b2dxPHk3Px5Ox6vD56vf78+fMajcbDOBqNpqqqStq/qakpOTlZ2uph/n3+b3To0KGf/OQnFoslOTk5JSVl9+7dEydO7O+5u8m/v/k4bN269Ysvvti9e/fdJIOgExsb+8gjjxw7dkzuRGRjt9sDfB2f1Wq9cuWKEOLBBx8M8FRD3vr167du3er8b4FvRUdHv//++3Pnzh2g+BgI586dW7x4cWVlpdyJ3C3pPy/++Tbn3Qe/AHHhwoWsrKzq6mq5EwFCGauWgB4YDAbHOhHphcFg8H8aZrPZuwMnTJhgd+K+ruTCZrNFRET0K47Xefamq6vL62Odk7mb6+Acavbs2Waz2WQy/fnPf/7Zz372xBNPeJ3e3fD5dQaC1PXr12tra+/mPxQDTVqyxK2sQBDpb3vNHvmqvaOv2mX6EG0iAbhHaQkILNHR0WVlZRaL5ejRo48//rh3QbKzs3fs2FFTUyN9vfHE9u3ba2pqmpubN2zYMH/+/D7j+CTP3sybN6+wsFAI0djYWFZWtnDhQvf7L1iwYMuWLRaLpba2dvPmzY5xL65Dj+eVkpJy9uzZiIiIoUOHjh492tGLStKvXkv9NaDXGQhGHR0dZrO5vb09kO814244IOg4t9cUvbd9lErGLS0ty5Yti4uLc9xr76bN5fLly0eNGqVSqbKyso4fPy4N9tZO0VftMqWw5eXl4ps+j0OHDnUcQptIAD5HaQlwR6vVOl5L/0A6/pns8Z9Y8d2fqZ0PcTm8N1KrnaSkpB07dpSUlLiJ7yaf5557rrGxcerUqRqNZvr06Zs2bXIzo3TgkiVLcnNzhw8fbjKZHPu7idNbnm5m8fz6FBYWtrS0aLXasWPHHjhwoKCgwH2cgoKCmpqapKSk7OzspUuXOuL0lr+b/116PK/777////7v/0aOHKlQKPLy8vbu3et8alar1fOf8vr7/5P+Xmcg5A0aNGjYsGE6nS6Qv7RI3bsdK0ABBJ3e2j5K/+Ln5uZOnTrVYDDMmDFDGnfT5jI/P//ixYstLS1r1qyZM2eONNhbO0Vftcs8c+bM5MmTZ86cKYTIzs7OyMg4cuSI4xDaRALwuSC+aRbwOUevJbkTATxCr6XwRK+lwGcymW7cuDFo0CDnZQKQxfr16zdt2vTDH/5wgOL/+c9/Hj58eGJi4gDFx0Boa2trb2+/evWqEKK39ppu2j4qFIrW1la1Wu082Ft7x0uXLq1cufL06dOdnZ3jx48/efKk+3aKvmqXKYTIzc1duHBhbm7uvn37SktL9+zZ4/6yuOerNpGyoNcS4AdRcicAAAAQUqQb4li1FAhGjRr1/e9/3/3q3bsxY8aMn/3sZ//0T/80QPExEC5evPj6669Lrx3NNF0KIu67ubnUlYQQEyZM+Oijj7rvOX/+/AULFpSUlGg0mps3b/bW0clsNiuVSjdxPOHcLlMIsXHjxnnz5s2aNeuVV14pLS31LuZdcpwXgJBHaQkAAMCXpBvi6LUUCBISEjQazcD1qlMoFD/4wQ/ohRdcEhISoqL6+BIktX3cuHFjY2PjqVOnSktL3377bTf7S+0dZ8yYkZqa6lzfMRgMGRkZ8fHxlZWV7777rvMhUjvFJ5988pNPPsnPzz9x4oSbOG5s37795z//uUqlcm6XKYQYPXr0lClTZs+ePWnSpBEjRjgfIjVaOnv2rCfx+6vH8wIQ8vg9DfA3qUWIC51OF+zzynVeABBoWLUEBB3n9pqi97aPzg0TPWlzuW3btmXLlmk0mjVr1ixatEj01U7RV+0yJWvXrj1x4sRLL73kciBtIgH4HKuWAH+rr68PyXnlOi8ACDSUloCg4/IxRqVSbd26devWrS679VaRiYyMXLt27dq1a13Gc3JycnJyejw8JyfHbDZ7GKdHjmi9rT86cuTI008/3b3p25dffulJfJdZeht02aHH8wIQ8igtAd+qra1dunSpSqWSOxHAI83Nzffff7/cWQBwJZWWuCEOgIwcy4iKiorkzQRAOKC0BHxLpVL9v//3/x544AG5EwE88vnnn7e1tcmdBQBXUq8lVi0BkFGgPaYNQGijtAR8KyEhYcGCBdOmTZM7EcAjW7du/eKLL+TOAvCH9vb22NhYubPwFDfEAfAhnU7X0NDgMqjVaulFACBwUFoCAAAB7c6dOwaDISYm5t5775U7F49QWgLgQ5SQAAQ+SkvAdxw5cqSqqkruLACPfPbZZ30+PhkIAS0tLUKIIFq1JN0QR68lAAAQJvhOAnzrscceq6qqqq6uljsRwFNTpkyROwVgYFksFqmnWEJCgty5eIpVSwAAIKxQWgK+tXHjRrlTAAB8x61bt4QQgwcPViqVcufiKUpLAAAgrPChBwAABCi73X779m0RhEuWBDfEAQCAsEFpCQAABKjW1lar1RoVFaVSqeTOxVNSoyWFQqFQKOTOBYCPBd1fbRmzDbprBeBuUFoCAAABqrm5WQiRkJAQRN9PIiMjtVptcnKy3IkA6Ae9Xu/Jbna7faAzEULcuXPH853j4uLcbO1Xwv2at08eTu0mf9/mA2BAUVoCAACBqK2tzWw2R0REJCYmyp1LP0RERCQkJARXzgDq6uqc33Z0dKxYsUKn0+n1+l27do0cOdJ566effpqenq5UKsvKyhyDy5cvHzVqlEqlysrKOn78uDQordwpLi522f/OnTu/+MUvkpKSxo8ff/HiRccCn8bGxokTJ6pUKp1O9+yzz/ZZW9FoNCaTSfEN503l5eUug9LboqKiuLi406dPl5SUxMXFSSm5nzczMzMzM9OTy9jW1rZkyRK1Wj1u3LiKigrnTT1en97y7+91ACA7SksAACAQOZYs0Q8bgJ+tW7fObDZXVFRcuXJFpVIZjUbnrUePHr148eLevXvz8vIcg/n5+RcvXmxpaVmzZs2cOXOkQWnlTm1tbWVlpfP+q1ev1mg0dXV1J0+e/OCDDxx7rlq1qrCw0Gw2X758+bHHHlu1apX7PKXE7N9w3jRz5kyXEemt1WrduXPnrFmzKioqdu7cKaXkft7uwXuzevVqvV5vNBo//vjjQ4cOOW/q8fr0ln9/rwMA2Sn8s6oTAAD4RGxs7COPPHLs2DG5ExlY7e3tNTU1CoXivvvui4rigbbw0sGDB19//fWB+/sSHR39/vvvz507d4DiYyCcO3du8eLFlZWVQoi0tLTa2lrnrampqQaDQa/Xnz9/XqPRdD9coVBYLBbpv0sKxT++TF26dGnlypWnT5/u7OwcP378yZMnHV+yHPs4v9ZqtRcuXJDiNzY2arVaaXzIkCHOZayUlJSGhgb3p+Mcv8+tjrcuL7yYt0cajaaqqko6r6ampuTk5H5dHwdf5SO5cOFCVlZWdXW11xEA9ImfAQEAQMCRlizFxcVRVwIwcAwGg2O9jPTCYDAIIbq6utwc1f2/S/Pnz3/00Ue/+uqrlpaW9957r895nW/+ci6sTJgwwe6kv/UUs9ncr/19NW+fyXh4fRyHDEQ+AAYUpSUAABBYzGZzW1ubECIpKUnuXACEo3nz5hUWFgohGhsby8rKFi5c6H5/g8GQkZERHx9fWVn5xhtv9Bk/Ly+vqKjIZrOZTKYdO3Y4xrOzs3fs2FFTU2Oz2TxMNTo6uqyszGKxHD169PHHH/fwKBfu5/W819KCBQu2bNlisVhqa2s3b97sGHdzfXrM34vrAEBelJYAAEBgkZYsqVQqpVIpdy4AwoJWq3V+W1hY2NLSotVqx44de+DAgYKCAmlcWm3U/c9t27YtW7ZMo9GsWbNm0aJFbvaU/ty0aVNdXV1ycvKjjz46e/Zsx7zPPfdcY2Pj1KlTNRrN9OnTN23a1GfmUgunpKSkHTt2lJSUOMYdjbGdXwinBVPOK6fcz2u1Wj1solJQUFBTU5OUlJSdnb106dI+r09v+XtxHQDIi15LAAAEk5DvtdTV1XX16lW73Z6enh4bGyt3Oghu9FpCd869lmRnsVgOHz68fv368+fPy51LyKLXEuAHrFoCAAABpKWlxW63x8bGUlcCEMJefPFFhUKhVqv/+Mc/fvrpp3KnAwB3hdISAAAIFDab7datWyKYuyxZrVaLxUJ/EADubdiwwW63d3Z2lpWV6XQ6udMBgLtCaQkAAASKW7du2Ww2pVKpUqnkzsVL9fX1V69ebW1tlTsRACFCp9MpuqEaBSCg8EBfAAAQEOx2e0tLixAiMTFR7lzuikKhiIjg1zsAvlFfXy93CgDQB0pLAAAgIHR0dFit1qioqPj4eLlz8V5qaqrcKQAAAPgVpSUAABAQYmNj77vvvq6uLudHYgMAACDAUVoCAACBIioqKiqKDycAAADBhEYAAAAAAAAA8BKlJQAAAADom/R0Nrmz+Ad/JhM4Zw0gMFFaAgAAABDW9Hq9J7vZ7faBzkQIcefOHU92808y/Z0rLi5uQDMBEJgoLQEAAAAIa3V1dc5vOzo6VqxYodPp9Hr9rl27Ro4c6bz1008/TU9PVyqVZWVljsHly5ePGjVKpVJlZWUdP35cGpQWFhUXF7vsf+fOnV/84hdJSUnjx4+/ePGiY/1RY2PjxIkTVSqVTqd79tlnPakxXb9+ffLkyUlJSUuXLm1ra3Oet7y8XAhRXl6uUCiGDh3qOCQzMzMzM9PDKyMd7rJqqbfz0mg0JpNJ8Q0PpwAQAuiUCQAAgJBlNBo/+eSTAQput9v/8pe/qNXqAYqPgXDx4sWuri73+6xbt85sNldUVKjV6sOHDxuNRuetR48evXjx4kcffZSXl2c2m6XB/Pz84uJii8Vy4sSJOXPmtLa2CiHsdrtCoaitra2srDx27Jhj/9WrV2s0mrq6uq6urh07dohvlgWtWrWqsLDwkUce6ezs/Pjjj1etWvXmm2+6T3XXrl379u0bPHjwyy+//MILL0j7nzlz5vnnn585c6YQIjs7OyMjo6SkxHFIv5Y7zZw5UzoL58HezstoNCoUCn8upwIQIPibDwBAMImNjX3kkUeOHTsmdyJAEDhz5sxLL700cPGPHTv28MMPp6SkDNwU8Lnbt283NDR8/fXXQoi0tLTa2lrnrampqQaDQa/Xnz9/XqPRdD9coVBYLBbpWZaOMsqlS5dWrlx5+vTpzs7O8ePHnzx50vEly7nU4nit1WovXLggxW9sbNRqtdL4kCFDnMtYKSkpDQ0Nbs5FoVDU1NSkpaUJIYxG4+jRox375+bmLly4MDc3d9++faWlpXv27PHqan07kcvXxh7Pq8c9ZXfhwoWsrKzq6mq5EwFCGauWAACAPMxmc21trUajiY+PlzsX3zCbzUajMTo6esiQIXLnAiGEmDJlyscffzxw8aOjo19++eW5c+cO3BTwuXPnzi1evFh6bTAYpBcuBRH3y5qkupKz+fPnL1iwoKSkRKPR3Lx5s8/OTc6LgJznnTBhwkcffeTBSfTAZrNFRHzb7WTjxo3z5s2bNWvWK6+8Ulpa6l3Mu2Q2m5VKpSxTA/Azei0BAAB53Lp1y2KxmEwmuRPxma6urtbWVke7EwBBat68eYWFhUKIxsbGsrKyhQsXut/fYDBkZGTEx8dXVla+8cYbfcbPy8srKiqy2Wwmk0m6IU6SnZ29Y8eOmpoam83mYarbt2+vqalpbm7esGHD/PnzHeOjR4+eMmXK7NmzJ02aNGLECOdD+tVrqb+io6PLysosFsvRo0cff/zxAZoFQKChtAQAAOSRnJycnJwcSgt8pG+DNK8Fgo5Wq3V+W1hY2NLSotVqx44de+DAgYKCAmlc+tvd/c9t27YtW7ZMo9GsWbNm0aJFbvaU/ty0aVNdXV1ycvKjjz46e/Zsx7zPPfdcY2Pj1KlTNRrN9OnTN23a5CZnKdSSJUtyc3OHDx9uMplc9l+7du2JEye63xNqtVo9v2fN0ZDbuTN3b+clhNi7d29eXl5SUtKOHTucGzwBCG0BdyssAABwg15Lgay1tbWuri42NjY9PV3uXOAP0dHR77//PjfEBRfphrjKykq5ExFCCIvFcvjw4fXr158/f97nwYuLi69cuVJUVOTzyMGFXkuAH9BrCQAAwDekX+yc250AQI9efPHFjRs3KpXKmTNnfvrppz6P71hGRGkJgB/w0QcAAMA3uCEOgIc2bNhgt9s7OzvLysp0Op3P49u/4fPIANAdpSUAAADfkL7FUVoC4EM6nU7RzUBUowDAa9wQBwAA4BvcEAfA5+rr6+VOAQD6QGkJAADAN7ghDgh8VVVVV65ciY+PlzsR+A83BgIDjdISAACAb7BqCQh8aWlp99xzT2lpqdyJwE+uXr26fPlyubMAQhylJQAA4A92u726unrw4MEajSZUiy/0WgICX2xs7ODBgydMmCB3IvATlUoVGRkpdxZAiAvND3YAACDQtLS0dHZ2tra2hnDlhRviAABAGGLVEtWznC4AACAASURBVAAAGHBdXV1Go1EIMWTIkBCuvHBDHBAUDAbD/Pnz5c4CftLa2ip3CkDoo7QEAAAGXGNjo81mGzRoUGi3zmXVEhD47rvvvoKCArmzgF8tXLhQ7hSAEEdpCQAADCyTyWQymRQKhU6nkzuXgUWvJSDwpaSkPPXUU3JnAQAhhQXbAABgANlstsbGRiFEUlKSUqmUO52BxQ1xAAAgDPHRBwAADKCmpqauri6lUqnRaOTOZcBxQxwAAAhDlJYAAMBA6ejouHXrlhAiJSUlHAou3BAHAADCEKUlAAAwIOx2e319vd1uj4uLGzx4sNzp+AM3xAEAgDDERx8AADAgmpqazGZzZGRkSkqK3Ln4CTfEAQCAMERpCQAA+F57e3tzc7MQQqvVRkZGyp2On7BqCQAAhKEouRMAAAChxm63NzQ0CCHUarVarZY7Hf9JTU0VQoRPKQ0AAEBQWgIAAD5nNBrNZnNERET43AonCZOWUgAAAM5YsA0AAHypo6PDcStcVBQ/YgEAAIQ4SksAAMBnbDZbXV2d9FS4uLg4udMBAADAgKO0BAAAfObmzZsWiyUqKkqr1cqdCwAAAPyB0hIAAPANk8l069YtIcQ999zDU9IAAADCBB/7AACAb7S3twshEhMTY2Nj5c4FAAAAfkJzTQAA4BspKSmDBw/mKWkAAABhhdISAADwGZVKJXcKAAAA8CtKSwAAAD5gs9k6OjoUCgX3AwIAgLBCryUAAAAfMJvNBoOhrq5O7kQAAAD8ilVLAAAAPqBQKGJiYqKi+HAFAADCC59+AAAAfCAmJubee++VOwsAAAB/44Y4AAAAAAAAeInSEgAA6Der1Xrt2rXW1la5EwEAAIDMKC0BAIB+a2lpMZvNTU1Ndrtd7lwAAAAgJ3otAQCAfhsyZIgQQq1WKxQKuXMBAACAnCgtAQAAb0jVJQAAAIQ5bogDAAAAAACAlygtAQAAAAAAwEuUlgAAAAAAAOAlei0BAAD4gMlkMhqNgwcPTk5OljsXAAAA/2HVEgAA6IPNZpM7hSDQ1dXV2dlpsVjkTgQAAMCvKC0BAAB3Wltbr1692tHRIXciAAAACESUlgAAQK86Ojrq6+utVmtra6vcuQAAACAQUVoCAAA9M5vNtbW1drtdrVanpKTInU5wUCgUcqcAAADgV5SWAABAD6xWa21trdVqjYmJ0el0cqcDAACAAEVpCQAAuLLZbAaDwWKxREdHp6amRkTwgQEAAAA945MiAAD4Dqmu1NnZGRkZmZaWFhUVJXdGAAAACFyUlgAAwLfsdntdXV1HR0dERERaWlp0dLTcGQUNu90udwoAAAAyoLQEAAC+dfPmzba2NoVCcc8998TExMidDgAAAAIdpSUAAPAPRqOxpaVFCJGSkqJSqeROBwAAAEGA0hIAABBCiObm5qamJiFEcnJyQkKC3OkAAAAgONCYEwAAiObm5ps3bwohUlJSEhMT5U4HAAAAQYNVSwAAhLtbt25JdaUhQ4ZQV7pLCoVC7hQAAAD8itISAABhrbW1tbGxUQiRmJio0WjkTgcAAABBhhviAAAIX62trXV1dUKI+Pj4lJQUudMBAABA8KG0BABAmLp9+3Z9fb0QIiEhQavVyp0OAAAAghI3xAEAEKYsFosQIj4+nrqST9jtdrlTAAAAkAGrlgAACFNDhgyJiYlRq9VyJwIAAIAgxqolAADCF3UlH+LZcAAAIDxRWgIAAPAZbosDAADhhhviAAAAfCA+Pn7w4MEREfxuBwAAwgulJQAAAB+IjIyMjIyUOwsAAAB/44c1AABCnN1u7+zslDsLAAAAhCZKSwAAhDK73X7jxo2ampqOjg65cwEAAEAIorQEAECIs9vtdrvdarXKnQgAAABCEL2WAAAIZQqFQq/XWyyWmJgYuXMBAABACGLVEgAAIS4iIoK6EgAAAAYIpSUAAAAAAAB4idISAAAAAAAAvESvJQAAAB/o6upqa2uLjIxUq9Vy5wIAAOA/rFoCACAU2Gy2+vr6rq4uuRMJX2azuaGhoampSe5EAAAA/IpVSwAABD2z2Xzjxg2z2WyxWNLT0+VOJ0xFRkYOHjw4KooPVwAAILzw6QcAgOBmMpnq6+ttNptSqdTpdHKnE75iYmLS0tLkzgIAAMDfKC0BABDEbt682dzcLIQYPHiwXq+PiOBWdwAAAPgVpSUAAIKS1FzJZDIJIRISElJSUhQKhdxJAQAAIOxQWgIAIPg4mispFIqUlJSEhAS5MwIAAECYorQEAECQsVqt169ft9vt0dHRer0+JiZG7owAAAAQvigtAQAQNOx2u91uN5vNdrt98ODB99xzT2RkpNxJAQAAIKxRWgIAIDh0dXXV1dVJr5OSkoYMGUJzJQAAAMiO0hIAAEGgra2tvr7earUKIZRKZXJystwZAQAAAEJQWgIAIMDZ7fb6+vrW1lYhRGxsrEKh4CY4AAAABA5KSwAABC7Hk+CEEBqNRqPRyJ0R3Ll27Zrdbk9PT4+K4iMWAAAIF3zuAQAgQLW2tjY0NNhstsjISJ1Op1Kp5M4Ifejq6rLZbDabTe5EAAAA/IfSEgAAAcput9tstkGDBun1elbBBIWIiAhKSwAAINzwORUAgAAVHx8fERGhUql4ElywiIiIEELY7Xa5EwEAAPAfSksAAAQutVotdwroB6kIyKolAAAQViLkTgAAACBESKUlVi0BAICwQmkJAADAN7ghDgAAhCFKSwAAyKmjo6OpqUnuLOAb3BAHAADCEL2WAACQTVdXV01Njd1uHzRokEqlkjsd3C1p1RKlJQAAEFYoLQEAIJuoqKjExESbzRYbGyt3LvABbogDAABhiNISAABySk5OljsF+AxtvAEAQBii1xIAAIBv0GsJAACEIUpLAAAAvsENcQAAIAxRWgIAYGDZ7fZbt27JnQX8gVVLAAAgDNFrCQCAAdTe3t7Q0GA2m4UQCQkJcqeDgcWqJQAAEIYoLQEAMCCsVuvNmzdv374thIiMjJSKDght0v/KrFoCAABhhdISAAA+ZrfbW1pajEajVGKIj49PTk6OjIyUOy8MOKm0ZLVa5U4EAADAfygtAQDgSyaT6ebNmxaLRQgRExOTkpISGxsrd1LwE1YtAQCAMERpCQAA32hvb79582ZHR4cQIjo6OiUlRaVSyZ0U/Epam8aqJQAAEFYoLQEAcLcsFktjY2NbW5sQIiIiYsiQIQkJCdLDwhBWWLUEAADCEKUlAAC8Z7PZmpqabt26JT0ULDExUaPR0FYpbDn+p7fZbDRuBwAAYYLSEgAAXpJ6dUt3P6lUquTkZKVSKXdSkJNCobjvvvsiIiKoKwEAgPBBaQkAgH7r6OhobGx0tFVKTk5Wq9VyJ4WAEB0dLXcKAAAAfkVpCQCAfujq6mpoaHC0VdJoNImJibRVAgAAQNiitAQAQD9ERES0t7cLIeLj45OTk2mrBAAAgDBHaQkAgH6IiIjQ6XRKpZK2SgAAAICgtAQAQH/RVgkAAABw4PElAAAAAAAA8BKlJQAAvsNqtTY1Nd26dUvuRAAAAIAgwA1xAAB8R1tbm9FojIyMjIuLi4jgNxgAAADAHUpLAAB8R3x8fFtbG3UleMdsNptMpqioqPj4eLlzAQAA8AdKSwAAuNLr9XKngGBlNpubmpoGDRpEaQkAAIQJSksAAAA+o1QqExISlEql3IkAAAD4CaUlAEDYaWtra25u1ul00dHRcueCUKNUKrVardxZAAAA+A+lJQBAuLDb7a2trc3NzWazWQjR0tKSkpIid1IAAABAcKO0BAAIfTab7fbt283NzV1dXeL/s3enQW7ehR3Hn1PSo3ulvS/bcchBSAqx4xCTEChTGJwCISUMCZ02pcNQYDIBBkoKmZAyQCmlpOUNneEo04NyTTjSOKFDKWByYkOOEmrHib323rs6Vreesy+eRCjrlVZe7+6j4/t54ZGeffbRTxt7I/30PwRBFMVYLNbX1+d1LgAAAKDjUS0BALqZYRjZbDaXy9m2LQiCJEnxeDwej8uy7HU0AAAAoBtQLQEAulOpVMpms8Vi0b2rqmo8Ho9Go5IkeRsMAAAA6CZUSwCArmLb9srKysrKimEY7pFwOByPxzVN8zYYAAAA0JWolgAAXULX9Ww2m8/n3blvsixHo9FYLMY2cAAAAMDWoVoCAHS8YrGYzWZLpZJ71+fzxePxSCTC3DcAAABgq1EtAQA6mGVZMzMz1WrVvatpWjweD4fD3qYCHMdxHIdyEwAA9AKqJQBAB3M3ehNFMRKJxONxv9/vdSJAyOfz8/PzmqaNj497nQUAAGDLUS0BADrb0NCQoihuxwS0A/dvo2VZXgcBAADYDlRLAIDOxkgltBtFUQRBME3T6yAAAADbgSUAAABtLZvNTk1Nlctlr4MArXJHLdm27TiO11kAAAC2HNUSAKCtVatVXddzuZzXQYBWybIsiqLAwCUAANAbmBAHAGhr7uLc0WjU6yDAWZBl2TRNy7JUVfU6CwAAwNaiWgIAtDW/389qSug4iqKYpsmoJQAA0AuolgAAnnEcp1gs5nK5YDAYj8e9jgNsGjaJAwAAvYNqCQDggXK5nMvlCoWCbduCIJimSbWEbsImcQAAoHdQLQEAtk+5XM7n84VCoTaaw11HKRwOexsM2FyMWgIAAL2DagkAsOVM08zn8/l8vlqtukckSYpEIpFIRNM0b7MBW4FRSwAAoHdQLQEAtoppmoVCoVAolMtl94goisFgMBqNhkIhd3d2oCu5G8MZhuF1EAAAgC1HtQQA2GSGYbiNUqVSqR0MBALuMCV3ohDQ3aiWAABA76BaAgBsDtM03ZW5a7PeBEHQNC0cDofDYXd+ENAj3L/wjuNYlkWdCgAAuhsv9AEAm0PX9VQqJbww6y0cDodCId5UozeJoqgoimmahmHwrwAAAHQ3qiUAwOZwByi5pRLvpQFVVd1qKRAIeJ0FAABgC1EtAQDOQpPZPaIojoyMbHMeoG2xSRwAAOgRVEsAgJaUy+W5uTlVVScmJrzOAnQAVvIGAAA9gmoJANASVVUty3Icx7ZtSZK8jgO0O3fUEtUSAADoelRLAICWKIoyMTHh9/tFUfQ6C9AB3FFLTIgDAABdj2oJACA4jlMqlYrFoiiKAwMDjU5jNWKgdaqq+v1+t2ACAADoYlRLANC7DMMovcC2bUEQJEnq7+9nXBJw7lRVnZyc9DoFAADAlqNaAoDeYtt2uVx2xyjVrwKjKEooFAqFQh5mAwAAANBxqJYAoCdUq9VisVgqlSqViuM47kFRFAOBQCgUCgaDfr/f24QAAAAAOhHVEgB0LcMwisVisVisVCrufDeX3+8PBoOhUCgQCDD3DQAAAMC5oFoCgG5TrVbz+XypVKpWq7WDkiQFX8C6wgAAAAA2C9USAHSbSqWSyWQEQRBFUdM0d4CSz+fzOhcAAACALkS1BADdJhQKRaPRUCikaZosy17HAQAAANDNqJYAoMMUCoVcLheJRCKRyJonKIoyNDS0zakAAAAA9CbJ6wAAgLPj7vVWLBa9DgIAAAAAjFoCgE4TCoVqfwJocwsLC8VicWhoiH+zAACgW1EtAUBbcBynUqlUKpVyuVypVIaHh4PB4JpnBgKBQCCwzfEAbIxt25Zl6bpOtQQAALoV1RIAeMa27XK57HZJlUrFcZzal8rlcqNqCUAHSSQSiURCVVWvgwAAAGwVqiUA2FZunVQbnVRfJ4mi6I5I0jRN0zQPQwLYLH6/3+sIAAAAW4tqCQC2nK7rtdFJhmHUf0lRFO0FPp/Pq4QAAAAAsDFUSwCwJWzbzufz7uikNeskd3QSIxoAAAAAdDSqJQDYEo7jLC4u1u76fD53aFIgEGDVFQAAAABdg2oJADbItm3bthVl7V+ksixHo1FFUdzlk2RZ3uZ4AAAAALANqJYAYCNyudzCwkIoFBodHW10ztDQ0HZGAgAAAIDtJ3kdAAA6krvktmmaXgcBAAAAAC8xagkAXsSyrGq1WqlUqtVqNBoNhUJrnub3+3ft2tVoNhwAAAAA9AjeFAHodbquu0WSy7bt2pcURWlULYmiSK8EoEW5XE7X9UQiIUkMGAcAAN2G90UAeo5lWbUuqVKpnDmpTVVVv98fCAQ0TfMkIYAuk0qlTNMMhUL8VgEAAN2HaglA9zNNs1YkVavVJl2S3+/3+/3s5gZgc/l8PtM0dV2nWgIAAN2HaglANzMM4/Tp05ZlrTpe3yUFAgGmqADYUn6/v1Qq6brudRAAAIDNR7UEoJspiuKunaSqam1QEl0SgG3m7ilZrVa9DgIAALD5qJYAdLB8Pp9Op4PB4MDAwJoniKI4MTGhqipdEgAP+f1+gWoJAAB0KaolAJ1N1/XmtZH7jg4APOTz+URRtG3bMAxVVb2OAwAAsJmolgC0HcuyqtWqruu6rler1YGBgUAgsOaZwWBwdHSU8ghAmxNF0efzufsJUC0BAIAuQ7UEwGOWZVUqFbdF0nXdMAx3daSaarXaqFqSZTkUCm1LTAA4J36/362WwuGw11kAAAA2E9USgG3lOI5hGG6LVOuSzjxNVVWfz+f3+30+H3t1A+gCLLcEAAC6FdUSgC2n63qxWKzNcXMcZ9UJsiy7LVKtTmLVbQBdhmoJAAB0K6olAFtO1/Xl5eXa3VqR5Pf7/X4/27cB6AVutWSapmVZsix7HQcAAGDTUC0BOFeZTKZUKiUSiUYz1/x+fzgcrtVJLGELoAdJkqQoimma1Wo1GAx6HQcAAGDTUC0BOFeVSqVUKgWDwUbVkqqqIyMj25wKANpNIBAoFApUSwAAoMtQLQFYg2mahmHoLzBNc8eOHY1OjkajTXolAIDLrZYqlYrXQQAAADYT1RLQ6xzHcbdpc1sk94Zt26tOa7I4SCgU2vqYANDxAoGAIAhUSwAAoMtQLQG9xTAMtzyqdUmmaa55pqqqPp/P/dPv97PSNgCco9pK3qZpKgqvwQAAQJfgZQ3QK+bn5wuFguM4Z35JlmW3Qqp1SaqqiqK4/SEBoItJkuTz+XRdr1arVEsAAKBr8LIG6AaO41SrVdM0w+Fw89NEUawfjuT+yTbYALA9AoGAruuVSoWpxAAAoGtQLQHdwDCM06dPi6J4/vnnNzonmUwmk0lFURiOBABeCQQCuVyO5ZYAAEA3oVoC2pdt2+6iSO66SKFQKBKJrHmmqqqKovh8Ptu2Gy2KpKrqVoYFAKzPXW5J13WvgwAAAGwaqiWgLViWVb/AtsuyrPpzJElqVC2Jorhr165tSQoA2Di/3z85Oenz+bwOAgAAsGmoloBt5TiOaZrGGWzbXvN8RVHUF2iats1pAQCbSxRFd+ASAABA16BaArZPuVyenp5u9FW3RXKX1q5pNLsNAAAAAIB2QLUEbJpisVgqlcLhcKPhRe5W06Io+ny++uFILlbXBgAAAAB0HKol4CyYpunWQ2sqFAq5XE6W5UbVkqqq5513nizLWxYQAAAAAIBtRbUErMFdDqm2KFLtriAIu3fvbjS8KBgMSpIUCASaXJleCQAAAADQTaiW0NMaVUiO46x5viiKlmU1GrgUiUQa7eAGAAAAAEBXolpCz0mlUpVKpXmFJNRtzVa/KFKT2XAAAAAAAPQg3iejq9i2XalUHMcJhUKNzqlUKqVSqXZXluX65qh2g0W1AQAAAABYF9USuoqu6zMzM4qi7Nq1q9E5sVgsFAqxLxsAwEOpVKpYLA4MDDTa+QEAAKBTUC2hfVmWdeZaSKZpJpPJWCy25reoqurz+VRVbXLZcDi8NXkBAGiVYRjVarVUKlEtAQCATke1BI+5/VE9wzAsyzIMo9FCSO5ObWuSZXnHjh1bFhYAgM0Ri8XC4TC9EgAA6AJUS/BAsVjMZrNui9RkIW1BEBRFcdc/WvXntkUFAGArUCoBAICuwVt0bL5CoaDrejQabdQB2bZdv5C20hgLIQEAAAAA0M6olnB2bNs2TdNxHL/f3+icVCql63ogEGhULWmaNjw8TH8EAAAAAECno1rCGs5c/6jGtm1BEAKBwMTERKNvD4fDpmnKstzoBEVRIpHIlkQHAAAAAADbiGqpdzUqj9xBSU2+URTF5ickk8nNDgsAAAAAANoR1VKPsm37xIkTTU6QJKnR+kdNhiMBAAAAAICeQrXUnTKZTDqdjkajAwMDa54gvWDN5khVVdY/AgAAAAAA66Ja6gCO46w5bW10dLTRACJRFN31tptcdvfu3VuTFwAAAAAA9AqqpXax7srZZ2qyVHYkEgkGg402aAMAAG1iZWWlWCwODAyoqup1FgAAgI2gevBSKpUql8uGYViWte7K2Wsue9TofFmWWREJAID2l8/ny+VyMBiMx+NeZwEAANgIqqWtYppmJpMRBKHRakeCIOi6Xi6Xa3fdlY9kWa41R6qquisf0RMBANCVgsFguVwulUpUSwAAoENRLZ2d2rQ190YwGAwEAmueadt2NpuVJKlJtRSPxyORSK1LYuVsAAB6TSgUckcxO47DKwEAANCJqJZWW1Ue1d9ec9pao2pJVdVEItF8tJGmaZuWGwAAdCC/3y/LsmVZlUqFFwYAAKAT9Xq1VC6X8/l88/Jolfo5a36/v9Fpoigmk8nNzgsAALpNMBjM5/PFYpFqCQAAdKIur5ZWVlZM04zH441GDxmGsbKyUn9EFEW3Oar1R6tubEtwwAO1vQgdx6ndrt1o/ve/UCgIghAKhRrN5qhWq5VKZcPZAoFAoybXcZxisSgIQjgcbvTtlmW5T0QURUmS3IO1GwDgrXA4nM/nC4VCf3+/11kAAADOWkcWJbZt1wYZSZIUDAYbnZnJZAzDCAaDjT4GDAQCyWRyVX+0ZcGB9TkvcKuQ2p+O48iy3GSg3PLysm3biUSiUQFUKBSWl5fd2+4Faw/XSrB4PN5k4bC5uTlBEHbt2tXo0UulUu3RNyCZTDZ67rZtu49+/vnnNyq2MpmMu6z+msQXuGWT+6f7q8C9HYvFGv2esW07n89LkhSJRM7uKQHAC4LBoCiKhmHouu7z+byOAwAAcHbasVpyHKfWHLl/rrpbG0YhCIKmaU2qpUgkYtt2k7bI5/MlEolNfgLoVbquO46jqmqj4TDVajWdTgsvNDv1tVF9kdRIOBweGRlp9FV3amc0Gm1U7jiOYxhG609HeKFzaeVM959hk5N9Pl+TUUXrav5ey22dmjx68/qs1q9ZlrXmCaFQqNH3GoaxuLgoy3KTamlhYaFYLEqSJEmSW2DV36jdlmVZOkOT2AC6hiRJmqaVSqVisUi1BAAAOo731ZJlWel0ur48av7u2iVJkjvCqMkgDkEQWO0Izbmdjsu93eSIWxs1GbmzsLBQqVRGR0cbNRG2bbsTx9ZV3+m41YOw3gSueDxuWVaTOWvBYHBycrJ2t/5qtYcQzqZOqjc2Ntb8hFAo1KSgOReyLNc/rzUNDAzU/4dbNVbL/Y/bZLxYk9VPRFEMBoPNRztaL2jxGdWTJGlkZKRRgW6aZqVSkWWZ9VmAThcKhdxqqa+vz+ssAAAAZ2fLq6VisVgul4PBYJOxRdlsdtURURTd5ujMZY/c2+zOizVVq1XTNH0+n6qqa55gGMbMzEz9QKGz0rzKVFW1eX2gqmp/f39t7tWqP+vvnm0wQRDWfTfi/vPZwJW7z6r67FwGB/l8vnVrtYGBgUQiUSuwVvWVqwpNd8JvfcPV5NddpVKZm5sLBAITExONzslms+7gTZc7PEqWZX6LAm0lHA4vLS2Vy2XLsvhdDQAAOstGqiXHcUzTrJ+h1mRwUKlUymaz7gf7a54gy3IikahVSO4NpoH0IHciZP276/q32e5XHccRRbHJpLBMJpPP5/v7+xv1LO5iFqsONpqpdOaN5i/3h4eHmz9HRVH4OLoHqaraqOtszv3732QkmjuJpnnjubKyouv6mcfdLQtWNfj1d3lzC2wnRVF8Pp+u66VSibXbAABAZ1n7HcuqtY1W/XnmWI++vr5GZZCmabZtM20N9RYXF89skVpcTLr5UAufz6dpWpO3xO7kKXfQijtwg7EbaFvrLrfUfECoKxQK+Xw+91+ZOy+vtoK7+yFBo290/41MTk7SMQHbIxQK6bpeLBaplgAAQGd5vlpaXl7Wdb3WH7XyJr/+U+4m54fD4XNZuxfto34YkaZpTbbiSqVS0Wh0cHCw0aVyuVyjvzNnLmN85trGTUImEonm67KLoti86AS6zJl7mbtjAGtlU223hBr3IwS3e2ryLy6dTufz+VgsFo/Ht/hJAD0hHA5nMplisegO0fU6DgAAQKuer5ZKpVK1Wq0ddZc6qpVH7prZ9asd8YqnC5w576z+xpnH67+3yR7zwgtrYzd5aHe9oTUrpE17egAaqP2Gb3JOrX5q8tve3Si9yT92x3EWFhaUM5xTeqB7BQIBRVFM0yyVSlu07wEAAMBWeP4lfl9fn+M49atsUB51LsuyDMNoPjzn1KlT9WVii2oFUJNxarFYLBKJrLuX2dk+NIDt1Er9lEgkwuFwk43STdPM5/NnXllVVUVR1BejWQYEQQiHw9lsNp/PUy0BAIAO8vzbBmb1t7MzBxNZlhWJRBq96yuXy+tuGuW+iztz0lmjG60PKVp3zhqA7rDu8uSSJA0MDBiGYb7AnXCt6/qZK4u7H2yoZ9jKZwC0HbdaYk4cAADoLExM8JJt2+6aJvXrm7h/1g42Wt/a5/M1qpbct2fNhxuMjo6ygjWALSXL8plDFE3TNM5QW+apfjRlMBgcGxvb3siAxzRNY04cAADoOFRLW8JxHPfNkqZpjc5ZWFjI5XKtX9OdrugOIGq+L3ggENi5c2fzqzGwCIAn3Hl2q343ur8zV2ky1U4QhIWFBbe6YvEmdBl34FKhUKBaAgAAnYJX5Genfgcln8/XaDEjy7KmpqZEUTz//PMbXap+SlqtLVrztntjq54SAHhNFEWfz9e8S6rnOI5bzff19W1lZiihkwAAIABJREFULsADtWppcHCQwcUAAKAjUC09r7YdUnP135JIJBpVS7U+yLbtRuOD+vv73Y3SNv/JAEBXcxxncHDQMIwmtXsqlcrn8+5nAO6fqqryKxftT9O0WCwWDAa9DgIAANCqnq6WisViOp2uLWnU4ne1MpJIFMXdu3c3vw7vcABgYyRJisVizc/Rdd2dWFcsFt0jtbFRbtnk8/lYJhztaXBw0OsIAAAAZ6Gbq6WZmRld10dHRxuNLbJtu1Kp1O6Koii3YLviAwA2bnBwMBaLubvRVatVXddt265Wq9VqNZ/Pu+dIklQ/rMnv97MOHQAAAHC22r1aqi1sVL/IUe12IBAYHh5u9L21va4bnaBp2ujoaP3aRlvzJAAA202W5WAwWD+ryDCMWs1UrVYNw3A/YKj/jEFV1UAg4Pf7Y7EY/1MAAAAAWuFxteQ4TqVSsW27UXnU/NubjyEaGhoSRbHJfAd3o6INRgcAdBRVVVVVre265ThO/ZimarVqmqY7hy6fz6874Q4AAACAa2uLFcMwTNNUVbVRg2MYxvT0dPOLSJKkKIo7sGjVjebFUCAQ2Hh0AEBXE0XRnQQXiUTcI5ZlVSoVd0BTkyFLlUrFcRxmzwEAAACujVdL7vAi27Y1TWt0TjqdzuVy/f39jfaHrlVFZ9ZGtRssdw0A2AayLIdCodqwpkZSqVSpVBoYGIjH49sTDAAAAGhna1dLq2aoNZmqJori+eef3/DqitJ8s2dJks4777xzfA4AAGwb98MPBsYCAAAALkUQhFQqVeuM3BuO47Tyze7AItu2G00KSCaTyWRyM/MCAOCpJttHuPL5fDabDQQCgUBA0zQW9QMAAEB3UwRByOfzhmGs+oIoio3mqdVuexEYAIC2Vi6X6zeeUxRF07RAIBAMBn0+n7fZ0FlKpVImk9E0LZFIeJ0FAACgIUUQhGg06jjOmf2R19kAAOg8fX19gUCgUqmUy2Vd103TzOfz+XxeEARZloPBoKZpwWCwyQamgMs0zVKpZBgG1RIAAGhniiAIvF4BAGCzqKqqqmo0GhUEwbZtdxCT+6dlWbWaSVVVt2Ni0hwaCYfDhmG4f5cAAADaFq9lAQDYKpIk1XadcxxH1/VSqVQqlcrlsmEYhmHkcjlBEBRFcWfMhUIhaibUSJLEmpUAAKD98foVAIDtIIqi3+/3+/19fX2WZZXLZbdjcifNFQqFQqEgiuLu3bub7KwKAAAAtBuqJQAAtpssy+FwOBwOC4JgWZY7Y65UKkmSRK8EAACAzkK1BACAl2RZrk2as227yZm6rrPHHAAAANoN1RIAAO1CkqRGX7Jt+9SpU01OAAAAADzBK1QAADqAruuiKFItAQAAoN0wagkAgA4QCATOO+880zS9DgIAAAC8CB9+AgDQGURRVFW1yQnT09NLS0vlcnnbImE7OY6j67rXKQAAAFZj1BIAAN3A3WauXC5ns1lJkkKhUCQSCQaDbDnXHSqVyuzsrCzLO3bs8DoLAADAi1AtAQDQDfx+/8jISKFQKBaLtm3n8/l8Pi/LcjgcDofDmqbRMXU0n8/njloqlUrBYNDrOAAAAL9DtQQAQDcQRdFtkRzHKZVKhUKhUChYlrWysrKysiJJUiQSiUQimqZ5nRQbIUlSNBrNZrPZbJZqCQAAtBWqJQAAuoooiqFQKBQKDQ4OlsvlVR2TqqqRSCQajTZftgltyK2WSqWSaZqKwks4AADQLnhdAgBAdxJFMRgMBoPBgYGBUqmUz+cLhYJhGOl0Op1OBwKBaDQaDodlWfY6KVri9/s1TSuXyysrK8lk0us4AAAAz6NaAgCgy9XGMdm2XSgU8vl8qVSqVCqVSmVpacld8DscDnsdE+uLx+PuSu19fX2SxD6/AACgLVAtAQDQK9z1eqLRaH3HVCgUqtUq1VJHCIfDqqoahpHP52OxmNdxAAAABIFqCQCAHlTrmHRddzeS8zoRWhWPx5eWljKZDNUSAABoEwylBgCgd/l8vmQyGY/HvQ6CVkWjUUmSDMMoFoteZwEAABAEqiUAANCEYRiZTMayLK+D4HmSJLnjlbLZrNdZAAAABIFqCQAANLGysrK8vLywsOB1EPxOPB4XRbFUKlWrVa+zAAAAUC0BAIDGAoFAIBBgWZ+2oiiKu+w6A5cAAEA7oFoCAAANhcPhiYmJUCjkdRC8iLs8Vj6fNwzD6ywAAKDXUS0BAICNYxkmTwQCgWAw6DhOOp32OgsAAOh1VEsAAGDj5ufnp6amVlZWHMfxOktvSSQSgiDk83nTNL3OAgAAehrVEgAA2CDLsqrVqq7ri4uLJ06cSKVS1BzbRtM0TdMcx8lkMl5nAQAAPY1qCQAAbJAsy7t27RoaGvL7/ZZlpdPpEydOzM7Olkolr6P1hL6+PkEQVlZWaPQAAICHFK8DAACADiaKYjQajUajxWIxk8mUy+VisVgsFjVN6+vrY/3vLRUKhfx+f7VazWaz/f39XscBAAA9imoJAABsglAoFAqFKpVKNpstFArlcrlcLvv9/mQyScG0dfr6+ubn5wuFAtUSAADwCtUSAADYNIFAYHh42DTNdDqdy+Wq1ers7Kzf708kEuFw2Ot0XSgSiViWFY1GvQ4CAAB6F9USAADYZIqiDA4OJpPJbDabzWar1erc3Jyqqn19fdFoVBRFrwN2lXg87nUEAADQ06iWAADAlpBlOZlMxuNxt2AyDGNxcTGTyVAwAQAAdBN2iAMAAFvILZh27tyZSCQkSXILplOnTpXLZa+jAQAAYBMwagkAAGw5t2Dq6+vL5XKZTEbXdUni8y0AAIBuQLUEAAC2iSRJ8Xg8Go0Wi0W/3+91HAAAAGwCPjAEAADbSpKkSCTidQoAAABsDqolAAAAAAAAbBDVEgAAaCOlUmlxcdE0Ta+DdCTHcdLp9OLiotdBAABAD2GtJQAA0EZSqVSlUhFFcWBgwOssnUfX9VQqJQhCLBZjNSsAALA9qJYAAEAbSSaT6XQ6kUh4HaQj+f3+eDweCATolQAAwLahWgIAAG0kGAwGg0GvU3QwRnsBAIBtxlpLAAAAAAAA2CCqJQAAAAAAAGwQ1RIAAOgYuVzu9OnTlUrF6yAAAAB4HtUSAADoGOl0ulKpnD59en5+3jRNr+MAAACAagkAAHSO8fHxSCQiCEI+n5+amspkMl4nAgAA6HVUSwAAoGMoijI8PDw+Pu73+23bXl5ePn36tK7rXucCAADoXVRLAACgw2iaNjExMTg4KElSpVI5depUOp12HMfrXO3INM35+flCoeB1EAAA0LWolgAAQOcRRTEWi+3cuTMSiTiOk0qlpqamyuWy17nazsrKSj6fX15epnoDAABbhGoJAAB0KlmWh4eHR0dHFUUxDGN6enpxcdG2ba9ztZFEIqGqqmEY6XTa6ywAAKA7US0BAIDOFgqFduzYEYvFBEFYWVk5depUqVTyOlS7EEWxv79fEIRMJmMYhtdxAABAF6JaAgAAHU+SpMHBwfHxcXeEzszMzPz8vGVZXudqC+FwWNM0x3EWFxe9zgIAALoQ1RIAAOgSmqZNTk66w5fy+TzDl2qGhoZEUSyVSrlczussAACg21AtAQCA7uEOXxobG1NV1TTNmZkZVrAWBEFV1UQiIQjC8vIyg7kAAMDmoloCAADdJhgMTk5ORqNRQRAymczKyorXibzX19fn9/sty1paWvI6CwAA6CpUSwAAoAtJkjQ0NDQyMhIOh90pcj1OFMXBwUFBEPL5PPMEAQDAJqJaAgAAXSscDo+MjIii6HWQthAIBNyWbXFx0bZtr+MAAIAuQbUEAADQK/r7+2VZNgwjk8l4nQUAAHQJqiUAAIBe4S5zLghCJpOpVqtexwEAAN2AagkAAPSo3tw5LhwOR6NRx3Hm5+d78ycAAAA2F9USAADoRZVK5eTJk8Vi0esgHhgYGFAURdf1VCrldRYAANDxqJYAAEAvymazpmmurKx4HcQD7vZ5giBkMplyuex1HAAA0NmolgAAQC8aGhpKJBLDw8NeB/FGMBh0d4tbWFhgtzgAAHAuqJYAAEAvEkUxmUxKUu++Furv71cUxTCMdDrtdRYAANDBevflFAAAQC+r7RaXzWYty/I6DgAA6FSK1wEAAADgjVAolEgkwuGwLMteZwEAAJ2KagkAAKB3JZNJryMAAIDOxoQ4AACAFzEMY2pqiq3TAAAAWkG1BAAA8CKpVErX9ZmZmVwu53UWAACAdke1BAAA8CJDQ0ORSMRxnIWFhaWlJa/jAAAAtDWqJQAAgBcRRXF4eLi/v18QhGw2Ozc35ziO16EAAADaFNUSAADAGvr6+kZGRkRRLBQKp0+fNk3T60QAAADtiGoJAABgbeFweHx8XJblarV6+vTparXqdaLt4DjO8vKyYRheBwEAAJ2BagkAAKChQCAwMTHh8/lM05yeni4Wi14n2nJLS0uZTGZubs7rIAAAoDNQLQEAADSjqur4+HggELBte25uruu3jUsmk36/f2BgwOsgAACgM1AtAQAArEOW5fHx8XA47G4bl06nvU60hWRZnpyc1DTN6yAAAKAzUC0BAACsTxTFkZGRRCIhCEIqlVpeXvY6EQAAQFugWgIAAGhVMpkcHBwUBCGTyczPzzuO43UiAAAAj1EtYX133XXXXXfd5XWK9XVKTgBAR4vFYsPDw6Io5vP5ubk52iUAANDjFK8DdLZKpXLkyJHjx48vLS2Vy2V3zcsLLrhgz549gUDA63RbzjTNJ5544tixY3Nzc6VSSZblRCJxwQUX7Nu3LxQKeZ0OAICtEolEJEmam5srFoszMzOjo6OSxMd1AACgR1Etbdwzzzxzzz33lMvl2pFSqTQ1NTU1NXXo0KEDBw5cdtllHsbbatPT09/5zndWVlZqR0zTnJubm5ube/jhhw8cOPDyl7/8rC7oDjhi2BEAoCOEQqHR0dG5ublyuTwzMzM+Pi6KotehAAAAPEC1tEHHjx//xje+4TjOrl279u3bNz4+HgwGdV1fXl4+evTokSNH7rnnni6ulqanp7/+9a+bpjk6OnrllVfu2LEjHA6bpplOp48dO/bLX/7y+9///tlWSwAAdJZgMDg+Pj4zM6NpWi/0SisrK4FAwO/3ex0EAAC0F6qljTAM43vf+57jONdee+1rX/va2nFN0yYmJiYmJq6++uqDBw96mHBLWZb13e9+1zTNvXv3HjhwoDYFQFGU0dHR0dHR/fv3d/HTBwCgxu/3T0xMqKrqdZAtl81ml5aWFEWZnJyUZdnrOAAAoI1QLW3E448/XiwWJycn63uleoFA4IYbbjjzeCaTeeihh5599tlcLqcoysjIyJVXXnnRRRfVn1ObF/bEE088+uijS0tLkiRNTk6+7nWvGx4e3vAFP/GJTxw5cuRXv/rV8vKyYRif+MQnBEGYmZl5/PHHT548mclkRFGMxWIXXnjh1VdfrWlak6f/5JNPZrPZ4eHh+l6pns/nu/7662t3W3mU2jy4+glxtdsby+k6ffr0Qw89dPr06XK5rGna5OTk/v37x8fHV532zDPPPPjgg+5qrP39/Xv27NmzZw9z9AAA6+qFXkkQhEgkks1mDcOYm5sbGxvrhVFaAACgRVRLG/HMM88IgnDFFVec1Xc9++yz3/rWt3Rdd++apnnixIkTJ068+tWv/v3f//1VJ//oRz96+OGH6x9xamrqPe95TzKZ3NgF77vvvsOHD686+OUvf7n+7vLy8vLy8tNPP/3ud787GAw2eiJHjx4VBOGVr3xli0uWbuxRNuUKv/zlLw8ePFjbu6dQKDz99NO//e1v//AP/3DPnj210x555JEHHnigdnd2dnZ2dnZ+fr6VbGidKIrbvI/SZj3iZz7zmYceeug///M/W3msAwcOvPrVr7799tvP/XEBoH3Isjw6Oup+VLO4uDg0NOR1IgAA0C6oljbCLR0mJiZa/5ZcLvftb39b1/VLL710//79yWSyXC7/5je/+Z//+Z+f//znu3fv3rFjR/35jz766DXXXPOKV7wiHA7Pz8//4Ac/SKVShw4dqo0GOtsLHjlyZP/+/ZdffnkikahVQjt37tyzZ8/k5GQ4HNZ1fXZ29ic/+cnMzMyhQ4fe8IY3NHouc3NzgiCsun4TrTzKXXfd1WSI0MZyzs/P33///Y7jvOIVr7j66qvj8Xg2mz106NDjjz9+8ODBiYmJwcFB97T/+q//EgThiiuu2L9/fzQazeVyDz300C9/+csWnyC6W7FYvPvuux966CH37rp11Re+8IVXv/rVt912Wyuj6gCgg/h8vtHR0ZmZGXesdP3HXQAAoJdRLW1EqVQSBCEcDq86fmYtUjvyyCOPVKvV3/u933vrW9/qHvH5fPv375dl+f7773/sscdWNTXXXHNNbbbd5OTkdddd9y//8i8nT56snXC2F7ziiite//rXr4p3yy231G5rmrZ79+7+/v6777772LFjTSqbYrEoCEIkEml0wqY8yrlf4dFHH7Vt+4ILLnjLW97iHkkmk9dff32hUDh+/Pgjjzzy5je/WRCExx57zLbtl770pdddd517Wl9f33XXXVcsFp9++ukWnyO22XYOgLrnnnv279//kpe8xL277uNedNFFe/fu/cEPfvCOd7xj69MBwLbSNG1oaGh+fj6dTiuKEovFvE4EAAC8R7W0TY4fPy4IwpVXXrnq+CWXXHL//fefPn161fFV26uNjY0JgpDP5zd8wb17956Zyh2e89xzz2Wz2drEOkEQVlZWWnhOrTr3R9nYFaampgRBuPrqq1cdv+aaa44fP17r6dwb+/fvX3XaVVddRbUEQRDuvffeG2+88ay+5e1vf/sPf/jDrauWTpw4EYvFEonEFl0fwKbQdV2SJEXpttdakUjEMIxUKrW0tKSqaotz2wEAQBdraa0crOK+iqovelx31Vn1pUwmIwjCV77ylU9+8pN/Xefzn/+88MI4oHrxeLz+rrvRr2VZG75gX1/fqiNLS0tf+tKXHnnkkcXFxfq+RhAE0zSbPP1QKLTm01/Thh/l3K+Qy+UEQRgYGFh13J0HV8vvnnbmqP7+/v5W4nWEarX63ve+N5lMDg8Pf+5zn6utvWrb9qc+9aldu3YlEol3vetdtb82oij+0z/9086dOzVNu+qqq/73f/933fPvvvvuiYkJd67lsWPH3va2tyWTyVgsdsMNNywvL7cS0jTNO++8c8eOHX19fX//93/vHlzzUm5+URRrT2TdR6xWqx/4wAeGh4eHh4c/8IEPVKvV5j+ZeocPH77qqqtqd2vn6Lr+/ve/3/3ev/u7v6v/lle96lWPPfZYK8/6bD333HM33XTTjTfeeOa/aABtRdf16enpmZmZFv9n11kSiUQ0GnUcZ25urvYbFQAA9CyqpY0YGRkRXhgU0yJ3Eo1t27ZtO3Xcr9Z3Rq51N1452wueuX/Nj3/843K5PDY29id/8icf+chH7rzzzrvuuuuOO+5Y97mc1dPf8KNs4hXwqU99ampq6qmnnvrVr3713//937Xj//AP//DTn/70Jz/5ybPPPmsYxp133ln70o9+9KOf/vSny8vLb3zjG//iL/5i3fN/9rOfuTMQBUG48cYb3//+909PT586dWpsbOyv/uqvWgn5t3/7t4cOHfrJT37y3HPPTU9PuwfXvJT797z+L/y6j/jpT3/6N7/5zeHDhw8fPvzkk09+5jOfaf6TqTc/P+/+nV/lM5/5zLFjx5588snDhw/ff//99V8aHR2dnZ1t5Vm3bmpq6o//+I8vuuiib37zm3fccQd7MwFtTqrjdZYtMTg4qGmabdtzc3NnvuoAAAA9pdsGaW+PCy+88OjRo48++uhll13W4kvGWCyWSqVuvfXWzVrz8twv6E4Ee9vb3lY//CGVSq37jRdeeOH//d//PfLII608/Q0/yrlfIRqNptPppaWlycnJ+uOLi4tC3VpR7mmpVGp8fLz+tBbH2nSEb3zjG/fdd9/o6KggCHffffcll1ziHv/yl7/8/e9/f9euXYIgfP7zn7/yyitrw4W+9KUvDQ8PC4Lw4Q9/+LOf/ey65//jP/6je31BEJ544gn3hqZpn/70p2sP19zXv/71733ve7t373ZDntWl1j3t3//93++99173P/EXv/jF66+//q//+q+b/GTqNVpc6d/+7d9++MMfupNVv/jFL1566aWtPM0NmJ6evuOOO/7jP/7Dtm3TNMfHx0Oh0I9//GP3q3fddVeTfw6KojBXpfvoun7q1KnPfe5zXgfBOmzbrh9f2X0cx8lms5ZlqaoajUa7+Jk24X6mAgBAj6Na2ojLLrvspz/96dzc3MGDBw8cONBKu3TBBRc8/PDDDz74oLt09Lk79wu6nzGuWgOitg1WE5dddtnPfvaz+fn5Rk9f1/WDBw+6m9m1/iiKopimWa1W3dl/555zx44d6XT6wQcfXFUt/eIXvxAEYefOne7dnTt3ptPphx566O1vf3v9aQ8//PC6D9EpZmdn3T5IEITzzjuvdnxqauqiiy6q3a3/T+n2SoIgBIPBcrm87vn1P+TDhw9/9KMf/fWvf+1O25RluZWQ09PT559//qqDLV5q3dNmZ2drT/z888+fmZmpHV/zJ1NvZGRkdnb2zGwzMzP111z1cGsOdNqAcrn84Q9/+Fvf+pYkSbZtK4pSrVbrh2UdOXJkUx4IneXkyZNuPQp4rta/92a1FAgEWMscAACqpY1QFOXGG2/8+te/fvjw4enp6X379u3YsSMajcqyXKlU5ufnn3rqqVXfsn///ieeeOJXv/pVsVjct2/f4OBgKBTSdT2dTp88efKpp556z3vec1YZzv2CQ0NDMzMzP/jBD97whjfE4/FMJvPwww/XRn80Icvy2972Nvfpz87OvvKVr9yxY0c4HDZNM51OHzt27LHHHisWi2611PqjuOOwfv3rX19++eU+n+/cc1555ZVPPPHE0aNH77333le96lWxWGxlZeXQoUPPPPOMLMu1FdD37dv3+OOPP/300wcPHrzqqqui0Wgul3v44Ye7aQ3v0dHREydOuK3Qc889Vzs+OTn5wAMP1Fq2dTU5v/4dxTve8Y4777zzO9/5jvszb3Fg3cTExPHjx1/2spfVH2x0qVVvYNZ9xNHR0eeee+6lL32pIAjHjx93hxoJjX8y9fbu3fvggw+eWS2NjY3Vrvnss8/Wf+nBBx/ct29fK896XZqmffOb3/zYxz728Y9//Mc//rFpmisrKwcPHnSXDAMAz1Wr1enpadu2Q6HQyMhIbxZMAAD0OKqlDZqYmLjlllu++93vzs/P//CHPzzzhEgkcuDAgfq7N99887e+9a2jR48ePXr03AOc+wVf85rXfOMb3zh+/Li72Zxr3759rSw/PD4+fsstt3znO9+ZnZ295557Vn3V5/O5vdJZPcpLX/rSQ4cOPfDAAw888IB7xF0NfcM5h4eH3/jGNx48ePDIkSP1IztEUTxw4MDQ0FDttD/4gz/40Y9+9Nhjj9Vfc+/evYcPH25xxE2bu+mmmz70oQ995StfEQThQx/6UO34e9/73ne/+91f/OIXd+/effTo0U9/+tPf/OY3m1ynxfOLxWI0Gg2FQlNTU3/5l3/ZYshbbrnl1ltv/epXv9rX1/fJT37SnRPX6FL9/f2//e1vL7744hYf8aabbrrtttv++Z//WRCE22677aabbmr+k6n3pje96dvf/vaf/umfrjp+8803f/CDH/za174mCMIHPvCB+i9997vfvfnmm1t84q247LLL7r333qeeeupjH/vYfffd99nPfvYLX/jCJl4fADbM7/ePjY3NzMwUi8WFhYXaoFcAANA7unNpye0xMTFx6623vvnNb77wwguj0aiiKKqqxmKxiy+++Prrr7/ttttq73td4+Pj73vf+173uteNj48HAgFJkgKBwNjY2Gte85r3ve99Gwhwjhd8yUtecvPNN09MTCiK4vP5xsbG3vzmN9fXYes++q233vqmN73pggsucJ++3+8fGRm59tprb7vttpe//OVn+yjXXnvt1VdfnUgkVrU555Lziiuu+LM/+7OLL744FApJkhQKhS6++OJ3vetde/bsqT/tqquueuc737lz506fz+fz+UZHR9/0pje97nWvE17Ym6/T3XHHHRMTEy972cte8YpXvOpVr6qt6e7+Bb7hhhui0eg73/nOWuHSSIvnf/WrX7399tsjkchrX/vaa6+9tsWQH/nIR/bv33/ttdfu3r27Nr2u0aVuv/32/fv31z4bX/cR77jjjosvvnjv3r179+695JJLPv7xjzf/ydT7oz/6o0ceeeTYsWOrjn/84x8/77zzLr300ssvv/z1r3997fjRo0cfe+yxt771rS0+8dZdeumlbsFUKBTOasEyANhSgUBgeHhYFMV8Pr+0tOR1HAAAsN3ERivUAj3u2Wef/dd//deJiYk///M/9zrLZnryySevv/76RpO/elmTn8zf/M3f/OIXv7jvvvtauc511113zTXX3H777ZsdEADaWj6fn5+fFwQhmUwmEgmv4wAAgO3DhDhgDY7jHDp0SGi8tHPH+eAHP/jRj360Wq1+6EMfqk1XhNDaT6Z+2ex1tdhAAehNtm3Pzc2FQqF4PO51lk0WiURM01xeXk6lUoqiRKNRrxMBAIBtQrUECF/72tf27NkzNjYWi8Vs256dnf35z39+8uRJn893+eWXe51uc+zcufOKK67Qdf0tb3nLpz71KQ+TrLnCq4fDJ9vnJwOgFxQKhVKpVCqVZFmORCJex9lkfX19lmXl8/lAIOB1FgAAsH2YEAc8v174KrIs33DDDZdccsm2xwEAdLPl5eVMJiMIwsjISDgc9jrO5rMsqzs2wQAAAC2iWgKEU6dOHTlyZHZ2NpfLWZYViUR27tx51VVXsb87AGArzM/P5/N5SZLGxsYY4AMAADod1RIAAMC2chxndnbWnRYWjS5OAAAgAElEQVQ3MTGx5vaUAAAAnULyOgAAAEBvEUVxZGTE7/dbljU7O2vbtteJAAAANo5qCQAAYLtJkjQ6Oqooiq7rs7OzjCIHAACdi2oJAADAA4qijI6OSpJULpcXFxe9jrPlyuWy1xEAAMCWoFoCAADwht/vHxoaEgQhl8u528Z1q8XFxenp6Vwu53UQAACw+aiWAAAAPBMOh5PJpCAIy8vLxWLR6zhbxZ3xJ4qi10EAAMDmY4c4AAAAj83Pz+fzeUmSxsfH/X6/13G2RLlc1jTN6xQAAGDzMWoJAADAY0NDQ4FAwLbt2dlZ0zS9jrMl6JUAAOhWVEsAAAAeE0VxdHRUVVXTNOfm5hhUDgAAOgjVEgAAgPdkWR4ZGRFFsVKpLC8vex0HAACgVVRLAAAAbcHv9w8PDwuCkM1mC4WC13EAAABaQrUEAADQLsLhcCKREARhYWFB13Wv42yHQqFgWZbXKQAAwMYpXgcAAADA7ySTyUqlIsuyonT/67RisTg/P6+q6tjYWC88XwAAupLIOpEAAABtxbZtSeqJoeW6rs/MzJimKcvy2NiY3+/3OhEAADhrVEsAAADwjGEYs7Ozuq67C5lrmuZ1IgAAcHaolgAAAOAly7JmZ2crlYooikNDQ5FIxOtEAADgLFAtAQAAwGOO4ywsLOTzeUEQ4vH4wMCA14kAAECrqJYAAADQFlKpVDqdFgQhHA4PDw+Louh1IgAAsD6qJQAAALSLfD6/sLDgOI7f7x8dHWXbOAAA2h/VEgAAQAcwTdM0zUAg4HWQLVcqlebm5mzbVlV1dHTU5/N5nQgAADRDtQQAANDuqtXqzMyMKIqTk5OyLHsdZ8vpuj47O2sYhiRJw8PDoVDI60QAAKAhyesAAAAAWIeqqrIsy7Js27bXWbaDz+ebmJjQNM227dnZWXcBJgAA0J4YtQQAANABTNOUZbnXVrZeXl7OZDKCIASDweHh4V4YsQUAQMehWgIAAED7qi3srSjK6Oio3+/3OhEAAHgRqiUAAAC0tUqlMjc3Z5omSy8BANCGWGsJAAAAbS0QCExOTgaDQUEQVFX1Og4AAHgRRi0BAACgAziOU61WA4GA10EAAMCLUC0BAAAAAABgg5gQBwAAAAAAgA2iWgIAAOhI1Wr11KlThULB6yAAAKCnUS0BAAB0pEKhUK1WFxcXLcvyOovH3GWYvE4BAECPoloCAADoSIlEwu/3W5a1uLjodRaPpVKp06dPZ7NZr4MAANCLqJYAAAA6kiiKQ0NDoigWCoVenhbnOI5hGI7jqKrqdRYAAHoRO8QBAAB0sFQqlU6nZVnesWOHLMtex/FMpVIJBAJepwAAoBcxagkAAKCDJRIJn89nWdbS0pLXWbxErwQAgFeolgAAADqYKIrDw8OiKObz+V6eFgcAALxCtQQAANDZ/H5/PB4XBGFpacm2ba/jAACA3kK1BAAA0PGSyaTP5zNNs8enxa1paWmpWq16nQIAgK5FtQQAANDxRFEcHBwUBCGXy5VKJa/jtJFcLpfNZk+fPp1Op9m+BgCArUC1BAAA0A00TXOnxS0uLtKh1ITD4Vgs5jhOKpU6deoUw5cAANh0Iq88AAAAuoNt21NTU6Zp9vX19ff3ex2njRSLxcXFRdM0RVGMx+PJZFIURa9DAQDQJaiWAAAAukehUJibmxNFcWJiwu/3ex2njZimubi4WCwWBUEIBAJDQ0M+n8/rUAAAdAOqJQAAgK4yOztbLBY1TRsfH/c6S9vJ5XLuPnqiKPb19SUSCYYvAQBwjqiWAAAAuophGFNTU47jDA8PRyIRr+O0nfrhSz6fb3BwUNM0r0MBANDBqJYAAAC6TSqVSqfTsizv3LlTkti2ZQ211ZcEQQiHw4ODg7Isex0KAICORLUEAADQbRzHmZqaMgwjHo8PDAx4HadNudvGZTIZQRAkSUomk+4WewAA4KzwKRYAAEC3EUXRbZTy+bxt217HaVOiKPb394+Pj/t8Ptu2l5aWZmZmDMPwOhcAAB2GUUsAAADdKZPJRKNR5nmty3GcdDqdyWQcx2F5bwAAzhbVEgAAACDour60tFQqlQRB8Pl8O3bs8DoRAACdgWoJAAAAeF6pVFpaWopGo319fV5nAQCgM1AtAQAAAL/jvjxmQhwAAC2iWgIAAAAAAMAGsUMcAAAAAAAANohqCQAAAGiJbdsLCwuGYXgdBACANkK1BAAA0Cts2/Y6QmfLZDK5XG52dtbrIAAAtBGqJQAAgJ6Qy+VOnjyZy+W8DtLBwuGwpmnJZNLrIAAAtBGqJQAAgJ5gWZZlWVRL58Lv94+Pj4fDYa+DAADQRtghDgAAoCc4jpPL5aLRqCiKXmcBAADdg2oJAAAA2BymaSqK4nUKAAC2FRPiAAAAgE1gGMbJkyfn5uZ0Xfc6CwAA24cPVQAAAIBNUCqVHMcpFAqFQiEajSYSCVVVvQ4FAMCWY0IcAAAAsDmq1WoqlSoWi4IgiKLoFkxMkQMAdDeqJQAAAGAzVSqVVCpVKpUECiYAQA+gWgIAAAA2X7VaTafThULBvRsOh5PJpM/n8zYVAACbjmoJAAAA2CoUTACArke1BAAA0Its206n0+VyeWJiwuss3a9cLqfT6fopcvF4nIIJANAdqJYAAAB6kW3bJ0+etCxraGgoGo16Hacn1BdMgiCEQqFEIhEIBLxNBQDAOaJaAgAA6FHpdDqVSimKsnPnTlEUvY7TK8rlciaTcXeREwRB07S+vr5QKORtKgAANoyNKgAAAHpUPB7PZrOmaa6srMTjca/j9ApN0zRNMwwjm82urKyUy2XHcaiWAACdi1FLAAAAvSubzS4tLcmyvHPnTkmSvI7TcwzDyGQywWAwHA57nQUAgA2iWgIAAOhdjuNMTU0ZhpFMJhOJhNdxAABA5+GzKQAAgN4limJfX58gCNls1rZtr+MAAIDOQ7UEAADQ06LRqM/nsywrk8l4nQWrzc3NzczMVKtVr4MAANAQ1RIAAEBPE0UxmUwKDFxqP5ZlFYvFUqnE/n0AgHZGtQQAANDrwuGwz+ezbTubzXqdBb/jLq8+ODjo8/m8zgIAQENUSwAAABDcNbwZuNRuFEWJxWJepwAAoBmqJQAAAAiRSMRdcWllZcXrLDgLmUzGNE2vUwAAehrVEgAAAARBENyt4jKZDAOXOkWxWFxeXj558uTc3Fy5XPY6DgCgR1EtAQAAQBAEIRKJqKrKwKUOIkmSpmmO4xQKhenp6ampqWw2a1mW17kAAL1FdBzH6wwAAABoCysrK4uLi7Is79q1i13JOkW1Wl1ZWcnn8+5wM1EUw+FwNBoNBoNeRwMA9ASqJQAAADzPcZyTJ0+apjkwMBCPx72Og7Ng23Yul8vlctVq1T2iKEo0Go1Go6qqepsNANDdqJYAAADwO9lsdmlpSVGUnTt3MnCpE+m67nZMtZlxfr8/FotFIhFJYjUMAMDmo1oCAADA79QGLg0ODrLtfedyHCefz+dyudry3pIkRaPRSCQSCAS8zQYA6DJUSwAAAHiRTCazvLwcDAbHxsa8zoJzdeYgJp/P53ZMiqJ4mw0A0B2olgAAAPAitm0Xi8VwOMyEuK7hOE6xWMzn88Vi0X3939/f39fX53UuAEA3oFoCAAAAeoVt24VCIZ/PDw0NMWoJALApqJYAAAAAAACwQXxSAQAAAOB3UqmU4zixWExVVa+zAAA6ANUSAAAAgOc5jpPNZm3bDgaDVEsAgFZQLQEAAAD4naGhoVKpFAwGvQ4CAOgMrLUEAAAA4CxYliXLstcpAADtglFLAPD/7d1pkFzVfTfg293TPd2zaJlB1ooNGHCwKLaYzQQVAWOHyHZYYzYHY3bM4rjYglKqIhQEB1IVGwJyHLDBgaQSl1GRMo7BKLIwVhC7YxmZVRghkDQazd573/fDDfOOR5rRTEujnuV5Pkx1n3vuuf87Gi390znnAgCj8N5775VKpYaGhubm5oaGhlgsVuuKAKgl0RIAAMMpFAqdnZ2tra3xeLzWtVB75XK5UCiEYdjd3d3d3Z1IJJqamhobG2VMAFOWBXEAAAxn/fr1xWJx1qxZM2bMqHUtjAthGPb29vb09PT29lYqlagxHo83NjY2NTU1NDRIIQGmFNESAADD6ejo6O3tbWlpyWQyta6F8SUMw2w229PT09PTUy6Xo8ZYLJbJZKKYqa7OIgmAyU+0BAAA7KpsNhtNZSoWi/2N9fX1jY2NjY2N6XS6hrUBMKZESwAAwG5TKBR6e3t7e3uz2Wx/YyKRiDImy+UAJh/REgAAsPuFYdjX1xfFTKVSKWpcsGCBlZUAk4xoCQAAGEPRlkzRPKa9997bg+QAJhnREgAAUHvRArp0Oi17AphYrHMGAABqr62tbcOGDd3d3bUuBIDRES0BAAC1l0wmE4lEQ0NDrQsBYHQsiAMAYHTCMLRkiT0vm82WSqWGhoZEIlHrWgD4/+pqXQAAABNGPp/fsmVLEAQLFiyodS1MOR0dHT09PUEQpFKphoaGTCaTyWTETAA1J1oCAGCkEolELpcLwzCfz9fX19e6HKaW+vr6YrGYz+cLhUKhUOjo6AiCIJVKZT5UV+fTDUANWBAHAMAofPDBB93d3dOmTZs9e3ata2EqKpfLfX19fX192Wy2WCwOPJRMJqOMKZ1Op1KpWlUIMNWIlgAAGIVsNrthw4ZYLLbvvvtai0RtlUql7IcKhcLAQ4lEon82kxl2AGNKtAQAwOj87ne/y+fze+2118yZM2tdC/yfcrmcy+X6+vpyuVw+nx/4MScejzc2Ns6ZM6eG5QFMYlYjAwAwOtOnT9+8eXNnZ6doifEjkUg0NjY2NjYGQVCpVHK5XDSbKZfLVSoV/6EOMHZESwAAjE5zc3NbW1uxWOzr62toaKh1OTBYPB5vaGiIfjijXedjsdgw/Ts6Ourr69Pp9PDdANiheK0LAABggonH483NzUEQdHZ21roW2IlYLJZOp4fZbqlUKm3ZsmXDhg1mNgFUR7QEAMCoTZ8+PQiC3t7eUqlU61pgl1QqlaampsbGxnh8yA9HpVJJ8AQwFNt4AwBQjXfffTeXy7W2tra0tNS6FhhbGzZsyOVy6XQ6mgBVX1+fSqVqXRTAeGGvJQAAqjFt2rRcLtfV1SVaYtIrFothGEb7gkct8Xg8lUrVD2CfJmDKMmsJAIBqVCqVt99+u1KpzJ8/32beTHrFYjGXy+U/VC6XBx6NxWLJZHJg0pRIJGpVKsAeJloCAKBKmzdv7uzsbGpqmjt3bq1rgT2qWCzmB9h+07G6urr+aU3RtvcAk5UFcQAAVGn69OmdnZ3RZt51df5hyRSSTCaTyWRTU1P0tlKpRBlTNLOpUCiUSqVSqdTX1ydaAiY9/wIAAKBK9fX16XQ6l8t1d3fPnDmz1uVAzcTj8Uwmk8lkordR0lQoFPL5fDKZHObE9vb2eDze3NxsAR0wcYmWAACoXrSZd2dnp2gJ+g1KmobR3t4ehmFDQ4NoCZi4REsAAFSvubm5ra2tWCz29fXZzBtGpVKpzJgxo1gsDjOzqbu7u6+vL5lMplKpVCqVTCY9ig4Yb0RLAABUL1rL09nZ2dnZKVqCUYnH43vttdfwffr6+rq6uga2RNs8RTFT9HX4NXcAY020BADALpk2bVq0mXe5XLaoB3av5ubmZDJZKBSKxWKhUKhUKsViMZon2N8nFosNCptSqZTfjMAeI1oCAGCXpNPpdDqdSqXCMKx1LTDZNDQ0DJwPWC6XC4VClDRFYVOxWAzDMGoceGI8Hk8mk7Nnz66vr9/jVQNTS8y/AAAAACau/pipf3JTqVSKDu2zzz5DLZeL+kdbOO3BYoFJSLQEAAAwqYRhGOVNjY2NQ/Vpb2/funXrtGnTZs+evSdrAyYfC+IAAAAmlVgsttPpSIlEIp1OD7NcLgzDN998M5lM1tXVRZuF97+wkRMwkFlLAAAADFYsFtevX7/DQ7FYrG5oe7ZMoPZESwAAAOxAqVQqfqj/df9GTjsUi8USiURdXV06nZ41a9YeKxWoIYkyAAAAOxDNQspkMgMbwzAsl8vFYrFcLkd508AXYRiWSqVSqRSPx4cZua2tLQzD6dOn20QcJgHREgAAACPVvxpuh0ejXKlcLsdisWEG6e7uLpVKzc3NQ3XI5/O9vb3xeLyuri4xwK5WD4wB0RIAAAC7xwi3W2ppaSkUCslkcqgOuVxu69at27f3Z0yDIifxE9SQvZYAANhtKpVKd3d3Pp//yEc+UutagAksm812d3eXP1QqlSqVygjPTSQSM2fOnDlz5lAdSqWS7cZhN/LbCQCA3SYMwy1btoRhOGPGDFuoAFXLZDI73OMpWm038EV/8BTt9BQEQblcHmbkUqn09ttvB0FwwAEHDNUnn89H20VFEonE8FtHwRQnWgIAYLdJJBLTp09PJpNmBAC71/B7PEWi+KlSqQyzLC6a/TR8VNTR0dHV1TWoMb6dKHLaXjKZtC6PSSAMwzAMK5VK9LX/Rf/X6HdcOp22IA4AAIApJPpIPEy61N7e3tvbG82Eij5Cj2r8efPmNTY27vBQPp/ftm1bMplsbW0d6vRSqRSVF4vFzJZi1/X29oZhmMlkhko8s9lse3v7oORo5EtQp02b5n+TAAAAmEJisdjwD7BraWlpaWnpfxt9zI4W30UfvKMXQxkmDyqVSt3d3el0epho6YMPPshmswNb+mOm2If6Xw9MoKLX06ZNGypBiO4imm81zO2z20Vx4TArK8vlck9PT/DhrLoo3Bnh23K53NDQMHfu3KGu3tbWVigU5s+f39DQsMMOlUqlr69vmPoH/QQO/KlLJBL19fWiJQAAABhStMxtt6zzTSaTe+2112iH6k8QRtK5sbFxqOSou7t78+bNjY2N8+bNG+r0DRs2lEql4PcDuP4Bd9rY2to6VGyXzWZzuVx9ff1QAUcQBJ2dncPc2vCiWG2oo729vYVCIZPJpNPpHXaoVCptbW2DWgZOWIsmuw18OzDfSSaT8+fPH+rqmzZt6uvrmz179lAVlkqlzZs3D3X6Tg3/s1FfXz98nJpOp+fOnTsoNhqYJe20ANESAAAA7AmpVGqnjzhYsGBB8Ptx0qDdbQa+7j/U33n4GUk7nbJULBajaKk6LS0tQyURfX197e3tM2bMGCZa2pV4JR6PDxMt9fT0dHV1tba2DhUthWG4K8HW8KLvyTArK+PxePRtGTgBbeAktf5D0S/fwG794w9lzpw5w5eXSCSamppGeU+/R7QEAAAA48vANGF3mT59+vTp04fvM2fOnCgBGThJp39SzA4bBxom40ilUk1NTfX19cNcfZjUaaeGj1fS6XSlUhkm14vFYjNnzhzY0h/c9HcY9Hbgr9HwVx9mmlhk+ElP459tvAEAAACokt3mAQAAAKiSaAkAAACAKtlrCQCAMVEoFLZt2xYEwezZs2tdCwAwVsxaAgBgrHR1dXV3d4/wgdkAwEQkWgIAYEykUqn6+vowDHt6empdCwAwVkRLAACMlebm5iAIuru7a10IADBWREsAAIyVKFrKZrPFYrHWtQAAY0K0BADAWKmrq8tkMkEQWBMHAJOVaAkAgDEUTVwSLQHAZCVaAgBgDDU1NcVisVwuZ00cAExKoiUAAMZQIpGI1sTZzBsAJiXREgAAY6upqSmwJg4AJinREgAAYytaE5fP562JA4DJR7QEAMDYSiQS6XQ6MHEJACYj0RIAAGMuek6c7ZYAYPIRLQEAMOai7ZasiQOAyUe0BADAmOt/Tpw1cQAwyYiWAADYEzwnDgAmJdESAAB7QrTdUi6XsyYOACYT0RIAAHuCNXEAMCmJlgAA2EOsiQOAyUe0BADAHhJFS7lcrlQq1boWAGD3iIVhWOsaAACYKrq6utLpdCqVqnUhAMDuIVoCAAAAoEoWxAEAAABQJdESAAAAAFUSLQEAAABQJdESAAAAAFUSLQEAAABQJdESAAAAAFUSLQEAAABQJdESAAA1sGXLlrfeequvr6/WhQAAu0S0BABADVQqlXK53NvbW+tCAIBdEgvDsNY1AAAw5RQKhVKplMlkYrFYrWsBAKonWgIAAACgShbEAQAAAFAl0RIAAAAAVRItAQAAAFAl0RIAAAAAVRItAQAAAFAl0RIAAAAAVRItAQBQe2EY1roEAKAadbUuAACAKa23t3fr1q319fWzZ8+udS0AwKiJlgAAqKV4PJ7P50ulUhiGsVis1uUAAKNjQRwAALWUTqfj8Xi5XM7lcrWuBQAYNdESAAC1FIvFGhsbgyDo6+urdS0AwKiJlgAAqLEoWurt7a11IQDAqImWAACosYaGhlgsls/ni8VirWsBAEZHtAQAQI0lEol0Oh2YuAQAE5BoCQCA2rPdEgBMUKIlAABqrz9aqlQqta4FABgF0RIAALWXSqXq6urCMMxms7WuBQAYBdESAADjQlNTU2C7JQCYaERLAACMCw0NDYFoCQAmGtESAADjQkNDQywWK5VKhUKh1rUAACMlWgIAYFyIxWKZTCYwcQkAJhTREgAA40X/c+JqXQgAMFKiJQAAxotou6VsNlupVGpdCwAwIqIlAADGi1QqlUwmwzDMZrO1rgUAGBHREgAA44jnxAGMB6+++uqVV175B3/wB01NTY2NjZ/4xCeuuOKKV199dVC32AgM1bmxsXHhwoXf+MY3Pvjgg+0LyGazd91117HHHjtjxoy6urrW1tbjjjtuyZIlr7zySnV3NLCYUZU9wkr6TzzvvPO2v/p55523/cjDW7FixZ//+Z8vWLCgvr5+zpw5Z5999qpVq6q797EWC8Ow1jUAAMD/6e3t3bhxYzKZ3GeffWpdC8AU9c1vfnPJkiXlcnlQeyKRuP3222+44Yb+lpEEJf2xw1CdZ8+evXr16n333be/ZfPmzSeeeOLatWuHH3BUoqtH54687JFXEo0Zi8Xq6+vff//9GTNm9B/q6OiYO3duPp+P+u+0/kqlctVVV913333DX3H8MGsJAIBxJJPJxGKxYrFYKBRqXQvAVPStb33rpptuqlQqF1100bPPPtvd3d3b27tmzZqLL764UqnceOON3/72t/s7h79vmMbtT9m8efPy5cv322+/TZs2/fVf//XAPjfccMPatWvnz5//ve997913383n8x0dHatXr7799tsPOeSQXb/HkZc92kpOPPHEXC73yCOPDGx8+OGHc7ncSSedNMLylixZct9999XV1d1www3r1q3L5/ObNm16+OGHjz766F246TFk1hIAAONLR0dHKpWKMqZa1wIwtbz77rv7779/oVB44IEHLrzwwkFHv/e97331q19NpVJvvvnmggULtj994MygER595pln/uiP/ugjH/nIpk2b+htbW1vb29tXr159zDHH7OIdjaS2YQ6NvJJokEceeeTcc8894ogjXnjhhf5DRxxxxEsvvfSv//qv55xzzlAX6vfaa68ddNBBlUplh78E45NZSwAAjC8zZsxoaGiQKwHsecuWLSsUCmeeeeYOQ40LL7zwjDPOKBQKy5Yt211XPPTQQ4Mg6OzsHNgY7bh3wAEH7PT0He5eNKotjYY38koip59+ektLy4svvvjyyy9HLS+99NJLL73U0tJy2mmnjWSE73znO5VK5dOf/vREyZUC0RIAAAAQefLJJ4MguOSSS4bqEB362c9+truu+OKLLwZBMGgO1OGHHx4EwUUXXfTGG2/srgtVZ7SV1NfXR9t433///VFL9OL888+vr68fyQgrV64MguDLX/5yVfXWhgVxAAAAQBAEQUtLy7Zt27Zu3drS0rLDDm1tbbNmzWptbW1ra9v+6KgWxLW1tT399NPf+MY31q9fv3Tp0ltuuaW/59NPP/3Zz342l8sFQbDffvsddthhBx988KJFi0444YREIrHTK468caeHqqjklVdeOeyww2bOnLlx48YgCObOndvR0fHKK68ccsghw39/IjNnzuzo6Hj55Zd/+9vf3nXXXb/+9a/r6uo++clPnn322V/72teSyeQw59aKaAkAAAAIgiBIJpOlUqlYLNbV1e2wQ7FYTKVSdXV1xWJx+6MjiZa2d8455zz44IODQpN169bdfvvty5cv7+7u7m9csGDBP/zDP5xxxhkjvJ0R1jZ82SOsZOAgRx555PPPP//II4+EYXjeeecdeeSRa9as2emFInV1deVy+frrr7/zzjsHHTrmmGOefPLJpqamEd3wHiRaAgAAAIJgj8xaGmTBggWPPfZYtO5se+Vy+de//vXatWvXrFnz+OOPv/7667FY7NFHH/2zP/uzkd7SCGobSeKz00oGDrJs2bIrrrjipJNOCsNwxYoVy5Ytu+yyy0Z4oebm5p6enlgs9ulPf/r2228/9NBDi8Xi8uXLr7/++o6Ojuuuu277yKnmREsAAABAEATBUUcd9dxzzz3xxBMnn3zyDjs88cQTn/vc54466qhnn312+6MjXxBXLBbffvvt22677aGHHpo1a9b//u//zp49e/jaKpXKkiVL7rjjjkHPXxuhXYyWdlrJwEE6OzvnzZuXzWaDIMhkMu+///60adNGeKEDDjjgjTfeaG5u/t3vfjdjxoz+9v/8z//84he/+NGPfvSdd94ZYZ17jG28AQAAgCAIgs985jNBEHz3u98dqkN0KOq2K5LJ5IEHHvj973//c5/73JYtW5YsWbLTU+Lx+I033hgEwdq1a3fx6rtop5VMnz79zDPPDMMwDMOzzjorypVG6LDDDguC4MADDxyYKwVBsGjRoiAIPvjgg+rrHjOiJQAAACAIguDyyy9PJpP/8R//8YMf/GD7ow899NAPf/jDVCp1+eWX75bLxWKxb3/723V1dQ8++OBrr7220/7RY9rGw2ZDO63koosuGvRihL7whS8EQfD66693dnYObF+1alUQBPPmzRttqXuAaAkAgPGoUqm0t7e///77tS4EYAr56Ec/+rd/+xAlpbMAAAytSURBVLdBEFxwwQWXXnrpc88919fXl81mn3/++csuu+wrX/lKEAR33HHH3nvvvbuueOCBB371q18tlUoDJy4tXLhwyZIlP/3pT9999918Pp/L5d5+++1777032tjolFNO6e8Zi8W238Jph43VGXklgyxatCiatXT88ceP6opf+tKXPv7xj3d1dS1evPjpp5/u7Oxsa2u7//77/+Iv/iIIgnPPPXcX72gs2GsJAIDxKAzDt956q1Kp7L333ul0utblAEwht91229KlSyuVyqD2eDx+66233nzzzUOdOPK9lgbauHHj/vvvn8vl1qxZ86lPfSoY+llyQRAcdNBBK1asmDNnzjBjjrxxhIeqrmTkFxrohRdeOOmkkwbNWgqC4IQTTnj88cczmczwp+95oiUAAMapbdu2xePxpqamRCJR61oAppa1a9fec889Tz311HvvvReG4YIFC0488cSrr7564cKFw5xVXbQUBMFNN930zW9+8zOf+cyTTz4ZBMFvfvOb5cuXr1q1au3atZs3bw7DsLW1deHChaeeeurFF1888P8bxjpa2sVKRn6hQTZs2HDbbbf95Cc/2bhxYyaTOfjgg88///xLL710fP6FKFoCAAAAoEr2WgIAAACgSqIlAAAAAKokWgIAAACgSqIlAAAAAKokWgIAAACgSqIlAAAAAKokWgIAAACgSqIlAADGtTAMu7u7t2zZUutCAIAdEC0BADDebd68uaOjI5/P17oQgMkvFotFX4cSBEGlUnnggQeOP/742bNnp1KpffbZ5ytf+cozzzzTP8LixYt3OPjixYujEfr99Kc//fznPz9r1qxkMjlnzpwzzjjjZz/72RjfIruZaAkAgHEtFoul0+kgCLLZbK1rAZgqwgG2f3v11Vf/8Ic/vPPOO19//fWenp4nnnjiqKOO+su//Mv+01955ZWXX3550Jgvv/zyK6+8MrBl6dKlN9988+WXX/7aa691dXU9+uij5XL55JNPHvv7Y3eKRT8WAAAwbm3btq2tra2xsXHevHm1rgVgkovFBgcF27c0NTW98847ra2tQ43wj//4jytXrvz3f//3ge1nnXXWiSeeeOWVV0ajPfHEEzfccMPq1aszmczAbn/zN3+zdOnS3XMz7BFmLQEAMN5Fnzqy2az/FgUYD+bNm/fLX/5ymA4XX3zxCy+88Nvf/ra/Zd26dS+++OLFF1/c33L33XcvXbp0UK4UBEF/rvSd73xn//33T6VS+++//3e/+93+DrFY7JFHHjn66KObmpoSiUTU+Nhjjx1++OH19fX77LPP/fffv4s3yKiYtQQAwATw5ptvViqVvffeO1ocB8AYGcmspaeeeuq8887bf//9Fy1adNBBBy1atOhjH/vYoP4PPPDAqlWrvv/970eNF1xwwQknnHDhhRf2jzZr1qzf/OY3s2bN2mEZjz766DXXXPPggw8eeeSRzz333AUXXHDvvfd+4QtfiMY/8MAD77vvvmOOOaahoSEIgmeeeebzn//8vffeu3jx4nXr1p1zzjn33HPPKaecsju/LwxNtAQAwASwcePG3t7e1tbWlpaWWtcCMJmNJFoKgqCvr2/lypXPPvvs2rVr//u///tTn/rUgw8+OGfOnP7+5XL5kEMO+fGPf7zPPvusX79+8eLFv/rVrxKJRP9oyWQym83W1dXtsIzjjjvu+uuvP/XUU6O3jz766N///d//4he/iMZftWrV8ccf39/55JNPvuyyy84888zo7bPPPnvVVVc999xzu+c7ws6IlgAAmAA6Ojq2bNnS0NAwf/78WtcCMJmNMFoaKJfLXXvttZs2bVq+fPnA/o888sgvfvGLe++994orrli0aNE555wz8OisWbNeffXVvfbaa4djtrS0vPnmmzNnzozebtu27eMf/3h7e3s0QjabHTiJddasWW1tbQNPTyQSpVJp9HdPNey1BADABBAtebDdEsA4lE6n77jjjhUrVgxqP/vss9esWfPCCy88//zzX/rSlwYdPfroo1etWlX1FQe+7enp6e7uHvgYO7nSniRaAgBgAkilUolEIgzDbDZb61oAprprrrmmXC4PbNm4cWNzc/OgbvF4/Oabb/7sZz978803x+OD84errrrq1ltv3f5P9VtvvTUIgoMOOmhg8PTzn//8k5/85FD1/OEf/uELL7xQxY2wW4iWAACYGPonLtW6EICp7u677z7yyCOXL1/e2dnZ1dW1YsWKc8899+qrr96+5+mnn75169bTTjtt+0N/8id/8qd/+qfHH3/8j3/8487Ozlwu9z//8z+nnnpq9IS466677pprrlm5cmVPT8/KlSuvvfbaG2+8cah6brnlluuuu27VqlU9PT29vb1PPfXU4sWLd+P9Mjx7LQEAMDF0dXVt2rQpnU7vvffeta4FYNIayV5Lv/zlL//5n/95xYoV7733XiaTOfjggy+55JILL7xwqP7DjPaTn/zk7rvvXrNmTWdnZ2tr63HHHXfllVeedNJJQRAsW7bsrrvueueddz72sY/deOONl1xyyTDj//znP7/lllvWrFlTqVSOOeaYJUuWRIOwB4iWAACYGIrF4vr162Ox2H777bf9wgoAoCb8lQwAwMSQTCaTyaTtlgBgXBEtAQAwYUTbLfX19dW6EADg/4iWAACYMDKZTGAnbwAYT0RLAABMGFG0lM/nBz30GgCoFdESAAATRl1dXSqVCkxcAoBxQ7QEAMBEEm23JFoCgHFCtAQAwEQSrYmzkzcAjBOiJQAAJpJMJhOPx+vq6sIwrHUtAJPcO++88+6770ave3p61q9fH73O5/Nbt24NgqC3t3fDhg0bNmz44IMPBp44sPPWrVvXrVs3zMhBEHR2dpqOOnHF/JUMAMDEEoZhLBardRUAk9xjjz32q1/9qr29fd999z3zzDO//vWvH3roofX19V/84hf/7u/+bsuWLcuXL3/++ef/67/+K5vNPvfcc0888UR04vvvv9/f+YQTTrjtttuOPfbYN998c9myZduPfPXVV3d3d59wwgl/9Vd/deaZZ9budqmeaAkAAADYsa6uriuuuOLYY49duHDhH//xH59++uk/+tGPgiA49dRTly9fHvX5wQ9+UFdXd84550Rv77nnnv7OF1100RtvvHH++ed/7Wtf+7d/+7ftR3744YeXLl3a0tKyYMEC0dIEZUEcAAAAsANhGN5www3XX3/9li1bZs2aNVS3Rx999LTTTnvrrbeef/75bDY7sPMRRxyxevXqa6655pRTTunvMHDklStXfuITn9hrr7320C0xBkRLAAAAwA5cd911Z5111mGHHTZ//vyNGzcGQbD9euQ33nhjwYIF6XR648aN69aty+VyAzvff//9X//61x9++OEf/ehH/R0GjrxixYrVq1c/9NBD999/v+2WJigL4gAAAIDB/umf/um+++477rjjDjjggC9/+cuXX3753LlzDz300FNPPXXp0qWPP/74pZdeetNNN918881nnXXW4Ycf3n9ie3t7f+eFCxfeeeedBx54YG9v77e+9a3tR7722muDIPiXf/mXdDptQdwEJVoCAAAAdiIMw1wul8lkRtu5VCpls9nm5uYxLpCaES0BAAAAUCV7LQEAAABQJdESAAATVblcLpVKta4CAKY00RIAABNSe3v7W2+91d7eXutCAGBKEy0BADAhpVKpIAjMWgKA2rKNNwAAE1IYhpVKJZFI1LoQAJjSREsAAAAAVMmCOAAAAACqJFoCAAAAoEqiJQAAAACqJFoCAAAAoEqiJQAAAACqJFoCAAAAoEqiJQAAAACqJFoCAGBi27x581tvvZXNZmtdCABMRaIlAAAmtnK5XC6XRUsAUBOiJQAAJrZMJhMEgWgJAGpCtAQAwMQWRUu5XC4Mw1rXAgBTjmgJAICJrb6+Ph6PVyqVfD5f61oAYMoRLQEAMOFZEwcAtSJaAgBgwhMtAUCtiJYAAJjw0ul0EAS5XK7WhQDAlCNaAgBgwkun07FYrFwuFwqFWtcCAFOLaAkAgAkvFotFE5esiQOAPUy0BADAZGC7JQCoCdESAACTgWgJAGpCtAQAwGQQbbdUKpVKpVKtawGAKUS0BADAZBCPx+vr6wMTlwBgzxItAQAwSVgTBwB7nmgJAIBJwkPiAGDPEy0BADBJRLOWCoVCuVyudS0AMFWIlgAAmCQSiUQqlQpMXAKAPUi0BADA5GG7JQDYw0RLAABMHlG0lMvlal0IAEwVdbUuAAAAdptMJtPc3BwFTADAHhALw7DWNQAAAAAwIVkQBwAAAECVREsAAAAAVEm0BAAAAECVREsAAAAAVEm0BAAAAECV/h8WiYO98PolyQAAAABJRU5ErkJggg==</File>
        <File Location="Kernel/Config/Files/XML/FrameworkITSMCore.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJDb25maWciPgoKICAgIDxTZXR0aW5nIE5hbWU9IlByb2R1Y3ROYW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiIENvbmZpZ0xldmVsPSIyMDAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uLCBzaG93biBpbiB0aGUgd2ViIGludGVyZmFjZSwgdGFicyBhbmQgdGl0bGUgYmFyIG9mIHRoZSB3ZWIgYnJvd3Nlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj5PVE9CTzo6SVRTTSAxMTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlZpZXdNb2RlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRldGVybWluZXMgdGhlIHdheSB0aGUgbGlua2VkIG9iamVjdHMgYXJlIGRpc3BsYXllZCBpbiBlYWNoIHpvb20gbWFzay48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCIgU2VsZWN0ZWRJRD0iQ29tcGxleCI+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IlNpbXBsZSIgVHJhbnNsYXRhYmxlPSIxIj5TaW1wbGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IkNvbXBsZXgiIFRyYW5zbGF0YWJsZT0iMSI+Q29tcGxleDwvSXRlbT4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cgo8L290b2JvX2NvbmZpZz4K</File>
        <File Location="Kernel/Config/Files/XML/ITSMCore.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJDb25maWciPgogICAgPFNldHRpbmcgTmFtZT0iUGFja2FnZTo6UmVwb3NpdG9yeUxpc3QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSIgQ29uZmlnTGV2ZWw9IjIwMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OlBhY2thZ2U8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaHR0cHM6Ly9mdHAub3RvYm8ub3JnL3B1Yi9vdG9iby9wYWNrYWdlcy1pdHNtLyI+T1RPQk86OklUU00gQWRkb25zPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZG1pbklUU01DSVBBbGxvY2F0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5hZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5NYW5hZ2UgcHJpb3JpdHkgbWF0cml4LjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPkNyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+QWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFkbWluSVRTTUNJUEFsbG9jYXRlIyMjMDAzLUlUU01Db3JlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5UYWJsZS5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FkbWluSVRTTUNJUEFsbG9jYXRlIyMjMDAzLUlUU01Db3JlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1haW4gbWVudSBpdGVtIHJlZ2lzdHJhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kTmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok5hdmlnYXRpb25Nb2R1bGUjIyNBZG1pbklUU01DSVBBbGxvY2F0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BZG1pbiBhcmVhIG5hdmlnYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6QWRtaW5PdmVydmlldzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5hZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyOjpNb2R1bGVBZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5Dcml0aWNhbGl0eSDihpQgSW1wYWN0IOKGlCBQcmlvcml0eTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+TWFuYWdlIHRoZSBjcml0aWNhbGl0eSAtIGltcGFjdCAtIHByaW9yaXR5IG1hdHJpeC48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25CaWciPmZhLXRhYmxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uU21hbGwiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNOjpGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SVRTTUNvcmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCIgU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjAiIFRyYW5zbGF0YWJsZT0iMSI+T2ZmPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIxIiBUcmFuc2xhdGFibGU9IjEiPlN1Z2dlc3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjIiIFRyYW5zbGF0YWJsZT0iMSI+RW5mb3JjZTwvSXRlbT4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFBob25lIyMjUHJpb3JpdHlCeUNJUCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5DSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRQaG9uZU5ldzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU2VsZWN0IiBTZWxlY3RlZElEPSIyIj4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5PZmY8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjEiIFRyYW5zbGF0YWJsZT0iMSI+U3VnZ2VzdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMiIgVHJhbnNsYXRhYmxlPSIxIj5FbmZvcmNlPC9JdGVtPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0RW1haWwjIyNQcmlvcml0eUJ5Q0lQIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNJUEFsbG9jYXRpb246IE92ZXJ3cml0ZSBwcmlvcml0eSBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBEZWZhdWx0IGZhbGxiYWNrOiBGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldEVtYWlsTmV3PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTZWxlY3QiIFNlbGVjdGVkSUQ9IjIiPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIwIiBUcmFuc2xhdGFibGU9IjEiPk9mZjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5TdWdnZXN0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIyIiBUcmFuc2xhdGFibGU9IjEiPkVuZm9yY2U8L0l0ZW0+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRGcmVlVGV4dCMjI1ByaW9yaXR5QnlDSVAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0RnJlZVRleHQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCIgU2VsZWN0ZWRJRD0iMiI+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjAiIFRyYW5zbGF0YWJsZT0iMSI+T2ZmPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIxIiBUcmFuc2xhdGFibGU9IjEiPlN1Z2dlc3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjIiIFRyYW5zbGF0YWJsZT0iMSI+RW5mb3JjZTwvSXRlbT4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldE1lc3NhZ2UjIyNQcmlvcml0eUJ5Q0lQIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNJUEFsbG9jYXRpb246IE92ZXJ3cml0ZSBwcmlvcml0eSBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBEZWZhdWx0IGZhbGxiYWNrOiBGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6Q3VzdG9tZXI6OlZpZXc6OlRpY2tldE1lc3NhZ2U8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCIgU2VsZWN0ZWRJRD0iMiI+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjAiIFRyYW5zbGF0YWJsZT0iMSI+T2ZmPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIxIiBUcmFuc2xhdGFibGU9IjEiPlN1Z2dlc3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjIiIFRyYW5zbGF0YWJsZT0iMSI+RW5mb3JjZTwvSXRlbT4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNOjpDb3JlOjpJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvICdEZXBlbmRzT24nLCBhbmQgdGhlIERpcmVjdGlvbiBpcyAnU291cmNlJywgb25seSAnRGVwZW5kcyBvbicgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayAnUmVxdWlyZWQgZm9yJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gJ0luY2x1ZGVzJyB3aXRoIHRoZSBkaXJlY3Rpb24gJ1RhcmdldCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSAnU291cmNlJywgJ1RhcmdldCcsIG9yICdCb3RoJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJVFNNQ29yZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtIFZhbHVlVHlwZT0iU2VsZWN0Ij4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IkJvdGgiIFRyYW5zbGF0YWJsZT0iMSI+Qm90aDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IlNvdXJjZSIgVHJhbnNsYXRhYmxlPSIxIj5Tb3VyY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSJUYXJnZXQiIFRyYW5zbGF0YWJsZT0iMSI+VGFyZ2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVwZW5kc09uIiBTZWxlY3RlZElEPSJCb3RoIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uT2YiIFNlbGVjdGVkSUQ9IlNvdXJjZSI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlR5cGUjIyNMb2NhdGlvbk9mIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgJ0xvY2F0aW9uT2YnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZU5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+TG9jYXRpb24gb2Y8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+TG9jYXRlZCBpbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpUeXBlIyMjQWx0ZXJuYXRpdmVUbyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlICdBbHRlcm5hdGl2ZVRvJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkFsdGVybmF0aXZlIHRvPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXROYW1lIiBUcmFuc2xhdGFibGU9IjEiPkFsdGVybmF0aXZlIHRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlR5cGUjIyNDb25uZWN0ZWRUbyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlICdDb25uZWN0ZWRUbycuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5Db25uZWN0ZWQgdG88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+Q29ubmVjdGVkIHRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlR5cGUjIyNEZXBlbmRzT24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSAnRGVwZW5kc09uJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkRlcGVuZHMgb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgZm9yPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlR5cGUjIyNJbmNsdWRlcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlICdJbmNsdWRlcycuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5JbmNsdWRlczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0TmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5QYXJ0IG9mPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlR5cGUjIyNSZWxldmFudFRvIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgJ1JlbGV2YW50VG8nLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNvdXJjZU5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+UmVsZXZhbnQgdG88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+UmVsZXZhbnQgdG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIwMCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0cyB1c2luZyB0aGUgJ0FsdGVybmF0aXZlVG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5BbHRlcm5hdGl2ZVRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdHMgdXNpbmcgdGhlICdDb25uZWN0ZWRUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPkNvbm5lY3RlZFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMDIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdHMgdXNpbmcgdGhlICdEZXBlbmRzT24nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5EZXBlbmRzT248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIwMyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0cyB1c2luZyB0aGUgJ0luY2x1ZGVzJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+SW5jbHVkZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIwNCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0cyB1c2luZyB0aGUgJ1JlbGV2YW50VG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMDUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdHMgdXNpbmcgdGhlICdMb2NhdGlvbk9mJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+TG9jYXRpb25PZjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjIwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1RpY2tldCcgb2JqZWN0cyB1c2luZyB0aGUgJ0FsdGVybmF0aXZlVG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+QWx0ZXJuYXRpdmVUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjIxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1RpY2tldCcgb2JqZWN0cyB1c2luZyB0aGUgJ0RlcGVuZHNPbicgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5EZXBlbmRzT248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIyMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdUaWNrZXQnIG9iamVjdHMgdXNpbmcgdGhlICdSZWxldmFudFRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlJlbGV2YW50VG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI0MCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdTZXJ2aWNlJyBvYmplY3RzIHVzaW5nIHRoZSAnQWx0ZXJuYXRpdmVUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+QWx0ZXJuYXRpdmVUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjQxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1NlcnZpY2UnIG9iamVjdHMgdXNpbmcgdGhlICdEZXBlbmRzT24nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPkRlcGVuZHNPbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjQyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1NlcnZpY2UnIG9iamVjdHMgdXNpbmcgdGhlICdSZWxldmFudFRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyNjAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnRkFRJyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjYxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ1BhcmVudENoaWxkJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlBhcmVudENoaWxkPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyNjIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnRkFRJyBvYmplY3RzIHVzaW5nIHRoZSAnUmVsZXZhbnRUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyODAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdTZXJ2aWNlJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdGQVEnIG9iamVjdHMgdXNpbmcgdGhlICdOb3JtYWwnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI4MSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ1NlcnZpY2UnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ1BhcmVudENoaWxkJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+UGFyZW50Q2hpbGQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI4MiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ1NlcnZpY2UnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ1JlbGV2YW50VG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkxpbmtPYmplY3Q8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzM0MDAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNV29ya09yZGVyJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdTZXJ2aWNlJyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Xb3JrT3JkZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzNDAxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTVdvcmtPcmRlcicgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnU2VydmljZScgb2JqZWN0cyB1c2luZyB0aGUgJ0RlcGVuZHNPbicgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5EZXBlbmRzT248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQxMCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Xb3JrT3JkZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQxMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnRGVwZW5kc09uJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Xb3JrT3JkZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5EZXBlbmRzT248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQxMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1RpY2tldCcgb2JqZWN0cyB1c2luZyB0aGUgJ05vcm1hbCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzNDIwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNoYW5nZScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnVGlja2V0JyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01DaGFuZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+Tm9ybWFsPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU006OkZyb250ZW5kOjpUZXh0QXJlYSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5XaWR0aCBvZiBJVFNNIHRleHRhcmVhcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSJeWzAtOV17MSwzfSQiPjc4PC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjSW5jaWRlbnRTdGF0ZXMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6R2VuZXJhbENhdGFsb2c8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPklUU006OkNvcmU6OkluY2lkZW50U3RhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIiBUcmFuc2xhdGFibGU9IjEiPkluY2lkZW50IFN0YXRlIFR5cGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5Ij4xMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzYyIgVHJhbnNsYXRhYmxlPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGEiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Indhcm5pbmciIFRyYW5zbGF0YWJsZT0iMSI+V2FybmluZzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJvcGVyYXRpb25hbCIgVHJhbnNsYXRhYmxlPSIxIj5PcGVyYXRpb25hbDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpbmNpZGVudCIgVHJhbnNsYXRhYmxlPSIxIj5JbmNpZGVudDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByZWZLZXkiPkZ1bmN0aW9uYWxpdHk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj5PcHRpb248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpBZ2VudDo6Q29tbW9uQ1NTIyMjMTAwLUlUU00iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkRlZmF1bHQuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5TZWFyY2guY3NzPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6OkFnZW50OjpDb21tb25KUyMjIzEwMC1JVFNNIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxpc3Qgb2YgSlMgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoLmpzPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJEeW5hbWljRmllbGRzOjpEcml2ZXIjIyNTZXJ2aWNlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkR5bmFtaWNGaWVsZCBiYWNrZW5kIHJlZ2lzdHJhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkR5bmFtaWNGaWVsZHM6OkRyaXZlclJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEaXNwbGF5TmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnRGlhbG9nIj5BZG1pbkR5bmFtaWNGaWVsZFJlZmVyZW5jZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0VHlwZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+QXJ0aWNsZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+Cg==</File>
        <File Location="Kernel/Config/Files/XML/ITSMService.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJDb25maWciPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVNlcnZpY2UiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tc2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1zZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPklUU00gU2VydmljZSBPdmVydmlldy48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnRJVFNNU2VydmljZSMjIzAwMy1JVFNNU2VydmljZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LlNlcnZpY2UuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FnZW50SVRTTVNlcnZpY2UjIyMwMDMtSVRTTVNlcnZpY2UiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFpbiBtZW51IGl0ZW0gcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmROYXZpZ2F0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tc2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLXNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+U2VydmljZS1BcmVhPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlNlcnZpY2VzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtPcHRpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXIiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+TWVudTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+SXRlbUFyZWE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWNjZXNzS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MzEwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1zZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tc2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5TZXJ2aWNlIE92ZXJ2aWV3PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlua09wdGlvbiI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhciI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY2Nlc3NLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4xMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU0xBIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+aXRzbS1zZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPklUU00gU0xBIE92ZXJ2aWV3LjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5TTEE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFnZW50SVRTTVNMQSMjIzAwMy1JVFNNU2VydmljZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LlNMQS5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpOYXZpZ2F0aW9uIyMjQWdlbnRJVFNNU0xBIyMjMDAzLUlUU01TZXJ2aWNlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1haW4gbWVudSBpdGVtIHJlZ2lzdHJhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kTmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLXNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+U0xBIE92ZXJ2aWV3PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlNMQTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNU0xBPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmtPcHRpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXIiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWNjZXNzS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MjAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVNlcnZpY2Vab29tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLXNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+U2VydmljZSBab29tLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPlpvb208L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudElUU01TZXJ2aWNlWm9vbSMjIzAwMy1JVFNNU2VydmljZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuQWxsb2NhdGlvbkxpc3QuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5VSS5UYWJsZS5Tb3J0LmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LlRhYmxlRmlsdGVycy5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LlNlcnZpY2Vab29tLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVNlcnZpY2VQcmludCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPml0c20tc2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5TZXJ2aWNlIFByaW50LjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPlByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU0xBWm9vbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLXNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+U0xBIFpvb20uPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+Wm9vbTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFnZW50SVRTTVNMQVpvb20jIyMwMDMtSVRTTVNlcnZpY2UiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5TTEFab29tLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVNMQVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLXNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+U0xBIFByaW50LjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPlByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20jIyNTZXJ2aWNlSW5jaVN0YXRlU2lnbmFsIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0Wm9vbTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iQ2hlY2tib3giPjE8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01TZXJ2aWNlOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAwMC1CYWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OklUU01TZXJ2aWNlOjpNZW51TW9kdWxlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TZXJ2aWNlTWVudTo6R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSVRTTVNlcnZpY2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMTAwLVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpJVFNNU2VydmljZTo6TWVudU1vZHVsZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU2VydmljZU1lbnU6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5QcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01TZXJ2aWNlUHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlUHJpbnQ7U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJVFNNU2VydmljZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMyMDAtTGluayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpJVFNNU2VydmljZTo6TWVudU1vZHVsZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU2VydmljZU1lbnU6Okxpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkxpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkxpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNU2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50TGlua09iamVjdDtTb3VyY2VPYmplY3Q9U2VydmljZTtTb3VyY2VLZXk9WyUgRGF0YS5TZXJ2aWNlSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01TTEE6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDAwLUJhY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpJVFNNU0xBOjpNZW51TW9kdWxlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TTEFNZW51OjpHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNU0xBPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IklUU01TTEE6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMTAwLVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OklUU01TTEE6Ok1lbnVNb2R1bGU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNMQU1lbnU6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5QcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01TTEFQcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVNMQVByaW50O1NMQUlEPVslIERhdGEuU0xBSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OkNvbXBsZXhUYWJsZTo6U2V0dGluZ3NWaXNpYmlsaXR5IyMjU2VydmljZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpMaW5rT2JqZWN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+QWdlbnRJVFNNU2VydmljZVpvb208L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxpbmtPYmplY3Q6OkNvbXBsZXhUYWJsZSMjI1NlcnZpY2UiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TGlua09iamVjdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpMaW5rT2JqZWN0OjpTZXJ2aWNlLnBtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZWZhdWx0Q29sdW1ucyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29tbWVudCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyaXRpY2FsaXR5Ij4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckluY2lTdGF0ZSI+MjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcmVhdGVUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29tbWVudCI+MTEwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPjEyMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcml0aWNhbGl0eSI+MTMwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1ckluY2lTdGF0ZSI+MTQwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPjE1MDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaW1lIj4xNjA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+Cg==</File>
        <File Location="Kernel/Config/Files/XML/TicketITSMService.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJDb25maWciPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpTZXJ2aWNlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFsbG93cyBkZWZpbmluZyBzZXJ2aWNlcyBhbmQgU0xBcyBmb3IgdGlja2V0cyAoZS4gZy4gZW1haWwsIGRlc2t0b3AsIG5ldHdvcmssIC4uLiksIGFuZCBlc2NhbGF0aW9uIGF0dHJpYnV0ZXMgZm9yIFNMQXMgKGlmIHRpY2tldCBzZXJ2aWNlL1NMQSBmZWF0dXJlIGlzIGVuYWJsZWQpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6VGlja2V0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4K</File>
        <File Location="Kernel/Language/ar_SA_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmFyX1NBX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/bg_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmJnX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAn0JrRgNC40YLQuNGH0L3QvtGB0YIg4oaUINCS0LvQuNGP0L3QuNC1IOKGlCDQn9GA0LjQvtGA0LjRgtC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ9Cj0L/RgNCw0LLQu9GP0LLQsNC50YLQtSDQv9GA0LjQvtGA0LjRgtC10YLQvdC40Y8g0YDQtdC30YPQu9GC0LDRgiDQvtGCINC60L7QvNCx0LjQvdC40YDQsNC90LXRgtC+INC90LAg0JrRgNC40YLQuNGH0L3QvtGB0YIg4oaUINCS0YrQt9C00LXQudGB0YLQstC40LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICfQn9GA0LjQvtGA0LjRgtC10YLQvdC+INGA0LDQt9C/0YDQtdC00LXQu9C10L3QuNC1JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn0JzQuNC90LjQvNCw0LvQvdC+INCy0YDQtdC80LUg0LzQtdC20LTRgyDQuNC90YbQuNC00LXQvdGC0LjRgtC1JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn0JrRgNC40YLQuNGH0L3QvtGB0YInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ9CY0L3RhNC+0YDQvNCw0YbQuNGPINC30LAgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ9Cf0L7RgdC70LXQtNC90LAg0L/RgNC+0LzRj9C90LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn0J/QvtGB0LvQtdC00L3QviDQv9GA0L7QvNC10L3QtdC9INC+0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ9Ch0LLRitGA0LfQsNC90Lgg0YPRgdC70YPQs9C4JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ9Ch0LXRgNCy0LjQt9C90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ9Ci0LXQutGD0YnQviDRgdGK0YHRgtC+0Y/QvdC40LUg0L3QsCDQuNC90YbQuNC00LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAn0KHQstGK0YDQt9Cw0L3QuCBTTEEg0LTQvtCz0L7QstC+0YDQuCc7CgogICAgIyBUZW1wbGF0ZTogVGlja2V0SW5mb3JtYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ9CS0LvQuNGP0L3QuNC1JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAn0J3QtSDQvtC/0YDQtdC00LXQu9C10L0gU0xBSUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdTTEFJRCAlcyDQvdC1INC1INC90LDQvNC10YDQtdC9INCyINCx0LDQt9Cw0YLQsCDQtNCw0L3QvdC4ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAn0JrQsNC70LXQvdC00LDRgCDQv9C+INC/0L7QtNGA0LDQt9Cx0LjRgNCw0L3QtSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICfQvtC/0LXRgNCw0YLQuNCy0LXQvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAn0LLQvdC40LzQsNC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJ9C40L3RhtC40LTQtdC90YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAn0J3QtSDQtSDQtNCw0LTQtdC9IElEINC90LAg0YPRgdC70YPQs9Cw0YLQsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdJRCDQvdCwINGD0YHQu9GD0LPQsNGC0LAgJXMg0L3QtSDQtSDQvdCw0LzQtdGA0LXQvSDQsiDQsdCw0LfQsNGC0LAg0LTQsNC90L3QuCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ9Ci0LXQutGD0YnQviDRgdGK0YHRgtC+0Y/QvdC40LUg0L3QsCDQuNC90YbQuNC00LXQvdGC0LAnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn0KHRitGB0YLQvtGP0L3QuNC1INC90LAg0LjQvdGG0LjQtNC10L3RgtCwJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXh0ZXJuYWwtc291cmNlIGtleSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgLyBTT1BNIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAn0J7Qv9C10YDQsNGC0LjQstC10L0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICfQmNC90YbQuNC00LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICfQo9GB0LvRg9Cz0Lgg0LfQsCDQutGA0LDQudC90Lgg0L/QvtGC0YDQtdCx0LjRgtC10LvQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfQmtC70LjQtdC90YLRgdC60Lgg0LjQvdGC0LXRgNGE0LXQudGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAn0KHRitGA0LLRitGA0L3QsCDRh9Cw0YHRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDQmNCiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ9Ce0YLRh9C10YLQvdC+0YHRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ9CY0KIg0J7Qv9C10YDQsNGG0LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAn0JTQtdC80L7QvdGB0YLRgNCw0YbQuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfQn9GA0L7QtdC60YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAn0J7RgdC90L7QstC10L0g0LTQvtCz0L7QstC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfQlNGA0YPQs9C4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ9CU0L7RgdGC0YrQv9C90L7RgdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICfQktGA0LXQvNC1INC30LAg0L7RgtCz0L7QstC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ9CS0YDQtdC80LUg0LfQsCDQstGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ9CS0YDQtdC80LUg0LfQsCDRgNCw0LfRgNC10YjQsNCy0LDQvdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ9Ch0LTQtdC70LrQuC/RgtGA0LDQvdC30LDQutGG0LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICfQk9GA0LXRiNC60LgnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ9CQ0LvRgtC10YDQvdCw0YLQuNCy0LXQvSDQvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJUEFsbG9jYXRpb246IE92ZXJ3cml0ZSBwcmlvcml0eSBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBEZWZhdWx0IGZhbGxiYWNrOiBGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAn0KHQstGK0YDQt9Cw0L0g0YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRgNCw0LnRgtC1INC00LXQudGB0YLQstC40Y8sINC/0YDQuCDQutC+0LjRgtC+INC1INC90LDQu9C40YfQtdC9INCx0YPRgtC+0L0g0LfQsCDQvdCw0YHRgtGA0L7QudC60Lgg0LIg0L/RgNC40YHQv9C+0YHQvtCx0LvQtdC90LjQtdGC0L4g0LfQsCDRgdCy0YrRgNC30LDQvdC4INC+0LHQtdC60YLQuCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiDQnNC+0LvRjywg0L7QsdGK0YDQvdC10YLQtSDQstC90LjQvNCw0L3QuNC1LCDRh9C1INGC0LXQt9C4INC00LXQudGB0YLQstC40Y8g0YLRgNGP0LHQstCwINC00LAg0YHQsCDRgNC10LPQuNGB0YLRgNC40YDQsNC70Lgg0YHQu9C10LTQvdC40YLQtSBKUyDQuCBDU1Mg0YTQsNC50LvQvtCy0LU6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzINC4IENvcmUuQWdlbnQgLkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9C10YLQtSDQutC+0Lgg0LrQvtC70L7QvdC4INC00LAg0YHQtSDQv9C+0LrQsNC30LLQsNGCINCyINC/0YDQuNGB0L/QvtGB0L7QsdC70LXQvdC40LXRgtC+INC30LAg0YHQstGK0YDQt9Cw0L3QuCDRg9GB0LvRg9Cz0LggKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4g0JfQsNCx0LXQu9C10LbQutCwOiDQodCw0LzQviDQsNGC0YDQuNCx0YPRgtC4INC90LAg0YPRgdC70YPQs9Cw0YLQsCDRgdCwINGA0LDQt9GA0LXRiNC10L3QuCDQt9CwINC60L7Qu9C+0L3QuCDQv9C+INC/0L7QtNGA0LDQt9Cx0LjRgNCw0L3QtS4g0JLRitC30LzQvtC20L3QuCDQvdCw0YHRgtGA0L7QudC60Lg6IDAgPSDQl9Cw0LHRgNCw0L3QtdC90L4sIDEgPSDQndCw0LvQuNGH0L3QviwgMiA9INCQ0LrRgtC40LLQuNGA0LDQvdC+INC/0L4g0L/QvtC00YDQsNC30LHQuNGA0LDQvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdG9iby9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICfQl9Cw0LLQuNGB0Lgg0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn0KDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQvdCwINGE0YDQvtC90YLQtdC90LQg0LzQvtC00YPQuyDQt9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRj9GC0LAgQWRtaW5JVFNNQ0lQQWxsb2NhdGUg0LIg0L7QsdC70LDRgdGC0YLQsCDQt9CwINCw0LTQvNC40L3QuNGB0YLRgNC40YDQsNC90LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoNC10LPQuNGB0YLRgNCw0YbQuNGPINC90LAg0L/RgNC10LTQtdC9INC80L7QtNGD0Lsg0LfQsCDQvtCx0LXQutGC0LAgQWdlbnRJVFNNU0xBINCyINC40L3RgtC10YDRhNC10LnRgdCwINC90LAg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoNC10LPQuNGB0YLRgNCw0YbQuNGPINC90LAg0L/RgNC10LTQtdC9INC80L7QtNGD0Lsg0LfQsCDQvtCx0LXQutGC0LAgQWdlbnRJVE1TTEFQcmludCDQsiDQuNC90YLQtdGA0YTQtdC50YHQsCDQvdCwINCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoNC10LPQuNGB0YLRgNCw0YbQuNGPINC90LAg0L/RgNC10LTQtdC9INC80L7QtNGD0Lsg0LfQsCDQvtCx0LXQutGC0LAgQWdlbnRJVFNNU0xBWm9vbSDQsiDQuNC90YLQtdGA0YTQtdC50YHQsCDQvdCwINCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoNC10LPQuNGB0YLRgNCw0YbQuNGPINC90LAg0L/RgNC10LTQtdC9INC80L7QtNGD0Lsg0LfQsCDQvtCx0LXQutGC0LAgQWdlbnRJVFNNU2VydmljZSDQsiDQuNC90YLQtdGA0YTQtdC50YHQsCDQvdCwINCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cg0LXQs9C40YHRgtGA0LDRhtC40Y8g0L3QsCDQv9GA0LXQtNC10L0g0LzQvtC00YPQuyDQt9CwINC+0LHQtdC60YLQsCBBZ2VudElUU01TZXJ2aWNlUHJpbnQg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LAg0L3QsCDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cg0LXQs9C40YHRgtGA0LDRhtC40Y8g0L3QsCDQv9GA0LXQtNC10L0g0LzQvtC00YPQuyDQt9CwINC+0LHQtdC60YLQsCBBZ2VudElUU01TZXJ2aWNlWm9vbSDQsiDQuNC90YLQtdGA0YTQtdC50YHQsCDQvdCwINCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAn0J/RgNC10LPQu9C10LQg0L3QsCBJVFNNIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJ9Cf0YDQtdCz0LvQtdC0INC90LAg0YPRgdC70YPQs9Cw0YLQsCBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAn0KLQuNC/INGB0YrRgdGC0L7Rj9C90LjQtSDQvdCwINC40L3RhtC40LTQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ9CS0LrQu9GO0YfQtdC90LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0L/RgNC40L7RgNC40YLQtdGC0L3QsNGC0LAg0LzQsNGC0YDQuNGG0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgY3JpdGljYWxpdHkgLSBpbXBhY3QgLSBwcmlvcml0eSBtYXRyaXguJ30gPSAn0KPQv9GA0LDQstC70Y/QstCw0LnRgtC1INC80LDRgtGA0LjRhtCw0YLQsCDQutGA0LjRgtC40YfQvdC+0YHRgiDigJMg0LLRitC30LTQtdC50YHRgtCy0LjQtSDigJMg0L/RgNC40L7RgNC40YLQtdGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAn0JzQvtC00YPQuyDQt9CwINC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC10LvQtdC80LXQvdGC0LAg0L7RgiDQvNC10L3RjtGC0L4g0J3QsNC30LDQtCDQsiDQvNC10L3RjtGC0L4g0L3QsCBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn0JzQvtC00YPQuyDQt9CwINC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC10LvQtdC80LXQvdGC0LAg0L7RgiDQvNC10L3RjtGC0L4g0J3QsNC30LDQtCDQsiDRgdC10YDQstC40LfQvdC+0YLQviDQvNC10L3Rji4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICfQnNC+0LTRg9C7INC30LAg0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0LXQu9C10LzQtdC90YLQsCDQvtGCINC80LXQvdGO0YLQviBMaW5rINCyINGB0LXRgNCy0LjQt9C90L7RgtC+INC80LXQvdGOLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ9Cc0L7QtNGD0Lsg0LfQsCDQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDQtdC70LXQvNC10L3RgtCwINC+0YIg0LzQtdC90Y7RgtC+INCf0LXRh9Cw0YIg0LIg0LzQtdC90Y7RgtC+IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn0JzQvtC00YPQuyDQt9CwINC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC10LvQtdC80LXQvdGC0LAg0L7RgiDQvNC10L3RjtGC0L4g0J/QtdGH0LDRgiDQsiDRgdC10YDQstC40LfQvdC+0YLQviDQvNC10L3Rji4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDRgdGK0YHRgtC+0Y/QvdC40Y/RgtCwINC90LAg0LjQvdGG0LjQtNC10L3RgtCwINCyINC40LfQs9C70LXQtNCwINC90LAg0L/RgNC10LTQv9C+0YfQuNGC0LDQvdC40Y/RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAn0KfQsNGB0YIg0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ9Ch0YrQvtGC0LLQtdGC0LXQvSDRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfQndC10L7QsdGF0L7QtNC40Lwg0LfQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICfQn9GA0LXQs9C70LXQtCDQvdCwIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAn0J/QtdGH0LDRgiDQvdCwIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAn0J/QvtC00YDQvtCx0L3QvtGB0YLQuCDQt9CwIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ9Cf0YDQtdCz0LvQtdC0INC90LAg0YPRgdC70YPQs9Cw0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ9Ch0LXRgNCy0LjQt9C10L0g0L/QtdGH0LDRgi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ9Cf0L7QtNGA0L7QsdC90L7RgdGC0Lgg0LfQsCDRg9GB0LvRg9Cz0LDRgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfQntCx0YHQu9GD0LbQstCw0YnQsCDQt9C+0L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAn0JfQsNC00LDQudGC0LUg0YLQuNC/0LAg0Lgg0L/QvtGB0L7QutCw0YLQsCDQvdCwINCy0YDRitC30LrQuNGC0LUsINC60L7QuNGC0L4g0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LDRgiDQt9CwINC40LfRh9C40YHQu9GP0LLQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0LjQvdGG0LjQtNC10L3RgtCwLiDQmtC70Y7Rh9GK0YIg0LUg0LjQvNC10YLQviDQvdCwINGC0LjQv9CwINCy0YDRitC30LrQsCAo0LrQsNC60YLQviDQtSDQtNC10YTQuNC90LjRgNCw0L3QviDQsiBMaW5rT2JqZWN0OjpUeXBlKSwg0LAg0YHRgtC+0LnQvdC+0YHRgtGC0LAg0LUg0L/QvtGB0L7QutCw0YLQsCDQvdCwIEluY2lkZW50TGlua1R5cGUsINC60L7Rj9GC0L4g0YLRgNGP0LHQstCwINC00LAg0YHQtSDRgdC70LXQtNCy0LAsINC30LAg0LTQsCDRgdC1INC40LfRh9C40YHQu9C4INGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDQuNC90YbQuNC00LXQvdGC0LAuINCd0LDQv9GA0LjQvNC10YAsINCw0LrQviBJbmNpZGVudExpbmtUeXBlINC1INC30LDQtNCw0LTQtdC9INC90LAg4oCeRGVwZW5kc09u4oCcINC4INC/0L7RgdC+0LrQsNGC0LAg0LUg4oCeU291cmNl4oCcLCDRidC1INGB0LUg0YHQu9C10LTQstCw0YIg0YHQsNC80L4g0LLRgNGK0LfQutC4IOKAnkRlcGVuZHMgb27igJwgKNCwINC90LUg0L7QsdGA0LDRgtC90LDRgtCwINCy0YDRitC30LrQsCDigJ5SZXF1aXJlZCBmb3LigJwpLCDQt9CwINC00LAg0YHQtSDQuNC30YfQuNGB0LvQuCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0LjQvdGG0LjQtNC10L3RgtCwLiDQnNC+0LbQtdGC0LUg0LTQsCDQtNC+0LHQsNCy0LjRgtC1INC/0L7QstC10YfQtSDRgtC40L/QvtCy0LUg0LLRgNGK0LfQutC4INGA0LXQutC70LDQvNC90Lgg0YPQutCw0LfQsNC90LjRjywg0LrQsNC60YLQviDQttC10LvQsNC10YLQtSwg0L3QsNC/0YAuIOKAntCS0LrQu9GO0YfQstCw4oCcINGBINC/0L7RgdC+0LrQsCDigJ7QptC10LvigJwuINCS0YHQuNGH0LrQuCDRgtC40L/QvtCy0LUg0LLRgNGK0LfQutC4LCDQtNC10YTQuNC90LjRgNCw0L3QuCDQsiDQvtC/0YbQuNC40YLQtSDQvdCwIHN5c2NvbmZpZywgTGlua09iamVjdDo6VHlwZSDRgdCwINCy0YrQt9C80L7QttC90Lgg0Lgg0L/QvtGB0L7QutCw0YLQsCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1IOKAntCY0LfRgtC+0YfQvdC40LrigJwsIOKAntCm0LXQu+KAnCDQuNC70Lgg4oCe0Jgg0LTQstC10YLQteKAnC4g0JLQkNCW0J3Qnjog0KHQm9CV0JQg0JrQkNCi0J4g0J3QkNCf0KDQkNCS0JjQotCVINCf0KDQntCc0JXQndCYINCSINCi0JDQl9CYINCe0J/QptCY0K8g0J3QkCBTWVNDT05GSUcsINCi0KDQr9CR0JLQkCDQlNCQINCY0JfQn9Cq0JvQndCY0KLQlSDQmtCe0J3Ql9Ce0JvQndCQ0KLQkCDQmtCe0JzQkNCd0JTQkCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUsINCi0JDQmtCQINCn0JUg0JLQodCY0KfQmtCYINCh0KrQodCi0J7Qr9Cd0JjQryDQndCQINCY0J3QptCY0JTQldCd0KLQmCDQqdCVINCR0KrQlNCQ0KIg0J/QoNCV0JjQl9Cn0JjQodCb0JXQndCYINCS0KrQlyDQndCe0JLQmNCi0JUg0J3QkNCh0KLQoNCe0JnQmtCYISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoZSBjdXJyZW50IHNlcnZpY2UgaW5jaWRlbnQgc3RhdGUgc2lnbmFsIGluIHRoZSB0aWNrZXQgaW5mb3JtYXRpb24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlJ30gPSAn0JjQt9GC0L7Rh9C90LjQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQotCw0LfQuCDQvdCw0YHRgtGA0L7QudC60LAg0LTQtdGE0LjQvdC40YDQsCwg0YfQtSDQvtCx0LXQutGCIOKAnklUU01DaGFuZ2XigJwg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdCy0YrRgNC30LDQvSDRgSDQvtCx0LXQutGC0Lgg4oCeVGlja2V04oCcINGBINC/0L7QvNC+0YnRgtCwINC90LAg0YLQuNC/0LAg0LLRgNGK0LfQutCwIOKAnk5vcm1hbOKAnC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQotCw0LfQuCDQvdCw0YHRgtGA0L7QudC60LAg0LTQtdGE0LjQvdC40YDQsCwg0YfQtSDQvtCx0LXQutGCIOKAnklUU01Db25maWdJdGVt4oCcINC80L7QttC1INC00LAg0LHRitC00LUg0YHQstGK0YDQt9Cw0L0g0YEg0L7QsdC10LrRgtC4IOKAntCn0JfQkuKAnCwg0LrQsNGC0L4g0YHQtSDQuNC30L/QvtC70LfQstCwINGC0LjQv9GK0YIg0LLRgNGK0LfQutCwIOKAntCd0L7RgNC80LDQu9C10L3igJwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQotCw0LfQuCDQvdCw0YHRgtGA0L7QudC60LAg0LTQtdGE0LjQvdC40YDQsCwg0YfQtSDQvtCx0LXQutGCIOKAnklUU01Db25maWdJdGVt4oCcINC80L7QttC1INC00LAg0LHRitC00LUg0YHQstGK0YDQt9Cw0L0g0YEg0L7QsdC10LrRgtC4IOKAntCn0JfQkuKAnCDRgSDQv9C+0LzQvtGJ0YLQsCDQvdCwINGC0LjQv9CwINCy0YDRitC30LrQsCDigJ5QYXJlbnRDaGlsZOKAnC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0KLQsNC30Lgg0L3QsNGB0YLRgNC+0LnQutCwINC00LXRhNC40L3QuNGA0LAsINGH0LUg0L7QsdC10LrRgiDigJ5JVFNNQ29uZmlnSXRlbeKAnCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LLRitGA0LfQsNC9INGBINC+0LHQtdC60YLQuCDigJ7Qp9CX0JLigJwg0YEg0L/QvtC80L7RidGC0LAg0L3QsCDRgtC40L/QsCDQstGA0YrQt9C60LAg4oCeUmVsZXZhbnRUb+KAnC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ci0LDQt9C4INC90LDRgdGC0YDQvtC50LrQsCDQvtC/0YDQtdC00LXQu9GPLCDRh9C1INC+0LHQtdC60YIg4oCeSVRTTUNvbmZpZ0l0ZW3igJwg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdCy0YrRgNC30LDQvSDRgSDQvtCx0LXQutGC0Lgg4oCeU2VydmljZeKAnCDRgSDQv9C+0LzQvtGJ0YLQsCDQvdCwINGC0LjQv9CwINCy0YDRitC30LrQsCDigJ5BbHRlcm5hdGl2ZVRv4oCcLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQotCw0LfQuCDQvdCw0YHRgtGA0L7QudC60LAg0L7Qv9GA0LXQtNC10LvRjywg0YfQtSDQvtCx0LXQutGCIOKAnklUU01Db25maWdJdGVt4oCcINC80L7QttC1INC00LAg0LHRitC00LUg0YHQstGK0YDQt9Cw0L0g0YEg0L7QsdC10LrRgtC4IOKAnlNlcnZpY2XigJwsINC40LfQv9C+0LvQt9Cy0LDQudC60Lgg0YLQuNC/0LAg0LLRgNGK0LfQutCwIOKAnkRlcGVuZHNPbuKAnC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ci0LDQt9C4INC90LDRgdGC0YDQvtC50LrQsCDQtNC10YTQuNC90LjRgNCwLCDRh9C1INC+0LHQtdC60YIg4oCeSVRTTUNvbmZpZ0l0ZW3igJwg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdCy0YrRgNC30LDQvSDRgSDQvtCx0LXQutGC0Lgg4oCeU2VydmljZeKAnCDRgSDQv9C+0LzQvtGJ0YLQsCDQvdCwINGC0LjQv9CwINCy0YDRitC30LrQsCDigJ5SZWxldmFudFRv4oCcLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQotCw0LfQuCDQvdCw0YHRgtGA0L7QudC60LAg0L7Qv9GA0LXQtNC10LvRjywg0YfQtSDQvtCx0LXQutGCIOKAnklUU01Db25maWdJdGVt4oCcINC80L7QttC1INC00LAg0LHRitC00LUg0YHQstGK0YDQt9Cw0L0g0YEg0L7QsdC10LrRgtC4IOKAnlRpY2tldOKAnCDRgSDQv9C+0LzQvtGJ0YLQsCDQvdCwINGC0LjQv9CwINCy0YDRitC30LrQsCDigJ5BbHRlcm5hdGl2ZVRv4oCcLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ci0LDQt9C4INC90LDRgdGC0YDQvtC50LrQsCDQvtC/0YDQtdC00LXQu9GPLCDRh9C1INC+0LHQtdC60YIg4oCeSVRTTUNvbmZpZ0l0ZW3igJwg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdCy0YrRgNC30LDQvSDRgSDQvtCx0LXQutGC0Lgg4oCeVGlja2V04oCcINGBINC/0L7QvNC+0YnRgtCwINC90LAg0YLQuNC/0LAg0LLRgNGK0LfQutCwIOKAnkRlcGVuZHNPbuKAnC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0KLQsNC30Lgg0L3QsNGB0YLRgNC+0LnQutCwINC+0L/RgNC10LTQtdC70Y8sINGH0LUg0L7QsdC10LrRgiDigJ5JVFNNQ29uZmlnSXRlbeKAnCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LLRitGA0LfQsNC9INGBINC+0LHQtdC60YLQuCDigJ5UaWNrZXTigJwg0YEg0L/QvtC80L7RidGC0LAg0L3QsCDRgtC40L/QsCDQstGA0YrQt9C60LAg4oCeUmVsZXZhbnRUb+KAnC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQotCw0LfQuCDQvdCw0YHRgtGA0L7QudC60LAg0LTQtdGE0LjQvdC40YDQsCwg0YfQtSDQvtCx0LXQutGCIOKAnklUU01Db25maWdJdGVt4oCcINC80L7QttC1INC00LAg0LHRitC00LUg0YHQstGK0YDQt9Cw0L0g0YEg0LTRgNGD0LPQuCDQvtCx0LXQutGC0Lgg4oCeSVRTTUNvbmZpZ0l0ZW3igJwg0YEg0L/QvtC80L7RidGC0LAg0L3QsCDRgtC40L/QsCDQstGA0YrQt9C60LAg4oCe0JDQu9GC0LXRgNC90LDRgtC40LLQsCDQutGK0LzigJwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ci0LDQt9C4INC90LDRgdGC0YDQvtC50LrQsCDQtNC10YTQuNC90LjRgNCwLCDRh9C1INC+0LHQtdC60YLRitGCIOKAnklUU01Db25maWdJdGVt4oCcINC80L7QttC1INC00LAg0LHRitC00LUg0YHQstGK0YDQt9Cw0L0g0YEg0LTRgNGD0LPQuCDQvtCx0LXQutGC0Lgg4oCeSVRTTUNvbmZpZ0l0ZW3igJwsINC40LfQv9C+0LvQt9Cy0LDQudC60Lgg0YLQuNC/0LAg0LLRgNGK0LfQutCwIOKAnkNvbm5lY3RlZFRv4oCcLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0KLQsNC30Lgg0L3QsNGB0YLRgNC+0LnQutCwINC00LXRhNC40L3QuNGA0LAsINGH0LUg0L7QsdC10LrRgiDigJ5JVFNNQ29uZmlnSXRlbeKAnCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LLRitGA0LfQsNC9INGBINC00YDRg9Cz0Lgg0L7QsdC10LrRgtC4IOKAnklUU01Db25maWdJdGVt4oCcINGBINC/0L7QvNC+0YnRgtCwINC90LAg0YLQuNC/0LAg0LLRgNGK0LfQutCwIOKAnkRlcGVuZHNPbuKAnC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0KLQsNC30Lgg0L3QsNGB0YLRgNC+0LnQutCwINC00LXRhNC40L3QuNGA0LAsINGH0LUg0L7QsdC10LrRgiDigJ5JVFNNQ29uZmlnSXRlbeKAnCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LLRitGA0LfQsNC9INGBINC00YDRg9Cz0Lgg0L7QsdC10LrRgtC4IOKAnklUU01Db25maWdJdGVt4oCcINGBINC/0L7QvNC+0YnRgtCwINC90LAg0YLQuNC/0LAg0LLRgNGK0LfQutCwIOKAntCS0LrQu9GO0YfQstCw4oCcLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ci0LDQt9C4INC90LDRgdGC0YDQvtC50LrQsCDQtNC10YTQuNC90LjRgNCwLCDRh9C1INC+0LHQtdC60YLRitGCIOKAnklUU01Db25maWdJdGVt4oCcINC80L7QttC1INC00LAg0LHRitC00LUg0YHQstGK0YDQt9Cw0L0g0YEg0LTRgNGD0LPQuCDQvtCx0LXQutGC0Lgg4oCeSVRTTUNvbmZpZ0l0ZW3igJwsINC40LfQv9C+0LvQt9Cy0LDQudC60Lgg0YLQuNC/0LAg0LLRgNGK0LfQutCwIOKAnlJlbGV2YW50VG/igJwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ci0LDQt9C4INC90LDRgdGC0YDQvtC50LrQsCDQtNC10YTQuNC90LjRgNCwLCDRh9C1IOKAnklUU01Db25maWdJdGVt4oCcINC80L7QttC1INC00LAg0LHRitC00LUg0YHQstGK0YDQt9Cw0L0g0YEg0LTRgNGD0LPQuCDQvtCx0LXQutGC0Lgg4oCeSVRTTUNvbmZpZ0l0ZW3igJwg0YEg0L/QvtC80L7RidGC0LAg0L3QsCDQstGA0YrQt9C60LDRgtCwIOKAntCS0LrQu9GO0YfQstCw4oCcLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQotCw0LfQuCDQvdCw0YHRgtGA0L7QudC60LAg0L7Qv9GA0LXQtNC10LvRjywg0YfQtSDQvtCx0LXQutGCIOKAnklUU01Xb3JrT3JkZXLigJwg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdCy0YrRgNC30LDQvSDRgSDQvtCx0LXQutGC0Lgg4oCeSVRTTUNvbmZpZ0l0ZW3igJwsINC60LDRgtC+INGB0LUg0LjQt9C/0L7Qu9C30LLQsCDRgtC40L8g0LLRgNGK0LfQutCwIOKAntCd0L7RgNC80LDQu9C10L3igJwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0KLQsNC30Lgg0L3QsNGB0YLRgNC+0LnQutCwINC00LXRhNC40L3QuNGA0LAsINGH0LUg0L7QsdC10LrRgiDigJ5JVFNNV29ya09yZGVy4oCcINC80L7QttC1INC00LAg0LHRitC00LUg0YHQstGK0YDQt9Cw0L0g0YEg0L7QsdC10LrRgtC4IOKAnlNlcnZpY2XigJwg0YEg0L/QvtC80L7RidGC0LAg0L3QsCDRgtC40L/QsCDQstGA0YrQt9C60LAg4oCeRGVwZW5kc09u4oCcLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ci0LDQt9C4INC90LDRgdGC0YDQvtC50LrQsCDQvtC/0YDQtdC00LXQu9GPLCDRh9C1INC+0LHQtdC60YIg4oCeSVRTTVdvcmtPcmRlcuKAnCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LLRitGA0LfQsNC9INGBINC+0LHQtdC60YLQuCDigJ5TZXJ2aWNl4oCcLCDQutCw0YLQviDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0YLQuNC/INCy0YDRitC30LrQsCDigJ5Ob3JtYWzigJwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQotCw0LfQuCDQvdCw0YHRgtGA0L7QudC60LAg0LTQtdGE0LjQvdC40YDQsCwg0YfQtSDQvtCx0LXQutGCIOKAnklUU01Xb3JrT3JkZXLigJwg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdCy0YrRgNC30LDQvSDRgSDQvtCx0LXQutGC0Lgg4oCeVGlja2V04oCcLCDQutCw0YLQviDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0YLQuNC/INCy0YDRitC30LrQsCDigJ7QndC+0YDQvNCw0LvQtdC94oCcLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0KLQsNC30Lgg0L3QsNGB0YLRgNC+0LnQutCwINC+0L/RgNC10LTQtdC70Y8sINGH0LUg0L7QsdC10LrRgiDigJ7Qo9GB0LvRg9Cz0LDigJwg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdCy0YrRgNC30LDQvSDRgSDQvtCx0LXQutGC0Lgg4oCe0KfQtdGB0YLQviDQt9Cw0LTQsNCy0LDQvdC4INCy0YrQv9GA0L7RgdC44oCcLCDQutCw0YLQviDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0YLQuNC/INCy0YDRitC30LrQsCDigJ7QndC+0YDQvNCw0LvQtdC94oCcLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQotCw0LfQuCDQvdCw0YHRgtGA0L7QudC60LAg0L7Qv9GA0LXQtNC10LvRjywg0YfQtSDQvtCx0LXQutGCIOKAntCj0YHQu9GD0LPQsOKAnCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LLRitGA0LfQsNC9INGBINC+0LHQtdC60YLQuCDigJ7Qp9C10YHRgtC+INC30LDQtNCw0LLQsNC90Lgg0LLRitC/0YDQvtGB0LjigJwg0YEg0L/QvtC80L7RidGC0LAg0L3QsCDRgtC40L/QsCDQstGA0YrQt9C60LAg4oCe0KDQvtC00LjRgtC10Lst0LTQtdGC0LXigJwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0KLQsNC30Lgg0L3QsNGB0YLRgNC+0LnQutCwINC00LXRhNC40L3QuNGA0LAsINGH0LUg0L7QsdC10LrRgiDigJ7Qo9GB0LvRg9Cz0LDigJwg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdCy0YrRgNC30LDQvSDRgSDQvtCx0LXQutGC0Lgg4oCe0KfQtdGB0YLQviDQt9Cw0LTQsNCy0LDQvdC4INCy0YrQv9GA0L7RgdC44oCcINGBINC/0L7QvNC+0YnRgtCwINC90LAg0YLQuNC/0LAg0LLRgNGK0LfQutCwIOKAntCh0YrQvtGC0LLQtdGC0L3QviDQvdCw4oCcLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQotCw0LfQuCDQvdCw0YHRgtGA0L7QudC60LAg0LTQtdGE0LjQvdC40YDQsCDRgtC40L/QsCDQstGA0YrQt9C60LAg4oCe0JDQu9GC0LXRgNC90LDRgtC40LLQsCDQvdCw4oCcLiDQkNC60L4g0LjQvNC10YLQviDQvdCwINC40LfRgtC+0YfQvdC40LrQsCDQuCDQuNC80LXRgtC+INC90LAg0YbQtdC70YLQsCDRgdGK0LTRitGA0LbQsNGCINC10LTQvdCwINC4INGB0YrRidCwINGB0YLQvtC50L3QvtGB0YIsINC/0L7Qu9GD0YfQtdC90LDRgtCwINCy0YDRitC30LrQsCDQtSDQvdC1INC90LDRgdC+0YfQtdC90LAuINCQ0LrQviDRgdGC0L7QudC90L7RgdGC0LjRgtC1INGB0LAg0YDQsNC30LvQuNGH0L3QuCwg0L/QvtC70YPRh9C10L3QsNGC0LAg0LLRgNGK0LfQutCwINC1INC90LDRgdC+0YfQtdC90LAg0LLRgNGK0LfQutCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0KLQsNC30Lgg0L3QsNGB0YLRgNC+0LnQutCwINC00LXRhNC40L3QuNGA0LAg0YLQuNC/0LAg0LLRgNGK0LfQutCwIOKAntCh0LLRitGA0LfQsNC9INGB4oCcLiDQkNC60L4g0LjQvNC10YLQviDQvdCwINC40LfRgtC+0YfQvdC40LrQsCDQuCDQuNC80LXRgtC+INC90LAg0YbQtdC70YLQsCDRgdGK0LTRitGA0LbQsNGCINC10LTQvdCwINC4INGB0YrRidCwINGB0YLQvtC50L3QvtGB0YIsINC/0L7Qu9GD0YfQtdC90LDRgtCwINCy0YDRitC30LrQsCDQtSDQvdC1INC90LDRgdC+0YfQtdC90LAuINCQ0LrQviDRgdGC0L7QudC90L7RgdGC0LjRgtC1INGB0LAg0YDQsNC30LvQuNGH0L3QuCwg0L/QvtC70YPRh9C10L3QsNGC0LAg0LLRgNGK0LfQutCwINC1INC90LDRgdC+0YfQtdC90LAg0LLRgNGK0LfQutCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ9Ci0LDQt9C4INC90LDRgdGC0YDQvtC50LrQsCDQtNC10YTQuNC90LjRgNCwINGC0LjQv9CwINCy0YDRitC30LrQsCDigJ5EZXBlbmRzT27igJwuINCQ0LrQviDQuNC80LXRgtC+INC90LAg0LjQt9GC0L7Rh9C90LjQutCwINC4INC40LzQtdGC0L4g0L3QsCDRhtC10LvRgtCwINGB0YrQtNGK0YDQttCw0YIg0LXQtNC90LAg0Lgg0YHRitGJ0LAg0YHRgtC+0LnQvdC+0YHRgiwg0L/QvtC70YPRh9C10L3QsNGC0LAg0LLRgNGK0LfQutCwINC1INC90LUg0L3QsNGB0L7Rh9C10L3QsC4g0JDQutC+INGB0YLQvtC50L3QvtGB0YLQuNGC0LUg0YHQsCDRgNCw0LfQu9C40YfQvdC4LCDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQstGA0YrQt9C60LAg0LUg0L3QsNGB0L7Rh9C10L3QsCDQstGA0YrQt9C60LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQotCw0LfQuCDQvdCw0YHRgtGA0L7QudC60LAg0LTQtdGE0LjQvdC40YDQsCDRgtC40L/QsCDQstGA0YrQt9C60LAg4oCe0JLQutC70Y7Rh9Cy0LDigJwuINCQ0LrQviDQuNC80LXRgtC+INC90LAg0LjQt9GC0L7Rh9C90LjQutCwINC4INC40LzQtdGC0L4g0L3QsCDRhtC10LvRgtCwINGB0YrQtNGK0YDQttCw0YIg0LXQtNC90LAg0Lgg0YHRitGJ0LAg0YHRgtC+0LnQvdC+0YHRgiwg0L/QvtC70YPRh9C10L3QsNGC0LAg0LLRgNGK0LfQutCwINC90LUg0LUg0L3QsNGB0L7Rh9C10L3QsC4g0JDQutC+INGB0YLQvtC50L3QvtGB0YLQuNGC0LUg0YHQsCDRgNCw0LfQu9C40YfQvdC4LCDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQstGA0YrQt9C60LAg0LUg0L3QsNGB0L7Rh9C10L3QsCDQstGA0YrQt9C60LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdMb2NhdGlvbk9mXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQotCw0LfQuCDQvdCw0YHRgtGA0L7QudC60LAg0LTQtdGE0LjQvdC40YDQsCDRgtC40L/QsCDQstGA0YrQt9C60LAg4oCe0KHRitC+0YLQstC10YLQvdC+INC90LDigJwuINCQ0LrQviDQuNC80LXRgtC+INC90LAg0LjQt9GC0L7Rh9C90LjQutCwINC4INC40LzQtdGC0L4g0L3QsCDRhtC10LvRgtCwINGB0YrQtNGK0YDQttCw0YIg0LXQtNC90LAg0Lgg0YHRitGJ0LAg0YHRgtC+0LnQvdC+0YHRgiwg0L/QvtC70YPRh9C10L3QsNGC0LAg0LLRgNGK0LfQutCwINC90LUg0LUg0L3QsNGB0L7Rh9C10L3QsC4g0JDQutC+INGB0YLQvtC50L3QvtGB0YLQuNGC0LUg0YHQsCDRgNCw0LfQu9C40YfQvdC4LCDQv9C+0LvRg9GH0LXQvdCw0YLQsCDQstGA0YrQt9C60LAg0LUg0L3QsNGB0L7Rh9C10L3QsCDQstGA0YrQt9C60LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ9Co0LjRgNC40L3QsCDQvdCwIElUU00g0YLQtdC60YHRgtC+0LLQuNGC0LUg0L7QsdC70LDRgdGC0LguJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/ca_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmNhX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/cs_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmNzX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnS3JpdGnEjW5vc3TihpRWbGl24oaUUHJpb3JpdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQWxva2FjZSBwcmlvcml0JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWluaW3DoWxuw60gxI1hcyBtZXppIGluY2lkZW50eSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0tyaXRpxI1ub3N0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEEgSW5mb3JtYWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ05hcG9zbGVkeSB6bcSbbsSbbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdOYXBvc2xlZHkgem3Em25pbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnUMWZacWZYXplbsOpIFNsdcW+YnknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnUMWZacWZYXplbsOpIFNMQSBzbWxvdXZ5JzsKCiAgICAjIFRlbXBsYXRlOiBUaWNrZXRJbmZvcm1hdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIENyaXRpY2FsaXR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnVmxpdic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdTb3XEjWFzbsO9IFN0YXYgSW5jaWRlbnR1JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YXYgSW5jaWRlbnR1JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXh0ZXJuYWwtc291cmNlIGtleSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgLyBTT1BNIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmHEjW7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0luY2lkZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdTbHXFvmJ5IGtvbmNvdsO9bSB1xb5pdmF0ZWzFr20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnWsOha2F6bmlja8OpIHJvemhyYW7DrS9Gcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ1rDoWtsYWRuw60gcm96aHJhbsOtL0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ8WYw616ZW7DrSBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSZXBvcnRpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBPcGVyYWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdVa8OhemthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1rDoWtsYWRuw60gc21sb3V2YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0RhbMWhw60nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnRG9zdHVwbm9zdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnxIxhcyBvZHBvdsSbZGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ8SMYXMgb2Jub3Z5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ8SMYXMgxZllxaFlbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha2NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0NoeWJ5JzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2bsOtIGsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdTcG9qZW4gcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ1rDoXZpc8OtIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ1phaHJudWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0ZWQgaW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRpb24gb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBjcml0aWNhbGl0eSAtIGltcGFjdCAtIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ8SMw6FzdCB6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnRuw60gayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdQb8W+YWRvdmFuw70gcHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQSBQxZllaGxlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnUMWZZWhsZWQgU2x1xb5ieSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1Byb3N0b3Igw5pkcsW+YnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoZSBjdXJyZW50IHNlcnZpY2UgaW5jaWRlbnQgc3RhdGUgc2lnbmFsIGluIHRoZSB0aWNrZXQgaW5mb3JtYXRpb24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Z2dlc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdMb2NhdGlvbk9mXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdMb2NhdGlvbk9mXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/da_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRhX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnS3JpdGlrYWxpdGV0IOKGlCBQw6V2aXJrbmluZyDihpQgUHJpb3JpdGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ01pbmltdW1zdGlkIG1lbGxlbSBJbmNpZGVudHMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWthbGl0ZXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdTaWRzdCDDpm5kcmV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1NpZHN0IMOmbmRyZXQgYWYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1RpbGtueXR0ZWRlIHNlcnZpY2VzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1RpbGtueXR0ZWRlIFNMQXMnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdQw6V2aXJrbmluZyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdOdXbDpnJlbmRlIEluY2lkZW50IHRpbHN0YW5kJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0luY2lkZW50IHRpbHN0YW5kJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXh0ZXJuYWwtc291cmNlIGtleSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgLyBTT1BNIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmF0aW9uZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnS3VuZGVzZXJ2aWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFja2VuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVQgTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSZXBvcnRlcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUIG9wZXJhdGlvbmVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1VuZGVybGlnZ2VuZGUga29udHJha3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbmRyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdUaWxnw6ZuZ2VsaWdoZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1JlYWt0aW9uc3RpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnR2VuZXRhYmxlcmluZ3N0aWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnTMO4c25pbmdzcmF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2FrdGlvbmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0ZlamwnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ0FsdGVybmF0aXYgdGlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJUEFsbG9jYXRpb246IE92ZXJ3cml0ZSBwcmlvcml0eSBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBEZWZhdWx0IGZhbGxiYWNrOiBGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnRm9yYnVuZGV0IHRpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0FmaMOmbmdlciBhZic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmRrbHVkZXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0ZWQgaW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRpb24gb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBjcml0aWNhbGl0eSAtIGltcGFjdCAtIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ0RlbCBhZic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50IGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdLcsOmdmVzIGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEEgb3ZlcnNpZ3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1NlcnZpY2Ugb3ZlcnNpZ3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdTZXJ2aWNlIG9tcsOlZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoZSBjdXJyZW50IHNlcnZpY2UgaW5jaWRlbnQgc3RhdGUgc2lnbmFsIGluIHRoZSB0aWNrZXQgaW5mb3JtYXRpb24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Z2dlc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdMb2NhdGlvbk9mXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdMb2NhdGlvbk9mXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/de_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnS3JpdGlrYWxpdMOkdCDihpQgQXVzd2lya3VuZyDihpQgUHJpb3JpdMOkdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnVmVyd2FsdGVuIFNpZSBkYXMgUHJpb3JpdMOkdHNlcmdlYm5pcyBkZXIgS29tYmluYXRpb24gdm9uIEtyaXRpa2FsaXTDpHQg4oaUIEF1c3dpcmt1bmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdQcmlvcml0w6R0cy1adW9yZG51bmcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5pbWFsZSBaZWl0IHp3aXNjaGVuIGRlbiBWb3Jmw6RsbGVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnS3JpdGlrYWxpdMOkdCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnU0xBLUluZm9ybWF0aW9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnWnVsZXR6dCBnZcOkbmRlcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnWnVsZXR6dCBnZcOkbmRlcnQgdm9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdadWdlaMO2cmlnZSBTZXJ2aWNlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdTZXJ2aWNlLUluZm9ybWF0aW9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0FrdHVlbGxlciBWb3JmYWxsc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1p1Z2Vow7ZyaWdlIFNMQXMnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnU2VydmljZS1Wb3JmYWxsc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICdTZXJ2aWNlLUtyaXRpa2FsaXTDpHQnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdBdXN3aXJrdW5nJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnS2VpbmUgU0xBSUQgdm9yaGFuZGVuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU0xBSUQgIiVzIiBpbiBkZXIgRGF0ZW5iYW5rIG5pY2h0IGdlZnVuZGVuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnU3RhbmRhcmQtS2FsZW5kZXInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnb3BlcmF0aXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJ1dhcm51bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICdWb3JmYWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJ0tlaW5lIFNlcnZpY2VJRCB2b3JoYW5kZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU2VydmljZUlEICVzIG5pY2h0IGluIERhdGVuYmFuayBnZWZ1bmRlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0FrdHVlbGxlciBWb3JmYWxsc3RhdHVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1ZvcmZhbGxzdGF0dXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkL0RyaXZlci9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHRlcm5hbC1zb3VyY2Uga2V5J30gPSAnU2NobMO8c3NlbCBkZXIgZXh0ZXJuZW4gUXVlbGxlJzsKCiAgICAjIERhdGFiYXNlIFhNTCAvIFNPUE0gRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYXRpdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ1ZvcmZhbGwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ0Fud2VuZGVyLVNlcnZpY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdJVC1NYW5hZ2VtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ0JlcmljaHRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVQgQmV0cmllYic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdadWdydW5kZWxpZWdlbmRlciBWZXJ0cmFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnU29uc3RpZ2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ1ZlcmbDvGdiYXJrZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdSZWFrdGlvbnN6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdXaWVkZXJoZXJzdGVsbHVuZ3N6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ0zDtnN1bmdzcXVvdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3Rpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdGZWhsZXInOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ0FsdGVybmF0aXYgenUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJ0NJUEFsbG9jYXRpb246IFByaW9yaXTDpHQgYmFzaWVyZW5kIGF1ZiBLcml0aWthbGl0w6R0IHVuZCBBdXN3aXJrdW5nIMO8YmVyc2NocmVpYmVuLiBTdGFuZGFyZC1GYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdWZXJidW5kZW4gbWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYmVoYXZpb3Igb2YgcHJpb3JpdHkgYWxsb2NhdGlvbiBpbiB0aGUgZnJvbnRlbmRzIGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIENhbiBiZSBvdmVycnVsZWQgYnkgZnJvbnRlbmQgc3BlY2lmaWMgUHJpb3JpdHlCeUNJUCBzZXR0aW5ncy4nfSA9CiAgICAgICAgJ1N0YW5kYXJkdmVyaGFsdGVuIGRlciBQcmlvcml0w6R0c3p1d2Vpc3VuZyBpbiBkZW4gRnJvbnRlbmRzIGJhc2llcmVuZCBhdWYgS3JpdGlrYWxpdMOkdCB1bmQgQXVzd2lya3VuZy4gS2FubiBkdXJjaCBmcm9udGVuZC1zcGV6aWZpc2NoZSBQcmlvcml0eUJ5Q0lQLUVpbnN0ZWxsdW5nZW4gw7xiZXJzY2hyaWViZW4gd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnRGVmaW5pZXJlbiBTaWUgQWN0aW9ucywgaW4gZGVuZW4gaW0gVmVya27DvHBmdGUtT2JqZWt0ZS1XaWRnZXQgZWluIEVpbnN0ZWxsdW5nZW4tS25vcGYgdmVyZsO8Z2JhciBzZWluIHNvbGwgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gQml0dGUgYmVhY2h0ZW4gU2llLCBkYXNzIGbDvHIgZGllc2UgQWN0aW9ucyBkaWUgZm9sZ2VuZGVuIEpTLSB1bmQgQ1NTLURhdGVpZW4gcmVnaXN0cmllcnQgc2VpbiBtw7xzc2VuOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyB1bmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IHdlbGNoZSBTcGFsdGVuIGltIFdpZGdldCAiVmVya27DvHBmdGUgU2VydmljZXMiIGFuZ2V6ZWlndCB3ZXJkZW4gKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gSGlud2VpczogRXMgc2luZCBudXIgU2VydmljZS1FaWdlbnNjaGFmdGVuIGFscyBEZWZhdWx0LVNwYWx0ZW4gZXJsYXVidC4gTcO2Z2xpY2hlIFdlcnRlOiAwID0gRGVha3RpdmllcnQsIDEgPSBWZXJmw7xnYmFyLCAyID0gU3RhbmRhcmRtw6TDn2lnIGFrdGl2aWVydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBlaW5lIExpc3RlIHZvbiBPbmxpbmUtUXVlbGxlbi4gQW5kZXJlIEluc3RhbGxhdGlvbmVuIGvDtm5uZW4gYWxzIFF1ZWxsZSBnZW51dHp0IHdlcmRlbiB6LkIuIEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgdW5kIENvbnRlbnQ9IklyZ2VuZGVpbiBOYW1lIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0jDpG5ndCBhYiB2b24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5mb3JjZSd9ID0gJ0ZvcmNpZXJlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kLU1vZHVscmVnaXN0cmllcnVuZyBkZXIgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgS29uZmlndXJhdGlvbiBpbSBBZG1pbi1CZXJlaWNoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQtTW9kdWxyZWdpc3RyaWVydW5nIGRlcyBBZ2VudElUU01TTEEtT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kLU1vZHVscmVnaXN0cmllcnVuZyBkZXMgQWdlbnRJVFNNU0xBUHJpbnQtT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQtTW9kdWxyZWdpc3RyaWVydW5nIGRlcyBBZ2VudElUU01TTEFab29tLU9iamVrdHMgaW0gQWdlbnQtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kLU1vZHVscmVnaXN0cmllcnVuZyBkZXMgQWdlbnRJVFNNU2VydmljZS1PYmpla3RzIGltIEFnZW50LUludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kLU1vZHVscmVnaXN0cmllcnVuZyBkZXMgQWdlbnRJVFNNU2VydmljZVByaW50LU9iamVrdHMgaW0gQWdlbnQtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZC1Nb2R1bHJlZ2lzdHJpZXJ1bmcgZGVzIEFnZW50SVRTTVNlcnZpY2Vab29tLU9iamVrdHMgaW0gQWdlbnQtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICdJVFNNIFNMQS3DnGJlcnNpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnSVRTTS1TZXJ2aWNlcy3DnGJlcnNpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnVm9yZmFsbHN0YXR1cy1UeXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdCZWluaGFsdGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0ZWQgaW4nfSA9ICdBbmdlc2llZGVsdCBpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJ09ydCB2b24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdQcmlvcml0w6R0cy1NYXRyaXggdmVyd2FsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJ0tyaXRpa2FsaXTDpHQtQXVzd2lya3VuZy1Qcmlvcml0w6R0cy1NYXRyaXggdmVyd2FsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdWwsIGRhcyBkZW4gTWVuw7xlaW50cmFnIOKAnlp1csO8Y2vigJwgaW0gU0xBLU1lbsO8IGFuemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwsIGRhcyBkZW4gIlp1csO8Y2siLU1lbsO8ZWludHJhZyBpbSBTZXJ2aWNlLU1lbsO8IGFuemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwsIGRhc3MgZGVuICJWZXJrw7xwZmVuIi1NZW7DvGVpbnRyYWcgaW0gU2VydmljZS1NZW7DvCBhbnplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ01vZHVsLCBkYXNzIGRlbiAiQXVzZHJ1Y2tlbiItTWVuw7xlaW50cmFnIGltIFNMQS1NZW7DvCBhbnplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bCwgZGFzcyBkZW4gIkF1c2RydWNrZW4iLU1lbsO8ZWludHJhZyBpbSBTZXJ2aWNlLU1lbsO8IGFuemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZid9ID0gJ0F1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyYW1ldGVyIGbDvHIgZGVuIFZvcmZhbGxzc3RhdHVzIGluIGRlciBBbnNpY2h0IGbDvHIgZGllIEVpbnN0ZWxsdW5nZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdUZWlsIHZvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50IGbDvHInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnQmVuw7Z0aWd0IGbDvHInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xBLcOcYmVyc2ljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ1NMQS1BdWRydWNrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdTTEEtRGV0YWlsYW5zaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1NlcnZpY2Utw5xiZXJzaWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ1NlcnZpY2UgQXVzZHJ1Y2tlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ1NlcnZpY2UtRGV0YWlsYW5zaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnU2VydmljZS1CZXJlaWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICdTZXR6ZW4gZGVzIFR5cHMgdW5kIGRlciBSaWNodHVuZyBkZXIgdmVyd2VuZGV0ZW4gTGlua3MsIHVtIGRlbiBWb3JmYWxsc3RhdHVzIHp1IGJlcmVjaG5lbi4gRGVyIFNjaGzDvHNzZWwgaXN0IGRlciBOYW1lIGRlcyBMaW5rLVR5cHMgKHdpZSBpbiBMaW5rT2JqZWN0OjpUeXBlIGRlZmluaWVydCksIHVuZCBkZXIgV2VydCBpc3QgZGllIFJpY2h0dW5nIGRlcyBJbmNpZGVudExpbmtUeXBlLCBkaWUgYmVmb2xndCB3ZXJkZW4gc29sbCwgdW0gZGVuIEluY2lkZW50LVN0YXR1cyB6dSBiZXJlY2huZW4uIFp1bSBCZWlzcGllbCwgd2VubiBkZXIgSW5jaWRlbnRMaW5rVHlwZSBhdWYgXCdEZXBlbmRzT25cJyB1bmQgYWxzIFJpY2h0dW5nIFwnUXVlbGxlXCcgZ2VzZXR6dCBpc3QsIHdpcmQgbnVyIFwnRGVwZW5kc1wnIExpbmtzIGdlZm9sZ3QgKHVuZCBuaWNodCBkZW0gR2VnZW50ZWlsIFwnQmVuw7Z0aWd0IGbDvHJcJykgdW0gZGVuIEluY2lkZW50U3RhdGUgenUgYmVyZWNobmVuLiBTaWUga8O2bm5lbiBzb3ZpZWxlIExpbmstVHlwZW4gdW5kIFJpY2h0dW5nZW4gaGluenVmw7xnZW4gd2llIFNpZSBtw7ZjaHRlbiwgei5CLjogXCdFbnRow6RsdFwnIG1pdCBkZXIgUmljaHR1bmcgXCdUYXJnZXRcJy4gQWxsZSBpbiBkZXIgU3lzY29uZmlnIHVudGVyIExpbmtvYmplY3Q6OlR5cGUgZGVmaW5pZXJ0ZW4gVmVya27DvHBmdW5nc2FydGVuIHNpbmQgbcO2Z2xpY2ggc2luZCB1bmQgZGllIFJpY2h0dW5nIGthbm4gXCdRdWVsbGVcJywgXCdaaWVsXCcgb2RlciBcJ0JlaWRlXCcgc2Vpbi4gV0lDSFRJRzogTmFjaGRlbSBTaWUgw4RuZGVydW5nZW4gYW4gZGllc2VyIFN5c2NvbmZpZy1FaW5zdGVsbHVuZyBnZW1hY2h0IGhhYmVuLCBmw7xocmVuIFNpZSBkYXMgU2tyaXB0IGJpbi9vdG9iby5JVFNNQ29uZmlnSXRlbUluY2lkZW50U3RhdGVSZWNhbGN1bGF0ZS5wbCBTTyBhdXMsIGRhbWl0IGFsbGUgVm9yZmFsbHN0YXR1cyBhbmhhbmQgZGVyIG5ldWVuIEVpbnN0ZWxsdW5nZW4gYmVyZWNobmV0IHdlcmRlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnWmVpZ2UgZGVuIGFrdHVlbGxlbiBTZXJ2aWNlLVZvcmZhbGxzdGF0dXMgaW4gZGVuIFRpY2tldGluZm9ybWF0aW9uZW4gYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJ1F1ZWxsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnVm9yc2NobGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNoYW5nZVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgXCdUaWNrZXRcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnTm9ybWFsXCcgbWl0IFwnRkFRXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnUGFyZW50Q2hpbGRcJyBtaXQgXCdGQVFcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgXCdGQVFcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdBbHRlcm5hdGl2ZVRvXCcgbWl0IFwnU2VydmljZVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnRGVwZW5kc09uXCcgbWl0IFwnU2VydmljZVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgXCdTZXJ2aWNlXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdBbHRlcm5hdGl2ZVRvXCcgbWl0IFwnVGlja2V0XCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0RlcGVuZHNPblwnIG1pdCBcJ1RpY2tldFwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnUmVsZXZhbnRUb1wnIG1pdCBcJ1RpY2tldFwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdBbHRlcm5hdGl2ZVRvXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnQ29ubmVjdGVkVG9cJyBtaXQgYW5kZXJlbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnRGVwZW5kc09uXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnSW5jbHVkZXNcJyBtaXQgYW5kZXJlbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdMb2NhdGlvbk9mXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGllc2UgRWluc3RlbGx1bmcgbGVndCBmZXN0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBhbmRlcmVuIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3RlbiDDvGJlciBkZW4gTGlua3R5cCBcJ0xvY2F0aW9uT2ZcJyB2ZXJrbsO8cGZ0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdSZWxldmFudFRvXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTVdvcmtPcmRlclwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdEZXBlbmRzT25cJyBtaXQgXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTVdvcmtPcmRlclwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNV29ya09yZGVyXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0RlcGVuZHNPblwnIG1pdCBcJ1NlcnZpY2VcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTVdvcmtPcmRlclwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgXCdTZXJ2aWNlXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTVdvcmtPcmRlclwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgXCdUaWNrZXRcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdTZXJ2aWNlXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ05vcm1hbFwnIG1pdCBcJ0ZBUVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnU2VydmljZVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdQYXJlbnRDaGlsZFwnIG1pdCBcJ0ZBUVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdTZXJ2aWNlXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgXCdGQVFcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRlbiBMaW5rdHlwIFwnQWx0ZXJuYXRpdmVUb1wnLiBXaXJkIGFscyBTb3VyY2VOYW1lIHVuZCBUYXJnZXROYW1lIGRlciBnbGVpY2hlIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiB1bmdlcmljaHRldGVyIExpbmt0eXAuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgdmVyc2NoaWVkZW5lciBJbmhhbHQgYW5nZWdlYmVuLCBlbnRzdGVodCBlaW4gZ2VyaWNodGV0ZXIgTGlua3R5cC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gTGlua3R5cCBcJ0Nvbm5lY3RlZFRvXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gTGlua3R5cCBcJ0RlcGVuZHNPblwnLiBXaXJkIGFscyBTb3VyY2VOYW1lIHVuZCBUYXJnZXROYW1lIGRlciBnbGVpY2hlIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiB1bmdlcmljaHRldGVyIExpbmt0eXAuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgdmVyc2NoaWVkZW5lciBJbmhhbHQgYW5nZWdlYmVuLCBlbnRzdGVodCBlaW4gZ2VyaWNodGV0ZXIgTGlua3R5cC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gTGlua3R5cCBcJ0luY2x1ZGVzXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnTG9jYXRpb25PZlwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdEaWVzZSBFaW5zdGVsbHVuZyBkZWZpbmllcnQgZGVuIExpbmt0eXAg4oCeTG9jYXRpb25PZuKAnC4gV2VubiBkZXIgUXVlbGxuYW1lIHVuZCBkZXIgWmllbG5hbWUgZGVuc2VsYmVuIFdlcnQgZW50aGFsdGVuLCBlcmdpYnQgc2ljaCBlaW5lIFZlcmtuw7xwZnVuZyBvaG5lIFJpY2h0dW5nLiBTaW5kIGRpZSBXZXJ0ZSB1bnRlcnNjaGllZGxpY2gsIGhhbmRlbHQgZXMgc2ljaCB1bSBlaW5lIGdlcmljaHRldGUgVmVya27DvHBmdW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGVuIExpbmt0eXAgXCdSZWxldmFudFRvXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdBbnphaGwgZGVyIFplaWNoZW4gcHJvIFplaWxlIGluIElUU00tVGV4dGZlbGRlcm4uJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/el_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVsX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/en_CA_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVuX0NBX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3QnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/en_GB_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVuX0dCX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1ByaW9yaXR5IGFsbG9jYXRpb24nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdDcml0aWNhbGl0eSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ0xhc3QgY2hhbmdlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3QnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/es_CO_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX0NPX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnQ3JpdGljaWRhZCDihpQgSW1wYWN0byDihpQgUHJpb3JpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICdHZXN0aW9uYXIgbGEgcHJpb3JpZGFkIGVzIGxhIGNvbWJpbmFjacOzbiBlbnRyZSBDcml0aWNpZGFkIOKGlCBJbXBhY3RvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQXNpZ25hciBQcmlvcmlkYWQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdUaWVtcG8gbcOtbmltbyBlbnRyZSBpbmNpZGVudGVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnQ3JpdGljaWRhZCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNpw7NuIGRlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1vIGNhbWJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1vIGNhbWJpbyBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1NlcnZpY2lvcyBhc29jaWFkb3MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNpw7NuIGRlbCBTZXJ2aWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnRXN0YWRvIGFjdHVhbCBkZWwgaW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQXMgYXNvY2lhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBUaWNrZXRJbmZvcm1hdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIENyaXRpY2FsaXR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSW1wYWN0byc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU0xBSUQgJXMgbm8gZW5jb250cmFkbyBlbiBsYSBiYXNlIGRlIGRhdG9zISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnQ2FsZW5kYXJpbyBwb3IgZGVmZWN0byc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICdvcGVyYWNpb25hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnYWR2ZXJ0ZW5jaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICdpbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU2VydmljZUlEICVzIG5vIGVuY29udHJhZG8gZW4gbGEgYmFzZSBkZSBkYXRvcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBhY3R1YWwgZGVsIGluY2lkZW50ZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGVsIEluY2lkZW50ZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhY2lvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdTZXJ2aWNpbyBkZSBVc3VhcmlvIEZpbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250IEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2sgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzbiBkZSBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdJbmZvcm1lcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ1RJIE9wZXJhY2lvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vc3RyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm95ZWN0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdDb250cmF0byBkZSBSZXNwYWxkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ090cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnRGlzcG9uaWJpbGlkYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RpZW1wbyBkZSByZXNwdWVzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RpZW1wbyBkZSByZWN1cGVyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ1Rhc2EgZGUgcmVzb2x1Y2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNhY2Npb25lcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdFcnJvcmVzJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2YSBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJUEFsbG9jYXRpb246IE92ZXJ3cml0ZSBwcmlvcml0eSBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBEZWZhdWx0IGZhbGxiYWNrOiBGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnQ29uZWN0YWRvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICdEZWZpbmEgYWNjaW9uZXMgZG9uZGUgdW4gYm90w7NuIGRlIGNvbmZpZ3VyYWNpw7NuIGVzdMOpIGRpc3BvbmlibGUgZW4gZWwgd2lkZ2V0IGRlIG9iamV0b3MgdmluY3VsYWRvcyAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxlam8iKS4gVGVuZ2EgZW4gY3VlbnRhIHF1ZSBlc3RhcyBhY2Npb25lcyBkZWJlbiBoYWJlciByZWdpc3RyYWRvIGxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIEpTIHkgQ1NTOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyB5IENvcmUuQWdlbnQgLkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdEZWZpbmEgcXXDqSBjb2x1bW5hcyBzZSBtdWVzdHJhbiBlbiBlbCB3aWRnZXQgZGUgU2VydmljaW9zIHZpbmN1bGFkb3MgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90YTogU29sbyBzZSBwZXJtaXRlbiBhdHJpYnV0b3MgZGUgc2VydmljaW8gcGFyYSBEZWZhdWx0Q29sdW1ucy4gQ29uZmlndXJhY2lvbmVzIHBvc2libGVzOiAwID0gRGVzaGFiaWxpdGFkbywgMSA9IERpc3BvbmlibGUsIDIgPSBIYWJpbGl0YWRvIHBvciBkZWZlY3RvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdG9iby9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdEZXBlbmRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGVkIGluJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0aW9uIG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgY3JpdGljYWxpdHkgLSBpbXBhY3QgLSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnTG9jYXRpb25PZlwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==</File>
        <File Location="Kernel/Language/es_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnQ3JpdGljaWRhZCDihpQgSW1wYWN0byDihpQgUHJpb3JpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICdBZG1pbmlzdHJhciBlbCByZXN1bHRhZG8gZGUgbGEgY29tYmluYWNpw7NuIGRlIHByaW9yaWRhZCBDcml0aWNpZGFkIOKGlCBJbXBhY3RvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQXNpZ25hY2nDs24gcHJpb3JpdGFyaWEnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdUaWVtcG8gTcOtbmltbyBFbnRyZSBJbmNpZGVudGVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnQ3JpdGljaWRhZCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNpw7NuIGRlbCBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnw5psdGltbyBjYW1iaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnTGEgw7psdGltYSB2ZXogcXVlIHNlIG1vZGlmaWPDsyBmdWUgcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdTZXJ2aWNpb3MgQXNvY2lhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjacOzbiBkZWwgU2VydmljaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0VzdGFkbyBhY3R1YWwgZGVsIGluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEFzIFJlbGFjaW9uYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogVGlja2V0SW5mb3JtYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGFjdG8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICfCoU5vIHNlIHByb3BvcmNpb27DsyBlbCBcJ1NMQUlEXCchJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICfCoUVsIFwnU0xBSURcJyAlcyBubyBzZSBlbmNvbnRyw7MgZW4gbGEgYmFzZSBkZSBkYXRvcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJ0NhbGVuZGFyaW8gcG9yIG9taXNpw7NuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJ29wZXJhY2lvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICdhZHZlcnRlbmNpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJ2luY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICfCoU5vIHNlIHByb3BvcmNpb27DsyBlbCBcJ1NlcnZpY2VJRFwnISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ8KhRWwgXCdTZXJ2aWNlSURcJyAlcyBubyBzZSBlbmNvbnRyw7MgZW4gbGEgYmFzZSBkZSBkYXRvcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZWwgSW5jaWRlbnRlIEFjdHVhbCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGVsIEluY2lkZW50ZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhY2lvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdTZXJ2aWNpbyBkZSBVc3VhcmlvIGZpbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250IEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2sgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdBZG1pbmlzdHJhY2nDs24gZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmVwb3J0ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcGVyYWNpb25lcyBkZSBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb3N0cmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJveWVjdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnQ29udHJhdG8gZGUgcmVzcGFsZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdPdHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rpc3BvbmliaWxpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdUaWVtcG8gZGUgUmVzcHVlc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdUaWVtcG8gZGUgUmVhY3RpdmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdQb3JjZW50YWplIGRlIFJlc29sdWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWNjaW9uZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3Jlcyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdm8gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0NvbmVjdGFkbyBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYmVoYXZpb3Igb2YgcHJpb3JpdHkgYWxsb2NhdGlvbiBpbiB0aGUgZnJvbnRlbmRzIGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIENhbiBiZSBvdmVycnVsZWQgYnkgZnJvbnRlbmQgc3BlY2lmaWMgUHJpb3JpdHlCeUNJUCBzZXR0aW5ncy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnRGVmaW5pciBBY2Npb25lcyBlbiBsYXMgcXVlIHVuIGJvdMOzbiBkZSBjb25maWd1cmFjacOzbiBlc3TDoSBkaXNwb25pYmxlIGVuIGVsIHdpZGdldCBkZSBvYmpldG9zIHZpbmN1bGFkb3MgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gVGVuZ2EgZW4gY3VlbnRhIHF1ZSBlc3RhcyBBY2Npb25lcyBkZWJlbiBoYWJlciByZWdpc3RyYWRvIGxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIEpTIHkgQ1NTOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyB5IENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ0RlZmluZSBjdcOhbGVzIGNvbHVtbmFzIHNlIG11ZXN0cmFuIGVuIGVsIFwnd2lkZ2V0XCcgZGUgU2VydmljaW9zIHZpbmN1bGFkb3MgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS7CoE5vdGE6IFNvbG8gYXRyaWJ1dG9zIGRlIFNlcnZpY2lvIGRvIHBlcm1pdGlkb3MgcGFyYSBsYXMgQ29sdW1uYXMgcG9yIG9taXNpw7NuLiBDb25maWd1cmFjaW9uZXMgcG9zaWJsZXM6IDAgPSBEZXNoYWJpdGFkbywgMSA9IERpc3BvbmlibGUsIDIgPSBIYWJpbGl0YWRvIHBvciBvbWlzacOzbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnRGVwZW5kZSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBSZWdpc3RybyBlbiBlbCBGcm9udGVkIHBhcmEgbGEgY29uZmlndXJhY2nDs24gQWRtaW5JVFNNQ0lQQWxsb2NhdGUgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ03Ds2R1bG8gZGUgUmVnaXN0cm8gZW4gZWwgRnJvbnRlZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TTEEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBSZWdpc3RybyBlbiBlbCBGcm9udGVkIHBhcmEgZWwgb2JqZXRvIEFnZW50SVRTTVNMQVByaW50IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBSZWdpc3RybyBlbiBlbCBGcm9udGVkIHBhcmEgZWwgb2JqZXRvIEFnZW50SVRTTVNMQVpvb20gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIFJlZ2lzdHJvIGVuIGVsIEZyb250ZWQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU2VydmljZSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBSZWdpc3RybyBlbiBlbCBGcm9udGVkIHBhcmEgZWwgb2JqZXRvIEFnZW50SVRTTVNlcnZpY2VQcmludCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIFJlZ2lzdHJvIGVuIGVsIEZyb250ZWQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU2VydmljZVpvb20gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnVmlzdGEgZ2VuZXJhbCBkZSBcJ1NMQVwnIGRlIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJ1Zpc3RhIGdlbmVyYWwgZGUgU2VydmljaW9zIGRlIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ1RpcG8gZGUgRXN0YWRvIGRlIEluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luY2x1eWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ0FkbWluaXN0cmFyIG1hdHJpeiBkZSBwcmlvcmlkYWRlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBjcml0aWNhbGl0eSAtIGltcGFjdCAtIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdHZXN0aW9uYXIgbGEgbWF0cml6IGNyaXRpY2lkYWQgLSBpbXBhY3RvIC0gcHJpb3JpZGFkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgdW4gZW5sYWNlIGRlIHJlZ3Jlc28gZW4gZWwgbWVuw7ogZGUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIHVuIGVubGFjZSBkZSByZWdyZXNvIGVuIGVsIG1lbsO6IGRlbCBzZXJ2aWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBlbCBlbmxhY2UgZW4gZWwgbWVuw7ogZGUgc2VydmljaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgdW4gZW5sYWNlIGRlIGltcHJlc2nDs24gZW4gZWwgbWVuw7ogZGUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciB1biBlbmxhY2UgZGUgaW1wcmVzacOzbiBlbiBlbCBtZW7DuiBkZSBzZXJ2aWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXLDoW1ldHJvcyBwYXJhIGVsIGVzdGFkbyBkZSBpbmNpZGVudGVzIGVuIGxhIHZpc3RhIGRlIHByZWZlcmVuY2lhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1BhcnRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnQXBsaWNhYmxlIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUmVxdWVyaWRvIHBhcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnUmVzdW1lbiBkZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ0ltcHJpbWlyIFwnU0xBXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ0RldGFpbGVkIGRlIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1Jlc3VtZW4gZGUgU2VydmljaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICdJbXByaW1pciBTZXJ2aWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ0RldGFsbGVzIGRlbCBTZXJ2aWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnU2VydmljaW8tw4FyZWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ0ZpamEgZWwgdGlwbyB5IGRpcmVjY2lvbiBkZSBsb3MgdsOtbmN1bG9zIGEgc2VyIHVzYWRvcyBwYXJhIGNhbGN1bGFyIGVsIGVzdGFkbyBkZSBpbmNpZGVuY2lhLiBMYSBsbGF2ZSBlcyBlbCBub21icmUgZGVsIHRpcG8gZGUgdsOtbmN1bG8gKGNvbW8gZXN0w6EgZGVmaW5pZG8gZW4gIExpbmtPYmplY3Q6OlR5cGUpLCB5IGVsIHZhbG9yIGVzIGxhIGRpcmVjY2lvbiBkZWwgXCdJbmNpZGVudExpbmtUeXBlXCcgcXVlIGRlYmVyw6EgZGUgc2VyIHNlZ3VpZG8gcGFyYSBjYWxjdWxhciBlbCBlc3RhZG8gZGUgaW5jaWRlbmNpYS4gUG9yIGVqZW1wbG8gc2kgZWwgIFwnSW5jaWRlbnRMaW5rVHlwZVwnIGVzdMOhIGZpamFkbyBhIFwnRGVwZW5kc09OXCcgeSBsYSBkaXJlY2Npb24gZXMgXCdGdWVudGVcJy4gc8OzbG8gbG9zIHbDrW5jdWxvcyBcJ0RlcGVuZHNPblwnIHNlcsOhbiBzZWd1aWRvcyAoeSBubyBwb3IgZWwgY29udHJhcmlvIHN1IG9wdWVzdG8gXCdSZXF1aXJlZEZvclwnKSBwYXJhIGNhbGN1bGFyIGVsIGVzdGFkbyBkZSBpbmNpZGVuY2lhLiBVc3RlZCBwdWVkZSBhw7FhZGlyIHRhbnRvcyB0aXBvcyBkZSB2w61uY3Vsb3MgeSBkaXJlY2Npb25lcyBjb21vIHNlYSBuZWNlc2FyaW8sIHBvciBlamVtcGxvIFwnSW5jbHVkZXNcJyBjb24gbGEgZGlyZWNjacOzbiBcJ0Rlc3Rpbm9cJy4gVG9kb3MgbG9zIHRpcG9zIGRlIHbDrW5jdWxvcyBkZWZpbmlkb3MgZW4gbGFzIG9wY2lvbmVzIGRlICBjb25maWd1cmFjacOzbiBlbCBzaXN0ZW1hICBMaW5rT2JqZWN0OjpUeXBlIHNvbiBwb3NpYmxlcyB5IHN1IGRpcmVjY2nDs24gcHVlZGUgc2VyIFwnRnVlbnRlXCcsIFwnRGVzdGlub1wnIG8gXCdBbWJvc1wnLiBJTVBPUlRBTlRFOiBERVNQVUVTIERFIEhBQ0VSIENBTUJJT1MgQSBFU1RBIE9QQ0nDk04gREUgXCdTWVNDT05GSUdcJyBORUNFU0lUQVLDgSBFSkVDVVRBUiBlbCBDT01BTkRPIERFIENPTlNPTEEgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlwqAgwqFERSBUQUwgRk9STUEgUVVFIFRPRE9TIExPUyBFU1RBRE9TIERFIElOQ0lERU5DSUEgU0VSw4FOIFJFQ0FMQ1VMQURPUyBCQVNBRE9TIEVOIExBIE5VRVZBIENPTkZJR1VSQUNJw5NOISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoZSBjdXJyZW50IHNlcnZpY2UgaW5jaWRlbnQgc3RhdGUgc2lnbmFsIGluIHRoZSB0aWNrZXQgaW5mb3JtYXRpb24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlJ30gPSAnT3JpZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Z2dlc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ2hhbmdlXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gdW4gb2JqZXRvIFwnVGlja2V0XCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiB1biBvYmpldG8gXCdGQVFcJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gdW4gb2JqZXRvIFwnRkFRXCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdQYXJlbnRDaGlsZFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiB1biBvYmpldG8gXCdGQVFcJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIHVuIG9iamV0byBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0FsdGVybmF0aXZlVG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gdW4gb2JqZXRvIFwnU2VydmljZVwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiB1biBvYmpldG8gXCdTZXJ2aWNlXCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIHVuIG9iamV0byBcJ1RpY2tldFwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnQWx0ZXJuYXRpdmVUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIHVuIG9iamV0byBcJ1RpY2tldFwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIHVuIG9iamV0byBcJ1RpY2tldFwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm8gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0FsdGVybmF0aXZlVG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb3RybyBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnQ29ubmVjdGVkVG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm8gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvdHJvIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdJbmNsdWRlc1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm8gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byB0aXBvIFwnSVRTTVdvcmtPcmRlclwnIHB1ZWRlIHNlciBlbmxhemFkbyBjb24gb2JqZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHRpcG8gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byB0aXBvIFwnSVRTTVdvcmtPcmRlclwnIHB1ZWRlIHNlciBlbmxhemFkbyBjb24gb2JqZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHRpcG8gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIHRpcG8gXCdJVFNNV29ya09yZGVyXCcgcHVlZGUgc2VyIGVubGF6YWRvIGNvbiBvYmpldG9zIFwnU2VydmljZVwnIHVzYW5kbyBlbCB0aXBvIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byB0aXBvIFwnSVRTTVdvcmtPcmRlclwnIHB1ZWRlIHNlciBlbmxhemFkbyBjb24gb2JqZXRvcyBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdGlwbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byB0aXBvIFwnSVRTTVdvcmtPcmRlclwnIHB1ZWRlIHNlciBlbmxhemFkbyBjb24gb2JqZXRvcyBcJ1RpY2tldFwnIHVzYW5kbyBlbCB0aXBvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIHRpcG8gXCdTZXJ2aWNpZVwnIHB1ZWRlIHNlciBlbmxhemFkbyBjb24gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBlbCB0aXBvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gdGlwbyBcJ1NlcnZpY2llXCcgcHVlZGUgc2VyIGVubGF6YWRvIGNvbiBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIGVsIHRpcG8gXCdQYXJlbnRDaGlsZFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gdGlwbyBcJ1NlcnZpY2llXCcgcHVlZGUgc2VyIGVubGF6YWRvIGNvbiBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIGVsIHRpcG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIGVsIHRpcG8gZGUgZW5sYWNlIFwnQWx0ZXJuYXRpdmVUb1wnLiBTaSBlbCBub21icmUgZGVsIG9yaWdlbiB5IGVsIG5vbWJyZSBkZWwgZGVzdGlubyBjb250aWVuZW4gZWwgbWlzbW8gdmFsb3IsIGVsIGVubGFjZSByZXN1bHRhbnRlIGVzIHVubyBuby1kaXJlY2Npb25hbC4gU2kgbG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGVsIGVubGFjZSByZXN1bHRhbnRlIGVzIHVuIGVubGFjZSBkaXJlY2Npb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIGVsIHRpcG8gZGUgZW5sYWNlIFwnQ29ubmVjdGVkVG9cJy4gU2kgZWwgbm9tYnJlIGRlbCBvcmlnZW4geSBlbCBub21icmUgZGVsIGRlc3Rpbm8gY29udGllbmVuIGVsIG1pc21vIHZhbG9yLCBlbCBlbmxhY2UgcmVzdWx0YW50ZSBlcyB1bm8gbm8tZGlyZWNjaW9uYWwuIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCBlbmxhY2UgcmVzdWx0YW50ZSBlcyB1biBlbmxhY2UgZGlyZWNjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgZWwgdGlwbyBkZSBlbmxhY2UgXCdEZXBlbmRzT25cJy4gU2kgZWwgbm9tYnJlIGRlbCBvcmlnZW4geSBlbCBub21icmUgZGVsIGRlc3Rpbm8gY29udGllbmVuIGVsIG1pc21vIHZhbG9yLCBlbCBlbmxhY2UgcmVzdWx0YW50ZSBlcyB1bm8gbm8tZGlyZWNjaW9uYWwuIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCBlbmxhY2UgcmVzdWx0YW50ZSBlcyB1biBlbmxhY2UgZGlyZWNjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBlbCB0aXBvIGRlIGVubGFjZSBcJ0luY2x1ZGVzXCcuIFNpIGVsIG5vbWJyZSBkZWwgb3JpZ2VuIHkgZWwgbm9tYnJlIGRlbCBkZXN0aW5vIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgZW5sYWNlIHJlc3VsdGFudGUgZXMgdW5vIG5vLWRpcmVjY2lvbmFsLiBTaSBsb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgZWwgZW5sYWNlIHJlc3VsdGFudGUgZXMgdW4gZW5sYWNlIGRpcmVjY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnTG9jYXRpb25PZlwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgZWwgdGlwbyBkZSBlbmxhY2UgXCdSZWxldmFudFRvXCcuIFNpIGVsIG5vbWJyZSBkZWwgb3JpZ2VuIHkgZWwgbm9tYnJlIGRlbCBkZXN0aW5vIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgZW5sYWNlIHJlc3VsdGFudGUgZXMgdW5vIG5vLWRpcmVjY2lvbmFsLiBTaSBsb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgZWwgZW5sYWNlIHJlc3VsdGFudGUgZXMgdW4gZW5sYWNlIGRpcmVjY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdBbmNobyBkZSBsYXMgw6FyZWFzIGRlIHRleHRvIGRlbCBJVFNNJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/es_MX_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX01YX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnQ3JpdGljaWRhZCDihpQgSW1wYWN0byDihpQgUHJpb3JpZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICdBZG1pbmlzdHJhciBlbCByZXN1bHRhZG8gZGUgbGEgY29tYmluYWNpw7NuIGRlIHByaW9yaWRhZCBDcml0aWNpZGFkIOKGlCBJbXBhY3RvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQXNpZ25hY2nDs24gZGUgcHJpb3JpZGFkJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGllbXBvIE3DrW5pbW8gRW50cmUgSW5jaWRlbnRlcyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0NyaXRpY2lkYWQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjacOzbiBkZWwgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ8OabHRpbW8gY2FtYmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ01vZGlmaWNhZG8gcG9yIMO6bHRpbWEgdmV6IHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnU2VydmljaW9zIEFzb2NpYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2nDs24gZGVsIFNlcnZpY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdFc3RhZG8gYWN0dWFsIGRlbCBpbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBcyBSZWxhY2lvbmFkb3MnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3RvJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnwqFObyBzZSBwcm9wb3JjaW9uw7MgZWwgXCdTTEFJRFwnISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnwqFFbCBcJ1NMQUlEXCcgJXMgbm8gc2UgZW5jb250csOzIGVuIGxhIGJhc2UgZGUgZGF0b3MhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICdDYWxlbmRhcmlvIHBvciBvbWlzacOzbic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICdvcGVyYWNpb25hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnYWR2ZXJ0ZW5jaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICdpbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnwqFObyBzZSBwcm9wb3JjaW9uw7MgZWwgXCdTZXJ2aWNlSURcJyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICfCoUVsIFwnU2VydmljZUlEXCcgJXMgbm8gc2UgZW5jb250csOzIGVuIGxhIGJhc2UgZGUgZGF0b3MhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGVsIEluY2lkZW50ZSBBY3R1YWwnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlbCBJbmNpZGVudGUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkL0RyaXZlci9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHRlcm5hbC1zb3VyY2Uga2V5J30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCAvIFNPUE0gRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYWNpb25hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0luY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnU2VydmljaW8gZGUgVXN1YXJpbyBmaW5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udCBFbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrIEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnQWRtaW5pc3RyYWNpw7NuIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JlcG9ydGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3BlcmFjaW9uZXMgZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9zdHJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb3llY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ0NvbnRyYXRvIGRlIHJlc3BhbGRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3Rybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaWRhZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVGllbXBvIGRlIFJlc3B1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnVGllbXBvIGRlIFJlYWN0aXZhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnUG9yY2VudGFqZSBkZSBSZXNvbHVjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2FjY2lvbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0Vycm9yZXMnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ0FsdGVybmF0aXZvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdDb25lY3RhZG8gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ0RlZmluaXIgYWNjaW9uZXMgZW4gbGFzIHF1ZSB1biBib3TDs24gZGUgY29uZmlndXJhY2nDs24gZXN0w6EgZGlzcG9uaWJsZSBlbiBlbCB3aWRnZXQgZGUgb2JqZXRvcyB2aW5jdWxhZG9zIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFRlbmdhIGVuIGN1ZW50YSBxdWUgZXN0YXMgYWNjaW9uZXMgZGViZW4gaGFiZXIgcmVnaXN0cmFkbyBsb3Mgc2lndWllbnRlcyBhcmNoaXZvcyBKUyB5IENTUzogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgeSBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdEZWZpbmUgY3VhbGVzIGNvbHVtbmFzIHNlIG11ZXN0cmFuIGVuIGVsIFwnd2lkZ2V0XCcgZGUgU2VydmljaW9zIHZpbmN1bGFkb3MgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS7CoE5vdGE6IFNvbG8gYXRyaWJ1dG9zIGRlIFNlcnZpY2lvIGRvIHBlcm1pdGlkb3MgcGFyYSBsYXMgQ29sdW1uYXMgcG9yIG9taXNpw7NuLiBDb25maWd1cmFjaW9uZXMgcG9zaWJsZXM6IDAgPSBEZXNoYWJpdGFkbywgMSA9IERpc3BvbmlibGUsIDIgPSBIYWJpbGl0YWRvIHBvciBvbWlzacOzbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnRGVwZW5kZSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBSZWdpc3RybyBlbiBlbCBGcm9udGVkIHBhcmEgbGEgY29uZmlndXJhY2nDs24gQWRtaW5JVFNNQ0lQQWxsb2NhdGUgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ03Ds2R1bG8gZGUgUmVnaXN0cm8gZW4gZWwgRnJvbnRlZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TTEEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBSZWdpc3RybyBlbiBlbCBGcm9udGVkIHBhcmEgZWwgb2JqZXRvIEFnZW50SVRTTVNMQVByaW50IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBSZWdpc3RybyBlbiBlbCBGcm9udGVkIHBhcmEgZWwgb2JqZXRvIEFnZW50SVRTTVNMQVpvb20gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIFJlZ2lzdHJvIGVuIGVsIEZyb250ZWQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU2VydmljZSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBSZWdpc3RybyBlbiBlbCBGcm9udGVkIHBhcmEgZWwgb2JqZXRvIEFnZW50SVRTTVNlcnZpY2VQcmludCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIFJlZ2lzdHJvIGVuIGVsIEZyb250ZWQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU2VydmljZVpvb20gZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnVmlzdGEgZ2VuZXJhbCBkZSBcJ1NMQVwnIGRlIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdWaXN0YSBnZW5lcmFsIGRlIFNlcnZpY2lvcyBkZSBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnVGlwbyBkZSBFc3RhZG8gZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnSW5jbHV5ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGVkIGluJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0aW9uIG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnQWRtaW5pc3RyYXIgbWF0cml6IGRlIHByaW9yaWRhZGVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJ0dlc3Rpb25hciBsYSBtYXRyaXogY3JpdGljaWRhZCAtIGltcGFjdG8gLSBwcmlvcmlkYWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciB1biBlbmxhY2UgZGUgcmVncmVzbyBlbiBlbCBtZW7DuiBkZSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgdW4gZW5sYWNlIGRlIHJlZ3Jlc28gZW4gZWwgbWVuw7ogZGVsIHNlcnZpY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIGVsIGVubGFjZSBlbiBlbCBtZW7DuiBkZSBzZXJ2aWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciB1biBlbmxhY2UgZGUgaW1wcmVzacOzbiBlbiBlbCBtZW7DuiBkZSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIHVuIGVubGFjZSBkZSBpbXByZXNpw7NuIGVuIGVsIG1lbsO6IGRlIHNlcnZpY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcsOhbWV0cm9zIHBhcmEgZWwgZXN0YWRvIGRlIGluY2lkZW50ZXMgZW4gbGEgdmlzdGEgZGUgcHJlZmVyZW5jaWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnUGFydGUgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdBcGxpY2FibGUgYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdSZXF1ZXJpZG8gcGFyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdSZXN1bWVuIGRlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnSW1wcmltaXIgXCdTTEFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnRGV0YWlsZWQgZGUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnUmVzdW1lbiBkZSBTZXJ2aWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ0ltcHJpbWlyIFNlcnZpY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnRGV0YWxsZXMgZGVsIFNlcnZpY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdTZXJ2aWNpby3DgXJlYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnRmlqYSBlbCB0aXBvIHkgZGlyZWNjacOzbiBkZSBsb3MgdsOtbmN1bG9zIGEgc2VyIHVzYWRvcyBwYXJhIGNhbGN1bGFyIGVsIGVzdGFkbyBkZSBpbmNpZGVuY2lhLiBMYSBsbGF2ZSBlcyBlbCBub21icmUgZGVsIHRpcG8gZGUgdsOtbmN1bG8gKGNvbW8gZXN0w6EgZGVmaW5pZG8gZW4gTGlua09iamVjdDo6VHlwZSksIHkgZWwgdmFsb3IgZXMgbGEgZGlyZWNjacOzbiBkZWwgXCdJbmNpZGVudExpbmtUeXBlXCcgcXVlIGRlYmVyw6EgZGUgc2VyIHNlZ3VpZG8gcGFyYSBjYWxjdWxhciBlbCBlc3RhZG8gZGUgaW5jaWRlbmNpYS4gUG9yIGVqZW1wbG8gc2kgZWwgXCdJbmNpZGVudExpbmtUeXBlXCcgZXN0w6EgZmlqYWRvIGEgXCdEZXBlbmRzT05cJyB5IGxhIGRpcmVjY2nDs24gZXMgXCdGdWVudGVcJy4gc8OzbG8gbG9zIHbDrW5jdWxvcyBcJ0RlcGVuZHNPblwnIHNlcsOhbiBzZWd1aWRvcyAoeSBubyBwb3IgZWwgY29udHJhcmlvIHN1IG9wdWVzdG8gXCdSZXF1aXJlZEZvclwnKSBwYXJhIGNhbGN1bGFyIGVsIGVzdGFkbyBkZSBpbmNpZGVuY2lhLiBVc3RlZCBwdWVkZSBhw7FhZGlyIHRhbnRvcyB0aXBvcyBkZSB2w61uY3Vsb3MgeSBkaXJlY2Npb25lcyBjb21vIHNlYSBuZWNlc2FyaW8sIHBvciBlamVtcGxvIFwnSW5jbHVkZXNcJyBjb24gbGEgZGlyZWNjacOzbiBcJ0Rlc3Rpbm9cJy4gVG9kb3MgbG9zIHRpcG9zIGRlIHbDrW5jdWxvcyBkZWZpbmlkb3MgZW4gbGFzIG9wY2lvbmVzIGRlIGNvbmZpZ3VyYWNpw7NuIGVsIHNpc3RlbWEgTGlua09iamVjdDo6VHlwZSBzb24gcG9zaWJsZXMgeSBzdSBkaXJlY2Npw7NuIHB1ZWRlIHNlciBcJ0Z1ZW50ZVwnLCBcJ0Rlc3Rpbm9cJyBvIFwnQW1ib3NcJy4gSU1QT1JUQU5URTogREVTUFVFUyBERSBIQUNFUiBDQU1CSU9TIEEgRVNUQSBPUENJw5NOIERFIFwnU1lTQ09ORklHXCcgTkVDRVNJVEFSw4EgRUpFQ1VUQVIgZWwgQ09NQU5ETyBERSBDT05TT0xBIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZcKgIMKhREUgVEFMIEZPUk1BIFFVRSBUT0RPUyBMT1MgRVNUQURPUyBERSBJTkNJREVOQ0lBIFNFUsOBTiBSRUNBTENVTEFET1MgQkFTQURPUyBFTiBMQSBOVUVWQSBDT05GSUdVUkFDScOTTiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJ0Z1ZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNoYW5nZVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIHVuIG9iamV0byBcJ1RpY2tldFwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gdW4gb2JqZXRvIFwnRkFRXCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIHVuIG9iamV0byBcJ0ZBUVwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gdW4gb2JqZXRvIFwnRkFRXCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiB1biBvYmpldG8gXCdTZXJ2aWNlXCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdBbHRlcm5hdGl2ZVRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIHVuIG9iamV0byBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gdW4gb2JqZXRvIFwnU2VydmljZVwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiB1biBvYmpldG8gXCdUaWNrZXRcJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0FsdGVybmF0aXZlVG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiB1biBvYmpldG8gXCdUaWNrZXRcJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiB1biBvYmpldG8gXCdUaWNrZXRcJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvdHJvIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdBbHRlcm5hdGl2ZVRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm8gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0Nvbm5lY3RlZFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvdHJvIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb3RybyBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnSW5jbHVkZXNcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvdHJvIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gdGlwbyBcJ0lUU01Xb3JrT3JkZXJcJyBwdWVkZSBzZXIgZW5sYXphZG8gY29uIG9iamV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB0aXBvIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gdGlwbyBcJ0lUU01Xb3JrT3JkZXJcJyBwdWVkZSBzZXIgZW5sYXphZG8gY29uIG9iamV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB0aXBvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byB0aXBvIFwnSVRTTVdvcmtPcmRlclwnIHB1ZWRlIHNlciBlbmxhemFkbyBjb24gb2JqZXRvcyBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdGlwbyBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gdGlwbyBcJ0lUU01Xb3JrT3JkZXJcJyBwdWVkZSBzZXIgZW5sYXphZG8gY29uIG9iamV0b3MgXCdTZXJ2aWNlXCcgdXNhbmRvIGVsIHRpcG8gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIHF1ZSB1biBvYmpldG8gdGlwbyBcJ0lUU01Xb3JrT3JkZXJcJyBwdWVkZSBzZXIgZW5sYXphZG8gY29uIG9iamV0b3MgXCdUaWNrZXRcJyB1c2FuZG8gZWwgdGlwbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgcXVlIHVuIG9iamV0byB0aXBvIFwnU2VydmljaWVcJyBwdWVkZSBzZXIgZW5sYXphZG8gY29uIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gZWwgdGlwbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIHRpcG8gXCdTZXJ2aWNpZVwnIHB1ZWRlIHNlciBlbmxhemFkbyBjb24gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBlbCB0aXBvIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBxdWUgdW4gb2JqZXRvIHRpcG8gXCdTZXJ2aWNpZVwnIHB1ZWRlIHNlciBlbmxhemFkbyBjb24gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBlbCB0aXBvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBlbCB0aXBvIGRlIGVubGFjZSBcJ0FsdGVybmF0aXZlVG9cJy4gU2kgZWwgbm9tYnJlIGRlbCBvcmlnZW4geSBlbCBub21icmUgZGVsIGRlc3Rpbm8gY29udGllbmVuIGVsIG1pc21vIHZhbG9yLCBlbCBlbmxhY2UgcmVzdWx0YW50ZSBlcyB1bm8gbm8tZGlyZWNjaW9uYWwuIFNpIGxvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBlbCBlbmxhY2UgcmVzdWx0YW50ZSBlcyB1biBlbmxhY2UgZGlyZWNjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYWNpw7NuIGRlZmluZSBlbCB0aXBvIGRlIGVubGFjZSBcJ0Nvbm5lY3RlZFRvXCcuIFNpIGVsIG5vbWJyZSBkZWwgb3JpZ2VuIHkgZWwgbm9tYnJlIGRlbCBkZXN0aW5vIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgZW5sYWNlIHJlc3VsdGFudGUgZXMgdW5vIG5vLWRpcmVjY2lvbmFsLiBTaSBsb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgZWwgZW5sYWNlIHJlc3VsdGFudGUgZXMgdW4gZW5sYWNlIGRpcmVjY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIGVsIHRpcG8gZGUgZW5sYWNlIFwnRGVwZW5kc09uXCcuIFNpIGVsIG5vbWJyZSBkZWwgb3JpZ2VuIHkgZWwgbm9tYnJlIGRlbCBkZXN0aW5vIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgZW5sYWNlIHJlc3VsdGFudGUgZXMgdW5vIG5vLWRpcmVjY2lvbmFsLiBTaSBsb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgZWwgZW5sYWNlIHJlc3VsdGFudGUgZXMgdW4gZW5sYWNlIGRpcmVjY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBkZWZpbmUgZWwgdGlwbyBkZSBlbmxhY2UgXCdJbmNsdWRlc1wnLiBTaSBlbCBub21icmUgZGVsIG9yaWdlbiB5IGVsIG5vbWJyZSBkZWwgZGVzdGlubyBjb250aWVuZW4gZWwgbWlzbW8gdmFsb3IsIGVsIGVubGFjZSByZXN1bHRhbnRlIGVzIHVubyBuby1kaXJlY2Npb25hbC4gU2kgbG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGVsIGVubGFjZSByZXN1bHRhbnRlIGVzIHVuIGVubGFjZSBkaXJlY2Npb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhY2nDs24gZGVmaW5lIGVsIHRpcG8gZGUgZW5sYWNlIFwnUmVsZXZhbnRUb1wnLiBTaSBlbCBub21icmUgZGVsIG9yaWdlbiB5IGVsIG5vbWJyZSBkZWwgZGVzdGlubyBjb250aWVuZW4gZWwgbWlzbW8gdmFsb3IsIGVsIGVubGFjZSByZXN1bHRhbnRlIGVzIHVubyBuby1kaXJlY2Npb25hbC4gU2kgbG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGVsIGVubGFjZSByZXN1bHRhbnRlIGVzIHVuIGVubGFjZSBkaXJlY2Npb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnQW5jaG8gZGUgbGFzIMOhcmVhcyBkZSB0ZXh0byBkZWwgSVRTTS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/et_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmV0X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/fa_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZhX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAn2KfZh9mF24zYqiDihpQg2KfYq9ixIOKGlCDYp9mI2YTZiNuM2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ9mF2K/bjNix24zYqiDYp9mE2YjbjNiqINmG2KfYtNuMINin2LIg2KrYsdqp24zYqCDYp9mH2YXbjNiqIOKGlCDYp9ir2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ9iq2K7YtduM2LUg2KfZhNmI24zYqic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ9it2K/Yp9mC2YQg2LLZhdin2YYg2KjbjNmGINiv2Ygg2LHYrtiv2KfYryc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ9in2YfZhduM2KonOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ9in2LfZhNin2LnYp9iqIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfYotiu2LHbjNmGINiq2LrbjNuM2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn2KLYrtix24zZhiDYqti624zbjNixINiq2YjYs9i3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICfYs9ix2YjbjNiz4oCM2YfYp9uMINmF2LHYqtio2LcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAn2KfYt9mE2KfYudin2Kog2LPYsdmI24zYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn2YjYtti524zYqiDaqdmG2YjZhtuMINix2K7Yr9in2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xB2YfYp9uMINmF2LHYqtio2LcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICfYp9ir2LEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn2YjYtti524zYqiDYrNin2LHbjCDYsdiu2K/Yp9ivJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ9mI2LbYuduM2Kog2LHYrtiv2KfYryc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ9i52YXZhNuM2KfYqtuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICfYs9ix2YjbjNizINqp2KfYsdio2LEg2YbZh9in24zbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfYrNmE2Ygg2LXYrdmG2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICfZvti02Kog2LXYrdmG2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ9mF2K/bjNix24zYqiBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICfar9iy2KfYsdi024wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICfYudmF2YTbjNin2KogSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ9mG2YXYp9uM2LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ9m+2LHZiNqY2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAn2YLYsdin2LHYr9in2K8g2KLZhdin2K/ZhyDahtin2b4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfYqNmC24zZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICfZhduM2LLYp9mGINiv2LEg2K/Ys9iq2LHYsyDYqNmI2K/Zhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAn2LLZhdin2YYg2b7Yp9iz2K7ar9mI24zbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAn2LLZhdin2YYg2KjZh9io2YjYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfZhtix2K4g2K3ZhCDZhdiz2KbZhNmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ9iq2LHYp9qp2YbYtOKAjNmH2KcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAn2K7Yt9in2YfYpyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn2KzYp9uM2q/YstuM2YbbjCDYqNix2KfbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ9mF2KrYtdmEINin2LPYqiDYqNmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYmVoYXZpb3Igb2YgcHJpb3JpdHkgYWxsb2NhdGlvbiBpbiB0aGUgZnJvbnRlbmRzIGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIENhbiBiZSBvdmVycnVsZWQgYnkgZnJvbnRlbmQgc3BlY2lmaWMgUHJpb3JpdHlCeUNJUCBzZXR0aW5ncy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn2YjYp9io2LPYqtmHINin2LPYqiDYqNmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMIEFkbWluSVRTTUNJUEFsbG9jYXRlINiv2LEg2KjYrti0INmF2K/bjNix24zYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn2KvYqNiqINmF2KfamNmI2YQg2KjYsdin24wg2b7bjNqp2LHYqNmG2K/bjCDYotio2KzaqdiqIEFnZW50SVRTTVNMQSDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINii2KjYrNqp2KogQWdlbnRJVFNNU0xBUHJpbnQg2K/YsSDZiNin2LPYtyDaqdin2LHYqNix24wg2qnYp9ix2LTZhtin2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINii2KjYrNqp2KogQWdlbnRJVFNNU0xBWm9vbSDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9ir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINm+24zaqdix2KjZhtiv24wg2KLYqNis2qnYqiBBZ2VudElUU01TZXJ2aWNlINiv2LEg2YjYp9iz2Lcg2qnYp9ix2KjYsduMINqp2KfYsdi02YbYp9izJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINii2KjYrNqp2KogQWdlbnRJVFNNU2VydmljZVByaW50INiv2LEg2YjYp9iz2Lcg2qnYp9ix2KjYsduMINqp2KfYsdi02YbYp9izJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9ir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINm+24zaqdix2KjZhtiv24wg2KLYqNis2qnYqiBBZ2VudElUU01TZXJ2aWNlWm9vbSDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAn2YXYtNiq2YXZhCDYp9iz2Kog2KjYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGVkIGluJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0aW9uIG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAn2YXYr9uM2LHbjNiqINmF2KfYqtix24zYsyDYp9mE2YjbjNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgY3JpdGljYWxpdHkgLSBpbXBhY3QgLSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICfZhdin2pjZiNmE24wg2KjYsdin24wg2YbZhdin24zYtCDZhNuM2YbaqSDYqNin2LLar9i02Kog2K/YsSDZhdmG2YjbjCBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICfZhdin2pjZiNmE24wg2KjYsdin24wg2YbZhdin24zYtCDZhNuM2YbaqSDYqNin2LLar9i02Kog2K/YsSDZhdmG2YjbjCDYs9ix2YjbjNizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAn2YXYp9qY2YjZhNuMINio2LHYp9uMINmG2YXYp9uM2LQg2YTbjNmG2qkg2obYp9m+INiv2LEg2YXZhtmI24wgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ9mF2KfamNmI2YTbjCDYqNix2KfbjCDZhtmF2KfbjNi0INmE24zZhtqpINqG2KfZviDYr9ixINmF2YbZiNuMINiz2LHZiNuM2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICfZvtin2LHYp9mF2KrYsdmH2KfbjNuMINio2LHYp9uMINmI2LbYuduM2KrigIzZh9in24wg2LHYrtiv2KfYryDYr9ixINmG2YXYp9uMINiq2YbYuNuM2YXYp9iqINi02K7YtduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICfYqNiu2LTbjCDYp9iyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAn2YXYsdiq2KjYtyDYqNinJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ9mF2YjYsdivINmG24zYp9iyINin2LPYqiDYqNix2KfbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICfYrtmE2KfYtdmHIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn2K7ZhNin2LXZhyDYs9ix2YjbjNizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAn2KjYrti0INiz2LHZiNuM2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoZSBjdXJyZW50IHNlcnZpY2UgaW5jaWRlbnQgc3RhdGUgc2lnbmFsIGluIHRoZSB0aWNrZXQgaW5mb3JtYXRpb24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Z2dlc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdMb2NhdGlvbk9mXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdMb2NhdGlvbk9mXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAn2KfZhtiv2KfYstmHINi52LHYtiDaqdmG2KrYsdmE4oCM2YfYp9uMINmI2LHZiNivINmF2KrZhiBJVFNNJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/fi_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZpX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/fr_CA_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZyX0NBX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/fr_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZyX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnQ3JpdGljaXTDqSDihpQgSW1wYWN0IOKGlCBQcmlvcml0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ0fDqXJlciBsYSBtYXRyaWNlIGRlIHByaW9yaXTDqS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0F0dHJpYnV0aW9uIGRlIHByaW9yaXTDqSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ1RlbXBzIG1pbmltYWwgZW50cmUgbGVzIGluY2lkZW50cyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0NyaXRpY2l0w6knOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWF0aW9ucyBzdXIgbGVzIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdEZXJuacOocmVzIG1vZGlmaWNhdGlvbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnRGVybmnDqHJlcyBtb2RpZmljYXRpb25zIHBhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnU2VydmljZXMgYXNzb2Npw6lzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWF0aW9ucyBzdXIgbGUgc2VydmljZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnw4l0YXQgYWN0dWVsIGRlIGxcJ2luY2lkZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQSBhc3NvY2nDqXMnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3QnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICdBdWN1biBJRCBkZSBTTEEgblwnYSDDqXTDqSBkb25uw6kgISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnTFwnSUQgZHUgU0xBICVzIG5cJ2EgcGFzIMOpdMOpIHRyb3V2w6kgZGFucyBsYSBiYXNlIGRlIGRvbm7DqWVzICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJ0NhbGVuZHJpZXIgcGFyIGTDqWZhdXQnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnQXVjdW4gSUQgZGUgc2VydmljZSBuXCdhIMOpdMOpIGRvbm7DqSAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnTFwnSUQgZHUgc2VydmljZSAlcyBuXCdhIHBhcyDDqXTDqSB0cm91dsOpIGRhbnMgbGEgYmFzZSBkZSBkb25uw6llcyAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICfDiXRhdCBhY3R1ZWwgZGUgbFwnaW5jaWRlbnQnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnw4l0YXQgZGUgbFwnaW5jaWRlbnQnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkL0RyaXZlci9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHRlcm5hbC1zb3VyY2Uga2V5J30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCAvIFNPUE0gRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcMOpcmF0aW9ubmVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpY2UgdXRpbGlzYXRldXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uIGRlcyB0ZWNobm9sb2dpZXMgZGUgbFwnaW5mb3JtYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmFwcG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ1RlY2hub2xvZ2llcyBkZSBsXCdpbmZvcm1hdGlvbiBvcMOpcmF0aW9ubmVsbGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEw6ltb25zdHJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ0NvbnRyYXQgZXh0ZXJuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0F1dHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rpc3BvbmliaWxpdMOpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdUZW1wcyBkZSByw6lwb25zZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnVGVtcHMgZGUgcsOpcGFyYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnVGF1eCBkZSByw6lzb2x1dGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2FjdGlvbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyZXVycyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpZiDDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0xpw6kgw6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdG9iby9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdEw6lwZW5kIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnVnVlIGRcJ2Vuc2VtYmxlIGRlcyBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJ1Z1ZSBkXCdlbnNlbWJsZSBkZXMgc2VydmljZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ1R5cGUgZFwnw6l0YXQgZGUgbFwnaW5jaWRlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmNsdXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ0dlc3Rpb24gZGUgbGEgbWF0cmljZSBkZSBwcmlvcml0w6kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgY3JpdGljYWxpdHkgLSBpbXBhY3QgLSBwcmlvcml0eSBtYXRyaXguJ30gPSAnR8OpcmVyIGxhIG1hdHJpY2UgZGUgcHJpb3JpdMOpIChjcml0aWNpdMOpIMOXIGltcGFjdCkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyYW3DqHRyZXMgZGVzIMOpdGF0cyBkXCdpbmNpZGVudCBkYW5zIGxhIHZ1ZSBkZXMgcHLDqWbDqXJlbmNlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1BhcnQgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdDb3JyZXNwb25kYW50IMOgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JlcXVpcyBwb3VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1Z1ZSBkXCdlbnNlbWJsZSBkZXMgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICdJbXByZXNzaW9uIGRlcyBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ1Z1ZSBkw6l0YWlsbMOpZSBkZXMgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnVnVlIGRcJ2Vuc2VtYmxlIGRlcyBzZXJ2aWNlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ0ltcHJlc3Npb24gZGVzIHNlcnZpY2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnVnVlIGTDqXRhaWxsw6llIGRlcyBzZXJ2aWNlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnWm9uZSBkZSBzZXJ2aWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgIklUU01DaGFuZ2UiIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0ICJUaWNrZXQiIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gIk5vcm1hbCIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnQ2UgcGFyYW3DqXRyYWdlIGTDqWZpbmkgcXVcJ3VuIG9iamV0ICJJVFNNQ29uZmlnSXRlbSIgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgIkZBUSIgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiAiTm9ybWFsIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCAiSVRTTUNvbmZpZ0l0ZW0iIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0ICJGQVEiIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gIlBhcmVudEVuZmFudCIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCAiSVRTTUNvbmZpZ0l0ZW0iIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0ICJGQVEiIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gIkNvcnJlc3BvbmRhbnQgw6AiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnQ2UgcGFyYW3DqXRyYWdlIGTDqWZpbmkgcXVcJ3VuIG9iamV0ICJJVFNNQ29uZmlnSXRlbSIgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgIlNlcnZpY2UiIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gIkFsdGVybmF0aWYgw6AiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgIklUU01Db25maWdJdGVtIiBwZXV0IMOqdHJlIGxpw6kgYXZlYyB1biBvYmpldCAiU2VydmljZSIgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiAiRMOpcGVuZCBkZSIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgIklUU01Db25maWdJdGVtIiBwZXV0IMOqdHJlIGxpw6kgYXZlYyB1biBvYmpldCAiU2VydmljZSIgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiAiQ29ycmVzcG9uZGFudCDDoCIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCAiSVRTTUNvbmZpZ0l0ZW0iIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0ICJUaWNrZXQiIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gIkFsdGVybmF0aWYgw6AiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCAiSVRTTUNvbmZpZ0l0ZW0iIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0ICJUaWNrZXQiIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gIkTDqXBlbmRzIGRlIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnQ2UgcGFyYW3DqXRyYWdlIGTDqWZpbmkgcXVcJ3VuIG9iamV0ICJJVFNNQ29uZmlnSXRlbSIgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgIlRpY2tldCIgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiAiQ29ycmVzcG9uZGFudCDDoCIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnQ2UgcGFyYW3DqXRyYWdlIGTDqWZpbmkgcXVcJ3VuIG9iamV0ICJJVFNNQ29uZmlnSXRlbSIgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgIklUU01Db25maWdJdGVtIiBlbiB1dGlsaXNhbnQgdW4gdHlwZSBkZSBsaWVuICJBbHRlcm5hdGlmIMOgIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnQ2UgcGFyYW3DqXRyYWdlIGTDqWZpbmkgcXVcJ3VuIG9iamV0ICJJVFNNQ29uZmlnSXRlbSIgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgIklUU01Db25maWdJdGVtIiBlbiB1dGlsaXNhbnQgdW4gdHlwZSBkZSBsaWVuICJMacOpIMOgIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCAiSVRTTUNvbmZpZ0l0ZW0iIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0ICJJVFNNQ29uZmlnSXRlbSIgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiAiRMOpcGVuZCBkZSIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCAiSVRTTUNvbmZpZ0l0ZW0iIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0ICJJVFNNQ29uZmlnSXRlbSIgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiAiSW5jbHVzIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgIklUU01Db25maWdJdGVtIiBwZXV0IMOqdHJlIGxpw6kgYXZlYyB1biBvYmpldCAiSVRTTUNvbmZpZ0l0ZW0iIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gIkNvcnJlc3BvbmRhbnQgw6AiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgIklUU01Xb3JrT3JkZXIiIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0ICJJVFNNQ29uZmlnSXRlbSIgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiAiRMOpcGVuZCBkZSIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCAiSVRTTVdvcmtPcmRlciIgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgIklUU01Db25maWdJdGVtIiBlbiB1dGlsaXNhbnQgdW4gdHlwZSBkZSBsaWVuICJOb3JtYWwiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCAiSVRTTVdvcmtPcmRlciIgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgIlNlcnZpY2UiIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gIkTDqXBlbmQgZGUiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCAiSVRTTVdvcmtPcmRlciIgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgIlNlcnZpY2UiIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gIk5vcm1hbCIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgIklUU01Xb3JrT3JkZXIiIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0ICJUaWNrZXQiIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gIk5vcm1hbCIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgIlNlcnZpY2UiIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0ICJGQVEiIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gIk5vcm1hbCIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0NlIHBhcmFtw6l0cmFnZSBkw6lmaW5pIHF1XCd1biBvYmpldCAiU2VydmljZSIgcGV1dCDDqnRyZSBsacOpIGF2ZWMgdW4gb2JqZXQgIkZBUSIgZW4gdXRpbGlzYW50IHVuIHR5cGUgZGUgbGllbiAiUGFyZW50RW5mYW50Ii4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBxdVwndW4gb2JqZXQgIlNlcnZpY2UiIHBldXQgw6p0cmUgbGnDqSBhdmVjIHVuIG9iamV0ICJGQVEiIGVuIHV0aWxpc2FudCB1biB0eXBlIGRlIGxpZW4gIkNvcnJlc3BvbmRhbnQgw6AiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBsZSB0eXBlIGRlIGxpZW4gIkFsdGVybmF0aWYgw6AiLiBTaSBsYSBzb3VyY2UgZXQgbGEgY2libGUgY29udGllbm5lbnQgbGEgbcOqbWUgdmFsZXVyLCBsZSByw6lzdWx0YXQgZXN0IHVuIGxpZW4gbm9uLWRpcmVjdGlvbm5lbC4gU2kgbGVzIHZhbGV1cnMgc29udCBkaWZmw6lyZW50ZXMsIGxlIHLDqXN1bHRhdCBlc3QgdW4gbGllbiBkaXJlY3Rpb25uZWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBsZSB0eXBlIGRlIGxpZW4gIkNvcnJlc3BvbmRhbnQgw6AiLiBTaSBsYSBzb3VyY2UgZXQgbGEgY2libGUgY29udGllbm5lbnQgbGEgbcOqbWUgdmFsZXVyLCBsZSByw6lzdWx0YXQgZXN0IHVuIGxpZW4gbm9uLWRpcmVjdGlvbm5lbC4gU2kgbGVzIHZhbGV1cnMgc29udCBkaWZmw6lyZW50ZXMsIGxlIHLDqXN1bHRhdCBlc3QgdW4gbGllbiBkaXJlY3Rpb25uZWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnQ2UgcGFyYW3DqXRyYWdlIGTDqWZpbmkgbGUgdHlwZSBkZSBsaWVuICJEw6lwZW5kIGRlIi4gU2kgbGEgc291cmNlIGV0IGxhIGNpYmxlIGNvbnRpZW5uZW50IGxhIG3Dqm1lIHZhbGV1ciwgbGUgcsOpc3VsdGF0IGVzdCB1biBsaWVuIG5vbi1kaXJlY3Rpb25uZWwuIFNpIGxlcyB2YWxldXJzIHNvbnQgZGlmZsOpcmVudGVzLCBsZSByw6lzdWx0YXQgZXN0IHVuIGxpZW4gZGlyZWN0aW9ubmVsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnQ2UgcGFyYW3DqXRyYWdlIGTDqWZpbmkgbGUgdHlwZSBkZSBsaWVuICJJbmNsdXMiLiBTaSBsYSBzb3VyY2UgZXQgbGEgY2libGUgY29udGllbm5lbnQgbGEgbcOqbWUgdmFsZXVyLCBsZSByw6lzdWx0YXQgZXN0IHVuIGxpZW4gbm9uLWRpcmVjdGlvbm5lbC4gU2kgbGVzIHZhbGV1cnMgc29udCBkaWZmw6lyZW50ZXMsIGxlIHLDqXN1bHRhdCBlc3QgdW4gbGllbiBkaXJlY3Rpb25uZWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdMb2NhdGlvbk9mXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdDZSBwYXJhbcOpdHJhZ2UgZMOpZmluaSBsZSB0eXBlIGRlIGxpZW4gIkNvcnJlc3BvbmRhbnQgw6AiLiBTaSBsYSBzb3VyY2UgZXQgbGEgY2libGUgY29udGllbm5lbnQgbGEgbcOqbWUgdmFsZXVyLCBsZSByw6lzdWx0YXQgZXN0IHVuIGxpZW4gbm9uLWRpcmVjdGlvbm5lbC4gU2kgbGVzIHZhbGV1cnMgc29udCBkaWZmw6lyZW50ZXMsIGxlIHLDqXN1bHRhdCBlc3QgdW4gbGllbiBkaXJlY3Rpb25uZWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0xhcmdldXIgZGVzIHpvbmVzIGRlIHRleHRlLic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==</File>
        <File Location="Kernel/Language/gl_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmdsX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnQ3JpdGljaWRhZCDihpQgSW1wYWN0byDihpQgUHJpb3JpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnTWFuZXhhciBvcyByZXN1bHRhZG9zIHByaW9yaXRhcmlvcyBkYSBjb21iaW5hY2nDs24gQ3JpdGljaWRhZCDihpQgSW1wYWN0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQXNpZ25hY2nDs24gZGEgcHJpb3JpZGFkJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGVtcG8gbcOtbmltbyBlbnRyZSBJbmNpZGVudGVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnQ3JpdGljaWRhZCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNpw7NuIGRvIEFjb3JkbyBkbyBOaXZlbCBkZSBTZXJ2aXpvIEFOUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1vIGNhbWJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1vIGNhbWJpbyBmZWl0byBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1NlcnZpem9zIGFzb2NpYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2nDs24gZG8gU2Vydml6byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnRXN0YWRvIGFjdHVhbCBkbyBpbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnQU5TIGFzb2NpYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogVGlja2V0SW5mb3JtYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGFjdG8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRvIEluY2lkZW50ZSBhY3R1YWwnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRvIEluY2lkZW50ZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ0Z1bmNpb25hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ0luY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnU2Vydml6byB1c3VhcmlvIGZpbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0ludGVyZmFjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0luZnJhZXN0cnV0dXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdYZXN0acOzbiBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdJbmZvcm1lcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ09wZXJhY2nDs24gVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9zdHJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb3hlY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ0NvbnRyYXRvIGRlIHNvcG9ydGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdPdXRyb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnRGlzcG/DsWliaWxpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVGVtcG8gZGUgcmVzcG9zdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RlbXBvIGRlIHJlY3VwZXJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnSW5kaWNlIGRlIHJlc29sdWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWNjacOzbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3MnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ0FsdGVybmF0aXZhIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdDb25lY3RhZG8gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0RlcGVuZGUgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5mb3JjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JleGlzdHJvIE3Ds2R1bG8gRnJvbnRFbmQgcGFyYSDDsyBBZG1pbklUU01DSVAgZGEgY29uZmlndXJhY2nDs24gYXNpZ25hZGEgbmEgw6FyZWEgZGUgYWRtaW5pc3RyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZXhpc3RybyBNw7NkdWxvIEZyb250RW5kIHBhcmEgw7Mgb2J4ZXRvIEFnZW50SVRTTVNMQSBuYSBpbnRlcmZhY2UgZG8gYXhlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JleGlzdHJvIE3Ds2R1bG8gRnJvbnRFbmQgcGFyYSDDsyAgb2J4ZXRvIGltcHJpbWlyIEFnZW50SVRTTVNMQSBuYSBpbnRlcmZhY2UgZG8gYXhlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmV4aXN0cm8gTcOzZHVsbyBGcm9udEVuZCBwYXJhIMOzICBvYnhldG8gem9vbSBBZ2VudElUU01TTEEgbmEgaW50ZXJmYWNlIGRvIGF4ZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JleGlzdHJvIE3Ds2R1bG8gRnJvbnRFbmQgcGFyYSDDsyAgb2J4ZXRvIHNlcnZpem8gQWdlbnRJVFNNU0xBIG5hIGludGVyZmFjZSBkbyBheGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JleGlzdHJvIE3Ds2R1bG8gRnJvbnRFbmQgcGFyYSDDsyAgb2J4ZXRvIHNlcnZpem8gaW1wcmltaXIgQWdlbnRJVFNNIG5hIGludGVyZmFjZSBkbyBheGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmV4aXN0cm8gTcOzZHVsbyBGcm9udEVuZCBwYXJhIMOzICBvYnhldG8gc2Vydml6byB6b29tIEFnZW50SVRTTSBuYSBpbnRlcmZhY2UgZG8gYXhlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdpbmNsw7plJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0ZWQgaW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRpb24gb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdNYW5leGFyIGEgcHJpb3JpZGFkZSBkYSBtYXRyaXonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBjcml0aWNhbGl0eSAtIGltcGFjdCAtIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIGVubGFjZSBwb3N0ZXJpb3IgZW4gbWVuw7ogZG8gQU5TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgZW5sYWNlIHBvc3RlcmlvciBlbiBtZW7DuiBkZSBzZXJ2aXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgZW5sYWNlIMOzIGVubGFjZSBubyBtZW7DuiBkZSBzZXJ2aXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgZW5sYWNlIGRlIGltcHJlc2nDs24gbm8gbWVuw7ogZG8gQU5TJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIGVubGFjZSBkZSBpbXByZXNpw7NuIG5vIG1lbsO6IGRlIHNlcnZpem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXLDoW1ldHJvcyBwYXJhIG9zIGVzdGFkb3MgZG8gaW5jaWRlbnRlIG5hIHZpc3RhIGRlIHByZWZlcmVuY2lhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdQYXJ0ZSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50ZSBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JlcXVpcmlkbyBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnVmlzdGEgeGVyYWwgZG8gQWNvcmRvIGRvIE5pdmVsIGRlIFNlcnZpem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1Zpc3RhIHhlcmFsIGRvIHNlcnZpem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfDgXJlYSBkbyBzZXJ2aXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIHVuIG9ieGVjdG8gZGUgXCdJVFNNQ2hhbmdlXCcgcG9kZSBzZXIgY29uZWN0YWRvIGNvbiBvYnhlY3RvcyBcJ1RpY2tldFwnIHF1ZSB1dGlsaXphbiBvIHRpcG8gZGUgZW5sYWNlIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSB1biBvYnhlY3RvIGRlIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciBjb25lY3RhZG8gY29uIG9ieGVjdG9zIGRlIFwnRkFRXCcgcXVlIHV0aWxpemFuIG8gdGlwbyBkZSBlbmxhY2UgXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGUgYXh1c3RlIGRlZmluZSBxdWUgdW4gb2J4ZWN0byBkZSBcJ0lUU01Db25maWdJdGVtXCcgcG9kZSBzZXIgY29uZWN0YWRvIGNvbiBvYnhlY3RvcyBkZSBcJ0ZBUVwnIHF1ZSB1dGlsaXphbiBvIHRpcG8gZGUgZW5sYWNlIGRlIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSB1biBvYnhlY3RvIGRlIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciBjb25lY3RhZG8gY29uIG9ieGVjdG9zIGRlIFwnRkFRXCcgcXVlIHV0aWxpemFuIG8gdGlwbyBkZSBlbmxhY2UgZGUgXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIHVuIG9ieGVjdG8gZGUgXCdJVFNNQ29uZmlnSXRlbVwnIHBvZGUgc2VyIGNvbmVjdGFkbyBjb24gb2J4ZWN0b3MgZGUgXCdTZXJ2aWNlXCcgcXVlIHV0aWxpemFuIG8gdGlwbyBkZSBlbmxhY2UgZGUgXCdBbHRlcm5hdGl2ZVRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGUgYXh1c3RlIGRlZmluZSBxdWUgdW4gb2J4ZWN0byBkZSBcJ0lUU01Db25maWdJdGVtXCcgcG9kZSBzZXIgY29uZWN0YWRvIGNvbiBvYnhlY3RvcyBkZSBcJ1NlcnZpY2VcJyBxdWUgdXRpbGl6YW4gbyB0aXBvIGRlIGVubGFjZSBkZSBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSB1biBvYnhlY3RvIGRlIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciBjb25lY3RhZG8gY29uIG9ieGVjdG9zIGRlIFwnU2VydmljZVwnIHF1ZSB1dGlsaXphbiBvIHRpcG8gZGUgZW5sYWNlIGRlIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdUaWNrZXRcJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdBbHRlcm5hdGl2ZVRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdUaWNrZXRcJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdUaWNrZXRcJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdSZWxldmFudFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG91dHJvcyBvYnhldG9zIFwnSVRTTUNvbmZpZ0l0ZW1cJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdBbHRlcm5hdGl2ZVRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ0lUU01Db25maWdJdGVtXCcgcG9kZSBzZXIgdmluY3VsYWRvIGNvbiBvdXRyb3Mgb2J4ZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgZW1wcmVnYW5kbyBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnQ29ubmVjdGVkVG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ0lUU01Db25maWdJdGVtXCcgcG9kZSBzZXIgdmluY3VsYWRvIGNvbiBvdXRyb3Mgb2J4ZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgZW1wcmVnYW5kbyBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ0lUU01Db25maWdJdGVtXCcgcG9kZSBzZXIgdmluY3VsYWRvIGNvbiBvdXRyb3Mgb2J4ZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgZW1wcmVnYW5kbyBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnSW5jbHVkZXNcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGUgYXh1c3RlIGRlZmluZSBxdWUgbyBvYnhldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHBvZGUgc2VyIHZpbmN1bGFkbyBjb24gb3V0cm9zIG9ieGV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIGVtcHJlZ2FuZG8gbyB0aXBvIGRlIHZpbmN1bGFjacOzbiBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnSVRTTVdvcmtPcmRlclwnIHBvZGUgc2VyIHZpbmN1bGFkbyBjb24gb2J4ZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgZW1wcmVnYW5kbyBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ0lUU01Xb3JrT3JkZXJcJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIGVtcHJlZ2FuZG8gbyB0aXBvIGRlIHZpbmN1bGFjacOzbiBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ0lUU01Xb3JrT3JkZXJcJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdTZXJ2aWNlXCcgZW1wcmVnYW5kbyBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnSVRTTVdvcmtPcmRlclwnIHBvZGUgc2VyIHZpbmN1bGFkbyBjb24gb2J4ZXRvcyBcJ1NlcnZpY2VcJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ0lUU01Xb3JrT3JkZXJcJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdUaWNrZXRcJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIHF1ZSBvIG9ieGV0byBcJ1NlcnZpY2VcJyBwb2RlIHNlciB2aW5jdWxhZG8gY29uIG9ieGV0b3MgXCdGQVFcJyBlbXByZWdhbmRvIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnU2VydmljZVwnIHBvZGUgc2VyIHZpbmN1bGFkbyBjb24gb2J4ZXRvcyBcJ0ZBUVwnIGVtcHJlZ2FuZG8gbyB0aXBvIGRlIHZpbmN1bGFjacOzbiBcJ1BhcmVudENoaWxkXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgcXVlIG8gb2J4ZXRvIFwnU2VydmljZVwnIHBvZGUgc2VyIHZpbmN1bGFkbyBjb24gb2J4ZXRvcyBcJ0ZBUVwnIGVtcHJlZ2FuZG8gbyB0aXBvIGRlIHZpbmN1bGFjacOzbiBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgbyB0aXBvIGRlIHZpbmN1bGFjacOzbiBcJ0FsdGVybmF0aXZlVG9cJy4gU2UgbyBub21lIGZvbnRlIGUgbyBub21lIGRvIG9ieGV0aXZvIGNvbnRlw7FlbiBvIG1lc21vIHZhbG9yLCBhIHZpbmN1bGFjacOzbiByZXN1bHRhbnRlIMOpIHVuaGEgbm9uIGRpcmVjY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHNvbiBkaWZlcmVudGVzLCBhIHZpbmN1bGFjacOzbiByZXN1bHRhbnRlIMOpIHVuaGEgZGlyZWNjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RlIGF4dXN0ZSBkZWZpbmUgbyB0aXBvIGRlIHZpbmN1bGFjacOzbiBcJ0Nvbm5lY3RlZFRvXCcuIFNlIG8gbm9tZSBmb250ZSBlIG8gbm9tZSBkbyBvYnhldGl2byBjb250ZcOxZW4gbyBtZXNtbyB2YWxvciwgYSB2aW5jdWxhY2nDs24gcmVzdWx0YW50ZSDDqSB1bmhhIG5vbiBkaXJlY2Npb25hbC4gU2Ugb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgYSB2aW5jdWxhY2nDs24gcmVzdWx0YW50ZSDDqSB1bmhhIGRpcmVjY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGUgYXh1c3RlIGRlZmluZSBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnRGVwZW5kc09uXCcuIFNlIG8gbm9tZSBmb250ZSBlIG8gbm9tZSBkbyBvYnhldGl2byBjb250ZcOxZW4gbyBtZXNtbyB2YWxvciwgYSB2aW5jdWxhY2nDs24gcmVzdWx0YW50ZSDDqSB1bmhhIG5vbiBkaXJlY2Npb25hbC4gU2Ugb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgYSB2aW5jdWxhY2nDs24gcmVzdWx0YW50ZSDDqSB1bmhhIGRpcmVjY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0ZSBheHVzdGUgZGVmaW5lIG8gdGlwbyBkZSB2aW5jdWxhY2nDs24gXCdJbmNsdWRlc1wnLiBTZSBvIG5vbWUgZm9udGUgZSBvIG5vbWUgZG8gb2J4ZXRpdm8gY29udGXDsWVuIG8gbWVzbW8gdmFsb3IsIGEgdmluY3VsYWNpw7NuIHJlc3VsdGFudGUgw6kgdW5oYSBub24gZGlyZWNjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGEgdmluY3VsYWNpw7NuIHJlc3VsdGFudGUgw6kgdW5oYSBkaXJlY2Npb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGUgYXh1c3RlIGRlZmluZSBvIHRpcG8gZGUgdmluY3VsYWNpw7NuIFwnUmVsZXZhbnRUb1wnLiBTZSBvIG5vbWUgZm9udGUgZSBvIG5vbWUgZG8gb2J4ZXRpdm8gY29udGXDsWVuIG8gbWVzbW8gdmFsb3IsIGEgdmluY3VsYWNpw7NuIHJlc3VsdGFudGUgw6kgdW5oYSBub24gZGlyZWNjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGEgdmluY3VsYWNpw7NuIHJlc3VsdGFudGUgw6kgdW5oYSBkaXJlY2Npb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnQW5jaHVyYSBkYXMgw6FyZWFzIGRlIHRleHRvIGRhIElUU00uJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/he_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmhlX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/hi_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmhpX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/hr_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmhyX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/hu_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omh1X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnS3JpdGlrdXNzw6FnIOKGlCBIYXTDoXMg4oaUIFByaW9yaXTDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ0EgS3JpdGlrdXNzw6FnIOKGlCBIYXTDoXMgw7Zzc3pldMOpdGVsIHByaW9yaXTDoXMgZXJlZG3DqW55w6luZWsga2V6ZWzDqXNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnUHJpb3JpdMOhc2xlZm9nbGFsw6FzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnQXogaW5jaWRlbnNlayBrw7Z6dGkgbGVna2lzZWJiIGlkxZEnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWt1c3PDoWcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQSBpbmZvcm3DoWNpw7NrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1V0b2xqw6FyYSBtw7Nkb3PDrXR2YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdVdG9sasOhcmEgbcOzZG9zw610b3R0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnSG96esOhcmVuZGVsdCBzem9sZ8OhbHRhdMOhc29rJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ1N6b2xnw6FsdGF0w6FzaW5mb3Jtw6FjacOzayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnSmVsZW5sZWdpIGluY2lkZW5zw6FsbGFwb3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnSG96esOhcmVuZGVsdCBTTEEtayc7CgogICAgIyBUZW1wbGF0ZTogVGlja2V0SW5mb3JtYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5jaWRlbnQgU3RhdGUnfSA9ICdTem9sZ8OhbHRhdMOhcyBpbmNpZGVuc8OhbGxhcG90YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIENyaXRpY2FsaXR5J30gPSAnU3pvbGfDoWx0YXTDoXMga3JpdGlrdXNzw6FnYSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0hhdMOhcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJ05pbmNzIFNMQS1hem9ub3PDrXTDsyBtZWdhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnQSh6KSAlcyBTTEEtYXpvbm9zw610w7MgbmVtIHRhbMOhbGhhdMOzIGF6IGFkYXRiw6F6aXNiYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICdBbGFww6lydGVsbWV6ZXR0IG5hcHTDoXInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnw7x6ZW1rw6lwZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJ2ZpZ3llbG1lenRldMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJ2luY2lkZW5zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJ05pbmNzIHN6b2xnw6FsdGF0w6FzYXpvbm9zw610w7MgbWVnYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdBKHopICVzIHN6b2xnw6FsdGF0w6FzYXpvbm9zw610w7MgbmVtIHRhbMOhbGhhdMOzIGF6IGFkYXRiw6F6aXNiYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdKZWxlbmxlZ2kgaW5jaWRlbnPDoWxsYXBvdCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdJbmNpZGVuc8OhbGxhcG90JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXh0ZXJuYWwtc291cmNlIGtleSd9ID0gJ0vDvGxzxZEgZm9ycsOhcyBrdWxjc2EnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ8OcemVta8OpcGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1bDqWdmZWxoYXN6bsOhbMOzaSBzem9sZ8OhbHRhdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdFbMWRdMOpdHByb2dyYW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdIw6F0dMOpcnByb2dyYW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lUIG1lbmVkenNtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ0plbGVudMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUIMO8emVtZWx0ZXTDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0JlbXV0YXTDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdNZWdhbGFwb3rDsyBzemVyesWRZMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0VnecOpYic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdFbMOpcmhldMWRc8OpZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVsOhbGFzemlkxZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1Zpc3N6YcOhbGzDrXTDoXNpIGlkxZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnTWVnb2xkw6FzaSBhcsOhbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnpha2Npw7NrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0hpYsOhayc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXTDrXZhIGVycmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJ0NJUEFsbG9jYXRpb246IHByaW9yaXTDoXMgZmVsw7xsw61yw6FzYSBhIGtyaXRpa3Vzc8OhZyDDqXMgaGF0w6FzIGFsYXBqw6FuLiBBbGFww6lydGVsbWV6ZXR0IHRhcnRhbMOpazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdDc2F0bGFrb3p0YXR2YSBpZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnQSBwcmlvcml0w6FzbGVmb2dsYWzDoXMgYWxhcMOpcnRlbG1lemV0dCB2aXNlbGtlZMOpc2UgYXogZWzFkXTDqXRwcm9ncmFtb2tvbiBhIGtyaXRpa3Vzc8OhZyDDqXMgaGF0w6FzIGFsYXBqw6FuLiBFenQgYXogZWzFkXTDqXRwcm9ncmFtcmEgamVsbGVtesWRIFByaW9yaXR5QnlDSVAgYmXDoWxsw610w6Fzb2sgZmVsw7xsYsOtcsOhbGhhdGrDoWsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICdNxbF2ZWxldGVrIG1lZ2hhdMOhcm96w6FzYSwgYWhvbCBlZ3kgYmXDoWxsw610w6Fzb2sgZ29tYiDDqXJoZXTFkSBlbCBhIGthcGNzb2x0IG9iamVrdHVtb2sgZmVsw7xsZXRpIGVsZW1lbiAoTGlua09iamVjdDo6Vmlld01vZGUgPSDigJ7DtnNzemV0ZXR04oCdKS4gTmUgZmVsZWRqZSwgaG9neSBlemVrbmVrIGEgbcWxdmVsZXRla25layByZW5kZWxrZXpuacO8ayBrZWxsIGEga8O2dmV0a2V6xZEgSlMgw6lzIENTUyBmw6FqbG9rIHJlZ2lzenRyw6Fsw6Fzw6F2YWw6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIMOpcyBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdBbm5hayBtZWdoYXTDoXJvesOhc2EsIGhvZ3kgbWVseSBvc3psb3BvayBsZWd5ZW5layBsw6F0aGF0w7NrIGEga2FwY3NvbHQgc3pvbGfDoWx0YXTDoXNvayBmZWzDvGxldGkgZWxlbWVuIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9IOKAnsO2c3N6ZXRldHTigJ0pLiBNZWdqZWd5esOpczogY3NhayBzem9sZ8OhbHRhdMOhcyBhdHRyaWLDunR1bW9rIGVuZ2Vkw6lseWV6ZXR0ZWsgYXogYWxhcMOpcnRlbG1lemV0dCBvc3psb3Bva27DoWwuIExlaGV0c8OpZ2VzIGJlw6FsbMOtdMOhc29rOiAwID0gbGV0aWx0dmEsIDEgPSBlbMOpcmhldMWRLCAyID0gYWxhcMOpcnRlbG1lemV0dGVuIGVuZ2Vkw6lseWV6ZXR0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdG9iby9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBheiBpbnRlcm5ldGVuIGzDqXbFkSB0w6Fyb2zDs2sgbGlzdMOhasOhdC4gRWd5IG3DoXNpayB0ZWxlcMOtdMOpcyBpcyBoYXN6bsOhbGhhdMOzIHTDoXJvbMOza8OpbnQsIHDDqWxkw6F1bDogS3VsY3M94oCeaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPeKAnSDDqXMgVGFydGFsb2094oCeVmFsYW1pbHllbiBuw6l24oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnRsO8Z2cgZXR0xZFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICdFcsWRbHRldMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0VsxZF0w6l0cHJvZ3JhbSBtb2R1bCByZWdpc3p0csOhY2nDsyBheiBhZG1pbmlzenRyw6FjacOzcyB0ZXLDvGxldGVuIGzDqXbFkSBrcml0aWt1c3PDoWcg4oaUIGhhdMOhcyDihpQgcHJpb3JpdMOhcyBsZWZvZ2xhbMOhcyBiZcOhbGzDrXTDoXNob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFbMWRdMOpdHByb2dyYW0gbW9kdWwgcmVnaXN6dHLDoWNpw7MgYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGzDqXbFkSBTTEEgb2JqZWt0dW1ob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VsxZF0w6l0cHJvZ3JhbSBtb2R1bCByZWdpc3p0csOhY2nDsyBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4gbMOpdsWRIFNMQSBueW9tdGF0w6FzIG9iamVrdHVtaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VsxZF0w6l0cHJvZ3JhbSBtb2R1bCByZWdpc3p0csOhY2nDsyBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4gbMOpdsWRIFNMQSBuYWd5w610w6FzIG9iamVrdHVtaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VsxZF0w6l0cHJvZ3JhbSBtb2R1bCByZWdpc3p0csOhY2nDsyBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4gbMOpdsWRIHN6b2xnw6FsdGF0w6FzIG9iamVrdHVtaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWzFkXTDqXRwcm9ncmFtIG1vZHVsIHJlZ2lzenRyw6FjacOzIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbiBsw6l2xZEgc3pvbGfDoWx0YXTDoXMgbnlvbXRhdMOhcyBvYmpla3R1bWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWzFkXTDqXRwcm9ncmFtIG1vZHVsIHJlZ2lzenRyw6FjacOzIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbiBsw6l2xZEgc3pvbGfDoWx0YXTDoXMgbmFnecOtdMOhcyBvYmpla3R1bWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnSVRTTSBTTEEgw6F0dGVraW50w6lzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnSVRTTSBzem9sZ8OhbHRhdMOhcyDDoXR0ZWtpbnTDqXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICdJbmNpZGVuc8OhbGxhcG90IHTDrXB1c2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdUYXJ0YWxtYXp6YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGVkIGluJ30gPSAnRWJiZW4gdGFsw6FsaGF0w7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRpb24gb2YnfSA9ICdFbm5layBoZWx5ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ1ByaW9yaXTDoXNtw6F0cml4IGtlemVsw6lzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBjcml0aWNhbGl0eSAtIGltcGFjdCAtIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdBIGtyaXRpa3Vzc8OhZyDihpQgaGF0w6FzIOKGlCBwcmlvcml0w6FzIG3DoXRyaXgga2V6ZWzDqXNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnRWd5IG1vZHVsIGEgVmlzc3phIG1lbsO8cG9udCBtZWdqZWxlbsOtdMOpc8OpaGV6IGF6IFNMQSBtZW7DvGJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdFZ3kgbW9kdWwgYSBWaXNzemEgbWVuw7xwb250IG1lZ2plbGVuw610w6lzw6loZXogYSBzem9sZ8OhbHRhdMOhcyBtZW7DvGJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdFZ3kgbW9kdWwgYXogw5Zzc3pla2FwY3NvbMOhcyBtZW7DvHBvbnQgbWVnamVsZW7DrXTDqXPDqWhleiBhIHN6b2xnw6FsdGF0w6FzIG1lbsO8YmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ0VneSBtb2R1bCBhIE55b210YXTDoXMgbWVuw7xwb250IG1lZ2plbGVuw610w6lzw6loZXogYXogU0xBIG1lbsO8YmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdFZ3kgbW9kdWwgYSBOeW9tdGF0w6FzIG1lbsO8cG9udCBtZWdqZWxlbsOtdMOpc8OpaGV6IGEgc3pvbGfDoWx0YXTDoXMgbWVuw7xiZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZid9ID0gJ0tpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbcOpdGVyZWsgYXogaW5jaWRlbnPDoWxsYXBvdG9raG96IGEgYmXDoWxsw610w6Fzb2sgbsOpemV0YmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnUsOpc3plIGVubmVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXbDoW5zIGV6emVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1N6w7xrc8OpZ2VzIGVoaGV6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQSDDoXR0ZWtpbnTDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ1NMQSBueW9tdGF0w6FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdTTEEgbmFnecOtdMOhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1N6b2xnw6FsdGF0w6FzIMOhdHRla2ludMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ1N6b2xnw6FsdGF0w6FzIG55b210YXTDoXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICdTem9sZ8OhbHRhdMOhcyBuYWd5w610w6FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdTem9sZ8OhbHRhdMOhcyB0ZXLDvGxldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnQSBoaXZhdGtvesOhc29rIHTDrXB1c8OhbmFrIMOpcyBpcsOhbnnDoW5hayBiZcOhbGzDrXTDoXNhLCBob2d5IGhhc3puw6FsaGF0w7MgbGVneWVuIGF6IGluY2lkZW5zw6FsbGFwb3Qga2lzesOhbcOtdMOhc8OhaG96IEEga3VsY3MgYSBoaXZhdGtvesOhc3TDrXB1cyBuZXZlIChhaG9neSBhIExpbmtPYmplY3Q6OlR5cGUgw6lydMOpa8OpYmVuIHZhbiBtZWdoYXTDoXJvenZhKSwgw6lzIGF6IMOpcnTDqWsgYXogSW5jaWRlbnRMaW5rVHlwZSBpcsOhbnlhLCBhbWVseWV0IGvDtnZldG5pZSBrZWxsIGF6IGluY2lkZW5zw6FsbGFwb3Qga2lzesOhbcOtdMOhc8OhaG96LiBQw6lsZMOhdWwgaGEgYXogSW5jaWRlbnRMaW5rVHlwZSDigJ5EZXBlbmRzT27igJ0gw6lydMOpa3JlIHZhbiDDoWxsw610dmEsIMOpcyBheiBpcsOhbnkg4oCeRm9ycsOhc+KAnSwgYWtrb3IgY3NhayBhIOKAnkRlcGVuZHMgb27igJ0gaGl2YXRrb3rDoXNvayBsZXN6bmVrIGvDtnZldHZlICjDqXMgbmVtIGF6IGVsbGVudMOpdGVzIOKAnlJlcXVpcmVkIGZvcuKAnSBoaXZhdGtvesOhcykgYXogaW5jaWRlbnPDoWxsYXBvdCBraXN6w6Ftw610w6Fzw6Fob3ouIEhvenrDoWFkaGF0IHRvdsOhYmJpIGhpdmF0a296w6FzdMOtcHVzb2thdCDDqXMgaXLDoW55b2thdCwgYWhvZ3kgY3NhayBzemVyZXRuw6ksIHDDqWxkw6F1bCDigJ5JbmNsdWRlc+KAnSBhIOKAnkPDqWzigJ0gaXLDoW5ueWFsLiBNaW5kZW4gTGlua09iamVjdDo6VHlwZSByZW5kc3plcmJlw6FsbMOtdMOhc2kgbGVoZXTFkXPDqWdiZW4gbWVnaGF0w6Fyb3pvdHQgaGl2YXRrb3rDoXN0w61wdXMgbGVoZXRzw6lnZXMsIMOpcyBheiBpcsOhbnkg4oCeRm9ycsOhc+KAnSwg4oCeQ8OpbOKAnSB2YWd5IOKAnk1pbmRrZXR0xZHigJ0gbGVoZXQuIEZPTlRPUzogTUlVVMOBTiBWw4FMVE9aVEFUw4FTT0tBVCBIQUpUT1RUIFbDiUdSRSBFWkVOIEEgUkVORFNaRVJCRcOBTEzDjVTDgVNPTiwgTEUgS0VMTCBGVVRUQVROSUEgYSDigJ5iaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGXigJ0gS09OWk9MUEFSQU5DU09UIEFaw4lSVCwgSE9HWSBNSU5ERU4gSU5DSURFTlPDgUxMQVBPVCDDmkpSQSBLSVNaw4FNw41Uw4FTUkEgS0VSw5xMSsOWTiBBWiDDmkogQkXDgUxMw41Uw4FTT0sgQUxBUErDgU4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJ0EgamVsZW5sZWdpIHN6b2xnw6FsdGF0w6FzIGluY2lkZW5zw6FsbGFwb3QtamVsesWRasOpbmVrIG1lZ2plbGVuw610w6lzZSBhIGplZ3lpbmZvcm3DoWNpw7NrYmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICdGb3Jyw6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Z2dlc3QnfSA9ICdKYXZhc2xhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01DaGFuZ2XigJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5UaWNrZXTigJ0gb2JqZWt0dW1va2thbCBhIOKAnk5vcm1hbOKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeRkFR4oCdIG9iamVrdHVtb2trYWwgYSDigJ5Ob3JtYWzigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeRkFR4oCdIG9iamVrdHVtb2trYWwgYSDigJ5QYXJlbnRDaGlsZOKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnkZBUeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeUmVsZXZhbnRUb+KAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5TZXJ2aWNl4oCdIG9iamVrdHVtb2trYWwgYXog4oCeQWx0ZXJuYXRpdmVUb+KAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnlNlcnZpY2XigJ0gb2JqZWt0dW1va2thbCBhIOKAnkRlcGVuZHNPbuKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5TZXJ2aWNl4oCdIG9iamVrdHVtb2trYWwgYSDigJ5SZWxldmFudFRv4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeVGlja2V04oCdIG9iamVrdHVtb2trYWwgYXog4oCeQWx0ZXJuYXRpdmVUb+KAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeVGlja2V04oCdIG9iamVrdHVtb2trYWwgYSDigJ5EZXBlbmRzT27igJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYSDigJ5UaWNrZXTigJ0gb2JqZWt0dW1va2thbCBhIOKAnlJlbGV2YW50VG/igJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBtw6FzIOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtb2trYWwgYXog4oCeQWx0ZXJuYXRpdmVUb+KAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBtw6FzIOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtb2trYWwgYSDigJ5Db25uZWN0ZWRUb+KAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgbcOhcyDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeRGVwZW5kc09u4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIG3DoXMg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW1va2thbCBheiDigJ5JbmNsdWRlc+KAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdMb2NhdGlvbk9mXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIG3DoXMg4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW1va2thbCBhIOKAnkxvY2F0aW9uT2bigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNQ29uZmlnSXRlbeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBtw6FzIOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtb2trYWwgYSDigJ5SZWxldmFudFRv4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcsIGhvZ3kgZWd5IOKAnklUU01Xb3JrT3JkZXLigJ0gb2JqZWt0dW0gw7Zzc3pla8O2dGhldMWRLWUgYXog4oCeSVRTTUNvbmZpZ0l0ZW3igJ0gb2JqZWt0dW1va2thbCBhIOKAnkRlcGVuZHNPbuKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNV29ya09yZGVy4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGF6IOKAnklUU01Db25maWdJdGVt4oCdIG9iamVrdHVtb2trYWwgYSDigJ5Ob3JtYWzigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5JVFNNV29ya09yZGVy4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeU2VydmljZeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeRGVwZW5kc09u4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTVdvcmtPcmRlcuKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnlNlcnZpY2XigJ0gb2JqZWt0dW1va2thbCBhIOKAnk5vcm1hbOKAnSBoaXZhdGtvesOhc3TDrXB1cyBoYXN6bsOhbGF0w6F2YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeSVRTTVdvcmtPcmRlcuKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnlRpY2tldOKAnSBvYmpla3R1bW9ra2FsIGEg4oCeTm9ybWFs4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5TZXJ2aWNl4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeRkFR4oCdIG9iamVrdHVtb2trYWwgYSDigJ5Ob3JtYWzigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZywgaG9neSBlZ3kg4oCeU2VydmljZeKAnSBvYmpla3R1bSDDtnNzemVrw7Z0aGV0xZEtZSBhIOKAnkZBUeKAnSBvYmpla3R1bW9ra2FsIGEg4oCeUGFyZW50Q2hpbGTigJ0gaGl2YXRrb3rDoXN0w61wdXMgaGFzem7DoWxhdMOhdmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnLCBob2d5IGVneSDigJ5TZXJ2aWNl4oCdIG9iamVrdHVtIMO2c3N6ZWvDtnRoZXTFkS1lIGEg4oCeRkFR4oCdIG9iamVrdHVtb2trYWwgYSDigJ5SZWxldmFudFRv4oCdIGhpdmF0a296w6FzdMOtcHVzIGhhc3puw6FsYXTDoXZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcgYXog4oCeQWx0ZXJuYXRpdmVUb+KAnSBoaXZhdGtvesOhc3TDrXB1c3QuIEhhIGEgZm9ycsOhc27DqXYgYSBjw6lsbsOpdiB1Z3lhbmF6dCBheiDDqXJ0w6lrZXQgdGFydGFsbWF6emEsIGFra29yIGF6IGVyZWRtw6luecO8bCBrYXBvdHQgaGl2YXRrb3rDoXMgbmVtIGxlc3ogaXLDoW55w610b3R0LiBIYSBheiDDqXJ0w6lrZWsgZWx0w6lybmVrLCBha2tvciBheiBlcmVkbcOpbnnDvGwga2Fwb3R0IGhpdmF0a296w6FzIGlyw6FuecOtdG90dCBoaXZhdGtvesOhcyBsZXN6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcgYSDigJ5Db25uZWN0ZWRUb+KAnSBoaXZhdGtvesOhc3TDrXB1c3QuIEhhIGEgZm9ycsOhc27DqXYgYSBjw6lsbsOpdiB1Z3lhbmF6dCBheiDDqXJ0w6lrZXQgdGFydGFsbWF6emEsIGFra29yIGF6IGVyZWRtw6luecO8bCBrYXBvdHQgaGl2YXRrb3rDoXMgbmVtIGxlc3ogaXLDoW55w610b3R0LiBIYSBheiDDqXJ0w6lrZWsgZWx0w6lybmVrLCBha2tvciBheiBlcmVkbcOpbnnDvGwga2Fwb3R0IGhpdmF0a296w6FzIGlyw6FuecOtdG90dCBoaXZhdGtvesOhcyBsZXN6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0V6IGEgYmXDoWxsw610w6FzIGhhdMOhcm96emEgbWVnIGEg4oCeRGVwZW5kc09u4oCdIGhpdmF0a296w6FzdMOtcHVzdC4gSGEgYSBmb3Jyw6FzbsOpdiBhIGPDqWxuw6l2IHVneWFuYXp0IGF6IMOpcnTDqWtldCB0YXJ0YWxtYXp6YSwgYWtrb3IgYXogZXJlZG3DqW55w7xsIGthcG90dCBoaXZhdGtvesOhcyBuZW0gbGVzeiBpcsOhbnnDrXRvdHQuIEhhIGF6IMOpcnTDqWtlayBlbHTDqXJuZWssIGFra29yIGF6IGVyZWRtw6luecO8bCBrYXBvdHQgaGl2YXRrb3rDoXMgaXLDoW55w610b3R0IGhpdmF0a296w6FzIGxlc3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZyBheiDigJ5JbmNsdWRlc+KAnSBoaXZhdGtvesOhc3TDrXB1c3QuIEhhIGEgZm9ycsOhc27DqXYgYSBjw6lsbsOpdiB1Z3lhbmF6dCBheiDDqXJ0w6lrZXQgdGFydGFsbWF6emEsIGFra29yIGF6IGVyZWRtw6luecO8bCBrYXBvdHQgaGl2YXRrb3rDoXMgbmVtIGxlc3ogaXLDoW55w610b3R0LiBIYSBheiDDqXJ0w6lrZWsgZWx0w6lybmVrLCBha2tvciBheiBlcmVkbcOpbnnDvGwga2Fwb3R0IGhpdmF0a296w6FzIGlyw6FuecOtdG90dCBoaXZhdGtvesOhcyBsZXN6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnTG9jYXRpb25PZlwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFeiBhIGJlw6FsbMOtdMOhcyBoYXTDoXJvenphIG1lZyBhIOKAnkxvY2F0aW9uT2bigJ0gaGl2YXRrb3rDoXN0w61wdXN0LiBIYSBhIGZvcnLDoXNuw6l2IGEgY8OpbG7DqXYgdWd5YW5henQgYXogw6lydMOpa2V0IHRhcnRhbG1henphLCBha2tvciBheiBlcmVkbcOpbnnDvGwga2Fwb3R0IGhpdmF0a296w6FzIG5lbSBsZXN6IGlyw6FuecOtdG90dC4gSGEgYXogw6lydMOpa2VrIGVsdMOpcm5laywgYWtrb3IgYXogZXJlZG3DqW55w7xsIGthcG90dCBoaXZhdGtvesOhcyBpcsOhbnnDrXRvdHQgaGl2YXRrb3rDoXMgbGVzei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgaGF0w6Fyb3p6YSBtZWcgYSDigJ5SZWxldmFudFRv4oCdIGhpdmF0a296w6FzdMOtcHVzdC4gSGEgYSBmb3Jyw6FzbsOpdiBhIGPDqWxuw6l2IHVneWFuYXp0IGF6IMOpcnTDqWtldCB0YXJ0YWxtYXp6YSwgYWtrb3IgYXogZXJlZG3DqW55w7xsIGthcG90dCBoaXZhdGtvesOhcyBuZW0gbGVzeiBpcsOhbnnDrXRvdHQuIEhhIGF6IMOpcnTDqWtlayBlbHTDqXJuZWssIGFra29yIGF6IGVyZWRtw6luecO8bCBrYXBvdHQgaGl2YXRrb3rDoXMgaXLDoW55w610b3R0IGhpdmF0a296w6FzIGxlc3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0F6IElUU00gc3rDtnZlZ2RvYm96b2sgc3rDqWxlc3PDqWdlLic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==</File>
        <File Location="Kernel/Language/id_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmlkX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnS3JpdGlrYWxpdGFz4oaURGFtcGFr4oaUUHJpb3JpdGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICdNZW5nZWxvbGEgaGFzaWwgbWVtcHJpb3JpdGFza2FuIGtvbWJpbmFzaSBLcml0aWthbGl0YXMg4oaUIERhbXBhayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQWxva2FzaSBQcmlvcml0YXMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdXYWt0dSBtaW5pbWFsIGFudGFyYSBpbnNpZGVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnS3JpdGlrYWxpdGFzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2kgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1RlcmFraGlyIGRpdWJhaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdUZXJha2hpciBkaXJ1YmFoIG9sZWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ0xheWFuYW4geWFuZyB0ZXJrYWl0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFzaSBMYXlhbmFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdTdGF0dXMgaW5zaWRlbiBzYWF0IGluaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEEgeWFuZyB0ZXJrYWl0JzsKCiAgICAjIFRlbXBsYXRlOiBUaWNrZXRJbmZvcm1hdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIENyaXRpY2FsaXR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnRGFtcGFrJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YXR1cyBpbnNpZGVuIHNhYXQgaW5pJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YXR1cyBpbnNpZGVuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXh0ZXJuYWwtc291cmNlIGtleSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgLyBTT1BNIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnb3BlcmFzaW9uYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdpbnNpZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdMYXlhbmFuIHBlbmdndW5hIGFraGlyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250IGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2sgZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdQZW5nZWxvbGEgSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnTWVsYXBvcmthbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ09wZXJhc2lvbmFsIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJveWVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ01lbmRhc2FyaSBrb250cmFrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnTGFpbi1sYWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0tldGVyc2VkaWFhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnV2FrdHUgTWVyZXNwb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1dha3R1IFBlbXVsaWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdUaW5na2F0IFJlc29sdXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWtzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdLZXNhbGFoYW4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ0FsdGVybmF0aWYgdW50dWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdUZXJodWJ1bmcga2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdG9iby9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdUZXJnYW50dW5nIGtlcGFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUGVuZGFmdGFyYW4gbW9kdWwgRnJvbnRlbmQgdW50dWsga29uZmlndXJhc2kgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgcGFkYSBkYWVyYWggYWRtaW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZW5kYWZ0YXJhbiBtb2R1bCBGcm9udGVuZCB1bnR1ayBvYmplayBBZ2VudElUU01TTEEgcGFkYSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVuZGFmdGFyYW4gbW9kdWwgRnJvbnRlbmQgdW50dWsgb2JqZWsgQWdlbnRJVFNNU0xBUHJpbnQgcGFkYSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZW5kYWZ0YXJhbiBtb2R1bCBGcm9udGVuZCB1bnR1ayBvYmplayBBZ2VudElUU01TTEFab29tIHBhZGEgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVuZGFmdGFyYW4gbW9kdWwgRnJvbnRlbmQgdW50dWsgb2JqZWsgQWdlbnRJVFNNU2VydmljZSBwYWRhIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVuZGFmdGFyYW4gbW9kdWwgRnJvbnRlbmQgdW50dWsgb2JqZWsgQWdlbnRJVFNNU2VydmljZVByaW50IHBhZGEgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1BlbmRhZnRhcmFuIG1vZHVsIEZyb250ZW5kIHVudHVrIG9iamVrIEFnZW50SVRTTVNlcnZpY2Vab29tIHBhZGEgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJ0tlc2VsdXJ1aGFuIElUU00gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdMYXlhbmFuIGtlc2VsdXJ1aGFuIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ0luc2lkZW4gamVuaXMgc3RhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdUZXJtYXN1ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGVkIGluJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0aW9uIG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnS2Vsb2xhIG1hdHJpa3MgcHJpb3JpdGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgY3JpdGljYWxpdHkgLSBpbXBhY3QgLSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdNb2R1bCB1bnR1ayBtZW5hbXBpbGthbiB0YXV0YW4ga2VtYmFsaSBkaSBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bCB1bnR1ayBtZW5hbXBpbGthbiB0YXV0YW4ga2VtYmFsaSBkaSBtZW51IGxheWFuYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVuYW1waWxrYW4gdGF1dGFuIGxpbmsgZGkgbWVudSBsYXlhbmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ01vZHVsIHVudHVrIG1lbmFtcGlsa2FuIHRhdXRhbiBjZXRhayBkaSBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVuYW1waWxrYW4gdGF1dGFuIGNldGFrIGRpIG1lbnUgbGF5YW5hbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXJhbWV0ZXIgdW50dWsgc3RhdHVzIGluc2lkZW4gZGkgdGFtcGlsYW4gcGlsaWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ0JhZ2lhbiBkYXJpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnQmVyaHVidW5nYW4gZGVuZ2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ0RpcGVybHVrYW4gdW50dWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnR2FtYmFyYW4gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICdTTEEgUHJpbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnWm9vbSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ0dhbWJhcmFuIExheWFuYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICdMYXlhbmFuIHByaW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICdMYXlhbmFuIFpvb20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnRGFlcmFoLUxheWFuYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoZSBjdXJyZW50IHNlcnZpY2UgaW5jaWRlbnQgc3RhdGUgc2lnbmFsIGluIHRoZSB0aWNrZXQgaW5mb3JtYXRpb24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Z2dlc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNQ2hhbmdlXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ1Rpa2V0XCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Db25maWdJdGVtXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ0ZBUVwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01DaGFuZ2VcJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnRkFRXCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Db25maWdJdGVtXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ0ZBUVwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNQ29uZmlnSXRlbVwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdTZXJ2aWNlXCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnQWx0ZXJuYXRpdmVUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnU2VydmljZVwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Db25maWdJdGVtXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ1NlcnZpY2VcJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNQ29uZmlnSXRlbVwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdUaWNrZXRcJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdBbHRlcm5hdGl2ZVRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Db25maWdJdGVtXCcgZGFwYXQgZGkgaHVidW5na2FuIGRlbmdhbiBvYmplayBcJ1RpY2tldFwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnVGlja2V0XCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNQ29uZmlnSXRlbVwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdUaWNrZXRcJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdBbHRlcm5hdGl2ZVRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNQ29uZmlnSXRlbVwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdJVFNNQ29uZmlnSXRlbVwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ0Nvbm5lY3RlZFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdEZXBlbmRPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdJbmNsdWRlc1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gYmFod2Egb2JqZWsgXCdJVFNNQ29uZmlnSXRlbVwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdJVFNNQ29uZmlnSXRlbVwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Xb3JrT3JkZXJcJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Xb3JrT3JkZXJcJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnSVRTTUNvbmZpZ0l0ZW1cJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnSVRTTVdvcmtPcmRlclwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdTZXJ2aWNlXCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Xb3JrT3JkZXJcJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnU2VydmljZVwnIGRlbmdhbiBtZW5nZ3VuYWthbiB0aXBlIHRhdXRhbiBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ0lUU01Xb3JrT3JkZXJcJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnVGlja2V0XCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnU2VydmljZVwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdGQVFcJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiBiYWh3YSBvYmplayBcJ1NlcnZpY2VcJyBkYXBhdCBkaSBodWJ1bmdrYW4gZGVuZ2FuIG9iamVrIFwnRkFRXCcgZGVuZ2FuIG1lbmdndW5ha2FuIHRpcGUgdGF1dGFuIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIGJhaHdhIG9iamVrIFwnU2VydmljZVwnIGRhcGF0IGRpIGh1YnVuZ2thbiBkZW5nYW4gb2JqZWsgXCdGQVFcJyBkZW5nYW4gbWVuZ2d1bmFrYW4gdGlwZSB0YXV0YW4gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gdGlwZSB0YXV0YW4gXCdBbHRlcm5hdGl2ZVRvXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgdGFyZ2V0IG1lbWlsaWtpIG5pbGFpIHlhbmcgc2FtYSwgbWFrYSBoYXNpbG55YSBhZGFsYWggVGF1dGFuIFRhayBiZXJhcmFoLiBKaWthIG5pbGFpbnlhIGJlcmJlZGEsIG1ha2EgaGFzaWxueWEgYWRhbGFoIHRhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnUGVuZ2F0dXJhbiBpbmkgbWVuZW50dWthbiB0aXBlIHRhdXRhbiBcJ0Nvbm5lY3RlZFRvXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgdGFyZ2V0IG1lbWlsaWtpIG5pbGFpIHlhbmcgc2FtYSwgbWFrYSBoYXNpbG55YSBhZGFsYWggVGF1dGFuIFRhayBiZXJhcmFoLiBKaWthIG5pbGFpbnlhIGJlcmJlZGEsIG1ha2EgaGFzaWxueWEgYWRhbGFoIHRhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1BlbmdhdHVyYW4gaW5pIG1lbmVudHVrYW4gdGlwZSB0YXV0YW4gXCdEZXBlbmRzT25cJy4gSmlrYSBuYW1hIHN1bWJlciBkYW4gbmFtYSB0YXJnZXQgbWVtaWxpa2kgbmlsYWkgeWFuZyBzYW1hLCBtYWthIGhhc2lsbnlhIGFkYWxhaCBUYXV0YW4gVGFrIGJlcmFyYWguIEppa2EgbmlsYWlueWEgYmVyYmVkYSwgbWFrYSBoYXNpbG55YSBhZGFsYWggdGF1dGFuIGJlcmFyYWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIHRpcGUgdGF1dGFuIFwnSW5jbHVkZXNcJy4gSmlrYSBuYW1hIHN1bWJlciBkYW4gbmFtYSB0YXJnZXQgbWVtaWxpa2kgbmlsYWkgeWFuZyBzYW1hLCBtYWthIGhhc2lsbnlhIGFkYWxhaCBUYXV0YW4gVGFrIGJlcmFyYWguIEppa2EgbmlsYWlueWEgYmVyYmVkYSwgbWFrYSBoYXNpbG55YSBhZGFsYWggdGF1dGFuIGJlcmFyYWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdMb2NhdGlvbk9mXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdQZW5nYXR1cmFuIGluaSBtZW5lbnR1a2FuIHRpcGUgdGF1dGFuIFwnUmVsZXZhbnRUb1wnLiBKaWthIG5hbWEgc3VtYmVyIGRhbiBuYW1hIHRhcmdldCBtZW1pbGlraSBuaWxhaSB5YW5nIHNhbWEsIG1ha2EgaGFzaWxueWEgYWRhbGFoIFRhdXRhbiBUYWsgYmVyYXJhaC4gSmlrYSBuaWxhaW55YSBiZXJiZWRhLCBtYWthIGhhc2lsbnlhIGFkYWxhaCB0YXV0YW4gYmVyYXJhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTGViYXIgZGFyaSB0ZXh0YXJlYXMgSVRTTS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/it_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Oml0X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnQ3JpdGljaXTDoCDihpQgSW1wYXR0byDihpQgUHJpb3JpdMOgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICdHZXN0aXJlIGlsIHJpc3VsdGF0byBwcmlvcml0YXJpbyBkZWxsYSBjb21iaW5hemlvbmUgZGkgQ3JpdGljaXTDoCDihpQgSW1wYXR0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0Fzc2VnbmF6aW9uZSBwcmlvcml0YXJpYSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ1RlbXBvIG1pbmltbyB0cmEgaW5jaWRlbnRpJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnVXJnZW56YSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYXppb25pIHN1bGxlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdVbHRpbWEgbW9kaWZpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnVWx0aW1hIG1vZGlmaWNhIGVmZmV0dHVhdGEgZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1NlcnZpemkgYXNzb2NpYXRpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWF6aW9uaSBzdWwgc2Vydml6aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ1N0YXRvIGF0dHVhbGUgZGVsbFwnaW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQSBhc3NvY2lhdGknOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhdHRvJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnTmVzc3VubyBTTEFJRCDDqCBkYXRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU0xBSUQgJXMgbm9uIHRyb3ZhdG8gbmVsIGRhdGFiYXNlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnQ2FsZW5kYXJpbyBwcmVmZXJpdG8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnb3BlcmF0aXZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICdhdnZlcnRpbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICdpbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnTmVzc3VuIFNlcnZpY2VJRCDDqCBkYXRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ1NlcnZpY2VJRCAlcyBub24gdHJvdmF0byBuZWwgZGF0YWJhc2UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdTdGF0byBhdHR1YWxlIGRlbGxcJ0luY2lkZW50ZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdTdGF0byBkZWxsXCdpbmNpZGVudGUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkL0RyaXZlci9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHRlcm5hbC1zb3VyY2Uga2V5J30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCAvIFNPUE0gRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYXRpdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpemlvIHV0ZW50ZSBmaW5hbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnSW50ZXJmYWNjaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdNb3RvcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lUIE1hbmFnZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmFwcG9ydGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBPcGVyYXRpb25hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGltb3N0cmF6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvZ2V0dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnQ29udHJhdHRvIGRpIGJhc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbHRybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaXTDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVGVtcG8gZGkgcmlzcG9zdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RlbXBvIGRpIHJpcHJpc3Rpbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnVmVsb2NpdMOgIGRpIHJpc29sdXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYXppb25pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0Vycm9yaSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdm8gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0Nvbm5lc3NvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ0RlZmluaXJlIHF1YWxpIGNvbG9ubmUgdmVuZ29ubyB2aXN1YWxpenphdGUgbmVsIHdpZGdldCBTZXJ2aXppIGNvbGxlZ2F0aSAoTGlua09iamVjdCA6OiBWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGE6IHNvbG8gZ2xpIGF0dHJpYnV0aSBkaSBzZXJ2aXppbyBzb25vIGNvbnNlbnRpdGkgcGVyIERlZmF1bHRDb2x1bW5zLiBJbXBvc3RhemlvbmkgcG9zc2liaWxpOiAwID0gRGlzYWJpbGl0YXRvLCAxID0gRGlzcG9uaWJpbGUsIDIgPSBBYmlsaXRhdG8gcGVyIGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnRGVwZW5kZSBkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVnaXN0cmF6aW9uZSBkZWwgbW9kdWxvIGZyb250ZW5kIHBlciBsYSBjb25maWd1cmF6aW9uZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBuZWxsXCdhcmVhIGRpIGFtbWluaXN0cmF6aW9uZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhemlvbmUgZGVsIG1vZHVsbyBmcm9udGVuZCBwZXIgbFwnb2dnZXR0byBBZ2VudElUU01TTEEgbmVsbFwnaW50ZXJmYWNjaWEgYWdlbnRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyYXppb25lIGRlbCBtb2R1bG8gZnJvbnRlbmQgcGVyIGxcJ29nZ2V0dG8gQWdlbnRJVFNNU0xBUHJpbnQgbmVsbFwnaW50ZXJmYWNjaWEgYWdlbnRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhemlvbmUgZGVsIG1vZHVsbyBmcm9udGVuZCBwZXIgbFwnb2dnZXR0byBBZ2VudElUU01TTEFab29tIG5lbGxcJ2ludGVyZmFjY2lhIGFnZW50aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyYXppb25lIGRlbCBtb2R1bG8gZnJvbnRlbmQgcGVyIGxcJ29nZ2V0dG8gQWdlbnRJVFNNU2VydmljZSBuZWxsXCdpbnRlcmZhY2NpYSBhZ2VudGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyYXppb25lIGRlbCBtb2R1bG8gZnJvbnRlbmQgcGVyIGxcJ29nZ2V0dG8gQWdlbnRJVFNNU2VydmljZVByaW50IG5lbGxcJ2ludGVyZmFjY2lhIGFnZW50aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmF6aW9uZSBkZWwgbW9kdWxvIGZyb250ZW5kIHBlciBsXCdvZ2dldHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIG5lbGxcJ2ludGVyZmFjY2lhIGFnZW50aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnUGFub3JhbWljYSBJVFNNIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnUGFub3JhbWljYSBkZWwgc2Vydml6aW8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ1RpcG8gZGkgc3RhdG8gZGVsbFwnaW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnSW5jbHVkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGVkIGluJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0aW9uIG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnR2VzdGlvbmUgZGVsbGEgbWF0cmljZSBkZWxsZSBwcmlvcml0w6AuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgY3JpdGljYWxpdHkgLSBpbXBhY3QgLSBwcmlvcml0eSBtYXRyaXguJ30gPSAnR2VzdGlyZSBsYSBtYXRyaWNlIGRpIGNyaXRpY2l0w6AgLSBpbXBhdHRvIC0gcHJpb3JpdMOgLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdWxvIHBlciBtb3N0cmFyZSBsYSB2b2NlIGRpIG1lbnUgSW5kaWV0cm8gbmVsIG1lbnUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsbyBwZXIgbW9zdHJhcmUgbGEgdm9jZSBkaSBtZW51IEluZGlldHJvIG5lbCBtZW51IGRpIHNlcnZpemlvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsbyBwZXIgbW9zdHJhcmUgbGEgdm9jZSBkaSBtZW51IExpbmsgbmVsIG1lbnUgZGkgc2Vydml6aW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdWxvIHBlciBtb3N0cmFyZSBsYSB2b2NlIGRpIG1lbnUgU3RhbXBhIG5lbCBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWxvIHBlciBtb3N0cmFyZSBsYSB2b2NlIGRpIG1lbnUgU3RhbXBhIG5lbCBtZW51IGRpIHNlcnZpemlvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcmFtZXRyaSBwZXIgZ2xpIHN0YXRpIGRlbGxcJ2luY2lkZW50ZSBuZWxsYSB2aXN0YSBkZWxsZSBwcmVmZXJlbnplLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnUGFydGUgZGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdSaWxldmFudGUgcGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JpY2hpZXN0byBwZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnRGVzY3JpemlvbmUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICdTdGFtcGEgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdab29tIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ0Rlc2NyaXppb25lIGRlbCBzZXJ2aXppbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ1N0YW1wYSBkaSBzZXJ2aXppby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ1pvb20gZGkgc2Vydml6aW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1NlcnZpemlvLUFyZWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ0ltcG9zdGEgaWwgdGlwbyBlIGxhIGRpcmV6aW9uZSBkZWkgY29sbGVnYW1lbnRpIGRhIHV0aWxpenphcmUgcGVyIGNhbGNvbGFyZSBsbyBzdGF0byBkZWxsXCdpbmNpZGVudGUuIExhIGNoaWF2ZSDDqCBpbCBub21lIGRlbCB0aXBvIGRpIGNvbGxlZ2FtZW50byAoY29tZSBkZWZpbml0byBpbiBMaW5rT2JqZWN0OjpUeXBlKSBlIGlsIHZhbG9yZSDDqCBsYSBkaXJlemlvbmUgZGkgSW5jaWRlbnRMaW5rVHlwZSBjaGUgZGV2ZSBlc3NlcmUgc2VndWl0YSBwZXIgY2FsY29sYXJlIGxvIHN0YXRvIGRlbGxcJ2luY2lkZW50ZS4gQWQgZXNlbXBpbywgc2UgSW5jaWRlbnRMaW5rVHlwZSDDqCBpbXBvc3RhdG8gc3UgIkRlcGVuZHNPbiIgZSBsYSBkaXJlemlvbmUgw6ggIk9yaWdpbmUiLCB2ZXJyYW5ubyBzZWd1aXRpIHNvbG8gaSBjb2xsZWdhbWVudGkgIkRpcGVuZGUgZGEiIChlIG5vbiBpbCBjb2xsZWdhbWVudG8gb3Bwb3N0byAiUmljaGllc3RvIHBlciIpIHBlciBjYWxjb2xhcmUgbG8gc3RhdG8gZGVsbFwnaW5jaWRlbnRlLiBQdW9pIGFnZ2l1bmdlcmUgcGnDuSB0aXBpIGRpIGxpbmsgYWxsZSBpbmRpY2F6aW9uaSBkZWdsaSBhbm51bmNpIGNoZSBkZXNpZGVyaSwgYWQgZXMuIFwnSW5jbHVkZVwnIGNvbiBsYSBkaXJlemlvbmUgXCdUYXJnZXRcJy4gVHV0dGkgaSB0aXBpIGRpIGNvbGxlZ2FtZW50byBkZWZpbml0aSBuZWxsZSBvcHppb25pIGRpIHN5c2NvbmZpZyBMaW5rT2JqZWN0IDo6IFR5cGUgc29ubyBwb3NzaWJpbGkgZSBsYSBkaXJlemlvbmUgcHXDsiBlc3NlcmUgIk9yaWdpbmUiLCAiRGVzdGluYXppb25lIiBvICJFbnRyYW1iaSIuIElNUE9SVEFOVEU6IERPUE8gQ0hFIEVGRkVUVFVJIE1PRElGSUNIRSBBIFFVRVNUQSBPUFpJT05FIFNZU0NPTkZJRyBDSEUgREVWSSBFU0VHVUlSRSBQRVIgRVNFR1VJUkUgSUwgQ09NQU5ETyBDT05TT0xFIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSaWNhbGNvbGEgSU4gTU9ETyBDSEUgVFVUVEkgR0xJIFNUQVRJIERJIElOQ0lERU5URSBTQVJBTk5PIFJpY2FsY29sYXRpIGluIGJhc2UgYWxsZSBudW92ZSBpbXBvc3RhemlvbmkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBzdGFiaWxpc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNoYW5nZVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ1RpY2tldFwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ05vcm1hbGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIHN0YWJpbGlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ0ZBUVwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ05vcm1hbGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgc3RhYmlsaXNjZSBjaGUgdW4gb2dnZXR0byBcJ0lUU01Db25maWdJdGVtXCcgcHXDsiBlc3NlcmUgY29sbGVnYXRvIGNvbiBvZ2dldHRpIFwnRkFRXCcgdXNhbmRvIGlsIHRpcG8gZGkgY29sbGVnYW1lbnRvIFwnUGFkcmVGaWdsaW9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ0ZBUVwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0ltcG9ydGFudGVQZXJcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIG9nZ2V0dGkgXCdTZXJ2aXppb1wnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0FsdGVybmF0aXZvQVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIGRlZmluaXNjZSBjaGUgdW4gb2dnZXR0byBcJ0lUU01Db25maWdJdGVtXCcgcHXDsiBlc3NlcmUgY29sbGVnYXRvIGNvbiBvZ2dldHRpIFwnU2Vydml6aW9cJyB1c2FuZG8gaWwgdGlwbyBkaSBjb2xsZWdhbWVudG8gXCdEaXBlbmRlRGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIG9nZ2V0dGkgXCdTZXJ2aXppb1wnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0ltcG9ydGFudGVQZXJcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ1RpY2tldFwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0FsdGVybmF0aXZvQVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIG9nZ2V0dGkgXCdUaWNrZXRcJyB1c2FuZG8gaWwgdGlwbyBkaSBjb2xsZWdhbWVudG8gXCdEaXBlbmRlRGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ1RpY2tldFwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ0ltcG9ydGFudGVQZXJcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIGRlZmluaXNjZSBjaGUgdW4gb2dnZXR0byAiSVRTTUNvbmZpZ0l0ZW0iIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gYWx0cmkgb2dnZXR0aSAiSVRTTUNvbmZpZ0l0ZW0iIHV0aWxpenphbmRvIGlsIHRpcG8gZGkgY29sbGVnYW1lbnRvICJBbHRlcm5hdGl2ZVRvIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gIklUU01Db25maWdJdGVtIiBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIGFsdHJpIG9nZ2V0dGkgIklUU01Db25maWdJdGVtIiB1dGlsaXp6YW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byAiQ29ubmVjdGVkVG8iLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gIklUU01Db25maWdJdGVtIiBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIGFsdHJpIG9nZ2V0dGkgIklUU01Db25maWdJdGVtIiB1dGlsaXp6YW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byAiRGVwZW5kc09uIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gYWx0cmkgb2dnZXR0aSBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGlsIHRpcG8gZGkgY29sbGVnYW1lbnRvIFwnSW5jbHVkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIGFsdHJpIG9nZ2V0dGkgXCdJVFNNQ29uZmlnSXRlbVwnIHV0aWxpenphbmRvIGlsIHRpcG8gZGkgY29sbGVnYW1lbnRvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIGRlZmluaXNjZSBjaGUgdW4gb2dnZXR0byBcJ0lUU01Xb3JrT3JkZXJcJyBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIG9nZ2V0dGkgXCdJVFNNQ29uZmlnSXRlbVwnIHV0aWxpenphbmRvIGlsIHRpcG8gZGkgY29sbGVnYW1lbnRvIFwnRGVwZW5kc09uXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTVdvcmtPcmRlclwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGlsIHRpcG8gZGkgY29sbGVnYW1lbnRvIFwnTm9ybWFsZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGNoZSB1biBvZ2dldHRvIFwnSVRTTVdvcmtPcmRlclwnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ1NlcnZpY2VcJyB1c2FuZG8gaWwgdGlwbyBkaSBjb2xsZWdhbWVudG8gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIGRlZmluaXNjZSBjaGUgdW4gb2dnZXR0byAiSVRTTVdvcmtPcmRlciIgcHXDsiBlc3NlcmUgY29sbGVnYXRvIGNvbiBvZ2dldHRpICJTZXJ2aXppbyIgdXRpbGl6emFuZG8gaWwgdGlwbyBkaSBjb2xsZWdhbWVudG8gIk5vcm1hbGUiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdJVFNNV29ya09yZGVyXCcgcHXDsiBlc3NlcmUgY29sbGVnYXRvIGNvbiBvZ2dldHRpIFwnVGlja2V0XCcgdXNhbmRvIGlsIHRpcG8gZGkgY29sbGVnYW1lbnRvIFwnTm9ybWFsZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gXCdTZXJ2aXppb1wnIHB1w7IgZXNzZXJlIGNvbGxlZ2F0byBjb24gb2dnZXR0aSBcJ0ZBUVwnIHVzYW5kbyBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byBcJ05vcm1hbGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgY2hlIHVuIG9nZ2V0dG8gIlNlcnZpemlvIiBwdcOyIGVzc2VyZSBjb2xsZWdhdG8gY29uIG9nZ2V0dGkgIkZBUSIgdXRpbGl6emFuZG8gaWwgdGlwbyBkaSBjb2xsZWdhbWVudG8gIlBhcmVudENoaWxkIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIGRlZmluaXNjZSBjaGUgdW4gb2dnZXR0byBcJ1NlcnZpemlvXCcgcHXDsiBlc3NlcmUgY29sbGVnYXRvIGNvbiBvZ2dldHRpIFwnRkFRXCcgdXNhbmRvIGlsIHRpcG8gZGkgY29sbGVnYW1lbnRvIFwnSW1wb3J0YW50ZVBlclwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIGRlZmluaXNjZSBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byAiQWx0ZXJuYXRpdmVUbyIuIFNlIGlsIG5vbWUgZGkgb3JpZ2luZSBlIGlsIG5vbWUgZGkgZGVzdGluYXppb25lIGNvbnRlbmdvbm8gbG8gc3Rlc3NvIHZhbG9yZSwgaWwgY29sbGVnYW1lbnRvIHJpc3VsdGFudGUgw6ggbm9uIGRpcmV6aW9uYWxlLiBTZSBpIHZhbG9yaSBzb25vIGRpdmVyc2ksIGlsIGNvbGxlZ2FtZW50byByaXN1bHRhbnRlIMOoIHVuIGNvbGxlZ2FtZW50byBkaXJlemlvbmFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1F1ZXN0YSBpbXBvc3RhemlvbmUgZGVmaW5pc2NlIGlsIHRpcG8gZGkgY29sbGVnYW1lbnRvICJDb25uZWN0ZWRUbyIuIFNlIGlsIG5vbWUgZGkgb3JpZ2luZSBlIGlsIG5vbWUgZGkgZGVzdGluYXppb25lIGNvbnRlbmdvbm8gbG8gc3Rlc3NvIHZhbG9yZSwgaWwgY29sbGVnYW1lbnRvIHJpc3VsdGFudGUgw6ggbm9uIGRpcmV6aW9uYWxlLiBTZSBpIHZhbG9yaSBzb25vIGRpdmVyc2ksIGlsIGNvbGxlZ2FtZW50byByaXN1bHRhbnRlIMOoIHVuIGNvbGxlZ2FtZW50byBkaXJlemlvbmFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIGRlZmluaXNjZSBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byAiRGVwZW5kc09uIi4gU2UgaWwgbm9tZSBkaSBvcmlnaW5lIGUgaWwgbm9tZSBkaSBkZXN0aW5hemlvbmUgY29udGVuZ29ubyBsbyBzdGVzc28gdmFsb3JlLCBpbCBjb2xsZWdhbWVudG8gcmlzdWx0YW50ZSDDqCBub24gZGlyZXppb25hbGUuIFNlIGkgdmFsb3JpIHNvbm8gZGl2ZXJzaSwgaWwgY29sbGVnYW1lbnRvIHJpc3VsdGFudGUgw6ggdW4gY29sbGVnYW1lbnRvIGRpcmV6aW9uYWxlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnUXVlc3RhIGltcG9zdGF6aW9uZSBkZWZpbmlzY2UgaWwgdGlwbyBkaSBjb2xsZWdhbWVudG8gIkluY2x1ZGVzXCciLiBTZSBpbCBub21lIGRpIG9yaWdpbmUgZSBpbCBub21lIGRpIGRlc3RpbmF6aW9uZSBjb250ZW5nb25vIGxvIHN0ZXNzbyB2YWxvcmUsIGlsIGNvbGxlZ2FtZW50byByaXN1bHRhbnRlIMOoIG5vbiBkaXJlemlvbmFsZS4gU2UgaSB2YWxvcmkgc29ubyBkaXZlcnNpLCBpbCBjb2xsZWdhbWVudG8gcmlzdWx0YW50ZSDDqCB1biBjb2xsZWdhbWVudG8gZGlyZXppb25hbGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdMb2NhdGlvbk9mXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIGRlZmluaXNjZSBpbCB0aXBvIGRpIGNvbGxlZ2FtZW50byAiUmVsZXZhbnRUbyIuIFNlIGlsIG5vbWUgZGkgb3JpZ2luZSBlIGlsIG5vbWUgZGkgZGVzdGluYXppb25lIGNvbnRlbmdvbm8gbG8gc3Rlc3NvIHZhbG9yZSwgaWwgY29sbGVnYW1lbnRvIHJpc3VsdGFudGUgw6ggbm9uIGRpcmV6aW9uYWxlLiBTZSBpIHZhbG9yaSBzb25vIGRpdmVyc2ksIGlsIGNvbGxlZ2FtZW50byByaXN1bHRhbnRlIMOoIHVuIGNvbGxlZ2FtZW50byBkaXJlemlvbmFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTGFyZ2hlenphIGRlaSBjYW1waSBkaSB0ZXN0byBkaSBJVFNNJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/ja_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmphX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAn6YeN6KaB5bqm4oaU5b2x6Z+/5bqm4oaU5YSq5YWI5bqmJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICfph43opoHluqbihpTlvbHpn7/jgpLntYTjgb/lkIjjgo/jgZvjgZ/lhKrlhYjluqbjga7ntZDmnpzjgpLnrqHnkIbjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ+WEquWFiOW6puOCkuWJsuOCiuW9k+OBpic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiOmWk+OBruacgOWwj+aZgumWkyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ+mHjeimgeW6pic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnU0xB5oOF5aCxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ+acgOe1guabtOaWsOaXpeaZgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfmnIDntYLmm7TmlrDogIUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ+mWoumAo+OBmeOCi+OCteODvOODk+OCuSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICfjgrXjg7zjg5Pjgrnmg4XloLEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiOOBrueKtuaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICfplqLpgKPjgZnjgotTTEEnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICflvbHpn7/luqYnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICdTTEFJROOBjOS4juOBiOOCieOCjOOBpuOBhOOBvuOBm+OCk++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU0xBSUQgJXMg44Gv44OH44O844K/44OZ44O844K544Gr44GC44KK44G+44Gb44KT77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICfjgqvjg6zjg7Pjg4Djg7zjg7vjg4fjg5Xjgqnjg6vjg4gnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAn6YCa5bi46YGL55SoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICforablkYonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICfjgqTjg7Pjgrfjg4fjg7Pjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnU2VydmljZUlE44Gv5oyH5a6a44GV44KM44Gm44GE44G+44Gb44KT77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU2VydmljZUlEICVzIOOBr+ODh+ODvOOCv+ODmeODvOOCueOBq+OBguOCiuOBvuOBm+OCk++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn54++5Zyo44Gu44Kk44Oz44K344OH44Oz44OI44Gu44K544OG44O844K/44K5JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiOOBruOCueODhuODvOOCv+OCuSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ+mAmuW4uOmBi+eUqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAn44Ko44Oz44OJ44Om44O844K244O744K144O844OT44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ+ODleODreODs+ODiOOCqOODs+ODiSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ+ODkOODg+OCr+OCqOODs+ODiSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVTjg57jg43jg7zjgrjjg6Hjg7Pjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn44Os44Od44O844OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVTjgqrjg5rjg6zjg7zjgrfjg6fjg7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ+ODh+ODouODs+OCueODiOODrOODvOOCt+ODp+ODsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn44OX44Ot44K444Kn44Kv44OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ+aUr+aMgeOBmeOCi+Wlkee0hCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ+S7lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICflj6/nlKjmgKcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ+ODrOOCueODneODs+OCueOCv+OCpOODoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAn44Oq44Kr44OQ44Oq44O744K/44Kk44OgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ+ino+WDj+W6puODrOODvOODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICflj5blvJUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAn44Ko44Op44O8JzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICfku6Pmm7/vvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfmjqXntprvvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jgZXjgozjgZ/jgqrjg5bjgrjjgqfjgq/jg4gg44Km44Kj44K444Kn44OD44OIIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4Iikg44Gn6Kit5a6a44Oc44K/44Oz44GM5L2/55So44Gn44GN44KL44Ki44Kv44K344On44Oz44KS5a6a576p44GX44G+44GZ44CC44GT44KM44KJ44Gu44Ki44Kv44K344On44Oz44Gr44Gv44CBQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3PjgIFDb3JlLlVJLkFsbG9jYXRpb25MaXN0Lmpz44CBQ29yZS5VSS5UYWJsZS5Tb3J0Lmpz44CBQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanPjgIHjgYrjgojjgbMgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzIOOBriBKUyDjgYrjgojjgbMgQ1NTIOODleOCoeOCpOODq+OBjOeZu+mMsuOBleOCjOOBpuOBhOOCi+W/heimgeOBjOOBguOCi+OBk+OBqOOBq+azqOaEj+OBl+OBpuOBj+OBoOOBleOBhOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAn44Oq44Oz44Kv44GV44KM44Gf44K144O844OT44K544Km44Kj44K444Kn44OD44OI44Gr6KGo56S644GV44KM44KL5YiX44KS5a6a576p44GX44G+44GZ77yITGlua09iamVjdCA6OiBWaWV3TW9kZSA9ICJjb21wbGV4Iu+8ieOAgiDms6jvvJpEZWZhdWx0Q29sdW1uc+OBq+OBr+OCteODvOODk+OCueWxnuaAp+OBruOBv+OBjOioseWPr+OBleOCjOOBpuOBhOOBvuOBmeOAgiDlj6/og73jgaroqK3lrprvvJowID3kvb/nlKjkuI3lj6/jgIExID3kvb/nlKjlj6/og73jgIEyID3jg4fjg5Xjgqnjg6vjg4jjgafkvb/nlKjlj6/og73jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn5L6d5a2Y77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfnrqHnkIbjgqjjg6rjgqLjgafjga5BZG1pbklUU01DSVBBbGxvY2F0ZeOBruODleODreODs+ODiOOCqOODs+ODieODouOCuOODpeODvOODq+OBrueZu+mMsuOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44OV44Kn44O844K544GuQWdlbnRJVFNNU0xB44Kq44OW44K444Kn44Kv44OI44CA44OV44Ot44Oz44OI44Ko44Oz44OJ44O744Oi44K444Ol44O844Or44Gu55m76Yyy44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBrkFnZW50SVRTTVNMQVByaW5044Kq44OW44K444Kn44Kv44OI44CA44OV44Ot44Oz44OI44Ko44Oz44OJ44O744Oi44K444Ol44O844Or44Gu55m76Yyy44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44OV44Kn44O844K544GuQWdlbnRJVFNNU0xBWm9vbeOCquODluOCuOOCp+OCr+ODiOOAgOODleODreODs+ODiOOCqOODs+ODieODu+ODouOCuOODpeODvOODq+OBrueZu+mMsuOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBrkFnZW50SVRTTVNlcnZpY2Xjgqrjg5bjgrjjgqfjgq/jg4jjgIDjg5Xjg63jg7Pjg4jjgqjjg7Pjg4njg7vjg6Ljgrjjg6Xjg7zjg6vjga7nmbvpjLLjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBrkFnZW50SVRTTVNlcnZpY2VQcmludOOCquODluOCuOOCp+OCr+ODiOOAgOODleODreODs+ODiOOCqOODs+ODieODu+ODouOCuOODpeODvOODq+OBrueZu+mMsuOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjga5BZ2VudElUU01TZXJ2aWNlWm9vbeOCquODluOCuOOCp+OCr+ODiOOAgOODleODreODs+ODiOOCqOODs+ODieODu+ODouOCuOODpeODvOODq+OBrueZu+mMsuOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICdJVFNNIFNMQSDjga7kuIDopqfjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJ0lUU00g44K144O844OT44K544Gu5LiA6Kan44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICfjgqTjg7Pjgrfjg4fjg7Pjg4jnirbmhYvjga7jgr/jgqTjg5cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICflkKvjgoDvvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ+WEquWFiOW6puOBrumWoumAo+aAp+OCkueuoeeQhuOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJ+mHjeimgeW6puKGlOW9semfv+W6puKGlOWEquWFiOW6puOBrumWoumAo+aAp+OCkueuoeeQhuOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnU0xB44Oh44OL44Ol44O844Gr5oi744KL44Oh44OL44Ol44O86aCF55uu44KS6KGo56S644GZ44KL44Oi44K444Ol44O844Or44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn44K144O844OT44K544Oh44OL44Ol44O844Gr5oi744KL44Oh44OL44Ol44O86aCF55uu44KS6KGo56S644GZ44KL44Oi44K444Ol44O844Or44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn44K144O844OT44K544Oh44OL44Ol44O844Gr44Oq44Oz44Kv44Oh44OL44Ol44O86aCF55uu44KS6KGo56S644GZ44KL44Oi44K444Ol44O844Or44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnU0xB44Oh44OL44Ol44O844Gr5Y2w5Yi344Oh44OL44Ol44O86aCF55uu44KS6KGo56S644GZ44KL44Oi44K444Ol44O844Or44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ+OCteODvOODk+OCueODoeODi+ODpeODvOOBq+WNsOWIt+ODoeODi+ODpeODvOmgheebruOCkuihqOekuuOBmeOCi+ODouOCuOODpeODvOODq+OBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ+ioreWumuODk+ODpeODvOOBp+OBruOCpOODs+OCt+ODh+ODs+ODiOOCueODhuODvOOCv+OCueOBruODkeODqeODoeODvOOCv+ODvOOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAn5LiA6YOo77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAn6Zai6YCj6aCF55uu77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ+W/hemgiO+8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEHjga7mpoLoprMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ1NMQSDjga7ljbDliLfjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnU0xBIOOCuuODvOODoOOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn44K144O844OT44K544Gu5qaC6KazJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAn44K144O844OT44K544Gu5Y2w5Yi344Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICfjgrXjg7zjg5Pjgrnjg7vjgrrjg7zjg6DjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAn44K144O844OT44K544O744Ko44Oq44KiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICfjgqTjg7Pjgrfjg4fjg7Pjg4jnirbmhYvjga7oqIjnrpfjgavkvb/nlKjjgZnjgovjg6rjg7Pjgq/jga7jgr/jgqTjg5fjgajmlrnlkJHjgpLoqK3lrprjgZfjgb7jgZnjgIIg44Kt44O844Gv44Oq44Oz44Kv44K/44Kk44OX44Gu5ZCN5YmN77yITGlua09iamVjdCA6OiBUeXBl44Gn5a6a576p44GV44KM44Gm44GE44KL77yJ44Gn44GC44KK44CB5YCk44Gv44Kk44Oz44K344OH44Oz44OI44K544OG44O844K/44K544KS6KiI566X44GZ44KL44Gf44KB44Gr5b6T44GG44G544GNSW5jaWRlbnRMaW5rVHlwZeOBruaWueWQkeOBp+OBmeOAgiDjgZ/jgajjgYjjgbDjgIFJbmNpZGVudExpbmtUeXBl44GMIFwnRGVwZW5kc09uXCfjgavoqK3lrprjgZXjgozjgabjgYrjgorjgIFEaXJlY3Rpb27jgYwgXCdTb3VyY2VcJ+OBruWgtOWQiOOAgeOCpOODs+OCt+ODh+ODs+ODiOOBruOCueODhuODvOOCv+OCueOCkuioiOeul+OBmeOCi+OBn+OCgeOBq+OAgSBcJ+S+neWtmOOBmeOCi1wn44Oq44Oz44Kv44Gu44G/44GM6KGo56S644GV44KM44G+44GZ77yI5Y+N5a++44Gu44Oq44Oz44Kv44GvIFwnUmVxdWlyZWQgZm9yXCfjgafjga/jgYLjgorjgb7jgZvjgpPvvInjgIIg5bqD5ZGK44K/44Kk44OX44Gu44Oq44Oz44Kv44K/44Kk44OX44KS6L+95Yqg44Gn44GN44G+44GZ77yI5L6L77yaIOaWueWQkSBcJ1RhcmdldFwn44KS5ZCr44KAIFwnSW5jbHVkZXNcJ+OAgiBzeXNjb25maWfjgqrjg5fjgrfjg6fjg7NMaW5rT2JqZWN0IDo6IFR5cGXjgaflrprnvqnjgZXjgozjgabjgYTjgovjgZnjgbnjgabjga7jg6rjg7Pjgq/jgr/jgqTjg5fjgYzlj6/og73jgafjgIHmlrnlkJHjga8gXCdTb3VyY2VcJ+OAgSBcJ1RhcmdldFwn44CB44G+44Gf44GvIFwnQm90aFwn44Gn44GZ44CCIOmHjeimge+8muOBk+OBrlNZU0NPTkZJR+OCquODl+OCt+ODp+ODs+OBq+WkieabtOOCkuWKoOOBiOOBn+OCieOAgeOCs+ODs+OCveODvOODq+OCs+ODnuODs+ODiWJpbi9vdG9iby5Db25zb2xlLnBs44KS5a6f6KGM44GZ44KL5b+F6KaB44GM44GC44KK44G+44GZ44CCQWRtaW4gOjogSVRTTSA6OiBJbmNpZGVudFN0YXRlIDo6IFJlY2FsY3VsYXRl44GX44Gf44GM44Gj44Gm44CB44GZ44G544Gm44Gu5LqL5oWL44Gv5paw44GX44GE6Kit5a6a44Gr5Z+644Gl44GE44Gm5YaN6KiI566X44GV44KM44G+44GZ77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICfjgr3jg7zjgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4oCYTm9ybWFs4oCZ44Oq44Oz44Kv44O744K/44Kk44OX44KS5L2/55So44GX44Gm44CB4oCYSVRTTUNoYW5nZeKAmeOCquODluOCuOOCp+OCr+ODiOOBjOS7luOBruKAmFRpY2tldOKAmeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBleOCjOOCi+OCiOOBhuOBq+OAgeWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+KAmE5vcm1hbOKAmeODquODs+OCr+ODu+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeKAmElUU01DaGFuZ2XigJnjgqrjg5bjgrjjgqfjgq/jg4jjgYzigJhGQVHigJnjgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgZXjgozjgovjgojjgYbjgavjgIHlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+KAmOimquWtkOKAmeODquODs+OCr+ODu+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeKAmElUU01DaGFuZ2XigJnjgqrjg5bjgrjjgqfjgq/jg4jjgYzigJhGQVHigJnjgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgZXjgozjgovjgojjgYbjgavjgIHlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4oCY6Zai6YCj44GX44Gf4oCZ44Oq44Oz44Kv44O744K/44Kk44OX44KS5L2/55So44GX44Gm44CB4oCYSVRTTUNoYW5nZeKAmeOCquODluOCuOOCp+OCr+ODiOOBjOKAmEZBUeKAmeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBleOCjOOCi+OCiOOBhuOBq+OAgeWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxBbHRlcm5hdGl2ZVRvL37jga7ku6Pmm7/jgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIzjgrXjg7zjg5PjgrnjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxEZXBlbmRzT24vfuOBq+S+neWtmOOBmeOCi+OAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjOOCteODvOODk+OCueOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxSZWxldmFudFRvL37jgajplqLpgKPjgZnjgovjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIzjgrXjg7zjg5PjgrnjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxBbHRlcm5hdGl2ZVRvL37jga7ku6Pmm7/jgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIzjg4HjgrHjg4Pjg4jjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjERlcGVuZHNPbi9+44Gr5L6d5a2Y44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CM44OB44Kx44OD44OI44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMUmVsZXZhbnRUby9+44Go6Zai6YCj44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CM44OB44Kx44OD44OI44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxBbHRlcm5hdGl2ZVRvL37jga7ku6Pmm7/jgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHku5bjga7jgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjENvbm5lY3RlZFRvL37jgajjgaTjgarjgYzjgaPjgabjgYTjgovjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHku5bjga7jgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxEZXBlbmRzT24vfuOBq+S+neWtmOOBmeOCi+OAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeS7luOBruOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44GM44CMSW5jbHVkZXMvfuOCkuWQq+OCgOOAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeS7luOBruOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdMb2NhdGlvbk9mXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTUNvbmZpZ0l0ZW3jgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxSZWxldmFudFRvL37jgajplqLpgKPjgZnjgovjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHku5bjga7jgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNV29ya09yZGVy44CN44Kq44OW44K444Kn44Kv44OI44GM44CMRGVwZW5kc09uL37jgavkvp3lrZjjgZnjgovjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIxJVFNNQ29uZmlnSXRlbeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxJVFNNV29ya09yZGVy44CN44Kq44OW44K444Kn44Kv44OI44GM44CMTm9ybWFsL+mAmuW4uOOAjeODquODs+OCr+OCv+OCpOODl+OCkuS9v+eUqOOBl+OBpuOAgeOAjElUU01Db25maWdJdGVt44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTVdvcmtPcmRlcuOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjERlcGVuZHNPbi9+44Gr5L6d5a2Y44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMU2VydmljZeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjElUU01Xb3JrT3JkZXLjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxOb3JtYWwv6YCa5bi444CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMU2VydmljZeOAjeOCquODluOCuOOCp+OCr+ODiOOBqOODquODs+OCr+OBp+OBjeOCi+OBk+OBqOOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn44GT44Gu6Kit5a6a44Gv44CB44CMSVRTTVdvcmtPcmRlcuOAjeOCquODluOCuOOCp+OCr+ODiOOBjOOAjE5vcm1hbC/pgJrluLjjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIxUaWNrZXTjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjFNlcnZpY2XjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxOb3JtYWwv6YCa5bi444CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMRkFR44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+OBk+OBruioreWumuOBr+OAgeOAjFNlcnZpY2XjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgYzjgIxQYXJlbnRDaGlsZC/opqrlrZDjgI3jg6rjg7Pjgq/jgr/jgqTjg5fjgpLkvb/nlKjjgZfjgabjgIHjgIxGQVHjgI3jgqrjg5bjgrjjgqfjgq/jg4jjgajjg6rjg7Pjgq/jgafjgY3jgovjgZPjgajjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfjgZPjga7oqK3lrprjga/jgIHjgIxTZXJ2aWNl44CN44Kq44OW44K444Kn44Kv44OI44GM44CMUmVsZXZhbnRUby9+44Go6Zai6YCj44GZ44KL44CN44Oq44Oz44Kv44K/44Kk44OX44KS5L2/55So44GX44Gm44CB44CMRkFR44CN44Kq44OW44K444Kn44Kv44OI44Go44Oq44Oz44Kv44Gn44GN44KL44GT44Go44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+ODquODs+OCr+ODu+OCv+OCpOODl1wnQWx0ZXJuYXRpdmVUb1wn44Gu5a6a576p44Gn44GZ44CC44KC44GX44K944O844K55ZCN44GK44KI44Gz44K/44O844Ky44OD44OI5ZCN44GM5ZCM44GY5YCk44KS5ZCr44KT44Gn44GE44KL5aC05ZCI44CB57WQ5p6c44Gu44Oq44Oz44Kv44Gv6Z2e55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44CB44Gd44GG44Gn44Gq44GE57WQ5p6c44Gv55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jg7vjgr/jgqTjg5dcJ0Nvbm5lY3RlZFRvXCfjga7lrprnvqnjgafjgZnjgILjgoLjgZfjgr3jg7zjgrnlkI3jgYrjgojjgbPjgr/jg7zjgrLjg4Pjg4jlkI3jgYzlkIzjgZjlgKTjgpLlkKvjgpPjgafjgYTjgovloLTlkIjjgIHntZDmnpzjga7jg6rjg7Pjgq/jga/pnZ7nm7TmjqXjg6rjg7Pjgq/jgavjgarjgorjgIHjgZ3jgYbjgafjgarjgYTntZDmnpzjga/nm7TmjqXjg6rjg7Pjgq/jgavjgarjgorjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jg7vjgr/jgqTjg5dcJ0RlcGVuZHNPblwn44Gu5a6a576p44Gn44GZ44CC44KC44GX44K944O844K55ZCN44GK44KI44Gz44K/44O844Ky44OD44OI5ZCN44GM5ZCM44GY5YCk44KS5ZCr44KT44Gn44GE44KL5aC05ZCI44CB57WQ5p6c44Gu44Oq44Oz44Kv44Gv6Z2e55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44CB44Gd44GG44Gn44Gq44GE57WQ5p6c44Gv55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfjg6rjg7Pjgq/jg7vjgr/jgqTjg5dcJ0luY2x1ZGVzXCfjga7lrprnvqnjgafjgZnjgILjgoLjgZfjgr3jg7zjgrnlkI3jgYrjgojjgbPjgr/jg7zjgrLjg4Pjg4jlkI3jgYzlkIzjgZjlgKTjgpLlkKvjgpPjgafjgYTjgovloLTlkIjjgIHntZDmnpzjga7jg6rjg7Pjgq/jga/pnZ7nm7TmjqXjg6rjg7Pjgq/jgavjgarjgorjgIHjgZ3jgYbjgafjgarjgYTntZDmnpzjga/nm7TmjqXjg6rjg7Pjgq/jgavjgarjgorjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+ODquODs+OCr+ODu+OCv+OCpOODl1wnUmVsZXZhbnRUb1wn44Gu5a6a576p44Gn44GZ44CC44KC44GX44K944O844K55ZCN44GK44KI44Gz44K/44O844Ky44OD44OI5ZCN44GM5ZCM44GY5YCk44KS5ZCr44KT44Gn44GE44KL5aC05ZCI44CB57WQ5p6c44Gu44Oq44Oz44Kv44Gv6Z2e55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44CB44Gd44GG44Gn44Gq44GE57WQ5p6c44Gv55u05o6l44Oq44Oz44Kv44Gr44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0lUU00g44OG44Kt44K544OI44Ko44Oq44Ki5bmF44Gn44GZ44CCJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/ko_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmtvX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/lt_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omx0X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/lv_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omx2X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/mk_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om1rX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ9Cf0YDQuNC+0YDQuNGC0LXRgtC90L4g0LDQu9C+0YbQuNGA0LDRmtC1JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn0JzQuNC90LjQvNCw0LvQvdC+INCy0YDQtdC80LUg0L/QvtC80LXRk9GDINC/0YDQvtCx0LvQtdC8JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn0JrRgNC40YLQuNGH0L3Qvic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnU0xBLdCY0L3RhNC+0YDQvNCw0YbQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ9Cf0L7RgdC70LXQtNC90L4g0YHQvNC10L3QtdGC0L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICfQn9C+0LLRgNC30LDQvdC4INGD0YHQu9GD0LPQuCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICfQodC10YDQstC40YEt0LjQvdGE0L7RgNC80LDRhtC40LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ9Ch0LXQs9Cw0YjQvdCwINGB0L7RgdGC0L7RmNCx0LAg0L3QsCDQv9GA0L7QsdC70LXQvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICfQn9C+0LLRgNC30LDQvdC4IFNMQdCwJzsKCiAgICAjIFRlbXBsYXRlOiBUaWNrZXRJbmZvcm1hdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIENyaXRpY2FsaXR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAn0JLQu9C40ZjQsNC90LjQtSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICfQodC10LPQsNGI0L3QsCDRgdC+0YHRgtC+0ZjQsdCwINC90LAg0J/RgNC+0LHQu9C10LwnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn0KHQvtGB0YLQvtGY0LHQsCDQvdCwINC40L3RhtC40LTQtdC90YInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkL0RyaXZlci9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHRlcm5hbC1zb3VyY2Uga2V5J30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCAvIFNPUE0gRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICfQntC/0LXRgNCw0YbQuNGB0LrQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ9CY0L3RhtC40LTQtdC90YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ9Ca0YDQsNC10L0g0YHQtdGA0LLQuNGBINC30LAg0LrQvtGA0LjRgdC90LjRhtC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ9Cf0YDQtdC00LXQvSDQtNC10LsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICfQl9Cw0LTQtdC9INC00LXQuyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAn0JjQoiDQnNC10L3QsNGf0LzQtdC90YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn0JjQt9Cy0LXRgdGC0YPQstCw0ZrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ9CY0KIg0J7Qv9C10YDQsNGC0LjQstC10L0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ9Cf0YDQtdC30LXQvdGC0LDRhtC40ZjQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn0J/RgNC+0LXQutGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ9CU0YDRg9Cz0L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAn0JTQvtGB0YLQsNC/0L3QvtGB0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ9CS0YDQtdC80LUg0L3QsCDQvtC00LPQvtCy0L7RgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAn0JLRgNC10LzQtSDQvdCwINC+0L/QvtGA0LDQstGD0LLQsNGa0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAn0KDQsNGC0LAg0L3QsCDRgNC10LfQvtC70YPRhtC40ZjQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfQotGA0LDQvdGB0LDQutGG0LjRmNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ9CT0YDQtdGI0LrQuCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn0JDQu9GC0LXRgNC90LDRgtC40LLQsCDQt9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJUEFsbG9jYXRpb246IE92ZXJ3cml0ZSBwcmlvcml0eSBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBEZWZhdWx0IGZhbGxiYWNrOiBGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAn0J/QvtCy0YDQt9Cw0L0g0YHQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ9CX0LDQstC40YHQuCDQvtC0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ9CS0LrQu9GD0YfRg9Cy0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAn0JTQtdC7INC+0LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICfQoNC10LvQtdCy0LDQvdGC0L3QviDRgdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ9Cf0L7RgtGA0LXQsdC90L4gINC30LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAn0J/RgNC10LPQu9C10LQg0L3QsCBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ9Cf0YDQtdCz0LvQtdC0INC90LAg0YHQtdGA0LLQuNGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAn0KHQtdGA0LLQuNGBLdC70L7QutCw0YbQuNGY0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoZSBjdXJyZW50IHNlcnZpY2UgaW5jaWRlbnQgc3RhdGUgc2lnbmFsIGluIHRoZSB0aWNrZXQgaW5mb3JtYXRpb24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Z2dlc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdMb2NhdGlvbk9mXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdMb2NhdGlvbk9mXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/ms_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om1zX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnS3JpdGlrYWwg4oaUIEtlc2FuIOKGlCBLZXV0YW1hYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ01lbmd1cnVza2FuIGhhc2lsIGtldXRhbWFhbiBrcml0aWthbCBnYWJ1bmdhbiDihpQgS2VzYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdCZXJpa2FuIGtldXRhbWFhbic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ01hc2EgbWluaW1hIGFudGFyYSBpbmNpZGVudCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0tyaXRpa2FsJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEEtSW5mb3JtYXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ0thbGkgdGVyYWtoaXIgZGl1YmFoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ0thbGkgdGVyYWtoaXIgZGl1YmFoIHNlbWFzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnUGVya2hpZG1hdGFuIEJlcnNla3V0dSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2kgU2VydmlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdLZWphZGlhbiBrZWFkYWFuIHNlbWFzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEEgQmVyc2VrdXR1JzsKCiAgICAjIFRlbXBsYXRlOiBUaWNrZXRJbmZvcm1hdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIENyaXRpY2FsaXR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnS2VzYW4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnSW5zaWRlbiBzdGF0dXMgc2VtYXNhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ2luc2lkZW4ga2VhZGFhbic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ29wZXJhc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdpbnNpZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdQZW5nZ3VuYSBBa2hpciBTZXJ2aXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdQZW5ndXJ1c2FuIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ01lbGFwb3JrYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcGVyYXNpIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vc3RyYXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnVW5kZXJwaW5uaW5nIENvbnRyYWN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnU2VsYWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ1ZlcmbDvGdiYXJrZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdNYXNhIFRpbmRhayBiYWxhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnTWFzYSBTZW1idWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdrYWRhciBSZXNvbHVzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2Frc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnS2VzaWxhcGFuJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGlmIGtlcGFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0RpaHVuZ2thbiBrZXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICdUYWtyaWZrYW4gVGluZGFrYW4gZGltYW5hIGJ1dGFuZyB0ZXRhcGFuIGl0dSBhZGEgZGFsYW0gd2lkZ2V0IG9iamVrIGJlcnNhbWJ1bmcgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gU2lsYSBwYXN0aWthbiB5YW5nIFRpbmRha2FuIGluaSBwZXJsdSBkaWRhZnRhcmthbiB5YW5nIGJlcmlrdXQgZmFpbC1mYWlsIEpTIGRhbiBDU1M6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdUYWtyaWZrYW4gbGFqdXItbGFqdXIgeWFuZyBtYW5hIGRpdHVuanVra2FuIGRhbGFtIHdpZGdldCBwZXJraGlkbWF0YW4gYmVyc2FtYnVuZyAoT2JqZWtTYW1idW5nYW46Ok1vZFBlbWFuZGFuZ2FuOjogImtvbXBsZWtzIikuIE5vdGE6IEhhbnlhIHNpZmF0LXNpZmF0IHBlcmtoaWRtYXRhbiB5YW5nIGRpYmVuYXJrYW4gdW50dWsgTGFqdXJMYWxhaS4gVGV0YXBhbiBNdXN0YWhpbDogMCA9IFRpZGFrIERpYm9sZWhrYW4sIDEgPSBBZGEsIDIgPSBEaWJvbGVoa2FuIGRlbmdhbiBsYWxhaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnQmVyZ2FudHVuZyBrZXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5mb3JjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIHVudHVrIGtvbmZpZ3VyYXNpIEFkbWluSVRTTUNJUEFsbG9jYXRlIGRpIGthd2FzYW4gYWRtaW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBwZW5kYWZ0YXJhbiBtb2R1bCBiYWdpIG9iamVrIEFnZW50SVRTTVNMQSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBwZW5kYWZ0YXJhbiBtb2R1bCB1bnR1ayBvYmplayBBZ2VudElUU01TTEFQcmludCBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIHVudHVrIG9iamVrIEFnZW50SVRTTVNMQVpvb20gZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBwZW5kYWZ0YXJhbiBtb2R1bCBiYWdpIG9iamVrIEFnZW50SVRTTVNlcnZpY2UgZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIHVudHVrIG9iamVrIEFnZW50SVRTTVNlcnZpY2VQcmludCBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBwZW5kYWZ0YXJhbiBtb2R1bCB1bnR1ayBvYmplayBBZ2VudElUU01TZXJ2aWNlWm9vbSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICd0aW5qYXVhbiBrZXNlbHVydWhhbiBJVFNNIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnVGluamF1YW4gU2VydmlzIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ0plbmlzIEtlYWRhYW4gS2VqYWRpYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdUZXJtYXN1ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGVkIGluJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0aW9uIG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnTWVuZ3VydXMgbWF0cmlrcyBrZXV0YW1hYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgY3JpdGljYWxpdHkgLSBpbXBhY3QgLSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdNb2R1bCB1bnR1ayBtZW51bmp1a2thbiBrZW1iYWxpIHBhdXRhbiBkYWxhbSBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bCB1bnR1ayBtZW51bmp1a2thbiBrZW1iYWxpIHBhdXRhbiBkYWxhbSBtZW51IHBlcmtoaWRtYXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bCB1bnR1ayBtZW51bmp1a2thbiBwYXV0YW4gcGF1dGFuIGRhbGFtIG1lbnUgcGVya2hpZG1hdGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ01vZHVsIHVudHVrIG1lbnVuanVra2FuIHBhdXRhbiBjZXRhayBkYWxhbSBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVudW5qdWtrYW4gcGF1dGFuIGNldGFrIGRhbGFtIG1lbnUgcGVya2hpZG1hdGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcmFtZXRlciB1bnR1ayBrZWFkYWFuIGluc2lkZW4gbWVtYW5kYW5na2FuIGtldXRhbWFhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1NlYmFoYWdpYW4gZGFyaXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdCZXJrYWl0YW4ga2VwYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ0RpcGVybHVrYW4gdW50dWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnTGloYXQgc2VtdWxhIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnQ2V0YWthbiBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ1p1bSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdMaWhhdCBzZW11bGEgc2VydmlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnQ2V0YWthbiBTZXJ2aXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICdadW0gU2VydmlzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdLYXdhc2FuLVNlcnZpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ1ViYWggSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdUaWtldCBcJyBvYmplayBtZW5nZ3VuYWthbiBcJ05vcm1hbFwnICBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnRkFRXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdOb3JtYWxcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdGQVFcJyBvYmplayBtZW5nZ3VuYWthbiBcJ0lidSBCYXBhIEFuYWsgQW5ha1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnRkFRXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdSZWxldmFuIFVudHVrXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnUGVya2hpZG1hdGFuXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdBbHRlcm5hdGl2ZVRvXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdQZXJraGlkbWF0YW5cJyBvYmplayBtZW5nZ3VuYWthbiBcJ0JlcmdhbnR1bmcgUGFkYVwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnUGVya2hpZG1hdGFuXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdSZWxldmFuIFVudHVrXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1Rpa2V0XCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdBbHRlcm5hdGlmIFVudHVrXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnVGlrZXQgXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdCZXJnYW50dW5nIFBhZGFcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnVGlrZXRcJyBvYmplayBtZW5nZ3VuYWthbiBcJ1JlbGV2YW4gVW50dWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gbGFpbiBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdBbHRlcm5hdGl2ZVRvXCcgcGF1dGFuIGplbmlzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBsYWluIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplayBtZW5nZ3VuYWthbiBcJ0Nvbm5lY3RlZFRvXCcgcGF1dGFuIGplbmlzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gbGFpbiBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIG1lbmdndW5ha2FuIFwnQmVyZ2FudHVuZyBQYWRhXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBsYWluLWxhaW4gXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVrIG1lbmdndW5ha2FuIFwnVGVybWFzdWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdMb2NhdGlvbk9mXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0lUU00gQ29uZmlnSXRlbVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gb2JqZWsgXCdDb25maWdJdGVtIElUU01cJ2xhaW4geWFuZyBtZW5nZ3VuYWthbiBcJ1JlbGV2YW4gVW50dWtcJyB5YW5nIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ1BlcmludGFoIEtlcmphIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0NvbmZpZ0l0ZW0gSVRTTVwnb2JqZWsgbWVuZ2d1bmFrYW4gXCdCZXJnYW50dW5nIFBhZGFcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdQZXJpbnRhaCBLZXJqYSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdDb25maWdJdGVtIElUU01cJyBvYmplayBtZW5nZ3VuYWthbiBcJ05vcm1hbFwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnUGVyaW50YWggS2VyamEgSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnUGVya2hpZG1hdGFuXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdCZXJnYW50dW5nIFBhZGFcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ1BlcmludGFoIEtlcmphIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1BlcmtoaWRtYXRhbiBcJyBvYmplayBtZW5nZ3VuYWthbiBcJ05vcm1hbCBcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnUGVyaW50YWggS2VyamEgSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnVGlrZXRcJyBvYmplayBtZW5nZ3VuYWthbiBcJ05vcm1hbFwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2Egb2JqZWsgXCdQZXJraGlkbWF0YW4gXCcgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0ZBUVwnIG9iamVrIG1lbmdndW5ha2FuIFwnTm9ybWFsXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIG9iamVrIFwnUGVya2hpZG1hdGFuIFwnIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdGQVFcJyBvYmplayBtZW5nZ3VuYWthbiBcJ0lidSBCYXBhIEthbmFrLWthbmFrXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2Egb2JqZWsgXCdQZXJraGlkbWF0YW4gXCcgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0ZBUVwnIG9iamVrIG1lbmdndW5ha2FuIFwnUmVsZXZhbiBVbnR1a1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGplbmlzIHBhdXRhbiBcJ0FsdGVybmF0aXZlVG9cJy4gSmlrYSBuYW1hIHN1bWJlciBkYW4gbmFtYSBzYXNhcmFuIG1lbmdhbmR1bmdpIG5pbGFpIHlhbmcgc2FtYSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIGJ1a2FuIHNhdHUgYXJhaC4gSmlrYSBuaWxhaSBiZXJiZXphLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggcGF1dGFuIGJlcmFyYWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gamVuaXMgcGF1dGFuIFwnQ29ubmVjdGVkVG9cJy4gSmlrYSBuYW1hIHN1bWJlciBkYW4gbmFtYSBzYXNhcmFuIG1lbmdhbmR1bmdpIG5pbGFpIHlhbmcgc2FtYSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIGJ1a2FuIHNhdHUgYXJhaC4gSmlrYSBuaWxhaSBiZXJiZXphLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggcGF1dGFuIGJlcmFyYWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGplbmlzIHBhdXRhbiBcJ0JlcmdhbnR1bmcgUGFkYVwnLiBKaWthIG5hbWEgc3VtYmVyIGRhbiBuYW1hIHNhc2FyYW4gbWVuZ2FuZHVuZ2kgbmlsYWkgeWFuZyBzYW1hLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggYnVrYW4gc2F0dSBhcmFoLiBKaWthIG5pbGFpIGJlcmJlemEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBwYXV0YW4gYmVyYXJhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBqZW5pcyBwYXV0YW4gXCdUZXJtYXN1a1wnLiBKaWthIG5hbWEgc3VtYmVyIGRhbiBuYW1hIHNhc2FyYW4gbWVuZ2FuZHVuZ2kgbmlsYWkgeWFuZyBzYW1hLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggYnVrYW4gc2F0dSBhcmFoLiBKaWthIG5pbGFpIGJlcmJlemEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBwYXV0YW4gYmVyYXJhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBqZW5pcyBwYXV0YW4gXCdSZWxldmFudFRvXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgc2FzYXJhbiBtZW5nYW5kdW5naSBuaWxhaSB5YW5nIHNhbWEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBidWthbiBzYXR1IGFyYWguIEppa2EgbmlsYWkgYmVyYmV6YSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIHBhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdMZWJhciBrYXdhc2FuIHRla3MgSVRTTS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/nb_NO_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5iX05PX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnS3JpdGlrYWxpdGV0IOKGlCBPbWZhbmcg4oaUIFByaW9yaXRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnQWRtaW5pc3RyZXIgcHJpb3JpdGV0c3Jlc3VsdGF0IHZlZCDDpSBrb21iaW5lcmUgS3JpdGlrYWxpdGV0IOKGlCBPbWZhbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1RpbGRlbGluZyBhdiBwcmlvcml0ZXQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5pbXVtc3RpZCBtZWxsb20gSGVuZGVsc2VyJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnS3JpdGlrYWxpdGV0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2pvbiBvbSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnU2lzdCBlbmRyZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnU2lzdCBlbmRyZXQgYXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1RpbGtueXR0ZWRlIHRqZW5lc3Rlcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2pvbiBvbSBUamVuZXN0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnVGlsc3RhbmQgcMOlIG7DpXbDpnJlbmRlIGhlbmRlbHNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1RpbGtueXR0ZWRlIFNMQWVyJzsKCiAgICAjIFRlbXBsYXRlOiBUaWNrZXRJbmZvcm1hdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIENyaXRpY2FsaXR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnT21mYW5nJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ1RpbHN0YW5kIHDDpSBuw6V2w6ZyZW5kZSBoZW5kZWxzZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdIZW5kZWxzZXN0aWxzdGFuZCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhdGl2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSGVuZGVsc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NsdXR0YnJ1a2VyLXRqZW5lc3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFja2VuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVQtbGVkZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBwb3J0ZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVC1kcmlmdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhc2pvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvc2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnVW5kZXJsaWdnZW5kZSBrb250cmFrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0FuZHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ1RpbGdqZW5nZWxpZ2hldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnUmVzcG9uc3RpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnR2plbm9wcHJldG5pbmdzdGlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ09wcHJldHRpbmdzcmF0aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3Nqb25lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdGZWlsJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2IHRpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0tvYmxldCB0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdG9iby9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdBdmhlbmdlciBhdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBrb25maWd1cmFzam9uIGF2IEFkbWluSVRTTUNJUEFsbG9jYXRlIGkgYWRtaW4tb21yw6VkZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyZXJpbmcgYXYgZnJvbnRlbmQtbW9kdWwgZm9yIEFnZW50SVRTTVNMQS1vYmpla3RldCBpIHNha3NiZWhhbmRsZXItZGVsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBBZ2VudElUU01TTEFQcmludC1vYmpla3RldCBpIHNha3NiZWhhbmRsZXItZGVsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyZXJpbmcgYXYgZnJvbnRlbmQtbW9kdWwgZm9yIEFnZW50SVRTTVNMQVpvb20tb2JqZWt0ZXQgaSBzYWtzYmVoYW5kbGVyLWRlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBBZ2VudElUU01TZXJ2aWNlLW9iamVrdGV0IGkgc2Frc2JlaGFuZGxlci1kZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBBZ2VudElUU01TZXJ2aWNlUHJpbnQtb2JqZWt0ZXQgaSBzYWtzYmVoYW5kbGVyLWRlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZC1tb2R1bCBmb3IgQWdlbnRJVFNNU2VydmljZVpvb20tb2JqZWt0ZXQgaSBzYWtzYmVoYW5kbGVyLWRlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJ1NMQS1vdmVyc2lrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnSVRTTS1UamVuZXN0ZW92ZXJzaWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICdUeXBlIGhlbmRlbHNlc3RpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnSW5rbHVkZXJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGVkIGluJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0aW9uIG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnQWRtaW5pc3Ryw6lyIHByaW9yaXRldHNtYXRyaXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgY3JpdGljYWxpdHkgLSBpbXBhY3QgLSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdNb2R1bCBzb20gdmlzZXIgdGlsYmFrZS1sZW5rZW4gaSBTTEEtbWVueWVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIHRpbGJha2UtbGVua2VuIGkgdGplbmVzdGVtZW55ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bCBzb20gdmlzZXIgbGVua2UtbGVua2VuIGkgdGplbmVzdGUtbWVueWVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIHNrcml2LXV0LWxlbmtlbiBpIFNMQS1tZW55ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIHNrcml2LXV0LWxlbmtlbiBpIHRqZW5lc3RlbWVueWVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyYW1ldHJlIGZvciBoZW5kZWxzZXN0aWxzdGFuZGVyIGkgdmFsZ3Zpc25pbmdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnRGVsIGF2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnQgZm9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1DDpWtyZXZkIGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEEtb3ZlcnNpa3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ1NMQS11dHNrcmlmdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdTTEEtZGV0YWxqZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdUamVuZXN0ZS1vdmVyc2lrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJ1RqZW5lc3RldXRza3JpZnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ1RqZW5lc3RlZGV0YWxqZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnVGplbmVzdGVvbXLDpWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnTG9jYXRpb25PZlwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0JyZWRkZSBww6UgSVRTTSBzaW5lIHRla3N0b21yw6VkZXIuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/nl_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5sX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnVXJnZW50aWUg4oaUIEltcGFjdCDihpQgUHJpb3JpdGVpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdQcmlvcml0ZWl0IHRvZWtlbm5lbic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ01pbmltdW10aWpkIHR1c3NlbiBpbmNpZGVudGVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnVXJnZW50aWUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQSBJbmZvcm1hdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ0xhYXRzdCBhYW5nZXBhc3Qgb3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnTGFhdHN0IGFhbmdlcGFzdCBkb29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdCaWpiZWhvcmVuZGUgU2VydmljZXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnU2VydmljZSBJbmZvcm1hdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdIdWlkaWdlIGluY2lkZW50LXN0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdCaWpiZWhvcmVuZGUgU0xBcyc7CgogICAgIyBUZW1wbGF0ZTogVGlja2V0SW5mb3JtYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGFjdCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdIdWlkaWdlIGluY2lkZW50IHN0YXR1cyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdJbmNpZGVudCBzdGF0dXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkL0RyaXZlci9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHRlcm5hbC1zb3VyY2Uga2V5J30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCAvIFNPUE0gRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdPcGVyYXRpb25lZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdJbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnRWluZGdlYnJ1aWtlciBzZXJ2aWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFja2VuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVQgTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBwb3J0YWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVQgT3BlcmF0aW9ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdVbmRlcnBpbm5pbmcgQ29udHJhY3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdPdmVyaWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnQmVzY2hpa2JhYXJoZWlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdSZXNwb25zaWV0aWpkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdIZXJzdGVsdGlqZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdPcGxvc3RpamQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNhY3RpZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRm91dGVuJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGllZiB2b29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJUEFsbG9jYXRpb246IE92ZXJ3cml0ZSBwcmlvcml0eSBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBEZWZhdWx0IGZhbGxiYWNrOiBGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnVmVyYm9uZGVuIG1ldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0FmaGFua2VsaWprIHZhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdCZXZhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGVkIGluJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0aW9uIG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnQmVoZWVyIHByaW9yaXRlaXRlbi1tYXRyaXgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBjcml0aWNhbGl0eSAtIGltcGFjdCAtIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ09uZGVyZGVlbCB2YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdWYW4gYmVsYW5nIHZvb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnQmVub2RpZ2Qgdm9vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEEtb3ZlcnppY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdTZXJ2aWNlLW92ZXJ6aWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1NlcnZpY2UtQXJlYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/pl_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnBsX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnS3J5dHljem5vxZvEhyDihpQgV3DFgnl3IOKGlCBQcmlvcnl0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ1phcnrEhWR6YWogd3luaWtvd3ltIHByaW9yeXRldGVtIHoga29tYmluYWNqaSBLcnl0eWN6bm/Fm8SHIOKGlCBXcMWCeXcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0Fsb2thY2phIHByaW9yeXRldHUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5pbWFsbnkgY3phcyBtacSZZHp5IHpkYXJ6ZW5pYW1pJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnS3J5dHljem5vxZvEhyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNqZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnT3N0YXRuaWEgem1pYW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ09zdGF0bmlvIHptaWVuaW9uZSBwcnpleic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnUG/FgsSFY3pvbmUgdXPFgnVnaSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2plIG8gdXPFgnVkemUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0FrdHVhbG55IHN0YW4gaW5jeWRlbnR1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1BvxYLEhWN6b25lIFNMQSc7CgogICAgIyBUZW1wbGF0ZTogVGlja2V0SW5mb3JtYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ1dwxYJ5dyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdBa3R1YWxueSBzdGFuIGluY3lkZW50dSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdTdGFuIHpkYXJ6ZW5pYSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhY3lqbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdaZGFyemVuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1VzxYJ1Z2EgVcW8eXRrb3duaWthIEtvxYRjb3dlZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdaYXBsZWN6ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVQgemFyesSFZHphbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JhcG9ydG93YW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUIG9wZXJhY3lqbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9uc3RyYWNqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdQb2RzdGF3eSBVbW93eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0lubmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnRG9zdMSZcG5vxZvEhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnQ3phcyBvZHBvd2llZHppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdDemFzIG9kenlza2FuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnQ3phcyByb3p3acSFemFuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha2NqZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdCxYLEmWR5JzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdHl3YSBkbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdQb8WCxIVjem9uZSB6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYmVoYXZpb3Igb2YgcHJpb3JpdHkgYWxsb2NhdGlvbiBpbiB0aGUgZnJvbnRlbmRzIGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIENhbiBiZSBvdmVycnVsZWQgYnkgZnJvbnRlbmQgc3BlY2lmaWMgUHJpb3JpdHlCeUNJUCBzZXR0aW5ncy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnWmFsZcW8bmUgb2QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5mb3JjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnWmF3aWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGVkIGluJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0aW9uIG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnWmFyesSFZHphaiBtYWNpZXJ6xIUgcHJpb3J5dGV0w7N3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdcWCIHBva2F6eXdhbmlhIGxpbmt1IHBvd3JvdHUgdyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1xYIgcG9rYXp5d2FuaWEgbGlua3UgcG93cm90dSB3IG1lbnUgc2Vyd2lzb3d5bS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1xYIgcG9rYXp5d2FuaWEgbGlua3UgdyBtZW51IHNlcndpc293eW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdcWCIHBva2F6eXdhbmlhIGxpbmt1IGRydWtvd2FuaWEgdyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdcWCIHBva2F6eXdhbmlhIGxpbmt1IGRydWtvd2FuaWEgdyBtZW51IHNlcndpc293eW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyYW1ldHJ5IGRsYSBzdGFuw7N3IHpkYXJ6ZcWEIHcgd2lkb2t1IHByZWZlcmVuY2ppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnQ3rEmcWbxIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdPZHBvd2llZG5pZSBkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdQb3RyemVibmUgZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnUHJ6ZWdsxIVkIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnUHJ6ZWdsxIVkIHVzxYJ1Zyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1Nla2NqYSBzZXJ3aXNvd2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoZSBjdXJyZW50IHNlcnZpY2UgaW5jaWRlbnQgc3RhdGUgc2lnbmFsIGluIHRoZSB0aWNrZXQgaW5mb3JtYXRpb24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Z2dlc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdMb2NhdGlvbk9mXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdMb2NhdGlvbk9mXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnU3plcm9rb8WbxIcgb2JzemFyw7N3IHRla3N0b3d5Y2ggSVRTTS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/pt_BR_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0JSX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnQ3JpdGljYWxpZGFkZSDihpQgSW1wYWN0byDihpQgUHJpb3JpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnR2VyZW5jaWUgbyByZXN1bHRhZG8gZGUgcHJpb3JpZGFkZSBkYSBjb21iaW5hw6fDo28gZGUgQ3JpdGljYWxpZGFkZSDihpQgSW1wYWN0by4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBdHJpYnVpw6fDo28gZGUgcHJpb3JpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ1RlbXBvIE3DrW5pbW8gZW50cmUgSW5jaWRlbnRlcyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0NyaXRpY2FsaWRhZGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHDp8OjbyBkZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnw5psdGltYSBhbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1hIGFsdGVyYcOnw6NvIHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnU2VydmnDp29zIEFzc29jaWFkb3MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYcOnw6NvIGRlIHNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdFc3RhZG8gQXR1YWwgZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQXMgQXNzb2NpYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogVGlja2V0SW5mb3JtYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGFjdG8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnUGFkcsOjbyBkZSBDYWxlbmTDoXJpbyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICdOZW5odW0gSUQgZGUgU2VydmnDp28gZm9ybmVjaWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ1NlcnZpY2VJRCAxJXMgbsOjbyBlbmNvbnRyYWRvIG5hIGJhc2UgZGUgZGFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBdHVhbCBkZSBJbmNpZGVudGUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlIEluY2lkZW50ZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ09wZXJhY2lvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdTZXJ2acOnbyBhIFVzdcOhcmlvIEZpbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250IEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2sgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdHZXJlbmNpYW1lbnRvIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JlbGF0w7NyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcGVyYcOnw7VlcyBkZSBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2pldG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnQ29udHJhdG8gY29tIFRlcmNlaXJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ091dHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rpc3BvbmliaWxpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVGVtcG8gZGUgUmVzcG9zdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RlbXBvIGRlIFJlY3VwZXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnVGF4YSBkZSBSZXNvbHXDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2HDp8O1ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3MnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ0FsdGVybmF0aXZhIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdDb25lY3RhZG8gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ0RlZmluYSBBw6fDtWVzIG9uZGUgdW0gYm90w6NvIGRlIGNvbmZpZ3VyYcOnw7VlcyBlc3TDoSBkaXNwb27DrXZlbCBubyB3aWRnZXQgZGUgb2JqZXRvcyB2aW5jdWxhZG9zIChMaW5rT2JqZWN0OjpWaWV3TW9kZT0iY29tcGxleCIpLiBPYnNlcnZlIHF1ZSBlc3NhcyBhw6fDtWVzIGRldmVtIHRlciByZWdpc3RyYWRvIG9zIHNlZ3VpbnRlcyBhcnF1aXZvcyBKUyBlIENTUzogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgZSBDb3JlLkFnZW50IC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnRGVmaW5hIHF1YWlzIGNvbHVuYXMgc8OjbyBtb3N0cmFkYXMgbm8gd2lkZ2V0IGRlIHNlcnZpw6dvcyB2aW5jdWxhZG9zIChMaW5rT2JqZWN0OjpWaWV3TW9kZT0iY29tcGxleCIpLiBPYnNlcnZhw6fDo286IHNvbWVudGUgYXRyaWJ1dG9zIGRlIHNlcnZpw6dvIHPDo28gcGVybWl0aWRvcyBwYXJhIERlZmF1bHRDb2x1bW5zLiBEZWZpbmnDp8O1ZXMgcG9zc8OtdmVpczogMCA9IERlc2F0aXZhZG8sIDEgPSBEaXNwb27DrXZlbCwgMiA9IEFjdGl2YWRvIHBvciBwYWRyw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdG9iby9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdEZXBlbmRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdSZWdpc3RybyBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIGEgY29uZmlndXJhw6fDo28gQWRtaW5JVFNNQ0lQQWxsb2NhdGUgbmEgw6FyZWEgYWRtaW5pc3RyYXRpdmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNMQSBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNMQVByaW50IG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TTEFab29tIG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TZXJ2aWNlIG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNlcnZpY2VQcmludCBuYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNlcnZpY2Vab29tIG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJ1Zpc8OjbyBHZXJhbCBkZSBTTEEgSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJ1Zpc8OjbyBHZXJhbCBkZSBTZXJ2acOnbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnVGlwbyBkZSBFc3RhZG8gZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnSW5jbHVpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0ZWQgaW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRpb24gb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdHZXJlbmNpYXIgbWF0cml6IGRlIHByaW9yaWRhZGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgY3JpdGljYWxpdHkgLSBpbXBhY3QgLSBwcmlvcml0eSBtYXRyaXguJ30gPSAnR2VyZW5jaWFyIGEgbWF0cml4IGNyaXRpY2lkYWRlIC0gaW1wYWN0byAtIHByaW9yaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gaXRlbSBkbyBtZW51IFZvbHRhciBubyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGl0ZW0gZG8gbWVudSBWb2x0YXIgbm8gbWVudSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgYXNzb2NpYXIgbm8gbWVudSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGl0ZW0gZGUgbWVudSBkZSBJbXByaW1pciBubyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBpdGVtIGRlIG1lbnUgSW1wcmltaXIgbm8gbWVudSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXLDom1ldHJvcyBwYXJhIG9zIGVzdGFkb3MgZGUgaW5jaWRlbnRlIG5hIHZpc8OjbyBkZSBwcmVmZXLDqm5jaWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnUGFydGUgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdSZWxldmFudGUgYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdSZXF1aXNpdGFkbyBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnVmlzw6NvIEdlcmFsIGRlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnSW1wcmltaXIgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICdEZXRhbGhlcyBkbyBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdWaXPDo28gR2VyYWwgZGUgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICdpbXByaW1pciBTZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ0RldGFsaGUgZG8gU2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ8OBcmVhIFNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnTXVkYW7Dp2FJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnQ2hhbWFkb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUGFpRmlsaG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdSZWxldmFudGUgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0FsdGVybmF0aXZhIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdSZWxldmFudGUgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdDaGFtYWRvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdBbHRlcm5hdGl2YSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnQ2hhbWFkb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdDaGFtYWRvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdSZWxldmFudGUgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0NvbmVjdGFkbyBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdJbmNsdWlcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ1JlbGV2YW50ZSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0NoYW1hZG9cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ1NlcnZpw6dvXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ1NlcnZpw6dvXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdQYWlGaWxob1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdTZXJ2acOnb1wnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUmVsZXZhbnRlIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdBbHRlcm5hdGl2YSBhXCcuIFNlIG8gbm9tZSBkYSBmb250ZSBlIG8gbm9tZSBkbyBhbHZvIGNvbnTDqm0gbyBtZXNtbyB2YWxvciwgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnQ29uZWN0YWRvIGFcJy4gU2UgbyBub21lIGRhIGZvbnRlIGUgbyBub21lIGRvIGFsdm8gY29udMOqbSBvIG1lc21vIHZhbG9yLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnRGVwZW5kZSBkZVwnLiBTZSBvIG5vbWUgZGEgZm9udGUgZSBvIG5vbWUgZG8gYWx2byBjb250w6ptIG8gbWVzbW8gdmFsb3IsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ0luY2x1aVwnLiBTZSBvIG5vbWUgZGEgZm9udGUgZSBvIG5vbWUgZG8gYWx2byBjb250w6ptIG8gbWVzbW8gdmFsb3IsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdMb2NhdGlvbk9mXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ1JlbGV2YW50ZSBhXCcuIFNlIG8gbm9tZSBkYSBmb250ZSBlIG8gbm9tZSBkbyBhbHZvIGNvbnTDqm0gbyBtZXNtbyB2YWxvciwgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTsO6bWVybyBkZSBjYXJhY3RlcmVzIHBvciBsaW5oYSBlbSDDoXJlYXMgZGUgdGV4dG8gSVRTTS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/pt_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnQ3JpdGljaWRhZGUg4oaUIEltcGFjdG8g4oaUIFByaW9yaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJ0dlcmlyIGEgUHJpb3JpZGFkZSByZXN1bHRhbnRlIGRhIGNvbWJpbmHDp8OjbyBDcml0aWNpZGFkZSDihpQgSW1wYWN0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0F0cmlidWnDp8OjbyBkZSBQcmlvcmlkYWRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGVtcG8gTcOtbmltbyBlbnRyZSBJbmNpZGVudGVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnQ3JpdGljaWRhZGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHDp8OjbyBkZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnw5psdGltYSBhbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1hIGFsdGVyYcOnw6NvIHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnU2VydmnDp29zIEFzc29jaWFkb3MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYcOnw6NvIGRlIHNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdFc3RhZG8gQXR1YWwgZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQXMgQXNzb2NpYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogVGlja2V0SW5mb3JtYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGFjdG8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIEF0dWFsIGRlIEluY2lkZW50ZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gZGUgSW5jaWRlbnRlJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXh0ZXJuYWwtc291cmNlIGtleSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgLyBTT1BNIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmF0aXZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdTZXJ2acOnbyBhIHV0aWxpemFkb3IgZmluYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnQgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFjayBFbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0dlc3TDo28gZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmVsYXTDs3Jpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ09wZXJhw6fDtWVzIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamV0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdDb250cmF0byBjb20gVGVyY2Vpcm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3V0cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnRGlzcG9uaWJpbGlkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdUZW1wbyBkZSBSZXNwb3N0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnVGVtcG8gZGUgUmVjdXBlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdUYXhhIGRlIFJlc29sdcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYcOnw7Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdFcnJvcyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdmEgYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0xpZ2FkbyBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYmVoYXZpb3Igb2YgcHJpb3JpdHkgYWxsb2NhdGlvbiBpbiB0aGUgZnJvbnRlbmRzIGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIENhbiBiZSBvdmVycnVsZWQgYnkgZnJvbnRlbmQgc3BlY2lmaWMgUHJpb3JpdHlCeUNJUCBzZXR0aW5ncy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnRGVmaW5pciBBY8Onw7VlcyBvbmRlIHVtIGJvdMOjbyBkZSBjb25maWd1cmHDp8O1ZXMgZXN0w6EgZGlzcG9uw612ZWwgbmEgd2lkZ2V0IHRoZSBvYmplY3RvcyBsaWdhZG9zIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuICBFc3RhcyBBY8Onw7VlcyBkZXZlbSBlc3RhciByZWdpc3RhZGFzIG5vcyBzZWd1aW50ZXMgZmljaGVpcm9zIEpTIGUgQ1NTOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnRGVmaW5pciBxdWUgY29sdW5hcyBzw6NvIGFwcmVzZW50YWRhcyBub3Mgd2lkZ2V0IGRlIFNlcnZpw6dvcyBsaWdhZG9zIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGE6IEFwZW5hcyBhdHJpYnV0ZXMgZGUgU2VydmnDp28gc8OjbyBwZXJtaXRpZG9zIG5hcyBEZWZhdWx0Q29sdW1ucy4gQ29uZmlndXJhw6fDtWVzIFBvc3PDrXZlaXM6IDAgPSBEZXNhY3RpdmFkbywgMSA9IEFjdGl2YWRvLCAyID0gQWN0aXZhZG8gcG9yIG9taXNzw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdG9iby9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdEZXBlbmRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdSZWdpc3RvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgYSBjb25maWd1cmHDp8OjbyBBZG1pbklUU01DSVBBbGxvY2F0ZSBuYSDDoXJlYSBkZSBnZXN0w6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0byBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNMQSBwYXJhIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0byBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNMQVByaW50IHBhcmEgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdG8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TTEFab29tIHBhcmEgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdG8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TZXJ2aWNlIHBhcmEgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0byBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNlcnZpY2VQcmludCBwYXJhIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0byBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHBhcmEgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICdWaXPDo28gR2VyYWwgU0xBIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJ1Zpc8OjbyBHZXJhbCBTZXJ2acOnbyBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICdUaXBvIGRlIEVzdGFkbyBkZSBJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmNsdWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ0dlcmlyIGEgbWF0cml6IGRlIFByaW9yaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBjcml0aWNhbGl0eSAtIGltcGFjdCAtIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayB2b2x0YXIgbm8gbWVudSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIHZvbHRhciBubyBtZW51IHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayBhc3NvY2lhciBubyBtZW51IHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayBpbXByaW1pciBubyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIGltcHJpbWlyIG5vIG1lbnUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyw6JtZXRyb3MgcGFyYSBvcyBlc3RhZG9zIGRlIGluY2lkZW50ZSBuYXMgcHJlZmVyw6puY2lhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1BhcnRlIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnRlIHBhcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUmVxdWlzaXRhZG8gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1Zpc8OjbyBHZXJhbCBkZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ0ltcHJlc3PDo28gZGUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ0RldGFsaGUgZGUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdWaXPDo28gR2VyYWwgZGUgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICdJbXByZXNzw6NvIGRlIFNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICdEZXRhbGhlIGRlIFNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ8OBcmVhIFNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnTXVkYW7Dp2FJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnVGlja2V0XCcgY29tIGxpZ2HDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIGNvbSBsaWdhw6fDo28gXCdQYWlGaWxob1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyBjb20gbGlnYcOnw6NvIFwnUmVsZXZhbnRlIHBhcmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgY29tIGxpZ2HDp8OjbyBcJ0FsdGVybmF0aXZhIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyBjb20gbGlnYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyBjb20gbGlnYcOnw6NvIFwnUmVsZXZhbnRlIHBhcmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnVGlja2V0XCcgY29tIGxpZ2HDp8OjbyBcJ0FsdGVybmF0aXZhIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdUaWNrZXRcJyBjb20gbGlnYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdUaWNrZXRcJyBjb20gbGlnYcOnw6NvIFwnUmVsZXZhbnRlIHBhcmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyBjb20gbGlnYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyBjb20gbGlnYcOnw6NvIFwnTGlnYWRvIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdJbmNsdWlcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyBjb20gbGlnYcOnw6NvIFwnUmVsZXZhbnRlIHBhcmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ09yZGVtU2VydmnDp29JVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyBjb20gbGlnYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIGNvbSBsaWdhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ09yZGVtU2VydmnDp29JVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyBjb20gbGlnYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdUaWNrZXRcJyBjb20gbGlnYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnU2VydmnDp29cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyBjb20gbGlnYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdTZXJ2acOnb1wnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIGNvbSBsaWdhw6fDo28gXCdQYWlGaWxob1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdTZXJ2acOnb1wnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIGNvbSBsaWdhw6fDo28gXCdSZWxldmFudGUgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ0FsdGVybmF0aXZhIGFcJy4gU2UgbyBub21lIGRhIG9yaWdlbSBlIG8gbm9tZSBkZSBkZXN0aW5vIHPDo28gaWd1YWlzLCBhIGFzc29jaWHDp8OjbyDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ0xpZ2FkbyBhXCcuIFNlIG8gbm9tZSBkYSBvcmlnZW0gZSBvIG5vbWUgZGUgZGVzdGlubyBzw6NvIGlndWFpcywgYSBhc3NvY2lhw6fDo28gw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnRGVwZW5kZSBkZVwnLiBTZSBvIG5vbWUgZGEgb3JpZ2VtIGUgbyBub21lIGRlIGRlc3Rpbm8gc8OjbyBpZ3VhaXMsIGEgYXNzb2NpYcOnw6NvIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnSW5jbHVpXCcuIFNlIG8gbm9tZSBkYSBvcmlnZW0gZSBvIG5vbWUgZGUgZGVzdGlubyBzw6NvIGlndWFpcywgYSBhc3NvY2lhw6fDo28gw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnTG9jYXRpb25PZlwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdSZWxldmFudGUgYVwnLiBTZSBvIG5vbWUgZGEgb3JpZ2VtIGUgbyBub21lIGRlIGRlc3Rpbm8gc8OjbyBpZ3VhaXMsIGEgYXNzb2NpYcOnw6NvIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTsO6bWVybyBkZSBjYXJhY3RlcmVzIHBvciBsaW5oYSBlbSDDoXJlYXMgZGUgdGV4dG8gSVRTTS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/ro_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnJvX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0NyaXRpYyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3QnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JhcG9ydGFyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9pZWN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0FsdGVsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaXRhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdG9iby9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5mb3JjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnQ29udGluZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGVkIGluJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0aW9uIG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgY3JpdGljYWxpdHkgLSBpbXBhY3QgLSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdQYXJ0ZSBkaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnTG9jYXRpb25PZlwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==</File>
        <File Location="Kernel/Language/ru_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnJ1X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAn0JrRgNC40YLQuNGH0L3QvtGB0YLRjCDihpQg0JLQu9C40Y/QvdC40LUg4oaUINCf0YDQuNC+0YDQuNGC0LXRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAn0JjQt9C80LXQvdC10L3QuNC1INGC0LDQsdC70LjRhtGLINGA0LDRgdGH0LXRgtCwINC/0YDQuNC+0YDQuNGC0LXRgtCwINCyINC30LDQstC40YHQuNC80L7RgdGC0Lgg0L7RgiDQutC+0LzQsdC40L3QsNGG0LjQuCDQmtGA0LjRgtC40YfQvdC+0YHRgtGMIOKGlCDQktC70LjRj9C90LjQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ9Cd0LDQt9C90LDRh9C10L3QuNC1INC/0YDQuNC+0YDQuNGC0LXRgtCwJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn0JzQuNC90LjQvNCw0LvRjNC90L7QtSDQstGA0LXQvNGPINC80LXQttC00YMg0LjQvdGG0LjQtNC10L3RgtCw0LzQuCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ9Ca0YDQuNGC0LjRh9C90L7RgdGC0YwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ9CY0L3RhNC+0YDQvNCw0YbQuNGPINC+0LEgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ9CU0LDRgtCwINC40LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfQmtC10Lwg0LjQt9C80LXQvdC10L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn0KHQstGP0LfQsNC90L3Ri9C1INGB0LXRgNCy0LjRgdGLJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ9CY0L3RhNC+0YDQvNCw0YbQuNGPINC+INCh0LXRgNCy0LjRgdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICfQotC10LrRg9GJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUg0LjQvdGG0LjQtNC10L3RgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ9Ch0LLRj9C30LDQvdC90YvQtSBTTEEnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICfQktC70LjRj9C90LjQtSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJ1NMQUlEINC90LUg0L3QsNC30L3QsNGH0LXQvSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ1NMQUlEICVzINC90LUg0L3QsNC50LTQtdC9INCyINCx0LDQt9C1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAn0JrQsNC70LXQvdC00LDRgNGMINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJ9C+0L/QtdGA0LDRgtC40LLQvdCw0Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJ9C/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICfQuNC90YbQuNC00LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJ1NlcnZpY2VJRCDQvdC1INC90LDQt9C90LDRh9C10L0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU2VydmljZUlEICVzINC90LUg0L3QsNC50LTQtdC9INCyINCx0LDQt9C1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn0KLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICfQodC+0YHRgtC+0Y/QvdC40LUg0LjQvdGG0LjQtNC10L3RgtCwJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXh0ZXJuYWwtc291cmNlIGtleSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgLyBTT1BNIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAn0JIg0Y3QutGB0L/Qu9GD0LDRgtCw0YbQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAn0JjQvdGG0LjQtNC10L3Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAn0JrQvtC90LXRh9C90YvQuSDRgdC10YDQstC40YEg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ9CY0L3RgtC10YDRhNC10LnRgdC90LDRjyDRh9Cw0YHRgtGMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAn0KHQtdGA0LLQtdGA0L3QsNGPINGH0LDRgdGC0YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INCY0KInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn0KHQvtGB0YLQsNCy0LvQtdC90LjQtSDQvtGC0YfQtdGC0L7Qsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ9Ct0LrRgdC/0LvRg9Cw0YLQsNGG0LjRjyDQmNCiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICfQlNC10LzQvtC90YHRgtGA0LDRhtC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ9Cf0LvQsNC90LjRgNC+0LLQsNC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICfQmtC+0L3RgtGA0LDQutGCINC/0L7QtNC00LXRgNC20LrQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ9CU0YDRg9Cz0L7QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICfQlNC+0YHRgtGD0L/QvdC+0YHRgtGMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICfQktGA0LXQvNGPINGA0LXQsNC60YbQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICfQktGA0LXQvNGPINCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAn0J7RgtC90L7RgdC40YLQtdC70YzQvdCw0Y8g0YHQutC+0YDQvtGB0YLRjCDRgNC10YjQtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfQpNC40L3QsNC90YHQvtCy0YvQtSDQvtC/0LXRgNCw0YbQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ9Ce0YjQuNCx0LrQuCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn0JfQsNC80LXQvdCwINC00LvRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ9Ch0LLRj9C30LDQvSDRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQlNC10LnRgdGC0LLQuNGPL0FjdGlvbnMg0LrQvtCz0LTQsCDQutC90L7Qv9C60LAg0L3QsNGB0YLRgNC+0LnQutC4INC00L7RgdGC0YPQv9C90LAg0LIg0YHQstGP0LfQsNC90L3QvtC8INCy0LjQtNC20LXRgtC1IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuINCe0LHRgNCw0YLQuNGC0LUg0LLQvdC40LzQsNC90LjQtSwg0YfRgtC+INGN0YLQuCDQlNC10LnRgdGC0LLQuNGPL0FjdGlvbnMg0LTQvtC70LbQvdGLINC40LzQtdGC0Ywg0LfQsNGA0LXQs9C40YHRgtGA0LjRgNC+0LLQsNC90L3Ri9C1IEpTINC40LvQuCBDU1Mg0YTQsNC50LvRizogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMg0LggQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvQuNGC0YwsINC60LDQutC40LUg0YHRgtC+0LvQsdGG0Ysg0L7RgtC+0LHRgNCw0LbQsNGO0YLRgdGPINCyINGB0LLRj9C30LDQvdC90L7QvCDQstC40LTQttC10YLQtSDRgdC70YPQttCxIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuINCf0YDQuNC80LXRh9Cw0L3QuNC1OiDQotC+0LvRjNC60L4g0YHQtdGA0LLQuNGB0L3Ri9C1INCw0YLRgNC40LHRg9GC0Ysg0YDQsNC30YDQtdGI0LXQvdGLINC00LvRjyBEZWZhdWx0Q29sdW1ucy4g0JLQvtC30LzQvtC20L3Ri9C1INC90LDRgdGC0YDQvtC50LrQuDogMCA9INCe0YLQutC70Y7Rh9C10L3QviwgMSA9INCS0LrQu9GO0YfQtdC90L4sIDIgPSDQktC60LvRjtGH0LXQvdC+INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdG9iby9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICfQl9Cw0LLQuNGB0LjRgiDQvtGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uINC00LvRjyDQv9Cw0YDQsNC80LXRgtGA0L7QsiBBZG1pbklUU01DSVBBbGxvY2F0ZSDQsiDQv9Cw0L3QtdC70Lgg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24g0LTQu9GPINC+0LHRitC10LrRgtCwIEFnZW50SVRTTVNMQSDQsiDQv9Cw0L3QtdC70Lgg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0L7QsdGK0LXQutGC0LAgQWdlbnRJVFNNU0xBUHJpbnQg0LIg0L/QsNC90LXQu9C4INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0L7QsdGK0LXQutGC0LAgQWdlbnRJVFNNU0xBWm9vbSDQsiDQv9Cw0L3QtdC70Lgg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uINC00LvRjyDQvtCx0YrQtdC60YLQsCBBZ2VudElUU01TZXJ2aWNlINCyINC/0LDQvdC10LvQuCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0L7QsdGK0LXQutGC0LAgQWdlbnRJVFNNU2VydmljZVByaW50INCyINC/0LDQvdC10LvQuCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uINC00LvRjyDQvtCx0YrQtdC60YLQsCBBZ2VudElUU01TZXJ2aWNlWm9vbSDQsiDQv9Cw0L3QtdC70Lgg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAn0J7QsdC30L7RgCBJVFNNIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAn0J7QsdC30L7RgCBJVFNNINGB0LXRgNCy0LjRgdC+0LIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICfQotC40L8g0YHQvtGB0YLQvtGP0L3QuNGPINC40L3RhtC40LTQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ9CS0LrQu9GO0YfQsNC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INC80LDRgtGA0LjRhtC10Lkg0L/RgNC40L7RgNC40YLQtdGC0L7Qsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJ9Cj0L/RgNCw0LLQu9GP0LnRgtC1INC80LDRgtGA0LjRhtC10Lkg0LrRgNC40YLQuNGH0L3QvtGB0YLQuCAtINCy0L7Qt9C00LXQudGB0YLQstC40Y8gLSDQv9GA0LjQvtGA0LjRgtC10YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ9Cf0L7QutCw0LfQsNGC0Ywg0LrQvdC+0L/QutGDICLQvdCw0LfQsNC0IiDQsiDQvNC10L3RjiBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICfQn9C+0LrQsNC30LDRgtGMINC60L3QvtC/0LrRgyAi0L3QsNC30LDQtCIg0LIg0LzQtdC90Y4g0KHQtdGA0LLQuNGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn0J/QvtC60LDQt9Cw0YLRjCDQutC90L7Qv9C60YMg0KHQstGP0LfQsNGC0YwvTGluayDQsiDQvNC10L3RjiDQodC10YDQstC40YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICfQn9C+0LrQsNC30LDRgtGMINC60L3QvtC/0LrRgyAi0J/QtdGH0LDRgtGMIiDQsiDQvNC10L3RjiBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn0J/QvtC60LDQt9Cw0YLRjCDQutC90L7Qv9C60YMgItCf0LXRh9Cw0YLRjCIg0LIg0LzQtdC90Y4g0KHQtdGA0LLQuNGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAn0J/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQvdGG0LjQtNC10L3RgtCwINCyIHByZWZlcmVuY2Ugdmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ9Cn0LDRgdGC0Ywg0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ9Ce0YLQvdC+0YHQuNGC0YHRjyDQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfQotGA0LXQsdGD0LXRgtGB0Y8g0LTQu9GPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ9Ch0L/QuNGB0L7QuiBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJ9Cf0LXRh9Cw0YLRjCBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ9Cf0L7QtNGA0L7QsdC90L7RgdGC0LggU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn0KHQv9C40YHQvtC6INGB0LXRgNCy0LjRgdC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICfQn9C10YfQsNGC0Ywg0YHQtdGA0LLQuNGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICfQn9C+0LTRgNC+0LHQvdC+0YHRgtC4INGB0LXRgNCy0LjRgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfQntCx0LfQvtGAINGB0LXRgNCy0LjRgdC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgtC40L8g0Lgg0L3QsNC/0YDQsNCy0LvQtdC90LjQtSDRgdCy0Y/Qt9C4INC00LvRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDQv9GA0Lgg0LLRi9GH0LjRgdC70LXQvdC40Lgg0YHQvtGB0YLQvtGP0L3QuNGPINC40L3RhtC40LTQtdC90YLQsC4g0JrQu9GO0Ycg0Y3RgtC+INC40LzRjyDRgtC40L/QsCDRgdCy0Y/Qt9C4ICjQutCw0Log0Y3RgtC+INC30LDQtNCw0L3QviDQsiBMaW5rT2JqZWN0OjpUeXBlKSwg0LAg0JfQvdCw0YfQtdC90LjQtSDRjdGC0L4g0L3QsNC/0YDQsNCy0LvQtdC90LjQtSBJbmNpZGVudExpbmtUeXBlINC90LAg0L7RgdC90L7QstCw0L3QuNC4INC60L7RgtC+0YDQvtCz0L4g0LLRi9GH0LjRgdC70Y/QtdGC0YHRjyDRgdC+0YHRgtC+0Y/QvdC40LUg0LjQvdGG0LjQtNC10L3RgtCwLiDQndCw0L/RgNC40LzQtdGALCDQtdGB0LvQuCBJbmNpZGVudExpbmtUeXBlINGD0YHRgtCw0L3QvtCy0LvQtdC9INCyIFwn0JfQsNCy0LjRgdC40YIg0L7Rgi9EZXBlbmRzIG9uXCcsINC4INCd0LDQv9GA0LDQstC70LXQvdC40LUgLSBcJ9CY0YHRgtC+0YfQvdC40LpcJywg0YLQviDRgtC+0LvRjNC60L4g0YHQstGP0LfQuCBcJ9CX0LDQstC40YHQuNGCINC+0YJcJyDQsdGD0LTRg9GCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8gKNCwINC90LUg0L/RgNC+0YLQuNCy0L7Qv9C+0LvQvtC20L3QsNGPIFwn0J3QtdC+0LHRhdC+0LTQuNC80L4g0LTQu9GPL1JlcXVpcmVkIGZvclwnKSDQtNC70Y8g0LLRi9GH0LjRgdC70LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC40L3RhtC40LTQtdC90YLQsC4g0JLRiyDQvNC+0LbQtdGC0LUg0LTQvtCx0LDQstC40YLRjCDQtNGA0YPQs9C40LUg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDRgtC40L/RiyDRgdCy0Y/Qt9C4INC4INC90LDQv9GA0LDQstC70LXQvdC40Y8g0L/QviDRgdCy0L7QtdC80YMg0LbQtdC70LDQvdC40Y4sINC90LDQv9GA0LjQvNC10YAsICBcJ9CS0LrQu9GO0YfQsNC10YIvSW5jbHVkZXNcJyDRgSDQvdCw0L/RgNCw0LLQu9C10L3QuNC10LwgXCfQptC10LvRjC9UYXJnZXRcJy4g0LTQvtC/0YPRgdC60LDRjtGC0YHRjyDQstGB0LUg0YLQuNC/0Ysg0YHQstGP0LfQuCwg0LfQsNC00LDQvdC90YvQtSDQv9Cw0YDQsNC80LXRgtGA0L7QvCBMaW5rT2JqZWN0OjpUeXBlINC4INC90LDQv9GA0LDQstC70LXQvdC40Y8g0LzQvtCz0YPRgiDQsdGL0YLRjCBcJ9CY0YHRgtC+0YfQvdC40LovU291cmNlXCcsIFwn0KbQtdC70YwvVGFyZ2V0XCcsINC40LvQuCBcJ9Ce0LHQsC9Cb3RoXCcuINCS0JDQltCd0J46INCf0J7QodCb0JUg0JjQl9Cc0JXQndCV0J3QmNCvINCX0J3QkNCn0JXQndCY0Jkg0K3QotCe0JPQniDQn9CQ0KDQkNCc0JXQotCg0JAg0J3QldCe0JHQpdCe0JTQmNCc0J4g0JLQq9Cf0J7Qm9Cd0JjQotCsINCh0JrQoNCY0J/QoiBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUg0JTQm9CvINCf0JXQoNCV0KDQkNCh0KfQldCi0JAg0JLQodCV0KUg0KHQntCh0KLQntCv0J3QmNCZINCY0J3QptCY0JTQldCd0KLQkCDQndCQINCe0KHQndCe0JLQlSDQndCe0JLQq9ClINCX0J3QkNCn0JXQndCY0JkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICfQmNGB0YLQvtGH0L3QuNC6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Z2dlc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ2hhbmdlXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1RpY2tldFwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0ZBUVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnRkFRXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUGFyZW50Q2hpbGRcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnRkFRXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUmVsZXZhbnRUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnU2VydmljZVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0FsdGVybmF0aXZlVG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnU2VydmljZVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0RlcGVuZHNPblwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnU2VydmljZVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnVGlja2V0XCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnQWx0ZXJuYXRpdmVUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1RpY2tldFwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0RlcGVuZHNPblwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdUaWNrZXRcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdSZWxldmFudFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdBbHRlcm5hdGl2ZVRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnQ29ubmVjdGVkVG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnSW5jbHVkZXNcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdJVFNNQ29uZmlnSXRlbVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTVdvcmtPcmRlclwg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Xb3JrT3JkZXJcINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdJVFNNQ29uZmlnSXRlbVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Xb3JrT3JkZXJcINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdTZXJ2aWNlXCDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNV29ya09yZGVyXCDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnU2VydmljZVwg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNV29ya09yZGVyXCDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnVGlja2V0XCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdTZXJ2aWNlXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0ZBUVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdTZXJ2aWNlXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0ZBUVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1BhcmVudENoaWxkXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnU2VydmljZVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdGQVFcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdSZWxldmFudFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIg0YLQuNC/INGB0LLRj9C30LggXCdBbHRlcm5hdGl2ZVRvXCcuINCV0YHQu9C4INC40YHRhdC+0LTQvdC+0LUg0LjQvNGPINC4INC40LzRjyDRhtC10LvQuCDQuNC80LXRjtGCINC+0LTQuNC90LDQutC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUsINGA0LXQt9GD0LvRjNGC0LjRgNGD0Y7RidCw0Y8g0YHQstGP0LfRjCAtINC90LXQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8sINC40L3QsNGH0LUg0Y3RgtC+INC90LDQv9GA0LDQstC70LXQvdC90LDRjyDRgdCy0Y/Qt9GMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiDRgtC40L8g0YHQstGP0LfQuCBcJ0Nvbm5lY3RlZFRvXCcuINCV0YHQu9C4INC40YHRhdC+0LTQvdC+0LUg0LjQvNGPINC4INC40LzRjyDRhtC10LvQuCDQuNC80LXRjtGCINC+0LTQuNC90LDQutC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUsINGA0LXQt9GD0LvRjNGC0LjRgNGD0Y7RidCw0Y8g0YHQstGP0LfRjCAtINC90LXQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8sINC40L3QsNGH0LUg0Y3RgtC+INC90LDQv9GA0LDQstC70LXQvdC90LDRjyDRgdCy0Y/Qt9GMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIg0YLQuNC/INGB0LLRj9C30LggXCdEZXBlbmRzT25cJy4g0JXRgdC70Lgg0LjRgdGF0L7QtNC90L7QtSDQuNC80Y8g0Lgg0LjQvNGPINGG0LXQu9C4INC40LzQtdGO0YIg0L7QtNC40L3QsNC60L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSwg0YDQtdC30YPQu9GM0YLQuNGA0YPRjtGJ0LDRjyDRgdCy0Y/Qt9GMIC0g0L3QtdC90LDQv9GA0LDQstC70LXQvdC90LDRjywg0LjQvdCw0YfQtSDRjdGC0L4g0L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPINGB0LLRj9C30YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCINGC0LjQvyDRgdCy0Y/Qt9C4IFwnSW5jbHVkZXNcJy4g0JXRgdC70Lgg0LjRgdGF0L7QtNC90L7QtSDQuNC80Y8g0Lgg0LjQvNGPINGG0LXQu9C4INC40LzQtdGO0YIg0L7QtNC40L3QsNC60L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSwg0YDQtdC30YPQu9GM0YLQuNGA0YPRjtGJ0LDRjyDRgdCy0Y/Qt9GMIC0g0L3QtdC90LDQv9GA0LDQstC70LXQvdC90LDRjywg0LjQvdCw0YfQtSDRjdGC0L4g0L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPINGB0LLRj9C30YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUmVsZXZhbnRUb1wnLiDQldGB0LvQuCDQuNGB0YXQvtC00L3QvtC1INC40LzRjyDQuCDQuNC80Y8g0YbQtdC70Lgg0LjQvNC10Y7RgiDQvtC00LjQvdCw0LrQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1LCDRgNC10LfRg9C70YzRgtC40YDRg9GO0YnQsNGPINGB0LLRj9C30YwgLSDQvdC10L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPLCDQuNC90LDRh9C1INGN0YLQviDQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8g0YHQstGP0LfRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICfQqNC40YDQuNC90LAgSVRTTSDQv9C+0LvRjyDRgtC40L/QsCB0ZXh0YXJlYSc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==</File>
        <File Location="Kernel/Language/sk_SK_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnNrX1NLX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/sl_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnNsX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/sr_Cyrl_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnNyX0N5cmxfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogVGlja2V0SW5mb3JtYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXh0ZXJuYWwtc291cmNlIGtleSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgLyBTT1BNIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn0JDQu9GC0LXRgNC90LDRgtC40LLQsCDQt9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJUEFsbG9jYXRpb246IE92ZXJ3cml0ZSBwcmlvcml0eSBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBEZWZhdWx0IGZhbGxiYWNrOiBGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAn0J/QvtCy0LXQt9Cw0L3QviDQvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYmVoYXZpb3Igb2YgcHJpb3JpdHkgYWxsb2NhdGlvbiBpbiB0aGUgZnJvbnRlbmRzIGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIENhbiBiZSBvdmVycnVsZWQgYnkgZnJvbnRlbmQgc3BlY2lmaWMgUHJpb3JpdHlCeUNJUCBzZXR0aW5ncy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQkNC60YbQuNGY0LUg0LPQtNC1INGY0LUg0LTRg9Cz0LzQtSDQv9C+0YHRgtCw0LLQutC4INC00L7RgdGC0YPQv9C90L4g0YMg0L/QvtCy0LXQt9Cw0L3QvtC8INCz0YDQsNGE0LjRh9C60L7QvCDQtdC70LXQvNC10L3RgtGDINC+0LHRmNC10LrRgtCwIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuINCc0L7Qu9C40LzQviDQtNCwINC40LzQsNGC0LUg0L3QsCDRg9C80YMg0LTQsCDQvtCy0LUg0JDQutGG0LjRmNC1INC80L7RgNCw0ZjRgyDQtNCwINCx0YPQtNGDINGA0LXQs9C40YHRgtGA0L7QstCw0L3QtSDRgyDRgdC70LXQtNC10ZvQuNC8IEpTINC4IENTUyDQtNCw0YLQvtGC0LXQutCw0LzQsDogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMg0LggQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQutC+0ZjQtSDQutC+0LvQvtC90LUg0YHRgyDQv9GA0LjQutCw0LfQsNC90LUg0YMg0L/QvtCy0LXQt9Cw0L3QvtC8INCz0YDQsNGE0LjRh9C60L7QvCDQtdC70LXQvNC10L3RgtGDINCh0LXRgNCy0LjRgdCwIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuINCd0LDQv9C+0LzQtdC90LA6INCh0LDQvNC+INCw0YLRgNC40LHRg9GC0Lgg0YHQtdGA0LLQuNGB0LAg0YHRgyDQtNC+0LfQstC+0ZnQtdC90Lgg0LfQsCDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QtSDQutC+0LvQvtC90LUuINCc0L7Qs9GD0ZvQtSDQv9C+0YHRgtCw0LLQutC1OiAwID0g0L7QvdC10LzQvtCz0YPRm9C10L3QviwgMSA9INC00L7RgdGC0YPQv9C90L4sIDIgPSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviDQsNC60YLQuNCy0LjRgNCw0L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn0JfQsNCy0LjRgdC4INC+0LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5mb3JjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ9Cg0LXQs9C40YHRgtGA0LDRhtC40ZjQsCDQv9GA0LjRgdGC0YPQv9C90L7QsyDQvNC+0LTRg9C70LAg0LfQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40ZjRgyBBZG1pbklUU01DSVBBbGxvY2F0ZSDRgyDQv9GA0L7RgdGC0L7RgNGDINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoNC10LPQuNGB0YLRgNCw0YbQuNGY0LAg0L/RgNC40YHRgtGD0L/QvdC+0LMg0LzQvtC00YPQu9CwINC30LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGY0YMgQWdlbnRJVFNNU0xBINC+0LHRmNC10LrRgtCwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KDQtdCz0LjRgdGC0YDQsNGG0LjRmNCwINC/0YDQuNGB0YLRg9C/0L3QvtCzINC80L7QtNGD0LvQsCDQt9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRmNGDIEFnZW50SVRTTVNMQVByaW50INC+0LHRmNC10LrRgtCwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoNC10LPQuNGB0YLRgNCw0YbQuNGY0LAg0L/RgNC40YHRgtGD0L/QvdC+0LMg0LzQvtC00YPQu9CwINC30LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGY0YMgQWdlbnRJVFNNU0xBWm9vbSDQvtCx0ZjQtdC60YLQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KDQtdCz0LjRgdGC0YDQsNGG0LjRmNCwINC/0YDQuNGB0YLRg9C/0L3QvtCzINC80L7QtNGD0LvQsCDQt9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRmNGDIEFnZW50SVRTTVNlcnZpY2Ug0L7QsdGY0LXQutGC0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KDQtdCz0LjRgdGC0YDQsNGG0LjRmNCwINC/0YDQuNGB0YLRg9C/0L3QvtCzINC80L7QtNGD0LvQsCDQt9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRmNGDIEFnZW50SVRTTVNlcnZpY2VQcmludCDQvtCx0ZjQtdC60YLQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cg0LXQs9C40YHRgtGA0LDRhtC40ZjQsCDQv9GA0LjRgdGC0YPQv9C90L7QsyDQvNC+0LTRg9C70LAg0LfQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40ZjRgyBBZ2VudElUU01TZXJ2aWNlWm9vbSDQvtCx0ZjQtdC60YLQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJ0lUU00g0L/RgNC10LPQu9C10LQgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnSVRTTSDQv9GA0LXQs9C70LXQtCDRgdC10YDQstC40YHQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJ9Ci0LjQvyDRgdGC0LDRmtCwINC40L3RhtC40LTQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ9Cj0LrRmdGD0YfRg9GY0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ9Cj0YDQtdC00LjRgtC4INC80LDRgtGA0LjRhtGDINC/0YDQuNC+0YDQuNGC0LXRgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgY3JpdGljYWxpdHkgLSBpbXBhY3QgLSBwcmlvcml0eSBtYXRyaXguJ30gPSAn0KPRgNC10ZLQuNCy0LDRmtC1INC80LDRgtGA0LjRhtCwINC30L3QsNGH0LDRmCAtINGD0YLQuNGG0LDRmCAtINC/0YDQuNC+0YDQuNGC0LXRgi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ9Cc0L7QtNGD0Lsg0LfQsCDQv9GA0LjQutCw0Lcg0LLQtdC30LUg0LfQsCDQstGA0LDRm9Cw0ZrQtSDRgyBTTEEg0LzQtdC90LjRmNGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ9Cc0L7QtNGD0Lsg0LfQsCDQv9GA0LjQutCw0Lcg0LLQtdC30LUg0LfQsCDQstGA0LDRm9Cw0ZrQtSDRgyDRgdC10YDQstC40YHQvdC+0Lwg0LzQtdC90LjRmNGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ9Cc0L7QtNGD0Lsg0LfQsCDQv9GA0LjQutCw0Lcg0LLQtdC30LUg0YMg0YHQtdGA0LLQuNGB0L3QvtC8INC80LXQvdC40ZjRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICfQnNC+0LTRg9C7INC30LAg0L/RgNC40LrQsNC3INCy0LXQt9C1INC30LAg0YjRgtCw0LzQv9GDINGDIFNMQSDQvNC10L3QuNGY0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ9Cc0L7QtNGD0Lsg0LfQsCDQv9GA0LjQutCw0Lcg0LLQtdC30LUg0LfQsCDRiNGC0LDQvNC/0YMg0YMg0YHQtdGA0LLQuNGB0L3QvtC8INC80LXQvdC40ZjRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDQuNC90YbQuNC00LXQvdGC0L3QtSDRgdGC0LDRgtGD0YHQtSDRgyDQv9GA0LjQutCw0LfRgyDQv9C+0LTQtdGI0LDQstCw0ZrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ9Ch0LDRgdGC0LDQstC90Lgg0LTQtdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAn0KMg0LfQsNCy0LjRgdC90L7RgdGC0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAn0J7QsdCw0LLQtdC30L3QviDQt9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ9Cf0YDQtdCz0LvQtdC0IFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAn0KjRgtCw0LzQv9CwIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAn0JTQtdGC0LDRmdC4IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ9Cf0YDQtdCz0LvQtdC0INGB0LXRgNCy0LjRgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAn0KjRgtCw0LzQv9CwINGB0LXRgNCy0LjRgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAn0JTQtdGC0LDRmdC4INGB0LXRgNCy0LjRgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfQn9GA0L7RgdGC0L7RgCDRgdC10YDQstC40YHQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAn0J/QvtC00LXRiNCw0LLQsCDRgtC40L8g0Lgg0YHQvNC10YAg0LLQtdC30LAg0LrQvtGY0Lgg0ZvQtSDRgdC1INC60L7RgNC40YHRgtC40YLQuCDQt9CwINGD0YLQstGA0ZLQuNCy0LDRmtC1INGB0YLQsNGa0LAg0LjQvdGG0LjQtNC10L3RgtCwLiDQmtGZ0YPRhyDRmNC1INC90LDQt9C40LIg0YLQuNC/0LAg0LLQtdC30LUgKNC60LDQviDRiNGC0L4g0ZjQtSDQtNC10YTQuNC90LjRgdCw0L3QviDRgyBMaW5rT2JqZWN0OjpUeXBlKSwg0LAg0LLRgNC10LTQvdC+0YHRgiDRmNC1INGB0LzQtdGAIEluY2lkZW50TGlua1R5cGUg0LrQvtGY0Lgg0YLRgNC10LHQsCDQuNGB0L/RgNCw0YLQuNGC0Lgg0LfQsCDQvtC00YDQtdGS0LjQstCw0ZrQtSDRgdGC0LDRmtCwINC40L3RhtC40LTQtdC90YLQsC4g0J3QsCDQv9GA0LjQvNC10YAsINCw0LrQviDRmNC1IEluY2lkZW50TGlua1R5cGUg0L/QvtC00LXRiNC10L0g0L3QsCBEZXBlbmRzT24g0Lgg0YHQvNC10YAg0ZjQtSBTb3VyY2UsINGB0LDQvNC+INCy0LXQt9CwICLQl9Cw0LLQuNGB0Lgg0L7QtCIg0ZvQtSDQsdC40YLQuCDQv9GA0LDRm9C10L3QsCAo0LAg0L3QtdGb0LUg0Lgg0YHRg9C/0YDQvtGC0L3QsCDQstC10LfQsCAi0J3QtdC+0L/RhdC+0LTQvdC+INC30LAiKSDRgyDQvtC00YDQtdGS0LjQstCw0ZrRgyDRgdGC0LDRmtCwINC40L3RhtC40LTQtdC90YLQsC4g0KPQutC+0LvQuNC60L4g0LbQtdC70LjRgtC1INC80L7QttC1INC00L7QtNCw0YLQuCDRmNC+0Ygg0YLQuNC/0L7QstCwINC4INGB0LzQtdGA0L7QstCwINCy0LXQt9CwLCDQvdC/0YAuICLQo9C60ZnRg9GH0YPRmNC1IiDRgdCwINGB0LzQtdGA0L7QvCAi0KbQuNGZIi4g0KHQstC4INGC0LjQv9C+0LLQuCDQstC10LfQsCDQtNC10YTQuNC90LjRgdCw0L3QuCDRgyDRgdC40YHRgtC10LzRgdC60L7RmCDQutC+0L3RhNC40LPRg9GA0LDRhtC40ZjQuCBMaW5rT2JqZWN0OjpUeXBlINGB0YMg0LzQvtCz0YPRm9C4INC4INGB0LzQtdGAINC80L7QttC1INCx0LjRgtC4ICLQmNC30LLQvtGAIiwgItCm0LjRmSIg0LjQu9C4ICLQntCx0LAiLiDQktCQ0JbQndCeOiDQndCQ0JrQntCdINCY0JfQnNCV0J3QlSDQntCf0KbQmNCI0JAg0KHQmNCh0KLQldCc0KHQmtCVINCa0J7QndCk0JjQk9Cj0KDQkNCm0JjQiNCVINCc0J7QoNCQ0KLQlSDQn9Ce0JrQoNCV0J3Qo9Ci0Jgg0KHQmtCg0JjQn9CiIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSDQlNCQINCR0Jgg0KHQktCQINCh0KLQkNCK0JAg0JjQndCm0JjQlNCV0J3QotCQINCR0JjQm9CQINCf0J7QndCe0JLQniDQo9Ci0JLQoNCC0JXQndCQINCd0JAg0J7QodCd0J7QktCjINCd0J7QktCY0KUg0J/QntCU0JXQqNCQ0JLQkNCK0JAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICfQmNC30LLQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Z2dlc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJOb3JtYWwiINC+0LHRmNC10LrQsNGCIElUU00g0L/RgNC+0LzQtdC90LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC+0LHRmNC10LrRgtC+0Lwg0YLQuNC60LXRgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJOb3JtYWwiINC+0LHRmNC10LrQsNGCIElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC+0LHRmNC10LrRgtC+0LwgRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INCy0LXQt9C+0Lwg0YLQuNC/0LAgUGFyZW50Q2hpbGQg0L7QsdGY0LXQutCw0YIgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0L7QsdGY0LXQutGC0L7QvCBGQVEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJSZWxldmFudFRvIiDQvtCx0ZjQtdC60LDRgiBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0YHRgtCw0LLQutCwINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8IEZBUS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJBbHRlcm5hdGl2ZVRvIiDQvtCx0ZjQtdC60LDRgiBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0YHRgtCw0LLQutCwINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8INGB0LXRgNCy0LjRgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0L7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0LLQtdC30L7QvCDRgtC40L/QsCAiRGVwZW5kc09uIiDQvtCx0ZjQtdC60LDRgiBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0YHRgtCw0LLQutCwINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8INGB0LXRgNCy0LjRgdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INCy0LXQt9C+0Lwg0YLQuNC/0LAgIlJlbGV2YW50VG8iINC+0LHRmNC10LrQsNGCIElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC+0LHRmNC10LrRgtC+0Lwg0YHQtdGA0LLQuNGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJBbHRlcm5hdGl2ZVRvIiDQvtCx0ZjQtdC60LDRgiBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0YHRgtCw0LLQutCwINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8INGC0LjQutC10YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0L7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0LLQtdC30L7QvCDRgtC40L/QsCAiRGVwZW5kc09uIiDQvtCx0ZjQtdC60LDRgiBJVFNNINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0YHRgtCw0LLQutCwINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8INGC0LjQutC10YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INCy0LXQt9C+0Lwg0YLQuNC/0LAgIlJlbGV2YW50VG8iINC+0LHRmNC10LrQsNGCIElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC+0LHRmNC10LrRgtC+0Lwg0YLQuNC60LXRgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJBbHRlcm5hdGl2ZVRvIiDQvtCx0ZjQtdC6YdGCIElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC00YDRg9Cz0LjQvCDQvtCx0ZjQtdC60YLQvtC8IElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJDb25uZWN0ZWRUbyIg0L7QsdGY0LXQutCw0YIgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0LTRgNGD0LPQuNC8INC+0LHRmNC10LrRgtC+0LwgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJEZXBlbmRzT24iINC+0LHRmNC10LrQsNGCIElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC00YDRg9Cz0LjQvCDQvtCx0ZjQtdC60YLQvtC8IElUU00g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJJbmNsdWRlcyIg0L7QsdGY0LXQutCw0YIgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0LTRgNGD0LPQuNC8INC+0LHRmNC10LrRgtC+0LwgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0L7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0LLQtdC30L7QvCDRgtC40L/QsCAiUmVsZXZhbnRUbyIg0L7QsdGY0LXQutCw0YIgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsCDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0LTRgNGD0LPQuNC8INC+0LHRmNC10LrRgtC+0LwgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INCy0LXQt9C+0Lwg0YLQuNC/0LAgIkRlcGVuZHNPbiIg0L7QsdGY0LXQutCw0YIgSVRTTSDRgNCw0LTQvdC4INC90LDQu9C+0LMg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC+0LHRmNC10LrRgtC+0LwgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INCy0LXQt9C+0Lwg0YLQuNC/0LAgIk5vcm1hbCIg0L7QsdGY0LXQutCw0YIgSVRTTSDRgNCw0LTQvdC4INC90LDQu9C+0LMg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QstC10LbQtSDRgdCwINC+0LHRmNC10LrRgtC+0LwgSVRTTSDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINGB0YLQsNCy0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0L7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0LLQtdC30L7QvCDRgtC40L/QsCAiRGVwZW5kc09uIiDQvtCx0ZjQtdC60LDRgiBJVFNNINGA0LDQtNC90Lgg0L3QsNC70L7QsyDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0L7QsdGY0LXQutGC0L7QvCDRgdC10YDQstC40YHQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0L7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0LLQtdC30L7QvCDRgtC40L/QsCAiTm9ybWFsIiDQvtCx0ZjQtdC60LDRgiBJVFNNINGA0LDQtNC90Lgg0L3QsNC70L7QsyDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0L7QsdGY0LXQutGC0L7QvCDRgdC10YDQstC40YHQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQstC10LfQvtC8INGC0LjQv9CwICJOb3JtYWwiINC+0LHRmNC10LrQsNGCIElUU00g0YDQsNC00L3QuCDQvdCw0LvQvtCzINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8INGC0LjQutC10YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0L7QsdGY0LXQutCw0YIg0YHQtdGA0LLQuNGBINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8IEZBUSDQstC10LfQvtC8INGC0LjQv9CwICJOb3JtYWwiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0L7QtNGA0LXRktGD0ZjQtSDQtNCwINC+0LHRmNC10LrQsNGCINGB0LXRgNCy0LjRgSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtCy0LXQttC1INGB0LAg0L7QsdGY0LXQutGC0L7QvCBGQVEg0LLQtdC30L7QvCDRgtC40L/QsCAiUGFyZW50Q2hpbGQiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQvtC00YDQtdGS0YPRmNC1INC00LAg0L7QsdGY0LXQutCw0YIg0YHQtdGA0LLQuNGBINC80L7QttC1INC00LAg0YHQtSDQv9C+0LLQtdC20LUg0YHQsCDQvtCx0ZjQtdC60YLQvtC8IEZBUSDQstC10LfQvtC8INGC0LjQv9CwICJSZWxldmFudFRvIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC00LXRhNC40L3QuNGI0LUg0LLQtdC30YMg0YLQuNC/0LAgIkFsdGVybmF0aXZlVG8iLiDQkNC60L4g0LjQt9Cy0L7RgNC90Lgg0Lgg0YbQuNGZ0L3QuCDQvdCw0LfQuNCyINGB0LDQtNGA0LbQtSDQuNGB0YLRgyDQstGA0LXQtNC90L7RgdGCLCDRgNC10LfRg9C70YLRg9GY0YPRm9CwINCy0LXQt9CwINGY0LUg0L3QtdGD0YHQvNC10YDQtdC90LAuINCQ0LrQviDRgdGDINCy0YDQtdC00L3QvtGB0YLQuCDRgNCw0LfQu9C40YfQuNGC0LUsINGA0LXQt9GD0LvRgtGD0ZjRg9Gb0LAg0LLQtdC30LAg0ZjQtSDRg9GB0LzQtdGA0LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INC00LXRhNC40L3QuNGI0LUg0LLQtdC30YMg0YLQuNC/0LAgIkNvbm5lY3RlZFRvIi4g0JDQutC+INC40LfQstC+0YDQvdC4INC4INGG0LjRmdC90Lgg0L3QsNC30LjQsiDRgdCw0LTRgNC20LUg0LjRgdGC0YMg0LLRgNC10LTQvdC+0YHRgiwg0YDQtdC30YPQu9GC0YPRmNGD0ZvQsCDQstC10LfQsCDRmNC1INC90LXRg9GB0LzQtdGA0LXQvdCwLiDQkNC60L4g0YHRgyDQstGA0LXQtNC90L7RgdGC0Lgg0YDQsNC30LvQuNGH0LjRgtC1LCDRgNC10LfRg9C70YLRg9GY0YPRm9CwINCy0LXQt9CwINGY0LUg0YPRgdC80LXRgNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0LTQtdGE0LjQvdC40YjQtSDQstC10LfRgyDRgtC40L/QsCAiRGVwZW5kc09uIi4g0JDQutC+INC40LfQstC+0YDQvdC4INC4INGG0LjRmdC90Lgg0L3QsNC30LjQsiDRgdCw0LTRgNC20LUg0LjRgdGC0YMg0LLRgNC10LTQvdC+0YHRgiwg0YDQtdC30YPQu9GC0YPRmNGD0ZvQsCDQstC10LfQsCDRmNC1INC90LXRg9GB0LzQtdGA0LXQvdCwLiDQkNC60L4g0YHRgyDQstGA0LXQtNC90L7RgdGC0Lgg0YDQsNC30LvQuNGH0LjRgtC1LCDRgNC10LfRg9C70YLRg9GY0YPRm9CwINCy0LXQt9CwINGY0LUg0YPRgdC80LXRgNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ9Ce0LLQviDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQtNC10YTQuNC90LjRiNC1INCy0LXQt9GDINGC0LjQv9CwICJJbmNsdWRlcyIuINCQ0LrQviDQuNC30LLQvtGA0L3QuCDQuCDRhtC40ZnQvdC4INC90LDQt9C40LIg0YHQsNC00YDQttC1INC40YHRgtGDINCy0YDQtdC00L3QvtGB0YIsINGA0LXQt9GD0LvRgtGD0ZjRg9Gb0LAg0LLQtdC30LAg0ZjQtSDQvdC10YPRgdC80LXRgNC10L3QsC4g0JDQutC+INGB0YMg0LLRgNC10LTQvdC+0YHRgtC4INGA0LDQt9C70LjRh9C40YLQtSwg0YDQtdC30YPQu9GC0YPRmNGD0ZvQsCDQstC10LfQsCDRmNC1INGD0YHQvNC10YDQtdC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdMb2NhdGlvbk9mXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQntCy0L4g0L/QvtC00LXRiNCw0LLQsNGa0LUg0LTQtdGE0LjQvdC40YjQtSDQstC10LfRgyDRgtC40L/QsCAiUmVsZXZhbnRUbyIuINCQ0LrQviDQuNC30LLQvtGA0L3QuCDQuCDRhtC40ZnQvdC4INC90LDQt9C40LIg0YHQsNC00YDQttC1INC40YHRgtGDINCy0YDQtdC00L3QvtGB0YIsINGA0LXQt9GD0LvRgtGD0ZjRg9Gb0LAg0LLQtdC30LAg0ZjQtSDQvdC10YPRgdC80LXRgNC10L3QsC4g0JDQutC+INGB0YMg0LLRgNC10LTQvdC+0YHRgtC4INGA0LDQt9C70LjRh9C40YLQtSwg0YDQtdC30YPQu9GC0YPRmNGD0ZvQsCDQstC10LfQsCDRmNC1INGD0YHQvNC10YDQtdC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ9Co0LjRgNC40L3QsCBJVFNNINC/0YDQvtGB0YLQvtGA0LAg0YLQtdC60YHRgtCwLic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==</File>
        <File Location="Kernel/Language/sr_Latn_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnNyX0xhdG5fSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkg4oaUIEltcGFjdCDihpQgUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkg4oaUIEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogVGlja2V0SW5mb3JtYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXh0ZXJuYWwtc291cmNlIGtleSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgLyBTT1BNIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdmEgemEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdQb3ZlemFubyBuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBBa2NpamUgZ2RlIGplIGR1Z21lIHBvc3RhdmtpIGRvc3R1cG5vIHUgcG92ZXphbm9tIGdyYWZpxI1rb20gZWxlbWVudHUgb2JqZWt0YSAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBNb2xpbW8gZGEgaW1hdGUgbmEgdW11IGRhIG92ZSBBa2NpamUgbW9yYWp1IGRhIGJ1ZHUgcmVnaXN0cm92YW5lIHUgc2xlZGXEh2ltIEpTIGkgQ1NTIGRhdG90ZWthbWE6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGkgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnRGVmaW5pxaFlIGtvamUga29sb25lIHN1IHByaWthemFuZSB1IHBvdmV6YW5vbSBncmFmacSNa29tIGVsZW1lbnR1IFNlcnZpc2EgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTmFwb21lbmE6IFNhbW8gYXRyaWJ1dGkgc2VydmlzYSBzdSBkb3p2b2xqZW5pIHphIHBvZHJhenVtZXZhbmUga29sb25lLiBNb2d1xIdlIHBvc3RhdmtlOiAwID0gb25lbW9ndcSHZW5vLCAxID0gZG9zdHVwbm8sIDIgPSBwb2RyYXp1bWV2YW5vIGFrdGl2aXJhbm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ1phdmlzaSBvZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVnaXN0cmFjaWphIHByaXN0dXBub2cgbW9kdWxhIHphIGtvbmZpZ3VyYWNpanUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgdSBwcm9zdG9ydSBhZG1pbmlzdHJhdG9yYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhY2lqYSBwcmlzdHVwbm9nIG1vZHVsYSB6YSBrb25maWd1cmFjaWp1IEFnZW50SVRTTVNMQSBvYmpla3RhIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhY2lqYSBwcmlzdHVwbm9nIG1vZHVsYSB6YSBrb25maWd1cmFjaWp1IEFnZW50SVRTTVNMQVByaW50IG9iamVrdGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyYWNpamEgcHJpc3R1cG5vZyBtb2R1bGEgemEga29uZmlndXJhY2lqdSBBZ2VudElUU01TTEFab29tIG9iamVrdGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyYWNpamEgcHJpc3R1cG5vZyBtb2R1bGEgemEga29uZmlndXJhY2lqdSBBZ2VudElUU01TZXJ2aWNlIG9iamVrdGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhY2lqYSBwcmlzdHVwbm9nIG1vZHVsYSB6YSBrb25maWd1cmFjaWp1IEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmpla3RhIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhY2lqYSBwcmlzdHVwbm9nIG1vZHVsYSB6YSBrb25maWd1cmFjaWp1IEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVrdGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnSVRTTSBwcmVnbGVkIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJ0lUU00gcHJlZ2xlZCBzZXJ2aXNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnVGlwIHN0YW5qYSBpbmNpZGVudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdVa2xqdcSNdWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0ZWQgaW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRpb24gb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdVcmVkaXRpIG1hdHJpY3UgcHJpb3JpdGV0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJ1VyZcSRaXZhbmplIG1hdHJpY2Egem5hxI1haiAtIHV0aWNhaiAtIHByaW9yaXRldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ01vZHVsIHphIHByaWtheiB2ZXplIHphIHZyYcSHYW5qZSB1IFNMQSBtZW5panUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgemEgcHJpa2F6IHZlemUgemEgdnJhxIdhbmplIHUgc2Vydmlzbm9tIG1lbmlqdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bCB6YSBwcmlrYXogdmV6ZSB1IHNlcnZpc25vbSBtZW5panUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnTW9kdWwgemEgcHJpa2F6IHZlemUgemEgxaF0YW1wdSB1IFNMQSBtZW5panUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsIHphIHByaWtheiB2ZXplIHphIMWhdGFtcHUgdSBzZXJ2aXNub20gbWVuaWp1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcmFtZXRyaSB6YSBpbmNpZGVudG5lIHN0YXR1c2UgdSBwcmlrYXp1IHBvZGXFoWF2YW5qYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1Nhc3Rhdm5pIGRlbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1UgemF2aXNub3N0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdPYmF2ZXpubyB6YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdQcmVnbGVkIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnxaB0YW1wYSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJ0RldGFsamkgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnUHJlZ2xlZCBzZXJ2aXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnxaB0YW1wYSBzZXJ2aXNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnRGV0YWxqaSBzZXJ2aXNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdQcm9zdG9yIHNlcnZpc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ1BvZGXFoWF2YSB0aXAgaSBzbWVyIHZlemEga29qaSDEh2Ugc2Uga29yaXN0aXRpIHphIHV0dnLEkWl2YW5qZSBzdGFuamEgaW5jaWRlbnRhLiBLbGp1xI0gamUgbmF6aXYgdGlwYSB2ZXplIChrYW8gxaF0byBqZSBkZWZpbmlzYW5vIHUgTGlua09iamVjdDo6VHlwZSksIGEgdnJlZG5vc3QgamUgc21lciBJbmNpZGVudExpbmtUeXBlIGtvamkgdHJlYmEgaXNwcmF0aXRpIHphIG9kcmXEkWl2YW5qZSBzdGFuamEgaW5jaWRlbnRhLiBOYSBwcmltZXIsIGFrbyBqZSBJbmNpZGVudExpbmtUeXBlIHBvZGXFoWVuIG5hIERlcGVuZHNPbiBpIHNtZXIgamUgU291cmNlLCBzYW1vIHZlemEgIlphdmlzaSBvZCIgxIdlIGJpdGkgcHJhxIdlbmEgKGEgbmXEh2UgaSBzdXByb3RuYSB2ZXphICJOZW9waG9kbm8gemEiKSB1IG9kcmXEkWl2YW5qdSBzdGFuamEgaW5jaWRlbnRhLiBVa29saWtvIMW+ZWxpdGUgbW/FvmUgZG9kYXRpIGpvxaEgdGlwb3ZhIGkgc21lcm92YSB2ZXphLCBucHIuICJVa2xqdcSNdWplIiBzYSBzbWVyb20gIkNpbGoiLiBTdmkgdGlwb3ZpIHZlemEgZGVmaW5pc2FuaSB1IHNpc3RlbXNrb2oga29uZmlndXJhY2lqaSBMaW5rT2JqZWN0OjpUeXBlIHN1IG1vZ3XEh2kgaSBzbWVyIG1vxb5lIGJpdGkgIkl6dm9yIiwgIkNpbGoiIGlsaSAiT2JhIi4gVkHFvU5POiBOQUtPTiBJWk1FTkUgT1BDSUpBIFNJU1RFTVNLRSBLT05GSUdVUkFDSUpFIE1PUkFURSBQT0tSRU5VVEkgU0tSSVBUIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBEQSBCSSBTVkEgU1RBTkpBIElOQ0lERU5UQSBCSUxBIFBPTk9WTyBVVFZSxJBFTkEgTkEgT1NOT1ZVIE5PVklIIFBPREXFoEFWQU5KQSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJ0l6dm9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Z2dlc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIk5vcm1hbCIgb2JqZWthdCBJVFNNIHByb21lbmEgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSB0aWtldGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiTm9ybWFsIiBvYmpla2F0IElUU00ga29uZmlndXJhY2lvbmEgc3RhdmthIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2Egb2JqZWt0b20gRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSBQYXJlbnRDaGlsZCBvYmpla2F0IElUU00ga29uZmlndXJhY2lvbmEgc3RhdmthIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2Egb2JqZWt0b20gRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBsaSB2ZXpvbSB0aXBhICJSZWxldmFudFRvIiBvYmpla2F0IElUU00ga29uZmlndXJhY2lvbmEgc3RhdmthIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2Egb2JqZWt0b20gRkFRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiQWx0ZXJuYXRpdmVUbyIgb2JqZWthdCBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYSBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIG9iamVrdG9tIHNlcnZpc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIkRlcGVuZHNPbiIgb2JqZWthdCBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYSBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIG9iamVrdG9tIHNlcnZpc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBsaSB2ZXpvbSB0aXBhICJSZWxldmFudFRvIiBvYmpla2F0IElUU00ga29uZmlndXJhY2lvbmEgc3RhdmthIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2Egb2JqZWt0b20gc2VydmlzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiQWx0ZXJuYXRpdmVUbyIgb2JqZWthdCBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYSBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIG9iamVrdG9tIHRpa2V0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBsaSB2ZXpvbSB0aXBhICJEZXBlbmRzT24iIG9iamVrYXQgSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSB0aWtldGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIlJlbGV2YW50VG8iIG9iamVrYXQgSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSB0aWtldGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiQWx0ZXJuYXRpdmVUbyIgb2JqZWthdCBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYSBtb8W+ZSBkYSBzZSBwb3Zlxb5lIHNhIGRydWdpbSBvYmpla3RvbSBJVFNNIGtvbmZpZ3VyYWNpb25hIHN0YXZrYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiQ29ubmVjdGVkVG8iIG9iamVrYXQgSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBkcnVnaW0gb2JqZWt0b20gSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIG9kcmXEkXVqZSBkYSBsaSB2ZXpvbSB0aXBhICJEZXBlbmRzT24iIG9iamVrYXQgSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBkcnVnaW0gb2JqZWt0b20gSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIkluY2x1ZGVzIiBvYmpla2F0IElUU00ga29uZmlndXJhY2lvbmEgc3RhdmthIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2EgZHJ1Z2ltIG9iamVrdG9tIElUU00ga29uZmlndXJhY2lvbmEgc3RhdmthLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIlJlbGV2YW50VG8iIG9iamVrYXQgSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBkcnVnaW0gb2JqZWt0b20gSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIkRlcGVuZHNPbiIgb2JqZWthdCBJVFNNIHJhZG5pIG5hbG9nIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2Egb2JqZWt0b20gSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIk5vcm1hbCIgb2JqZWthdCBJVFNNIHJhZG5pIG5hbG9nIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2Egb2JqZWt0b20gSVRTTSBrb25maWd1cmFjaW9uYSBzdGF2a2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgbGkgdmV6b20gdGlwYSAiRGVwZW5kc09uIiBvYmpla2F0IElUU00gcmFkbmkgbmFsb2cgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSBzZXJ2aXNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIk5vcm1hbCIgb2JqZWthdCBJVFNNIHJhZG5pIG5hbG9nIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2Egb2JqZWt0b20gc2VydmlzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIGxpIHZlem9tIHRpcGEgIk5vcm1hbCIgb2JqZWthdCBJVFNNIHJhZG5pIG5hbG9nIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2Egb2JqZWt0b20gdGlrZXRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgb2JqZWthdCBzZXJ2aXMgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSBGQVEgdmV6b20gdGlwYSAiTm9ybWFsIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBvZHJlxJF1amUgZGEgb2JqZWthdCBzZXJ2aXMgbW/FvmUgZGEgc2UgcG92ZcW+ZSBzYSBvYmpla3RvbSBGQVEgdmV6b20gdGlwYSAiUGFyZW50Q2hpbGQiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgb2RyZcSRdWplIGRhIG9iamVrYXQgc2VydmlzIG1vxb5lIGRhIHNlIHBvdmXFvmUgc2Egb2JqZWt0b20gRkFRIHZlem9tIHRpcGEgIlJlbGV2YW50VG8iLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIGRlZmluacWhZSB2ZXp1IHRpcGEgIkFsdGVybmF0aXZlVG8iLiBBa28gaXp2b3JuaSBpIGNpbGpuaSBuYXppdiBzYWRyxb5lIGlzdHUgdnJlZG5vc3QsIHJlenVsdHVqdcSHYSB2ZXphIGplIG5ldXNtZXJlbmEuIEFrbyBzdSB2cmVkbm9zdGkgcmF6bGnEjWl0ZSwgcmV6dWx0dWp1xIdhIHZlemEgamUgdXNtZXJlbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdPdm8gcG9kZcWhYXZhbmplIGRlZmluacWhZSB2ZXp1IHRpcGEgIkNvbm5lY3RlZFRvIi4gQWtvIGl6dm9ybmkgaSBjaWxqbmkgbmF6aXYgc2FkcsW+ZSBpc3R1IHZyZWRub3N0LCByZXp1bHR1anXEh2EgdmV6YSBqZSBuZXVzbWVyZW5hLiBBa28gc3UgdnJlZG5vc3RpIHJhemxpxI1pdGUsIHJlenVsdHVqdcSHYSB2ZXphIGplIHVzbWVyZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgZGVmaW5pxaFlIHZlenUgdGlwYSAiRGVwZW5kc09uIi4gQWtvIGl6dm9ybmkgaSBjaWxqbmkgbmF6aXYgc2FkcsW+ZSBpc3R1IHZyZWRub3N0LCByZXp1bHR1anXEh2EgdmV6YSBqZSBuZXVzbWVyZW5hLiBBa28gc3UgdnJlZG5vc3RpIHJhemxpxI1pdGUsIHJlenVsdHVqdcSHYSB2ZXphIGplIHVzbWVyZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnT3ZvIHBvZGXFoWF2YW5qZSBkZWZpbmnFoWUgdmV6dSB0aXBhICJJbmNsdWRlcyIuIEFrbyBpenZvcm5pIGkgY2lsam5pIG5heml2IHNhZHLFvmUgaXN0dSB2cmVkbm9zdCwgcmV6dWx0dWp1xIdhIHZlemEgamUgbmV1c21lcmVuYS4gQWtvIHN1IHZyZWRub3N0aSByYXpsacSNaXRlLCByZXp1bHR1anXEh2EgdmV6YSBqZSB1c21lcmVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgZGVmaW5pxaFlIHZlenUgdGlwYSAiUmVsZXZhbnRUbyIuIEFrbyBpenZvcm5pIGkgY2lsam5pIG5heml2IHNhZHLFvmUgaXN0dSB2cmVkbm9zdCwgcmV6dWx0dWp1xIdhIHZlemEgamUgbmV1c21lcmVuYS4gQWtvIHN1IHZyZWRub3N0aSByYXpsacSNaXRlLCByZXp1bHR1anXEh2EgdmV6YSBqZSB1c21lcmVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnxaBpcmluYSBJVFNNIHByb3N0b3JhIHRla3N0YS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/sv_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnN2X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0tyaXRpa2FsaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1NlbmFzdCDDpG5kcmFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogVGlja2V0SW5mb3JtYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ1DDpXZlcmthbic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdOdXZhcmFuZGUgaW5jaWRlbnRsw6RnZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xpbmtPYmplY3QvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdJbmNpZGVudGzDpGdlJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvU2VydmljZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXh0ZXJuYWwtc291cmNlIGtleSd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgLyBTT1BNIERlZmluaXRpb246IElUU01Db3JlLnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdGlvbmFsJ30gPSAnT3BlcmF0aW9uZWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50J30gPSAnSW5jaWRlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1Rqw6Ruc3QgZsO2ciBzbHV0a3VuZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVQtaGFudGVyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JhcHBvcnRlcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbm5hbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdUaWxsZ8OkbmdsaWdoZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1N2YXJzdGlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdUaWQgZsO2ciDDpXRlcmjDpG10bmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnw5Z2ZXJmw7ZyaW5nYXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRmVsJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICdBbHRlcm5hdGl2IHRpbGwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdBbnNsdXRlbiB0aWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYmVoYXZpb3Igb2YgcHJpb3JpdHkgYWxsb2NhdGlvbiBpbiB0aGUgZnJvbnRlbmRzIGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIENhbiBiZSBvdmVycnVsZWQgYnkgZnJvbnRlbmQgc3BlY2lmaWMgUHJpb3JpdHlCeUNJUCBzZXR0aW5ncy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnQmVyb3IgcMOlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTTEEgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0lua2x1ZGVyYXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnRGVsIGF2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnQgdGlsbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdLcsOkdnMgZsO2cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEEtw7Z2ZXJibGljayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnVGrDpG5zdGVvbXLDpWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnTG9jYXRpb25PZlwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==</File>
        <File Location="Kernel/Language/sw_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnN3X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnVW11aGltdSDihpQgTWFkaGFyYSDihpQgS2lwYXVtYmVsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnU2ltYW1pYSBtYXRva2VvIHlhIGtpcGF1bWJlbGUgeWEga3V1bmdhbmlzaGEgVW11aGltdSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0t1d2VrYSBraXBhdW1iZWxlJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnS2ltYSBjaGEgY2hpbmkgY2hhIG11ZGEga2F0aSB5YSBtYXR1a2lvJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnVW11aGltdSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnVGFhcmlmYSB6YSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnTXdpc2hvIGt1YmFkaWxpc2h3YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdNd3NobyBrdWJhZGlsaXNod2EgbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ0h1ZHVtYSB6aW5hem9odXNpa2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnVGFhcmlmYSB6YSBodWR1bWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0hhbGkgeWEgdHVraW8gbGEgc2FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEEgemluYXpvaHVzaWthJzsKCiAgICAjIFRlbXBsYXRlOiBUaWNrZXRJbmZvcm1hdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIENyaXRpY2FsaXR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnTWFkaGFyYSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhbGVuZGFyIERlZmF1bHQnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29wZXJhdGlvbmFsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dhcm5pbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW5jaWRlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93bid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU2VydmljZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2VJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdIYWxpIHlhIHR1a2lvIGxhIHNhc2EnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnSGFsaSB5YSB0dWtpbyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ1VlbmRlc2hhamknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQnfSA9ICdUdWtpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnSHVkdW1hIHlhIG10dW1pYWppIHdhIG13aWhzbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdNYXppbmdpcmEgeWEgbWJlbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdNYXppbmdpcmEgeWEgbnl1bWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ1VzaW1hbWl6aSB3YSBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdVYXJpZnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdVZW5kZXNoYWppIHdhIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdNYW9ueWVzaG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ01yYWRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ01rYXRhYmEgd2Ega3VpbWFyaXNoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0VuZ2luZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdVcGF0aWthbmFqaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnTXVkYSB3YSBtYWppYnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ011ZGEgd2Ega3Vwb25hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ0tpd2FuZ28gY2hhIG11b25la2Fubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdNaWFtYWxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ01ha29zYSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQmFkYWxhIHlhICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0ltZXVuZ2FuaXNod2EgbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdG9iby9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdJbmF0ZWdlbWVhbmEgbmEgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB6YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIHVzYW5pZGkgd2EgQWRtaW5JVFNNQ0lQQWxsb2NhdGUga2F0aWthIGVuZW8gbGEga2lvbmdvemkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB5YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIGtpcGVuZ2VlIGNoYSBJVFNNU0xBIGNoYSB3YWthbGEgIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVXNhamlsaSB3YSBtb2R1bGkgeWEgbWF6aW5naXJhIHlhIG1iZWxlIGt3YSBraXBlbmdlZSBjaGEgIHVjaGFwaXNod2FqaSBjaGEgSVRTTVNMQSBjaGEgd2FrYWxhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHlhIG1hemluZ2lyYSB5YSBtYmVsZSBrd2Ega2lwZW5nZWUgY2hhIGt1a3V6d2EgY2hhIElUU01TTEEgY2hhIHdha2FsYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB5YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIGtpcGVuZ2VlIGNoYSBodWR1bWEgY2hhIElUU01TTEEgY2hhIHdha2FsYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB5YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIGtpcGVuZ2VlIGNoYSBrdWNoYXBpc2h3YSBrd2EgaHVkdW1hIGNoYSBJVFNNU0xBIGNoYSB3YWthbGEga2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB5YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIGtpcGVuZ2VlIGNoYSBrdWt1endhIGt3YSBodWR1bWEgY2hhIElUU01TTEEgY2hhIHdha2FsYSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmFodXNpc2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0ZWQgaW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRpb24gb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdTaW1hbWlhIG1hdHJpa2kgeWEga2lwYXVtYmVsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBjcml0aWNhbGl0eSAtIGltcGFjdCAtIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ01vZHVsaSB5YSBrdW9ueWVzaGEga2l1bmdvIGNoYSBrdXJ1ZGkgbnl1bWEga2F0aWthIG1lbnl1IHlhIHNsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNb2R1bGkgeWEga3Vvbnllc2hhIGtpdW5nbyBjaGEga3VydWRpIG55dW1hIGthdGlrYSBtZW55dSB5YSBodWR1bWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWxpIHlhIGt1b255ZXNoYSBraXVuZ28gY2hhIGtpdW5nbyBrYXRpa2EgbWVueXUgeWEgaHVkdW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ01vZHVsaSB5YSBrdW9ueWVzaGEga2l1bmdvIGNoYSBrdWNoYXBpc2hhIGthdGlrYSBtZW55dSB5YSBzbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ01vZHVsaSB5YSBrdW9ueWVzaGEga2l1bmdvIGNoYSBrdWNoYXBpc2hhIGthdGlrYSBtZW55dSB5YSBodWR1bWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnVmlnZXpvIHlhIGhhbGkgeWEgbWF0dWtpbyBrYXRpa2EgbWFuZGhhcmkgeWEgbWFwZW5kZWxlby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1NlaGVtdSB5YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ0h1c2lhbmEgbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnSW5haGl0YWppa2Ega3dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ01hcmVqZW8geWEgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdNYXJlamVvIHlhIGh1ZHVtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ0VuZW8gbGEgaHVkdW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBhbmQgZGlyZWN0aW9uIG9mIGxpbmtzIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbGluayB0eXBlIChhcyBkZWZpbmVkIGluIExpbmtPYmplY3Q6OlR5cGUpLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIEluY2lkZW50TGlua1R5cGUgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gRm9yIGV4YW1wbGUgaWYgdGhlIEluY2lkZW50TGlua1R5cGUgaXMgc2V0IHRvIFwnRGVwZW5kc09uXCcsIGFuZCB0aGUgRGlyZWN0aW9uIGlzIFwnU291cmNlXCcsIG9ubHkgXCdEZXBlbmRzIG9uXCcgbGlua3Mgd2lsbCBiZSBmb2xsb3dlZCAoYW5kIG5vdCB0aGUgb3Bwb3NpdGUgbGluayBcJ1JlcXVpcmVkIGZvclwnKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiBcJ0luY2x1ZGVzXCcgd2l0aCB0aGUgZGlyZWN0aW9uIFwnVGFyZ2V0XCcuIEFsbCBsaW5rIHR5cGVzIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb25zIExpbmtPYmplY3Q6OlR5cGUgYXJlIHBvc3NpYmxlIGFuZCB0aGUgZGlyZWN0aW9uIGNhbiBiZSBcJ1NvdXJjZVwnLCBcJ1RhcmdldFwnLCBvciBcJ0JvdGhcJy4gSU1QT1JUQU5UOiBBRlRFUiBZT1UgTUFLRSBDSEFOR0VTIFRPIFRISVMgU1lTQ09ORklHIE9QVElPTiBZT1UgTkVFRCBUTyBSVU4gVEhFIENPTlNPTEUgQ09NTUFORCBiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGUgU08gVEhBVCBBTEwgSU5DSURFTlQgU1RBVEVTIFdJTEwgQkUgUkVDQUxDVUxBVEVEIEJBU0VEIE9OIFRIRSBORVcgU0VUVElOR1MhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0JhZGlsaWtvIGxhIElUU01cJyBraW53ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdUaWtldGlcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0thd2FpZGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdNYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdLYXdhaWRhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdNYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdQYXJlbnRDaGlsZFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdNYXN3YWxpIHlhbmF5b3VsaXp3YSBtYXJhIGt3YSBtYXJhXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdJbmFodXNpYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdIdWR1bWFcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0JhZGFsYSB5YVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBjaGEgXCdIdWR1bWFcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0luYXRlZ2VtZWFuYSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnSHVkdW1hXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdIdXNpYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGNoYSBcJ1Rpa2V0aVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnQmFkYWxhIHlhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnVGlrZXRpXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdJbmF0ZWdlbWVhbmEgbmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnVGlrZXRpXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdIdXNpYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnICBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0JhZGFsYSB5YVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSW5hdW5nYW5pc2h3YSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnICBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0luYXRlZ2VtZWFuYSBuYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ0tpcGVuZ2VsZSBjaGEgdXNhbmlkaSBjaGEgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSHVzaXNoYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGtpbmdpbmUgY2hhXCdLaXBlbmdlbGUgY2hhIHVzYW5pZGkgY2hhIElUU01cJyAga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdIdXNpYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnTXBhbmdpbGlvIHdhIGthemkgd2EgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnSW5hdGVnZW1lYW5hIG5hXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnTXBhbmdpbGlvIHdhIGthemkgd2EgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnS2lwZW5nZWxlIGNoYSB1c2FuaWRpIGNoYSBJVFNNXCcgIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnS2F3YWlkYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnTXBhbmdpbGlvIHdhIGthemkgd2EgSVRTTVwnIGtpbmF3ZXphIGt1dW5nYW5pc2h3YSBuYSBraXBlbmdlZSBraW5naW5lIGNoYVwnSHVkdW1hXCcga3dhIGt1dHVtaWEgYWluYSB5YSBraXVuZ28gXCdJbmF0ZWdlbWVhbmEgbmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdNcGFuZ2lsaW8gaHV1IHVuYWZhZmFudWEga3dhbWJhIGtpcGVuZ2VlIGNoYSBcJ01wYW5naWxpbyB3YSBrYXppIHdhIElUU01cJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUga2luZ2luZSBjaGFcJ0h1ZHVtYVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnS2F3YWlkYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdNcGFuZ2lsaW8gd2Ega2F6aSB3YSBJVFNNXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGtpbmdpbmUgY2hhXCdUaWtldGlcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0thd2FpZGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ01wYW5naWxpbyBodXUgdW5hZmFmYW51YSBrd2FtYmEga2lwZW5nZWUgY2hhIFwnSHVkdW1hXCcga2luYXdlemEga3V1bmdhbmlzaHdhIG5hIGtpcGVuZ2VlIGNoYSBcJ01hc3dhbGkgeWFuYXlvdWxpendhIG1hcmEga3dhIG1hcmFcJyBrd2Ega3V0dW1pYSBhaW5hIHlhIGtpdW5nbyBcJ0thd2FpZGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnTXBhbmdpbGlvIGh1dSB1bmFmYWZhbnVhIGt3YW1iYSBraXBlbmdlZSBjaGEgXCdIdWR1bWFcJyBraW5hd2V6YSBrdXVuZ2FuaXNod2EgbmEga2lwZW5nZWUgY2hhIFwnTWFzd2FsaSB5YW5heW91bGl6d2EgbWFyYSBrd2EgbWFyYVwnIGt3YSBrdXR1bWlhIGFpbmEgeWEga2l1bmdvIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdIdXNpYW5hIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ01pcGFuZ2lsaW8gaGlpIGluYWZhZmFudWEgYWluYSB5YSBraXVuZ28gXCdCYWRhbGEgeWFcJy4gS2FtYSBqaW5hIGxhIGNoYW56byBuYSBqaW5hIGxlbmd3YSB5YW5hIHRoYW1hbmkgbW9qYSwga2l1bmdvIGtpbmFjaG90b2thbmEgbmkgaGFraW5hIHVlbGVrZW8uIEthbWEgdGhhbWFuaSBuaSB0b2ZhdXRpLCBraXVuZ28ga2lsaWNob3Rva2VhIGtpbmEgdWVsZWtlby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ01pcGFuZ2lsaW8gaGlpIGluYWZhZmFudWEgYWluYSB5YSBraXVuZ28gXCdJbWV1bmdhbmlzaHdhIG5hXCcuIEthbWEgamluYSBsYSBjaGFuem8gbmEgamluYSBsZW5nd2EgeWFuYSB0aGFtYW5pIG1vamEsIGtpdW5nbyBraW5hY2hvdG9rYW5hIG5pIGhha2luYSB1ZWxla2VvLiBLYW1hIHRoYW1hbmkgbmkgdG9mYXV0aSwga2l1bmdvIGtpbGljaG90b2tlYSBraW5hIHVlbGVrZW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnTWlwYW5naWxpbyBoaWkgaW5hZmFmYW51YSBhaW5hIHlhIGtpdW5nbyBcJ0luYXRlZ2VtZWFuYSBuYVwnLiBLYW1hIGppbmEgbGEgY2hhbnpvIG5hIGppbmEgbGVuZ3dhIHlhbmEgdGhhbWFuaSBtb2phLCBraXVuZ28ga2luYWNob3Rva2FuYSBuaSBoYWtpbmEgdWVsZWtlby4gS2FtYSB0aGFtYW5pIG5pIHRvZmF1dGksIGtpdW5nbyBraWxpY2hvdG9rZWEga2luYSB1ZWxla2VvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnTWlwYW5naWxpbyBoaWkgaW5hZmFmYW51YSBhaW5hIHlhIGtpdW5nbyBcJ0luYWh1c2lzaGFcJy4gS2FtYSBqaW5hIGxhIGNoYW56byBuYSBqaW5hIGxlbmd3YSB5YW5hIHRoYW1hbmkgbW9qYSwga2l1bmdvIGtpbGljaG90b2tlYSBuaSBoYWtpbmEgdWVsZWtlby4gS2FtYSB0aGFtYW5pIG5pIHRvZmF1dGksIGtpdW5nbyBraWxpY2hvdG9rZWEga2luYSB1ZWxla2VvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnTG9jYXRpb25PZlwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnTWlwYW5naWxpbyBoaWkgaW5hZmFmYW51YSBhaW5hIHlhIGtpdW5nbyBcJ0h1c2lhbmEgbmFcJy4gS2FtYSBqaW5hIGxhIGNoYW56byBuYSBqaW5hIGxlbmd3YSB5YW5hIHRoYW1hbmkgbW9qYSwga2l1bmdvIGtpbGljaG90b2tlYSBuaSBoYWtpbmEgdWVsZWtlby4gS2FtYSB0aGFtYW5pIG5pIHRvZmF1dGksIGtpdW5nbyBraWxpY2hvdG9rZWEga2luYSB1ZWxla2VvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdVcGFuYSB3YSBlbmVvIGxhIG1hdGluaSBsYSBJVFNNICc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==</File>
        <File Location="Kernel/Language/th_TH_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnRoX1RIX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAn4Lin4Li04LiB4Lik4LiV4oaUIOC4nOC4peC4geC4o+C4sOC4l+C4miDihpQg4LmA4Lij4Li14Lii4LiH4Lil4Liz4LiU4Lix4Lia4LiE4Lin4Liy4Lih4Liq4Liz4LiE4Lix4LiNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICfguIHguLLguKPguIjguLHguJTguIHguLLguKPguIjguLHguJTguKXguLPguJTguLHguJrguITguKfguLLguKHguKrguLPguITguLHguI3guILguK3guIfguJzguKXguIHguLLguKPguJzguKrguKHguJzguKrguLLguJnguKfguLTguIHguKTguJXihpQg4Lic4Lil4LiB4Lij4Liw4LiX4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICfguIHguLLguKPguIjguLHguJTguKrguKPguKPguKXguLPguJTguLHguJrguITguKfguLLguKHguKrguLPguITguLHguI0nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICfguYDguKfguKXguLLguILguLHguYnguJnguJXguYjguLPguKPguLDguKvguKfguYjguLLguIfguYDguKvguJXguLjguIHguLLguKPguJPguYzguJfguLXguYjguYDguIHguLTguJTguILguLbguYnguJknOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICfguKfguLTguIHguKTguJUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ+C4guC5ieC4reC4oeC4ueC4pSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4Lil4LmI4Liy4Liq4Li44LiUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4peC5iOC4suC4quC4uOC4lOC5guC4lOC4oic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn4LiB4Liy4Lij4Lia4Lij4Li04LiB4Liy4Lij4LiX4Li14LmI4LmA4LiB4Li14LmI4Lii4Lin4LiC4LmJ4Lit4LiHJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ+C4guC5ieC4reC4oeC4ueC4peC4geC4suC4o+C4muC4o+C4tOC4geC4suC4oyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiC4Lit4LiH4LmA4Lir4LiV4LmM4LiB4Liy4Lij4LiT4LmM4Lib4Lix4LiI4LiI4Li44Lia4Lix4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQXPguJfguLXguYjguYDguIHguLXguYjguKLguKfguILguYnguK3guIcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICfguJzguKXguIHguKPguLDguJfguJonOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiC4Lit4LiH4LmA4Lir4LiV4LmM4LiB4Liy4Lij4LiT4LmM4Lib4Lix4LiI4LiI4Li44Lia4Lix4LiZJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+C4quC4luC4suC4meC4oOC4suC4nuC4guC4reC4h+C5gOC4q+C4leC5jOC4geC4suC4o+C4k+C5jCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ+C4geC4suC4o+C4lOC4s+C5gOC4meC4tOC4meC4h+C4suC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ+C5gOC4q+C4leC4uOC4geC4suC4o+C4k+C5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAn4Lic4Li54LmJ4LmD4LiK4LmJ4Lia4Lij4Li04LiB4Liy4Lij4LiC4Lix4LmJ4LiZ4Liq4Li44LiU4LiX4LmJ4Liy4LiiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250IEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2sgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICfguIHguLLguKPguIjguLHguJTguIHguLLguKPguYTguK3guJfguLUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn4LiB4Liz4Lil4Lix4LiH4Lij4Liy4Lii4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAn4LiB4Liy4Lij4LiU4Liz4LmA4LiZ4Li04LiZ4LiH4Liy4LiZ4LmE4Lit4LiX4Li1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICfguIHguLLguKPguK3guJjguLTguJrguLLguKInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ+C5guC4m+C4o+C5gOC4iOC4hCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICfguKrguLHguI3guI3guLLguIHguLLguKPguKvguJnguLjguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfguK3guLfguYjguJnguYYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAn4LiE4Lin4Liy4Lih4Lie4Lij4LmJ4Lit4Lih4LmD4LiK4LmJ4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICfguKPguLDguKLguLDguYDguKfguKXguLLguIHguLLguKPguJXguK3guJrguKrguJnguK3guIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ+C5gOC4p+C4peC4suC4geC4suC4o+C4geC4ueC5ieC4hOC4t+C4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfguK3guLHguJXguKPguLLguIHguLLguKPguYHguIHguYnguJvguLHguI3guKvguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAn4LiB4Liy4Lij4LiX4Liz4Lij4Liy4Lii4LiB4Liy4LijJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ+C4guC5ieC4reC4nOC4tOC4lOC4nuC4peC4suC4lCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn4LmA4Lil4Li34Lit4LiB4LiX4Li14LmIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NJUEFsbG9jYXRpb246IE92ZXJ3cml0ZSBwcmlvcml0eSBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBEZWZhdWx0IGZhbGxiYWNrOiBGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAn4LmA4LiK4Li34LmI4Lit4Lih4LmC4Lii4LiH4LmE4Lib4Lii4Lix4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYmVoYXZpb3Igb2YgcHJpb3JpdHkgYWxsb2NhdGlvbiBpbiB0aGUgZnJvbnRlbmRzIGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIENhbiBiZSBvdmVycnVsZWQgYnkgZnJvbnRlbmQgc3BlY2lmaWMgUHJpb3JpdHlCeUNJUCBzZXR0aW5ncy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFNlcnZpY2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFNlcnZpY2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn4LiC4Li24LmJ4LiZ4Lit4Lii4Li54LmIICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn4LiB4Liy4Lij4Lil4LiH4LiX4Liw4LmA4Lia4Li14Lii4LiZ4LmC4Lih4LiU4Li54LilIEZyb250ZW5kIOC4quC4s+C4q+C4o+C4seC4muC4geC4suC4o+C4geC4s+C4q+C4meC4lOC4hOC5iOC4suC4guC4reC4hyBBZG1pbklUU01DSVBBbGxvY2F0ZSDguYPguJnguJ7guLfguYnguJnguJfguLXguYjguILguK3guIfguYHguK3guJTguKHguLTguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4peC4h+C4l+C4sOC5gOC4muC4teC4ouC4meC5guC4oeC4lOC4ueC4pSBGcm9udGVuZCDguKrguLPguKvguKPguLHguJrguK3guK3guJrguYDguIjguIHguJXguYzguILguK3guIdBZ2VudElUU01TTEEgIOC5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C4guC4reC4h+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguIHguLLguKPguKXguIfguJfguLDguYDguJrguLXguKLguJnguYLguKHguJTguLnguKUgRnJvbnRlbmQg4Liq4Liz4Lir4Lij4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiV4LmM4LiC4Lit4LiHQWdlbnRJVFNNU0xBUHJpbnQg4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiC4Lit4LiH4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4Lil4LiH4LiX4Liw4LmA4Lia4Li14Lii4LiZ4LmC4Lih4LiU4Li54LilIEZyb250ZW5kIOC4quC4s+C4q+C4o+C4seC4muC4reC4reC4muC5gOC4iOC4geC4leC5jOC4guC4reC4h0FnZW50SVRTTVNMQVpvb20gIOC5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C4guC4reC4h+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4peC4h+C4l+C4sOC5gOC4muC4teC4ouC4meC5guC4oeC4lOC4ueC4pSBGcm9udGVuZCDguKrguLPguKvguKPguLHguJrguK3guK3guJrguYDguIjguIHguJXguYzguILguK3guIdBZ2VudElUU01TZXJ2aWNlIOC5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C4guC4reC4h+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4Lil4LiH4LiX4Liw4LmA4Lia4Li14Lii4LiZ4LmC4Lih4LiU4Li54LilIEZyb250ZW5kIOC4quC4s+C4q+C4o+C4seC4muC4reC4reC4muC5gOC4iOC4geC4leC5jOC4guC4reC4h0FnZW50SVRTTVNlcnZpY2VQcmludCDguYPguJnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguILguK3guIfguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4Lil4LiH4LiX4Liw4LmA4Lia4Li14Lii4LiZ4LmC4Lih4LiU4Li54LilIEZyb250ZW5kIOC4quC4s+C4q+C4o+C4seC4muC4reC4reC4muC5gOC4iOC4geC4leC5jOC4guC4reC4h0FnZW50SVRTTVNlcnZpY2Vab29tIOC5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C4guC4reC4h+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAn4Lij4Lin4Lih4LiW4Li24LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0ZWQgaW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRpb24gb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICfguIHguLLguKPguIjguLHguJTguIHguLLguKPguKXguLPguJTguLHguJrguITguKfguLLguKHguKrguLPguITguLHguI3guILguK3guIfguYDguKHguJfguKPguLTguIHguIvguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBjcml0aWNhbGl0eSAtIGltcGFjdCAtIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ+C5guC4oeC4lOC4ueC4peC4l+C4teC5iOC4iOC4sOC5geC4quC4lOC4h+C4peC4tOC4h+C4hOC5jOC4geC4suC4o+C4geC4peC4seC4muC5g+C4meC5gOC4oeC4meC4uSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICfguYLguKHguJTguLnguKXguJfguLXguYjguIjguLDguYHguKrguJTguIfguKXguLTguIfguITguYzguIHguLLguKPguIHguKXguLHguJrguYPguJnguYDguKHguJnguLnguIHguLLguKPguJrguKPguLTguIHguLLguKMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIExpbmsgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICfguYLguKHguJTguLnguKXguJfguLXguYjguIjguLDguYHguKrguJTguIfguKXguLTguIfguITguYzguJfguLXguYjguYDguIrguLfguYjguK3guKHguJXguYjguK3guYPguJnguYDguKHguJnguLnguIHguLLguKPguJrguKPguLTguIHguLLguKMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBTTEEgbWVudS4nfSA9ICfguYLguKHguJTguLnguKXguJfguLXguYjguIjguLDguYHguKrguJTguIfguKXguLTguIfguITguYzguIHguLLguKPguJ7guLTguKHguJ7guYzguYPguJnguYDguKHguJnguLlTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIFByaW50IG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAn4LmC4Lih4LiU4Li54Lil4LiX4Li14LmI4LiI4Liw4LmB4Liq4LiU4LiH4Lil4Li04LiH4LiE4LmM4LiB4Liy4Lij4Lie4Li04Lih4Lie4LmM4LmD4LiZ4LmA4Lih4LiZ4Li54LiB4Liy4Lij4Lia4Lij4Li04LiB4Liy4LijJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09mZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAn4Lie4Liy4Lij4Liy4Lih4Li04LmA4LiV4Lit4Lij4LmM4Liq4Liz4Lir4Lij4Lix4Lia4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiC4Lit4LiH4LmA4Lir4LiV4LiB4Liy4Lij4LiT4LmM4LmD4LiZ4Lih4Li44Lih4Lih4Lit4LiH4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICfguKrguYjguKfguJnguKvguJnguLbguYjguIfguILguK3guIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICfguYDguIHguLXguYjguKLguKfguILguYnguK3guIfguIHguLHguJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAn4LiI4Liz4LmA4Lib4LmH4LiZ4Liq4Liz4Lir4Lij4Lix4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ+C4oOC4suC4nuC4o+C4p+C4oeC4guC4reC4h1NMQSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ+C4oOC4suC4nuC4o+C4p+C4oeC4guC4reC4h+C4geC4suC4o+C4muC4o+C4tOC4geC4suC4oyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ+C4nuC4t+C5ieC4meC4l+C4teC5iOC4geC4suC4o+C5g+C4q+C5ieC4muC4o+C4tOC4geC4suC4oyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMXCdJVFNNQ2hhbmdlXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwn4LiV4Lix4LmL4LinXCcg4Lit4Li34LmI4LiZIOC5guC4lOC4ouC4geC4suC4o+C5g+C4iuC5ieC4peC4tOC4h+C4hOC5jCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCdGQVFcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCdGQVFcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdQYXJlbnRDaGlsZFwnICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNQ29uZmlnSXRlbVwnIOC4quC4suC4oeC4suC4o+C4luC4peC4tOC4h+C4hOC5jOC4geC4seC4muC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0ZBUVwnIOC5guC4lOC4ouC4geC4suC4o+C5g+C4iuC5ieC4peC4tOC4h+C4hOC5jCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdBbHRlcm5hdGl2ZVRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyAg4LmC4LiU4Lii4LiB4Liy4Lij4LmD4LiK4LmJ4Lil4Li04LiH4LiE4LmMIFwnUmVsZXZhbnRUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4meC4teC5ieC4geC4s+C4q+C4meC4lOC4p+C5iOC4suC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0lUU01Db25maWdJdGVtXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwn4LiV4Lix4LmL4LinXCcg4LmC4LiU4Lii4LiB4Liy4Lij4LmD4LiK4LmJ4Lil4Li04LiH4LiE4LmMIFwnQWx0ZXJuYXRpdmVUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCfguJXguLHguYvguKdcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNQ29uZmlnSXRlbVwnIOC4quC4suC4oeC4suC4o+C4luC4peC4tOC4h+C4hOC5jOC4geC4seC4muC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ+C4leC4seC5i+C4p1wnIOC5guC4lOC4ouC4geC4suC4o+C5g+C4iuC5ieC4peC4tOC4h+C4hOC5jCBcJ1JlbGV2YW50VG9cJyAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNQ29uZmlnSXRlbVwnIOC4quC4suC4oeC4suC4o+C4luC4peC4tOC4h+C4hOC5jOC4geC4seC4muC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0lUU01Db25maWdJdGVtXCcg4Lit4Li34LmI4LiZ4LmG4LmC4LiU4Lii4LiB4Liy4Lij4LmD4LiK4LmJ4Lil4Li04LiH4LiE4LmMIFwnQWx0ZXJuYXRpdmVUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4meC4teC5ieC4geC4s+C4q+C4meC4lOC4p+C5iOC4suC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0lUU01Db25maWdJdGVtXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguK3guLfguYjguJnguYbguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdDb25uZWN0ZWRUb1wnICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNQ29uZmlnSXRlbVwnIOC4reC4t+C5iOC4meC5huC5guC4lOC4ouC4geC4suC4o+C5g+C4iuC5ieC4peC4tOC4h+C4hOC5jCBcJ0RlcGVuZHNPblwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4meC4teC5ieC4geC4s+C4q+C4meC4lOC4p+C5iOC4suC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0lUU01Db25maWdJdGVtXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguK3guLfguYjguJnguYbguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdJbmNsdWRlc1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdMb2NhdGlvbk9mXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNQ29uZmlnSXRlbVwnIOC4reC4t+C5iOC4meC5huC5guC4lOC4ouC4geC4suC4o+C5g+C4iuC5ieC4peC4tOC4h+C4hOC5jCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNV29ya09yZGVyXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCdJVFNNV29ya09yZGVyXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTUNvbmZpZ0l0ZW1cJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4meC4teC5ieC4geC4s+C4q+C4meC4lOC4p+C5iOC4suC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0lUU01Xb3JrT3JkZXJcJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4meC4teC5ieC4geC4s+C4q+C4meC4lOC4p+C5iOC4suC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ0lUU01Xb3JrT3JkZXJcJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnSVRTTVdvcmtPcmRlclwnIOC4quC4suC4oeC4suC4o+C4luC4peC4tOC4h+C4hOC5jOC4geC4seC4muC4reC4reC4muC5gOC4iOC4geC4hOC5jCBcJ+C4leC4seC5i+C4p1wnIOC5guC4lOC4ouC4geC4suC4o+C5g+C4iuC5ieC4peC4tOC4h+C4hOC5jCBcJ05vcm1hbFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCdGQVFcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguKfguYjguLLguK3guK3guJrguYDguIjguIHguITguYwgXCfguIHguLLguKPguJrguKPguLTguIHguLLguKNcJyDguKrguLLguKHguLLguKPguJbguKXguLTguIfguITguYzguIHguLHguJrguK3guK3guJrguYDguIjguIHguITguYwgXCdGQVFcJyDguYLguJTguKLguIHguLLguKPguYPguIrguYnguKXguLTguIfguITguYwgXCdQYXJlbnRDaGlsZFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lin4LmI4Liy4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwn4LiB4Liy4Lij4Lia4Lij4Li04LiB4Liy4LijXCcg4Liq4Liy4Lih4Liy4Lij4LiW4Lil4Li04LiH4LiE4LmM4LiB4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiB4LiE4LmMIFwnRkFRXCcg4LmC4LiU4Lii4LiB4Liy4Lij4LmD4LiK4LmJ4Lil4Li04LiH4LiE4LmMXCdSZWxldmFudFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lib4Lij4Liw4LmA4Lig4LiX4Lil4Li04LiH4LiE4LmMIFwnQWx0ZXJuYXRpdmVUb1wnIOC4luC5ieC4suC4iuC4t+C5iOC4reC5geC4q+C4peC5iOC4h+C4l+C4teC5iOC4oeC4suC5geC4peC4sOC4iuC4t+C5iOC4reC5gOC4m+C5ieC4suC4q+C4oeC4suC4ouC4oeC4teC4hOC5iOC4suC5gOC4lOC4teC4ouC4p+C4geC4seC4mQrguKXguLTguIfguITguYzguJfguLXguYjguKrguYjguIfguJzguKXguYPguKvguYnguITguLfguK3guYTguKHguYjguKHguLXguJfguLTguKjguJfguLLguIcg4LmB4LiV4LmI4LiW4LmJ4Liy4Lir4Liy4LiB4Lih4Li14LiE4LmI4Liy4LiV4LmI4Liy4LiH4LiB4Lix4LiZIOC4peC4tOC4h+C4hOC5jOC4l+C4teC5iOC5gOC4geC4tOC4lOC4hOC4t+C4reC4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C4l+C4tOC4qOC4l+C4suC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lib4Lij4Liw4LmA4Lig4LiX4Lil4Li04LiH4LiE4LmMIFwnQ29ubmVjdGVkVG9cJyDguJbguYnguLLguIrguLfguYjguK3guYHguKvguKXguYjguIfguJfguLXguYjguKHguLLguYHguKXguLDguIrguLfguYjguK3guYDguJvguYnguLLguKvguKHguLLguKLguKHguLXguITguYjguLLguYDguJTguLXguKLguKfguIHguLHguJkg4Lil4Li04LiH4LiE4LmM4LiX4Li14LmI4Liq4LmI4LiH4Lic4Lil4LmD4Lir4LmJ4LiE4Li34Lit4LmE4Lih4LmI4Lih4Li14LiX4Li04Lio4LiX4Liy4LiHIOC5geC4leC5iOC4luC5ieC4suC4q+C4suC4geC4oeC4teC4hOC5iOC4suC4leC5iOC4suC4h+C4geC4seC4mSDguKXguLTguIfguITguYzguJfguLXguYjguYDguIHguLTguJTguITguLfguK3guIHguLLguKPguYDguIrguLfguYjguK3guKHguYLguKLguIfguJfguLTguKjguJfguLLguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJnguLXguYnguIHguLPguKvguJnguJTguJvguKPguLDguYDguKDguJfguKXguLTguIfguITguYwgXCdEZXBlbmRzT25cJyDguJbguYnguLLguIrguLfguYjguK3guYHguKvguKXguYjguIfguJfguLXguYjguKHguLLguYHguKXguLDguIrguLfguYjguK3guYDguJvguYnguLLguKvguKHguLLguKLguKHguLXguITguYjguLLguYDguJTguLXguKLguKfguIHguLHguJkg4Lil4Li04LiH4LiE4LmM4LiX4Li14LmI4Liq4LmI4LiH4Lic4Lil4LmD4Lir4LmJ4LiE4Li34Lit4LmE4Lih4LmI4Lih4Li14LiX4Li04Lio4LiX4Liy4LiHIOC5geC4leC5iOC4luC5ieC4suC4q+C4suC4geC4oeC4teC4hOC5iOC4suC4leC5iOC4suC4h+C4geC4seC4mSDguKXguLTguIfguITguYzguJfguLXguYjguYDguIHguLTguJTguITguLfguK3guIHguLLguKPguYDguIrguLfguYjguK3guKHguYLguKLguIfguJfguLTguKjguJfguLLguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4meC4teC5ieC4geC4s+C4q+C4meC4lOC4m+C4o+C4sOC5gOC4oOC4l+C4peC4tOC4h+C4hOC5jCAgXCdJbmNsdWRlc1wnIOC4luC5ieC4suC4iuC4t+C5iOC4reC5geC4q+C4peC5iOC4h+C4l+C4teC5iOC4oeC4suC5geC4peC4sOC4iuC4t+C5iOC4reC5gOC4m+C5ieC4suC4q+C4oeC4suC4ouC4oeC4teC4hOC5iOC4suC5gOC4lOC4teC4ouC4p+C4geC4seC4mSDguKXguLTguIfguITguYzguJfguLXguYjguKrguYjguIfguJzguKXguYPguKvguYnguITguLfguK3guYTguKHguYjguKHguLXguJfguLTguKjguJfguLLguIcg4LmB4LiV4LmI4LiW4LmJ4Liy4Lir4Liy4LiB4Lih4Li14LiE4LmI4Liy4LiV4LmI4Liy4LiH4LiB4Lix4LiZIOC4peC4tOC4h+C4hOC5jOC4l+C4teC5iOC5gOC4geC4tOC4lOC4hOC4t+C4reC4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C4l+C4tOC4qOC4l+C4suC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnTG9jYXRpb25PZlwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiZ4Li14LmJ4LiB4Liz4Lir4LiZ4LiU4Lib4Lij4Liw4LmA4Lig4LiX4Lil4Li04LiH4LiE4LmMIFwnUmVsZXZhbnRUb1wnIOC4luC5ieC4suC4iuC4t+C5iOC4reC5geC4q+C4peC5iOC4h+C4l+C4teC5iOC4oeC4suC5geC4peC4sOC4iuC4t+C5iOC4reC5gOC4m+C5ieC4suC4q+C4oeC4suC4ouC4oeC4teC4hOC5iOC4suC5gOC4lOC4teC4ouC4p+C4geC4seC4mSDguKXguLTguIfguITguYzguJfguLXguYjguKrguYjguIfguJzguKXguYPguKvguYnguITguLfguK3guYTguKHguYjguKHguLXguJfguLTguKjguJfguLLguIcg4LmB4LiV4LmI4LiW4LmJ4Liy4Lir4Liy4LiB4Lih4Li14LiE4LmI4Liy4LiV4LmI4Liy4LiH4LiB4Lix4LiZIOC4peC4tOC4h+C4hOC5jOC4l+C4teC5iOC5gOC4geC4tOC4lOC4hOC4t+C4reC4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C4l+C4tOC4qOC4l+C4suC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICfguITguKfguLLguKHguIHguKfguYnguLLguIfguILguK3guIfguJ7guLfguYnguJnguJfguLXguYjguILguYnguK3guITguKfguLLguKHguILguK3guIcgSVRTTSc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==</File>
        <File Location="Kernel/Language/tr_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnRyX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDSVBBbGxvY2F0aW9uOiBPdmVyd3JpdGUgcHJpb3JpdHkgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gRGVmYXVsdCBmYWxsYmFjazogRnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/uk_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnVrX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ9CR0LXQui3QtdC90LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ9CU0LXQvNC+0L3RgdGC0YDQsNGG0ZbRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICfQndCw0Y/QstC90ZbRgdGC0YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICfQkNC70YzRgtC10YDQvdCw0YLQuNCy0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfQn9C+0LJcJ9GP0LfQsNC90LjQuSDQtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/vi_VN_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnZpX1ZOX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IOKGlCBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1Bow6JuIGLhu5UgxrB1IHRpw6puJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGjhu51pIGdpYW4gbmfhuq9uIG5o4bqldCBnaeG7r2EgY8OhYyBz4buxIGPhu5EnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdS4bunaSBybyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnVGjDtG5nIHRpbiBjYW0ga+G6v3QgZOG7i2NoIHbhu6UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnVGhheSDEkeG7lWkgbOG6p24gY3Xhu5FpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnROG7i2NoIHbhu6UgbGnDqm4gcXVhbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdUaMO0bmcgdGluIGThu4tjaCB24bulJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdUcuG6oW5nIHRow6FpIHPhu7EgY+G7kSBoaeG7h24gdGjhu51pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ0NhbSBr4bq/dCBk4buLY2ggduG7pSBsacOqbiBxdWFuJzsKCiAgICAjIFRlbXBsYXRlOiBUaWNrZXRJbmZvcm1hdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIENyaXRpY2FsaXR5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DSVBBbGxvY2F0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnVMOhYyDEkeG7mW5nJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU0xBSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ1Ry4bqhbmcgdGjDoWkgc+G7sSBj4buRIGhp4buHbiB0aOG7nWknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0L1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnVHLhuqFuZyB0aMOhaSBz4buxIGPhu5EnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkL0RyaXZlci9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHRlcm5hbC1zb3VyY2Uga2V5J30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCAvIFNPUE0gRGVmaW5pdGlvbjogSVRTTUNvcmUuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0aW9uYWwnfSA9ICdIb+G6oXQgxJHhu5luZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnROG7i2NoIHbhu6UgbmfGsOG7nWkgZMO5bmcgY3Xhu5FpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250LWVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2stZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdRdeG6o24gdHLhu4sgQ05UVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdCw6FvIGPDoW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdIb+G6oXQgxJHhu5luZyBDTlRUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdUaHV54bq/dCBtaW5oJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdE4buxIMOhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdI4bujcCDEkeG7k25nIGPGoSBz4bufJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnS2jDoWMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnU+G6tW4gZMO5bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1Ro4budaSBnaWFuIHBo4bqjbiBo4buTaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnVGjhu51pIGdpYW4ga2jDtGkgcGjhu6VjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ1Thu7cgbOG7hyBnaeG6o2kgcXV54bq/dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdHaWFvIGThu4tjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdM4buXaSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnVGhheSB0aOG6vyBjaG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfEkMOjIGvhur90IG7hu5FpIMSR4bq/bic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJlaGF2aW9yIG9mIHByaW9yaXR5IGFsbG9jYXRpb24gaW4gdGhlIGZyb250ZW5kcyBiYXNlZCBvbiBDcml0aWNhbGl0eSBhbmQgSW1wYWN0LiBDYW4gYmUgb3ZlcnJ1bGVkIGJ5IGZyb250ZW5kIHNwZWNpZmljIFByaW9yaXR5QnlDSVAgc2V0dGluZ3MuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290b2JvL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ1Bo4bulIHRodeG7mWMgdsOgbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmZvcmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNlcnZpY2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdCYW8gZ+G7k20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBCYWNrIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBMaW5rIG1lbnUgaXRlbSBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gU0xBIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBQcmludCBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPZmYnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnTeG7mXQgcGjhuqduIGPhu6dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnVGjDrWNoIGjhu6NwIGNobyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdD4bqnbiBjaG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnVOG7lW5nIHF1YW4gY2FtIGvhur90IGThu4tjaCB24bulJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdU4buVbmcgcXVhbiBk4buLY2ggduG7pSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgYW5kIGRpcmVjdGlvbiBvZiBsaW5rcyB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFRoZSBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGxpbmsgdHlwZSAoYXMgZGVmaW5lZCBpbiBMaW5rT2JqZWN0OjpUeXBlKSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBJbmNpZGVudExpbmtUeXBlIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIEZvciBleGFtcGxlIGlmIHRoZSBJbmNpZGVudExpbmtUeXBlIGlzIHNldCB0byBcJ0RlcGVuZHNPblwnLCBhbmQgdGhlIERpcmVjdGlvbiBpcyBcJ1NvdXJjZVwnLCBvbmx5IFwnRGVwZW5kcyBvblwnIGxpbmtzIHdpbGwgYmUgZm9sbG93ZWQgKGFuZCBub3QgdGhlIG9wcG9zaXRlIGxpbmsgXCdSZXF1aXJlZCBmb3JcJykgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4gWW91IGNhbiBhZGQgbW9yZSBsaW5rIHR5cGVzIGFkIGRpcmVjdGlvbnMgYXMgeW91IGxpa2UsIGUuZy4gXCdJbmNsdWRlc1wnIHdpdGggdGhlIGRpcmVjdGlvbiBcJ1RhcmdldFwnLiBBbGwgbGluayB0eXBlcyBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9ucyBMaW5rT2JqZWN0OjpUeXBlIGFyZSBwb3NzaWJsZSBhbmQgdGhlIGRpcmVjdGlvbiBjYW4gYmUgXCdTb3VyY2VcJywgXCdUYXJnZXRcJywgb3IgXCdCb3RoXCcuIElNUE9SVEFOVDogQUZURVIgWU9VIE1BS0UgQ0hBTkdFUyBUTyBUSElTIFNZU0NPTkZJRyBPUFRJT04gWU9VIE5FRUQgVE8gUlVOIFRIRSBDT05TT0xFIENPTU1BTkQgYmluL290b2JvLkNvbnNvbGUucGwgQWRtaW46OklUU006OkluY2lkZW50U3RhdGU6OlJlY2FsY3VsYXRlIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhlIGN1cnJlbnQgc2VydmljZSBpbmNpZGVudCBzdGF0ZSBzaWduYWwgaW4gdGhlIHRpY2tldCBpbmZvcm1hdGlvbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTb3VyY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VnZ2VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0xvY2F0aW9uT2ZcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=</File>
        <File Location="Kernel/Language/zh_CN_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX0NOX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAn57Sn5oCl5bqmIOKGlCDlvbHlk40g4oaUIOS8mOWFiOe6pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAn566h55CGIue0p+aApeW6piDihpQg5b2x5ZONIue7hOWQiOeahOS8mOWFiOe6p+e7k+aenOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn5LyY5YWI57qn5YiG6YWNJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn5pWF6Zqc6Ze05pyA55+t5pe26Ze0JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn57Sn5oCl5bqmJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEHkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn5LiK5qyh5L+u5pS55LqOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+S4iuasoeS/ruaUueS6uic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn5YWz6IGU55qE5pyN5YqhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ+acjeWKoeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn5b2T5YmN5pWF6Zqc54q25oCBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ+WFs+iBlOeahFNMQSc7CgogICAgIyBUZW1wbGF0ZTogVGlja2V0SW5mb3JtYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5jaWRlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBDcml0aWNhbGl0eSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ+W9seWTjSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNMQUlEIGlzIGdpdmVuISd9ID0gJ+ayoeacieaMh+WumlNMQSBJRO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAn5pWw5o2u5bqT5Lit5om+5LiN5YiwU0xBSUQgJXPvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FsZW5kYXIgRGVmYXVsdCd9ID0gJ+m7mOiupOaXpeWOhic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNU0xBWm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb3BlcmF0aW9uYWwnfSA9ICfmraPluLgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd2FybmluZyd9ID0gJ+itpuWRiic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbmNpZGVudCd9ID0gJ+aVhemanCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TZXJ2aWNlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnfSA9ICfmsqHmnInmjIflrppTZXJ2aWNlSUTCoO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ+aVsOaNruW6k+S4reaJvuS4jeWIsFNlcnZpY2VJRCAlc++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn5b2T5YmN5pWF6Zqc54q25oCBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+aVhemanOeKtuaAgSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ+ato+W4uCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ+aVhemanCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAn5pyA57uI55So5oi35pyN5YqhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ+WJjeerryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ+WQjuerryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVTnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn5oql5ZGKJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVTov5DokKUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ+a8lOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn6aG555uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ+aUr+aMgeWQiOWQjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ+WFtuWugyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICflj6/nlKjmgKcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ+WTjeW6lOaXtumXtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAn5oGi5aSN5pe26Ze0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ+ino+WGs+eOhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfkuqTmmJMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAn6ZSZ6K+vJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICfmm7/ku6MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfov57mjqXliLAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICflrprkuYnpk77mjqXlr7nosaHlsI/pg6jku7YoTGlua09iamVjdDo6Vmlld01vZGUgPSBcImNvbXBsZXhcIinorr7nva7mjInpkq7kuK3nmoTmk43kvZzjgILor7fms6jmhI/vvIzov5nkupvmk43kvZzlv4Xpobvlt7Lnu4/lnKjku6XkuItKU+WSjENTU+aWh+S7tuS4reazqOWGjO+8mkNvcmUuQWxsb2NhdGlvbkxpc3QuY3Nz44CBQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qc+OAgSBDb3JlLlVJLlRhYmxlLlNvcnQuanPjgIFDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qc+WSjENvcmUuQWdlbnQuTGlua09iamVjdC5qc+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBTZXJ2aWNlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBTZXJ2aWNlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAn5a6a5LmJ6ZO+5o6l55qE5pyN5Yqh5bCP6YOo5Lu2KExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKeimgeaYvuekuueahOWIl+OAguazqOaEj++8muWPquacieacjeWKoeWxnuaAp+aJjeiDveS9nOS4uum7mOiupOWIl++8jOWPr+eUqOeahOiuvue9ruWAvOS4uu+8mjAgPSDnpoHnlKjvvIwxID0g5Y+v55So77yMIDIgPSDpu5jorqTlkK/nlKjjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbiBjYW4gYmUgdXNlZCBhcyByZXBvc2l0b3J5LCBmb3IgZXhhbXBsZTogS2V5PSJodHRwOi8vZXhhbXBsZS5jb20vb3RvYm8vcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn5L6d6LWWJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZm9yY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfkuLrns7vnu5/nrqHnkIbljLrkuK3nmoQgQWRtaW5JVFNNQ0lQQWxsb2NhdGUg6YWN572u5rOo5YaM5YmN56uv5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfkuLrmnI3liqHkurrlkZjnlYzpnaLkuK3nmoQgQWdlbnRJVFNNU0xBIOWvueixoeazqOWGjOWJjeerr+aooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfkuLrmnI3liqHkurrlkZjnlYzpnaLkuK3nmoQgQWdlbnRJVFNNU0xBUHJpbnQg5a+56LGh5rOo5YaM5YmN56uv5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Li65pyN5Yqh5Lq65ZGY55WM6Z2i5Lit55qEIEFnZW50SVRTTVNMQVpvb20g5a+56LGh5rOo5YaM5YmN56uv5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Li65pyN5Yqh5Lq65ZGY55WM6Z2i5Lit55qEIEFnZW50SVRTTVNlcnZpY2Ug5a+56LGh5rOo5YaM5YmN56uv5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfkuLrmnI3liqHkurrlkZjnlYzpnaLkuK3nmoQgQWdlbnRJVFNNU2VydmljZVByaW50IOWvueixoeazqOWGjOWJjeerr+aooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfkuLrmnI3liqHkurrlkZjnlYzpnaLkuK3nmoQgQWdlbnRJVFNNU2VydmljZVpvb20g5a+56LGh5rOo5YaM5YmN56uv5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU0xBIE92ZXJ2aWV3Lid9ID0gJ0lUU00gU0xB5qaC6KeIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gU2VydmljZSBPdmVydmlldy4nfSA9ICdJVFNN5pyN5Yqh5qaC6KeIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlIFR5cGUnfSA9ICfmlYXpmpznirbmgIHnsbvlnosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICfljIXmi6wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRlZCBpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2NhdGlvbiBvZid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ+euoeeQhuS8mOWFiOe6p+efqemYteOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIGNyaXRpY2FsaXR5IC0gaW1wYWN0IC0gcHJpb3JpdHkgbWF0cml4Lid9ID0gJ+euoeeQhiDntKfmgKXluqYt5b2x5ZONLeS8mOWFiOe6pyDnn6npmLUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ1NMQeiPnOWNleS4reaYvuekuuKAnOWQjumAgOKAneiPnOWNlemhueeahOaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ+acjeWKoeiPnOWNleS4reaYvuekuuKAnOWQjumAgOKAneiPnOWNlemhueeahOaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJ+acjeWKoeiPnOWNleS4reaYvuekuuKAnOmTvuaOpeKAneiPnOWNlemhueeahOaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJ1NMQeiPnOWNleS4reaYvuekuuKAnOaJk+WNsOKAneiPnOWNlemhueeahOaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICfmnI3liqHoj5zljZXkuK3mmL7npLrigJzmiZPljbDigJ3oj5zljZXpobnnmoTmqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICfpgInpobnop4blm77kuK3nlKjkuo7ooajnpLrmlYXpmpznirbmgIHnmoTlj4LmlbDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ+WxnuS6jic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ+WFs+iBlCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfooqsuLi7pnIDopoEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xB5qaC6KeIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICdTTEHmiZPljbDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnU0xB6K+m5oOF44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICfmnI3liqHmpoLop4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICfmnI3liqHmiZPljbDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJ+acjeWKoeivpuaDheOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfmnI3liqHljLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJ+iuvue9rumTvuaOpeeahOexu+Wei+WSjOaWueWQkeS7peS+v+iuoeeul+aVhemanOeKtuaAgeOAgumUruaYr+mTvuaOpeexu+Wei+eahOWQjeensO+8iOWcqExpbmtPYmplY3Q6OlR5cGXkuK3lrprkuYnvvInvvIzlgLzmmK9JbmNpZGVudExpbmtUeXBl77yI5pWF6Zqc6ZO+5o6l57G75Z6L77yJ55qE5pa55ZCR5Lul6K6h566X5pWF6Zqc54q25oCB44CC56S65L6L77ya5aaC5p6cSW5jaWRlbnRMaW5rVHlwZe+8iOaVhemanOmTvuaOpeexu+Wei++8ieiuvuS4uuKAnERlcGVuZHNPbu+8iOS+nei1lu+8ieKAne+8jOaWueWQkeaYr1NvdXJjZe+8iOa6kO+8ie+8jOWPquacieKAnOS+nei1luKAnemTvuaOpe+8iOiAjOS4jeaYr+mTvuaOpeexu+Wei+S4uuKAnOiiqy4uLumcgOimgeKAneeahOmTvuaOpe+8ieaJjeeUqOadpeiuoeeul+aVhemanOeKtuaAgeOAguWPr+S7peagueaNrumcgOimgea3u+WKoOabtOWkmueahOmTvuaOpeexu+Wei+WSjOaWueWQke+8jOWmguaWueWQkeS4uuKAnOebruagh+KAneeahOKAnEluY2x1ZGVz77yI5YyF5ZCr77yJ4oCd6ZO+5o6l44CC5omA5pyJ5Zyo57O757uf6YWN572u6YCJ6aG555qETGlua09iamVjdDo6VHlwZeS4reWumuS5ieeahOmTvuaOpeexu+Wei+mDveWPr+S7peS9v+eUqO+8jOaWueWQkeWPquWPr+S7peaYr+KAnFNvdXJjZe+8iOa6kO+8ieKAneOAgeKAnFRhcmdldO+8iOebruagh++8ieKAneaIluKAnEJvdGjvvIjmupDlkoznm67moIfpg73mmK/vvInigJ3jgILph43opoHvvJrlnKjmm7TmlLnkuobns7vnu5/phY3nva7pgInpobnlkI7vvIzkvaDpnIDopoHov5DooYzohJrmnKxiaW4vb3RvYm8uQ29uc29sZS5wbCBBZG1pbjo6SVRTTTo6SW5jaWRlbnRTdGF0ZTo6UmVjYWxjdWxhdGXvvIzmiY3og73mjInmlrDnmoTorr7nva7ph43mlrDorqHnrpfmlYXpmpznirbmgIHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB0aGUgY3VycmVudCBzZXJ2aWNlIGluY2lkZW50IHN0YXRlIHNpZ25hbCBpbiB0aGUgdGlja2V0IGluZm9ybWF0aW9uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvdXJjZSd9ID0gJ+a6kCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWdnZXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKrigJxJVFNNQ2hhbmdl77yI5Y+Y5pu077yJ4oCd5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5pmu6YCa4oCd6ZO+5o6l5Yiw5bel5Y2V44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzmma7pgJrigJ3pk77mjqXliLBGQVHnn6Xor4blupPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc54i25a2Q4oCd6ZO+5o6l5YiwRkFR55+l6K+G5bqT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5YWz6IGU4oCd6ZO+5o6l5YiwRkFR55+l6K+G5bqT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOWkh+mAieKAnemTvuaOpeWIsEZBUeefpeivhuW6k+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOS+nei1luKAnemTvuaOpeWIsOKAnOacjeWKoeKAneOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzlhbPogZTigJ3pk77mjqXliLDigJzmnI3liqHigJ3jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTUNvbmZpZ0l0ZW3vvIjphY3nva7pobnvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzlpIfpgInigJ3pk77mjqXliLDigJzmnI3liqHigJ3jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOS+nei1luKAnemTvuaOpeWIsOKAnOacjeWKoeKAneOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOWFs+iBlOKAnemTvuaOpeWIsOW3peWNleOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5aSH6YCJ4oCd6ZO+5o6l5Yiw5Y+m5LiA6YWN572u6aG544CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc6L+e5o6l5Yiw4oCd6ZO+5o6l5Yiw5Y+m5LiA6YWN572u6aG544CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOS+nei1luKAnemTvuaOpeWIsOWPpuS4gOmFjee9rumhueOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNQ29uZmlnSXRlbe+8iOmFjee9rumhue+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOWMheWQq+KAnemTvuaOpeWIsOWPpuS4gOmFjee9rumhueOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTG9jYXRpb25PZlwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Db25maWdJdGVt77yI6YWN572u6aG577yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5YWz6IGU4oCd6ZO+5o6l5Yiw5Y+m5LiA6YWN572u6aG544CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Xb3JrT3JkZXLvvIjlt6XkvZzmjIfku6TvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzkvp3otZbigJ3pk77mjqXliLDphY3nva7pobnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5LiqSVRTTVdvcmtPcmRlcu+8iOW3peS9nOaMh+S7pO+8ieWvueixoeiDveWkn+S7pemTvuaOpeexu+Wei+KAnOaZrumAmuKAnemTvuaOpeWIsOmFjee9rumhueOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6huS4gOS4qklUU01Xb3JrT3JkZXLvvIjlt6XkvZzmjIfku6TvvInlr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzkvp3otZbigJ3pk77mjqXliLDigJzmnI3liqHigJ3jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNV29ya09yZGVy77yI5bel5L2c5oyH5Luk77yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5pmu6YCa4oCd6ZO+5o6l5Yiw4oCc5pyN5Yqh4oCd44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKpJVFNNV29ya09yZGVy77yI5bel5L2c5oyH5Luk77yJ5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5pmu6YCa4oCd6ZO+5o6l5Yiw5bel5Y2V44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobkuIDkuKrigJzmnI3liqHigJ3lr7nosaHog73lpJ/ku6Xpk77mjqXnsbvlnovigJzmma7pgJrigJ3pk77mjqXliLBGQVHnn6Xor4blupPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5Liq4oCc5pyN5Yqh4oCd5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc54i25a2Q4oCd6ZO+5o6l5YiwRkFR55+l6K+G5bqT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG5LiA5Liq4oCc5pyN5Yqh4oCd5a+56LGh6IO95aSf5Lul6ZO+5o6l57G75Z6L4oCc5YWz6IGU4oCd6ZO+5o6l5YiwRkFR55+l6K+G5bqT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6humTvuaOpeexu+Wei+KAnOabv+S7o+KAneOAguWmguaenOa6kOWSjOebruagh+WQjeensOebuOWQjO+8jOWImeS6p+eUn+eahOmTvuaOpeaYr+aXoOaWueWQkeaAp+eahOmTvuaOpeOAguWmguaenOa6kOWSjOebruagh+eahOWAvOS4jeWQjO+8jOWImeS6p+eUn+eahOmTvuaOpeaYr+aWueWQkeaAp+eahOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG6ZO+5o6l57G75Z6L4oCc6L+e5o6l5Yiw4oCd44CC5aaC5p6c5rqQ5ZKM55uu5qCH5ZCN56ew55u45ZCM77yM5YiZ5Lqn55Sf55qE6ZO+5o6l5piv5peg5pa55ZCR5oCn55qE6ZO+5o6l44CC5aaC5p6c5rqQ5ZKM55uu5qCH55qE5YC85LiN5ZCM77yM5YiZ5Lqn55Sf55qE6ZO+5o6l5piv5pa55ZCR5oCn55qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn6L+Z5Liq6K6+572u5a6a5LmJ5LqG6ZO+5o6l57G75Z6L4oCc5L6d6LWW4oCd44CC5aaC5p6c5rqQ5ZKM55uu5qCH5ZCN56ew55u45ZCM77yM5YiZ5Lqn55Sf55qE6ZO+5o6l5piv5peg5pa55ZCR5oCn55qE6ZO+5o6l44CC5aaC5p6c5rqQ5ZKM55uu5qCH55qE5YC85LiN5ZCM77yM5YiZ5Lqn55Sf55qE6ZO+5o6l5piv5pa55ZCR5oCn55qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfov5nkuKrorr7nva7lrprkuYnkuobpk77mjqXnsbvlnovigJzljIXlkKvigJ3jgILlpoLmnpzmupDlkoznm67moIflkI3np7Dnm7jlkIzvvIzliJnkuqfnlJ/nmoTpk77mjqXmmK/ml6DmlrnlkJHmgKfnmoTpk77mjqXjgILlpoLmnpzmupDlkoznm67moIfnmoTlgLzkuI3lkIzvvIzliJnkuqfnlJ/nmoTpk77mjqXmmK/mlrnlkJHmgKfnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0xvY2F0aW9uT2ZcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ+i/meS4quiuvue9ruWumuS5ieS6humTvuaOpeexu+Wei+KAnOWFs+iBlOKAneOAguWmguaenOa6kOWSjOebruagh+WQjeensOebuOWQjO+8jOWImeS6p+eUn+eahOmTvuaOpeaYr+aXoOaWueWQkeaAp+eahOmTvuaOpeOAguWmguaenOa6kOWSjOebruagh+eahOWAvOS4jeWQjO+8jOWImeS6p+eUn+eahOmTvuaOpeaYr+aWueWQkeaAp+eahOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdJVFNN5qih5Z2X5Lit5paH5pys6L6T5YWl5Yy65Z+f55qE5a695bqm44CCJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Language/zh_TW_ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX1RXX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IOKGlCBJbXBhY3Qg4oaUIFByaW9yaXR5J30gPSAn6YeN6KaBIOKGlCDlvbHpn78g4oaUIOWEquWFiOe0mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0Lid9ID0KICAgICAgICAnIumHjeimgSDihpQg5b2x6Z+/IuS5i+mWk+eahOe1hOWQiOaxuuWumuWEquWFiOe0mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn5YSq5YWI57Sa5YiG6YWNJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn5pWF6Zqc6ZaT5pyA55+t5pmC6ZaTJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn6YeN6KaBJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEHkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn5LiK5qyh5L+u5pS55pa8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+S4iuasoeS/ruaUueS6uic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn6Zec6IGv55qE5pyN5YuZJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ+acjeWLmeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn55W25YmN5pWF6Zqc54uA5oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ+mXnOiBr+eahFNMQXMnOwoKICAgICMgVGVtcGxhdGU6IFRpY2tldEluZm9ybWF0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluY2lkZW50IFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgQ3JpdGljYWxpdHknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICflvbHpn78nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBTTEFJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWxlbmRhciBEZWZhdWx0J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01TTEFab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcGVyYXRpb25hbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3YXJuaW5nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luY2lkZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gU2VydmljZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn55W25YmN5pWF6Zqc54uA5oWLJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGlua09iamVjdC9TZXJ2aWNlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+aVhemanOeLgOaFiyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL1NlcnZpY2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4dGVybmFsLXNvdXJjZSBrZXknfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIC8gU09QTSBEZWZpbml0aW9uOiBJVFNNQ29yZS5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRpb25hbCd9ID0gJ+ato+W4uCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCd9ID0gJ+aVhemanCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAn5pyA57WC55So5oi25pyN5YuZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ+WJjeerryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ+W+jOerryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVTnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn5aCx5ZGKJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVTpgYvnh58nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ+a8lOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn6aCF55uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ+S+neaTmuWQiOWQjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ+WFtuWugyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICflj6/nlKjmgKcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ+mfv+aHieaZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAn5oGi5b6p5pmC6ZaTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ+ino+axuueOhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfkuqTmmJMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAn6Yyv6KqkJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWx0ZXJuYXRpdmUgdG8nfSA9ICflj6/kvpvpgbjmk4cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0lQQWxsb2NhdGlvbjogT3ZlcndyaXRlIHByaW9yaXR5IGJhc2VkIG9uIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QuIERlZmF1bHQgZmFsbGJhY2s6IEZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfpgKPmjqUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBiZWhhdmlvciBvZiBwcmlvcml0eSBhbGxvY2F0aW9uIGluIHRoZSBmcm9udGVuZHMgYmFzZWQgb24gQ3JpdGljYWxpdHkgYW5kIEltcGFjdC4gQ2FuIGJlIG92ZXJydWxlZCBieSBmcm9udGVuZCBzcGVjaWZpYyBQcmlvcml0eUJ5Q0lQIHNldHRpbmdzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgU2VydmljZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgU2VydmljZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBsaXN0IG9mIG9ubGluZSByZXBvc2l0b3JpZXMuIEFub3RoZXIgaW5zdGFsbGF0aW9uIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdG9iby9wdWJsaWMucGw/QWN0aW9uPVB1YmxpY1JlcG9zaXRvcnk7RmlsZT0iIGFuZCBDb250ZW50PSJTb21lIE5hbWUiLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICfkvp3os7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5mb3JjZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFNMQSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBTZXJ2aWNlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAn5YyF5ousJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvY2F0ZWQgaW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9jYXRpb24gb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICfnrqHnkIblhKrlhYjntJrnn6npmaMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBjcml0aWNhbGl0eSAtIGltcGFjdCAtIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIEJhY2sgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgQmFjayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgTGluayBtZW51IGl0ZW0gaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIFNMQSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgUHJpbnQgbWVudSBpdGVtIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2ZmJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ+WxrOaWvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ+ebuOmXnCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfpnIDopoEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xB5qaC6L+wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICfmnI3li5nmpoLov7AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfmnI3li5nljYAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gXCdEZXBlbmRzT25cJywgYW5kIHRoZSBEaXJlY3Rpb24gaXMgXCdTb3VyY2VcJywgb25seSBcJ0RlcGVuZHMgb25cJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rIFwnUmVxdWlyZWQgZm9yXCcpIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuIFlvdSBjYW4gYWRkIG1vcmUgbGluayB0eXBlcyBhZCBkaXJlY3Rpb25zIGFzIHlvdSBsaWtlLCBlLmcuIFwnSW5jbHVkZXNcJyB3aXRoIHRoZSBkaXJlY3Rpb24gXCdUYXJnZXRcJy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlIFwnU291cmNlXCcsIFwnVGFyZ2V0XCcsIG9yIFwnQm90aFwnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgQ09OU09MRSBDT01NQU5EIGJpbi9vdG9iby5Db25zb2xlLnBsIEFkbWluOjpJVFNNOjpJbmNpZGVudFN0YXRlOjpSZWNhbGN1bGF0ZSBTTyBUSEFUIEFMTCBJTkNJREVOVCBTVEFURVMgV0lMTCBCRSBSRUNBTENVTEFURUQgQkFTRUQgT04gVEhFIE5FVyBTRVRUSU5HUyEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHRoZSBjdXJyZW50IHNlcnZpY2UgaW5jaWRlbnQgc3RhdGUgc2lnbmFsIGluIHRoZSB0aWNrZXQgaW5mb3JtYXRpb24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU291cmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Z2dlc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdMb2NhdGlvbk9mXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdMb2NhdGlvbk9mXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK</File>
        <File Location="Kernel/Modules/AdminITSMCIPAllocate.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5JVFNNQ0lQQWxsb2NhdGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHRoZSBwcmlvcml0eSBsaXN0CiAgICBteSAlUHJpb3JpdHlMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JyktPlByaW9yaXR5TGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciBJVFNNQ3JpdGljYWxpdHkgYW5kIElUU01JbXBhY3QKICAgIG15ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsnVGlja2V0J10sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gewogICAgICAgICAgICBJVFNNQ3JpdGljYWxpdHkgPT4gMSwKICAgICAgICAgICAgSVRTTUltcGFjdCAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZm9yIElUU01Dcml0aWNhbGl0eSBhbmQgSVRTTUltcGFjdAogICAgbXkgJVBvc3NpYmxlVmFsdWVzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGRDb25maWdBcnJheVJlZn0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgICAgICRQb3NzaWJsZVZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e1Bvc3NpYmxlVmFsdWVzfSB8fCB7fTsKICAgIH0KCiAgICAjIHNldCB0aGUgY3JpdGljYWxpdHkgbGlzdAogICAgJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9ID0gJFBvc3NpYmxlVmFsdWVze0lUU01Dcml0aWNhbGl0eX07CgogICAgIyBzZXQgdGhlIGltcGFjdCBsaXN0CiAgICAkU2VsZi0+e0ltcGFjdExpc3R9ID0gJFBvc3NpYmxlVmFsdWVze0lUU01JbXBhY3R9OwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3QKICAgIG15ICRDSVBBbGxvY2F0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDSVBBbGxvY2F0ZScgKSB7CgogICAgICAgICMgZ2V0IGFsbCBQcmlvcml0eUlEcyBvZiB0aGUgbWF0cml4CiAgICAgICAgbXkgJEFsbG9jYXRlRGF0YTsKICAgICAgICBmb3IgbXkgJEltcGFjdCAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0ltcGFjdExpc3R9IH0gKSB7CgogICAgICAgICAgICBDUklUSUNBTElUWToKICAgICAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIGZpZWxkIG5hbWUgZm9yIHByaW9yaXR5IGlkCiAgICAgICAgICAgICAgICBteSAkRmllbGROYW1lID0gIlByaW9yaXR5SUQiIC4gJEltcGFjdCAuICctJyAuICRDcml0aWNhbGl0eTsKCiAgICAgICAgICAgICAgICAjIGNsZWFuIHVwIGFsbCB3aGl0ZXNwYWNlcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhbGxvd2VkIGluIEhUTUwgSUQtQXR0cmlidXRlcwogICAgICAgICAgICAgICAgJEZpZWxkTmFtZSA9fiBzeyBccysgfXt9Z3htczsKCiAgICAgICAgICAgICAgICAjIGdldCBmb3JtIHBhcmFtIGZvciBwcmlvcml0eSBpZAogICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKAogICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICRGaWVsZE5hbWUsCiAgICAgICAgICAgICAgICApIHx8ICcnOwoKICAgICAgICAgICAgICAgIG5leHQgQ1JJVElDQUxJVFkgaWYgISRQcmlvcml0eUlEOwoKICAgICAgICAgICAgICAgICRBbGxvY2F0ZURhdGEtPnskSW1wYWN0fS0+eyRDcml0aWNhbGl0eX0gPSAkUHJpb3JpdHlJRDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgYWxsb2NhdGlvbnMKICAgICAgICAkQ0lQQWxsb2NhdGVPYmplY3QtPkFsbG9jYXRlVXBkYXRlKAogICAgICAgICAgICBBbGxvY2F0ZURhdGEgPT4gJEFsbG9jYXRlRGF0YSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgYWxsb2NhdGlvbiBkYXRhCiAgICAgICAgbXkgJEFsbG9jYXRlRGF0YSA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSAkQWxsb2NhdGVNYXRyaXg7CiAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlswXS0+e09iamVjdFR5cGV9ID0KICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdJbXBhY3QnKSAuICcgLyAnCiAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDcml0aWNhbGl0eScpOwogICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bMF0tPntDbGFzc30gPSAnSGVhZGVyQ29sdW1uRGVzY3JpcHRpb24nOwoKICAgICAgICAjIGdlbmVyYXRlIHRhYmxlIGRlc2NyaXB0aW9uIChJbXBhY3QpCiAgICAgICAgbXkgJENvdW50ZXIxID0gMTsKICAgICAgICBmb3IgbXkgJEltcGFjdCAoCiAgICAgICAgICAgIHNvcnQgeyAkU2VsZi0+e0ltcGFjdExpc3R9LT57JGF9IGNtcCAkU2VsZi0+e0ltcGFjdExpc3R9LT57JGJ9IH0KICAgICAgICAgICAga2V5cyAleyAkU2VsZi0+e0ltcGFjdExpc3R9IH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJENvdW50ZXIxXS0+WzBdLT57T2JqZWN0VHlwZX0gICA9ICdJbXBhY3QnOwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntJbXBhY3RLZXl9ICAgID0gJEltcGFjdDsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJENvdW50ZXIxXS0+WzBdLT57T2JqZWN0T3B0aW9ufSA9ICRTZWxmLT57SW1wYWN0TGlzdH0tPnskSW1wYWN0fTsKICAgICAgICAgICAgJENvdW50ZXIxKys7CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIHRhYmxlIGRlc2NyaXB0aW9uIChDcml0aWNhbGl0eSkKICAgICAgICBteSAkQ291bnRlcjIgPSAxOwogICAgICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKAogICAgICAgICAgICBzb3J0IHsgJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9LT57JGF9IGNtcCAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0tPnskYn0gfQogICAgICAgICAgICBrZXlzICV7ICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fSB9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvdW50ZXIyXS0+e09iamVjdFR5cGV9ICAgICA9ICdDcml0aWNhbGl0eSc7CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvdW50ZXIyXS0+e0NyaXRpY2FsaXR5S2V5fSA9ICRDcml0aWNhbGl0eTsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ291bnRlcjJdLT57T2JqZWN0T3B0aW9ufSAgID0gJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9LT57JENyaXRpY2FsaXR5fTsKICAgICAgICAgICAgJENvdW50ZXIyKys7CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIGNvbnRlbnQKICAgICAgICBmb3IgbXkgJFJvdyAoIDEgLi4gKCAkQ291bnRlcjEgLSAxICkgKSB7CiAgICAgICAgICAgIGZvciBteSAkQ29sdW1uICggMSAuLiAoICRDb3VudGVyMiAtIDEgKSApIHsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3Qga2V5cwogICAgICAgICAgICAgICAgbXkgJEltcGFjdEtleSAgICAgID0gJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlswXS0+e0ltcGFjdEtleX07CiAgICAgICAgICAgICAgICBteSAkQ3JpdGljYWxpdHlLZXkgPSAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WyRDb2x1bW5dLT57Q3JpdGljYWxpdHlLZXl9OwoKICAgICAgICAgICAgICAgICMgYnVpbGQgZmllbGQgbmFtZSBmb3IgcHJpb3JpdHkgaWQKICAgICAgICAgICAgICAgIG15ICRGaWVsZE5hbWUgPSAiUHJpb3JpdHlJRCIgLiAkSW1wYWN0S2V5IC4gJy0nIC4gJENyaXRpY2FsaXR5S2V5OwoKICAgICAgICAgICAgICAgICMgY2xlYW4gdXAgYWxsIHdoaXRlc3BhY2VzIGJlY2F1c2UgdGhleSBhcmUgbm90IGFsbG93ZWQgaW4gSFRNTCBJRC1BdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAkRmllbGROYW1lID1+IHN7IFxzKyB9e31neG1zOwoKICAgICAgICAgICAgICAgICMgY3JlYXRlIG9wdGlvbiBzdHJpbmcKICAgICAgICAgICAgICAgIG15ICRPcHRpb25TdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkRmllbGROYW1lLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgPT4gXCVQcmlvcml0eUxpc3QsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkQWxsb2NhdGVEYXRhLT57JEltcGFjdEtleX0tPnskQ3JpdGljYWxpdHlLZXl9IHx8ICcnLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WyRDb2x1bW5dLT57T3B0aW9uU3RyZ30gPSAkT3B0aW9uU3RyZzsKICAgICAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0tPntDbGFzc30gICAgICA9ICdDb250ZW50JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRSb3cgKCAwIC4uICQjeyRBbGxvY2F0ZU1hdHJpeH0gKSB7CgogICAgICAgICAgICBpZiAoICRSb3cgIT0gMCApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdSb3cnICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciBteSAkQ29sdW1uICggMCAuLiAkI3sgJEFsbG9jYXRlTWF0cml4LT5bJFJvd10gfSApIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSByb3cgaXMgaGVhZGVyCiAgICAgICAgICAgICAgICBpZiAoICRSb3cgPT0gMCApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ29sdW1uID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyQ29sdW1uRGVzY3JpcHRpb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WyRDb2x1bW5dLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdIZWFkZXJDZWxsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlskQ29sdW1uXSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiB0aGUgY29sdW1uIGlzIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICBlbHNpZiAoICRDb2x1bW4gPT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnRGVzY3JpcHRpb25DZWxsJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WyRDb2x1bW5dLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQ29udGVudENlbGwnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyIGFuZCBuYXZiYXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JVFNNQ0lQQWxsb2NhdGUnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgoxOwo=</File>
        <File Location="Kernel/Modules/AdminService.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBlYTIxMTkwMjEzMGNhNWI3OTZkOTY2ODQ1OTcwY2ZjNTQ2NDQ0NTQ4IC0gS2VybmVsL01vZHVsZXMvQWRtaW5TZXJ2aWNlLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pblNlcnZpY2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKIyBFTyBJVFNNQ29yZQoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIHNldCBwcmVmIGZvciBjb2x1bW5zIGtleQogICAgJFNlbGYtPntQcmVmS2V5SW5jbHVkZUludmFsaWR9ID0gJ0luY2x1ZGVJbnZhbGlkJyAuICctJyAuICRTZWxmLT57QWN0aW9ufTsKCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRQcmVmZXJlbmNlcygKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSA9ICRQcmVmZXJlbmNlc3sgJFNlbGYtPntQcmVmS2V5SW5jbHVkZUludmFsaWR9IH07CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkUGFyYW1PYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCiAgICAkUGFyYW17SW5jbHVkZUludmFsaWR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0luY2x1ZGVJbnZhbGlkJyApOwoKICAgIGlmICggZGVmaW5lZCAkUGFyYW17SW5jbHVkZUludmFsaWR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlNldFByZWZlcmVuY2VzKAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBLZXkgICAgPT4gJFNlbGYtPntQcmVmS2V5SW5jbHVkZUludmFsaWR9LAogICAgICAgICAgICBWYWx1ZSAgPT4gJFBhcmFte0luY2x1ZGVJbnZhbGlkfSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSA9ICRQYXJhbXtJbmNsdWRlSW52YWxpZH07CiAgICB9CgojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIGZvciBJVFNNQ3JpdGljYWxpdHkKICAgIG15ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbICdUaWNrZXQnIF0sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gewogICAgICAgICAgICBJVFNNQ3JpdGljYWxpdHkgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAlUG9zc2libGVWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiB9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICAkUG9zc2libGVWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30gfHwge307CiAgICB9CgogICAgIyBzZXQgdGhlIGNyaXRpY2FsaXR5IGxpc3QKICAgICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fSA9ICRQb3NzaWJsZVZhbHVlc3tJVFNNQ3JpdGljYWxpdHl9OwojIEVPIElUU01Db3JlCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzZXJ2aWNlIGVkaXQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZXJ2aWNlRWRpdCcgKSB7CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGh0bWwgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tOZXcoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2VydmljZSBzYXZlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VydmljZVNhdmUnICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAlR2V0UGFyYW07CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiMgICAgICAgIGZvciAocXcoU2VydmljZUlEIFBhcmVudElEIE5hbWUgVmFsaWRJRCBDb21tZW50KSkgewogICAgICAgIGZvciAocXcoU2VydmljZUlEIFBhcmVudElEIE5hbWUgVmFsaWRJRCBDb21tZW50IFR5cGVJRCBDcml0aWNhbGl0eSkpIHsKIyBFTyBJVFNNQ29yZQogICAgICAgICAgICAkR2V0UGFyYW17JF99ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJF8gKSB8fCAnJzsKICAgICAgICB9CgogICAgICAgIG15ICVFcnJvcjsKCiAgICAgICAgaWYgKCAhJEdldFBhcmFte05hbWV9ICkgewogICAgICAgICAgICAkRXJyb3J7J05hbWVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgbXkgJFNlcnZpY2VOYW1lID0gJyc7CiAgICAgICAgaWYgKCAkR2V0UGFyYW17UGFyZW50SUR9ICkgewogICAgICAgICAgICBteSAkUHJlZml4ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJEdldFBhcmFte1BhcmVudElEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkUHJlZml4KSB7CiAgICAgICAgICAgICAgICAkU2VydmljZU5hbWUgPSAkUHJlZml4IC4gIjo6IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkU2VydmljZU5hbWUgLj0gJEdldFBhcmFte05hbWV9OwoKICAgICAgICBpZiAoIGxlbmd0aCAkU2VydmljZU5hbWUgPiAyMDAgKSB7CiAgICAgICAgICAgICRFcnJvcnsnTmFtZUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcntMb25nTmFtZX0gICAgICA9IDE7CiAgICAgICAgfQoKICAgICAgICBpZiAoICElRXJyb3IgKSB7CgogICAgICAgICAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICAgICAgICAgIyBzYXZlIHRvIGRhdGFiYXNlCiAgICAgICAgICAgIGlmICggJEdldFBhcmFte1NlcnZpY2VJRH0gZXEgJ05FVycgKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17U2VydmljZUlEfSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcntNZXNzYWdlfSA9ICRMb2dPYmplY3QtPkdldExvZ0VudHJ5KAogICAgICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgPT4gJ01lc3NhZ2UnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcntNZXNzYWdlfSA9ICRMb2dPYmplY3QtPkdldExvZ0VudHJ5KAogICAgICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgPT4gJ01lc3NhZ2UnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISVFcnJvciApIHsKCiAgICAgICAgICAgICAgICAjIHVwZGF0ZSBwcmVmZXJlbmNlcwogICAgICAgICAgICAgICAgbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICAgICAgICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnU2VydmljZVByZWZlcmVuY2VzJykgKSB7CiAgICAgICAgICAgICAgICAgICAgJVByZWZlcmVuY2VzID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdTZXJ2aWNlUHJlZmVyZW5jZXMnKSB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIG15ICRJdGVtICggc29ydCBrZXlzICVQcmVmZXJlbmNlcyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpTZXJ2aWNlUHJlZmVyZW5jZXM6OkdlbmVyaWMnOwoKICAgICAgICAgICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTW9kdWxlLT5uZXcoCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtID0+ICRQcmVmZXJlbmNlc3skSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnICAgICAgPT4gJFNlbGYtPntEZWJ1Z30sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBteSAkTm90ZTsKICAgICAgICAgICAgICAgICAgICBteSBAUGFyYW1zID0gJE9iamVjdC0+UGFyYW0oIFNlcnZpY2VEYXRhID0+IFwlU2VydmljZURhdGEgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoQFBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICAgICBteSAlR2V0UGFyYW0gPSAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRQYXJhbUl0ZW0gKEBQYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15IEBBcnJheSA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICRQYXJhbUl0ZW0tPntOYW1lfSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkUGFyYW1JdGVtLT57TmFtZX0gfSA9IFxAQXJyYXk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgISRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VEYXRhID0+IFwlU2VydmljZURhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5vdGUgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+ICRPYmplY3QtPkVycm9yKCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGlmIHRoZSB1c2VyIHdvdWxkIGxpa2UgdG8gY29udGludWUgZWRpdGluZyB0aGUgc2VydmljZSwganVzdCByZWRpcmVjdCB0byB0aGUgZWRpdCBzY3JlZW4KICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICBkZWZpbmVkICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb250aW51ZUFmdGVyU2F2ZScgKQogICAgICAgICAgICAgICAgICAgICYmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApIGVxICcxJyApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZXJ2aWNlSUQnICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249U2VydmljZUVkaXQ7U2VydmljZUlEPSRJRCIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlIHJldHVybiB0byBvdmVydmlldwogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc29tZXRoaW5nIHdlbnQgd3JvbmcKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkRXJyb3J7TWVzc2FnZX0KICAgICAgICAgICAgPyAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgSW5mbyAgICAgPT4gJEVycm9ye01lc3NhZ2V9LAogICAgICAgICAgICApCiAgICAgICAgICAgIDogJyc7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJUVycm9yLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CgogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2VydmljZSBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIGlzIGVuYWJsZWQgdG8gdXNlIGl0IGhlcmUKICAgICAgICBpZiAoICEkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpICkgewogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICJQbGVhc2UgYWN0aXZhdGUgJXMgZmlyc3QhIiwgIlNlcnZpY2UiICksCiAgICAgICAgICAgICAgICBMaW5rICAgICA9PgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWRtaW5TeXN0ZW1Db25maWd1cmF0aW9uO1N1YmFjdGlvbj1WaWV3O1NldHRpbmc9VGlja2V0JTNBJTNBU2VydmljZTsnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCB9LAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25BZGQnICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0luY2x1ZGVJbnZhbGlkJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBJbmNsdWRlSW52YWxpZCAgICAgICAgPT4gJFNlbGYtPntJbmNsdWRlSW52YWxpZH0sCiAgICAgICAgICAgICAgICBJbmNsdWRlSW52YWxpZENoZWNrZWQgPT4gJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPyAnY2hlY2tlZCcgOiAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdGaWx0ZXInICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0ltcG9ydEV4cG9ydFdpZGdldCcgKTsKCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcgcmVzdWx0CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCiAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2VydmljZSBsaXN0CiAgICAgICAgbXkgJFNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0R2V0KAogICAgICAgICAgICBWYWxpZCAgPT4gJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPyAwIDogMSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGlmIHRoZXJlIGFyZSBhbnkgc2VydmljZXMgZGVmaW5lZCwgdGhleSBhcmUgc2hvd24KICAgICAgICBpZiAoIEB7JFNlcnZpY2VMaXN0fSApIHsKCiAgICAgICAgICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgICAgICAgICAgbXkgJVZhbGlkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKCiAgICAgICAgICAgICMgc29ydCB0aGUgc2VydmljZSBsaXN0IGJ5IGxvbmcgc2VydmljZSBuYW1lCiAgICAgICAgICAgIEB7JFNlcnZpY2VMaXN0fSA9IHNvcnQgeyAkYS0+e05hbWV9IC4gJzo6JyBjbXAgJGItPntOYW1lfSAuICc6OicgfSBAeyRTZXJ2aWNlTGlzdH07CgogICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VEYXRhICggQHskU2VydmljZUxpc3R9ICkgewoKICAgICAgICAgICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJXskU2VydmljZURhdGF9LAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZCA9PiAkVmFsaWRMaXN0eyAkU2VydmljZURhdGEtPntWYWxpZElEfSB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1zZyBpcyBkaXNwbGF5ZWQKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblNlcnZpY2UnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQogICAgcmV0dXJuOwp9CgpzdWIgX01hc2tOZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CiAgICBteSAlU2VydmljZURhdGE7CgogICAgIyBnZXQgcGFyYW1zCiAgICAkU2VydmljZURhdGF7U2VydmljZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTZXJ2aWNlSUQiICk7CiAgICBpZiAoICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9IG5lICdORVcnICkgewogICAgICAgICVTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRCAgID0+ICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9LAogICAgICAgICAgICBTZXJ2aWNlTmFtZSA9PiAkU2VydmljZURhdGF7TmFtZX0sCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdCcgKTsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25PdmVydmlldycgKTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBsaXN0IHR5cGUKICAgIG15ICRMaXN0VHlwZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKTsKCiAgICAjIGdlbmVyYXRlIFBhcmVudE9wdGlvblN0cmcKICAgIG15ICRLZWVwQ2hpbGRyZW4gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZTo6S2VlcENoaWxkcmVuJykgLy8gMDsKICAgIG15ICVTZXJ2aWNlTGlzdCAgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3QoCiAgICAgICAgVmFsaWQgICAgICAgID0+ICEkS2VlcENoaWxkcmVuLAogICAgICAgIEtlZXBDaGlsZHJlbiA9PiAkS2VlcENoaWxkcmVuLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgJFNlcnZpY2VEYXRhe1BhcmVudE9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgICAgPT4gXCVTZXJ2aWNlTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnUGFyZW50SUQnLAogICAgICAgIFNlbGVjdGVkSUQgICAgID0+ICRQYXJhbXtQYXJlbnRJRH0gfHwgJFNlcnZpY2VEYXRhe1BhcmVudElEfSwKICAgICAgICBQb3NzaWJsZU5vbmUgICA9PiAxLAogICAgICAgIFRyZWVWaWV3ICAgICAgID0+ICggJExpc3RUeXBlIGVxICd0cmVlJyApID8gMSA6IDAsCiAgICAgICAgRGlzYWJsZWRCcmFuY2ggPT4gJFNlcnZpY2VEYXRhe05hbWV9LAogICAgICAgIFRyYW5zbGF0aW9uICAgID0+IDAsCiAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgIyBnZW5lcmF0ZSBUeXBlT3B0aW9uU3RyZwogICAgbXkgJFR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICk7CgogICAgIyBidWlsZCB0aGUgdHlwZSBkcm9wZG93bgogICAgJFNlcnZpY2VEYXRhe1R5cGVPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gJFR5cGVMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17VHlwZUlEfSB8fCAkU2VydmljZURhdGF7VHlwZUlEfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGJ1aWxkIHRoZSBjcml0aWNhbGl0eSBkcm9wZG93bgogICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5T3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+ICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fSwKICAgICAgICBOYW1lICAgICAgID0+ICdDcml0aWNhbGl0eScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17Q3JpdGljYWxpdHl9IHx8ICRTZXJ2aWNlRGF0YXtDcml0aWNhbGl0eX0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CiMgRU8gSVRTTUNvcmUKCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICRTZXJ2aWNlRGF0YXtWYWxpZE9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRTZXJ2aWNlRGF0YXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBvdXRwdXQgc2VydmljZSBlZGl0CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTZXJ2aWNlRWRpdCcsCiAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJVNlcnZpY2VEYXRhLCB9LAogICAgKTsKCiAgICAjIHNob3cgZWFjaCBwcmVmZXJlbmNlcyBzZXR0aW5nCiAgICBteSAlUHJlZmVyZW5jZXMgPSAoKTsKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdTZXJ2aWNlUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NlcnZpY2VQcmVmZXJlbmNlcycpIH07CiAgICB9CiAgICBmb3IgbXkgJEl0ZW0gKCBzb3J0IGtleXMgJVByZWZlcmVuY2VzICkgewogICAgICAgIG15ICRNb2R1bGUgPSAkUHJlZmVyZW5jZXN7JEl0ZW19LT57TW9kdWxlfQogICAgICAgICAgICB8fCAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlNlcnZpY2VQcmVmZXJlbmNlczo6R2VuZXJpYyc7CgogICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCRNb2R1bGUpICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgIH0KICAgICAgICBteSAkT2JqZWN0ID0gJE1vZHVsZS0+bmV3KAogICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAkUHJlZmVyZW5jZXN7JEl0ZW19LAogICAgICAgICAgICBEZWJ1ZyAgICAgID0+ICRTZWxmLT57RGVidWd9LAogICAgICAgICk7CiAgICAgICAgbXkgQFBhcmFtcyA9ICRPYmplY3QtPlBhcmFtKCBTZXJ2aWNlRGF0YSA9PiBcJVNlcnZpY2VEYXRhICk7CiAgICAgICAgaWYgKEBQYXJhbXMpIHsKICAgICAgICAgICAgZm9yIG15ICRQYXJhbUl0ZW0gKEBQYXJhbXMpIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0l0ZW0nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIHJlZiggJFBhcmFtSXRlbS0+e0RhdGF9ICkgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICAgICAgfHwgcmVmKCAkUHJlZmVyZW5jZXN7JEl0ZW19LT57RGF0YX0gKSBlcSAnSEFTSCcKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJUJ1aWxkU2VsZWN0aW9uUGFyYW1zID0gKAogICAgICAgICAgICAgICAgICAgICAgICAleyAkUHJlZmVyZW5jZXN7JEl0ZW19IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBhcmFtSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkQnVpbGRTZWxlY3Rpb25QYXJhbXN7Q2xhc3N9ID0gam9pbiggJyAnLCAkQnVpbGRTZWxlY3Rpb25QYXJhbXN7Q2xhc3N9IC8vICcnLCAnTW9kZXJuaXplJyApOwoKICAgICAgICAgICAgICAgICAgICAkUGFyYW1JdGVtLT57J09wdGlvbid9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICVCdWlsZFNlbGVjdGlvblBhcmFtcywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW1JdGVtLT57QmxvY2t9IHx8ICRQcmVmZXJlbmNlc3skSXRlbX0tPntCbG9ja30gfHwgJ09wdGlvbicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICV7ICRQcmVmZXJlbmNlc3skSXRlbX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskUGFyYW1JdGVtfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU2VydmljZScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0KICAgICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Modules/AdminSLA.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBlYTIxMTkwMjEzMGNhNWI3OTZkOTY2ODQ1OTcwY2ZjNTQ2NDQ0NTQ4IC0gS2VybmVsL01vZHVsZXMvQWRtaW5TTEEucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluU0xBOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIHNldCBwcmVmIGZvciBjb2x1bW5zIGtleQogICAgJFNlbGYtPntQcmVmS2V5SW5jbHVkZUludmFsaWR9ID0gJ0luY2x1ZGVJbnZhbGlkJyAuICctJyAuICRTZWxmLT57QWN0aW9ufTsKCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRQcmVmZXJlbmNlcygKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAkU2VsZi0+e0luY2x1ZGVJbnZhbGlkfSA9ICRQcmVmZXJlbmNlc3sgJFNlbGYtPntQcmVmS2V5SW5jbHVkZUludmFsaWR9IH07CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRTTEFPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7CiAgICBteSAlRXJyb3IgICAgICAgID0gKCk7CgogICAgJFBhcmFte0luY2x1ZGVJbnZhbGlkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJbmNsdWRlSW52YWxpZCcgKTsKCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte0luY2x1ZGVJbnZhbGlkfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgS2V5ICAgID0+ICRTZWxmLT57UHJlZktleUluY2x1ZGVJbnZhbGlkfSwKICAgICAgICAgICAgVmFsdWUgID0+ICRQYXJhbXtJbmNsdWRlSW52YWxpZH0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPSAkUGFyYW17SW5jbHVkZUludmFsaWR9OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2xhIGVkaXQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTTEFFZGl0JyApIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBTdWJhY3Rpb24gPT4gJFNlbGYtPntTdWJhY3Rpb259LAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzbGEgc2F2ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NMQVNhdmUnICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAlR2V0UGFyYW07CiAgICAgICAgZm9yIG15ICRQYXJhbSAoCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiMgICAgICAgICAgICBxdyhTTEFJRCBOYW1lIENhbGVuZGFyIEZpcnN0UmVzcG9uc2VUaW1lIEZpcnN0UmVzcG9uc2VOb3RpZnkgU29sdXRpb25UaW1lIFNvbHV0aW9uTm90aWZ5IFVwZGF0ZVRpbWUgVXBkYXRlTm90aWZ5IFZhbGlkSUQgQ29tbWVudCkKICAgICAgICAgICAgcXcoU0xBSUQgTmFtZSBDYWxlbmRhciBGaXJzdFJlc3BvbnNlVGltZSBGaXJzdFJlc3BvbnNlTm90aWZ5IFNvbHV0aW9uVGltZSBTb2x1dGlvbk5vdGlmeSBVcGRhdGVUaW1lIFVwZGF0ZU5vdGlmeSBWYWxpZElEIENvbW1lbnQgVHlwZUlEIE1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzKQojIEVPIElUU01Db3JlCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW19ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgICAgICVFcnJvciA9ICgpOwogICAgICAgIGlmICggISRHZXRQYXJhbXtOYW1lfSApIHsKICAgICAgICAgICAgJEVycm9yeydOYW1lSW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgICAgICMgaWYgbm8gZXJyb3JzIG9jY3VycmVkCiAgICAgICAgaWYgKCAhJUVycm9yICkgewoKICAgICAgICAgICAgIyBnZXQgc2VydmljZSBpZHMKICAgICAgICAgICAgbXkgQFNlcnZpY2VJRHMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnU2VydmljZUlEcycgKTsKICAgICAgICAgICAgJEdldFBhcmFte1NlcnZpY2VJRHN9ID0gXEBTZXJ2aWNlSURzOwoKICAgICAgICAgICAgIyBzYXZlIHRvIGRhdGFiYXNlCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtTTEFJRH0gKSB7CgogICAgICAgICAgICAgICAgIyBhZGQgYSBuZXcgc2xhCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17U0xBSUR9ID0gJFNMQU9iamVjdC0+U0xBQWRkKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtTTEFJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9ye01lc3NhZ2V9ID0gJExvZ09iamVjdC0+R2V0TG9nRW50cnkoCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCA9PiAnTWVzc2FnZScsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgc2xhCiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTTEFPYmplY3QtPlNMQVVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TWVzc2FnZX0gPSAkTG9nT2JqZWN0LT5HZXRMb2dFbnRyeSgKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICElRXJyb3IgKSB7CgogICAgICAgICAgICAgICAgIyB1cGRhdGUgcHJlZmVyZW5jZXMKICAgICAgICAgICAgICAgIG15ICVTTEFEYXRhID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICAgICAgICAgIFNMQUlEICA9PiAkR2V0UGFyYW17U0xBSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICAgICAgICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnU0xBUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAgICAgICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NMQVByZWZlcmVuY2VzJykgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciBteSAkSXRlbSAoIHNvcnQga2V5cyAlUHJlZmVyZW5jZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJE1vZHVsZSA9ICRQcmVmZXJlbmNlc3skSXRlbX0tPntNb2R1bGV9CiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6U0xBUHJlZmVyZW5jZXM6OkdlbmVyaWMnOwoKICAgICAgICAgICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTW9kdWxlLT5uZXcoCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWdJdGVtID0+ICRQcmVmZXJlbmNlc3skSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnICAgICAgPT4gJFNlbGYtPntEZWJ1Z30sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBteSAkTm90ZTsKICAgICAgICAgICAgICAgICAgICBteSBAUGFyYW1zID0gJE9iamVjdC0+UGFyYW0oIFNMQURhdGEgPT4gXCVTTEFEYXRhICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKEBQYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSBAQXJyYXkgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW1JdGVtLT57TmFtZX0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFBhcmFtSXRlbS0+e05hbWV9IH0gPSBcQEFycmF5OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICEkT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0gPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTEFEYXRhICA9PiBcJVNMQURhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5vdGUgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCBJbmZvID0+ICRPYmplY3QtPkVycm9yKCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGlmIHRoZSB1c2VyIHdvdWxkIGxpa2UgdG8gY29udGludWUgZWRpdGluZyB0aGUgU0xBLCBqdXN0IHJlZGlyZWN0IHRvIHRoZSBlZGl0IHNjcmVlbgogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIGRlZmluZWQgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvbnRpbnVlQWZ0ZXJTYXZlJyApCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkgZXEgJzEnICkKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249U0xBRWRpdDtTTEFJRD0kR2V0UGFyYW17U0xBSUR9IgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgcmV0dXJuIHRvIG92ZXJ2aWV3CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJEVycm9ye01lc3NhZ2V9CiAgICAgICAgICAgID8gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgIEluZm8gICAgID0+ICRFcnJvcntNZXNzYWdlfSwKICAgICAgICAgICAgKQogICAgICAgICAgICA6ICcnOwoKICAgICAgICAjIGh0bWwgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tOZXcoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAlRXJyb3IsCiAgICAgICAgKTsKCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNsYSBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIGlzIGVuYWJsZWQgdG8gdXNlIGl0IGhlcmUKICAgICAgICBpZiAoICEkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpICkgewogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICJQbGVhc2UgYWN0aXZhdGUgJXMgZmlyc3QhIiwgIlNlcnZpY2UiICksCiAgICAgICAgICAgICAgICBMaW5rICAgICA9PgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWRtaW5TeXN0ZW1Db25maWd1cmF0aW9uO1N1YmFjdGlvbj1WaWV3O1NldHRpbmc9VGlja2V0JTNBJTNBU2VydmljZTsnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdCcgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uQWRkJyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdJbmNsdWRlSW52YWxpZCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgSW5jbHVkZUludmFsaWQgICAgICAgID0+ICRTZWxmLT57SW5jbHVkZUludmFsaWR9LAogICAgICAgICAgICAgICAgSW5jbHVkZUludmFsaWRDaGVja2VkID0+ICRTZWxmLT57SW5jbHVkZUludmFsaWR9ID8gJ2NoZWNrZWQnIDogJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnRmlsdGVyJyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdJbXBvcnRFeHBvcnRXaWRnZXQnICk7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJlc3VsdAogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3QnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgICAgICBteSAlU2VydmljZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdCgKICAgICAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdmFsaWQgbGlzdAogICAgICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CgogICAgICAgICMgZ2V0IHNsYSBsaXN0CiAgICAgICAgbXkgJVNMQUxpc3QgPSAkU0xBT2JqZWN0LT5TTEFMaXN0KAogICAgICAgICAgICBWYWxpZCAgPT4gJFNlbGYtPntJbmNsdWRlSW52YWxpZH0gPyAwIDogMSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGlmIHRoZXJlIGFyZSBhbnkgU0xBJ3MgZGVmaW5lZCwgdGhleSBhcmUgc2hvd24KICAgICAgICBpZiAoJVNMQUxpc3QpIHsKICAgICAgICAgICAgU0xBSUQ6CiAgICAgICAgICAgIGZvciBteSAkU0xBSUQgKCBzb3J0IHsgbGMgJFNMQUxpc3R7JGF9IGNtcCBsYyAkU0xBTGlzdHskYn0gfSBrZXlzICVTTEFMaXN0ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBzbGEgZGF0YQogICAgICAgICAgICAgICAgbXkgJVNMQURhdGEgPSAkU0xBT2JqZWN0LT5TTEFHZXQoCiAgICAgICAgICAgICAgICAgICAgU0xBSUQgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIHRoZSBzZXJ2aWNlIGxpc3QKICAgICAgICAgICAgICAgIG15IEBTZXJ2aWNlTGlzdDsKICAgICAgICAgICAgICAgIGZvciBteSAkU2VydmljZUlEICgKICAgICAgICAgICAgICAgICAgICBzb3J0IHsgbGMgJFNlcnZpY2VMaXN0eyRhfSBjbXAgbGMgJFNlcnZpY2VMaXN0eyRifSB9CiAgICAgICAgICAgICAgICAgICAgQHsgJFNMQURhdGF7U2VydmljZUlEc30gfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTZXJ2aWNlTGlzdCwgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9IHx8ICctJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyBsaXN0IHJvdwogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVNMQURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJFNlcnZpY2VMaXN0WzBdIHx8ICctJywKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgICA9PiAkVmFsaWRMaXN0eyAkU0xBRGF0YXtWYWxpZElEfSB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG5leHQgU0xBSUQgaWYgc2NhbGFyIEBTZXJ2aWNlTGlzdCA8PSAxOwoKICAgICAgICAgICAgICAgICMgcmVtb3ZlIHRoZSBmaXJzdCBzZXJ2aWNlIGlkCiAgICAgICAgICAgICAgICBzaGlmdCBAU2VydmljZUxpc3Q7CgogICAgICAgICAgICAgICAgZm9yIG15ICRTZXJ2aWNlTmFtZSAoQFNlcnZpY2VMaXN0KSB7CgogICAgICAgICAgICAgICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IGxpc3Qgcm93CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdFJvdycsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1zZyBpcyBkaXNwbGF5ZWQKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblNMQScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCnN1YiBfTWFza05ldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVTTEFEYXRhOwogICAgJFNMQURhdGF7U0xBSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NMQUlEJyApIHx8ICcnOwoKICAgIGlmICggJFNMQURhdGF7U0xBSUR9ICkgewoKICAgICAgICAjIGdldCBzbGEgZGF0YQogICAgICAgICVTTEFEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFHZXQoCiAgICAgICAgICAgIFNMQUlEICA9PiAkU0xBRGF0YXtTTEFJRH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTTEFEYXRhe1NlcnZpY2VJRH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VydmljZUlEJyApOwogICAgfQoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGxpc3QgdHlwZQogICAgbXkgJExpc3RUeXBlID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpOwoKICAgICMgZ2V0IHNlcnZpY2UgbGlzdAogICAgbXkgJVNlcnZpY2VMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUxpc3QoCiAgICAgICAgVmFsaWQgICAgICAgID0+IDEsCiAgICAgICAgS2VlcENoaWxkcmVuID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlOjpLZWVwQ2hpbGRyZW4nKSAvLyAwLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBnZW5lcmF0ZSBTZXJ2aWNlT3B0aW9uU3RyZwogICAgJFBhcmFte1NlcnZpY2VPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+IFwlU2VydmljZUxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ1NlcnZpY2VJRHMnLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRTTEFEYXRhe1NlcnZpY2VJRHN9IHx8IFtdLAogICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICAgPT4gNSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIFRyZWVWaWV3ICAgID0+ICggJExpc3RUeXBlIGVxICd0cmVlJyApID8gMSA6IDAsCiAgICAgICAgTWF4ICAgICAgICAgPT4gMjAwLAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICAgICAjIGdlbmVyYXRlIFR5cGVPcHRpb25TdHJnCiAgICAgICAgbXkgJFR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKICAgICAgICApOwogICAgICAgICRQYXJhbXtUeXBlT3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICA9PiAkVHlwZUxpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFNMQURhdGF7VHlwZUlEfSwKICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwojIEVPIElUU01Db3JlCgogICAgIyBnZW5lcmF0ZSBDYWxlbmRhck9wdGlvblN0cmcKICAgIG15ICVDYWxlbmRhckxpc3Q7CgogICAgbXkgJE1heGltdW0gPSAkQ29uZmlnT2JqZWN0LT5HZXQoIk1heGltdW1DYWxlbmRhck51bWJlciIpIHx8IDUwOwoKICAgIGZvciBteSAkQ2FsZW5kYXJOdW1iZXIgKCAnJywgMSAuLiAkTWF4aW11bSApIHsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgiVGltZVZhY2F0aW9uRGF5czo6Q2FsZW5kYXIkQ2FsZW5kYXJOdW1iZXIiKSApIHsKICAgICAgICAgICAgJENhbGVuZGFyTGlzdHskQ2FsZW5kYXJOdW1iZXJ9ID0gIkNhbGVuZGFyICRDYWxlbmRhck51bWJlciAtICIKICAgICAgICAgICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCAiVGltZVpvbmU6OkNhbGVuZGFyIiAuICRDYWxlbmRhck51bWJlciAuICJOYW1lIiApOwogICAgICAgIH0KICAgIH0KICAgICRTTEFEYXRhe0NhbGVuZGFyT3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVDYWxlbmRhckxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdDYWxlbmRhcicsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtDYWxlbmRhcn0gfHwgJFNMQURhdGF7Q2FsZW5kYXJ9LAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CiAgICBteSAlTm90aWZ5TGV2ZWxMaXN0ID0gKAogICAgICAgIDEwID0+ICcxMCUnLAogICAgICAgIDIwID0+ICcyMCUnLAogICAgICAgIDMwID0+ICczMCUnLAogICAgICAgIDQwID0+ICc0MCUnLAogICAgICAgIDUwID0+ICc1MCUnLAogICAgICAgIDYwID0+ICc2MCUnLAogICAgICAgIDcwID0+ICc3MCUnLAogICAgICAgIDgwID0+ICc4MCUnLAogICAgICAgIDkwID0+ICc5MCUnLAogICAgKTsKICAgICRTTEFEYXRhe0ZpcnN0UmVzcG9uc2VOb3RpZnlPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcJU5vdGlmeUxldmVsTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ0ZpcnN0UmVzcG9uc2VOb3RpZnknLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0gfHwgJFNMQURhdGF7Rmlyc3RSZXNwb25zZU5vdGlmeX0sCiAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKICAgICRTTEFEYXRhe1VwZGF0ZU5vdGlmeU9wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlTm90aWZ5TGV2ZWxMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnVXBkYXRlTm90aWZ5JywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1VwZGF0ZU5vdGlmeX0gfHwgJFNMQURhdGF7VXBkYXRlTm90aWZ5fSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwogICAgJFNMQURhdGF7U29sdXRpb25Ob3RpZnlPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcJU5vdGlmeUxldmVsTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1NvbHV0aW9uTm90aWZ5JywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1NvbHV0aW9uTm90aWZ5fSB8fCAkU0xBRGF0YXtTb2x1dGlvbk5vdGlmeX0sCiAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICRTTEFEYXRhe1ZhbGlkT3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlVmFsaWRMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1ZhbGlkSUR9IHx8ICRTTEFEYXRhe1ZhbGlkSUR9IHx8ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIG91dHB1dCBzbGEgZWRpdAogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBTTEFJRCAgICAgPT4gJFNMQURhdGF7U0xBSUR9LAogICAgICAgICAgICBTTEFOYW1lICAgPT4gJFNMQURhdGF7TmFtZX0sCiAgICAgICAgICAgIFN1YmFjdGlvbiA9PiAkUGFyYW17U3ViYWN0aW9ufSwKICAgICAgICAgICAgJVBhcmFtCiAgICAgICAgfSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU0xBRWRpdCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJVNMQURhdGEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBzaG93cyBoZWFkZXIKICAgIGlmICggJFNMQURhdGF7U0xBSUR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJFZGl0JyApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0hlYWRlckFkZCcgKTsKICAgIH0KCiAgICAjIHNob3cgZWFjaCBwcmVmZXJlbmNlcyBzZXR0aW5nCiAgICBteSAlUHJlZmVyZW5jZXMgPSAoKTsKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdTTEFQcmVmZXJlbmNlcycpICkgewogICAgICAgICVQcmVmZXJlbmNlcyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnU0xBUHJlZmVyZW5jZXMnKSB9OwogICAgfQogICAgZm9yIG15ICRJdGVtICggc29ydCBrZXlzICVQcmVmZXJlbmNlcyApIHsKICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgfHwgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpTTEFQcmVmZXJlbmNlczo6R2VuZXJpYyc7CgogICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCRNb2R1bGUpICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgIH0KICAgICAgICBteSAkT2JqZWN0ID0gJE1vZHVsZS0+bmV3KAogICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAkUHJlZmVyZW5jZXN7JEl0ZW19LAogICAgICAgICAgICBEZWJ1ZyAgICAgID0+ICRTZWxmLT57RGVidWd9LAogICAgICAgICk7CiAgICAgICAgbXkgQFBhcmFtcyA9ICRPYmplY3QtPlBhcmFtKCBTTEFEYXRhID0+IFwlU0xBRGF0YSApOwogICAgICAgIGlmIChAUGFyYW1zKSB7CiAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTTEFJdGVtJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICByZWYoICRQYXJhbUl0ZW0tPntEYXRhfSApIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgIHx8IHJlZiggJFByZWZlcmVuY2VzeyRJdGVtfS0+e0RhdGF9ICkgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICVCdWlsZFNlbGVjdGlvblBhcmFtcyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFByZWZlcmVuY2VzeyRJdGVtfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAleyRQYXJhbUl0ZW19LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJEJ1aWxkU2VsZWN0aW9uUGFyYW1ze0NsYXNzfSA9IGpvaW4oICcgJywgJEJ1aWxkU2VsZWN0aW9uUGFyYW1ze0NsYXNzfSAvLyAnJywgJ01vZGVybml6ZScgKTsKCiAgICAgICAgICAgICAgICAgICAgJFBhcmFtSXRlbS0+eydPcHRpb24nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAlQnVpbGRTZWxlY3Rpb25QYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFtSXRlbS0+e0Jsb2NrfSB8fCAkUHJlZmVyZW5jZXN7JEl0ZW19LT57QmxvY2t9IHx8ICdPcHRpb24nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyAkUHJlZmVyZW5jZXN7JEl0ZW19IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBhcmFtSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgb3V0cHV0IGJhY2sKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblNMQScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0KICAgICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Modules/AgentTicketActionCommon.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBiNGNlMTgzMjcxZTE1MjY2MTQyMTkxMjY5MzNmMjA0YzAxOTZhYjM0IC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRBY3Rpb25Db21tb24ucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50VGlja2V0QWN0aW9uQ29tbW9uOwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBuYW1lc3BhY2U6OmF1dG9jbGVhbjsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwp1c2UgTGlzdDo6VXRpbCBxdyhhbnkgZmlyc3QpOwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OkVtYWlsUGFyc2VyICAgKCk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IGJsZXNzIHslUGFyYW19LCAkVHlwZTsKCiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBUcnkgdG8gbG9hZCBkcmFmdCBpZiByZXF1ZXN0ZWQuCiAgICBpZiAoCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKS0+e0Zvcm1EcmFmdH0KICAgICAgICAmJiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTG9hZEZvcm1EcmFmdCcgKQogICAgICAgICYmICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGb3JtRHJhZnRJRCcgKQogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+e0xvYWRlZEZvcm1EcmFmdElEfSA9ICRQYXJhbU9iamVjdC0+TG9hZEZvcm1EcmFmdCgKICAgICAgICAgICAgRm9ybURyYWZ0SUQgPT4gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1EcmFmdElEJyApLAogICAgICAgICAgICBPYmplY3RJRCAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGFydGljbGUgZm9yIHdob20gdGhpcyBzaG91bGQgYmUgYSByZXBseSwgaWYgYXZhaWxhYmxlCiAgICBteSAkUmVwbHlUb0FydGljbGUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUmVwbHlUb0FydGljbGUnICkgfHwgJyc7CiAgICBteSAkVGlja2V0SUQgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0SUQnICkgICAgICAgfHwgJyc7CgogICAgIyBjaGVjayBpZiBSZXBseVRvQXJ0aWNsZSByZWFsbHkgYmVsb25ncyB0byB0aGUgdGlja2V0CiAgICBteSAlUmVwbHlUb0FydGljbGVDb250ZW50OwogICAgaWYgKCRSZXBseVRvQXJ0aWNsZSkgewoKICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFJlcGx5VG9BcnRpY2xlLAogICAgICAgICk7CiAgICAgICAgJVJlcGx5VG9BcnRpY2xlQ29udGVudCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgPT4gJFJlcGx5VG9BcnRpY2xlLAogICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9CiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0gICAgICAgID0gJFJlcGx5VG9BcnRpY2xlOwogICAgICAgICRTZWxmLT57UmVwbHlUb0FydGljbGVDb250ZW50fSA9IFwlUmVwbHlUb0FydGljbGVDb250ZW50OwoKICAgICAgICAjIGdldCBzZW5kZXIgb2Ygb3JpZ2luYWwgbm90ZSAodG8gaW5mb3JtIHNlbmRlciBhYm91dCBhbnN3ZXIpCiAgICAgICAgaWYgKCAkUmVwbHlUb0FydGljbGVDb250ZW50e0NyZWF0ZUJ5fSApIHsKICAgICAgICAgICAgbXkgQFJlcGx5VG9TZW5kZXJJRCA9ICggJFJlcGx5VG9BcnRpY2xlQ29udGVudHtDcmVhdGVCeX0gKTsKICAgICAgICAgICAgJFNlbGYtPntSZXBseVRvU2VuZGVyVXNlcklEfSA9IFxAUmVwbHlUb1NlbmRlcklEOwogICAgICAgIH0KCiAgICAgICAgIyBpZiBhcnRpY2xlIGJlbG9uZ3MgdG8gb3RoZXIgdGlja2V0LCBkb24ndCB1c2UgaXQgYXMgcmVwbHkKICAgICAgICBpZiAoICRSZXBseVRvQXJ0aWNsZUNvbnRlbnR7VGlja2V0SUR9IG5lICRTZWxmLT57VGlja2V0SUR9ICkgewogICAgICAgICAgICAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlfSA9ICIiOwogICAgICAgIH0KCiAgICAgICAgIyBpZiBhcnRpY2xlIGlzIG5vdCBvZiB0eXBlIG5vdGUtaW50ZXJuYWwsIGRvbid0IHVzZSBpdCBhcyByZXBseQogICAgICAgIGlmICgKICAgICAgICAgICAgJEFydGljbGVCYWNrZW5kT2JqZWN0LT5DaGFubmVsTmFtZUdldCgpIG5lICdJbnRlcm5hbCcKICAgICAgICAgICAgfHwgKAogICAgICAgICAgICAgICAgJEFydGljbGVCYWNrZW5kT2JqZWN0LT5DaGFubmVsTmFtZUdldCgpIGVxICdJbnRlcm5hbCcKICAgICAgICAgICAgICAgICYmICRSZXBseVRvQXJ0aWNsZUNvbnRlbnR7U2VuZGVyVHlwZX0gbmUgJ2FnZW50JwogICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRTZWxmLT57UmVwbHlUb0FydGljbGV9ID0gIiI7CiAgICAgICAgfQogICAgfQoKICAgICMgZnJvbnRlbmQgc3BlY2lmaWMgY29uZmlnCiAgICBteSAkQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCA9PiAxLAoKICAgICAgICAjIG9ubHkgc2NyZWVucyB0aGF0IGFkZCBub3RlcyBjYW4gbW9kaWZ5IEFydGljbGUgZHluYW1pYyBmaWVsZHMKICAgICAgICBPYmplY3RUeXBlICA9PiAkQ29uZmlnLT57Tm90ZX0gPyBbICdUaWNrZXQnLCAnQXJ0aWNsZScgXSA6IFsnVGlja2V0J10sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgIG15ICRUaWNrZXREZWZpbml0aW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6TWFzaycpLT5EZWZpbml0aW9uR2V0KAogICAgICAgIE1hc2sgPT4gJFNlbGYtPntBY3Rpb259LAogICAgKSB8fCB7fTsKCiAgICAjIGRlZmluaXRpb25zIGFyZSBzcGxpdCB1cCBiZWNhdXNlIGFydGljbGUgaXMgcmVuZGVyZWQgc2VwYXJhdGVseQogICAgJFNlbGYtPntUaWNrZXRNYXNrRGVmaW5pdGlvbn0gID0gJFRpY2tldERlZmluaXRpb24tPntNYXNrfTsKICAgICRTZWxmLT57QXJ0aWNsZU1hc2tEZWZpbml0aW9ufSA9IFtdOwogICAgJFNlbGYtPntEeW5hbWljRmllbGR9ICAgICAgICAgID0ge307CgogICAgIyBhbGlnbiBzeXNjb25maWcgYW5kIHRpY2tldCBtYXNrIGRhdGEgSQogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyAkRHluYW1pY0ZpZWxkTGlzdCAvLyBbXSB9ICkgewoKICAgICAgICAjIHNlcGFyYXRlIHRpY2tldCBhbmQgYXJ0aWNsZSB0eXBlIGR5bmFtaWMgZmllbGRzCiAgICAgICAgaWYgKCAkRHluYW1pY0ZpZWxkLT57T2JqZWN0VHlwZX0gZXEgJ1RpY2tldCcgKSB7CiAgICAgICAgICAgIGlmICggZXhpc3RzICRUaWNrZXREZWZpbml0aW9uLT57RHluYW1pY0ZpZWxkc317ICREeW5hbWljRmllbGQtPntOYW1lfSB9ICkgewogICAgICAgICAgICAgICAgbXkgJFBhcmFtZXRlcnMgPSBkZWxldGUgJFRpY2tldERlZmluaXRpb24tPntEeW5hbWljRmllbGRzfXsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gLy8ge307CgogICAgICAgICAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBrZXlzICRQYXJhbWV0ZXJzLT4lKiApIHsKICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkLT57JEF0dHJpYnV0ZX0gPSAkUGFyYW1ldGVycy0+eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHVzaCAkU2VsZi0+e1RpY2tldE1hc2tEZWZpbml0aW9ufS0+QCosIHsKICAgICAgICAgICAgICAgICAgICBERiAgICAgICAgPT4gJER5bmFtaWNGaWVsZC0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIE1hbmRhdG9yeSA9PiAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfXsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPT0gMiA/IDEgOiAwLAogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBpZiAoICRDb25maWctPntEeW5hbWljRmllbGR9eyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSA9PSAyICkgewogICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGQtPntNYW5kYXRvcnl9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHVzaCAkU2VsZi0+e0FydGljbGVNYXNrRGVmaW5pdGlvbn0tPkAqLCB7CiAgICAgICAgICAgICAgICBERiAgICAgICAgPT4gJER5bmFtaWNGaWVsZC0+e05hbWV9LAogICAgICAgICAgICAgICAgTWFuZGF0b3J5ID0+ICRDb25maWctPntEeW5hbWljRmllbGR9eyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSA9PSAyID8gMSA6IDAsCiAgICAgICAgICAgIH07CgogICAgICAgICAgICBpZiAoICRDb25maWctPntEeW5hbWljRmllbGR9eyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSA9PSAyICkgewogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZC0+e01hbmRhdG9yeX0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZH17ICREeW5hbWljRmllbGQtPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZDsKICAgIH0KCiAgICAjIGFsaWduIHN5c2NvbmZpZyBhbmQgdGlja2V0IG1hc2sgZGF0YSBJSQogICAgZm9yIG15ICREeW5hbWljRmllbGROYW1lICgga2V5cyAkVGlja2V0RGVmaW5pdGlvbi0+e0R5bmFtaWNGaWVsZHN9LT4lKiApIHsKICAgICAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZH17JER5bmFtaWNGaWVsZE5hbWV9ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICBOYW1lID0+ICREeW5hbWljRmllbGROYW1lLAogICAgICAgICk7CgogICAgICAgIG15ICRQYXJhbWV0ZXJzID0gJFRpY2tldERlZmluaXRpb24tPntEeW5hbWljRmllbGRzfXskRHluYW1pY0ZpZWxkTmFtZX0gLy8ge307CgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICgga2V5cyAkUGFyYW1ldGVycy0+JSogKSB7CiAgICAgICAgICAgICRTZWxmLT57RHluYW1pY0ZpZWxkfXskRHluYW1pY0ZpZWxkTmFtZX17JEF0dHJpYnV0ZX0gPSAkUGFyYW1ldGVycy0+eyRBdHRyaWJ1dGV9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBmb3JtIGlkCiAgICAkU2VsZi0+e0Zvcm1JRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpGb3JtQ2FjaGUnKS0+UHJlcGFyZUZvcm1JRCgKICAgICAgICBQYXJhbU9iamVjdCAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgIExheW91dE9iamVjdCA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyksCiAgICApOwoKICAgICMgbWV0aG9kcyB3aGljaCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgc3RhbmRhcmQgZmllbGRzCiAgICAkU2VsZi0+e0ZpZWxkTWV0aG9kc30gPSBbCiAgICAgICAgewogICAgICAgICAgICBGaWVsZElEID0+ICdEZXN0JywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRRdWV1ZXMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnTmV3VXNlcklEJywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRPd25lcnMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnTmV3UmVzcG9uc2libGVJRCcsCiAgICAgICAgICAgIE1ldGhvZCAgPT4gXCZfR2V0UmVzcG9uc2libGUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnTmV4dFN0YXRlSUQnLAogICAgICAgICAgICBNZXRob2QgID0+IFwmX0dldE5leHRTdGF0ZXMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgICAgIE1ldGhvZCAgPT4gXCZfR2V0UHJpb3JpdGllcwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBGaWVsZElEID0+ICdTZXJ2aWNlSUQnLAogICAgICAgICAgICBNZXRob2QgID0+IFwmX0dldFNlcnZpY2VzCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEZpZWxkSUQgPT4gJ1NMQUlEJywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRTTEFzCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEZpZWxkSUQgPT4gJ1N0YW5kYXJkVGVtcGxhdGVJRCcsCiAgICAgICAgICAgIE1ldGhvZCAgPT4gXCZfR2V0U3RhbmRhcmRUZW1wbGF0ZXMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnVHlwZUlEJywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRUeXBlcwogICAgICAgIH0sCiAgICBdOwoKICAgICMgZGVwZW5kZW5jaWVzIG9mIHN0YW5kYXJkIGZpZWxkcyB3aGljaCBhcmUgbm90IGRlZmluZWQgdmlhIEFDTHMKICAgICRTZWxmLT57SW50ZXJuYWxEZXBlbmRhbmN5fSA9IHsKICAgICAgICBEZXN0ID0+IHsKICAgICAgICAgICAgTmV3VXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE5ld1Jlc3BvbnNpYmxlSUQgICA9PiAxLAogICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gMSwKICAgICAgICB9LAogICAgICAgIFNlcnZpY2VJRCA9PiB7CiAgICAgICAgICAgIFNMQUlEICAgICA9PiAxLAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gMSwgICAgI0N1c3RvbWVyVXNlciB1cGRhdGVzIGNhbiBiZSBzdWJtaXR0ZWQgYXMgRWxlbWVudENoYW5nZWQ6IFNlcnZpY2VJRAogICAgICAgIH0sCiAgICAgICAgQ3VzdG9tZXJVc2VyID0+IHsKICAgICAgICAgICAgU2VydmljZUlEID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPd25lckFsbCA9PiB7CiAgICAgICAgICAgIE5ld1VzZXJJRCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgUmVzcG9uc2libGVBbGwgPT4gewogICAgICAgICAgICBOZXdSZXNwb25zaWJsZUlEID0+IDEsCiAgICAgICAgfSwKICAgIH07CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRUaWNrZXRPYmplY3QgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgIG15ICRDb25maWdPYmplY3QgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpGaWVsZFJlc3RyaWN0aW9ucycpOwogICAgbXkgJEFydGljbGVPYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkU2VsZi0+e1RpY2tldElEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBUaWNrZXRJRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgbXkgJEFjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgVHlwZSAgICAgPT4gJENvbmZpZy0+e1Blcm1pc3Npb259LAogICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfQogICAgKTsKCiAgICAjIGVycm9yIHNjcmVlbiwgZG9uJ3Qgc2hvdyB0aWNrZXQKICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyEnLCAkQ29uZmlnLT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IEFDTCByZXN0cmljdGlvbnMKICAgIG15ICVQb3NzaWJsZUFjdGlvbnMgPSAoIDEgPT4gJFNlbGYtPntBY3Rpb259ICk7CgogICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICBEYXRhICAgICAgICAgID0+IFwlUG9zc2libGVBY3Rpb25zLAogICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnQWN0aW9uJywKICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBteSAlQWNsQWN0aW9uID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsQWN0aW9uRGF0YSgpOwoKICAgICMgY2hlY2sgaWYgQUNMIHJlc3RyaWN0aW9ucyBleGlzdAogICAgaWYgKCRBQ0wpIHsKCiAgICAgICAgbXkgJUFjbEFjdGlvbkxvb2t1cCA9IHJldmVyc2UgJUFjbEFjdGlvbjsKCiAgICAgICAgIyBzaG93IGVycm9yIHNjcmVlbiBpZiBBQ0wgcHJvaGliaXRzIHRoaXMgYWN0aW9uCiAgICAgICAgaWYgKCAhJEFjbEFjdGlvbkxvb2t1cHsgJFNlbGYtPntBY3Rpb259IH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBDaGVjayBmb3IgZmFpbGVkIGRyYWZ0IGxvYWRpbmcgcmVxdWVzdC4KICAgIGlmICgKICAgICAgICAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTG9hZEZvcm1EcmFmdCcgKQogICAgICAgICYmICEkU2VsZi0+e0xvYWRlZEZvcm1EcmFmdElEfQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdMb2FkaW5nIGRyYWZ0IGZhaWxlZCEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICk7CgogICAgbXkgJExvYWRlZEZvcm1EcmFmdDsKICAgIGlmICggJFNlbGYtPntMb2FkZWRGb3JtRHJhZnRJRH0gKSB7CiAgICAgICAgJExvYWRlZEZvcm1EcmFmdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGb3JtRHJhZnQnKS0+Rm9ybURyYWZ0R2V0KAogICAgICAgICAgICBGb3JtRHJhZnRJRCA9PiAkU2VsZi0+e0xvYWRlZEZvcm1EcmFmdElEfSwKICAgICAgICAgICAgT2JqZWN0SUQgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEdldENvbnRlbnQgID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgbXkgQEFydGljbGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIE9ubHlMYXN0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKEBBcnRpY2xlcykgewogICAgICAgICAgICBteSAkTGFzdEFydGljbGUgPSAkQXJ0aWNsZXNbMF07CgogICAgICAgICAgICBteSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lOwogICAgICAgICAgICBpZiAoICRMYXN0QXJ0aWNsZS0+e0NyZWF0ZVRpbWV9ICkgewogICAgICAgICAgICAgICAgbXkgJExhc3RBcnRpY2xlU3lzdGVtVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRMYXN0QXJ0aWNsZS0+e0NyZWF0ZVRpbWV9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJExhc3RBcnRpY2xlU3lzdGVtVGltZSA9ICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWVPYmplY3QtPlRvRXBvY2goKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJEZvcm1EcmFmdFN5c3RlbVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkTG9hZGVkRm9ybURyYWZ0LT57Q2hhbmdlVGltZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkRm9ybURyYWZ0U3lzdGVtVGltZSA9ICRGb3JtRHJhZnRTeXN0ZW1UaW1lT2JqZWN0LT5Ub0Vwb2NoKCk7CgogICAgICAgICAgICBpZiAoICEkTGFzdEFydGljbGVTeXN0ZW1UaW1lIHx8ICRGb3JtRHJhZnRTeXN0ZW1UaW1lIDw9ICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWUgKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17Rm9ybURyYWZ0T3V0ZGF0ZWR9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCRMb2FkZWRGb3JtRHJhZnQpICkgewoKICAgICAgICAkTG9hZGVkRm9ybURyYWZ0LT57Q2hhbmdlQnlOYW1lfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJOYW1lKAogICAgICAgICAgICBVc2VySUQgPT4gJExvYWRlZEZvcm1EcmFmdC0+e0NoYW5nZUJ5fSwKICAgICAgICApOwogICAgfQoKICAgIG15ICVHZXRQYXJhbTsKICAgIG15IEBBcnRpY2xlQXR0YWNobWVudHM7CiAgICBteSAlQXJ0aWNsZURhdGE7CgogICAgIyBpZiB3ZSBhcmUgZWRpdGluZyBhbiBhcnRpY2xlCiAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUlEfSAmJiAhJFNlbGYtPntTdWJhY3Rpb259ICkgewoKICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KCBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSApOwoKICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+IDEKICAgICAgICApOwoKICAgICAgICAlQXJ0aWNsZURhdGEgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgIFJlYWxOYW1lcyAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0KICAgICAgICApOwoKICAgICAgICBpZiAoIGtleXMgJUFydGljbGVEYXRhICkgewogICAgICAgICAgICBAQXJ0aWNsZUF0dGFjaG1lbnRzID0gJFNlbGYtPl9Db3B5QXJ0aWNsZUF0dGFjaG1lbnRzVG9VcGxvYWRDYWNoZSgKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICVHZXRQYXJhbSA9ICRTZWxmLT5fTG9hZEFydGljbGVFZGl0KAogICAgICAgICAgICAgICAgQXJ0aWNsZURhdGEgICAgICAgICAgPT4gXCVBcnRpY2xlRGF0YSwKICAgICAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgICAgID0+IFwlVGlja2V0LAogICAgICAgICAgICAgICAgQXJ0aWNsZUJhY2tlbmRPYmplY3QgPT4gJEFydGljbGVCYWNrZW5kT2JqZWN0CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1Byb3BlcnRpZXMnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBGb3JtRHJhZnQgICAgICA9PiAkQ29uZmlnLT57Rm9ybURyYWZ0fSwKICAgICAgICAgICAgRm9ybURyYWZ0SUQgICAgPT4gJFNlbGYtPntMb2FkZWRGb3JtRHJhZnRJRH0sCiAgICAgICAgICAgIEZvcm1EcmFmdFRpdGxlID0+ICRMb2FkZWRGb3JtRHJhZnQgPyAkTG9hZGVkRm9ybURyYWZ0LT57VGl0bGV9IDogJycsCiAgICAgICAgICAgIEZvcm1EcmFmdE1ldGEgID0+ICRMb2FkZWRGb3JtRHJhZnQsCiAgICAgICAgICAgIEZvcm1JRCAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgUmVwbHlUb0FydGljbGUgPT4gJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0sCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgID0+ICRTZWxmLT57QXJ0aWNsZUlEfSB8fCAnJywKICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvdyByaWdodCBoZWFkZXIKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0hlYWRlcicgLiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgIEFydGljbGVUaXRsZSA9PiAkR2V0UGFyYW17U3ViamVjdH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgbG9jayBzdGF0ZQogICAgaWYgKCAkQ29uZmlnLT57UmVxdWlyZWRMb2NrfSApIHsKICAgICAgICBpZiAoICEkVGlja2V0T2JqZWN0LT5UaWNrZXRMb2NrR2V0KCBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSApICkgewoKICAgICAgICAgICAgbXkgJExvY2sgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRMb2NrU2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBMb2NrICAgICA9PiAnbG9jaycsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkTG9jaykgewoKICAgICAgICAgICAgICAgICMgU2V0IG5ldyBvd25lciBpZiB0aWNrZXQgb3duZXIgaXMgZGlmZmVyZW50IHRoZW4gbG9nZ2VkIHVzZXIuCiAgICAgICAgICAgICAgICBpZiAoICRUaWNrZXR7T3duZXJJRH0gIT0gJFNlbGYtPntVc2VySUR9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIFJlbWVtYmVyIHByZXZpb3VzIG93bmVyLCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gcmVzdG9yZSB0aWNrZXQgb3duZXIgb24gdW5kbyBhY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgJFBhcmFte1ByZXZpb3VzT3duZXJ9ID0gJFRpY2tldHtPd25lcklEfTsKCiAgICAgICAgICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0T3duZXJTZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgTmV3VXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgU2hvdyBsb2NrIHN0YXRlLgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHJvcGVydGllc0xvY2snLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkQWNjZXNzT2sgPSAkVGlja2V0T2JqZWN0LT5Pd25lckNoZWNrKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBPd25lcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkQWNjZXNzT2sgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gam9pbiAnJywKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnU21hbGwnLAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFRpY2tldHtOdW1iZXJ9LAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5Q2xhc3MgPT4gJ1BvcHVwJywKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPldhcm5pbmcoCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdTb3JyeSwgeW91IG5lZWQgdG8gYmUgdGhlIHRpY2tldCBvd25lciB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLicpLAogICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNoYW5nZSB0aGUgb3duZXIgZmlyc3QuJyksCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1NtYWxsJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNob3cgYmFjayBsaW5rIHdoZW4gdGhlIG93bmVyIGNoZWNrIHdhcyBvawogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldEJhY2snLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0QmFjaycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHBhcmFtcwogICAgUEFSQU1FVEVSOgogICAgZm9yIG15ICRLZXkgKAogICAgICAgIHF3KAogICAgICAgICAgICBOZXdTdGF0ZUlEIE5ld1ByaW9yaXR5SUQgVGltZVVuaXRzIElzVmlzaWJsZUZvckN1c3RvbWVyIFRpdGxlIEJvZHkgU3ViamVjdCBOZXdRdWV1ZUlECiAgICAgICAgICAgIFllYXIgTW9udGggRGF5IEhvdXIgTWludXRlIE5ld093bmVySUQgTmV3UmVzcG9uc2libGVJRCBUeXBlSUQgU2VydmljZUlEIFNMQUlECiAgICAgICAgICAgIFJlcGx5VG9BcnRpY2xlIFN0YW5kYXJkVGVtcGxhdGVJRCBDcmVhdGVBcnRpY2xlIEZvcm1EcmFmdElEIFRpdGxlCiAgICAgICAgKQogICAgICAgICkKICAgIHsKCiAgICAgICAgbmV4dCBQQVJBTUVURVIgaWYgJFNlbGYtPntBcnRpY2xlSUR9ICYmICEkU2VsZi0+e1N1YmFjdGlvbn0gJiYgKCAkS2V5IGVxICdCb2R5JyB8fCAkS2V5IGVxICdTdWJqZWN0JyApOwoKICAgICAgICAkR2V0UGFyYW17JEtleX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkS2V5ICk7CiAgICB9CgojIFJvdGhlciBPU1MgLyBJVFNNQ29yZSAtIGNhbGN1bGF0ZSBQcmlvcml0eSB2aWEgQ0lQIG1hdHJpeAogICAgbXkgJENJUENhbGN1bGF0ZSA9ICRDb25maWctPntQcmlvcml0eUJ5Q0lQfSAvLyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU006OkZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdCcpOwogICAgbXkgJFNlcnZpY2VPYmplY3Q7CiAgICBteSAkQ0lQQWxsb2NhdGVPYmplY3Q7CiAgICBpZiAoICRDSVBDYWxjdWxhdGUgKSB7CiAgICAgICAgJFNlcnZpY2VPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKICAgICAgICAkQ0lQQWxsb2NhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlJyk7CgogICAgICAgICRTZWxmLT57SW50ZXJuYWxEZXBlbmRhbmN5fXtTZXJ2aWNlSUR9e1ByaW9yaXR5SUR9ICAgICAgICAgICAgICAgICAgICA9IDE7CiAgICAgICAgJFNlbGYtPntJbnRlcm5hbERlcGVuZGFuY3l9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fXtQcmlvcml0eUlEfSAgICAgID0gMTsKICAgICAgICAkU2VsZi0+e0ludGVybmFsRGVwZW5kYW5jeX17RHluYW1pY0ZpZWxkX0lUU01Dcml0aWNhbGl0eX17UHJpb3JpdHlJRH0gPSAxOwogICAgfQojIEVPIElUU01Db3JlCgogICAgIyBBQ0wgY29tcGF0aWJpbGl0eSB0cmFuc2xhdGlvbgogICAgbXkgJUFDTENvbXBhdEdldFBhcmFtID0gKAogICAgICAgIFN0YXRlSUQgICAgICAgPT4gJEdldFBhcmFte05ld1N0YXRlSUR9LAogICAgICAgIFByaW9yaXR5SUQgICAgPT4gJEdldFBhcmFte05ld1ByaW9yaXR5SUR9LAogICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJEdldFBhcmFte05ld1F1ZXVlSUR9LAogICAgICAgIE93bmVySUQgICAgICAgPT4gJEdldFBhcmFte05ld093bmVySUR9LAogICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJEdldFBhcmFte05ld1Jlc3BvbnNpYmxlSUR9LAogICAgKTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGJhY2tlbmQgb2JqZWN0CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIGV4dHJhY3QgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZnJvbSB0aGUgd2ViIHJlcXVlc3QKICAgIG15ICVEeW5hbWljRmllbGRWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIHZhbHVlcyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIHVubGVzcyBJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgJER5bmFtaWNGaWVsZFZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICApOwogICAgfQoKICAgICMgY29udmVydCBkeW5hbWljIGZpZWxkIHZhbHVlcyBpbnRvIGEgc3RydWN0dXJlIGZvciBBQ0xzCiAgICB7CiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZEFDTFBhcmFtZXRlcnM7CiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkSXRlbSAoIHNvcnQga2V5cyAlRHluYW1pY0ZpZWxkVmFsdWVzICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCB1bmxlc3MgJER5bmFtaWNGaWVsZEl0ZW07CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIHVubGVzcyBkZWZpbmVkICREeW5hbWljRmllbGRWYWx1ZXN7JER5bmFtaWNGaWVsZEl0ZW19OwoKICAgICAgICAgICAgJER5bmFtaWNGaWVsZEFDTFBhcmFtZXRlcnN7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRJdGVtIH0gPSAkRHluYW1pY0ZpZWxkVmFsdWVzeyREeW5hbWljRmllbGRJdGVtfTsKICAgICAgICB9CiAgICAgICAgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gPSBcJUR5bmFtaWNGaWVsZEFDTFBhcmFtZXRlcnM7CiAgICB9CgogICAgIyB0cmFuc2Zvcm0gcGVuZGluZyB0aW1lLCB0aW1lIHN0YW1wIGJhc2VkIG9uIHVzZXIgdGltZSB6b25lCiAgICBpZiAoCiAgICAgICAgZGVmaW5lZCAkR2V0UGFyYW17WWVhcn0KICAgICAgICAmJiBkZWZpbmVkICRHZXRQYXJhbXtNb250aH0KICAgICAgICAmJiBkZWZpbmVkICRHZXRQYXJhbXtEYXl9CiAgICAgICAgJiYgZGVmaW5lZCAkR2V0UGFyYW17SG91cn0KICAgICAgICAmJiBkZWZpbmVkICRHZXRQYXJhbXtNaW51dGV9CiAgICAgICAgKQogICAgewogICAgICAgICVHZXRQYXJhbSA9ICRMYXlvdXRPYmplY3QtPlRyYW5zZm9ybURhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgcmV3cmFwIGJvZHkgaWYgbm8gcmljaCB0ZXh0IGlzIHVzZWQKICAgIGlmICggJEdldFBhcmFte0JvZHl9ICYmICEkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAkR2V0UGFyYW17Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5XcmFwUGxhaW5UZXh0KAogICAgICAgICAgICBNYXhDaGFyYWN0ZXJzID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlJyksCiAgICAgICAgICAgIFBsYWluVGV4dCAgICAgPT4gJEdldFBhcmFte0JvZHl9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdXBsb2FkIGNhY2hlIG9iamVjdAogICAgbXkgJFVwbG9hZENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGUnKTsKCiAgICBpZiAoCiAgICAgICAgJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdG9yZScKICAgICAgICB8fAogICAgICAgICRTZWxmLT57TG9hZGVkRm9ybURyYWZ0SUR9CiAgICAgICAgKQogICAgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1N0b3JlJyApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwogICAgICAgIH0KCiAgICAgICAgJEdldFBhcmFte0lzVmlzaWJsZUZvckN1c3RvbWVyfSAvLz0gMDsKCiAgICAgICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIG1ldGEgZGF0YQogICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICk7CgogICAgICAgICMgR2V0IGFuZCB2YWxpZGF0ZSBkcmFmdCBhY3Rpb24uCiAgICAgICAgbXkgJEZvcm1EcmFmdEFjdGlvbiA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGb3JtRHJhZnRBY3Rpb24nICk7CiAgICAgICAgaWYgKCAkRm9ybURyYWZ0QWN0aW9uICYmICEkQ29uZmlnLT57Rm9ybURyYWZ0fSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0Zvcm1EcmFmdCBmdW5jdGlvbmFsaXR5IGRpc2FibGVkIScpLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJUZvcm1EcmFmdFJlc3BvbnNlOwoKICAgICAgICAjIENoZWNrIGRyYWZ0IG5hbWUuCiAgICAgICAgaWYgKAogICAgICAgICAgICAkRm9ybURyYWZ0QWN0aW9uCiAgICAgICAgICAgICYmCiAgICAgICAgICAgICggJEZvcm1EcmFmdEFjdGlvbiBlcSAnQWRkJyB8fCAkRm9ybURyYWZ0QWN0aW9uIGVxICdVcGRhdGUnICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJFRpdGxlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1EcmFmdFRpdGxlJyApOwoKICAgICAgICAgICAgIyBBIGRyYWZ0IG5hbWUgaXMgcmVxdWlyZWQuCiAgICAgICAgICAgIGlmICggISRUaXRsZSApIHsKCiAgICAgICAgICAgICAgICAlRm9ybURyYWZ0UmVzcG9uc2UgPSAoCiAgICAgICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCJEcmFmdCBuYW1lIGlzIHJlcXVpcmVkISIpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBDaG9zZW4gZHJhZnQgbmFtZSBtdXN0IGJlIHVuaXF1ZS4KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBteSAkRm9ybURyYWZ0TGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGb3JtRHJhZnQnKS0+Rm9ybURyYWZ0TGlzdEdldCgKICAgICAgICAgICAgICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgICAgICAgICAgICAgICAgIE9iamVjdElEICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgRFJBRlQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEZvcm1EcmFmdCAoIEB7JEZvcm1EcmFmdExpc3R9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIE5vIGV4aXN0aW5nIGRyYWZ0IHdpdGggc2FtZSBuYW1lLgogICAgICAgICAgICAgICAgICAgIG5leHQgRFJBRlQgaWYgJFRpdGxlIG5lICRGb3JtRHJhZnQtPntUaXRsZX07CgogICAgICAgICAgICAgICAgICAgICMgU2FtZSBuYW1lIGZvciB1cGRhdGUgb24gZXhpc3RpbmcgZHJhZnQuCiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17Rm9ybURyYWZ0SUR9CiAgICAgICAgICAgICAgICAgICAgICAgICYmICRGb3JtRHJhZnRBY3Rpb24gZXEgJ1VwZGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFte0Zvcm1EcmFmdElEfSBlcSAkRm9ybURyYWZ0LT57Rm9ybURyYWZ0SUR9CiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRFJBRlQ7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIEFub3RoZXIgZHJhZnQgd2l0aCB0aGUgY2hvc2VuIG5hbWUgYWxyZWFkeSBleGlzdHMuCiAgICAgICAgICAgICAgICAgICAgJUZvcm1EcmFmdFJlc3BvbnNlID0gKAogICAgICAgICAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCAiRm9ybURyYWZ0IG5hbWUgJXMgaXMgYWxyZWFkeSBpbiB1c2UhIiwgJFRpdGxlICksCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgbGFzdCBEUkFGVDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBQZXJmb3JtIGRyYWZ0IGFjdGlvbiBpbnN0ZWFkIG9mIHNhdmluZyBmb3JtIGRhdGEgaW4gdGlja2V0L2FydGljbGUuCiAgICAgICAgaWYgKCAkRm9ybURyYWZ0QWN0aW9uICYmICElRm9ybURyYWZ0UmVzcG9uc2UgKSB7CgogICAgICAgICAgICAjIFJlc2V0IEZvcm1EcmFmdElEIHRvIHByZXZlbnQgdXBkYXRpbmcgZXhpc3RpbmcgZHJhZnQuCiAgICAgICAgICAgIGlmICggJEZvcm1EcmFmdEFjdGlvbiBlcSAnQWRkJyAmJiAkR2V0UGFyYW17Rm9ybURyYWZ0SUR9ICkgewoKICAgICAgICAgICAgICAgICMgbWVkZGxpbmcgd2l0aCB0aGUgaW5uYXJkcyBvZiBLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0CiAgICAgICAgICAgICAgICAkUGFyYW1PYmplY3QtPlNldEFycmF5KAogICAgICAgICAgICAgICAgICAgIFBhcmFtICA9PiAnRm9ybURyYWZ0SUQnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlcyA9PiBbJyddCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkRm9ybURyYWZ0QWN0aW9uT2s7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRGb3JtRHJhZnRBY3Rpb24gZXEgJ0FkZCcKICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAgICAoICRGb3JtRHJhZnRBY3Rpb24gZXEgJ1VwZGF0ZScgJiYgJEdldFBhcmFte0Zvcm1EcmFmdElEfSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRGb3JtRHJhZnRBY3Rpb25PayA9ICRQYXJhbU9iamVjdC0+U2F2ZUZvcm1EcmFmdCgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0VHlwZSAgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSZXBseVRvQXJ0aWNsZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRGb3JtRHJhZnRBY3Rpb25PaykgewogICAgICAgICAgICAgICAgJEZvcm1EcmFmdFJlc3BvbnNle1N1Y2Nlc3N9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICVGb3JtRHJhZnRSZXNwb25zZSA9ICgKICAgICAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvdWxkIG5vdCBwZXJmb3JtIHJlcXVlc3RlZCBkcmFmdCBhY3Rpb24hJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgUmV0dXJuIEpTT04gd2hlbiB0aGVyZSBhbHJlYWR5IGlzIGEgcmVzcG9uc2UKICAgICAgICBpZiAoJUZvcm1EcmFmdFJlc3BvbnNlKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5KU09OUmVwbHkoCiAgICAgICAgICAgICAgICBEYXRhID0+IFwlRm9ybURyYWZ0UmVzcG9uc2UKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHN0YXRlIG9iamVjdAogICAgICAgIG15ICRTdGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpOwoKICAgICAgICAjIHN0b3JlIGFjdGlvbgogICAgICAgIG15ICVFcnJvcjsKCiAgICAgICAgIyBjaGVjayBwZW5kaW5nIHRpbWUKICAgICAgICBpZiAoICRHZXRQYXJhbXtOZXdTdGF0ZUlEfSApIHsKICAgICAgICAgICAgbXkgJVN0YXRlRGF0YSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICAgICAgICAgICAgICBJRCA9PiAkR2V0UGFyYW17TmV3U3RhdGVJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIHN0YXRlIHR5cGUKICAgICAgICAgICAgaWYgKCAkU3RhdGVEYXRhe1R5cGVOYW1lfSA9fiAvXnBlbmRpbmcvaSApIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgICAgICAgICAgICAgZm9yIG15ICROZWVkZWQgKHF3KFllYXIgTW9udGggRGF5IEhvdXIgTWludXRlKSkgewogICAgICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQgJEdldFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3J7J0RhdGVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBkYXRldGltZSBvYmplY3QKICAgICAgICAgICAgICAgIG15ICRQZW5kaW5nRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgU2Vjb25kID0+IDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBnZXQgY3VycmVudCBzeXN0ZW0gZXBvY2gKICAgICAgICAgICAgICAgIG15ICRDdXJTeXN0ZW1EYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgZGF0ZQogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICEkUGVuZGluZ0RhdGVUaW1lT2JqZWN0CiAgICAgICAgICAgICAgICAgICAgfHwgJFBlbmRpbmdEYXRlVGltZU9iamVjdCA8ICRDdXJTeXN0ZW1EYXRlVGltZU9iamVjdAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7J0RhdGVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGlmIGFjdGlvbiBpcyBBcnRpY2xlRWRpdCwgY2hlY2sgaWYgYXJ0aWNsZSBpcyBlZGl0YWJsZQogICAgICAgIG15ICRBcnRpY2xlRWRpdGluZ0VuYWJsZWQgPSAwOwogICAgICAgIGlmICggJFNlbGYtPntBY3Rpb259IGVxICdBZ2VudFRpY2tldEFydGljbGVFZGl0JyAmJiAkQ29uZmlnLT57QXJ0aWNsZX0gJiYgJFNlbGYtPntBcnRpY2xlSUR9ICkgewoKICAgICAgICAgICAgIyBmZXRjaCBjb21tdW5pY2F0aW9uIGNoYW5uZWwgaWQgYnkgYXJ0aWNsZSBpZAogICAgICAgICAgICBteSBAQmFzZUFydGljbGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmIChAQmFzZUFydGljbGVzKSB7CiAgICAgICAgICAgICAgICBteSAkQ29tbXVuaWNhdGlvbkNoYW5uZWxJRCA9ICRCYXNlQXJ0aWNsZXNbMF0tPntDb21tdW5pY2F0aW9uQ2hhbm5lbElEfTsKICAgICAgICAgICAgICAgIG15ICVDb21tdW5pY2F0aW9uQ2hhbm5lbCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNvbW11bmljYXRpb25DaGFubmVsJyktPkNoYW5uZWxHZXQoCiAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbElEID0+ICRDb21tdW5pY2F0aW9uQ2hhbm5lbElELAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRBcnRpY2xlRWRpdGluZ0VuYWJsZWQgPSAkU2VsZi0+X0NoZWNrQXJ0aWNsZUVkaXRpbmdFbmFibGVkKAogICAgICAgICAgICAgICAgICAgIEFydGljbGUgICAgICAgICAgICAgID0+ICRDb25maWctPntBcnRpY2xlfSwKICAgICAgICAgICAgICAgICAgICBDb21tdW5pY2F0aW9uQ2hhbm5lbCA9PiAkQ29tbXVuaWNhdGlvbkNoYW5uZWx7Q2hhbm5lbE5hbWV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRDb25maWctPntOb3RlTWFuZGF0b3J5fSA9ICRBcnRpY2xlRWRpdGluZ0VuYWJsZWQ7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17Q3JlYXRlQXJ0aWNsZX0gPSAkQXJ0aWNsZUVkaXRpbmdFbmFibGVkOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRDb25maWctPntOb3RlfSAmJiAkQ29uZmlnLT57Tm90ZU1hbmRhdG9yeX0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIHN1YmplY3QKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte1N1YmplY3R9ICkgewogICAgICAgICAgICAgICAgJEVycm9yeydTdWJqZWN0SW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBib2R5CiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtCb2R5fSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnQm9keUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgb3duZXIKICAgICAgICBpZiAoICRDb25maWctPntPd25lcn0gJiYgJENvbmZpZy0+e093bmVyTWFuZGF0b3J5fSApIHsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte05ld093bmVySUR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yeydOZXdPd25lckludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgcmVzcG9uc2libGUKICAgICAgICBpZiAoICRDb25maWctPntSZXNwb25zaWJsZX0gJiYgJENvbmZpZy0+e1Jlc3BvbnNpYmxlTWFuZGF0b3J5fSApIHsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte05ld1Jlc3BvbnNpYmxlSUR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yeydOZXdSZXNwb25zaWJsZUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgdGl0bGUKICAgICAgICBpZiAoICRDb25maWctPntUaXRsZX0gJiYgISRHZXRQYXJhbXtUaXRsZX0gKSB7CiAgICAgICAgICAgICRFcnJvcnsnVGl0bGVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayB0eXBlCiAgICAgICAgaWYgKAogICAgICAgICAgICAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpUeXBlJykgKQogICAgICAgICAgICAmJgogICAgICAgICAgICAoICRDb25maWctPntUaWNrZXRUeXBlfSApICYmCiAgICAgICAgICAgICggISRHZXRQYXJhbXtUeXBlSUR9ICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEVycm9yeydUeXBlSURJbnZhbGlkJ30gPSAnIFNlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgc2VydmljZQogICAgICAgIGlmICgKICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKQogICAgICAgICAgICAmJiAkQ29uZmlnLT57U2VydmljZX0KICAgICAgICAgICAgJiYgJEdldFBhcmFte1NMQUlEfQogICAgICAgICAgICAmJiAhJEdldFBhcmFte1NlcnZpY2VJRH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEVycm9yeydTZXJ2aWNlSW52YWxpZCd9ID0gJyBTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIG1hbmRhdG9yeSBzZXJ2aWNlCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpCiAgICAgICAgICAgICYmICRDb25maWctPntTZXJ2aWNlfQogICAgICAgICAgICAmJiAkQ29uZmlnLT57U2VydmljZU1hbmRhdG9yeX0KICAgICAgICAgICAgJiYgISRHZXRQYXJhbXtTZXJ2aWNlSUR9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRFcnJvcnsnU2VydmljZUludmFsaWQnfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBtYW5kYXRvcnkgc2xhCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpCiAgICAgICAgICAgICYmICRDb25maWctPntTZXJ2aWNlfQogICAgICAgICAgICAmJiAkQ29uZmlnLT57U0xBTWFuZGF0b3J5fQogICAgICAgICAgICAmJiAhJEdldFBhcmFte1NMQUlEfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRXJyb3J7J1NMQUludmFsaWQnfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBtYW5kYXRvcnkgcXVldWUKICAgICAgICBpZiAoICRDb25maWctPntRdWV1ZX0gJiYgJENvbmZpZy0+e1F1ZXVlTWFuZGF0b3J5fSApIHsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte05ld1F1ZXVlSUR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yeydOZXdRdWV1ZUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgbWFuZGF0b3J5IHN0YXRlCiAgICAgICAgaWYgKCAkQ29uZmlnLT57U3RhdGV9ICYmICRDb25maWctPntTdGF0ZU1hbmRhdG9yeX0gKSB7CiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtOZXdTdGF0ZUlEfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnTmV3U3RhdGVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHRpbWUgdW5pdHMsIGJ1dCBvbmx5IGlmIHRoZSBjdXJyZW50IHNjcmVlbiBoYXMgYSBub3RlCiAgICAgICAgIyAgIChhY2NvdW50ZWQgdGltZSBjYW4gb25seSBiZSBzdG9yZWQgaWYgYW5kIGFydGljbGUgaXMgZ2VuZXJhdGVkKQogICAgICAgIGlmICgKICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScpCiAgICAgICAgICAgICYmICRHZXRQYXJhbXtDcmVhdGVBcnRpY2xlfQogICAgICAgICAgICAmJiAkR2V0UGFyYW17VGltZVVuaXRzfSBlcSAnJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRXJyb3J7J1RpbWVVbml0c0ludmFsaWQnfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgIH0KCiMgUm90aGVyIE9TUyAvIElUU01Db3JlIC0gY2FsY3VsYXRlIFByaW9yaXR5IHZpYSBDSVAgbWF0cml4CiAgICAgICAgaWYgKCAkQ0lQQ2FsY3VsYXRlICYmICRDSVBDYWxjdWxhdGUgPT0gMiAmJiAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH0gJiYgJENvbmZpZy0+e1ByaW9yaXR5fSApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBjcml0aWNhbGl0eSBlaXRoZXIgZnJvbSB0aGUgbWFudWFsbHkgc2V0IGR5bmFtaWMgZmllbGQsIG9yIHRoZSBzZXJ2aWNlCiAgICAgICAgICAgIG15ICRDcml0aWNhbGl0eSA9ICRHZXRQYXJhbXtEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fTsKCiAgICAgICAgICAgIGlmICggISRDcml0aWNhbGl0eSAmJiAkR2V0UGFyYW17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgICAgIG15ICVTZXJ2aWNlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkQ3JpdGljYWxpdHkgPSAkU2VydmljZXtDcml0aWNhbGl0eX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJENyaXRpY2FsaXR5ICkgewogICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPlByaW9yaXR5QWxsb2NhdGlvbkdldCgKICAgICAgICAgICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkQ3JpdGljYWxpdHksCiAgICAgICAgICAgICAgICAgICAgSW1wYWN0ICAgICAgPT4gJEdldFBhcmFte0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICRQcmlvcml0eUlEIG5lICRHZXRQYXJhbXtQcmlvcml0eUlEfSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW47IHdlIGp1c3QgZW5mb3JjZSB0aGUgcHJpbyBhbmQgd3JpdGUgYW4gZXJyb3IgdG8gdGhlIGxvZyBmaWxlIGhlcmUKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkdvdCBQcmlvcml0eUlEICckR2V0UGFyYW17UHJpb3JpdHlJRH0nLCBidXQgQ0lQIGVuZm9yY2VzICckUHJpb3JpdHlJRCcgLSBvdmVycmlkaW5nIHRoZSBmcm9udGVuZCB2YWx1ZS4iLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtQcmlvcml0eUlEfSA9ICRQcmlvcml0eUlEOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQojIEVPIElUU01Db3JlCgogICAgICAgICMgc2tpcCB2YWxpZGF0aW9uIG9mIGhpZGRlbiBmaWVsZHMKICAgICAgICBteSAlVmlzaWJpbGl0eTsKCiAgICAgICAgIyB0cmFuc2Zvcm0gZHluYW1pYyBmaWVsZCBkYXRhIGludG8gREZOYW1lID0+IERGTmFtZSBwYWlyCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZEFjbCA9IG1hcCB7ICRfID0+ICRfIH0ga2V5cyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqOwoKICAgICAgICAjIGNhbGwgdGlja2V0IEFDTHMgZm9yIER5bmFtaWNGaWVsZHMgdG8gY2hlY2sgZmllbGQgdmlzaWJpbGl0eQogICAgICAgIG15ICRBQ0xSZXN1bHQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0Zvcm0nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJUR5bmFtaWNGaWVsZEFjbCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoJEFDTFJlc3VsdCkgewogICAgICAgICAgICAlVmlzaWJpbGl0eSA9IG1hcCB7ICdEeW5hbWljRmllbGRfJyAuICRfID0+IDAgfSBrZXlzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSo7CiAgICAgICAgICAgIG15ICVBY2xEYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpOwogICAgICAgICAgICBmb3IgbXkgJEZpZWxkICggc29ydCBrZXlzICVBY2xEYXRhICkgewogICAgICAgICAgICAgICAgJFZpc2liaWxpdHl7ICdEeW5hbWljRmllbGRfJyAuICRGaWVsZCB9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJVZpc2liaWxpdHkgPSBtYXAgeyAnRHluYW1pY0ZpZWxkXycgLiAkXyA9PiAxIH0ga2V5cyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqOwogICAgICAgIH0KCiAgICAgICAgIyByZW1lbWJlciBkeW5hbWljIGZpZWxkIHZhbGlkYXRpb24gcmVzdWx0cyBpZiBlcnJvbmVvdXMKICAgICAgICBteSAlRHluYW1pY0ZpZWxkVmFsaWRhdGlvblJlc3VsdDsKICAgICAgICBteSAlRHluYW1pY0ZpZWxkUG9zc2libGVWYWx1ZXM7CgogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggdmFsdWVzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgIG15ICRQb3NzaWJsZVZhbHVlc0ZpbHRlcjsKCiAgICAgICAgICAgIG15ICRJc0FDTFJlZHVjaWJsZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgQmVoYXZpb3IgICAgICAgICAgID0+ICdJc0FDTFJlZHVjaWJsZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJElzQUNMUmVkdWNpYmxlKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICAgICAgICAgIG15ICRQb3NzaWJsZVZhbHVlcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5Qb3NzaWJsZVZhbHVlc0dldCgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKCiAgICAgICAgICAgICAgICAgICAgIyBUT0RPIGFsc28gcGFzcyBvYmplY3QgaGVyZT8KICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBmaWVsZCBoYXMgUG9zc2libGVWYWx1ZXMgcHJvcGVydHkgaW4gaXRzIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJFBvc3NpYmxlVmFsdWVzKSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IHBvc3NpYmxlIHZhbHVlcyBrZXkgPT4gdmFsdWUgdG8ga2V5ID0+IGtleSBmb3IgQUNMcyB1c2luZyBhIEhhc2ggc2xpY2UKICAgICAgICAgICAgICAgICAgICBteSAlQWNsRGF0YSA9ICV7JFBvc3NpYmxlVmFsdWVzfTsKICAgICAgICAgICAgICAgICAgICBAQWNsRGF0YXsga2V5cyAlQWNsRGF0YSB9ID0ga2V5cyAlQWNsRGF0YTsKCiAgICAgICAgICAgICAgICAgICAgIyBzZXQgcG9zc2libGUgdmFsdWVzIGZpbHRlciBmcm9tIEFDTHMKICAgICAgICAgICAgICAgICAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJUFjbERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRBQ0wpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUZpbHRlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY29udmVydCBGaWxlciBrZXkgPT4ga2V5IGJhY2sgdG8ga2V5ID0+IHZhbHVlIHVzaW5nIG1hcAogICAgICAgICAgICAgICAgICAgICAgICAleyRQb3NzaWJsZVZhbHVlc0ZpbHRlcn0gPSBtYXAgeyAkXyA9PiAkUG9zc2libGVWYWx1ZXMtPnskX30gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5cyAlRmlsdGVyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJER5bmFtaWNGaWVsZFBvc3NpYmxlVmFsdWVzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICRQb3NzaWJsZVZhbHVlc0ZpbHRlcjsKCiAgICAgICAgICAgICMgRG8gbm90IHZhbGlkYXRlIG9ubHkgaWYgb2JqZWN0IHR5cGUgaXMgQXJ0aWNsZSBhbmQgQ3JlYXRlQXJ0aWNsZSB2YWx1ZSBpcyBub3QgZGVmaW5lZCwgb3IgRmllbGQgaXMgaW52aXNpYmxlLgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAhKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57T2JqZWN0VHlwZX0gZXEgJ0FydGljbGUnICYmICEkR2V0UGFyYW17Q3JlYXRlQXJ0aWNsZX0gKQogICAgICAgICAgICAgICAgJiYgJFZpc2liaWxpdHl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBteSAkVmFsaWRhdGlvblJlc3VsdCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZVZhbGlkYXRlKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXNGaWx0ZXIgPT4gJFBvc3NpYmxlVmFsdWVzRmlsdGVyLAogICAgICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICAgID0+ICRQYXJhbU9iamVjdCwKCiAgICAgICAgICAgICAgICAgICAgIyBNYW5kYXRvcnkgaXMgYWRkZWQgdG8gdGhlIGNvbmZpZ3MgYnkgJFNlbGYtPm5ldwogICAgICAgICAgICAgICAgICAgIE1hbmRhdG9yeSA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TWFuZGF0b3J5fSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJFZhbGlkYXRpb25SZXN1bHQpICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3QgcGVyZm9ybSB2YWxpZGF0aW9uIG9uIGZpZWxkICVzIScsICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgUHJvcGFnYXRlIHZhbGlkYXRpb24gZXJyb3IgdG8gdGhlIEVycm9yIHZhcmlhYmxlIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSBmcm9udGVuZC4KICAgICAgICAgICAgICAgIGlmICggJFZhbGlkYXRpb25SZXN1bHQtPntTZXJ2ZXJFcnJvcn0gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gICAgICAgICAgICAgICAgICAgICAgICA9ICcgU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRWYWxpZGF0aW9uUmVzdWx0eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICRWYWxpZGF0aW9uUmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBkb24ndCBzYXZlIGZvcm0gaWYgYSBkcmFmdCB3YXMgbG9hZGVkLgogICAgICAgIGlmICggJFNlbGYtPntMb2FkZWRGb3JtRHJhZnRJRH0gKSB7CiAgICAgICAgICAgICVFcnJvciA9ICggTG9hZGVkRm9ybURyYWZ0ID0+IDEgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZXJyb3JzCiAgICAgICAgaWYgKCVFcnJvcikgewogICAgICAgICAgICByZXR1cm4gam9pbiAnJywKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1NtYWxsJywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAgICAgICAgIEJvZHlDbGFzcyA9PiAnUG9wdXAnLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICRTZWxmLT5fTWFzaygKICAgICAgICAgICAgICAgICAgICBBdHRhY2htZW50cyA9PiBcQEF0dGFjaG1lbnRzLAogICAgICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICVFcnJvciwKICAgICAgICAgICAgICAgICAgICBWaXNpYmlsaXR5ICAgICAgID0+IFwlVmlzaWJpbGl0eSwKICAgICAgICAgICAgICAgICAgICBERlBvc3NpYmxlVmFsdWVzID0+IFwlRHluYW1pY0ZpZWxkUG9zc2libGVWYWx1ZXMsCiAgICAgICAgICAgICAgICAgICAgREZFcnJvcnMgICAgICAgICA9PiBcJUR5bmFtaWNGaWVsZFZhbGlkYXRpb25SZXN1bHQsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+Rm9vdGVyKAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1NtYWxsJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBuZXcgdGl0bGUKICAgICAgICBpZiAoICRDb25maWctPntUaXRsZX0gKSB7CiAgICAgICAgICAgIGlmICggZGVmaW5lZCAkR2V0UGFyYW17VGl0bGV9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0VGl0bGVVcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJEdldFBhcmFte1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNldCBuZXcgdHlwZQogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlR5cGUnKSAmJiAkQ29uZmlnLT57VGlja2V0VHlwZX0gKSB7CiAgICAgICAgICAgIGlmICggJEdldFBhcmFte1R5cGVJRH0gKSB7CiAgICAgICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRUeXBlU2V0KAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgID0+ICRHZXRQYXJhbXtUeXBlSUR9LAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2V0IG5ldyBzZXJ2aWNlCiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpICYmICRDb25maWctPntTZXJ2aWNlfSApIHsKICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRHZXRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0U2VydmljZVNldCgKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJUFDTENvbXBhdEdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgICA9PiAkR2V0UGFyYW17U2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggZGVmaW5lZCAkR2V0UGFyYW17U0xBSUR9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0U0xBU2V0KAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgICAgIFNMQUlEICAgID0+ICRHZXRQYXJhbXtTTEFJRH0sCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJFVubG9ja09uQXdheSA9IDE7CgogICAgICAgICMgbW92ZSB0aWNrZXQgdG8gYSBuZXcgcXVldWUsIGJ1dCBvbmx5IGlmIHRoZSBxdWV1ZSB3YXMgY2hhbmdlZAogICAgICAgIGlmICgKICAgICAgICAgICAgJENvbmZpZy0+e1F1ZXVlfQogICAgICAgICAgICAmJiAkR2V0UGFyYW17TmV3UXVldWVJRH0KICAgICAgICAgICAgJiYgJEdldFBhcmFte05ld1F1ZXVlSUR9IG5lICRUaWNrZXR7UXVldWVJRH0KICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgbW92ZSB0aWNrZXQgKHNlbmQgbm90aWZpY2F0aW9uIGlmIG5vIG5ldyBvd25lciBpcyBzZWxlY3RlZCkKICAgICAgICAgICAgbXkgJEJvZHlUZXh0ID0gJyc7CiAgICAgICAgICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgICAgICAkQm9keVRleHQgPSAkTGF5b3V0T2JqZWN0LT5SaWNoVGV4dDJBc2NpaSgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEdldFBhcmFte0JvZHl9IHx8IDAsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJEJvZHlUZXh0ID0gJEdldFBhcmFte0JvZHl9IHx8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbXkgJE1vdmUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRRdWV1ZVNldCgKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgICAgICA9PiAkR2V0UGFyYW17TmV3UXVldWVJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgU2VuZE5vTm90aWZpY2F0aW9uID0+ICRHZXRQYXJhbXtOZXdVc2VySUR9LAogICAgICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgID0+ICRCb2R5VGV4dCwKICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggISRNb3ZlICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2V0IG5ldyBvd25lcgogICAgICAgIG15IEBOb3RpZnlEb25lOwogICAgICAgIGlmICggJENvbmZpZy0+e093bmVyfSApIHsKICAgICAgICAgICAgbXkgJEJvZHlUZXh0ID0gJExheW91dE9iamVjdC0+UmljaFRleHQyQXNjaWkoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEdldFBhcmFte0JvZHl9IHx8ICcnLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtOZXdPd25lcklEfSApIHsKICAgICAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldExvY2tTZXQoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgTG9jayAgICAgPT4gJ2xvY2snLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldE93bmVyU2V0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIE5ld1VzZXJJRCA9PiAkR2V0UGFyYW17TmV3T3duZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCAgID0+ICRCb2R5VGV4dCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkVW5sb2NrT25Bd2F5ID0gMDsKCiAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIHRvIG5vdCBub3RpZnkgb3duZXIgdHdpY2UKICAgICAgICAgICAgICAgIGlmICggJFN1Y2Nlc3MgJiYgJFN1Y2Nlc3MgZXEgMSApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBOb3RpZnlEb25lLCAkR2V0UGFyYW17TmV3T3duZXJJRH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2V0IG5ldyByZXNwb25zaWJsZQogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlJlc3BvbnNpYmxlJykgJiYgJENvbmZpZy0+e1Jlc3BvbnNpYmxlfSApIHsKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17TmV3UmVzcG9uc2libGVJRH0gKSB7CiAgICAgICAgICAgICAgICBteSAkQm9keVRleHQgPSAkTGF5b3V0T2JqZWN0LT5SaWNoVGV4dDJBc2NpaSgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEdldFBhcmFte0JvZHl9IHx8ICcnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UmVzcG9uc2libGVTZXQoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgTmV3VXNlcklEID0+ICRHZXRQYXJhbXtOZXdSZXNwb25zaWJsZUlEfSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ICAgPT4gJEJvZHlUZXh0LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIHRvIG5vdCBub3RpZnkgcmVzcG9uc2libGUgdHdpY2UKICAgICAgICAgICAgICAgIGlmICggJFN1Y2Nlc3MgJiYgJFN1Y2Nlc3MgZXEgMSApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBOb3RpZnlEb25lLCAkR2V0UGFyYW17TmV3UmVzcG9uc2libGVJRH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYWRkIG5vdGUKICAgICAgICBteSAkQXJ0aWNsZUlEID0gJyc7CiAgICAgICAgbXkgJFJldHVyblVSTDsKCiAgICAgICAgIyBzZXQgcHJpb3JpdHkKICAgICAgICBpZiAoICRDb25maWctPntQcmlvcml0eX0gJiYgJEdldFBhcmFte05ld1ByaW9yaXR5SUR9ICkgewogICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRQcmlvcml0eVNldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEID0+ICRHZXRQYXJhbXtOZXdQcmlvcml0eUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgc3RhdGUKICAgICAgICBpZiAoICRDb25maWctPntTdGF0ZX0gJiYgJEdldFBhcmFte05ld1N0YXRlSUR9ICkgewogICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdGF0ZVNldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAkR2V0UGFyYW17TmV3U3RhdGVJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+ICRHZXRQYXJhbXtEeW5hbWljRmllbGR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyB1bmxvY2sgdGhlIHRpY2tldCBhZnRlciBjbG9zZQogICAgICAgICAgICBteSAlU3RhdGVEYXRhID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUdldCgKICAgICAgICAgICAgICAgIElEID0+ICRHZXRQYXJhbXtOZXdTdGF0ZUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2V0IHVubG9jayBvbiBjbG9zZSBzdGF0ZQogICAgICAgICAgICBpZiAoICRTdGF0ZURhdGF7VHlwZU5hbWV9ID1+IC9eY2xvc2UvaSApIHsKICAgICAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldExvY2tTZXQoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgTG9jayAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgcGVuZGluZyB0aW1lIG9uIHBlbmRpbmcgc3RhdGUKICAgICAgICAgICAgZWxzaWYgKCAkU3RhdGVEYXRhe1R5cGVOYW1lfSA9fiAvXnBlbmRpbmcvaSApIHsKCiAgICAgICAgICAgICAgICAjIHNldCBwZW5kaW5nIHRpbWUKICAgICAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldFBlbmRpbmdUaW1lU2V0KAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlZGlyZWN0IHBhcmVudCB3aW5kb3cgdG8gbGFzdCBzY3JlZW4gb3ZlcnZpZXcgb24gY2xvc2VkIHRpY2tldHMKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJFN0YXRlRGF0YXtUeXBlTmFtZX0gPX4gL15jbG9zZS9pCiAgICAgICAgICAgICAgICAmJiAhJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpSZWRpcmVjdEFmdGVyQ2xvc2VEaXNhYmxlZCcpCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRSZXR1cm5VUkwgPSAkU2VsZi0+e0xhc3RTY3JlZW5PdmVydmlld30gfHwgJ0FjdGlvbj1BZ2VudERhc2hib2FyZCc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgKICAgICAgICAgICAgJEdldFBhcmFte0NyZWF0ZUFydGljbGV9CiAgICAgICAgICAgICYmICRDb25maWctPntOb3RlfQogICAgICAgICAgICAmJiAoICRHZXRQYXJhbXtTdWJqZWN0fSB8fCAkR2V0UGFyYW17Qm9keX0gKQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte1N1YmplY3R9ICkgewogICAgICAgICAgICAgICAgaWYgKCAkQ29uZmlnLT57U3ViamVjdH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJFN1YmplY3QgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICRDb25maWctPntTdWJqZWN0fSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtTdWJqZWN0fSA9ICRTdWJqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJEdldFBhcmFte1N1YmplY3R9ID0gJEdldFBhcmFte1N1YmplY3R9CiAgICAgICAgICAgICAgICAgICAgfHwgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdObyBzdWJqZWN0Jyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IHByZSBsb2FkZWQgYXR0YWNobWVudAogICAgICAgICAgICBteSBAQXR0YWNobWVudHMgPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREdldEFsbEZpbGVzRGF0YSgKICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBzdWJtaXQgYXR0YWNobWVudAogICAgICAgICAgICBteSAlVXBsb2FkU3R1ZmYgPSAkUGFyYW1PYmplY3QtPkdldFVwbG9hZEFsbCgKICAgICAgICAgICAgICAgIFBhcmFtID0+ICdGaWxlVXBsb2FkJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCVVcGxvYWRTdHVmZikgewogICAgICAgICAgICAgICAgcHVzaCBAQXR0YWNobWVudHMsIFwlVXBsb2FkU3R1ZmY7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRNaW1lVHlwZSA9ICd0ZXh0L3BsYWluJzsKICAgICAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgICAgICRNaW1lVHlwZSA9ICd0ZXh0L2h0bWwnOwoKICAgICAgICAgICAgICAgICMgcmVtb3ZlIHVudXNlZCBpbmxpbmUgaW1hZ2VzCiAgICAgICAgICAgICAgICBteSBATmV3QXR0YWNobWVudERhdGE7CiAgICAgICAgICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgICAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudHMpIHsKICAgICAgICAgICAgICAgICAgICBteSAkQ29udGVudElEID0gJEF0dGFjaG1lbnQtPntDb250ZW50SUR9OwogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgJENvbnRlbnRJRAogICAgICAgICAgICAgICAgICAgICAgICAmJiAoICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9ID1+IC9pbWFnZS9pICkKICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0Rpc3Bvc2l0aW9ufSBlcSAnaW5saW5lJyApCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRDb250ZW50SURIVE1MUXVvdGUgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCA9PiAkQ29udGVudElELAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyB3b3JrYXJvdW5kIGZvciBsaW5rIGVuY29kZSBvZiByaWNoIHRleHQgZWRpdG9yLCBzZWUgYnVnIzUwNTMKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJENvbnRlbnRJRExpbmtFbmNvZGUgPSAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRDb250ZW50SUQpOwogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17Qm9keX0gPX4gcy8oQ29udGVudElEPSkkQ29udGVudElETGlua0VuY29kZS8kMSRDb250ZW50SUQvZzsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgaWdub3JlIGF0dGFjaG1lbnQgaWYgbm90IGxpbmtlZCBpbiBib2R5CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgJEdldFBhcmFte0JvZHl9ICF+IC8oXFEkQ29udGVudElESFRNTFF1b3RlXEV8XFEkQ29udGVudElEXEUpL2k7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIGlubGluZSBpbWFnZXMgYW5kIG5vcm1hbCBhdHRhY2htZW50cwogICAgICAgICAgICAgICAgICAgIHB1c2ggQE5ld0F0dGFjaG1lbnREYXRhLCBcJXskQXR0YWNobWVudH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBAQXR0YWNobWVudHMgPSBATmV3QXR0YWNobWVudERhdGE7CgogICAgICAgICAgICAgICAgIyB2ZXJpZnkgaHRtbCBkb2N1bWVudAogICAgICAgICAgICAgICAgJEdldFBhcmFte0JvZHl9ID0gJExheW91dE9iamVjdC0+UmljaFRleHREb2N1bWVudENvbXBsZXRlKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkR2V0UGFyYW17Qm9keX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkRnJvbSA9ICJcIiRTZWxmLT57VXNlckZ1bGxuYW1lfVwiIDwkU2VsZi0+e1VzZXJFbWFpbH0+IjsKICAgICAgICAgICAgbXkgQE5vdGlmeVVzZXJJRHM7CgogICAgICAgICAgICAjIGdldCBsaXN0IG9mIHVzZXJzIHRoYXQgd2lsbCBiZSBpbmZvcm1lZCB3aXRob3V0IHNlbGVjdGlvbiBpbiBpbmZvcm1lZC9pbnZvbHZlZCBsaXN0CiAgICAgICAgICAgIG15IEBVc2VyTGlzdFdpdGhvdXRTZWxlY3Rpb24gPSBzcGxpdCAvLC8sICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdVc2VyTGlzdFdpdGhvdXRTZWxlY3Rpb24nICkgfHwgIiI7CgogICAgICAgICAgICAjIGdldCBpbmZvcm0gdXNlciBsaXN0CiAgICAgICAgICAgIG15IEBJbmZvcm1Vc2VySUQgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnSW5mb3JtVXNlcklEJyApOwoKICAgICAgICAgICAgIyBnZXQgaW52b2x2ZWQgdXNlciBsaXN0CiAgICAgICAgICAgIG15IEBJbnZvbHZlZFVzZXJJRCA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdJbnZvbHZlZFVzZXJJRCcgKTsKCiAgICAgICAgICAgIGlmICggJENvbmZpZy0+e0luZm9ybUFnZW50fSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQE5vdGlmeVVzZXJJRHMsIEBJbmZvcm1Vc2VySUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJENvbmZpZy0+e0ludm9sdmVkQWdlbnR9ICkgewogICAgICAgICAgICAgICAgcHVzaCBATm90aWZ5VXNlcklEcywgQEludm9sdmVkVXNlcklEOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRTZWxmLT57UmVwbHlUb0FydGljbGV9ICkgewogICAgICAgICAgICAgICAgcHVzaCBATm90aWZ5VXNlcklEcywgQFVzZXJMaXN0V2l0aG91dFNlbGVjdGlvbjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0FjdGlvbn0gZXEgJ0FnZW50VGlja2V0RW1haWxPdXRib3VuZCcgKSB7CiAgICAgICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZTo6QmFja2VuZDo6RW1haWwnKS0+QXJ0aWNsZVNlbmQoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBTZW5kZXJUeXBlICAgICAgICAgICAgICAgICAgICAgID0+ICdhZ2VudCcsCiAgICAgICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAkRnJvbSwKICAgICAgICAgICAgICAgICAgICBNaW1lVHlwZSAgICAgICAgICAgICAgICAgICAgICAgID0+ICRNaW1lVHlwZSwKICAgICAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAkQ29uZmlnLT57SGlzdG9yeVR5cGV9LAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJENvbmZpZy0+e0hpc3RvcnlDb21tZW50fSwKICAgICAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFxATm90aWZ5VXNlcklEcywKICAgICAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFxATm90aWZ5RG9uZSwKICAgICAgICAgICAgICAgICAgICBVbmxvY2tPbkF3YXkgICAgICAgICAgICAgICAgICAgID0+ICRVbmxvY2tPbkF3YXksCiAgICAgICAgICAgICAgICAgICAgQXR0YWNobWVudCAgICAgICAgICAgICAgICAgICAgICA9PiBcQEF0dGFjaG1lbnRzLAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkU2VsZi0+e0FydGljbGVJRH0gKSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBlZGl0aW5nIGlzIG5lY2Vzc2FyeSBieSBjb21wYXJpbmcgYXJ0aWNsZSBib2R5CiAgICAgICAgICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICVBcnRpY2xlID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICAgICAgICAgIFJlYWxOYW1lcyAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICVEYXRhID0gJFNlbGYtPl9Mb2FkQXJ0aWNsZUVkaXQoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZURhdGEgICAgICAgICAgPT4gXCVBcnRpY2xlLAogICAgICAgICAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgICAgID0+IFwlVGlja2V0LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVCYWNrZW5kT2JqZWN0ID0+ICRBcnRpY2xlQmFja2VuZE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBOb0F0dGFjaG1lbnRzICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNhbml0aXplIGJvdGggYm9keSBzdHJpbmdzIGZyb20gY29udGVudCBpZHMgZm9yIGNvbXBhcmlzb24KICAgICAgICAgICAgICAgIG15ICRFeGlzdGluZ0JvZHkgPSAkRGF0YXtCb2R5fTsKICAgICAgICAgICAgICAgICRFeGlzdGluZ0JvZHkgPX4gcy8oPXwifCcpY2lkOiguKj8pKCJ8J3w+fFwvPnxccykvL2VneGk7CiAgICAgICAgICAgICAgICBteSAkTmV3Qm9keSA9ICRHZXRQYXJhbXtCb2R5fTsKICAgICAgICAgICAgICAgICROZXdCb2R5ID1+IHMvKD18InwnKWNpZDooLio/KSgifCd8PnxcLz58XHMpLy9lZ3hpOwoKICAgICAgICAgICAgICAgICMgY29tcGFyZSBhdHRhY2htZW50cwogICAgICAgICAgICAgICAgbXkgJEF0dGFjaG1lbnRzRGlmZmVyZW50ID0gMDsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAjIGRlZmluZSBpZiByaWNoIHRleHQgc2hvdWxkIGJlIHVzZWQKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1JpY2hUZXh0fSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6Wm9vbVJpY2hUZXh0Rm9yY2UnKQogICAgICAgICAgICAgICAgICAgICAgICB8fCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fQogICAgICAgICAgICAgICAgICAgICAgICB8fCAwOwoKICAgICAgICAgICAgICAgICAgICAjIEFsd2F5cyBleGNsdWRlIHBsYWluIHRleHQgYXR0YWNobWVudCwgYnV0IGV4Y2x1ZGUgSFRNTCBib2R5IG9ubHkgaWYgcmljaCB0ZXh0IGlzIGVuYWJsZWQuCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntFeGNsdWRlQXR0YWNobWVudHN9ID0gewogICAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlUGxhaW5UZXh0ID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVIVE1MQm9keSAgPT4gJFNlbGYtPntSaWNoVGV4dH0sCiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgIyBHZXQgYXR0YWNobWVudCBpbmRleCAoZXhjbHVkaW5nIGJvZHkgYXR0YWNobWVudHMpLgogICAgICAgICAgICAgICAgICAgIG15ICVBdG1JbmRleCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFNlbGYtPntFeGNsdWRlQXR0YWNobWVudHN9IH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCBzY2FsYXIgQEF0dGFjaG1lbnRzICE9IHNjYWxhciggdmFsdWVzICVBdG1JbmRleCApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQXR0YWNobWVudHNEaWZmZXJlbnQgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRDb21wYXJlQXR0YWNobWVudCA9IGZpcnN0IHsgJF8tPntGaWxlbmFtZX0gZXEgJEF0dGFjaG1lbnQtPntGaWxlbmFtZX0gfSB2YWx1ZXMgJUF0bUluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJENvbXBhcmVBdHRhY2htZW50KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQXR0YWNobWVudHNEaWZmZXJlbnQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgQVRUQUNITUVOVDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENvbXBhcmVBdHRhY2htZW50LT57RmlsZXNpemVSYXd9ICE9ICRBdHRhY2htZW50LT57RmlsZXNpemV9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBdHRhY2htZW50c0RpZmZlcmVudCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBBVFRBQ0hNRU5UOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAoICRFeGlzdGluZ0JvZHkgbmUgJE5ld0JvZHkgKQogICAgICAgICAgICAgICAgICAgIHx8ICggJEFydGljbGV7U3ViamVjdH0gbmUgJEdldFBhcmFte1N1YmplY3R9ICkKICAgICAgICAgICAgICAgICAgICB8fCAoJEF0dGFjaG1lbnRzRGlmZmVyZW50KQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlRWRpdCgKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgICAgICAgICAgICAgPT4gJEFydGljbGV7U2VuZGVyVHlwZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJEZyb20sCiAgICAgICAgICAgICAgICAgICAgICAgIE1pbWVUeXBlICAgICAgICAgICAgICAgICAgICAgICAgPT4gJE1pbWVUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICRDb25maWctPntIaXN0b3J5VHlwZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJENvbmZpZy0+e0hpc3RvcnlDb21tZW50fSwKICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBcQE5vdGlmeVVzZXJJRHMsCiAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gXEBOb3RpZnlEb25lLAogICAgICAgICAgICAgICAgICAgICAgICBVbmxvY2tPbkF3YXkgICAgICAgICAgICAgICAgICAgID0+ICRVbmxvY2tPbkF3YXksCiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgICAgICAgICAgICAgICAgICAgICAgPT4gXEBBdHRhY2htZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luICAgICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEFydGljbGVJRCA9ICRTZWxmLT57QXJ0aWNsZUlEfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRBcnRpY2xlSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlOjpCYWNrZW5kOjpJbnRlcm5hbCcpLT5BcnRpY2xlQ3JlYXRlKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJEZyb20sCiAgICAgICAgICAgICAgICAgICAgTWltZVR5cGUgICAgICAgICAgICAgICAgICAgICAgICA9PiAkTWltZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57VXNlckNoYXJzZXR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJENvbmZpZy0+e0hpc3RvcnlUeXBlfSwKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICRDb25maWctPntIaXN0b3J5Q29tbWVudH0sCiAgICAgICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBcQE5vdGlmeVVzZXJJRHMsCiAgICAgICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBcQE5vdGlmeURvbmUsCiAgICAgICAgICAgICAgICAgICAgVW5sb2NrT25Bd2F5ICAgICAgICAgICAgICAgICAgICA9PiAkVW5sb2NrT25Bd2F5LAogICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgICAgICAgICAgICAgICAgICAgICAgPT4gXEBBdHRhY2htZW50cywKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICEkQXJ0aWNsZUlEICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdGltZSBhY2NvdW50aW5nCiAgICAgICAgICAgIGlmICggJEdldFBhcmFte1RpbWVVbml0c30gKSB7CiAgICAgICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2NvdW50VGltZSgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgICAgICAgICAgVGltZVVuaXQgID0+ICRHZXRQYXJhbXtUaW1lVW5pdHN9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlbW92ZSBhbGwgZm9ybSBkYXRhCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OkZvcm1DYWNoZScpLT5Gb3JtSURSZW1vdmUoIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0gKTsKCiAgICAgICAgICAgICMgZGVsZXRlIGhpZGRlbiBmaWVsZHMgY2FjaGUKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0hpZGRlbkZpZWxkcycsCiAgICAgICAgICAgICAgICBLZXkgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFNlbGYtPntBY3Rpb259IGVxICdBZ2VudFRpY2tldEFydGljbGVFZGl0JyAmJiAoICRDb25maWctPntUaW1lVW5pdHN9IHx8ICRBcnRpY2xlRWRpdGluZ0VuYWJsZWQgKSApIHsKCiAgICAgICAgICAgICMgdGltZSBhY2NvdW50aW5nCiAgICAgICAgICAgICRBcnRpY2xlSUQgPSAkU2VsZi0+e0FydGljbGVJRH07CiAgICAgICAgICAgIGlmICggJEdldFBhcmFte1RpbWVVbml0c30gKSB7CiAgICAgICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2NvdW50VGltZSgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgICAgICAgICAgVGltZVVuaXQgID0+ICRHZXRQYXJhbXtUaW1lVW5pdHN9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRTZWxmLT57QWN0aW9ufSBlcSAnQWdlbnRUaWNrZXRBcnRpY2xlRWRpdCcgJiYgJENvbmZpZy0+e0lzVmlzaWJsZUZvckN1c3RvbWVyfSApIHsKICAgICAgICAgICAgbXkgJElzVmlzaWJsZUZvckN1c3RvbWVyID0gJENvbmZpZy0+e0lzVmlzaWJsZUZvckN1c3RvbWVyRGVmYXVsdH07CiAgICAgICAgICAgICRJc1Zpc2libGVGb3JDdXN0b21lciA9ICRHZXRQYXJhbXtJc1Zpc2libGVGb3JDdXN0b21lcn0gPyAxIDogMDsKCiAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QmFja2VuZEZvckFydGljbGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlVXBkYXRlKAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAnSXNWaXNpYmxlRm9yQ3VzdG9tZXInLAogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRJc1Zpc2libGVGb3JDdXN0b21lciwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRBcnRpY2xlSUQgPSAkU2VsZi0+e0FydGljbGVJRH07CiAgICAgICAgfQoKICAgICAgICAjIHNldCBkeW5hbWljIGZpZWxkcwogICAgICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIHZhbHVlcyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkVmlzaWJpbGl0eXsiRHluYW1pY0ZpZWxkXyREeW5hbWljRmllbGRDb25maWctPntOYW1lfSJ9OwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57UmVhZG9ubHl9OwoKICAgICAgICAgICAgIyBzZXQgdGhlIG9iamVjdCBJRCAoVGlja2V0SUQgb3IgQXJ0aWNsZUlEKSBkZXBlbmRpbmcgb24gdGhlIGZpZWxkIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgbXkgJE9iamVjdElEID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9IGVxICdBcnRpY2xlJwogICAgICAgICAgICAgICAgPyAkU2VsZi0+e0FydGljbGVJRH0gfHwgJEFydGljbGVJRAogICAgICAgICAgICAgICAgOiAkU2VsZi0+e1RpY2tldElEfTsKCiAgICAgICAgICAgICMgc2V0IHRoZSB2YWx1ZSB3aGljaCB3YXMgdGFrZW4gZnJvbSB3ZWIgcmVxdWVzdAogICAgICAgICAgICAjIFRPRE86IGZvciBSZWZlcmVuY2UgYW5kIExlbnMsIHRoZSBvcmRlciBpcyByZWxldmFudAogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRPYmplY3RJRCwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIElmIGZvcm0gd2FzIGNhbGxlZCBiYXNlZCBvbiBhIGRyYWZ0LAogICAgICAgICMgICBkZWxldGUgZHJhZnQgc2luY2UgaXRzIGNvbnRlbnQgaGFzIG5vdyBiZWVuIHVzZWQuCiAgICAgICAgaWYgKAogICAgICAgICAgICAkR2V0UGFyYW17Rm9ybURyYWZ0SUR9CiAgICAgICAgICAgICYmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Rm9ybURyYWZ0JyktPkZvcm1EcmFmdERlbGV0ZSgKICAgICAgICAgICAgICAgIEZvcm1EcmFmdElEID0+ICRHZXRQYXJhbXtGb3JtRHJhZnRJRH0sCiAgICAgICAgICAgICAgICBPYmplY3RJRCAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQ291bGQgbm90IGRlbGV0ZSBkcmFmdCEnKSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbG9hZCBuZXcgVVJMIGluIHBhcmVudCB3aW5kb3cgYW5kIGNsb3NlIHBvcHVwCiAgICAgICAgJFJldHVyblVSTCB8fD0gIkFjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JFNlbGYtPntUaWNrZXRJRH07QXJ0aWNsZUlEPSRBcnRpY2xlSUQiOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UG9wdXBDbG9zZSgKICAgICAgICAgICAgVVJMID0+ICRSZXR1cm5VUkwsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBSkFYVXBkYXRlJyApIHsKICAgICAgICBteSAlVGlja2V0ICAgICAgICAgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9ICk7CiAgICAgICAgbXkgJEN1c3RvbWVyVXNlciAgID0gJFRpY2tldHtDdXN0b21lclVzZXJJRH07CiAgICAgICAgbXkgJEVsZW1lbnRDaGFuZ2VkID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0VsZW1lbnRDaGFuZ2VkJyApIHx8ICcnOwoKICAgICAgICAjIHVzZSB0aGUgRmllbGRJRHMsIHdoaWNoIGFyZSBmb3VuZCBpbiBBZ2VudFRpY2tldFBob25lL0VtYWlsLCBhbmQgQ3VzdG9tZXJUaWNrZXRNZXNzYWdlCiAgICAgICAgbXkgJVVuaWZvcm1pdHkgPSAoCiAgICAgICAgICAgIE5ld1F1ZXVlSUQgICAgPT4gJ0Rlc3QnLAogICAgICAgICAgICBOZXdPd25lcklEICAgID0+ICdOZXdVc2VySUQnLAogICAgICAgICAgICBOZXdQcmlvcml0eUlEID0+ICdQcmlvcml0eUlEJywKICAgICAgICAgICAgTmV3U3RhdGVJRCAgICA9PiAnTmV4dFN0YXRlSUQnLAogICAgICAgICk7CiAgICAgICAgaWYgKCAkRWxlbWVudENoYW5nZWQgJiYgJFVuaWZvcm1pdHl7JEVsZW1lbnRDaGFuZ2VkfSApIHsKICAgICAgICAgICAgJEVsZW1lbnRDaGFuZ2VkID0gJFVuaWZvcm1pdHl7JEVsZW1lbnRDaGFuZ2VkfTsKICAgICAgICB9CgogICAgICAgICMgdXNlIHRpY2tldCBzZXJ2aWNlIHZhbHVlIHdoZW4gaXQgY2FuJ3QgYmUgY2hhbmdlZAogICAgICAgIGVsc2lmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSAmJiAhJENvbmZpZy0+e1NlcnZpY2V9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17U2VydmljZUlEfSA9ICRUaWNrZXR7U2VydmljZUlEfSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgdXNlIHRoZSBGaWVsZElEcywgd2hpY2ggYXJlIGZvdW5kIGluIEFnZW50VGlja2V0UGhvbmUvRW1haWwsIGFuZCBDdXN0b21lclRpY2tldE1lc3NhZ2U7IGlmIG5lZWRlZCwgZmlsbCB3aXRoIHRpY2tldCB2YWx1ZXMKICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gICAgID0gJEdldFBhcmFte05ld1F1ZXVlSUR9IHx8ICRUaWNrZXR7UXVldWVJRH07CiAgICAgICAgJEdldFBhcmFte0Rlc3R9ICAgICAgICA9ICRHZXRQYXJhbXtRdWV1ZUlEfTsKICAgICAgICAkR2V0UGFyYW17TmV4dFN0YXRlSUR9ID0gJEdldFBhcmFte05ld1N0YXRlSUR9ICAgIHx8ICRUaWNrZXR7U3RhdGVJRH07CiAgICAgICAgJEdldFBhcmFte05ld1VzZXJJRH0gICA9ICRHZXRQYXJhbXtOZXdPd25lcklEfSAgICB8fCAnJzsKICAgICAgICAkR2V0UGFyYW17UHJpb3JpdHlJRH0gID0gJEdldFBhcmFte05ld1ByaW9yaXR5SUR9IHx8ICcnOwoKICAgICAgICAjIGdldCBsaXN0IHR5cGUKICAgICAgICBteSAkVHJlZVZpZXcgICA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKSBlcSAndHJlZScgPyAxIDogMDsKICAgICAgICBteSAkQXV0b3NlbGVjdCA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QUNMOjpBdXRvc2VsZWN0JykgfHwgdW5kZWY7CiAgICAgICAgbXkgJEFDTFByZXNlbGVjdGlvbjsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QUNMOjpBQ0xQcmVzZWxlY3Rpb24nKSApIHsKCiAgICAgICAgICAgICMgZ2V0IGNhY2hlZCBwcmVzZWxlY3Rpb24gcnVsZXMKICAgICAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24gPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RpY2tldEFDTCcsCiAgICAgICAgICAgICAgICBLZXkgID0+ICdQcmVzZWxlY3Rpb24nLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uICkgewogICAgICAgICAgICAgICAgJEFDTFByZXNlbGVjdGlvbiA9ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+U2V0QUNMUHJlc2VsZWN0aW9uQ2FjaGUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJUNvbnZlcmdlbmNlID0gKAogICAgICAgICAgICBTdGRGaWVsZHMgPT4gMCwKICAgICAgICAgICAgRmllbGRzICAgID0+IDAsCiAgICAgICAgKTsKICAgICAgICBteSAlQ2hhbmdlZEVsZW1lbnRzICAgICAgICA9ICRFbGVtZW50Q2hhbmdlZCA/ICggJEVsZW1lbnRDaGFuZ2VkID0+IDEgKSA6ICgpOwogICAgICAgIG15ICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0ID0gJUNoYW5nZWRFbGVtZW50czsKICAgICAgICBteSAlQ2hhbmdlZFN0ZEZpZWxkcyAgICAgICA9ICRFbGVtZW50Q2hhbmdlZCAmJiAkRWxlbWVudENoYW5nZWQgIX4gL15EeW5hbWljRmllbGRfLyA/ICVDaGFuZ2VkRWxlbWVudHMgOiAoKTsKCiAgICAgICAgbXkgJExvb3BQcm90ZWN0aW9uID0gMTAwOwogICAgICAgIG15ICVTdGRGaWVsZFZhbHVlczsKICAgICAgICBteSAlRHluRmllbGRTdGF0ZXMgPSAoCiAgICAgICAgICAgIFZpc2liaWxpdHkgPT4ge30sCiAgICAgICAgICAgIEZpZWxkcyAgICAgPT4ge30sCiAgICAgICAgICAgIFNldHMgICAgICAgPT4ge30sCiAgICAgICAgKTsKCiAgICAgICAgdW50aWwgKCAkQ29udmVyZ2VuY2V7RmllbGRzfSApIHsKCiAgICAgICAgICAgICMgZGV0ZXJtaW5lIHN0YW5kYXJkIGZpZWxkIGlucHV0CiAgICAgICAgICAgIHVudGlsICggJENvbnZlcmdlbmNle1N0ZEZpZWxkc30gKSB7CgogICAgICAgICAgICAgICAgbXkgJU5ld0NoYW5nZWRFbGVtZW50czsKCiAgICAgICAgICAgICAgICAjIHdoaWNoIHN0YW5kYXJkIGZpZWxkcyB0byBjaGVjayAtIEZpZWxkSUQgPT4gR2V0UGFyYW1WYWx1ZSAobmVjZXNzYXJ5IGZvciBEZXN0KQogICAgICAgICAgICAgICAgbXkgJUNoZWNrID0gKAogICAgICAgICAgICAgICAgICAgIERlc3QgICAgICAgICAgICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgICAgICAgICAgICAgIE5ld1VzZXJJRCAgICAgICAgPT4gJ05ld1VzZXJJRCcsCiAgICAgICAgICAgICAgICAgICAgTmV3UmVzcG9uc2libGVJRCA9PiAnTmV3UmVzcG9uc2libGVJRCcsCiAgICAgICAgICAgICAgICAgICAgTmV4dFN0YXRlSUQgICAgICA9PiAnTmV4dFN0YXRlSUQnLAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgICAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgICAgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICAgICA9PiAnU0xBSUQnLAogICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCRBQ0xQcmVzZWxlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICBGSUVMRDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEZpZWxkSUQgKCBzb3J0IGtleXMgJUNoZWNrICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uLT57RmllbGRzfXskRmllbGRJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkRmllbGRJRCBub3QgZGVmaW5lZCBpbiBUaWNrZXRBQ0wgcHJlc2VsZWN0aW9uIHJ1bGVzISIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEF1dG9zZWxlY3QgJiYgJEF1dG9zZWxlY3QtPnskRmllbGRJRH0gJiYgJENoYW5nZWRFbGVtZW50c3skRmllbGRJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkRWxlbWVudCAoIHNvcnQga2V5cyAlQ2hhbmdlZEVsZW1lbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24tPntSdWxlc317VGlja2V0fXskRWxlbWVudH17JEZpZWxkSUR9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJFNlbGYtPntJbnRlcm5hbERlcGVuZGFuY3l9eyRFbGVtZW50fXskRmllbGRJRH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBQ0xQcmVzZWxlY3Rpb24tPntGaWVsZHN9eyRFbGVtZW50fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRFbGVtZW50IG5vdCBkZWZpbmVkIGluIFRpY2tldEFDTCBwcmVzZWxlY3Rpb24gcnVsZXMhIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWxldGUgdW5hZmZlY3RlZCBmaWVsZHMKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRDaGVja3skRmllbGRJRH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZm9yIGVhY2ggc3RhbmRhcmQgZmllbGQgd2hpY2ggaGFzIHRvIGJlIGNoZWNrZWQsIHJ1biB0aGUgZGVmaW5lZCBtZXRob2QKICAgICAgICAgICAgICAgIE1FVEhPRDoKICAgICAgICAgICAgICAgIGZvciBteSAkRmllbGQgKCAkU2VsZi0+e0ZpZWxkTWV0aG9kc30tPkAqICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgTUVUSE9EIGlmICEkQ2hlY2t7ICRGaWVsZC0+e0ZpZWxkSUR9IH07CgogICAgICAgICAgICAgICAgICAgICMgdXNlICRDaGVja3sgJEZpZWxkLT57RmllbGRJRH0gfSBmb3IgRGVzdD0+UXVldWVJRAogICAgICAgICAgICAgICAgICAgICRTdGRGaWVsZFZhbHVlc3sgJENoZWNreyAkRmllbGQtPntGaWVsZElEfSB9IH0gPSAkRmllbGQtPntNZXRob2R9LT4oCiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkQ3VzdG9tZXJVc2VyIHx8ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgICA9PiAkR2V0UGFyYW17TmV4dFN0YXRlSUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgc3BlY2lhbCBzdHVmZiBmb3IgUXVldWVJRC9EZXN0OiBpbmNsdWRlZCBmb3IgbW9yZSBzaW1pbGFyaXR5IHRvIEFnZW50VGlja2V0UGhvbmUgZXRjLjsKICAgICAgICAgICAgICAgICAgICBpZiAoICRGaWVsZC0+e0ZpZWxkSUR9IGVxICdEZXN0JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFN0ZEZpZWxkVmFsdWVze0Rlc3R9ID0gJFN0ZEZpZWxkVmFsdWVze1F1ZXVlSUR9OwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBjdXJyZW50IHNlbGVjdGlvbiBvZiBRdWV1ZUlEIChEZXN0IHdpbGwgYmUgZG9uZSB0b2dldGhlciB3aXRoIHRoZSBvdGhlciBmaWVsZHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFte1F1ZXVlSUR9ICYmICEkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH17ICRHZXRQYXJhbXtRdWV1ZUlEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgYXV0b3NlbGVjdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17UXVldWVJRH0gJiYgJEF1dG9zZWxlY3QgJiYgJEF1dG9zZWxlY3QtPntEZXN0fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtRdWV1ZUlEfSA9ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+QXV0b3NlbGVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHx8ICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUgLSBjYWxjdWxhdGUgUHJpb3JpdHkgdmlhIENJUCBtYXRyaXgKICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRGaWVsZC0+e0ZpZWxkSUR9IGVxICdQcmlvcml0eUlEJyAmJiAkQ0lQQ2FsY3VsYXRlICYmICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBjcml0aWNhbGl0eSBlaXRoZXIgZnJvbSB0aGUgbWFudWFsbHkgc2V0IGR5bmFtaWMgZmllbGQsIG9yIHRoZSBzZXJ2aWNlCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRDcml0aWNhbGl0eSA9ICRHZXRQYXJhbXtEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRDcml0aWNhbGl0eSAmJiAkR2V0UGFyYW17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICVTZXJ2aWNlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ3JpdGljYWxpdHkgPSAkU2VydmljZXtDcml0aWNhbGl0eX07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENyaXRpY2FsaXR5ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVjYWxjdWxhdGUgdGhlIHByaW9yaXR5IGlmIGFueSBvZiB0aGUgaW1wYWN0aW5nIGVsZW1lbnRzIGNoYW5nZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENoYW5nZWRFbGVtZW50c3tEeW5hbWljRmllbGRfSVRTTUltcGFjdH0gfHwgJENoYW5nZWRFbGVtZW50c3tTZXJ2aWNlSUR9IHx8ICRDaGFuZ2VkRWxlbWVudHN7RHluYW1pY0ZpZWxkX0lUU01Dcml0aWNhbGl0eX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPlByaW9yaXR5QWxsb2NhdGlvbkdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJENyaXRpY2FsaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBhY3QgICAgICA9PiAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkU3RkRmllbGRWYWx1ZXN7UHJpb3JpdHlJRH17ICRQcmlvcml0eUlEIH0gJiYgJFByaW9yaXR5SUQgbmUgJEdldFBhcmFte1ByaW9yaXR5SUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UHJpb3JpdHlJRH0gICAgICAgICAgID0gJFByaW9yaXR5SUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROZXdDaGFuZ2VkRWxlbWVudHN7UHJpb3JpdHlJRH0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlZFN0ZEZpZWxkc3tQcmlvcml0eUlEfSAgID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB3ZSBlbmZvcmNlIENJUEFsbG9jYXRpb24gaW4gYW55IGNhc2UgZGVsZXRlIGFsbCBvdGhlciBwcmlvcml0eSBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtQcmlvcml0eUlEfSAmJiAkQ0lQQ2FsY3VsYXRlID09IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFN0ZEZpZWxkVmFsdWVze1ByaW9yaXR5SUR9ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UHJpb3JpdHlJRH0gPT4gJFN0ZEZpZWxkVmFsdWVze1ByaW9yaXR5SUR9eyAkR2V0UGFyYW17UHJpb3JpdHlJRH0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQojIEVPIElUU01Db3JlCgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgd2hldGhlciBjdXJyZW50IHNlbGVjdGVkIHZhbHVlIGlzIHN0aWxsIHZhbGlkIGZvciB0aGUgZmllbGQKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfQogICAgICAgICAgICAgICAgICAgICAgICAmJiAhJFN0ZEZpZWxkVmFsdWVzeyAkRmllbGQtPntGaWVsZElEfSB9eyAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gfQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAjIGlmIG5vdCBlbXB0eSB0aGUgZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9ICAgICAgICAgICA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAkTmV3Q2hhbmdlZEVsZW1lbnRzeyAkRmllbGQtPntGaWVsZElEfSB9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgJENoYW5nZWRTdGRGaWVsZHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gICA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGF1dG9zZWxlY3QKICAgICAgICAgICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gJiYgJEF1dG9zZWxlY3QgJiYgJEF1dG9zZWxlY3QtPnsgJEZpZWxkLT57RmllbGRJRH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9ID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5BdXRvc2VsZWN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgPT4gJFN0ZEZpZWxkVmFsdWVzeyAkRmllbGQtPntGaWVsZElEfSB9LAogICAgICAgICAgICAgICAgICAgICAgICApIHx8ICcnOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICROZXdDaGFuZ2VkRWxlbWVudHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJENoYW5nZWRTdGRGaWVsZHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gICA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhJU5ld0NoYW5nZWRFbGVtZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzID0gJU5ld0NoYW5nZWRFbGVtZW50czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydCA9ICgKICAgICAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydCwKICAgICAgICAgICAgICAgICAgICAlTmV3Q2hhbmdlZEVsZW1lbnRzLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICRMb29wUHJvdGVjdGlvbi0tIDwgMSApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlJhbiBpbnRvIHVucmVzb2x2YWJsZSBsb29wISIsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50cyAgICAgICAgPSAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydDsKICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50c0RGU3RhcnQgPSAoKTsKCiAgICAgICAgICAgICMgY2hlY2sgZHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgbXkgJUN1ckZpZWxkU3RhdGVzOwogICAgICAgICAgICBpZiAoJUNoYW5nZWRFbGVtZW50cykgewoKICAgICAgICAgICAgICAgICMgZ2V0IHZhbHVlcyBhbmQgdmlzaWJpbGl0eSBvZiBkeW5hbWljIGZpZWxkcwogICAgICAgICAgICAgICAgJUN1ckZpZWxkU3RhdGVzID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5HZXRGaWVsZFN0YXRlcygKICAgICAgICAgICAgICAgICAgICBUaWNrZXRPYmplY3QgICAgICAgICAgICAgID0+ICRUaWNrZXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyAgICAgICAgICAgICA9PiAkU2VsZi0+e0R5bmFtaWNGaWVsZH0sCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9PiAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkRWxlbWVudHMgICAgICAgICAgID0+IFwlQ2hhbmdlZEVsZW1lbnRzLCAgICAgICAgICAgICMgb3B0aW9uYWwgdG8gcmVkdWNlIEFDTCBldmFsdWF0aW9uCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgICAgICAgICAgICAgID0+ICRDdXN0b21lclVzZXIgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgICAgICAgICAgICA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIEF1dG9zZWxlY3QgICAgICAgICAgICAgICAgPT4gJEF1dG9zZWxlY3QsCiAgICAgICAgICAgICAgICAgICAgQUNMUHJlc2VsZWN0aW9uICAgICAgICAgICA9PiAkQUNMUHJlc2VsZWN0aW9uLAogICAgICAgICAgICAgICAgICAgIExvb3BQcm90ZWN0aW9uICAgICAgICAgICAgPT4gXCRMb29wUHJvdGVjdGlvbiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjb21iaW5lIEZpZWxkU3RhdGVzCiAgICAgICAgICAgICAgICAkRHluRmllbGRTdGF0ZXN7RmllbGRzfSA9IHsKICAgICAgICAgICAgICAgICAgICAleyAkRHluRmllbGRTdGF0ZXN7RmllbGRzfSB9LAogICAgICAgICAgICAgICAgICAgICV7ICRDdXJGaWVsZFN0YXRlc3tGaWVsZHN9IH0sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgJER5bkZpZWxkU3RhdGVze1Zpc2liaWxpdHl9ID0gewogICAgICAgICAgICAgICAgICAgICV7ICREeW5GaWVsZFN0YXRlc3tWaXNpYmlsaXR5fSB9LAogICAgICAgICAgICAgICAgICAgICV7ICRDdXJGaWVsZFN0YXRlc3tWaXNpYmlsaXR5fSB9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICREeW5GaWVsZFN0YXRlc3tTZXRzfSA9IHsKICAgICAgICAgICAgICAgICAgICAleyAkRHluRmllbGRTdGF0ZXN7U2V0c30gfSwKICAgICAgICAgICAgICAgICAgICAleyAkQ3VyRmllbGRTdGF0ZXN7U2V0c30gfSwKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgIyBzdG9yZSBuZXcgdmFsdWVzCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfSA9IHsKICAgICAgICAgICAgICAgICAgICAleyAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfSB9LAogICAgICAgICAgICAgICAgICAgICV7ICRDdXJGaWVsZFN0YXRlc3tOZXdWYWx1ZXN9IH0sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlmIGR5bmFtaWMgZmllbGRzIGNoYW5nZWQsIGNoZWNrIHN0YW5kYXJkIGZpZWxkcyBhZ2FpbgogICAgICAgICAgICBpZiAoICVDdXJGaWVsZFN0YXRlcyAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJEN1ckZpZWxkU3RhdGVze05ld1ZhbHVlc30gKSApIHsKICAgICAgICAgICAgICAgICRDb252ZXJnZW5jZXtTdGRGaWVsZHN9ID0gMDsKICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHMgPSBtYXAgeyAkXyA9PiAxIH0ga2V5cyAleyAkQ3VyRmllbGRTdGF0ZXN7TmV3VmFsdWVzfSB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJENvbnZlcmdlbmNle0ZpZWxkc30gPSAxOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCB0aGUgQUpBWCByZXR1cm4gZm9yIHRoZSBkeW5hbWljIGZpZWxkcwogICAgICAgIG15IEBEeW5hbWljRmllbGRBSkFYID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkJ1aWxkQUpBWFJldHVybigKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlncyA9PiAkU2VsZi0+e0R5bmFtaWNGaWVsZH0sCiAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgRHluRmllbGRTdGF0ZXMgICAgICA9PiBcJUR5bkZpZWxkU3RhdGVzLAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgQUpBWCByZXR1cm4gZm9yIHRoZSBzdGFuZGFyZCBmaWVsZHMKICAgICAgICBteSBAU3RkRmllbGRBSkFYOwogICAgICAgIG15ICVBdHRyaWJ1dGVzID0gKAogICAgICAgICAgICBEZXN0ID0+IHsKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFRyZWVWaWV3ICAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBOZXdVc2VySUQgPT4gewogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE5ld1Jlc3BvbnNpYmxlSUQgPT4gewogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE5leHRTdGF0ZUlEID0+IHsKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByaW9yaXR5SUQgPT4gewogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIE1heCAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2VydmljZUlEID0+IHsKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+ICRUcmVlVmlldywKICAgICAgICAgICAgICAgIFRyZWVWaWV3ICAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTTEFJRCA9PiB7CiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3RhbmRhcmRUZW1wbGF0ZUlEID0+IHsKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBUeXBlSUQgPT4gewogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgICAgIGRlbGV0ZSAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH07CiAgICAgICAgbXkgJURpdmVyc2l0eSA9IHJldmVyc2UgJVVuaWZvcm1pdHk7CiAgICAgICAgZm9yIG15ICRGaWVsZCAoIHNvcnQga2V5cyAlU3RkRmllbGRWYWx1ZXMgKSB7CiAgICAgICAgICAgIHB1c2ggQFN0ZEZpZWxkQUpBWCwgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkRGl2ZXJzaXR5eyRGaWVsZH0gfHwgJEZpZWxkLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiAkU3RkRmllbGRWYWx1ZXN7JEZpZWxkfSwKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJEdldFBhcmFteyRGaWVsZH0sCiAgICAgICAgICAgICAgICAleyAkQXR0cmlidXRlc3skRmllbGR9IH0sCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBteSBAVGVtcGxhdGVBSkFYOwoKICAgICAgICAjIHVwZGF0ZSB0aWNrZXQgYm9keSBhbmQgYXR0YWNobWVudHMgaWYgbmVlZGVkLgogICAgICAgIGlmICggJENoYW5nZWRTdGRGaWVsZHN7U3RhbmRhcmRUZW1wbGF0ZUlEfSApIHsKICAgICAgICAgICAgbXkgQFRpY2tldEF0dGFjaG1lbnRzOwogICAgICAgICAgICBteSAkVGVtcGxhdGVUZXh0OwoKICAgICAgICAgICAgIyByZW1vdmUgYWxsIGF0dGFjaG1lbnRzIGZyb20gdGhlIFVwbG9hZCBjYWNoZQogICAgICAgICAgICBteSAkUmVtb3ZlU3VjY2VzcyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEUmVtb3ZlKAogICAgICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJFJlbW92ZVN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJGb3JtIGF0dGFjaG1lbnRzIGNvdWxkIG5vdCBiZSBkZWxldGVkISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCB0aGUgdGVtcGxhdGUgdGV4dCBhbmQgc2V0IG5ldyBhdHRhY2htZW50cyBpZiBhIHRlbXBsYXRlIGlzIHNlbGVjdGVkCiAgICAgICAgICAgIGlmICggSXNQb3NpdGl2ZUludGVnZXIoICRHZXRQYXJhbXtTdGFuZGFyZFRlbXBsYXRlSUR9ICkgKSB7CiAgICAgICAgICAgICAgICBteSAkVGVtcGxhdGVHZW5lcmF0b3IgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGVtcGxhdGVHZW5lcmF0b3InKTsKCiAgICAgICAgICAgICAgICAjIHNldCB0ZW1wbGF0ZSB0ZXh0LCByZXBsYWNlIHNtYXJ0IHRhZ3MgKGxpbWl0ZWQgYXMgdGlja2V0IGlzIG5vdCBjcmVhdGVkKQogICAgICAgICAgICAgICAgJFRlbXBsYXRlVGV4dCA9ICRUZW1wbGF0ZUdlbmVyYXRvci0+VGVtcGxhdGUoCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkR2V0UGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGlmIFJlcGx5VG9BcnRpY2xlIGlzIGdpdmVuLCBnZXQgdGhpcyBhcnRpY2xlIHRvIGdlbmVyYXRlCiAgICAgICAgICAgICAgICAjIHRoZSBxdW90ZWQgYXJ0aWNsZSBjb250ZW50CiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57UmVwbHlUb0FydGljbGV9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIGdldCBhcnRpY2xlIHRvIHF1b3RlCiAgICAgICAgICAgICAgICAgICAgbXkgJEJvZHkgPSAkTGF5b3V0T2JqZWN0LT5BcnRpY2xlUXVvdGUoCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICA9PiAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlfSwKICAgICAgICAgICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBVcGxvYWRDYWNoZU9iamVjdCA9PiAkVXBsb2FkQ2FjaGVPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBwcmVwYXJlIHF1b3RlZCBib2R5IGNvbnRlbnQKICAgICAgICAgICAgICAgICAgICAkQm9keSA9ICRTZWxmLT5fR2V0UXVvdGVkUmVwbHlCb2R5KAogICAgICAgICAgICAgICAgICAgICAgICAleyAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlQ29udGVudH0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PiAkQm9keSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGVtcGxhdGVUZXh0ID0gJFRlbXBsYXRlVGV4dCAuICc8YnI+PGJyPicgLiAkQm9keTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUZW1wbGF0ZVRleHQgPSAkVGVtcGxhdGVUZXh0IC4gIlxuXG4iIC4gJEJvZHk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY3JlYXRlIFN0ZEF0dGFjaG1lbnRPYmplY3QKICAgICAgICAgICAgICAgIG15ICRTdGRBdHRhY2htZW50T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0ZEF0dGFjaG1lbnQnKTsKCiAgICAgICAgICAgICAgICAjIGFkZCBzdGQuIGF0dGFjaG1lbnRzIHRvIHRpY2tldAogICAgICAgICAgICAgICAgbXkgJUFsbFN0ZEF0dGFjaG1lbnRzID0gJFN0ZEF0dGFjaG1lbnRPYmplY3QtPlN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlTWVtYmVyTGlzdCgKICAgICAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJEdldFBhcmFte1N0YW5kYXJkVGVtcGxhdGVJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgZm9yICggc29ydCBrZXlzICVBbGxTdGRBdHRhY2htZW50cyApIHsKICAgICAgICAgICAgICAgICAgICBteSAlQXR0YWNobWVudHNEYXRhID0gJFN0ZEF0dGFjaG1lbnRPYmplY3QtPlN0ZEF0dGFjaG1lbnRHZXQoIElEID0+ICRfICk7CiAgICAgICAgICAgICAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURBZGRGaWxlKAogICAgICAgICAgICAgICAgICAgICAgICBGb3JtSUQgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgICAgICAgICAgJUF0dGFjaG1lbnRzRGF0YSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc2VuZCBhIGxpc3Qgb2YgYXR0YWNobWVudHMgaW4gdGhlIHVwbG9hZCBjYWNoZSBiYWNrIHRvIHRoZSBjbGllbnQtc2lkZSBKYXZhU2NyaXB0CiAgICAgICAgICAgICAgICAjIHdoaWNoIHJlbmRlcnMgdGhlbiB0aGUgbGlzdCBvZiBjdXJyZW50bHkgdXBsb2FkZWQgYXR0YWNobWVudHMKICAgICAgICAgICAgICAgIEBUaWNrZXRBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQFRpY2tldEF0dGFjaG1lbnRzKSB7CiAgICAgICAgICAgICAgICAgICAgJEF0dGFjaG1lbnQtPntGaWxlc2l6ZX0gPSAkTGF5b3V0T2JqZWN0LT5IdW1hblJlYWRhYmxlRGF0YVNpemUoCiAgICAgICAgICAgICAgICAgICAgICAgIFNpemUgPT4gJEF0dGFjaG1lbnQtPntGaWxlc2l6ZX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgQFRlbXBsYXRlQUpBWCA9ICgKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdVc2VUZW1wbGF0ZU5vdGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJzAnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSaWNoVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkVGVtcGxhdGVUZXh0IHx8ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICA9PiAnVGlja2V0QXR0YWNobWVudHMnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFxAVGlja2V0QXR0YWNobWVudHMsCiAgICAgICAgICAgICAgICAgICAgS2VlcERhdGEgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uSlNPTigKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgQFN0ZEZpZWxkQUpBWCwKICAgICAgICAgICAgICAgIEBEeW5hbWljRmllbGRBSkFYLAogICAgICAgICAgICAgICAgQFRlbXBsYXRlQUpBWCwKICAgICAgICAgICAgXSwKICAgICAgICApOwoKICAgICAgICAjIGNhbid0IHVzZSBKU09OUmVwbHkgaGVyZSwgYXMgd2UgYWxyZWFkeSBoYXZlIEpTT04KICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICBteSAkQm9keSA9ICcnOwoKICAgICAgICAjIGlmIFJlcGx5VG9BcnRpY2xlIGlzIGdpdmVuLCBnZXQgdGhpcyBhcnRpY2xlIHRvIGdlbmVyYXRlCiAgICAgICAgIyB0aGUgcXVvdGVkIGFydGljbGUgY29udGVudAogICAgICAgIGlmICggJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0gKSB7CgogICAgICAgICAgICAjIGdldCBhcnRpY2xlIHRvIHF1b3RlCiAgICAgICAgICAgICRCb2R5ID0gJExheW91dE9iamVjdC0+QXJ0aWNsZVF1b3RlKAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICA9PiAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlfSwKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIFVwbG9hZENhY2hlT2JqZWN0ID0+ICRVcGxvYWRDYWNoZU9iamVjdCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcHJlcGFyZSBxdW90ZWQgYm9keSBjb250ZW50CiAgICAgICAgICAgICRCb2R5ID0gJFNlbGYtPl9HZXRRdW90ZWRSZXBseUJvZHkoCiAgICAgICAgICAgICAgICAleyAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlQ29udGVudH0gfSwKICAgICAgICAgICAgICAgIEJvZHkgPT4gJEJvZHksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGlmIGEgYm9keSBjb250ZW50IHdhcyBwcmUgZGVmaW5lZCwgYWRkIHRoaXMgYmVmb3JlIHRoZSBxdW90ZWQgYXJ0aWNsZSBjb250ZW50CiAgICAgICAgaWYgKCAkR2V0UGFyYW17Qm9keX0gKSB7CgogICAgICAgICAgICAjIG1ha2Ugc3VyZSBib2R5IGlzIHJpY2ggdGV4dAogICAgICAgICAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICYmICEkU2VsZi0+e0FydGljbGVJRH0gKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJSaWNoVGV4dCgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEdldFBhcmFte0JvZHl9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJEJvZHkgPSAkR2V0UGFyYW17Qm9keX0gLiAkQm9keTsKICAgICAgICB9CgogICAgICAgICMgZmlsbCB1cCBjb25maWd1cmVkIGRlZmF1bHQgdmFycwogICAgICAgIGlmICggJEJvZHkgZXEgJycgJiYgJENvbmZpZy0+e0JvZHl9ICkgewogICAgICAgICAgICAkQm9keSA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICRDb25maWctPntCb2R5fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgbWFrZSBzdXJlIGJvZHkgaXMgcmljaCB0ZXh0CiAgICAgICAgICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgICAgICAkQm9keSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMlJpY2hUZXh0KAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkQm9keSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2V0IEJvZHkgdmFyIHRvIGNhbGN1bGF0ZWQgY29udGVudAogICAgICAgICRHZXRQYXJhbXtCb2R5fSA9ICRCb2R5OwoKICAgICAgICBteSAlU2FmZXR5Q2hlY2tSZXN1bHQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlNhZmV0eSgKICAgICAgICAgICAgU3RyaW5nID0+ICRHZXRQYXJhbXtCb2R5fSwKCiAgICAgICAgICAgICMgU3RyaXAgb3V0IGV4dGVybmFsIGNvbnRlbnQgaWYgQmxvY2tMb2FkaW5nUmVtb3RlQ29udGVudCBpcyBlbmFibGVkLgogICAgICAgICAgICBOb0V4dFNyY0xvYWQgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpCbG9ja0xvYWRpbmdSZW1vdGVDb250ZW50JyksCgogICAgICAgICAgICAjIERpc2FsbG93IHBvdGVudGlhbGx5IHVuc2FmZSBjb250ZW50LgogICAgICAgICAgICBOb0FwcGxldCAgICAgPT4gMSwKICAgICAgICAgICAgTm9PYmplY3QgICAgID0+IDEsCiAgICAgICAgICAgIE5vRW1iZWQgICAgICA9PiAxLAogICAgICAgICAgICBOb1NWRyAgICAgICAgPT4gMSwKICAgICAgICAgICAgTm9KYXZhU2NyaXB0ID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkR2V0UGFyYW17Qm9keX0gPSAkU2FmZXR5Q2hlY2tSZXN1bHR7U3RyaW5nfTsKCiAgICAgICAgaWYgKCAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlfSApIHsKICAgICAgICAgICAgbXkgJFRpY2tldFN1YmplY3RSZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTdWJqZWN0UmUnKSB8fCAnUmUnOwogICAgICAgICAgICAkR2V0UGFyYW17U3ViamVjdH0gPSAkVGlja2V0U3ViamVjdFJlIC4gJzogJyAuICRTZWxmLT57UmVwbHlUb0FydGljbGVDb250ZW50fXtTdWJqZWN0fTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAhZGVmaW5lZCAkR2V0UGFyYW17U3ViamVjdH0gJiYgJENvbmZpZy0+e1N1YmplY3R9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17U3ViamVjdH0gPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAkQ29uZmlnLT57U3ViamVjdH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHVzZSB0aWNrZXQgdmFsdWVzCiAgICAgICAgaWYgKCAkQ29uZmlnLT57UXVldWV9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAkVGlja2V0e1F1ZXVlSUR9IC8vICcnOwogICAgICAgICAgICAkR2V0UGFyYW17RGVzdH0gICAgPSAkVGlja2V0e1F1ZXVlSUR9IC8vICcnOwogICAgICAgIH0KICAgICAgICBpZiAoICRDb25maWctPntTZXJ2aWNlfSApIHsKICAgICAgICAgICAgJEdldFBhcmFte1NMQUlEfSAgICAgPSAkVGlja2V0e1NMQUlEfSAgICAgLy8gJyc7CiAgICAgICAgICAgICRHZXRQYXJhbXtTZXJ2aWNlSUR9ID0gJFRpY2tldHtTZXJ2aWNlSUR9IC8vICcnOwogICAgICAgIH0KICAgICAgICBpZiAoICRDb25maWctPntUaWNrZXRUeXBlfSApIHsKICAgICAgICAgICAgJEdldFBhcmFte1R5cGVJRH0gPSAkVGlja2V0e1R5cGVJRH0gLy8gJyc7CiAgICAgICAgfQogICAgICAgIGlmICggJENvbmZpZy0+e1N0YXRlfSApIHsKICAgICAgICAgICAgJEdldFBhcmFte05leHRTdGF0ZUlEfSA9ICRUaWNrZXR7U3RhdGVJRH0gLy8gJyc7CiAgICAgICAgfQogICAgICAgIGlmICggJENvbmZpZy0+e1ByaW9yaXR5fSApIHsKICAgICAgICAgICAgJEdldFBhcmFte1ByaW9yaXR5SUR9ID0gJFRpY2tldHtQcmlvcml0eUlEfSAvLyAnJzsKICAgICAgICB9CiAgICAgICAgbXkgJEN1c3RvbWVyVXNlciA9ICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9IC8vICcnOwoKICAgICAgICAjIEdldCB2YWx1ZXMgZm9yIFRpY2tldCBmaWVsZHMgYW5kIHVzZSBkZWZhdWx0IHZhbHVlIGZvciBBcnRpY2xlIGZpZWxkcywgaWYgZ2l2ZW4gKGFsbCBzY3JlZW5zIGJhc2VkIG9uCiAgICAgICAgIyBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBnZW5lcmF0ZSBhIG5ldyBhcnRpY2xlLCB0aGVuIGFydGljbGUgZmllbGRzIHdpbGwgYmUgYWx3YXlzIGRlZmF1bHQgdmFsdWUgb3IKICAgICAgICAjIGVtcHR5IGF0IHRoZSBiZWdpbm5pbmcpLgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIHZhbHVlcyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCB1bmxlc3MgSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAjIFRoaXMgb3ZlcndyaXRlcyB0aGUgdmFsdWVzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIHRha2VuIGZyb20gdGhlIHdlYiByZXF1ZXN0LgogICAgICAgICAgICAjIE5vdGUgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IHZhbHVlcyBmcm9tIHRoZSB3ZWIgcmVxdWVzdCwKICAgICAgICAgICAgIyBiZWNhdXNlIHN1Ym1pdHMsIHN1Y2Nlc3NmdWwgYW5kIHVuc3VjY2Vzc2Z1bCBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5IGFib3ZlLgogICAgICAgICAgICBpZiAoICREeW5hbWljRmllbGRDb25maWctPntPYmplY3RUeXBlfSBlcSAnVGlja2V0JyApIHsKCiAgICAgICAgICAgICAgICAjIFZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UgZnJvbSBUaWNrZXQuCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICREeW5hbWljRmllbGRDb25maWctPntPYmplY3RUeXBlfSBlcSAnQXJ0aWNsZScgKSB7CiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUlEfSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBpZiB3ZSBhcmUgaW4gZWRpdCBtb2RlIHRha2UgdGhlIGRiIGRhdGEgb2YgdGhlIGFydGljbGUKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkQXJ0aWNsZURhdGF7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte0R5bmFtaWNGaWVsZH17ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntEZWZhdWx0VmFsdWV9IHx8ICcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkQXV0b3NlbGVjdCA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QUNMOjpBdXRvc2VsZWN0JykgfHwgdW5kZWY7CgogICAgICAgICMgZ2F0aGVyIGZpZWxkcyB3aGljaCBhcmUgc3VwcG9zZWQgdG8gYmUgaGlkZGVuIHdoZW4gYXV0by1zZWxlY3RlZAogICAgICAgIG15ICRIaWRlQXV0b3NlbGVjdGVkSlNPTjsKICAgICAgICBpZiAoJEF1dG9zZWxlY3QpIHsKICAgICAgICAgICAgbXkgQEhpZGVBdXRvc2VsZWN0ZWQgPSBncmVwIHsgIXJlZiggJEF1dG9zZWxlY3QtPnskX30gKSAmJiAkQXV0b3NlbGVjdC0+eyRffSA9PSAyIH0ga2V5cyAleyRBdXRvc2VsZWN0fTsKICAgICAgICAgICAgaWYgKCAkQXV0b3NlbGVjdC0+e0R5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBIaWRlQXV0b3NlbGVjdGVkLAogICAgICAgICAgICAgICAgICAgIG1hcCB7ICJEeW5hbWljRmllbGRfIiAuICRfIH0KICAgICAgICAgICAgICAgICAgICAoIGdyZXAgeyAkQXV0b3NlbGVjdC0+e0R5bmFtaWNGaWVsZH17JF99ID09IDIgfSBrZXlzICV7ICRBdXRvc2VsZWN0LT57RHluYW1pY0ZpZWxkfSB9ICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChASGlkZUF1dG9zZWxlY3RlZCkgewogICAgICAgICAgICAgICAgbXkgJEpTT05PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpOwogICAgICAgICAgICAgICAgJEhpZGVBdXRvc2VsZWN0ZWRKU09OID0gJEpTT05PYmplY3QtPkVuY29kZSgKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IFxASGlkZUF1dG9zZWxlY3RlZCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRBQ0xQcmVzZWxlY3Rpb247CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldEFDTDo6QUNMUHJlc2VsZWN0aW9uJykgKSB7CgogICAgICAgICAgICAjIGdldCBjYWNoZWQgcHJlc2VsZWN0aW9uIHJ1bGVzCiAgICAgICAgICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwogICAgICAgICAgICAkQUNMUHJlc2VsZWN0aW9uID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgICAgICBUeXBlID0+ICdUaWNrZXRBQ0wnLAogICAgICAgICAgICAgICAgS2V5ICA9PiAnUHJlc2VsZWN0aW9uJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJEFDTFByZXNlbGVjdGlvbiApIHsKICAgICAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24gPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPlNldEFDTFByZXNlbGVjdGlvbkNhY2hlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICVDb252ZXJnZW5jZSA9ICgKICAgICAgICAgICAgU3RkRmllbGRzID0+IDAsCiAgICAgICAgICAgIEZpZWxkcyAgICA9PiAwLAogICAgICAgICk7CiAgICAgICAgbXkgJUNoYW5nZWRFbGVtZW50czsKICAgICAgICBteSAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydDsKICAgICAgICBteSAlQ2hhbmdlZFN0ZEZpZWxkczsKCiMgUm90aGVyIE9TUyAvIElUU01Db3JlIC0gY2FsY3VsYXRlIFByaW9yaXR5IHZpYSBDSVAgbWF0cml4CiAgICAgICAgaWYgKCAkQ0lQQ2FsY3VsYXRlICYmICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fQogICAgICAgICAgICAmJiAoICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9IHx8ICRHZXRQYXJhbXtTZXJ2aWNlSUR9ICkgKSB7CgogICAgICAgICAgICAjIGlmIHdlIGhhdmUgYW4gaW5pdGlhbCBjcml0aWNhbGl0eSBhbmQgaW1wYWN0LCB0cmlnZ2VyIHByaW9yaXR5IGNhbGN1bGF0aW9uCiAgICAgICAgICAgICRDaGFuZ2VkRWxlbWVudHN7RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9ID0gMTsKICAgICAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICAgICAgbXkgJExvb3BQcm90ZWN0aW9uID0gMTAwOwogICAgICAgIG15ICVTdGRGaWVsZFZhbHVlczsKICAgICAgICBteSAlRHluRmllbGRTdGF0ZXMgPSAoCiAgICAgICAgICAgIFZpc2liaWxpdHkgPT4ge30sCiAgICAgICAgICAgIEZpZWxkcyAgICAgPT4ge30sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJEluaXRpYWxSdW4gPSAxOwoKICAgICAgICB1bnRpbCAoICRDb252ZXJnZW5jZXtGaWVsZHN9ICkgewoKICAgICAgICAgICAgIyBkZXRlcm1pbmUgc3RhbmRhcmQgZmllbGQgaW5wdXQKICAgICAgICAgICAgdW50aWwgKCAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSApIHsKCiAgICAgICAgICAgICAgICBteSAlTmV3Q2hhbmdlZEVsZW1lbnRzOwoKICAgICAgICAgICAgICAgICMgd2hpY2ggc3RhbmRhcmQgZmllbGRzIHRvIGNoZWNrIC0gRmllbGRJRCA9PiBHZXRQYXJhbVZhbHVlIChuZWNlc3NhcnkgZm9yIERlc3QpCiAgICAgICAgICAgICAgICBteSAlQ2hlY2sgPSAoCiAgICAgICAgICAgICAgICAgICAgRGVzdCAgICAgICAgICAgICA9PiAnUXVldWVJRCcsCiAgICAgICAgICAgICAgICAgICAgTmV3VXNlcklEICAgICAgICA9PiAnTmV3VXNlcklEJywKICAgICAgICAgICAgICAgICAgICBOZXdSZXNwb25zaWJsZUlEID0+ICdOZXdSZXNwb25zaWJsZUlEJywKICAgICAgICAgICAgICAgICAgICBOZXh0U3RhdGVJRCAgICAgID0+ICdOZXh0U3RhdGVJRCcsCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICAgICA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEICAgICAgICA9PiAnU2VydmljZUlEJywKICAgICAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgICAgID0+ICdTTEFJRCcsCiAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICAgICA9PiAnVHlwZUlEJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICRBQ0xQcmVzZWxlY3Rpb24gJiYgISRJbml0aWFsUnVuICkgewogICAgICAgICAgICAgICAgICAgIEZJRUxEOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRmllbGRJRCAoIHNvcnQga2V5cyAlQ2hlY2sgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBQ0xQcmVzZWxlY3Rpb24tPntGaWVsZHN9eyRGaWVsZElEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRGaWVsZElEIG5vdCBkZWZpbmVkIGluIFRpY2tldEFDTCBwcmVzZWxlY3Rpb24gcnVsZXMhIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+eyRGaWVsZElEfSAmJiAkQ2hhbmdlZEVsZW1lbnRzeyRGaWVsZElEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRFbGVtZW50ICggc29ydCBrZXlzICVDaGFuZ2VkRWxlbWVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFDTFByZXNlbGVjdGlvbi0+e1J1bGVzfXtUaWNrZXR9eyRFbGVtZW50fXskRmllbGRJRH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkU2VsZi0+e0ludGVybmFsRGVwZW5kYW5jeX17JEVsZW1lbnR9eyRGaWVsZElEfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEFDTFByZXNlbGVjdGlvbi0+e0ZpZWxkc317JEVsZW1lbnR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEVsZW1lbnQgbm90IGRlZmluZWQgaW4gVGlja2V0QUNMIHByZXNlbGVjdGlvbiBydWxlcyEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGRlbGV0ZSB1bmFmZmVjdGVkIGZpZWxkcwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJENoZWNreyRGaWVsZElEfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBmb3IgZWFjaCBzdGFuZGFyZCBmaWVsZCB3aGljaCBoYXMgdG8gYmUgY2hlY2tlZCwgcnVuIHRoZSBkZWZpbmVkIG1ldGhvZAogICAgICAgICAgICAgICAgTUVUSE9EOgogICAgICAgICAgICAgICAgZm9yIG15ICRGaWVsZCAoIEB7ICRTZWxmLT57RmllbGRNZXRob2RzfSB9ICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgTUVUSE9EIHVubGVzcyAkQ2hlY2t7ICRGaWVsZC0+e0ZpZWxkSUR9IH07CgogICAgICAgICAgICAgICAgICAgICMgdXNlICRDaGVja3sgJEZpZWxkLT57RmllbGRJRH0gfSBmb3IgRGVzdD0+UXVldWVJRAogICAgICAgICAgICAgICAgICAgICRTdGRGaWVsZFZhbHVlc3sgJENoZWNreyAkRmllbGQtPntGaWVsZElEfSB9IH0gPSAkRmllbGQtPntNZXRob2R9LT4oCiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkQ3VzdG9tZXJVc2VyIHx8ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgICA9PiAkR2V0UGFyYW17TmV4dFN0YXRlSUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgc3BlY2lhbCBzdHVmZiBmb3IgUXVldWVJRC9EZXN0OiBpbmNsdWRlZCBmb3IgbW9yZSBzaW1pbGFyaXR5IHRvIEFnZW50VGlja2V0UGhvbmUgZXRjLjsKICAgICAgICAgICAgICAgICAgICBpZiAoICRGaWVsZC0+e0ZpZWxkSUR9IGVxICdEZXN0JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFN0ZEZpZWxkVmFsdWVze0Rlc3R9ID0gJFN0ZEZpZWxkVmFsdWVze1F1ZXVlSUR9OwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBjdXJyZW50IHNlbGVjdGlvbiBvZiBRdWV1ZUlEIChEZXN0IHdpbGwgYmUgZG9uZSB0b2dldGhlciB3aXRoIHRoZSBvdGhlciBmaWVsZHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFte1F1ZXVlSUR9ICYmICEkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH17ICRHZXRQYXJhbXtRdWV1ZUlEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgYXV0b3NlbGVjdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17UXVldWVJRH0gJiYgJEF1dG9zZWxlY3QgJiYgJEF1dG9zZWxlY3QtPntEZXN0fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtRdWV1ZUlEfSA9ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+QXV0b3NlbGVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHx8ICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUgLSBjYWxjdWxhdGUgUHJpb3JpdHkgdmlhIENJUCBtYXRyaXgKICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRGaWVsZC0+e0ZpZWxkSUR9IGVxICdQcmlvcml0eUlEJyAmJiAkQ0lQQ2FsY3VsYXRlICYmICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBjcml0aWNhbGl0eSBlaXRoZXIgZnJvbSB0aGUgbWFudWFsbHkgc2V0IGR5bmFtaWMgZmllbGQsIG9yIHRoZSBzZXJ2aWNlCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRDcml0aWNhbGl0eSA9ICRHZXRQYXJhbXtEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRDcml0aWNhbGl0eSAmJiAkR2V0UGFyYW17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICVTZXJ2aWNlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ3JpdGljYWxpdHkgPSAkU2VydmljZXtDcml0aWNhbGl0eX07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENyaXRpY2FsaXR5ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVjYWxjdWxhdGUgdGhlIHByaW9yaXR5IGlmIGFueSBvZiB0aGUgaW1wYWN0aW5nIGVsZW1lbnRzIGNoYW5nZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENoYW5nZWRFbGVtZW50c3tEeW5hbWljRmllbGRfSVRTTUltcGFjdH0gfHwgJENoYW5nZWRFbGVtZW50c3tTZXJ2aWNlSUR9IHx8ICRDaGFuZ2VkRWxlbWVudHN7RHluYW1pY0ZpZWxkX0lUU01Dcml0aWNhbGl0eX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPlByaW9yaXR5QWxsb2NhdGlvbkdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJENyaXRpY2FsaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBhY3QgICAgICA9PiAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkU3RkRmllbGRWYWx1ZXN7UHJpb3JpdHlJRH17ICRQcmlvcml0eUlEIH0gJiYgJFByaW9yaXR5SUQgbmUgJEdldFBhcmFte1ByaW9yaXR5SUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UHJpb3JpdHlJRH0gICAgICAgICAgID0gJFByaW9yaXR5SUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROZXdDaGFuZ2VkRWxlbWVudHN7UHJpb3JpdHlJRH0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlZFN0ZEZpZWxkc3tQcmlvcml0eUlEfSAgID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB3ZSBlbmZvcmNlIENJUEFsbG9jYXRpb24gaW4gYW55IGNhc2UgZGVsZXRlIGFsbCBvdGhlciBwcmlvcml0eSBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtQcmlvcml0eUlEfSAmJiAkQ0lQQ2FsY3VsYXRlID09IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFN0ZEZpZWxkVmFsdWVze1ByaW9yaXR5SUR9ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UHJpb3JpdHlJRH0gPT4gJFN0ZEZpZWxkVmFsdWVze1ByaW9yaXR5SUR9eyAkR2V0UGFyYW17UHJpb3JpdHlJRH0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQojIEVPIElUU01Db3JlCgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgd2hldGhlciBjdXJyZW50IHNlbGVjdGVkIHZhbHVlIGlzIHN0aWxsIHZhbGlkIGZvciB0aGUgZmllbGQKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfQogICAgICAgICAgICAgICAgICAgICAgICAmJiAhJFN0ZEZpZWxkVmFsdWVzeyAkRmllbGQtPntGaWVsZElEfSB9eyAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gfQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAjIGlmIG5vdCBlbXB0eSB0aGUgZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9ICAgICAgICAgICA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAkTmV3Q2hhbmdlZEVsZW1lbnRzeyAkRmllbGQtPntGaWVsZElEfSB9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgJENoYW5nZWRTdGRGaWVsZHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gICA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGF1dG9zZWxlY3QKICAgICAgICAgICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gJiYgJEF1dG9zZWxlY3QgJiYgJEF1dG9zZWxlY3QtPnsgJEZpZWxkLT57RmllbGRJRH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9ID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5BdXRvc2VsZWN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgPT4gJFN0ZEZpZWxkVmFsdWVzeyAkRmllbGQtPntGaWVsZElEfSB9LAogICAgICAgICAgICAgICAgICAgICAgICApIHx8ICcnOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICROZXdDaGFuZ2VkRWxlbWVudHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJENoYW5nZWRTdGRGaWVsZHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gICA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhJU5ld0NoYW5nZWRFbGVtZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzID0gJU5ld0NoYW5nZWRFbGVtZW50czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydCA9ICgKICAgICAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydCwKICAgICAgICAgICAgICAgICAgICAlTmV3Q2hhbmdlZEVsZW1lbnRzLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICRMb29wUHJvdGVjdGlvbi0tIDwgMSApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlJhbiBpbnRvIHVucmVzb2x2YWJsZSBsb29wISIsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50cyAgICAgICAgPSAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydDsKICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50c0RGU3RhcnQgPSAoKTsKCiAgICAgICAgICAgICMgY2hlY2sgZHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgbXkgJUN1ckZpZWxkU3RhdGVzOwogICAgICAgICAgICBpZiAoICVDaGFuZ2VkRWxlbWVudHMgfHwgJEluaXRpYWxSdW4gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgdmFsdWVzIGFuZCB2aXNpYmlsaXR5IG9mIGR5bmFtaWMgZmllbGRzCiAgICAgICAgICAgICAgICAlQ3VyRmllbGRTdGF0ZXMgPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPkdldEZpZWxkU3RhdGVzKAogICAgICAgICAgICAgICAgICAgIFRpY2tldE9iamVjdCAgICAgICAgICAgICAgPT4gJFRpY2tldE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzICAgICAgICAgICAgID0+ICRTZWxmLT57RHluYW1pY0ZpZWxkfSwKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0+ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LAogICAgICAgICAgICAgICAgICAgIENoYW5nZWRFbGVtZW50cyAgICAgICAgICAgPT4gXCVDaGFuZ2VkRWxlbWVudHMsICAgICAgICAgICAgIyBvcHRpb25hbCB0byByZWR1Y2UgQUNMIGV2YWx1YXRpb24KICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgICAgICAgICAgICAgPT4gJEN1c3RvbWVyVXNlciB8fCAnJywKICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgICAgICAgID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgQXV0b3NlbGVjdCAgICAgICAgICAgICAgICA9PiAkQXV0b3NlbGVjdCwKICAgICAgICAgICAgICAgICAgICBBQ0xQcmVzZWxlY3Rpb24gICAgICAgICAgID0+ICRBQ0xQcmVzZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgTG9vcFByb3RlY3Rpb24gICAgICAgICAgICA9PiBcJExvb3BQcm90ZWN0aW9uLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNvbWJpbmUgRmllbGRTdGF0ZXMKICAgICAgICAgICAgICAgICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9ID0gewogICAgICAgICAgICAgICAgICAgICV7ICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze0ZpZWxkc30gfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAkRHluRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJER5bkZpZWxkU3RhdGVze1Zpc2liaWxpdHl9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze1Zpc2liaWxpdHl9IH0sCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICMgc3RvcmUgbmV3IHZhbHVlcwogICAgICAgICAgICAgICAgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gfSwKICAgICAgICAgICAgICAgICAgICAleyAkQ3VyRmllbGRTdGF0ZXN7TmV3VmFsdWVzfSB9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBkeW5hbWljIGZpZWxkcyBjaGFuZ2VkLCBjaGVjayBzdGFuZGFyZCBmaWVsZHMgYWdhaW4KICAgICAgICAgICAgaWYgKCAlQ3VyRmllbGRTdGF0ZXMgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRDdXJGaWVsZFN0YXRlc3tOZXdWYWx1ZXN9ICkgKSB7CiAgICAgICAgICAgICAgICAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSA9IDA7CiAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzID0gbWFwIHsgJF8gPT4gMSB9IGtleXMgJXsgJEN1ckZpZWxkU3RhdGVze05ld1ZhbHVlc30gfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRDb252ZXJnZW5jZXtGaWVsZHN9ID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJEluaXRpYWxSdW4gPSAwOwogICAgICAgIH0KCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZFBvc3NpYmxlVmFsdWVzID0gbWFwIHsKICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJF8gPT4gZGVmaW5lZCAkRHluRmllbGRTdGF0ZXN7RmllbGRzfXskX30KICAgICAgICAgICAgICAgID8gJER5bkZpZWxkU3RhdGVze0ZpZWxkc317JF99e1Bvc3NpYmxlVmFsdWVzfQogICAgICAgICAgICAgICAgOiB1bmRlZgogICAgICAgIH0gKCBrZXlzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKTsKCiAgICAgICAgIyBwcmludCBmb3JtIC4uLgogICAgICAgIHJldHVybiBqb2luICcnLAogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1NtYWxsJywKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICAgICBCb2R5Q2xhc3MgPT4gJ1BvcHVwJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJFNlbGYtPl9NYXNrKAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgICAgIE5ld1F1ZXVlSUQgICAgICAgPT4gJEdldFBhcmFte1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgTmV3T3duZXJJRCAgICAgICA9PiAkR2V0UGFyYW17TmV3VXNlcklEfSwKICAgICAgICAgICAgICAgIE5ld1N0YXRlSUQgICAgICAgPT4gJEdldFBhcmFte05leHRTdGF0ZUlEfSwKICAgICAgICAgICAgICAgIE5ld1ByaW9yaXR5SUQgICAgPT4gJEdldFBhcmFte1ByaW9yaXR5SUR9LAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICAgICA9PiAkR2V0UGFyYW17U0xBSUR9LAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICAgICA9PiAkR2V0UGFyYW17U2VydmljZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgPT4gJEdldFBhcmFte1R5cGVJRH0sCiAgICAgICAgICAgICAgICBIaWRlQXV0b3NlbGVjdGVkID0+ICRIaWRlQXV0b3NlbGVjdGVkSlNPTiwKICAgICAgICAgICAgICAgIFZpc2liaWxpdHkgICAgICAgPT4gJER5bkZpZWxkU3RhdGVze1Zpc2liaWxpdHl9LAogICAgICAgICAgICAgICAgREZQb3NzaWJsZVZhbHVlcyA9PiBcJUR5bmFtaWNGaWVsZFBvc3NpYmxlVmFsdWVzLAogICAgICAgICAgICAgICAgQXR0YWNobWVudHMgICAgICA9PiBcQEFydGljbGVBdHRhY2htZW50cwogICAgICAgICAgICApLAogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoCiAgICAgICAgICAgICAgICBUeXBlID0+ICdTbWFsbCcsCiAgICAgICAgICAgICk7CiAgICB9Cn0KCnN1YiBfTWFzayB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGxpc3QgdHlwZQogICAgbXkgJFRyZWVWaWV3ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpIGVxICd0cmVlJyA/IDEgOiAwOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9ICk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHJlbmRlciB0aWNrZXQgdHlwZSBkeW5hbWljIGZpZWxkcwogICAgbXkgJFRpY2tldFR5cGVEeW5hbWljRmllbGRIVE1MID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkR5bmFtaWNGaWVsZDo6TWFzaycpLT5FZGl0U2VjdGlvblJlbmRlcigKICAgICAgICBDb250ZW50ICAgICAgICAgICAgICA9PiAkU2VsZi0+e1RpY2tldE1hc2tEZWZpbml0aW9ufSwKICAgICAgICBEeW5hbWljRmllbGRzICAgICAgICA9PiAkU2VsZi0+e0R5bmFtaWNGaWVsZH0sCiAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyksCiAgICAgICAgRHluYW1pY0ZpZWxkVmFsdWVzICAgPT4gJFBhcmFte0R5bmFtaWNGaWVsZH0sCiAgICAgICAgUG9zc2libGVWYWx1ZXNGaWx0ZXIgPT4gJFBhcmFte0RGUG9zc2libGVWYWx1ZXN9LAogICAgICAgIEVycm9ycyAgICAgICAgICAgICAgID0+ICRQYXJhbXtERkVycm9yc30sCiAgICAgICAgVmlzaWJpbGl0eSAgICAgICAgICAgPT4gJFBhcmFte1Zpc2liaWxpdHl9LAogICAgICAgIE9iamVjdCAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgQ3VzdG9tZXJJRCAgICAgPT4gJFBhcmFte0N1c3RvbWVySUR9LAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkUGFyYW17Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICRQYXJhbXtEeW5hbWljRmllbGR9LT4lKiwKICAgICAgICB9LAogICAgKTsKCiAgICAjIFdpZGdldCBUaWNrZXQgQWN0aW9ucwogICAgaWYgKAogICAgICAgICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlR5cGUnKSAmJiAkQ29uZmlnLT57VGlja2V0VHlwZX0gKQogICAgICAgIHx8CiAgICAgICAgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpICYmICRDb25maWctPntTZXJ2aWNlfSApICAgICAgICAgfHwKICAgICAgICAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpSZXNwb25zaWJsZScpICYmICRDb25maWctPntSZXNwb25zaWJsZX0gKSB8fAogICAgICAgICRDb25maWctPntUaXRsZX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgJENvbmZpZy0+e1F1ZXVlfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAkQ29uZmlnLT57T3duZXJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICRDb25maWctPntTdGF0ZX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgJENvbmZpZy0+e1ByaW9yaXR5fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICBhbnkgeyAkXy0+e09iamVjdFR5cGV9IGVxICdUaWNrZXQnIH0gdmFsdWVzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSoKICAgICAgICApCiAgICB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1dpZGdldFRpY2tldEFjdGlvbnMnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZEhUTUwgPT4gJFRpY2tldFR5cGVEeW5hbWljRmllbGRIVE1MLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkQ29uZmlnLT57VGl0bGV9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUaXRsZScsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0hpZGVBdXRvc2VsZWN0ZWR9ICkgewoKICAgICAgICAjIGFkZCBBdXRvc2VsZWN0IEpTCiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNPbkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgIENvZGUgPT4gIkNvcmUuRm9ybS5Jbml0SGlkZUF1dG9zZWxlY3RlZCh7IEZpZWxkSURzOiAkUGFyYW17SGlkZUF1dG9zZWxlY3RlZH0gfSk7IiwKICAgICAgICApOwogICAgfQoKICAgICMgdHlwZXMKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlR5cGUnKSAmJiAkQ29uZmlnLT57VGlja2V0VHlwZX0gKSB7CiAgICAgICAgbXkgJVR5cGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRUeXBlTGlzdCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgJFBhcmFte1R5cGVTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ1ZhbGlkYXRlX1JlcXVpcmVkIE1vZGVybml6ZSBGb3JtVXBkYXRlICcgLiAoICRQYXJhbXtFcnJvcnN9LT57VHlwZUlESW52YWxpZH0gfHwgJycgKSwKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlVHlwZSwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdUeXBlSUQnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1R5cGVJRH0sCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBTb3J0ICAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVHlwZScsCiAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNlcnZpY2VzCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlJykgJiYgJENvbmZpZy0+e1NlcnZpY2V9ICkgewogICAgICAgIG15ICRTZXJ2aWNlcyA9ICRTZWxmLT5fR2V0U2VydmljZXMoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgcmVzZXQgcHJldmlvdXMgU2VydmljZUlEIHRvIHJlc2V0IFNMQS1MaXN0IGlmIG5vIHNlcnZpY2UgaXMgc2VsZWN0ZWQKICAgICAgICBpZiAoICEkUGFyYW17U2VydmljZUlEfSB8fCAhJFNlcnZpY2VzLT57ICRQYXJhbXtTZXJ2aWNlSUR9IH0gKSB7CiAgICAgICAgICAgICRQYXJhbXtTZXJ2aWNlSUR9ID0gJyc7CiAgICAgICAgfQoKICAgICAgICAkUGFyYW17U2VydmljZVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgPT4gJFNlcnZpY2VzLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdTZXJ2aWNlSUQnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICJNb2Rlcm5pemUgRm9ybVVwZGF0ZSAiCiAgICAgICAgICAgICAgICAuICggJENvbmZpZy0+e1NlcnZpY2VNYW5kYXRvcnl9ID8gJ1ZhbGlkYXRlX1JlcXVpcmVkICcgOiAnJyApCiAgICAgICAgICAgICAgICAuICggJFBhcmFte1NlcnZpY2VJbnZhbGlkfSB8fCAnJyApLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJlZVZpZXcgICAgID0+ICRUcmVlVmlldywKICAgICAgICAgICAgU29ydCAgICAgICAgID0+ICdUcmVlVmlldycsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAyMDAsCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VNYW5kYXRvcnkgPT4gJENvbmZpZy0+e1NlcnZpY2VNYW5kYXRvcnl9IHx8IDAsCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJVNMQSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNMQUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAkUGFyYW17U0xBU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVNMQSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnU0xBSUQnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtTTEFJRH0sCiAgICAgICAgICAgIENsYXNzICAgICAgPT4gIk1vZGVybml6ZSBGb3JtVXBkYXRlICIKICAgICAgICAgICAgICAgIC4gKCAkQ29uZmlnLT57U0xBTWFuZGF0b3J5fSA/ICdWYWxpZGF0ZV9SZXF1aXJlZCAnIDogJycgKQogICAgICAgICAgICAgICAgLiAoICRQYXJhbXtTZXJ2aWNlSW52YWxpZH0gfHwgJycgKSwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFNvcnQgICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDIwMCwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU0xBJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBTTEFNYW5kYXRvcnkgPT4gJENvbmZpZy0+e1NMQU1hbmRhdG9yeX0sCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRDb25maWctPntRdWV1ZX0gKSB7CgogICAgICAgICMgZmV0Y2ggYWxsIHF1ZXVlcwogICAgICAgIG15ICVNb3ZlUXVldWVzID0gJFRpY2tldE9iamVjdC0+VGlja2V0TW92ZUxpc3QoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ21vdmVfaW50bycsCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgbW92ZSBxdWV1ZXMKICAgICAgICAkUGFyYW17UXVldWVzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5BZ2VudFF1ZXVlTGlzdE9wdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgPT4geyAlTW92ZVF1ZXVlcywgJycgPT4gJy0nIH0sCiAgICAgICAgICAgIE11bHRpcGxlID0+IDAsCiAgICAgICAgICAgIFNpemUgICAgID0+IDAsCiAgICAgICAgICAgIENsYXNzICAgID0+ICdOZXdRdWV1ZUlEIE1vZGVybml6ZSBGb3JtVXBkYXRlICcKICAgICAgICAgICAgICAgIC4gKCAkQ29uZmlnLT57UXVldWVNYW5kYXRvcnl9ID8gJ1ZhbGlkYXRlX1JlcXVpcmVkICcgOiAnJyApCiAgICAgICAgICAgICAgICAuICggJFBhcmFte05ld1F1ZXVlSW52YWxpZH0gfHwgJycgKSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ05ld1F1ZXVlSUQnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgICA9PiAkUGFyYW17TmV3UXVldWVJRH0sCiAgICAgICAgICAgIFRyZWVWaWV3ICAgICAgID0+ICRUcmVlVmlldywKICAgICAgICAgICAgQ3VycmVudFF1ZXVlSUQgPT4gJFBhcmFte1F1ZXVlSUR9LAogICAgICAgICAgICBPbkNoYW5nZVN1Ym1pdCA9PiAwLAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdRdWV1ZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgUXVldWVNYW5kYXRvcnkgPT4gJENvbmZpZy0+e1F1ZXVlTWFuZGF0b3J5fSB8fCAwLAogICAgICAgICAgICAgICAgJVBhcmFtCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFF1ZXVlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiAgICBteSAkVXNlck9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwogICAgbXkgJEdyb3VwT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CgogICAgaWYgKCAkQ29uZmlnLT57T3duZXJ9ICkgewoKICAgICAgICAjIGdldCB1c2VyIG9mIG93biBncm91cHMKICAgICAgICBteSAlU2hvd25Vc2VyczsKICAgICAgICBteSAlQWxsR3JvdXBzTWVtYmVycyA9ICRVc2VyT2JqZWN0LT5Vc2VyTGlzdCgKICAgICAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6Q2hhbmdlT3duZXJUb0V2ZXJ5b25lJykgKSB7CiAgICAgICAgICAgICVTaG93blVzZXJzID0gJUFsbEdyb3Vwc01lbWJlcnM7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkR0lEICAgICAgICA9ICRRdWV1ZU9iamVjdC0+R2V0UXVldWVHcm91cElEKCBRdWV1ZUlEID0+ICRUaWNrZXR7UXVldWVJRH0gKTsKICAgICAgICAgICAgbXkgJU1lbWJlckxpc3QgPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25Hcm91cEdldCgKICAgICAgICAgICAgICAgIEdyb3VwSUQgPT4gJEdJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ293bmVyJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IGtleXMgJU1lbWJlckxpc3QgKSB7CiAgICAgICAgICAgICAgICAkU2hvd25Vc2Vyc3skVXNlcklEfSA9ICRBbGxHcm91cHNNZW1iZXJzeyRVc2VySUR9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICAgICAlVGlja2V0LAogICAgICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnTmV3T3duZXInLAogICAgICAgICAgICBEYXRhICAgICAgICAgID0+IFwlU2hvd25Vc2VycywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRBQ0wpIHsKICAgICAgICAgICAgJVNob3duVXNlcnMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBvbGQgb3duZXIKICAgICAgICBteSBAT2xkVXNlckluZm8gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRPd25lckxpc3QoIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9ICk7CiAgICAgICAgbXkgQE9sZE93bmVyczsKICAgICAgICBteSAlT2xkT3duZXJzU2hvd247CiAgICAgICAgbXkgJVNlZW5PbGRPd25lcjsKICAgICAgICBpZiAoQE9sZFVzZXJJbmZvKSB7CiAgICAgICAgICAgIG15ICRDb3VudGVyID0gMTsKICAgICAgICAgICAgVVNFUjoKICAgICAgICAgICAgZm9yIG15ICRVc2VyICggcmV2ZXJzZSBAT2xkVXNlckluZm8gKSB7CgogICAgICAgICAgICAgICAgIyBza2lwIGlmIG9sZCBvd25lciBpcyBhbHJlYWR5IGluIHRoZSBsaXN0CiAgICAgICAgICAgICAgICBuZXh0IFVTRVIgaWYgJFNlZW5PbGRPd25lcnsgJFVzZXItPntVc2VySUR9IH07CiAgICAgICAgICAgICAgICAkU2Vlbk9sZE93bmVyeyAkVXNlci0+e1VzZXJJRH0gfSA9IDE7CiAgICAgICAgICAgICAgICBteSAkS2V5ICAgPSAkVXNlci0+e1VzZXJJRH07CiAgICAgICAgICAgICAgICBteSAkVmFsdWUgPSAiJENvdW50ZXI6ICRVc2VyLT57VXNlckZ1bGxuYW1lfSI7CiAgICAgICAgICAgICAgICBwdXNoIEBPbGRPd25lcnMsIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAkT2xkT3duZXJzU2hvd257JEtleX0gPSAkVmFsdWU7CiAgICAgICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkT2xkT3duZXJTZWxlY3RlZElEID0gJyc7CiAgICAgICAgaWYgKCAkUGFyYW17T2xkT3duZXJJRH0gKSB7CiAgICAgICAgICAgICRPbGRPd25lclNlbGVjdGVkSUQgPSAkUGFyYW17T2xkT3duZXJJRH07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJE9sZFVzZXJJbmZvWzBdLT57VXNlcklEfSApIHsKICAgICAgICAgICAgJE9sZE93bmVyU2VsZWN0ZWRJRCA9ICRPbGRVc2VySW5mb1swXS0+e1VzZXJJRH0gLiAnMSc7CiAgICAgICAgfQoKICAgICAgICBteSAkT2xkT3duZXJBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdPbGRPd25lcicsCiAgICAgICAgICAgIERhdGEgICAgICAgICAgPT4gXCVPbGRPd25lcnNTaG93biwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRPbGRPd25lckFDTCkgewogICAgICAgICAgICAlT2xkT3duZXJzU2hvd24gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgb25seSB1c2VycyB3aXRoIG93bmVyIG9yIHJ3IHBlcm1pc3Npb25zIGluIHRoZSBxdWV1ZQogICAgICAgIG15ICVPbGRPd25lcnNXaXRoQWNjZXNzOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkNoYW5nZU93bmVyVG9FdmVyeW9uZScpICkgewogICAgICAgICAgICAlT2xkT3duZXJzV2l0aEFjY2VzcyA9ICVPbGRPd25lcnNTaG93bjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZvciBteSAkVXNlcklEICgga2V5cyAlT2xkT3duZXJzU2hvd24gKSB7CiAgICAgICAgICAgICAgICBpZiAoIGV4aXN0cyAkU2hvd25Vc2Vyc3skVXNlcklEfSApIHsKICAgICAgICAgICAgICAgICAgICAkT2xkT3duZXJzV2l0aEFjY2Vzc3skVXNlcklEfSA9ICRPbGRPd25lcnNTaG93bnskVXNlcklEfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCBzdHJpbmcKICAgICAgICAkUGFyYW17T3duZXJTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgID0+IFwlU2hvd25Vc2VycywKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17TmV3T3duZXJJRH0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ05ld093bmVySUQnLAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUgRm9ybVVwZGF0ZSAnCiAgICAgICAgICAgICAgICAuICggJENvbmZpZy0+e093bmVyTWFuZGF0b3J5fSA/ICdWYWxpZGF0ZV9SZXF1aXJlZCAnIDogJycgKQogICAgICAgICAgICAgICAgLiAoICRQYXJhbXtOZXdPd25lckludmFsaWR9IHx8ICcnICksCiAgICAgICAgICAgIFNpemUgICAgICAgICA9PiAxLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgRmlsdGVycyAgICAgID0+IHsKICAgICAgICAgICAgICAgIE9sZE93bmVycyA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnUHJldmlvdXMgT3duZXInKSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZXMgPT4gXCVPbGRPd25lcnNXaXRoQWNjZXNzLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3duZXInLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE93bmVyTWFuZGF0b3J5ID0+ICRDb25maWctPntPd25lck1hbmRhdG9yeX0gfHwgMCwKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlJlc3BvbnNpYmxlJykgJiYgJENvbmZpZy0+e1Jlc3BvbnNpYmxlfSApIHsKCiAgICAgICAgIyBnZXQgdXNlciBvZiBvd24gZ3JvdXBzCiAgICAgICAgbXkgJVNob3duVXNlcnM7CiAgICAgICAgbXkgJUFsbEdyb3Vwc01lbWJlcnMgPSAkVXNlck9iamVjdC0+VXNlckxpc3QoCiAgICAgICAgICAgIFR5cGUgID0+ICdMb25nJywKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkNoYW5nZU93bmVyVG9FdmVyeW9uZScpICkgewogICAgICAgICAgICAlU2hvd25Vc2VycyA9ICVBbGxHcm91cHNNZW1iZXJzOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbXkgJEdJRCAgICAgICAgPSAkUXVldWVPYmplY3QtPkdldFF1ZXVlR3JvdXBJRCggUXVldWVJRCA9PiAkVGlja2V0e1F1ZXVlSUR9ICk7CiAgICAgICAgICAgIG15ICVNZW1iZXJMaXN0ID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uR3JvdXBHZXQoCiAgICAgICAgICAgICAgICBHcm91cElEID0+ICRHSUQsCiAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdyZXNwb25zaWJsZScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCBrZXlzICVNZW1iZXJMaXN0ICkgewogICAgICAgICAgICAgICAgJFNob3duVXNlcnN7JFVzZXJJRH0gPSAkQWxsR3JvdXBzTWVtYmVyc3skVXNlcklEfTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1Jlc3BvbnNpYmxlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJVNob3duVXNlcnMsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICgkQUNMKSB7CiAgICAgICAgICAgICVTaG93blVzZXJzID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgcmVzcG9uc2libGUKICAgICAgICAkUGFyYW17UmVzcG9uc2libGVTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgID0+IFwlU2hvd25Vc2VycywKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17TmV3UmVzcG9uc2libGVJRH0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ05ld1Jlc3BvbnNpYmxlSUQnLAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUgRm9ybVVwZGF0ZSAnCiAgICAgICAgICAgICAgICAuICggJENvbmZpZy0+e1Jlc3BvbnNpYmxlTWFuZGF0b3J5fSA/ICdWYWxpZGF0ZV9SZXF1aXJlZCAnIDogJycgKQogICAgICAgICAgICAgICAgLiAoICRQYXJhbXtOZXdSZXNwb25zaWJsZUludmFsaWR9IHx8ICcnICksCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBTaXplICAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSZXNwb25zaWJsZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgUmVzcG9uc2libGVNYW5kYXRvcnkgPT4gJENvbmZpZy0+e1Jlc3BvbnNpYmxlTWFuZGF0b3J5fSB8fCAwLAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgfQoKICAgIGlmICggJENvbmZpZy0+e1N0YXRlfSApIHsKCiAgICAgICAgbXkgJVN0YXRlOwogICAgICAgIG15ICVTdGF0ZUxpc3QgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdGF0ZUxpc3QoCiAgICAgICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgICAgIGlmICggISRQYXJhbXtOZXdTdGF0ZUlEfSApIHsKICAgICAgICAgICAgaWYgKCAkQ29uZmlnLT57U3RhdGVEZWZhdWx0fSApIHsKICAgICAgICAgICAgICAgICRTdGF0ZXtTZWxlY3RlZFZhbHVlfSA9ICRDb25maWctPntTdGF0ZURlZmF1bHR9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU3RhdGV7U2VsZWN0ZWRJRH0gPSAkUGFyYW17TmV3U3RhdGVJRH07CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIG5leHQgc3RhdGVzIHN0cmluZwogICAgICAgICRQYXJhbXtTdGF0ZVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgID0+IFwlU3RhdGVMaXN0LAogICAgICAgICAgICBOYW1lICA9PiAnTmV3U3RhdGVJRCcsCiAgICAgICAgICAgIENsYXNzID0+ICdNb2Rlcm5pemUgRm9ybVVwZGF0ZSAnCiAgICAgICAgICAgICAgICAuICggJENvbmZpZy0+e1N0YXRlTWFuZGF0b3J5fSA/ICdWYWxpZGF0ZV9SZXF1aXJlZCAnIDogJycgKQogICAgICAgICAgICAgICAgLiAoICRQYXJhbXtOZXdTdGF0ZUludmFsaWR9IHx8ICcnICksCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAkQ29uZmlnLT57U3RhdGVEZWZhdWx0fSA/IDAgOiAxLAogICAgICAgICAgICAlU3RhdGUsCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFN0YXRlTWFuZGF0b3J5ID0+ICRDb25maWctPntTdGF0ZU1hbmRhdG9yeX0gfHwgMCwKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJENvbmZpZy0+e1N0YXRlVHlwZX0gKSApIHsKCiAgICAgICAgICAgIFNUQVRFVFlQRToKICAgICAgICAgICAgZm9yIG15ICRTdGF0ZVR5cGUgKCBAeyAkQ29uZmlnLT57U3RhdGVUeXBlfSB9ICkgewoKICAgICAgICAgICAgICAgIG5leHQgU1RBVEVUWVBFIGlmICEkU3RhdGVUeXBlOwogICAgICAgICAgICAgICAgbmV4dCBTVEFURVRZUEUgaWYgJFN0YXRlVHlwZSAhfiAvcGVuZGluZy9pOwoKICAgICAgICAgICAgICAgICMgZ2V0IHVzZWQgY2FsZW5kYXIKICAgICAgICAgICAgICAgIG15ICRDYWxlbmRhciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENhbGVuZGFyR2V0KAogICAgICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICRRdWlja0RhdGVCdXR0b25zID0gJENvbmZpZy0+e1F1aWNrRGF0ZUJ1dHRvbnN9IC8vICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6RGVmYXVsdFF1aWNrRGF0ZUJ1dHRvbnMnKTsKCiAgICAgICAgICAgICAgICAjIGZldGNoIGFjdGlvbnMgdG8gcGVyZm9ybSBwcmUtZmlsbGluZyBmb3IKICAgICAgICAgICAgICAgIG15ICRSZXN0b3JlUGVuZGluZ0NvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6UmVzdG9yZVBlbmRpbmdJbmZvcm1hdGlvbiIpOwoKICAgICAgICAgICAgICAgICMgb25seSBwcmUtZmlsbCBwZW5kaW5nIGluZm9ybWF0aW9uIGZvciBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgc3lzdGVtIGNvbmZpZ3VyYXRpb24gc2V0dGluZwogICAgICAgICAgICAgICAgbXkgJVBlbmRpbmdUaW1lU2V0dGluZ3MgPSAoKTsKICAgICAgICAgICAgICAgIGlmICggJFJlc3RvcmVQZW5kaW5nQ29uZmlnLT57QWN0aW9uc30tPnsgJFNlbGYtPntBY3Rpb259IH0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgdHJ5IHJlc3RvcmluZyBwZW5kaW5nIHRpbWUgb25seSBpZiBwZW5kaW5nIHRpbWUgZXhpc3RzIGFuZCByZXNwb25zaWJsZSBjb25maWcgb3B0aW9uIGlzIHNldAogICAgICAgICAgICAgICAgICAgIGlmICggJFRpY2tldHtTdGF0ZVR5cGV9ID1+IC9wZW5kaW5nLyAmJiAkVGlja2V0e1JlYWxUaWxsVGltZU5vdFVzZWR9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFBlbmRpbmdUaW1lT2JqID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcG9jaCA9PiAkVGlja2V0e1JlYWxUaWxsVGltZU5vdFVzZWR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRDdXJyZW50VGltZU9iaiA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzZXQgcGVuZGluZyB0aW1lIG9ubHkgaWYgaXQgaXMgbGF0ZXIgdGhhbiBub3cKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ3VycmVudFRpbWVPYmotPkNvbXBhcmUoIERhdGVUaW1lT2JqZWN0ID0+ICRQZW5kaW5nVGltZU9iaiApIDwgMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQZW5kaW5nVGltZVNldHRpbmdzID0gJXsgJFBlbmRpbmdUaW1lT2JqLT5HZXQoKSB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFBhcmFte0RhdGVTdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBGb3JtYXQgICAgICAgICAgID0+ICdEYXRlSW5wdXRGb3JtYXRMb25nJywKICAgICAgICAgICAgICAgICAgICBZZWFyUGVyaW9kUGFzdCAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgWWVhclBlcmlvZEZ1dHVyZSA9PiA1LAoKICAgICAgICAgICAgICAgICAgICAjIE5PVEUgRGlmZlRpbWUgb25seSB0YWtlcyBlZmZlY3QgaWYgbm8gUGVuZGluZ1RpbWUgaXMgcGFzc2VkCiAgICAgICAgICAgICAgICAgICAgRGlmZlRpbWUgICAgICAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpQZW5kaW5nRGlmZlRpbWUnKSB8fCAwLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICAgID0+ICRQYXJhbXtEYXRlSW52YWxpZH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJyAnLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRlICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGVEYXRlSW5GdXR1cmUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgICA9PiAkQ2FsZW5kYXIsCiAgICAgICAgICAgICAgICAgICAgUXVpY2tEYXRlQnV0dG9ucyAgICAgPT4gJFF1aWNrRGF0ZUJ1dHRvbnMsCiAgICAgICAgICAgICAgICAgICAgJVBlbmRpbmdUaW1lU2V0dGluZ3MsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YXRlUGVuZGluZycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBsYXN0IFNUQVRFVFlQRTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBwcmlvcml0eQogICAgaWYgKCAkQ29uZmlnLT57UHJpb3JpdHl9ICkgewoKICAgICAgICBteSAlUHJpb3JpdHk7CiAgICAgICAgbXkgJVByaW9yaXR5TGlzdCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFByaW9yaXR5TGlzdCgKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgQWN0aW9uICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICk7CiAgICAgICAgaWYgKCAhJENvbmZpZy0+e1ByaW9yaXR5RGVmYXVsdH0gKSB7CiAgICAgICAgICAgICRQcmlvcml0eUxpc3R7Jyd9ID0gJy0nOwogICAgICAgIH0KICAgICAgICBpZiAoICEkUGFyYW17TmV3UHJpb3JpdHlJRH0gKSB7CiAgICAgICAgICAgIGlmICggJENvbmZpZy0+e1ByaW9yaXR5RGVmYXVsdH0gKSB7CiAgICAgICAgICAgICAgICAkUHJpb3JpdHl7U2VsZWN0ZWRWYWx1ZX0gPSAkQ29uZmlnLT57UHJpb3JpdHlEZWZhdWx0fTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFByaW9yaXR5e1NlbGVjdGVkSUR9ID0gJFBhcmFte05ld1ByaW9yaXR5SUR9OwogICAgICAgIH0KICAgICAgICAkUHJpb3JpdHl7U2VsZWN0ZWRJRH0gfHw9ICRQYXJhbXtQcmlvcml0eUlEfTsKICAgICAgICAkUGFyYW17UHJpb3JpdHlTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICA9PiBcJVByaW9yaXR5TGlzdCwKICAgICAgICAgICAgTmFtZSAgPT4gJ05ld1ByaW9yaXR5SUQnLAogICAgICAgICAgICBDbGFzcyA9PiAnTW9kZXJuaXplIEZvcm1VcGRhdGUnLAogICAgICAgICAgICAlUHJpb3JpdHksCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIEVuZCBXaWRnZXQgVGlja2V0IEFjdGlvbnMKCiAgICAjIFdpZGdldCBBcnRpY2xlCiAgICBpZiAoICRDb25maWctPntOb3RlfSApIHsKCiAgICAgICAgJFBhcmFte1dpZGdldFN0YXR1c30gPSAnQ29sbGFwc2VkJzsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQ29uZmlnLT57Tm90ZU1hbmRhdG9yeX0KICAgICAgICAgICAgfHwgJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0KICAgICAgICAgICAgfHwgJFBhcmFte0NyZWF0ZUFydGljbGV9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRQYXJhbXtXaWRnZXRTdGF0dXN9ID0gJ0V4cGFuZGVkJzsKICAgICAgICB9CgogICAgICAgIGlmICggJENvbmZpZy0+e05vdGVNYW5kYXRvcnl9ICkgewogICAgICAgICAgICAkUGFyYW17U3ViamVjdFJlcXVpcmVkfSA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICAgICAgICAgICRQYXJhbXtCb2R5UmVxdWlyZWR9ICAgID0gJ1ZhbGlkYXRlX1JlcXVpcmVkJzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQYXJhbXtTdWJqZWN0UmVxdWlyZWR9ID0gJ1ZhbGlkYXRlX0RlcGVuZGluZ1JlcXVpcmVkQU5EIFZhbGlkYXRlX0RlcGVuZGluZ19DcmVhdGVBcnRpY2xlJzsKICAgICAgICAgICAgJFBhcmFte0JvZHlSZXF1aXJlZH0gICAgPSAnVmFsaWRhdGVfRGVwZW5kaW5nUmVxdWlyZWRBTkQgVmFsaWRhdGVfRGVwZW5kaW5nX0NyZWF0ZUFydGljbGUnOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgY3VzdG9tZXIgdmlzaWJpbGl0eSBvZiB0aGlzIG5vdGUgdG8gdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGFydGljbGUgZm9yIHdob20gdGhpcyBpcyB0aGUgcmVwbHkKICAgICAgICBpZiAoICRTZWxmLT57UmVwbHlUb0FydGljbGV9ICYmICFkZWZpbmVkICRQYXJhbXtJc1Zpc2libGVGb3JDdXN0b21lcn0gKSB7CiAgICAgICAgICAgICRQYXJhbXtJc1Zpc2libGVGb3JDdXN0b21lcn0gPSAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlQ29udGVudH0tPntJc1Zpc2libGVGb3JDdXN0b21lcn07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggIWRlZmluZWQgJFBhcmFte0lzVmlzaWJsZUZvckN1c3RvbWVyfSApIHsKICAgICAgICAgICAgJFBhcmFte0lzVmlzaWJsZUZvckN1c3RvbWVyfSA9ICRDb25maWctPntJc1Zpc2libGVGb3JDdXN0b21lckRlZmF1bHR9OwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGF0dGFjaG1lbnRzCiAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKCBAeyAkUGFyYW17QXR0YWNobWVudHN9IH0gKSB7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRBdHRhY2htZW50LT57Q29udGVudElEfQogICAgICAgICAgICAgICAgJiYgJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0KICAgICAgICAgICAgICAgICYmICggJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX0gPX4gL2ltYWdlL2kgKQogICAgICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0Rpc3Bvc2l0aW9ufSBlcSAnaW5saW5lJyApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17QXR0YWNobWVudExpc3R9IH0sICRBdHRhY2htZW50OwogICAgICAgIH0KCiAgICAgICAgIyByZW5kZXIgYXJ0aWNsZSB0eXBlIGR5bmFtaWMgZmllbGRzCiAgICAgICAgbXkgJEFydGljbGVUeXBlRHluYW1pY0ZpZWxkSFRNTCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpEeW5hbWljRmllbGQ6Ok1hc2snKS0+RWRpdFNlY3Rpb25SZW5kZXIoCiAgICAgICAgICAgIENvbnRlbnQgICAgICAgICAgICAgID0+ICRTZWxmLT57QXJ0aWNsZU1hc2tEZWZpbml0aW9ufSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyAgICAgICAgPT4gJFNlbGYtPntEeW5hbWljRmllbGR9LAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyksCiAgICAgICAgICAgIER5bmFtaWNGaWVsZFZhbHVlcyAgID0+ICRQYXJhbXtEeW5hbWljRmllbGR9LAogICAgICAgICAgICBQb3NzaWJsZVZhbHVlc0ZpbHRlciA9PiAkUGFyYW17REZQb3NzaWJsZVZhbHVlc30sCiAgICAgICAgICAgIEVycm9ycyAgICAgICAgICAgICAgID0+ICRQYXJhbXtERkVycm9yc30sCiAgICAgICAgICAgIFZpc2liaWxpdHkgICAgICAgICAgID0+ICRQYXJhbXtWaXNpYmlsaXR5fSwKICAgICAgICAgICAgT2JqZWN0ICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCAgICAgPT4gJFBhcmFte0N1c3RvbWVySUR9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFBhcmFte0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICRQYXJhbXtEeW5hbWljRmllbGR9LT4lKiwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnV2lkZ2V0QXJ0aWNsZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkSFRNTCA9PiAkQXJ0aWNsZVR5cGVEeW5hbWljRmllbGRIVE1MLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGFsbCB1c2VyIGlkcyBvZiBhZ2VudHMsIHRoYXQgY2FuIGJlIHNob3duIGluIHRoaXMgZGlhbG9nCiAgICAgICAgIyBiYXNlZCBvbiBxdWV1ZSByaWdodHMKICAgICAgICBteSAlU2hvd25Vc2VyczsKICAgICAgICBteSAlQWxsR3JvdXBzTWVtYmVycyA9ICRVc2VyT2JqZWN0LT5Vc2VyTGlzdCgKICAgICAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CiAgICAgICAgbXkgJEdJRCAgICAgICAgPSAkUXVldWVPYmplY3QtPkdldFF1ZXVlR3JvdXBJRCggUXVldWVJRCA9PiAkVGlja2V0e1F1ZXVlSUR9ICk7CiAgICAgICAgbXkgJU1lbWJlckxpc3QgPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25Hcm91cEdldCgKICAgICAgICAgICAgR3JvdXBJRCA9PiAkR0lELAogICAgICAgICAgICBUeXBlICAgID0+ICdub3RlJywKICAgICAgICApOwogICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCBrZXlzICVNZW1iZXJMaXN0ICkgewogICAgICAgICAgICAkU2hvd25Vc2Vyc3skVXNlcklEfSA9ICRBbGxHcm91cHNNZW1iZXJzeyRVc2VySUR9OwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgZW1haWwgcGFyc2VyIG9iamVjdAogICAgICAgIG15ICRFbWFpbEFkZHJlc3NPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RW1haWxBZGRyZXNzJyk7CgogICAgICAgICMgY2hlY2sgYW5kIHJldHJpZXZlIGludm9sdmVkIGFuZCBpbmZvcm1lZCBhZ2VudHMgb2YgUmVwbHlUbyBOb3RlCiAgICAgICAgbXkgQFJlcGx5VG9Vc2VyczsKICAgICAgICBteSAlUmVwbHlUb1VzZXJzSGFzaDsKICAgICAgICBteSAlUmVwbHlUb1VzZXJJRHM7CiAgICAgICAgaWYgKCAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlfSApIHsKICAgICAgICAgICAgbXkgQFJlcGx5VG9QYXJ0cyA9ICRFbWFpbEFkZHJlc3NPYmplY3QtPlBhcnNlQWRkcmVzc0xpbmUoCiAgICAgICAgICAgICAgICBMaW5lID0+ICRTZWxmLT57UmVwbHlUb0FydGljbGVDb250ZW50fS0+e1RvfSB8fCAnJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIFJFUExZVE9QQVJUOgogICAgICAgICAgICBmb3IgbXkgJFNpbmdsZVJlcGx5VG9QYXJ0IChAUmVwbHlUb1BhcnRzKSB7CiAgICAgICAgICAgICAgICBteSAkUmVwbHlUb0FkZHJlc3MgPSAkRW1haWxBZGRyZXNzT2JqZWN0LT5HZXRBZGRyZXNzKAogICAgICAgICAgICAgICAgICAgIEVtYWlsID0+ICRTaW5nbGVSZXBseVRvUGFydCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBSRVBMWVRPUEFSVCBpZiAhJFJlcGx5VG9BZGRyZXNzOwogICAgICAgICAgICAgICAgcHVzaCBAUmVwbHlUb1VzZXJzLCAkUmVwbHlUb0FkZHJlc3M7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRSZXBseVRvVXNlcnNIYXNoeyRffSsrIGZvciBAUmVwbHlUb1VzZXJzOwoKICAgICAgICAgICAgIyBnZXQgdXNlciBpZHMgb2YgYXZhaWxhYmxlIHVzZXJzCiAgICAgICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCBrZXlzICVTaG93blVzZXJzICkgewogICAgICAgICAgICAgICAgbXkgJVVzZXJEYXRhID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAkVXNlckVtYWlsID0gJFVzZXJEYXRhe1VzZXJFbWFpbH07CiAgICAgICAgICAgICAgICBpZiAoICRSZXBseVRvVXNlcnNIYXNoeyRVc2VyRW1haWx9ICkgewogICAgICAgICAgICAgICAgICAgICRSZXBseVRvVXNlcklEc3skVXNlcklEfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIG9yaWdpbmFsIG5vdGUgc2VuZGVyIHRvIGxpc3Qgb2YgdXNlciBpZHMKICAgICAgICAgICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IEB7ICRTZWxmLT57UmVwbHlUb1NlbmRlclVzZXJJRH0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGlmIHNlbmRlciByZXBsaWVzIHRvIGhpbXNlbGYsIGRvIG5vdCBpbmNsdWRlIHNlbmRlciBpbiBsaXN0CiAgICAgICAgICAgICAgICBpZiAoICRVc2VySUQgbmUgJFNlbGYtPntVc2VySUR9ICkgewogICAgICAgICAgICAgICAgICAgICRSZXBseVRvVXNlcklEc3skVXNlcklEfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVtb3ZlIHVzZXIgaWQgb2YgYWN0aXZlIHVzZXIKICAgICAgICAgICAgZGVsZXRlICRSZXBseVRvVXNlcklEc3sgJFNlbGYtPntVc2VySUR9IH07CiAgICAgICAgfQoKICAgICAgICBpZiAoICRDb25maWctPntJbmZvcm1BZ2VudH0gfHwgJENvbmZpZy0+e0ludm9sdmVkQWdlbnR9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luZm9ybUFkZGl0aW9uYWxBZ2VudHMnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICAgICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICAgICAjIGdldCBhbGwgYWdlbnRzIGZvciAiaW52b2x2ZWQgYWdlbnRzIgogICAgICAgIGlmICggJENvbmZpZy0+e0ludm9sdmVkQWdlbnR9ICkgewoKICAgICAgICAgICAgbXkgQFVzZXJJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRJbnZvbHZlZEFnZW50c0xpc3QoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15IEBJbnZvbHZlZEFnZW50czsKICAgICAgICAgICAgbXkgJENvdW50ZXIgPSAxOwoKICAgICAgICAgICAgbXkgQEludm9sdmVkVXNlcklEID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJ0ludm9sdmVkVXNlcklEJyApOwoKICAgICAgICAgICAgbXkgJUFnZW50V2l0aFBlcm1pc3Npb24gPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25Hcm91cEdldCgKICAgICAgICAgICAgICAgIEdyb3VwSUQgPT4gJEdJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ3JvJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIFVTRVI6CiAgICAgICAgICAgIGZvciBteSAkVXNlciAoIHJldmVyc2UgQFVzZXJJRHMgKSB7CgogICAgICAgICAgICAgICAgbmV4dCBVU0VSIGlmICFkZWZpbmVkICRBZ2VudFdpdGhQZXJtaXNzaW9ueyAkVXNlci0+e1VzZXJJRH0gfTsKCiAgICAgICAgICAgICAgICBteSAkVmFsdWUgPSAiJENvdW50ZXI6ICRVc2VyLT57VXNlckZ1bGxuYW1lfSI7CiAgICAgICAgICAgICAgICBpZiAoICRVc2VyLT57T3V0T2ZPZmZpY2VNZXNzYWdlfSApIHsKICAgICAgICAgICAgICAgICAgICAkVmFsdWUgLj0gIiAkVXNlci0+e091dE9mT2ZmaWNlTWVzc2FnZX0iOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHB1c2ggQEludm9sdmVkQWdlbnRzLCB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJFVzZXItPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAgICAgICAgICMgYWRkIGludm9sdmVkIHVzZXIgYXMgc2VsZWN0ZWQgZW50cmllcywgaWYgYXZhaWxhYmxlIGluIFJlcGx5VG9BZGRyZXNzZXMgbGlzdAogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlfSAmJiAkUmVwbHlUb1VzZXJJRHN7ICRVc2VyLT57VXNlcklEfSB9ICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQEludm9sdmVkVXNlcklELCAkVXNlci0+e1VzZXJJRH07CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRSZXBseVRvVXNlcklEc3sgJFVzZXItPntVc2VySUR9IH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRJbnZvbHZlZEFnZW50U2l6ZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6SW52b2x2ZWRBZ2VudE1heFNpemUnKSB8fCAzOwogICAgICAgICAgICAkUGFyYW17SW52b2x2ZWRBZ2VudFN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhICAgICAgID0+IFxASW52b2x2ZWRBZ2VudHMsCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEID0+IFxASW52b2x2ZWRVc2VySUQsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdJbnZvbHZlZFVzZXJJRCcsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICA9PiAkSW52b2x2ZWRBZ2VudFNpemUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGJsb2NrIGlzIGNhbGxlZCBiZWxvdyAiaW5mb3JtIGFnZW50cyIKICAgICAgICB9CgogICAgICAgICMgYWdlbnQgbGlzdAogICAgICAgIGlmICggJENvbmZpZy0+e0luZm9ybUFnZW50fSApIHsKCiAgICAgICAgICAgICMgZ2V0IGluZm9ybSB1c2VyIGxpc3QKICAgICAgICAgICAgbXkgJUluZm9ybUFnZW50czsKICAgICAgICAgICAgbXkgQEluZm9ybVVzZXJJRCAgICA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdJbmZvcm1Vc2VySUQnICk7CiAgICAgICAgICAgIG15ICVJbmZvcm1BZ2VudExpc3QgPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25Hcm91cEdldCgKICAgICAgICAgICAgICAgIEdyb3VwSUQgPT4gJEdJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ3JvJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IGtleXMgJUluZm9ybUFnZW50TGlzdCApIHsKICAgICAgICAgICAgICAgICRJbmZvcm1BZ2VudHN7JFVzZXJJRH0gPSAkQWxsR3JvdXBzTWVtYmVyc3skVXNlcklEfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBlbWFpbCBhZGRyZXNzIG9mIGFsbCB1c2VycyBhbmQgY29tcGFyZSB0byByZXBseXRvLWFkZHJlc3NlcwogICAgICAgICAgICAgICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IGtleXMgJUluZm9ybUFnZW50cyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRSZXBseVRvVXNlcklEc3skVXNlcklEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBASW5mb3JtVXNlcklELCAkVXNlcklEOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJFJlcGx5VG9Vc2VySURzeyRVc2VySUR9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJEluZm9ybUFnZW50U2l6ZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6SW5mb3JtQWdlbnRNYXhTaXplJykKICAgICAgICAgICAgICAgIHx8IDM7CiAgICAgICAgICAgICRQYXJhbXtPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJUluZm9ybUFnZW50cywKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gXEBJbmZvcm1Vc2VySUQsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdJbmZvcm1Vc2VySUQnLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgPT4gJEluZm9ybUFnZW50U2l6ZSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdJbmZvcm1BZ2VudCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBpbnZvbHZlZAogICAgICAgIGlmICggJENvbmZpZy0+e0ludm9sdmVkQWdlbnR9ICkgewoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdJbnZvbHZlZEFnZW50JywKICAgICAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBsaXN0IG9mIGFnZW50cywgdGhhdCByZWNlaXZlIHRoaXMgbm90ZSAoUmVwbHlUb05vdGUpCiAgICAgICAgIyBhdCBsZWFzdCBzZW5kZXIgb2Ygb3JpZ2luYWwgbm90ZSBhbmQgYWxsIHJlY2lwaWVudHMgb2YgdGhlIG9yaWdpbmFsIG5vdGUKICAgICAgICAjIHRoYXQgY291bGRuJ3QgYmUgc2VsZWN0ZWQgd2l0aCBpbnZvbHZlZC9pbmZvcm0gYWdlbnRzCiAgICAgICAgaWYgKCAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlfSApIHsKCiAgICAgICAgICAgIG15ICRVc2Vyc0hhc2hTaXplID0ga2V5cyAlUmVwbHlUb1VzZXJJRHM7CiAgICAgICAgICAgIG15ICRDb3VudGVyICAgICAgID0gMDsKICAgICAgICAgICAgJFBhcmFte1VzZXJMaXN0V2l0aG91dFNlbGVjdGlvbn0gPSBqb2luKCAnLCcsIGtleXMgJVJlcGx5VG9Vc2VySURzICk7CgogICAgICAgICAgICBpZiAoICRVc2Vyc0hhc2hTaXplID4gMCApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luZm9ybUFnZW50c1dpdGhvdXRTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IGtleXMgJVJlcGx5VG9Vc2VySURzICkgewogICAgICAgICAgICAgICAgICAgICRDb3VudGVyKys7CgogICAgICAgICAgICAgICAgICAgIG15ICVVc2VyRGF0YSA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luZm9ybUFnZW50c1dpdGhvdXRTZWxlY3Rpb25TaW5nbGVVc2VyJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiBcJVVzZXJEYXRhLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgb3V0cHV0IGEgc2VwYXJhdG9yIChJbmZvcm1BZ2VudHNXaXRob3V0U2VsZWN0aW9uU2luZ2xlVXNlclNlcGFyYXRvciksCiAgICAgICAgICAgICAgICAgICAgIyBpZiBub3QgbGFzdCBlbnRyeQogICAgICAgICAgICAgICAgICAgIGlmICggJENvdW50ZXIgPCAkVXNlcnNIYXNoU2l6ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJbmZvcm1BZ2VudHNXaXRob3V0U2VsZWN0aW9uU2luZ2xlVXNlclNlcGFyYXRvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IFwlVXNlckRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRDb25maWctPntOb3RlTWFuZGF0b3J5fSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTdWJqZWN0TGFiZWxNYW5kYXRvcnknLAogICAgICAgICAgICApOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JpY2hUZXh0TGFiZWxNYW5kYXRvcnknLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTdWJqZWN0TGFiZWwnLAogICAgICAgICAgICApOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JpY2hUZXh0TGFiZWwnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCB0ZXh0IHRlbXBsYXRlIHN0cmluZwogICAgICAgIG15ICVTdGFuZGFyZFRlbXBsYXRlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGFuZGFyZFRlbXBsYXRlJyktPlN0YW5kYXJkVGVtcGxhdGVMaXN0KAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBUeXBlICA9PiAnTm90ZScsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFF1ZXVlU3RhbmRhcmRUZW1wbGF0ZXMgPSAkU2VsZi0+X0dldFN0YW5kYXJkVGVtcGxhdGVzKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9IHx8ICcnLAogICAgICAgICk7CgogICAgICAgIGlmICgKICAgICAgICAgICAgSXNIYXNoUmVmV2l0aERhdGEoCiAgICAgICAgICAgICAgICAkUXVldWVTdGFuZGFyZFRlbXBsYXRlcwogICAgICAgICAgICAgICAgICAgIHx8ICggJENvbmZpZy0+e1F1ZXVlfSAmJiBJc0hhc2hSZWZXaXRoRGF0YSggXCVTdGFuZGFyZFRlbXBsYXRlcyApICkKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJFF1ZXVlU3RhbmRhcmRUZW1wbGF0ZXMgfHwge30sCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1N0YW5kYXJkVGVtcGxhdGVJRCcsCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1N0YW5kYXJkVGVtcGxhdGVJRH0gfHwgJycsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFNvcnQgICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMjAwLAogICAgICAgICAgICApOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YW5kYXJkVGVtcGxhdGUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyB0aW1lIGFjY291bnRpbmcgYm94CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFjY291bnRUaW1lJykgKSB7CiAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScpICYmICRDb25maWctPntOb3RlTWFuZGF0b3J5fSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpbWVVbml0c0xhYmVsTWFuZGF0b3J5JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRQYXJhbXtUaW1lVW5pdHNSZXF1aXJlZH0gPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGltZVVuaXRzTGFiZWwnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFBhcmFte1RpbWVVbml0c1JlcXVpcmVkfSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmVlZEFjY291bnRlZFRpbWUnKQogICAgICAgICAgICAgICAgICAgID8gJ1ZhbGlkYXRlX0RlcGVuZGluZ1JlcXVpcmVkQU5EIFZhbGlkYXRlX0RlcGVuZGluZ19DcmVhdGVBcnRpY2xlJwogICAgICAgICAgICAgICAgICAgIDogJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUaW1lVW5pdHMnLAogICAgICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCByaWNoIHRleHQgZWRpdG9yCiAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewoKICAgICAgICAjIHVzZSBoZWlnaHQvd2lkdGggZGVmaW5lZCBmb3IgdGhpcyBzY3JlZW4KICAgICAgICAkUGFyYW17UmljaFRleHRIZWlnaHR9ID0gJENvbmZpZy0+e1JpY2hUZXh0SGVpZ2h0fSB8fCAwOwogICAgICAgICRQYXJhbXtSaWNoVGV4dFdpZHRofSAgPSAkQ29uZmlnLT57UmljaFRleHRXaWR0aH0gIHx8IDA7CgogICAgICAgICMgc2V0IHVwIHJpY2ggdGV4dCBlZGl0b3IKICAgICAgICAkTGF5b3V0T2JqZWN0LT5TZXRSaWNoVGV4dFBhcmFtZXRlcnMoCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgRW5kIFdpZGdldCBBcnRpY2xlCgogICAgIyBleHBsYW5hdG9yeSBtZXNzYWdlIGFib3V0IGFzdGVyaXNrCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QXN0ZXJpc2tFeHBsYW5hdGlvbicpICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBc3Rlcmlza0V4cGxhbmF0aW9uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG91dHB1dCBiYWNrCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0KICAgICk7Cn0KCnN1YiBfR2V0TmV4dFN0YXRlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVOZXh0U3RhdGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTdGF0ZUxpc3QoCiAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgQWN0aW9uICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAlUGFyYW0sCiAgICApOwoKICAgIHJldHVybiBcJU5leHRTdGF0ZXM7Cn0KCnN1YiBfR2V0UmVzcG9uc2libGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlU2hvd25Vc2VyczsKICAgIG15ICVBbGxHcm91cHNNZW1iZXJzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxpc3QoCiAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgIFZhbGlkID0+IDEsCiAgICApOwoKICAgICMgc2hvdyBhbGwgdXNlcnMKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OkNoYW5nZU93bmVyVG9FdmVyeW9uZScpICkgewogICAgICAgICVTaG93blVzZXJzID0gJUFsbEdyb3Vwc01lbWJlcnM7CiAgICB9CgogICAgIyBzaG93IG9ubHkgdXNlcnMgd2l0aCByZXNwb25zaWJsZSBvciBydyBwZXJtaXNzaW9ucyBpbiB0aGUgcXVldWUKICAgIGVsc2lmICggJFBhcmFte1F1ZXVlSUR9ICYmICEkUGFyYW17T3duZXJBbGx9ICkgewogICAgICAgIG15ICRHSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+R2V0UXVldWVHcm91cElEKAogICAgICAgICAgICBRdWV1ZUlEID0+ICRQYXJhbXtOZXdRdWV1ZUlEfSB8fCAkUGFyYW17UXVldWVJRH0KICAgICAgICApOwogICAgICAgIG15ICVNZW1iZXJMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25Hcm91cEdldCgKICAgICAgICAgICAgR3JvdXBJRCA9PiAkR0lELAogICAgICAgICAgICBUeXBlICAgID0+ICdyZXNwb25zaWJsZScsCiAgICAgICAgKTsKICAgICAgICBmb3IgbXkgJFVzZXJJRCAoIHNvcnQga2V5cyAlTWVtYmVyTGlzdCApIHsKICAgICAgICAgICAgJFNob3duVXNlcnN7JFVzZXJJRH0gPSAkQWxsR3JvdXBzTWVtYmVyc3skVXNlcklEfTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIHdvcmtmbG93CiAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICVQYXJhbSwKICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1Jlc3BvbnNpYmxlJywKICAgICAgICBEYXRhICAgICAgICAgID0+IFwlU2hvd25Vc2VycywKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIHsgJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpIH0gaWYgJEFDTDsKICAgIHJldHVybiBcJVNob3duVXNlcnM7Cn0KCnN1YiBfR2V0T3duZXJzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVNob3duVXNlcnM7CiAgICBteSAlQWxsR3JvdXBzTWVtYmVycyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMaXN0KAogICAgICAgIFR5cGUgID0+ICdMb25nJywKICAgICAgICBWYWxpZCA9PiAxLAogICAgKTsKCiAgICAjIHNob3cgYWxsIHVzZXJzCiAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpDaGFuZ2VPd25lclRvRXZlcnlvbmUnKSApIHsKICAgICAgICAlU2hvd25Vc2VycyA9ICVBbGxHcm91cHNNZW1iZXJzOwogICAgfQoKICAgICMgc2hvdyBvbmx5IHVzZXJzIHdpdGggb3duZXIgb3IgcncgcGVybWlzc2lvbnMgaW4gdGhlIHF1ZXVlCiAgICBlbHNpZiAoICRQYXJhbXtRdWV1ZUlEfSAmJiAhJFBhcmFte093bmVyQWxsfSApIHsKICAgICAgICBteSAkR0lEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPkdldFF1ZXVlR3JvdXBJRCgKICAgICAgICAgICAgUXVldWVJRCA9PiAkUGFyYW17TmV3UXVldWVJRH0gfHwgJFBhcmFte1F1ZXVlSUR9CiAgICAgICAgKTsKICAgICAgICBteSAlTWVtYmVyTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5QZXJtaXNzaW9uR3JvdXBHZXQoCiAgICAgICAgICAgIEdyb3VwSUQgPT4gJEdJRCwKICAgICAgICAgICAgVHlwZSAgICA9PiAnb3duZXInLAogICAgICAgICk7CiAgICAgICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IGtleXMgJU1lbWJlckxpc3QgKSB7CiAgICAgICAgICAgICRTaG93blVzZXJzeyRVc2VySUR9ID0gJEFsbEdyb3Vwc01lbWJlcnN7JFVzZXJJRH07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyB3b3JrZmxvdwogICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICAlUGFyYW0sCiAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdOZXdPd25lcicsCiAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJVNob3duVXNlcnMsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiB7ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKSB9IGlmICRBQ0w7CiAgICByZXR1cm4gXCVTaG93blVzZXJzOwp9CgpzdWIgX0dldE9sZE93bmVycyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgbXkgQE9sZFVzZXJJbmZvID0gJFRpY2tldE9iamVjdC0+VGlja2V0T3duZXJMaXN0KCBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSApOwogICAgbXkgJVVzZXJIYXNoOwogICAgaWYgKEBPbGRVc2VySW5mbykgewogICAgICAgIG15ICRDb3VudGVyID0gMTsKICAgICAgICBVU0VSOgogICAgICAgIGZvciBteSAkVXNlciAoIHJldmVyc2UgQE9sZFVzZXJJbmZvICkgewoKICAgICAgICAgICAgbmV4dCBVU0VSIGlmICRVc2VySGFzaHsgJFVzZXItPntVc2VySUR9IH07CgogICAgICAgICAgICAkVXNlckhhc2h7ICRVc2VyLT57VXNlcklEfSB9ID0gIiRDb3VudGVyOiAkVXNlci0+e1VzZXJGdWxsbmFtZX0iOwogICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgIH0KICAgIH0KCiAgICAjIHdvcmtmbG93CiAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICVQYXJhbSwKICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ09sZE93bmVyJywKICAgICAgICBEYXRhICAgICAgICAgID0+IFwlVXNlckhhc2gsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiB7ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKSB9IGlmICRBQ0w7CiAgICByZXR1cm4gXCVVc2VySGFzaDsKfQoKc3ViIF9HZXRTZXJ2aWNlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNlcnZpY2UKICAgIG15ICVTZXJ2aWNlOwoKICAgICMgZ2V0IG9wdGlvbnMgZm9yIGRlZmF1bHQgc2VydmljZXMgZm9yIHVua25vd24gY3VzdG9tZXJzCiAgICBteSAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1RpY2tldDo6U2VydmljZTo6RGVmYXVsdDo6VW5rbm93bkN1c3RvbWVyJyk7CgogICAgIyBjaGVjayBpZiBubyBDdXN0b21lclVzZXJJRCBpcyBzZWxlY3RlZAogICAgIyBpZiAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgPSAwIGxlYXZlIEN1c3RvbWVyVXNlcklEIGVtcHR5LCBpdCB3aWxsIG5vdCBnZXQgYW55IHNlcnZpY2VzCiAgICAjIGlmICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lciA9IDEgc2V0IEN1c3RvbWVyVXNlcklEIHRvIGdldCBkZWZhdWx0IHNlcnZpY2VzCiAgICBpZiAoICEkUGFyYW17Q3VzdG9tZXJVc2VySUR9ICYmICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lciApIHsKICAgICAgICAkUGFyYW17Q3VzdG9tZXJVc2VySUR9ID0gJzxERUZBVUxUPic7CiAgICB9CgogICAgIyBnZXQgc2VydmljZSBsaXN0CiAgICBpZiAoICRQYXJhbXtDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgJVNlcnZpY2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldFNlcnZpY2VMaXN0KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBBY3Rpb24gICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiBcJVNlcnZpY2U7Cn0KCnN1YiBfR2V0U0xBcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgaWYgbm9uIHNldCBjdXN0b21lcnMgY2FuIGdldCBkZWZhdWx0IHNlcnZpY2VzIHRoZW4gdGhleSBzaG91bGQgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGUgU0xBcwogICAgIyAgZm9yIHRob3NlIHNlcnZpY2VzICh0aGlzIHdvcmtzIGR1cmluZyB0aWNrZXQgY3JlYXRpb24pLgogICAgIyBpZiBubyBDdXN0b21lclVzZXJJRCBpcyBzZXQsIFRpY2tldFNMQUxpc3Qgd2lsbCBjb21wbGFpbiBkdXJpbmcgQUpBWCB1cGRhdGVzIGFzIFVzZXJJRCBpcyBub3QKICAgICMgIHBhc3NlZC4gU2VlIGJ1ZyAxMTE0Ny4KCiAgICAjIGdldCBvcHRpb25zIGZvciBkZWZhdWx0IHNlcnZpY2VzIGZvciB1bmtub3duIGN1c3RvbWVycwogICAgbXkgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2U6OkRlZmF1bHQ6OlVua25vd25DdXN0b21lcicpOwoKICAgICMgY2hlY2sgaWYgbm8gQ3VzdG9tZXJVc2VySUQgaXMgc2VsZWN0ZWQKICAgICMgaWYgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyID0gMCBsZWF2ZSBDdXN0b21lclVzZXJJRCBlbXB0eSwgaXQgd2lsbCBub3QgZ2V0IGFueSBzZXJ2aWNlcwogICAgIyBpZiAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgPSAxIHNldCBDdXN0b21lclVzZXJJRCB0byBnZXQgZGVmYXVsdCBzZXJ2aWNlcwogICAgaWYgKCAhJFBhcmFte0N1c3RvbWVyVXNlcklEfSAmJiAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgKSB7CiAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlcklEfSA9ICc8REVGQVVMVD4nOwogICAgfQoKICAgIG15ICVTTEE7CiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICVTTEEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldFNMQUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIFwlU0xBOwp9CgpzdWIgX0dldFByaW9yaXRpZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlUHJpb3JpdGllcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0UHJpb3JpdHlMaXN0KAogICAgICAgICVQYXJhbSwKICAgICAgICBBY3Rpb24gICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICBteSAkQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICBpZiAoICEkQ29uZmlnLT57UHJpb3JpdHlEZWZhdWx0fSApIHsKICAgICAgICAkUHJpb3JpdGllc3snJ30gPSAnLSc7CiAgICB9CgogICAgcmV0dXJuIFwlUHJpb3JpdGllczsKfQoKc3ViIF9HZXRRdW90ZWRSZXBseUJvZHkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CgogICAgICAgICMgcmV3cmFwIGJvZHkgaWYgZXhpc3RzCiAgICAgICAgaWYgKCAkUGFyYW17Qm9keX0gKSB7CiAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9fiBzL1x0LyAvZzsKICAgICAgICAgICAgbXkgJFF1b3RlID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCgKICAgICAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6UXVvdGUnKSB8fCAnJywKICAgICAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkUXVvdGUpIHsKCiAgICAgICAgICAgICAgICAjIHF1b3RlIHRleHQKICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9ICI8YmxvY2txdW90ZSB0eXBlPVwiY2l0ZVwiPiRQYXJhbXtCb2R5fTwvYmxvY2txdW90ZT5cbiI7CgogICAgICAgICAgICAgICAgIyBjbGVhbnVwIG5vbi1jb21wYXRpYmxlIHRhZ3MKICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9ICRMYXlvdXRPYmplY3QtPlJpY2hUZXh0RG9jdW1lbnRDbGVhbnVwKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17Qm9keX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICRSZXNwb25zZUZvcm1hdCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkZvcm1hdFRpbWVTdHJpbmcoICRQYXJhbXtDcmVhdGVUaW1lfSwgJ0RhdGVGb3JtYXQnLCAnTm9TZWNvbmRzJyApOwogICAgICAgICAgICAgICAgJFJlc3BvbnNlRm9ybWF0IC49ICcgLSAnIC4gJFBhcmFte0Zyb219IC4gJyAnOwogICAgICAgICAgICAgICAgJFJlc3BvbnNlRm9ybWF0CiAgICAgICAgICAgICAgICAgICAgLj0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCd3cm90ZScpIC4gJzonOwoKICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9ICRSZXNwb25zZUZvcm1hdCAuICRQYXJhbXtCb2R5fTsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkUGFyYW17Qm9keX0gPSAiPGJyLz4iIC4gJFBhcmFte0JvZHl9OwoKICAgICAgICAgICAgICAgIGlmICggJFBhcmFte0NyZWF0ZVRpbWV9ICkgewogICAgICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRGF0ZScpIC4KICAgICAgICAgICAgICAgICAgICAgICAgIjogJFBhcmFte0NyZWF0ZVRpbWV9PGJyLz4iIC4gJFBhcmFte0JvZHl9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZvciAocXcoU3ViamVjdCBSZXBseVRvIFJlcGx5LVRvIENjIFRvIEZyb20pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17JF99ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkUGFyYW17Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJF8pIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6ICRQYXJhbXskX308YnIvPiIgLiAkUGFyYW17Qm9keX07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRGcm9tID0gJExheW91dE9iamVjdC0+QXNjaWkyUmljaFRleHQoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtGcm9tfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJE1lc3NhZ2VGcm9tID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdNZXNzYWdlIGZyb20nKTsKICAgICAgICAgICAgICAgIG15ICRFbmRNZXNzYWdlICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRW5kIG1lc3NhZ2UnKTsKCiAgICAgICAgICAgICAgICAkUGFyYW17Qm9keX0gPSAiPGJyLz4tLS0tICRNZXNzYWdlRnJvbSAkRnJvbSAtLS08YnIvPjxici8+IiAuICRQYXJhbXtCb2R5fTsKICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSAuPSAiPGJyLz4tLS0tICRFbmRNZXNzYWdlIC0tLTxici8+IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIHByZXBhcmUgYm9keSwgc3ViamVjdCwgUmVwbHlUbyAuLi4KICAgICAgICAjIHJld3JhcCBib2R5IGlmIGV4aXN0cwogICAgICAgIGlmICggJFBhcmFte0JvZHl9ICkgewogICAgICAgICAgICAkUGFyYW17Qm9keX0gPX4gcy9cdC8gL2c7CiAgICAgICAgICAgIG15ICRRdW90ZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6UXVvdGUnKTsKICAgICAgICAgICAgaWYgKCRRdW90ZSkgewogICAgICAgICAgICAgICAgJFBhcmFte0JvZHl9ID1+IHMvXG4vXG4kUXVvdGUgL2c7CiAgICAgICAgICAgICAgICAkUGFyYW17Qm9keX0gPSAiXG4kUXVvdGUgIiAuICRQYXJhbXtCb2R5fTsKCiAgICAgICAgICAgICAgICBteSAkUmVzcG9uc2VGb3JtYXQgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5Gb3JtYXRUaW1lU3RyaW5nKCAkUGFyYW17Q3JlYXRlVGltZX0sICdEYXRlRm9ybWF0JywgJ05vU2Vjb25kcycgKTsKICAgICAgICAgICAgICAgICRSZXNwb25zZUZvcm1hdCAuPSAnIC0gJyAuICRQYXJhbXtGcm9tfSAuICcgJzsKICAgICAgICAgICAgICAgICRSZXNwb25zZUZvcm1hdAogICAgICAgICAgICAgICAgICAgIC49ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnd3JvdGUnKSAuICI6XG4iOwoKICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9ICRSZXNwb25zZUZvcm1hdCAuICRQYXJhbXtCb2R5fTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9ICJcbiIgLiAkUGFyYW17Qm9keX07CiAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXtDcmVhdGVUaW1lfSApIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0RhdGUnKSAuCiAgICAgICAgICAgICAgICAgICAgICAgICI6ICRQYXJhbXtDcmVhdGVUaW1lfVxuIiAuICRQYXJhbXtCb2R5fTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmb3IgKHF3KFN1YmplY3QgUmVwbHlUbyBSZXBseS1UbyBDYyBUbyBGcm9tKSkgewogICAgICAgICAgICAgICAgICAgIGlmICggJFBhcmFteyRffSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFBhcmFte0JvZHl9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCRfKSAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOiAkUGFyYW17JF99XG4iIC4gJFBhcmFte0JvZHl9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkTWVzc2FnZUZyb20gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ01lc3NhZ2UgZnJvbScpOwogICAgICAgICAgICAgICAgbXkgJEVuZE1lc3NhZ2UgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdFbmQgbWVzc2FnZScpOwoKICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9ICJcbi0tLS0gJE1lc3NhZ2VGcm9tICRQYXJhbXtGcm9tfSAtLS1cblxuIiAuICRQYXJhbXtCb2R5fTsKICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSAuPSAiXG4tLS0tICRFbmRNZXNzYWdlIC0tLVxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFBhcmFte0JvZHl9Owp9CgpzdWIgX0dldFN0YW5kYXJkVGVtcGxhdGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBlaXRoZXIgUXVldWVJRCBvciBUaWNrZXRJRCBpcyBuZWVkZWQKICAgIHJldHVybiB7fSBpZiAhJFBhcmFte1F1ZXVlSUR9ICYmICEkUGFyYW17VGlja2V0SUR9OwoKICAgIG15ICRRdWV1ZUlEID0gJFBhcmFte1F1ZXVlSUR9IHx8ICcnOwogICAgaWYgKCAhJFBhcmFte1F1ZXVlSUR9ICYmICRQYXJhbXtUaWNrZXRJRH0gKSB7CgogICAgICAgICMgZ2V0IFF1ZXVlSUQgZnJvbSB0aGUgdGlja2V0CiAgICAgICAgbXkgJVRpY2tldCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICAkUXVldWVJRCA9ICRUaWNrZXR7UXVldWVJRH0gfHwgJyc7CiAgICB9CgogICAgIyBmZXRjaCBhbGwgc3RkLiB0ZW1wbGF0ZXMKICAgIG15ICVTdGFuZGFyZFRlbXBsYXRlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KAogICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgVGVtcGxhdGVUeXBlcyA9PiAxLAogICAgKTsKCiAgICAjIHJldHVybiBlbXB0eSBoYXNoIGlmIHRoZXJlIGFyZSBubyB0ZW1wbGF0ZXMgZm9yIHRoaXMgc2NyZWVuCiAgICByZXR1cm4ge30gdW5sZXNzIElzSGFzaFJlZldpdGhEYXRhKCAkU3RhbmRhcmRUZW1wbGF0ZXN7Tm90ZX0gKTsKCiAgICAjIHJldHVybiBqdXN0IHRoZSB0ZW1wbGF0ZXMgZm9yIHRoaXMgc2NyZWVuCiAgICByZXR1cm4gJFN0YW5kYXJkVGVtcGxhdGVze05vdGV9Owp9CgpzdWIgX0dldFR5cGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBubyB0eXBlcyB3aGVuIGEgcGFyYW1ldGVyIGlzIG1pc3NpbmcKICAgIHJldHVybiB7fSB1bmxlc3MgKCAkUGFyYW17UXVldWVJRH0gfHwgJFBhcmFte1RpY2tldElEfSApOwoKICAgICMgZ2V0IHRpY2tldCB0eXBlcyB3aXRoIGNvbnNpZGVyaW5nIEFDTHMKICAgIG15ICVUeXBlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRUeXBlTGlzdCgKICAgICAgICAlUGFyYW0sCiAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgQWN0aW9uICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIFwlVHlwZTsKfQoKc3ViIF9HZXRRdWV1ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIEdldCBRdWV1ZXMuCiAgICBteSAlUXVldWVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRNb3ZlTGlzdCgKICAgICAgICAlUGFyYW0sCiAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBUeXBlICAgICA9PiAnbW92ZV9pbnRvJywKICAgICk7CgogICAgcmV0dXJuIFwlUXVldWVzOwp9CgpzdWIgX0xvYWRBcnRpY2xlRWRpdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDb25maWdPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkVXBsb2FkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZScpOwoKICAgIG15ICVUaWNrZXQgICAgICAgICAgICAgICA9ICV7ICRQYXJhbXtUaWNrZXR9IH07CiAgICBteSAlQXJ0aWNsZURhdGEgICAgICAgICAgPSAleyAkUGFyYW17QXJ0aWNsZURhdGF9IH07CiAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkUGFyYW17QXJ0aWNsZUJhY2tlbmRPYmplY3R9OwoKICAgICMgQ2hlY2sgaWYgdGhlcmUgaXMgSFRNTCBib2R5IGF0dGFjaG1lbnQuCiAgICBteSAlQXR0YWNobWVudEluZGV4SFRNTEJvZHkgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50SW5kZXgoCiAgICAgICAgQXJ0aWNsZUlEICAgID0+ICRBcnRpY2xlRGF0YXtBcnRpY2xlSUR9LAogICAgICAgIE9ubHlIVE1MQm9keSA9PiAxLAogICAgKTsKICAgICggJEFydGljbGVEYXRhe0hUTUxCb2R5QXR0YWNobWVudElEfSApID0gc29ydCBrZXlzICVBdHRhY2htZW50SW5kZXhIVE1MQm9keTsKCiAgICBpZiAoICRBcnRpY2xlRGF0YXtIVE1MQm9keUF0dGFjaG1lbnRJRH0gKSB7CiAgICAgICAgJEFydGljbGVEYXRhe01pbWVUeXBlfSA9ICd0ZXh0L2h0bWwnOwoKICAgICAgICAjIFJlbmRlciBhcnRpY2xlIGNvbnRlbnQuCiAgICAgICAgJEFydGljbGVEYXRhe0JvZHl9ID0gJExheW91dE9iamVjdC0+QXJ0aWNsZVByZXZpZXcoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJEFydGljbGVEYXRhe0FydGljbGVJRH0sCiAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gMQogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gJUFydGljbGVEYXRhOwogICAgfQoKICAgIGlmICggJFBhcmFte05vQXR0YWNobWVudHN9ICkgewogICAgICAgIHJldHVybiAlQXJ0aWNsZURhdGE7CiAgICB9CgogICAgbXkgJENvbnRlbnQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuSFRNTCAlXScsCiAgICAgICAgRGF0YSAgICAgPT4gewogICAgICAgICAgICBIVE1MID0+ICRBcnRpY2xlRGF0YXtCb2R5fSwKICAgICAgICB9LAogICAgKTsKCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBDb250ZW50ICAgICAgICAgICAgPT4gJENvbnRlbnQsCiAgICAgICAgQ29udGVudEFsdGVybmF0aXZlID0+ICcnLAogICAgICAgIENvbnRlbnRJRCAgICAgICAgICA9PiAnJywKICAgICAgICBDb250ZW50VHlwZSAgICAgICAgPT4gJ3RleHQvaHRtbDsgY2hhcnNldD0idXRmLTgiJywKICAgICAgICBEaXNwb3NpdGlvbiAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgRmlsZXNpemVSYXcgICAgICAgID0+IGJ5dGVzOjpsZW5ndGgoJENvbnRlbnQpLAogICAgKTsKCiAgICAjIHNldCBkb3dubG9hZCB0eXBlIHRvIGlubGluZQogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdBdHRhY2htZW50RG93bmxvYWRUeXBlJywKICAgICAgICBWYWx1ZSA9PiAnaW5saW5lJwogICAgKTsKCiAgICAjIGdlbmVyYXRlIGJhc2UgdXJsCiAgICBteSAkVVJMID0gIkFjdGlvbj1QaWN0dXJlVXBsb2FkO0Zvcm1JRD0kU2VsZi0+e0Zvcm1JRH07Q29udGVudElEPSI7CgogICAgIyBzZXQgZmlsZW5hbWUgZm9yIGlubGluZSB2aWV3aW5nCiAgICAkRGF0YXtGaWxlbmFtZX0gPSAiVGlja2V0LSRUaWNrZXR7VGlja2V0TnVtYmVyfS1BcnRpY2xlSUQtJEFydGljbGVEYXRhe0FydGljbGVJRH0uaHRtbCI7CgogICAgIyByZXBsYWNlIGxpbmtzIHRvIGlubGluZSBpbWFnZXMgaW4gaHRtbCBjb250ZW50CiAgICBteSAlQXRtQm94ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZURhdGF7QXJ0aWNsZUlEfSwKICAgICk7CgogICAgZm9yIG15ICRGaWxlSUQgKCBrZXlzICVBdG1Cb3ggKSB7CiAgICAgICAgbXkgJUZpbGVEYXRhID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudCgKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICAgICA9PiAkQXJ0aWNsZURhdGF7QXJ0aWNsZUlEfSwKICAgICAgICAgICAgRmlsZUlEICAgICAgICAgICAgICAgICA9PiAkRmlsZUlELAogICAgICAgICAgICBDb250ZW50TWF5QmVGaWxlaGFuZGxlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkRmlsZURhdGF7RGlzcG9zaXRpb259IGVxICdpbmxpbmUnICYmICRGaWxlRGF0YXtGaWxlbmFtZX0gbmUgJ2ZpbGUtMicgKSB7CgogICAgICAgICAgICAjIGFkZCB1cGxvYWRlZCBmaWxlIHRvIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREFkZEZpbGUoCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAkRmlsZURhdGF7RmlsZW5hbWV9LAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEZpbGVEYXRhe0NvbnRlbnR9LAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJEZpbGVEYXRhe0NvbnRlbnRUeXBlfSAuICc7IG5hbWU9IicgLiAkRmlsZURhdGF7RmlsZW5hbWV9IC4gJyInLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJEZpbGVEYXRhe0Rpc3Bvc2l0aW9ufSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbmV3IGNvbnRlbnQgaWQKICAgIG15ICVDb250ZW50SURzOwoKICAgIG15IEBBdHRhY2htZW50TWV0YSA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0KICAgICk7CgogICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudE1ldGEpIHsKICAgICAgICAkQ29udGVudElEc3sgJEF0dGFjaG1lbnQtPntGaWxlbmFtZX0gfSA9ICRBdHRhY2htZW50LT57Q29udGVudElEfTsKICAgIH0KCiAgICAjIERvIG5vdCBsb2FkIGV4dGVybmFsIGltYWdlcyBpZiAnQmxvY2tMb2FkaW5nUmVtb3RlQ29udGVudCcgaXMgZW5hYmxlZC4KICAgIG15ICRMb2FkRXh0ZXJuYWxJbWFnZXMgPSAxOwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkJsb2NrTG9hZGluZ1JlbW90ZUNvbnRlbnQnKSApIHsKICAgICAgICAkTG9hZEV4dGVybmFsSW1hZ2VzID0gMDsKICAgIH0KCiAgICAjIHJlZm9ybWF0IHJpY2ggdGV4dCBkb2N1bWVudCB0byBoYXZlIGNvcnJlY3QgY2hhcnNldCBhbmQgbGlua3MgdG8KICAgICMgaW5saW5lIGRvY3VtZW50cwogICAgJURhdGEgPSAkTGF5b3V0T2JqZWN0LT5SaWNoVGV4dERvY3VtZW50U2VydmUoCiAgICAgICAgRGF0YSAgICAgICAgICAgICAgID0+IFwlRGF0YSwKICAgICAgICBVUkwgICAgICAgICAgICAgICAgPT4gJFVSTCwKICAgICAgICBBdHRhY2htZW50cyAgICAgICAgPT4gXCVBdG1Cb3gsCiAgICAgICAgQ29udGVudElEcyAgICAgICAgID0+IFwlQ29udGVudElEcywKICAgICAgICBMb2FkRXh0ZXJuYWxJbWFnZXMgPT4gJExvYWRFeHRlcm5hbEltYWdlcywKICAgICk7CgogICAgIyBpZiB0aGVyZSBpcyB1bmV4cGVjdGVkbHkgcGdwIGRlY3J5cHRlZCBjb250ZW50IGluIHRoZSBodG1sIGVtYWlsIChPRSksCiAgICAjIHdlIHdpbGwgdXNlIHRoZSBhcnRpY2xlIGJvZHkgKHBsYWluIHRleHQpIGZyb20gdGhlIGRhdGFiYXNlIGFzIGZhbGwgYmFjawogICAgIyBzZWUgYnVnIzk2NzIKICAgIGlmICgKICAgICAgICAkRGF0YXtDb250ZW50fSA9fiBtewogICAgICAgIF4gLiogLS0tLS1CRUdJTiBbIF0gUEdQIFsgXSBNRVNTQUdFLS0tLS0gIC4qICQgICAgICAjIGdyZXAgUEdQIGJlZ2luIHRhZwogICAgICAgIC4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFBHUCBwYXJ0cyBtYXkgYmUgbmVzdGVkIGluIGh0bWwKICAgICAgICBeIC4qIC0tLS0tRU5EIFsgXSBQR1AgWyBdIE1FU1NBR0UtLS0tLSAgLiogJCAgICAgICAgIyBncmVwIFBHUCBlbmQgdGFnCiAgICB9eG1zCiAgICAgICAgKQogICAgewogICAgICAgICMgaHRtbCBxdW90aW5nCiAgICAgICAgbXkgJEhUTUxCb2R5ID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCgKICAgICAgICAgICAgTmV3TGluZSAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdEZWZhdWx0Vmlld05ld0xpbmUnKSwKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJEFydGljbGVEYXRhe0JvZHl9LAogICAgICAgICAgICBWTWF4ICAgICAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0RlZmF1bHRWaWV3TGluZXMnKSB8fCA1MDAwLAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICBMaW5rRmVhdHVyZSAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICREYXRhe0NvbnRlbnR9ID0gJEhUTUxCb2R5OwogICAgfQoKICAgICRBcnRpY2xlRGF0YXtCb2R5fSA9ICREYXRhe0NvbnRlbnR9OwogICAgZGVsZXRlICRBcnRpY2xlRGF0YXtJc0VkaXRlZH07CgogICAgcmV0dXJuICVBcnRpY2xlRGF0YTsKfQoKc3ViIF9Db3B5QXJ0aWNsZUF0dGFjaG1lbnRzVG9VcGxvYWRDYWNoZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDb25maWdPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkVXBsb2FkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZScpOwoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgQXJ0aWNsZUlEID0+ICRQYXJhbXtBcnRpY2xlSUR9LAogICAgKTsKCiAgICAjIGRlZmluZSBpZiByaWNoIHRleHQgc2hvdWxkIGJlIHVzZWQKICAgICRTZWxmLT57UmljaFRleHR9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpab29tUmljaFRleHRGb3JjZScpCiAgICAgICAgfHwgJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0KICAgICAgICB8fCAwOwoKICAgICMgQWx3YXlzIGV4Y2x1ZGUgcGxhaW4gdGV4dCBhdHRhY2htZW50LCBidXQgZXhjbHVkZSBIVE1MIGJvZHkgb25seSBpZiByaWNoIHRleHQgaXMgZW5hYmxlZC4KICAgICRTZWxmLT57RXhjbHVkZUF0dGFjaG1lbnRzfSA9IHsKICAgICAgICBFeGNsdWRlUGxhaW5UZXh0ID0+IDEsCiAgICAgICAgRXhjbHVkZUhUTUxCb2R5ICA9PiAkU2VsZi0+e1JpY2hUZXh0fSwKICAgICAgICBFeGNsdWRlSW5saW5lICAgID0+ICRTZWxmLT57UmljaFRleHR9LAogICAgfTsKCiAgICAjIEdldCBhdHRhY2htZW50IGluZGV4IChleGNsdWRpbmcgYm9keSBhdHRhY2htZW50cykuCiAgICBteSAlQXRtSW5kZXggPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50SW5kZXgoCiAgICAgICAgQXJ0aWNsZUlEID0+ICRQYXJhbXtBcnRpY2xlSUR9LAogICAgICAgICV7ICRTZWxmLT57RXhjbHVkZUF0dGFjaG1lbnRzfSB9LAogICAgKTsKCiAgICBGSUxFOgogICAgZm9yIG15ICRGaWxlSUQgKCBzb3J0IGtleXMgJUF0bUluZGV4ICkgewoKICAgICAgICAjIGdldCBhbiBhdHRhY2htZW50CiAgICAgICAgbXkgJUF0dGFjaG1lbnREYXRhID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudCgKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICAgICA9PiAkUGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICAgICAgRmlsZUlEICAgICAgICAgICAgICAgICA9PiAkRmlsZUlELAogICAgICAgICAgICBDb250ZW50TWF5QmVGaWxlaGFuZGxlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBGSUxFIGlmICEkQXR0YWNobWVudERhdGF7Q29udGVudH07CgogICAgICAgICMgYWRkIGF0dGFjaG1lbnQgdG8gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgIG15ICRTdWNjZXNzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURBZGRGaWxlKAogICAgICAgICAgICBGb3JtSUQgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEF0dGFjaG1lbnREYXRhe0ZpbGVuYW1lfSwKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEF0dGFjaG1lbnREYXRhe0NvbnRlbnR9LAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAkQXR0YWNobWVudERhdGF7Q29udGVudFR5cGV9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgcHJlIGxvYWRlZCBhdHRhY2htZW50CiAgICBteSBAQXR0YWNobWVudHMgPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREdldEFsbEZpbGVzRGF0YSgKICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgKTsKCiAgICAjIGdldCBzdWJtaXQgYXR0YWNobWVudAogICAgbXkgJVVwbG9hZFN0dWZmID0gJFBhcmFtT2JqZWN0LT5HZXRVcGxvYWRBbGwoCiAgICAgICAgUGFyYW0gPT4gJ0ZpbGVVcGxvYWQnLAogICAgKTsKCiAgICBpZiAoJVVwbG9hZFN0dWZmKSB7CiAgICAgICAgcHVzaCBAQXR0YWNobWVudHMsIFwlVXBsb2FkU3R1ZmY7CiAgICB9CgogICAgcmV0dXJuIEBBdHRhY2htZW50czsKfQoKMTsK</File>
        <File Location="Kernel/Modules/AgentTicketEmail.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBjM2JjNmEyYzA4ZDdiN2I3YzI0YzYwOGMyNWJmNmViNDg5NzcxMDM0IC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRFbWFpbC5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRUaWNrZXRFbWFpbDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSBibGVzcyB7JVBhcmFtfSwgJFR5cGU7CgogICAgIyBmcm9udGVuZCBzcGVjaWZpYyBjb25maWcKICAgIG15ICRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgbXkgJER5bmFtaWNGaWVsZExpc3QgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWyAnVGlja2V0JywgJ0FydGljbGUnIF0sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgIG15ICREZWZpbml0aW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6TWFzaycpLT5EZWZpbml0aW9uR2V0KAogICAgICAgIE1hc2sgPT4gJFNlbGYtPntBY3Rpb259LAogICAgKSB8fCB7fTsKCiAgICAkU2VsZi0+e01hc2tEZWZpbml0aW9ufSA9ICREZWZpbml0aW9uLT57TWFza307CiAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZH0gICA9IHt9OwoKICAgICMgYWxpZ24gc3lzY29uZmlnIGFuZCB0aWNrZXQgbWFzayBkYXRhIEkKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkICggQHsgJER5bmFtaWNGaWVsZExpc3QgLy8gW10gfSApIHsKICAgICAgICBpZiAoIGV4aXN0cyAkRGVmaW5pdGlvbi0+e0R5bmFtaWNGaWVsZHN9eyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSApIHsKICAgICAgICAgICAgbXkgJFBhcmFtZXRlcnMgPSBkZWxldGUgJERlZmluaXRpb24tPntEeW5hbWljRmllbGRzfXsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gLy8ge307CgogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIGtleXMgJFBhcmFtZXRlcnMtPiUqICkgewogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZC0+eyRBdHRyaWJ1dGV9ID0gJFBhcmFtZXRlcnMtPnskQXR0cmlidXRlfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHVzaCAkU2VsZi0+e01hc2tEZWZpbml0aW9ufS0+QCosIHsKICAgICAgICAgICAgICAgIERGICAgICAgICA9PiAkRHluYW1pY0ZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgICAgICBNYW5kYXRvcnkgPT4gJENvbmZpZy0+e0R5bmFtaWNGaWVsZH17ICREeW5hbWljRmllbGQtPntOYW1lfSB9ID09IDIgPyAxIDogMCwKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGlmICggJENvbmZpZy0+e0R5bmFtaWNGaWVsZH17ICREeW5hbWljRmllbGQtPntOYW1lfSB9ID09IDIgKSB7CiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkLT57TWFuZGF0b3J5fSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRTZWxmLT57RHluYW1pY0ZpZWxkfXsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkOwogICAgfQoKICAgICMgYWxpZ24gc3lzY29uZmlnIGFuZCB0aWNrZXQgbWFzayBkYXRhIElJCiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZE5hbWUgKCBrZXlzICREZWZpbml0aW9uLT57RHluYW1pY0ZpZWxkc30tPiUqICkgewogICAgICAgICRTZWxmLT57RHluYW1pY0ZpZWxkfXskRHluYW1pY0ZpZWxkTmFtZX0gPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJER5bmFtaWNGaWVsZE5hbWUsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFBhcmFtZXRlcnMgPSAkRGVmaW5pdGlvbi0+e0R5bmFtaWNGaWVsZHN9eyREeW5hbWljRmllbGROYW1lfSAvLyB7fTsKCiAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBrZXlzICRQYXJhbWV0ZXJzLT4lKiApIHsKICAgICAgICAgICAgJFNlbGYtPntEeW5hbWljRmllbGR9eyREeW5hbWljRmllbGROYW1lfXskQXR0cmlidXRlfSA9ICRQYXJhbWV0ZXJzLT57JEF0dHJpYnV0ZX07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGZvcm0gaWQKICAgICRTZWxmLT57Rm9ybUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OkZvcm1DYWNoZScpLT5QcmVwYXJlRm9ybUlEKAogICAgICAgIFBhcmFtT2JqZWN0ICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyksCiAgICAgICAgTGF5b3V0T2JqZWN0ID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKSwKICAgICk7CgogICAgIyBtZXRob2RzIHdoaWNoIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcG9zc2libGUgdmFsdWVzIG9mIHRoZSBzdGFuZGFyZCBmaWVsZHMKICAgICRTZWxmLT57RmllbGRNZXRob2RzfSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEZpZWxkSUQgPT4gJ0Rlc3QnLAogICAgICAgICAgICBNZXRob2QgID0+IFwmX0dldFRvcwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBGaWVsZElEID0+ICdOZXdVc2VySUQnLAogICAgICAgICAgICBNZXRob2QgID0+IFwmX0dldFVzZXJzCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEZpZWxkSUQgPT4gJ05ld1Jlc3BvbnNpYmxlSUQnLAogICAgICAgICAgICBNZXRob2QgID0+IFwmX0dldFJlc3BvbnNpYmxlcwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBGaWVsZElEID0+ICdOZXh0U3RhdGVJRCcsCiAgICAgICAgICAgIE1ldGhvZCAgPT4gXCZfR2V0TmV4dFN0YXRlcwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBGaWVsZElEID0+ICdQcmlvcml0eUlEJywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRQcmlvcml0aWVzCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEZpZWxkSUQgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgICAgIE1ldGhvZCAgPT4gXCZfR2V0U2VydmljZXMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnU0xBSUQnLAogICAgICAgICAgICBNZXRob2QgID0+IFwmX0dldFNMQXMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnU3RhbmRhcmRUZW1wbGF0ZUlEJywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRTdGFuZGFyZFRlbXBsYXRlcwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBGaWVsZElEID0+ICdUeXBlSUQnLAogICAgICAgICAgICBNZXRob2QgID0+IFwmX0dldFR5cGVzCiAgICAgICAgfSwKICAgIF07CgogICAgIyBkZXBlbmRlbmNpZXMgb2Ygc3RhbmRhcmQgZmllbGRzIHdoaWNoIGFyZSBub3QgZGVmaW5lZCB2aWEgQUNMcwogICAgJFNlbGYtPntJbnRlcm5hbERlcGVuZGFuY3l9ID0gewogICAgICAgIERlc3QgPT4gewogICAgICAgICAgICBOZXdVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTmV3UmVzcG9uc2libGVJRCAgID0+IDEsCiAgICAgICAgICAgIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgU2VydmljZUlEID0+IHsKICAgICAgICAgICAgU0xBSUQgICAgID0+IDEsCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAxLCAgICAjQ3VzdG9tZXJVc2VyIHVwZGF0ZXMgY2FuIGJlIHN1Ym1pdHRlZCBhcyBFbGVtZW50Q2hhbmdlZDogU2VydmljZUlECiAgICAgICAgfSwKICAgICAgICBDdXN0b21lclVzZXIgPT4gewogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gMSwKICAgICAgICB9LAogICAgICAgIE93bmVyQWxsID0+IHsKICAgICAgICAgICAgTmV3VXNlcklEID0+IDEsCiAgICAgICAgfSwKICAgICAgICBSZXNwb25zaWJsZUFsbCA9PiB7CiAgICAgICAgICAgIE5ld1Jlc3BvbnNpYmxlSUQgPT4gMSwKICAgICAgICB9LAogICAgfTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHN0b3JlIGxhc3QgcXVldWUgc2NyZWVuCiAgICBpZiAoICRTZWxmLT57TGFzdFNjcmVlbk92ZXJ2aWV3fSAmJiAkU2VsZi0+e0xhc3RTY3JlZW5PdmVydmlld30gIX4gL0FjdGlvbj1BZ2VudFRpY2tldEVtYWlsLyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24nKS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkRW1haWxBZGRyZXNzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkVtYWlsQWRkcmVzcycpOwoKICAgIG15ICREZWJ1ZyA9ICRQYXJhbXtEZWJ1Z30gfHwgMDsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkS2V5ICgKICAgICAgICBxdyhZZWFyIE1vbnRoIERheSBIb3VyIE1pbnV0ZSBUbyBDYyBCY2MgVGltZVVuaXRzIFByaW9yaXR5SUQgU3ViamVjdCBCb2R5CiAgICAgICAgVHlwZUlEIFNlcnZpY2VJRCBTTEFJRCBPd25lckFsbCBSZXNwb25zaWJsZUFsbCBOZXdSZXNwb25zaWJsZUlEIE5ld1VzZXJJRAogICAgICAgIE5leHRTdGF0ZUlEIFN0YW5kYXJkVGVtcGxhdGVJRCBEZXN0IEFydGljbGVJRCBMaW5rVGlja2V0SUQKICAgICAgICApCiAgICAgICAgKQogICAgewogICAgICAgICRHZXRQYXJhbXskS2V5fSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRLZXkgKTsKICAgIH0KCiAgICAjIEFDTCBjb21wYXRpYmlsaXR5IHRyYW5zbGF0aW9uCiAgICBteSAlQUNMQ29tcGF0R2V0UGFyYW07CiAgICAkQUNMQ29tcGF0R2V0UGFyYW17T3duZXJJRH0gPSAkR2V0UGFyYW17TmV3VXNlcklEfTsKCiAgICAjIGhhc2ggZm9yIGNoZWNrIGR1cGxpY2F0ZWQgZW50cmllcwogICAgbXkgJUFkZHJlc3Nlc0xpc3Q7CgogICAgIyBNdWx0aXBsZUN1c3RvbWVyIFRvLWZpZWxkCiAgICBteSBATXVsdGlwbGVDdXN0b21lcjsKICAgIG15ICRDdXN0b21lcnNOdW1iZXJUbyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDdXN0b21lclRpY2tldENvdW50ZXJUb0N1c3RvbWVyJyApIHx8IDA7CiAgICBteSAkU2VsZWN0ZWQgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ3VzdG9tZXJTZWxlY3RlZCcgKSAgICAgICAgICAgICAgICB8fCAnJzsKCiAgICAjIGdldCBjaGVjayBpdGVtIG9iamVjdAogICAgbXkgJENoZWNrSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKTsKCiAgICBpZiAoJEN1c3RvbWVyc051bWJlclRvKSB7CiAgICAgICAgbXkgJEN1c3RvbWVyQ291bnRlciA9IDE7CgogICAgICAgIENPVU5UOgogICAgICAgIGZvciBteSAkQ291bnQgKCAxIC4uICRDdXN0b21lcnNOdW1iZXJUbyApIHsKICAgICAgICAgICAgbGFzdCBDT1VOVCBpZiAkQ291bnQgPiAxXzAwMDsgICAgIyBiYWlsIG91dCB3aGVuIHRoZSBudW1iZXIgb2YgY3VzdG9tZXJzIGlzIGFibm9ybWFsbHkgaGlnaAoKICAgICAgICAgICAgbXkgJEN1c3RvbWVyRWxlbWVudCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDdXN0b21lclRpY2tldFRleHRfJyAuICRDb3VudCApOwoKICAgICAgICAgICAgbmV4dCBDT1VOVCB1bmxlc3MgJEN1c3RvbWVyRWxlbWVudDsKCiAgICAgICAgICAgIG15ICRDdXN0b21lclNlbGVjdGVkID0gKCAkU2VsZWN0ZWQgZXEgJENvdW50ID8gJ2NoZWNrZWQgJyA6ICcnICk7CiAgICAgICAgICAgIG15ICRDdXN0b21lcktleSAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyS2V5XycgLiAkQ291bnQgKSB8fCAnJzsKCiAgICAgICAgICAgIGlmICggJEdldFBhcmFte1RvfSApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtUb30gLj0gJywgJyAuICRDdXN0b21lckVsZW1lbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17VG99ID0gJEN1c3RvbWVyRWxlbWVudDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJEN1c3RvbWVyRXJyb3JNc2cgPSAnQ3VzdG9tZXJHZW5lcmljU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICBteSAkQ3VzdG9tZXJFcnJvciAgICA9ICcnOwogICAgICAgICAgICBteSAkQ3VzdG9tZXJEaXNhYmxlZCA9ICcnOwogICAgICAgICAgICBteSAkQ291bnRBdXggICAgICAgICA9ICRDdXN0b21lckNvdW50ZXIrKzsKCiAgICAgICAgICAgICMgY2hlY2sgZW1haWwgYWRkcmVzcwogICAgICAgICAgICBmb3IgbXkgJEVtYWlsICggJEVtYWlsQWRkcmVzc09iamVjdC0+UGFyc2VBZGRyZXNzTGluZSggTGluZSA9PiAkQ3VzdG9tZXJFbGVtZW50ICkgKSB7CiAgICAgICAgICAgICAgICBpZiAoICEkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0VtYWlsKCBBZGRyZXNzT2JqZWN0ID0+ICRFbWFpbCApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFcnJvck1zZyA9ICRDaGVja0l0ZW1PYmplY3QtPkNoZWNrRXJyb3JUeXBlKCkKICAgICAgICAgICAgICAgICAgICAgICAgLiAnU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgICAgICRDdXN0b21lckVycm9yID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBmb3IgZHVwbGljYXRlZCBlbnRyaWVzCiAgICAgICAgICAgIGlmICggZGVmaW5lZCAkQWRkcmVzc2VzTGlzdHskQ3VzdG9tZXJFbGVtZW50fSAmJiAkQ3VzdG9tZXJFcnJvciBlcSAnJyApIHsKICAgICAgICAgICAgICAgICRDdXN0b21lckVycm9yTXNnID0gJ0lzRHVwbGljYXRlZFNlcnZlckVycm9yTXNnJzsKICAgICAgICAgICAgICAgICRDdXN0b21lckVycm9yICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkQ3VzdG9tZXJFcnJvciBuZSAnJyApIHsKICAgICAgICAgICAgICAgICRDdXN0b21lckRpc2FibGVkID0gJ2Rpc2FibGVkJzsKICAgICAgICAgICAgICAgICRDb3VudEF1eCAgICAgICAgID0gJENvdW50IC4gJ0Vycm9yJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHVzaCBATXVsdGlwbGVDdXN0b21lciwgewogICAgICAgICAgICAgICAgQ291bnQgICAgICAgICAgICA9PiAkQ291bnRBdXgsCiAgICAgICAgICAgICAgICBDdXN0b21lckVsZW1lbnQgID0+ICRDdXN0b21lckVsZW1lbnQsCiAgICAgICAgICAgICAgICBDdXN0b21lclNlbGVjdGVkID0+ICRDdXN0b21lclNlbGVjdGVkLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJLZXkgICAgICA9PiAkQ3VzdG9tZXJLZXksCiAgICAgICAgICAgICAgICBDdXN0b21lckVycm9yICAgID0+ICRDdXN0b21lckVycm9yLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJFcnJvck1zZyA9PiAkQ3VzdG9tZXJFcnJvck1zZywKICAgICAgICAgICAgICAgIEN1c3RvbWVyRGlzYWJsZWQgPT4gJEN1c3RvbWVyRGlzYWJsZWQsCiAgICAgICAgICAgIH07CiAgICAgICAgICAgICRBZGRyZXNzZXNMaXN0eyRDdXN0b21lckVsZW1lbnR9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyBNdWx0aXBsZUN1c3RvbWVyIENjLWZpZWxkCiAgICBteSBATXVsdGlwbGVDdXN0b21lckNjOwogICAgbXkgJEN1c3RvbWVyc051bWJlckNjID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyVGlja2V0Q291bnRlckNjQ3VzdG9tZXInICkgfHwgMDsKCiAgICBpZiAoJEN1c3RvbWVyc051bWJlckNjKSB7CiAgICAgICAgbXkgJEN1c3RvbWVyQ291bnRlckNjID0gMTsKCiAgICAgICAgQ09VTlQ6CiAgICAgICAgZm9yIG15ICRDb3VudCAoIDEgLi4gJEN1c3RvbWVyc051bWJlckNjICkgewogICAgICAgICAgICBsYXN0IENPVU5UIGlmICRDb3VudCA+IDFfMDAwOyAgICAjIGJhaWwgb3V0IHdoZW4gdGhlIG51bWJlciBvZiBjdXN0b21lcnMgaXMgYWJub3JtYWxseSBoaWdoCgogICAgICAgICAgICBteSAkQ3VzdG9tZXJFbGVtZW50Q2MgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2NDdXN0b21lclRpY2tldFRleHRfJyAuICRDb3VudCApOwoKICAgICAgICAgICAgbmV4dCBDT1VOVCB1bmxlc3MgJEN1c3RvbWVyRWxlbWVudENjOwoKICAgICAgICAgICAgbXkgJEN1c3RvbWVyS2V5Q2MgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2NDdXN0b21lcktleV8nIC4gJENvdW50ICkgfHwgJyc7CgogICAgICAgICAgICBteSAkQ3VzdG9tZXJFcnJvck1zZ0NjID0gJ0N1c3RvbWVyR2VuZXJpY1NlcnZlckVycm9yTXNnJzsKICAgICAgICAgICAgbXkgJEN1c3RvbWVyRXJyb3JDYyAgICA9ICcnOwogICAgICAgICAgICBteSAkQ3VzdG9tZXJEaXNhYmxlZENjID0gJyc7CiAgICAgICAgICAgIG15ICRDb3VudEF1eENjICAgICAgICAgPSAkQ3VzdG9tZXJDb3VudGVyQ2MrKzsKCiAgICAgICAgICAgIGlmICggJEdldFBhcmFte0NjfSApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtDY30gLj0gJywgJyAuICRDdXN0b21lckVsZW1lbnRDYzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtDY30gPSAkQ3VzdG9tZXJFbGVtZW50Q2M7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgZW1haWwgYWRkcmVzcwogICAgICAgICAgICBmb3IgbXkgJEVtYWlsICggJEVtYWlsQWRkcmVzc09iamVjdC0+UGFyc2VBZGRyZXNzTGluZSggTGluZSA9PiAkQ3VzdG9tZXJFbGVtZW50Q2MgKSApIHsKICAgICAgICAgICAgICAgIGlmICggISRDaGVja0l0ZW1PYmplY3QtPkNoZWNrRW1haWwoIEFkZHJlc3NPYmplY3QgPT4gJEVtYWlsICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyRXJyb3JNc2dDYyA9ICRDaGVja0l0ZW1PYmplY3QtPkNoZWNrRXJyb3JUeXBlKCkKICAgICAgICAgICAgICAgICAgICAgICAgLiAnU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgICAgICRDdXN0b21lckVycm9yQ2MgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGZvciBkdXBsaWNhdGVkIGVudHJpZXMKICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRBZGRyZXNzZXNMaXN0eyRDdXN0b21lckVsZW1lbnRDY30gJiYgJEN1c3RvbWVyRXJyb3JDYyBlcSAnJyApIHsKICAgICAgICAgICAgICAgICRDdXN0b21lckVycm9yTXNnQ2MgPSAnSXNEdXBsaWNhdGVkU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgJEN1c3RvbWVyRXJyb3JDYyAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJEN1c3RvbWVyRXJyb3JDYyBuZSAnJyApIHsKICAgICAgICAgICAgICAgICRDdXN0b21lckRpc2FibGVkQ2MgPSAnZGlzYWJsZWQnOwogICAgICAgICAgICAgICAgJENvdW50QXV4Q2MgICAgICAgICA9ICRDb3VudCAuICdFcnJvcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1c2ggQE11bHRpcGxlQ3VzdG9tZXJDYywgewogICAgICAgICAgICAgICAgQ291bnQgICAgICAgICAgICA9PiAkQ291bnRBdXhDYywKICAgICAgICAgICAgICAgIEN1c3RvbWVyRWxlbWVudCAgPT4gJEN1c3RvbWVyRWxlbWVudENjLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJLZXkgICAgICA9PiAkQ3VzdG9tZXJLZXlDYywKICAgICAgICAgICAgICAgIEN1c3RvbWVyRXJyb3IgICAgPT4gJEN1c3RvbWVyRXJyb3JDYywKICAgICAgICAgICAgICAgIEN1c3RvbWVyRXJyb3JNc2cgPT4gJEN1c3RvbWVyRXJyb3JNc2dDYywKICAgICAgICAgICAgICAgIEN1c3RvbWVyRGlzYWJsZWQgPT4gJEN1c3RvbWVyRGlzYWJsZWRDYywKICAgICAgICAgICAgfTsKICAgICAgICAgICAgJEFkZHJlc3Nlc0xpc3R7JEN1c3RvbWVyRWxlbWVudENjfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgTXVsdGlwbGVDdXN0b21lciBCY2MtZmllbGQKICAgIG15IEBNdWx0aXBsZUN1c3RvbWVyQmNjOwogICAgbXkgJEN1c3RvbWVyc051bWJlckJjYyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDdXN0b21lclRpY2tldENvdW50ZXJCY2NDdXN0b21lcicgKSB8fCAwOwoKICAgIGlmICgkQ3VzdG9tZXJzTnVtYmVyQmNjKSB7CiAgICAgICAgbXkgJEN1c3RvbWVyQ291bnRlckJjYyA9IDE7CgogICAgICAgIENPVU5UOgogICAgICAgIGZvciBteSAkQ291bnQgKCAxIC4uICRDdXN0b21lcnNOdW1iZXJCY2MgKSB7CiAgICAgICAgICAgIGxhc3QgQ09VTlQgaWYgJENvdW50ID4gMV8wMDA7ICAgICMgYmFpbCBvdXQgd2hlbiB0aGUgbnVtYmVyIG9mIGN1c3RvbWVycyBpcyBhYm5vcm1hbGx5IGhpZ2gKCiAgICAgICAgICAgIG15ICRDdXN0b21lckVsZW1lbnRCY2MgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQmNjQ3VzdG9tZXJUaWNrZXRUZXh0XycgLiAkQ291bnQgKTsKCiAgICAgICAgICAgIG5leHQgQ09VTlQgdW5sZXNzICRDdXN0b21lckVsZW1lbnRCY2M7CgogICAgICAgICAgICBteSAkQ3VzdG9tZXJLZXlCY2MgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQmNjQ3VzdG9tZXJLZXlfJyAuICRDb3VudCApIHx8ICcnOwoKICAgICAgICAgICAgbXkgJEN1c3RvbWVyRGlzYWJsZWRCY2MgPSAnJzsKICAgICAgICAgICAgbXkgJENvdW50QXV4QmNjICAgICAgICAgPSAkQ3VzdG9tZXJDb3VudGVyQmNjKys7CiAgICAgICAgICAgIG15ICRDdXN0b21lckVycm9yTXNnQmNjID0gJ0N1c3RvbWVyR2VuZXJpY1NlcnZlckVycm9yTXNnJzsKICAgICAgICAgICAgbXkgJEN1c3RvbWVyRXJyb3JCY2MgICAgPSAnJzsKCiAgICAgICAgICAgIGlmICggJEdldFBhcmFte0JjY30gKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17QmNjfSAuPSAnLCAnIC4gJEN1c3RvbWVyRWxlbWVudEJjYzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtCY2N9ID0gJEN1c3RvbWVyRWxlbWVudEJjYzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBlbWFpbCBhZGRyZXNzCiAgICAgICAgICAgIGZvciBteSAkRW1haWwgKCAkRW1haWxBZGRyZXNzT2JqZWN0LT5QYXJzZUFkZHJlc3NMaW5lKCBMaW5lID0+ICRDdXN0b21lckVsZW1lbnRCY2MgKSApIHsKICAgICAgICAgICAgICAgIGlmICggISRDaGVja0l0ZW1PYmplY3QtPkNoZWNrRW1haWwoIEFkZHJlc3NPYmplY3QgPT4gJEVtYWlsICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyRXJyb3JNc2dCY2MgPSAkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0Vycm9yVHlwZSgpCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJ1NlcnZlckVycm9yTXNnJzsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFcnJvckJjYyA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgZm9yIGR1cGxpY2F0ZWQgZW50cmllcwogICAgICAgICAgICBpZiAoIGRlZmluZWQgJEFkZHJlc3Nlc0xpc3R7JEN1c3RvbWVyRWxlbWVudEJjY30gJiYgJEN1c3RvbWVyRXJyb3JCY2MgZXEgJycgKSB7CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFcnJvck1zZ0JjYyA9ICdJc0R1cGxpY2F0ZWRTZXJ2ZXJFcnJvck1zZyc7CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFcnJvckJjYyAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJEN1c3RvbWVyRXJyb3JCY2MgbmUgJycgKSB7CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJEaXNhYmxlZEJjYyA9ICdkaXNhYmxlZCc7CiAgICAgICAgICAgICAgICAkQ291bnRBdXhCY2MgICAgICAgICA9ICRDb3VudCAuICdFcnJvcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1c2ggQE11bHRpcGxlQ3VzdG9tZXJCY2MsIHsKICAgICAgICAgICAgICAgIENvdW50ICAgICAgICAgICAgPT4gJENvdW50QXV4QmNjLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJFbGVtZW50ICA9PiAkQ3VzdG9tZXJFbGVtZW50QmNjLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJLZXkgICAgICA9PiAkQ3VzdG9tZXJLZXlCY2MsCiAgICAgICAgICAgICAgICBDdXN0b21lckVycm9yICAgID0+ICRDdXN0b21lckVycm9yQmNjLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJFcnJvck1zZyA9PiAkQ3VzdG9tZXJFcnJvck1zZ0JjYywKICAgICAgICAgICAgICAgIEN1c3RvbWVyRGlzYWJsZWQgPT4gJEN1c3RvbWVyRGlzYWJsZWRCY2MsCiAgICAgICAgICAgIH07CiAgICAgICAgICAgICRBZGRyZXNzZXNMaXN0eyRDdXN0b21lckVsZW1lbnRCY2N9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgYW4gZW1wdHkgdmFsdWUgaWYgbm90IGRlZmluZWQKICAgICRHZXRQYXJhbXtDY30gID0gJycgaWYgIWRlZmluZWQgJEdldFBhcmFte0NjfTsKICAgICRHZXRQYXJhbXtCY2N9ID0gJycgaWYgIWRlZmluZWQgJEdldFBhcmFte0JjY307CgogICAgIyBnZXQgRHluYW1pYyBmaWVsZHMgZm9ybSBQYXJhbU9iamVjdAogICAgbXkgJUR5bmFtaWNGaWVsZFZhbHVlczsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRDb25maWdPYmplY3QgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRDdXN0b21lclVzZXJPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwogICAgbXkgJFVwbG9hZENhY2hlT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZScpOwogICAgbXkgJFRpY2tldE9iamVjdCAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkUXVldWVPYmplY3QgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwogICAgbXkgJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpGaWVsZFJlc3RyaWN0aW9ucycpOwogICAgbXkgJE1haW5PYmplY3QgICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgICMgZnJvbnRlbmQgc3BlY2lmaWMgY29uZmlnCiAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiMgUm90aGVyIE9TUyAvIElUU01Db3JlIC0gY2FsY3VsYXRlIFByaW9yaXR5IHZpYSBDSVAgbWF0cml4CiAgICBteSAkQ0lQQ2FsY3VsYXRlID0gJENvbmZpZy0+e1ByaW9yaXR5QnlDSVB9IC8vICRDb25maWdPYmplY3QtPkdldCgnSVRTTTo6RnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Jyk7CiAgICBteSAkU2VydmljZU9iamVjdDsKICAgIG15ICRDSVBBbGxvY2F0ZU9iamVjdDsKICAgIGlmICggJENJUENhbGN1bGF0ZSApIHsKICAgICAgICAkU2VydmljZU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwogICAgICAgICRDSVBBbGxvY2F0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUnKTsKCiAgICAgICAgJFNlbGYtPntJbnRlcm5hbERlcGVuZGFuY3l9e1NlcnZpY2VJRH17UHJpb3JpdHlJRH0gICAgICAgICAgICAgICAgICAgID0gMTsKICAgICAgICAkU2VsZi0+e0ludGVybmFsRGVwZW5kYW5jeX17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9e1ByaW9yaXR5SUR9ICAgICAgPSAxOwogICAgICAgICRTZWxmLT57SW50ZXJuYWxEZXBlbmRhbmN5fXtEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fXtQcmlvcml0eUlEfSA9IDE7CiAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICAjIGN5Y2xlIHRocm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggdmFsdWVzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGV4dHJhY3QgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZnJvbSB0aGUgd2ViIHJlcXVlc3QKICAgICAgICAkRHluYW1pY0ZpZWxkVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZUdldCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICk7CiAgICB9CgogICAgIyBjb252ZXJ0IGR5bmFtaWMgZmllbGQgdmFsdWVzIGludG8gYSBzdHJ1Y3R1cmUgZm9yIEFDTHMKICAgIG15ICVEeW5hbWljRmllbGRBQ0xQYXJhbWV0ZXJzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBzb3J0IGtleXMgJUR5bmFtaWNGaWVsZFZhbHVlcyApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZDsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZFZhbHVlc3skRHluYW1pY0ZpZWxkfTsKCiAgICAgICAgJER5bmFtaWNGaWVsZEFDTFBhcmFtZXRlcnN7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGQgfSA9ICREeW5hbWljRmllbGRWYWx1ZXN7JER5bmFtaWNGaWVsZH07CiAgICB9CiAgICAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfSA9IFwlRHluYW1pY0ZpZWxkQUNMUGFyYW1ldGVyczsKCiAgICAjIHRyYW5zZm9ybSBwZW5kaW5nIHRpbWUsIHRpbWUgc3RhbXAgYmFzZWQgb24gdXNlciB0aW1lIHpvbmUKICAgIGlmICgKICAgICAgICBkZWZpbmVkICRHZXRQYXJhbXtZZWFyfQogICAgICAgICYmIGRlZmluZWQgJEdldFBhcmFte01vbnRofQogICAgICAgICYmIGRlZmluZWQgJEdldFBhcmFte0RheX0KICAgICAgICAmJiBkZWZpbmVkICRHZXRQYXJhbXtIb3VyfQogICAgICAgICYmIGRlZmluZWQgJEdldFBhcmFte01pbnV0ZX0KICAgICAgICApCiAgICB7CiAgICAgICAgJUdldFBhcmFtID0gJExheW91dE9iamVjdC0+VHJhbnNmb3JtRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAhJFNlbGYtPntTdWJhY3Rpb259IHx8ICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ3JlYXRlZCcgKSB7CiAgICAgICAgbXkgJVRpY2tldDsKICAgICAgICBpZiAoICRTZWxmLT57VGlja2V0SUR9ICkgewogICAgICAgICAgICAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KCBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSApOwogICAgICAgIH0KCiAgICAgICAgIyBoZWFkZXIgYW5kIG5hdmlnYXRpb24gYmFyCiAgICAgICAgbXkgJE91dHB1dCA9IGpvaW4gJycsCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkhlYWRlcigpLAogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgaWYgdGhlcmUgaXMgbm8gdGlja2V0IGlkIQogICAgICAgIGlmICggJFNlbGYtPntUaWNrZXRJRH0gJiYgJFNlbGYtPntTdWJhY3Rpb259IGVxICdDcmVhdGVkJyApIHsKCiAgICAgICAgICAgICMgbm90aWZ5IGluZm8KICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICBJbmZvID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAnVGlja2V0ICIlcyIgY3JlYXRlZCEnLAogICAgICAgICAgICAgICAgICAgICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBMaW5rID0+ICRMYXlvdXRPYmplY3QtPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWdlbnRUaWNrZXRab29tO1RpY2tldElEPScKICAgICAgICAgICAgICAgICAgICAuICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzdG9yZSBsYXN0IHF1ZXVlIHNjcmVlbgogICAgICAgIGlmICgKICAgICAgICAgICAgJFNlbGYtPntMYXN0U2NyZWVuT3ZlcnZpZXd9CiAgICAgICAgICAgICYmICRTZWxmLT57TGFzdFNjcmVlbk92ZXJ2aWV3fSAhfiAvQWN0aW9uPUFnZW50VGlja2V0RW1haWwvCiAgICAgICAgICAgICYmICRTZWxmLT57UmVxdWVzdGVkVVJMfSAgICAgICAhfiAvQWN0aW9uPUFnZW50VGlja2V0RW1haWwuKkxpbmtUaWNrZXRJRD0vCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpLT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuT3ZlcnZpZXcnLAogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNwbGl0IGFydGljbGUgaWYgZ2l2ZW4KICAgICAgICAjIGdldCBBcnRpY2xlSUQKICAgICAgICBteSAlQXJ0aWNsZTsKICAgICAgICBteSAlQ3VzdG9tZXJEYXRhOwogICAgICAgIG15ICRBcnRpY2xlRnJvbSA9ICcnOwogICAgICAgIG15ICVTcGxpdFRpY2tldERhdGE7CiAgICAgICAgaWYgKCAkR2V0UGFyYW17QXJ0aWNsZUlEfSApIHsKCiAgICAgICAgICAgIG15ICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgVHlwZSAgICAgPT4gJ3JvJywKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICAgID0+IFRyYW5zbGF0YWJsZSgnWW91IG5lZWQgcm8gcGVybWlzc2lvbiEnKSwKICAgICAgICAgICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBHZXQgaW5mb3JtYXRpb24gZnJvbSBvcmlnaW5hbCB0aWNrZXQgKFNwbGl0VGlja2V0KS4KICAgICAgICAgICAgJVNwbGl0VGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QmFja2VuZEZvckFydGljbGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEdldFBhcmFte0FydGljbGVJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkR2V0UGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgYXJ0aWNsZSBpcyBmcm9tIHRoZSBzYW1lIFRpY2tldElEIGFzIHdlIGNoZWNrZWQgcGVybWlzc2lvbnMgZm9yLgogICAgICAgICAgICBpZiAoICRBcnRpY2xle1RpY2tldElEfSBuZSAkU2VsZi0+e1RpY2tldElEfSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJ0FydGljbGUgZG9lcyBub3QgYmVsb25nIHRvIHRpY2tldCAlcyEnLCAkU2VsZi0+e1RpY2tldElEfQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkQXJ0aWNsZXtTdWJqZWN0fSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN1YmplY3RDbGVhbigKICAgICAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgPT4gJEFydGljbGV7U3ViamVjdH0gfHwgJycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNhdmUgYXJ0aWNsZSBmcm9tIGZvciBhZGRyZXNzZXMgbGlzdAogICAgICAgICAgICAkQXJ0aWNsZUZyb20gPSAkQXJ0aWNsZXtGcm9tfTsKCiAgICAgICAgICAgICMgaWYgVG8gaXMgcHJlc2VudAogICAgICAgICAgICAjIGFuZCBpcyBubyBhIHF1ZXVlCiAgICAgICAgICAgICMgYW5kIGFsc28gaXMgbm8gYSBzeXN0ZW0gYWRkcmVzcwogICAgICAgICAgICAjIHNldCBUbyBhcyBhcnRpY2xlIGZyb20KICAgICAgICAgICAgaWYgKCBJc1N0cmluZ1dpdGhEYXRhKCAkQXJ0aWNsZXtUb30gKSApIHsKICAgICAgICAgICAgICAgIG15ICVRdWV1ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlTGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+e0N1c3RvbWVyUGFuZWxPd25TZWxlY3Rpb259ICkgewogICAgICAgICAgICAgICAgICAgIGZvciBteSAkUXVldWUgKCBzb3J0IGtleXMgJXsgJENvbmZpZ09iamVjdC0+e0N1c3RvbWVyUGFuZWxPd25TZWxlY3Rpb259IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRDb25maWdPYmplY3QtPntDdXN0b21lclBhbmVsT3duU2VsZWN0aW9ufS0+eyRRdWV1ZX07CiAgICAgICAgICAgICAgICAgICAgICAgICRRdWV1ZXN7JFF1ZXVlfSA9ICRWYWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJVF1ZXVlTG9va3VwICAgICAgICAgPSByZXZlcnNlICVRdWV1ZXM7CiAgICAgICAgICAgICAgICBteSAlU3lzdGVtQWRkcmVzc0xvb2t1cCA9IHJldmVyc2UgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c3RlbUFkZHJlc3MnKS0+U3lzdGVtQWRkcmVzc0xpc3QoKTsKICAgICAgICAgICAgICAgIG15ICRTeXN0ZW1BZGRyZXNzRW1haWw7CgogICAgICAgICAgICAgICAgaWYgKCRBcnRpY2xlRnJvbSkgewogICAgICAgICAgICAgICAgICAgIG15ICgkQXJ0aWNsZUZyb21BZGRyZXNzKSA9ICRFbWFpbEFkZHJlc3NPYmplY3QtPlBhcnNlQWRkcmVzc0xpbmUoIExpbmUgPT4gJEFydGljbGVGcm9tICk7CiAgICAgICAgICAgICAgICAgICAgJFN5c3RlbUFkZHJlc3NFbWFpbCA9ICRFbWFpbEFkZHJlc3NPYmplY3QtPkdldEFkZHJlc3MoIEFkZHJlc3NPYmplY3QgPT4gJEFydGljbGVGcm9tQWRkcmVzcyApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQgJFF1ZXVlTG9va3VweyAkQXJ0aWNsZXtUb30gfSAmJiBkZWZpbmVkICRTeXN0ZW1BZGRyZXNzTG9va3VweyRTeXN0ZW1BZGRyZXNzRW1haWx9ICkgewogICAgICAgICAgICAgICAgICAgICRBcnRpY2xlRnJvbSA9ICRBcnRpY2xle1RvfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBib2R5IHByZXBhcmF0aW9uIGZvciBwbGFpbiB0ZXh0IHByb2Nlc3NpbmcKICAgICAgICAgICAgJEFydGljbGV7Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5BcnRpY2xlUXVvdGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgPT4gJEFydGljbGV7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgID0+ICRHZXRQYXJhbXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIFVwbG9hZENhY2hlT2JqZWN0ICA9PiAkVXBsb2FkQ2FjaGVPYmplY3QsCiAgICAgICAgICAgICAgICBBdHRhY2htZW50c0luY2x1ZGUgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgICAgICRBcnRpY2xle0NvbnRlbnRUeXBlfSA9ICd0ZXh0L2h0bWwnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJEFydGljbGV7Q29udGVudFR5cGV9ID0gJ3RleHQvcGxhaW4nOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAlU2FmZXR5Q2hlY2tSZXN1bHQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlNhZmV0eSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkQXJ0aWNsZXtCb2R5fSwKCiAgICAgICAgICAgICAgICAjIFN0cmlwIG91dCBleHRlcm5hbCBjb250ZW50IGlmIEJsb2NrTG9hZGluZ1JlbW90ZUNvbnRlbnQgaXMgZW5hYmxlZC4KICAgICAgICAgICAgICAgIE5vRXh0U3JjTG9hZCA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkJsb2NrTG9hZGluZ1JlbW90ZUNvbnRlbnQnKSwKCiAgICAgICAgICAgICAgICAjIERpc2FsbG93IHBvdGVudGlhbGx5IHVuc2FmZSBjb250ZW50LgogICAgICAgICAgICAgICAgTm9BcHBsZXQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBOb09iamVjdCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIE5vRW1iZWQgICAgICA9PiAxLAogICAgICAgICAgICAgICAgTm9TVkcgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBOb0phdmFTY3JpcHQgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJEFydGljbGV7Qm9keX0gPSAkU2FmZXR5Q2hlY2tSZXN1bHR7U3RyaW5nfTsKCiAgICAgICAgICAgICMgc2hvdyBjdXN0b21lciBpbmZvCiAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lckluZm9Db21wb3NlJykgKSB7CiAgICAgICAgICAgICAgICBpZiAoICRBcnRpY2xle0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAgICAgICAgICAgICAlQ3VzdG9tZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgVXNlciA9PiAkQXJ0aWNsZXtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJEFydGljbGV7Q3VzdG9tZXJJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJUN1c3RvbWVyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJEFydGljbGV7Q3VzdG9tZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFNwbGl0VGlja2V0RGF0YXtDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJUN1c3RvbWVyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gJFNwbGl0VGlja2V0RGF0YXtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFNwbGl0VGlja2V0RGF0YXtDdXN0b21lcklEfSApIHsKICAgICAgICAgICAgICAgICAgICAlQ3VzdG9tZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAkU3BsaXRUaWNrZXREYXRhe0N1c3RvbWVySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZXtDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgICAgICAgICBteSAlQ3VzdG9tZXJVc2VyTGlzdCA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyU2VhcmNoKAogICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkQXJ0aWNsZXtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgZm9yIG15ICRLZXlDdXN0b21lclVzZXJMaXN0ICggc29ydCBrZXlzICVDdXN0b21lclVzZXJMaXN0ICkgewogICAgICAgICAgICAgICAgICAgICRBcnRpY2xle0Zyb219ID0gJEN1c3RvbWVyVXNlckxpc3R7JEtleUN1c3RvbWVyVXNlckxpc3R9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG11bHRpcGxlIGFkZHJlc3NlcyBsaXN0CiAgICAgICAgIyBjaGVjayBlbWFpbCBhZGRyZXNzCiAgICAgICAgbXkgJENvdW50RnJvbSA9IHNjYWxhciBATXVsdGlwbGVDdXN0b21lciB8fCAxOwogICAgICAgIG15ICVDdXN0b21lckRhdGFGcm9tOwogICAgICAgIGlmICggJEFydGljbGV7Q3VzdG9tZXJVc2VySUR9ICkgewogICAgICAgICAgICAlQ3VzdG9tZXJEYXRhRnJvbSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICBVc2VyID0+ICRBcnRpY2xle0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGZvciBteSAkRW1haWwgKCAkRW1haWxBZGRyZXNzT2JqZWN0LT5QYXJzZUFkZHJlc3NMaW5lKCBMaW5lID0+ICRBcnRpY2xlRnJvbSApICkgewoKICAgICAgICAgICAgbXkgJENvdW50QXV4ICAgICAgICAgPSAkQ291bnRGcm9tOwogICAgICAgICAgICBteSAkQ3VzdG9tZXJFcnJvciAgICA9ICcnOwogICAgICAgICAgICBteSAkQ3VzdG9tZXJFcnJvck1zZyA9ICdDdXN0b21lckdlbmVyaWNTZXJ2ZXJFcnJvck1zZyc7CiAgICAgICAgICAgIG15ICRDdXN0b21lckRpc2FibGVkID0gJyc7CiAgICAgICAgICAgIG15ICRDdXN0b21lclNlbGVjdGVkID0gJENvdW50RnJvbSBlcSAnMScgPyAnY2hlY2tlZCAnIDogJyc7CiAgICAgICAgICAgIG15ICRFbWFpbEFkZHJlc3MgICAgID0gJEVtYWlsQWRkcmVzc09iamVjdC0+R2V0QWRkcmVzcyggQWRkcmVzc09iamVjdCA9PiAkRW1haWwgKTsKICAgICAgICAgICAgaWYgKCAhJENoZWNrSXRlbU9iamVjdC0+Q2hlY2tFbWFpbCggQWRkcmVzc09iamVjdCA9PiAkRW1haWwgKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRDdXN0b21lckVycm9yTXNnID0gJENoZWNrSXRlbU9iamVjdC0+Q2hlY2tFcnJvclR5cGUoKQogICAgICAgICAgICAgICAgICAgIC4gJ1NlcnZlckVycm9yTXNnJzsKICAgICAgICAgICAgICAgICRDdXN0b21lckVycm9yID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBmb3IgZHVwbGljYXRlZCBlbnRyaWVzCiAgICAgICAgICAgIGlmICggZGVmaW5lZCAkQWRkcmVzc2VzTGlzdHskRW1haWx9ICYmICRDdXN0b21lckVycm9yIGVxICcnICkgewogICAgICAgICAgICAgICAgJEN1c3RvbWVyRXJyb3JNc2cgPSAnSXNEdXBsaWNhdGVkU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgJEN1c3RvbWVyRXJyb3IgICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRDdXN0b21lckVycm9yIG5lICcnICkgewogICAgICAgICAgICAgICAgJEN1c3RvbWVyRGlzYWJsZWQgPSAnZGlzYWJsZWQnOwogICAgICAgICAgICAgICAgJENvdW50QXV4ICAgICAgICAgPSAkQ291bnRGcm9tIC4gJ0Vycm9yJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJFBocmFzZSAgICAgID0gJEVtYWlsQWRkcmVzc09iamVjdC0+R2V0UmVhbE5hbWUoIEFkZHJlc3NPYmplY3QgPT4gJEVtYWlsICkgfHwgJyc7CiAgICAgICAgICAgIG15ICRDdXN0b21lcktleSA9ICcnOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBkZWZpbmVkICRDdXN0b21lckRhdGFGcm9te1VzZXJFbWFpbH0KICAgICAgICAgICAgICAgICYmICRDdXN0b21lckRhdGFGcm9te1VzZXJFbWFpbH0gZXEgJEVtYWlsQWRkcmVzcwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJLZXkgPSAkQXJ0aWNsZXtDdXN0b21lclVzZXJJRH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCRFbWFpbEFkZHJlc3MpIHsKICAgICAgICAgICAgICAgIG15ICVMaXN0ID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJTZWFyY2goCiAgICAgICAgICAgICAgICAgICAgUG9zdE1hc3RlclNlYXJjaCA9PiAkRW1haWxBZGRyZXNzLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJFVzZXJMb2dpbiAoIHNvcnQga2V5cyAlTGlzdCApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBTZXQgcmlnaHQgb25lIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY3VzdG9tZXIgdXNlciB3aXRoIHRoZSBzYW1lIGVtYWlsIGFkZHJlc3MuCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUGhyYXNlICYmICRMaXN0eyRVc2VyTG9naW59ID1+IC8kUGhyYXNlLyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyS2V5ID0gJFVzZXJMb2dpbjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRDdXN0b21lckVsZW1lbnQgPSAkRW1haWxBZGRyZXNzOwogICAgICAgICAgICBpZiAoJFBocmFzZSkgewogICAgICAgICAgICAgICAgJEN1c3RvbWVyRWxlbWVudCA9ICRQaHJhc2UgLiAiIDwkRW1haWxBZGRyZXNzPiI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJEN1c3RvbWVyU2VsZWN0ZWQgJiYgJEN1c3RvbWVyS2V5ICkgewogICAgICAgICAgICAgICAgJUN1c3RvbWVyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiAkQ3VzdG9tZXJLZXksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwdXNoIEBNdWx0aXBsZUN1c3RvbWVyLCB7CiAgICAgICAgICAgICAgICBDb3VudCAgICAgICAgICAgID0+ICRDb3VudEF1eCwKICAgICAgICAgICAgICAgIEN1c3RvbWVyRWxlbWVudCAgPT4gJEN1c3RvbWVyRWxlbWVudCwKICAgICAgICAgICAgICAgIEN1c3RvbWVyU2VsZWN0ZWQgPT4gJEN1c3RvbWVyU2VsZWN0ZWQsCiAgICAgICAgICAgICAgICBDdXN0b21lcktleSAgICAgID0+ICRDdXN0b21lcktleSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyRXJyb3IgICAgPT4gJEN1c3RvbWVyRXJyb3IsCiAgICAgICAgICAgICAgICBDdXN0b21lckVycm9yTXNnID0+ICRDdXN0b21lckVycm9yTXNnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJEaXNhYmxlZCA9PiAkQ3VzdG9tZXJEaXNhYmxlZCwKICAgICAgICAgICAgfTsKICAgICAgICAgICAgJEFkZHJlc3Nlc0xpc3R7JEVtYWlsQWRkcmVzc30gPSAxOwogICAgICAgICAgICAkQ291bnRGcm9tKys7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB1c2VyIHByZWZlcmVuY2VzCiAgICAgICAgbXkgJVVzZXJQcmVmZXJlbmNlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIG15ICVTcGxpdFRpY2tldFBhcmFtOwoKICAgICAgICAjIGluIGNhc2Ugb2Ygc3BsaXQgYSBUaWNrZXRJRCBhbmQgQXJ0aWNsZUlEIGFyZSBhbHdheXMgZ2l2ZW4sIHNlbmQgdGhlIFRpY2tldElEIHRvIGNhbGN1bGF0ZQogICAgICAgICMgQUNMcyBiYXNlZCBvbiBwYXJlbnQgaW5mb3JtYXRpb24KICAgICAgICBpZiAoICRTZWxmLT57VGlja2V0SUR9ICYmICRBcnRpY2xle0FydGljbGVJRH0gKSB7CiAgICAgICAgICAgICRTcGxpdFRpY2tldFBhcmFte1RpY2tldElEfSA9ICRTZWxmLT57VGlja2V0SUR9OwogICAgICAgIH0KCiAgICAgICAgIyBmaXggdG8gYnVnIyA4MDY4IEZpZWxkICYgRHluYW1pY0ZpZWxkIHByZXNlbGVjdGlvbiBvbiBUaWNrZXRTcGxpdAogICAgICAgICMgd2hlbiBzcGxpdHRpbmcgYSB0aWNrZXQgdGhlIHNlbGVjdGVkIGF0dHJpYnV0ZXMgbXVzdCByZW1haW4gaW4gdGhlIG5ldyB0aWNrZXQgc2NyZWVuCiAgICAgICAgIyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIGluIHRoZSBTcGxpdFRpY2tldFBhcmFtIGhhc2gKICAgICAgICBpZiAoICRTcGxpdFRpY2tldFBhcmFte1RpY2tldElEfSApIHsKCiAgICAgICAgICAgICMgZ2V0IGluZm9ybWF0aW9uIGZyb20gb3JpZ2luYWwgdGlja2V0IChTcGxpdFRpY2tldCkKICAgICAgICAgICAgbXkgJVNwbGl0VGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNwbGl0VGlja2V0UGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCBzaW1wbGUgSURzIHRvIHBhc3MgdGhlbSB0byB0aGUgbWFzawogICAgICAgICAgICBmb3IgbXkgJFNwbGl0UGFyYW0gKHF3KFR5cGVJRCBTZXJ2aWNlSUQgU0xBSUQgUHJpb3JpdHlJRCkpIHsKICAgICAgICAgICAgICAgICRTcGxpdFRpY2tldFBhcmFteyRTcGxpdFBhcmFtfSA9ICRTcGxpdFRpY2tldERhdGF7JFNwbGl0UGFyYW19OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNldCBTdGF0ZUlEIGFzIE5leHRTdGF0ZUlECiAgICAgICAgICAgICRTcGxpdFRpY2tldFBhcmFte05leHRTdGF0ZUlEfSA9ICRTcGxpdFRpY2tldERhdGF7U3RhdGVJRH07CgogICAgICAgICAgICAjIHNldCBPd25lciBhbmQgUmVzcG9uc2libGUKICAgICAgICAgICAgJFNwbGl0VGlja2V0UGFyYW17VXNlclNlbGVjdGVkfSAgICAgICAgICAgID0gJFNwbGl0VGlja2V0RGF0YXtPd25lcklEfTsKICAgICAgICAgICAgJFNwbGl0VGlja2V0UGFyYW17UmVzcG9uc2libGVVc2VyU2VsZWN0ZWR9ID0gJFNwbGl0VGlja2V0RGF0YXtSZXNwb25zaWJsZUlEfTsKCiAgICAgICAgICAgICMgc2V0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbmVlZGVkIGZvciBPd25lciBhbmQgUmVzcG9uc2libGUKICAgICAgICAgICAgaWYgKCAkU3BsaXRUaWNrZXREYXRhe1F1ZXVlSUR9ICkgewogICAgICAgICAgICAgICAgJFNwbGl0VGlja2V0UGFyYW17UXVldWVJRH0gPSAkU3BsaXRUaWNrZXREYXRhe1F1ZXVlSUR9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAkR2V0UGFyYW17T3duZXJBbGx9ICAgICAgID0gMTsKICAgICAgICAgICAgJEdldFBhcmFte1Jlc3BvbnNpYmxlQWxsfSA9IDE7CgogICAgICAgICAgICAjIHNldCB0aGUgc2VsZWN0ZWQgcXVldWUgaW4gZm9ybWF0IElEfHxOYW1lCiAgICAgICAgICAgICRTcGxpdFRpY2tldFBhcmFte0Zyb21TZWxlY3RlZH0gPSAkU3BsaXRUaWNrZXREYXRhe1F1ZXVlSUR9IC4gJ3x8JyAuICRTcGxpdFRpY2tldERhdGF7UXVldWV9OwoKICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJVNwbGl0VGlja2V0RGF0YSApIHsKICAgICAgICAgICAgICAgIGlmICggJEtleSA9fiAvRHluYW1pY0ZpZWxkXF8oLiopLyApIHsKICAgICAgICAgICAgICAgICAgICAkU3BsaXRUaWNrZXRQYXJhbXtEeW5hbWljRmllbGR9eyQxfSA9ICRTcGxpdFRpY2tldERhdGF7JEtleX07CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRTcGxpdFRpY2tldFBhcmFteyRLZXl9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGRlZmluZSBzZWxlY3RlZCB2YWx1ZXMgYXQgdGhlIHN0YXJ0CgogICAgICAgICMgaW4gY2FzZSBvZiB0aWNrZXQgc3BsaXQgc2V0ICRTZWxmLT57UXVldWVJRH0gYXMgdGhlIFF1ZXVlSUQgb2YgdGhlIG9yaWdpbmFsIHRpY2tldCwKICAgICAgICAjIGluIG9yZGVyIHRvIHNldCBjb3JyZWN0IEFDTHMgb24gcGFnZSBsb2FkIChpbml0aWFsKS4gU2VlIGJ1ZyA4Njg3LgogICAgICAgIGlmICgKICAgICAgICAgICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU3BsaXRUaWNrZXRQYXJhbSApCiAgICAgICAgICAgICYmICRTcGxpdFRpY2tldFBhcmFte1F1ZXVlSUR9CiAgICAgICAgICAgICYmICEkU2VsZi0+e1F1ZXVlSUR9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRHZXRQYXJhbXtRdWV1ZUlEfSA9ICRTcGxpdFRpY2tldFBhcmFte1F1ZXVlSUR9OwogICAgICAgICAgICAkR2V0UGFyYW17RGVzdH0gICAgPSAkU3BsaXRUaWNrZXRQYXJhbXtGcm9tU2VsZWN0ZWR9OwogICAgICAgIH0KCiAgICAgICAgIyBHZXQgcHJlZGVmaW5lZCBRdWV1ZUlEIChpZiBubyBxdWV1ZSBmcm9tIHNwbGl0IHRpY2tldCBpcyBzZXQpLgogICAgICAgIGVsc2lmICggISRTZWxmLT57UXVldWVJRH0gJiYgJEdldFBhcmFte0Rlc3R9ICkgewogICAgICAgICAgICBteSBAUXVldWVQYXJ0cyA9IHNwbGl0KCAvXHxcfC8sICRHZXRQYXJhbXtEZXN0fSApOwogICAgICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAkUXVldWVQYXJ0c1swXTsKICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkVXNlckRlZmF1bHRRdWV1ZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6VXNlckRlZmF1bHRRdWV1ZScpIHx8ICcnOwoKICAgICAgICAgICAgaWYgKCRVc2VyRGVmYXVsdFF1ZXVlKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVMb29rdXAoIFF1ZXVlID0+ICRVc2VyRGVmYXVsdFF1ZXVlICk7CiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17RGVzdH0gPSAiJEdldFBhcmFte1F1ZXVlSUR9fHwkVXNlckRlZmF1bHRRdWV1ZSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZG9uJ3QgdXNlIHRoZSBzcGxpdCB0aWNrZXQgc3RhdGUsIGp1c3QgdGhlIGRlZmF1bHQKICAgICAgICBpZiAoICRDb25maWctPntTdGF0ZURlZmF1bHR9ICkgewogICAgICAgICAgICBteSAlTmV4dFN0YXRlczsKCiAgICAgICAgICAgICVOZXh0U3RhdGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTdGF0ZUxpc3QoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBRdWV1ZUlEID0+ICRHZXRQYXJhbXtRdWV1ZUlEfSB8fCAxLAogICAgICAgICAgICAgICAgQWN0aW9uICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICBVc2VySUQgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRHZXRQYXJhbXtOZXh0U3RhdGVJRH0gPSB7IHJldmVyc2UgJU5leHRTdGF0ZXMgfS0+eyAkQ29uZmlnLT57U3RhdGVEZWZhdWx0fSB9IC8vICcnOwogICAgICAgIH0KCiAgICAgICAgIyBzcGxpdCB0aWNrZXQgaW5mbyBmb3IgdGhlIHJlc3QKICAgICAgICBpZiAoICRTcGxpdFRpY2tldFBhcmFte1VzZXJTZWxlY3RlZH0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtOZXdVc2VySUR9ID0gJFNwbGl0VGlja2V0RGF0YXtPd25lcklEfTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkU3BsaXRUaWNrZXRQYXJhbXtSZXNwb25zaWJsZVVzZXJTZWxlY3RlZH0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtOZXdSZXNwb25zaWJsZUlEfSA9ICRTcGxpdFRpY2tldERhdGF7UmVzcG9uc2libGVVc2VyU2VsZWN0ZWR9OwogICAgICAgIH0KICAgICAgICBmb3IgbXkgJFNwbGl0UGFyYW0gKHF3KFR5cGVJRCBTZXJ2aWNlSUQgU0xBSUQgUHJpb3JpdHlJRCkpIHsKICAgICAgICAgICAgJFNwbGl0VGlja2V0UGFyYW17JFNwbGl0UGFyYW19ID0gJFNwbGl0VGlja2V0RGF0YXskU3BsaXRQYXJhbX07CiAgICAgICAgfQoKICAgICAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIHZhbHVlcyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30gKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRDb25maWctPntOYW1lfTsKCiAgICAgICAgICAgICMgdG8gc3RvcmUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIGRhdGFiYXNlIChvciB1bmRlZmluZWQpCiAgICAgICAgICAgIG15ICRWYWx1ZTsKCiAgICAgICAgICAgICMgaW4gY2FzZSBvZiBzcGxpdCBhIFRpY2tldElEIGFuZCBBcnRpY2xlSUQgYXJlIGFsd2F5cyBnaXZlbiwgR2V0IHRoZSB2YWx1ZQogICAgICAgICAgICAjIGZyb20gREIgdGhpcyBjYXNlcwogICAgICAgICAgICBpZiAoICRTZWxmLT57VGlja2V0SUR9ICYmICRBcnRpY2xle0FydGljbGVJRH0gKSB7CgogICAgICAgICAgICAgICAgIyBzZWxlY3QgVGlja2V0SUQgb3IgQXJ0aWNsZUlEIHRvIGdldCB0aGUgdmFsdWUgZGVwZW5kaW5nIG9uIGR5bmFtaWMgZmllbGQgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgbXkgJE9iamVjdElEID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9IGVxICdUaWNrZXQnCiAgICAgICAgICAgICAgICAgICAgPyAkU2VsZi0+e1RpY2tldElEfQogICAgICAgICAgICAgICAgICAgIDogJEFydGljbGV7QXJ0aWNsZUlEfTsKCiAgICAgICAgICAgICAgICAjIGdldCB2YWx1ZSBzdG9yZWQgb24gdGhlIGRhdGFiYXNlIChzcGxpdCkKICAgICAgICAgICAgICAgICRWYWx1ZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZUdldCgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJE9iamVjdElELAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBvdGhlcndpc2UgKG9uIGEgbmV3IHRpY2tldCkuIENoZWNrIGlmIHRoZSB1c2VyIGhhcyBhIHVzZXIgc3BlY2lmaWMgZGVmYXVsdCB2YWx1ZSBmb3IKICAgICAgICAgICAgIyB0aGUgZHluYW1pYyBmaWVsZCwgb3RoZXJ3aXNlIHdpbGwgdXNlIER5bmFtaWMgRmllbGQgZGVmYXVsdCB2YWx1ZQogICAgICAgICAgICBlbHNpZiAoICEkRHluYW1pY0ZpZWxkQ29uZmlnLT57UmVhZG9ubHl9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGRlZmF1bHQgdmFsdWUgZnJvbSBkeW5hbWljIGZpZWxkIGNvbmZpZyAoaWYgYW55KQogICAgICAgICAgICAgICAgJFZhbHVlID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntEZWZhdWx0VmFsdWV9IHx8ICcnOwoKICAgICAgICAgICAgICAgICMgb3ZlcnJpZGUgdGhlIHZhbHVlIGZyb20gdXNlciBwcmVmZXJlbmNlcyBpZiBpcyBzZXQKICAgICAgICAgICAgICAgIGlmICggJFVzZXJQcmVmZXJlbmNlc3sgJ1VzZXJEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICkgewogICAgICAgICAgICAgICAgICAgICRWYWx1ZSA9ICRVc2VyUHJlZmVyZW5jZXN7ICdVc2VyRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJEdldFBhcmFte0R5bmFtaWNGaWVsZH17ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJFZhbHVlOwogICAgICAgIH0KCiAgICAgICAgbXkgJEF1dG9zZWxlY3QgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldEFDTDo6QXV0b3NlbGVjdCcpIHx8IHVuZGVmOwoKICAgICAgICAjIGdhdGhlciBmaWVsZHMgd2hpY2ggYXJlIHN1cHBvc2VkIHRvIGJlIGhpZGRlbiB3aGVuIGF1dG9zZWxlY3RlZAogICAgICAgIG15ICRIaWRlQXV0b3NlbGVjdGVkSlNPTjsKICAgICAgICBpZiAoJEF1dG9zZWxlY3QpIHsKICAgICAgICAgICAgbXkgQEhpZGVBdXRvc2VsZWN0ZWQgPSBncmVwIHsgIXJlZiggJEF1dG9zZWxlY3QtPnskX30gKSAmJiAkQXV0b3NlbGVjdC0+eyRffSA9PSAyIH0ga2V5cyAleyRBdXRvc2VsZWN0fTsKICAgICAgICAgICAgaWYgKCAkQXV0b3NlbGVjdC0+e0R5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBIaWRlQXV0b3NlbGVjdGVkLAogICAgICAgICAgICAgICAgICAgIG1hcCB7ICJEeW5hbWljRmllbGRfIiAuICRfIH0KICAgICAgICAgICAgICAgICAgICAoIGdyZXAgeyAkQXV0b3NlbGVjdC0+e0R5bmFtaWNGaWVsZH17JF99ID09IDIgfSBrZXlzICV7ICRBdXRvc2VsZWN0LT57RHluYW1pY0ZpZWxkfSB9ICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChASGlkZUF1dG9zZWxlY3RlZCkgewogICAgICAgICAgICAgICAgbXkgJEpTT05PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpOwogICAgICAgICAgICAgICAgJEhpZGVBdXRvc2VsZWN0ZWRKU09OID0gJEpTT05PYmplY3QtPkVuY29kZSgKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IFxASGlkZUF1dG9zZWxlY3RlZCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdHJhY2sgY2hhbmdpbmcgc3RhbmRhcmQgZmllbGRzCiAgICAgICAgbXkgJEFDTFByZXNlbGVjdGlvbjsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QUNMOjpBQ0xQcmVzZWxlY3Rpb24nKSApIHsKCiAgICAgICAgICAgICMgZ2V0IGNhY2hlZCBwcmVzZWxlY3Rpb24gcnVsZXMKICAgICAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24gPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RpY2tldEFDTCcsCiAgICAgICAgICAgICAgICBLZXkgID0+ICdQcmVzZWxlY3Rpb24nLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uICkgewogICAgICAgICAgICAgICAgJEFDTFByZXNlbGVjdGlvbiA9ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+U2V0QUNMUHJlc2VsZWN0aW9uQ2FjaGUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJUNvbnZlcmdlbmNlID0gKAogICAgICAgICAgICBTdGRGaWVsZHMgPT4gMCwKICAgICAgICAgICAgRmllbGRzICAgID0+IDAsCiAgICAgICAgKTsKICAgICAgICBteSAlQ2hhbmdlZEVsZW1lbnRzOwogICAgICAgIG15ICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0OwogICAgICAgIG15ICVDaGFuZ2VkU3RkRmllbGRzOwoKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUgLSBjYWxjdWxhdGUgUHJpb3JpdHkgdmlhIENJUCBtYXRyaXgKICAgICAgICBpZiAoICRDSVBDYWxjdWxhdGUgJiYgJEdldFBhcmFte0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9CiAgICAgICAgICAgICYmICggJEdldFBhcmFte0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01Dcml0aWNhbGl0eX0gfHwgJEdldFBhcmFte1NlcnZpY2VJRH0gKSApIHsKCiAgICAgICAgICAgICMgaWYgd2UgaGF2ZSBhbiBpbml0aWFsIGNyaXRpY2FsaXR5IGFuZCBpbXBhY3QsIHRyaWdnZXIgcHJpb3JpdHkgY2FsY3VsYXRpb24KICAgICAgICAgICAgJENoYW5nZWRFbGVtZW50c3tEeW5hbWljRmllbGRfSVRTTUltcGFjdH0gPSAxOwogICAgICAgIH0KIyBFTyBJVFNNQ29yZQoKICAgICAgICBteSAkTG9vcFByb3RlY3Rpb24gPSAxMDA7CiAgICAgICAgbXkgJVN0ZEZpZWxkVmFsdWVzOwogICAgICAgIG15ICVEeW5GaWVsZFN0YXRlcyA9ICgKICAgICAgICAgICAgVmlzaWJpbGl0eSA9PiB7fSwKICAgICAgICAgICAgRmllbGRzICAgICA9PiB7fSwKICAgICAgICApOwoKICAgICAgICBteSAkSW5pdGlhbFJ1biA9IDE7CgogICAgICAgIHVudGlsICggJENvbnZlcmdlbmNle0ZpZWxkc30gKSB7CgogICAgICAgICAgICAjIGRldGVybWluZSBzdGFuZGFyZCBmaWVsZCBpbnB1dAogICAgICAgICAgICB1bnRpbCAoICRDb252ZXJnZW5jZXtTdGRGaWVsZHN9ICkgewoKICAgICAgICAgICAgICAgIG15ICVOZXdDaGFuZ2VkRWxlbWVudHM7CgogICAgICAgICAgICAgICAgIyB3aGljaCBzdGFuZGFyZCBmaWVsZHMgdG8gY2hlY2sgLSBGaWVsZElEID0+IEdldFBhcmFtVmFsdWUgKG5lY2Vzc2FyeSBmb3IgRGVzdCkKICAgICAgICAgICAgICAgIG15ICVDaGVjayA9ICgKICAgICAgICAgICAgICAgICAgICBEZXN0ICAgICAgICAgICAgICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgICAgICAgICAgICAgIE5ld1VzZXJJRCAgICAgICAgICA9PiAnTmV3VXNlcklEJywKICAgICAgICAgICAgICAgICAgICBOZXdSZXNwb25zaWJsZUlEICAgPT4gJ05ld1Jlc3BvbnNpYmxlSUQnLAogICAgICAgICAgICAgICAgICAgIE5leHRTdGF0ZUlEICAgICAgICA9PiAnTmV4dFN0YXRlSUQnLAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgICAgICA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEICAgICAgICAgID0+ICdTZXJ2aWNlSUQnLAogICAgICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgICAgICA9PiAnU0xBSUQnLAogICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAnU3RhbmRhcmRUZW1wbGF0ZUlEJywKICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAkQUNMUHJlc2VsZWN0aW9uICYmICEkSW5pdGlhbFJ1biApIHsKICAgICAgICAgICAgICAgICAgICBGSUVMRDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEZpZWxkSUQgKCBzb3J0IGtleXMgJUNoZWNrICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uLT57RmllbGRzfXskRmllbGRJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkRmllbGRJRCBub3QgZGVmaW5lZCBpbiBUaWNrZXRBQ0wgcHJlc2VsZWN0aW9uIHJ1bGVzISIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEF1dG9zZWxlY3QgJiYgJEF1dG9zZWxlY3QtPnskRmllbGRJRH0gJiYgJENoYW5nZWRFbGVtZW50c3skRmllbGRJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkRWxlbWVudCAoIHNvcnQga2V5cyAlQ2hhbmdlZEVsZW1lbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24tPntSdWxlc317VGlja2V0fXskRWxlbWVudH17JEZpZWxkSUR9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJFNlbGYtPntJbnRlcm5hbERlcGVuZGFuY3l9eyRFbGVtZW50fXskRmllbGRJRH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBQ0xQcmVzZWxlY3Rpb24tPntGaWVsZHN9eyRFbGVtZW50fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRFbGVtZW50IG5vdCBkZWZpbmVkIGluIFRpY2tldEFDTCBwcmVzZWxlY3Rpb24gcnVsZXMhIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWxldGUgdW5hZmZlY3RlZCBmaWVsZHMKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRDaGVja3skRmllbGRJRH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZm9yIGVhY2ggc3RhbmRhcmQgZmllbGQgd2hpY2ggaGFzIHRvIGJlIGNoZWNrZWQsIHJ1biB0aGUgZGVmaW5lZCBtZXRob2QKICAgICAgICAgICAgICAgIE1FVEhPRDoKICAgICAgICAgICAgICAgIGZvciBteSAkRmllbGQgKCBAeyAkU2VsZi0+e0ZpZWxkTWV0aG9kc30gfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IE1FVEhPRCBpZiAhJENoZWNreyAkRmllbGQtPntGaWVsZElEfSB9OwoKICAgICAgICAgICAgICAgICAgICAjIHVzZSAkQ2hlY2t7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gZm9yIERlc3Q9PlF1ZXVlSUQKICAgICAgICAgICAgICAgICAgICAkU3RkRmllbGRWYWx1ZXN7ICRDaGVja3sgJEZpZWxkLT57RmllbGRJRH0gfSB9ID0gJEZpZWxkLT57TWV0aG9kfS0+KAogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBPd25lcklEICAgICAgICA9PiAkR2V0UGFyYW17TmV3VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNwbGl0VGlja2V0RGF0YXtDdXN0b21lclVzZXJJRH0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgID0+ICRHZXRQYXJhbXtRdWV1ZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZXMgICAgICAgPT4gJFN0ZEZpZWxkVmFsdWVze1NlcnZpY2VJRH0gfHwgdW5kZWYsICAgICAgIyBuZWVkZWQgZm9yIFNMQUlECiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBzcGVjaWFsIHN0dWZmIGZvciBRdWV1ZUlEL0Rlc3Q6IERlc3QgaXMgIlF1ZXVlSUR8fFF1ZXVlTmFtZSIgPT4gIlF1ZXVlTmFtZSI7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkRmllbGQtPntGaWVsZElEfSBlcSAnRGVzdCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFRPczoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRRdWV1ZUlEICggc29ydCBrZXlzICV7ICRTdGRGaWVsZFZhbHVlc3tRdWV1ZUlEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBUT3MgaWYgKCAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH17JFF1ZXVlSUR9IGVxICctJyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFN0ZEZpZWxkVmFsdWVze0Rlc3R9eyIkUXVldWVJRHx8JFN0ZEZpZWxkVmFsdWVze1F1ZXVlSUR9eyAkUXVldWVJRCB9In0gPSAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH17JFF1ZXVlSUR9OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGN1cnJlbnQgc2VsZWN0aW9uIG9mIFF1ZXVlSUQgKERlc3Qgd2lsbCBiZSBkb25lIHRvZ2V0aGVyIHdpdGggdGhlIG90aGVyIGZpZWxkcykKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17UXVldWVJRH0gJiYgISRTdGRGaWVsZFZhbHVlc3tEZXN0fXsgJEdldFBhcmFte0Rlc3R9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBhdXRvc2VsZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtRdWV1ZUlEfSAmJiAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+e0Rlc3R9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5BdXRvc2VsZWN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzID0+ICRTdGRGaWVsZFZhbHVlc3tRdWV1ZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgojIFJvdGhlciBPU1MgLyBJVFNNQ29yZSAtIGNhbGN1bGF0ZSBQcmlvcml0eSB2aWEgQ0lQIG1hdHJpeAogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEZpZWxkLT57RmllbGRJRH0gZXEgJ1ByaW9yaXR5SUQnICYmICRDSVBDYWxjdWxhdGUgJiYgJEdldFBhcmFte0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgdGhlIGNyaXRpY2FsaXR5IGVpdGhlciBmcm9tIHRoZSBtYW51YWxseSBzZXQgZHluYW1pYyBmaWVsZCwgb3IgdGhlIHNlcnZpY2UKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJENyaXRpY2FsaXR5ID0gJEdldFBhcmFte0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENyaXRpY2FsaXR5ICYmICRHZXRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJVNlcnZpY2UgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJEdldFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDcml0aWNhbGl0eSA9ICRTZXJ2aWNle0NyaXRpY2FsaXR5fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ3JpdGljYWxpdHkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZWNhbGN1bGF0ZSB0aGUgcHJpb3JpdHkgaWYgYW55IG9mIHRoZSBpbXBhY3RpbmcgZWxlbWVudHMgY2hhbmdlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ2hhbmdlZEVsZW1lbnRze0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSB8fCAkQ2hhbmdlZEVsZW1lbnRze1NlcnZpY2VJRH0gfHwgJENoYW5nZWRFbGVtZW50c3tEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+UHJpb3JpdHlBbGxvY2F0aW9uR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkQ3JpdGljYWxpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRTdGRGaWVsZFZhbHVlc3tQcmlvcml0eUlEfXsgJFByaW9yaXR5SUQgfSAmJiAkUHJpb3JpdHlJRCBuZSAkR2V0UGFyYW17UHJpb3JpdHlJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtQcmlvcml0eUlEfSAgICAgICAgICAgPSAkUHJpb3JpdHlJRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ld0NoYW5nZWRFbGVtZW50c3tQcmlvcml0eUlEfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDaGFuZ2VkU3RkRmllbGRze1ByaW9yaXR5SUR9ICAgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIHdlIGVuZm9yY2UgQ0lQQWxsb2NhdGlvbiBpbiBhbnkgY2FzZSBkZWxldGUgYWxsIG90aGVyIHByaW9yaXR5IG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFte1ByaW9yaXR5SUR9ICYmICRDSVBDYWxjdWxhdGUgPT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU3RkRmllbGRWYWx1ZXN7UHJpb3JpdHlJRH0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtQcmlvcml0eUlEfSA9PiAkU3RkRmllbGRWYWx1ZXN7UHJpb3JpdHlJRH17ICRHZXRQYXJhbXtQcmlvcml0eUlEfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB3aGV0aGVyIGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWUgaXMgc3RpbGwgdmFsaWQgZm9yIHRoZSBmaWVsZAogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9CiAgICAgICAgICAgICAgICAgICAgICAgICYmICEkU3RkRmllbGRWYWx1ZXN7ICRGaWVsZC0+e0ZpZWxkSUR9IH17ICRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSB9CiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbm90IGVtcHR5IHRoZSBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gICAgICAgICAgID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICROZXdDaGFuZ2VkRWxlbWVudHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlZFN0ZEZpZWxkc3sgJEZpZWxkLT57RmllbGRJRH0gfSAgID0gMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgYXV0b3NlbGVjdAogICAgICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSAmJiAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+eyAkRmllbGQtPntGaWVsZElEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPkF1dG9zZWxlY3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiAkU3RkRmllbGRWYWx1ZXN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ld0NoYW5nZWRFbGVtZW50c3sgJEZpZWxkLT57RmllbGRJRH0gfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlZFN0ZEZpZWxkc3sgJEZpZWxkLT57RmllbGRJRH0gfSAgID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICElTmV3Q2hhbmdlZEVsZW1lbnRzICkgewogICAgICAgICAgICAgICAgICAgICRDb252ZXJnZW5jZXtTdGRGaWVsZHN9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHMgPSAlTmV3Q2hhbmdlZEVsZW1lbnRzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0ID0gKAogICAgICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0LAogICAgICAgICAgICAgICAgICAgICVOZXdDaGFuZ2VkRWxlbWVudHMsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICggJExvb3BQcm90ZWN0aW9uLS0gPCAxICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiUmFuIGludG8gdW5yZXNvbHZhYmxlIGxvb3AhIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHMgICAgICAgID0gJUNoYW5nZWRFbGVtZW50c0RGU3RhcnQ7CiAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0ID0gKCk7CgogICAgICAgICAgICAjIGNoZWNrIGR5bmFtaWMgZmllbGRzCiAgICAgICAgICAgIG15ICVDdXJGaWVsZFN0YXRlczsKICAgICAgICAgICAgaWYgKCAlQ2hhbmdlZEVsZW1lbnRzIHx8ICRJbml0aWFsUnVuICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHZhbHVlcyBhbmQgdmlzaWJpbGl0eSBvZiBkeW5hbWljIGZpZWxkcwogICAgICAgICAgICAgICAgJUN1ckZpZWxkU3RhdGVzID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5HZXRGaWVsZFN0YXRlcygKICAgICAgICAgICAgICAgICAgICBUaWNrZXRPYmplY3QgICAgICAgICAgICAgID0+ICRUaWNrZXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyAgICAgICAgICAgICA9PiAkU2VsZi0+e0R5bmFtaWNGaWVsZH0sCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9PiAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkRWxlbWVudHMgICAgICAgICAgID0+IFwlQ2hhbmdlZEVsZW1lbnRzLCAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgdG8gcmVkdWNlIEFDTCBldmFsdWF0aW9uCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICAgICAgICAgICAgICA9PiAkU3BsaXRUaWNrZXREYXRhe0N1c3RvbWVyVXNlcklEfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBPd25lcklEID0+ICRHZXRQYXJhbXtOZXdVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgQXV0b3NlbGVjdCAgICAgID0+ICRBdXRvc2VsZWN0LAogICAgICAgICAgICAgICAgICAgIEFDTFByZXNlbGVjdGlvbiA9PiAkQUNMUHJlc2VsZWN0aW9uLAogICAgICAgICAgICAgICAgICAgIExvb3BQcm90ZWN0aW9uICA9PiBcJExvb3BQcm90ZWN0aW9uLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNvbWJpbmUgRmllbGRTdGF0ZXMKICAgICAgICAgICAgICAgICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9ID0gewogICAgICAgICAgICAgICAgICAgICV7ICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze0ZpZWxkc30gfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAkRHluRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJER5bkZpZWxkU3RhdGVze1Zpc2liaWxpdHl9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze1Zpc2liaWxpdHl9IH0sCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICMgc3RvcmUgbmV3IHZhbHVlcwogICAgICAgICAgICAgICAgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gfSwKICAgICAgICAgICAgICAgICAgICAleyAkQ3VyRmllbGRTdGF0ZXN7TmV3VmFsdWVzfSB9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBkeW5hbWljIGZpZWxkcyBjaGFuZ2VkLCBjaGVjayBzdGFuZGFyZCBmaWVsZHMgYWdhaW4KICAgICAgICAgICAgaWYgKCAlQ3VyRmllbGRTdGF0ZXMgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRDdXJGaWVsZFN0YXRlc3tOZXdWYWx1ZXN9ICkgKSB7CiAgICAgICAgICAgICAgICAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSA9IDA7CiAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzID0gbWFwIHsgJF8gPT4gMSB9IGtleXMgJXsgJEN1ckZpZWxkU3RhdGVze05ld1ZhbHVlc30gfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRDb252ZXJnZW5jZXtGaWVsZHN9ID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJEluaXRpYWxSdW4gPSAwOwogICAgICAgIH0KCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZFBvc3NpYmxlVmFsdWVzID0gbWFwIHsKICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJF8gPT4gZGVmaW5lZCAkRHluRmllbGRTdGF0ZXN7RmllbGRzfXskX30KICAgICAgICAgICAgICAgID8gJER5bkZpZWxkU3RhdGVze0ZpZWxkc317JF99e1Bvc3NpYmxlVmFsdWVzfQogICAgICAgICAgICAgICAgOiB1bmRlZgogICAgICAgIH0gKCBrZXlzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKTsKCiAgICAgICAgIyBydW4gY29tcG9zZSBtb2R1bGVzCiAgICAgICAgaWYgKAogICAgICAgICAgICByZWYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlQ29tcG9zZU1vZHVsZScpIGVxCiAgICAgICAgICAgICdIQVNIJwogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17RGVzdH0gJiYgJEdldFBhcmFte0Rlc3R9ID1+IC9eKFxkezEsMTAwfSlcfFx8Lis/JC8gKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAkMTsKICAgICAgICAgICAgICAgIG15ICVBZGRyZXNzID0gJFF1ZXVlT2JqZWN0LT5HZXRTeXN0ZW1BZGRyZXNzKCBRdWV1ZUlEID0+ICRHZXRQYXJhbXtRdWV1ZUlEfSApOwogICAgICAgICAgICAgICAgJEdldFBhcmFte0Zyb219ID0gJEFkZHJlc3N7RW1haWx9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAlSm9icyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QXJ0aWNsZUNvbXBvc2VNb2R1bGUnKSB9OwogICAgICAgICAgICBmb3IgbXkgJEpvYiAoIHNvcnQga2V5cyAlSm9icyApIHsKCiAgICAgICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgICAgICBpZiAoICEkTWFpbk9iamVjdC0+UmVxdWlyZSggJEpvYnN7JEpvYn0tPntNb2R1bGV9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJEpvYnN7JEpvYn0tPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgRGVidWcgPT4gJERlYnVnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICAgICAgICAgIFBBUkFNRVRFUjoKICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1ldGVyICggJE9iamVjdC0+T3B0aW9uKCAlR2V0UGFyYW0sIENvbmZpZyA9PiAkSm9ic3skSm9ifSApICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJEpvYnN7JEpvYn0tPntQYXJhbVR5cGV9ICYmICRKb2JzeyRKb2J9LT57UGFyYW1UeXBlfSBuZSAnU2luZ2xlJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQHsgJEdldFBhcmFteyRQYXJhbWV0ZXJ9IH0gPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW1ldGVyICk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgUEFSQU1FVEVSOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcnVuIG1vZHVsZQogICAgICAgICAgICAgICAgbXkgJE5ld1BhcmFtcyA9ICRPYmplY3QtPlJ1biggJUdldFBhcmFtLCBDb25maWcgPT4gJEpvYnN7JEpvYn0gKTsKCiAgICAgICAgICAgICAgICBpZiAoJE5ld1BhcmFtcykgewogICAgICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1ldGVyICggJE9iamVjdC0+T3B0aW9uKCAlR2V0UGFyYW0sIENvbmZpZyA9PiAkSm9ic3skSm9ifSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtZXRlcn0gPSAkTmV3UGFyYW1zOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIG1ldGEgZGF0YQogICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGFuZCBmb3JtYXQgZGVmYXVsdCBzdWJqZWN0IGFuZCBib2R5CiAgICAgICAgbXkgJFN1YmplY3QgPSAkQXJ0aWNsZXtTdWJqZWN0fTsKICAgICAgICBpZiAoICEkU3ViamVjdCApIHsKICAgICAgICAgICAgJFN1YmplY3QgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAkQ29uZmlnLT57U3ViamVjdH0gfHwgJycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIG15ICRCb2R5ID0gJEFydGljbGV7Qm9keX0gfHwgJyc7CiAgICAgICAgaWYgKCAhJEJvZHkgKSB7CiAgICAgICAgICAgICRCb2R5ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJENvbmZpZy0+e0JvZHl9IHx8ICcnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBtYWtlIHN1cmUgYm9keSBpcyByaWNoIHRleHQgKGlmIGJvZHkgaXMgYmFzZWQgb24gY29uZmlnKQogICAgICAgIGlmICggISRHZXRQYXJhbXtBcnRpY2xlSUR9ICYmICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICAkQm9keSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMlJpY2hUZXh0KAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRCb2R5LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tFbWFpbE5ldygKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBOZXh0U3RhdGUgICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17TmV4dFN0YXRlSUR9ID8gJFN0ZEZpZWxkVmFsdWVze05leHRTdGF0ZUlEfXsgJEdldFBhcmFte05leHRTdGF0ZUlEfSB9IDogJycsCiAgICAgICAgICAgIEZyb21TZWxlY3RlZCAgICAgICAgICAgID0+ICRHZXRQYXJhbXtEZXN0fSwKICAgICAgICAgICAgVXNlclNlbGVjdGVkICAgICAgICAgICAgPT4gJEdldFBhcmFte05ld1VzZXJJRH0sCiAgICAgICAgICAgIFJlc3BvbnNpYmxlVXNlclNlbGVjdGVkID0+ICRHZXRQYXJhbXtOZXdSZXNwb25zaWJsZUlEfSwKICAgICAgICAgICAgTmV4dFN0YXRlcyAgICAgICAgICAgICAgPT4gJFN0ZEZpZWxkVmFsdWVze05leHRTdGF0ZUlEfSwKICAgICAgICAgICAgUHJpb3JpdGllcyAgICAgICAgICAgICAgPT4gJFN0ZEZpZWxkVmFsdWVze1ByaW9yaXR5SUR9LAogICAgICAgICAgICBUeXBlcyAgICAgICAgICAgICAgICAgICA9PiAkU3RkRmllbGRWYWx1ZXN7VHlwZUlEfSwKICAgICAgICAgICAgU2VydmljZXMgICAgICAgICAgICAgICAgPT4gJFN0ZEZpZWxkVmFsdWVze1NlcnZpY2VJRH0sCiAgICAgICAgICAgIFNMQXMgICAgICAgICAgICAgICAgICAgID0+ICRTdGRGaWVsZFZhbHVlc3tTTEFJRH0sCiAgICAgICAgICAgIFN0YW5kYXJkVGVtcGxhdGVzICAgICAgID0+ICRTdGRGaWVsZFZhbHVlc3tTdGFuZGFyZFRlbXBsYXRlSUR9LAogICAgICAgICAgICBVc2VycyAgICAgICAgICAgICAgICAgICA9PiAkU3RkRmllbGRWYWx1ZXN7TmV3VXNlcklEfSwKICAgICAgICAgICAgUmVzcG9uc2libGVVc2VycyAgICAgICAgPT4gJFN0ZEZpZWxkVmFsdWVze05ld1Jlc3BvbnNpYmxlSUR9LAogICAgICAgICAgICBGcm9tTGlzdCAgICAgICAgICAgICAgICA9PiAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH0sCiAgICAgICAgICAgIFRvICAgICAgICAgICAgICAgICAgICAgID0+ICRBcnRpY2xle0Zyb219IC8vICcnLAogICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICA9PiAkU3ViamVjdCwKICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgPT4gJEJvZHksCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgICAgICAgICAgID0+ICRTcGxpdFRpY2tldERhdGF7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICBDdXN0b21lcklEICAgICAgICAgICAgICA9PiAkU3BsaXRUaWNrZXREYXRhe0N1c3RvbWVySUR9LAogICAgICAgICAgICBDdXN0b21lckRhdGEgICAgICAgICAgICA9PiBcJUN1c3RvbWVyRGF0YSwKICAgICAgICAgICAgQXR0YWNobWVudHMgICAgICAgICAgICAgPT4gXEBBdHRhY2htZW50cywKICAgICAgICAgICAgTGlua1RpY2tldElEICAgICAgICAgICAgPT4gJEdldFBhcmFte0xpbmtUaWNrZXRJRH0gfHwgJycsCiAgICAgICAgICAgIEhpZGVBdXRvc2VsZWN0ZWQgICAgICAgID0+ICRIaWRlQXV0b3NlbGVjdGVkSlNPTiwKICAgICAgICAgICAgVmlzaWJpbGl0eSAgICAgICAgICAgICAgPT4gJER5bkZpZWxkU3RhdGVze1Zpc2liaWxpdHl9LAogICAgICAgICAgICBERlBvc3NpYmxlVmFsdWVzICAgICAgICA9PiBcJUR5bmFtaWNGaWVsZFBvc3NpYmxlVmFsdWVzLAogICAgICAgICAgICBUaW1lVW5pdHMgICAgICAgICAgICAgICA9PiAkU2VsZi0+X0dldFRpbWVVbml0cygKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVBQ0xDb21wYXRHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVTcGxpdFRpY2tldFBhcmFtLAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICksCiAgICAgICAgICAgIFRpbWVVbml0c1JlcXVpcmVkID0+ICgKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmVlZEFjY291bnRlZFRpbWUnKQogICAgICAgICAgICAgICAgPyAnVmFsaWRhdGVfUmVxdWlyZWQnCiAgICAgICAgICAgICAgICA6ICcnCiAgICAgICAgICAgICksCiAgICAgICAgICAgIE11bHRpcGxlQ3VzdG9tZXIgICAgPT4gXEBNdWx0aXBsZUN1c3RvbWVyLAogICAgICAgICAgICBNdWx0aXBsZUN1c3RvbWVyQ2MgID0+IFxATXVsdGlwbGVDdXN0b21lckNjLAogICAgICAgICAgICBNdWx0aXBsZUN1c3RvbWVyQmNjID0+IFxATXVsdGlwbGVDdXN0b21lckJjYywKICAgICAgICApOwoKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIGRlbGl2ZXIgc2lnbmF0dXJlCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2lnbmF0dXJlJyApIHsKICAgICAgICBteSAkQ3VzdG9tZXJVc2VyID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlbGVjdGVkQ3VzdG9tZXJVc2VyJyApIHx8ICcnOwogICAgICAgIG15ICRRdWV1ZUlEICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUXVldWVJRCcgKTsKICAgICAgICBpZiAoICEkUXVldWVJRCApIHsKICAgICAgICAgICAgbXkgJERlc3QgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRGVzdCcgKSB8fCAnJzsKICAgICAgICAgICAgKCRRdWV1ZUlEKSA9IHNwbGl0KCAvXHxcfC8sICREZXN0ICk7CiAgICAgICAgfQoKICAgICAgICAjIHN0YXJ0IHdpdGggZW1wdHkgc2lnbmF0dXJlIChubyBxdWV1ZSBzZWxlY3RlZCkgLSBpZiB3ZSBoYXZlIGEgcXVldWUsIGdldCB0aGUgc2lnLgogICAgICAgIG15ICRTaWduYXR1cmUgPSAnJzsKICAgICAgICBpZiAoJFF1ZXVlSUQpIHsKICAgICAgICAgICAgJFNpZ25hdHVyZSA9ICRTZWxmLT5fR2V0U2lnbmF0dXJlKAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkQ3VzdG9tZXJVc2VyLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBteSAkTWltZVR5cGUgPSAndGV4dC9wbGFpbic7CiAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgJE1pbWVUeXBlICA9ICd0ZXh0L2h0bWwnOwogICAgICAgICAgICAkU2lnbmF0dXJlID0gJExheW91dE9iamVjdC0+UmljaFRleHREb2N1bWVudENvbXBsZXRlKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRTaWduYXR1cmUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJE1pbWVUeXBlIC4gJzsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkU2lnbmF0dXJlLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgY3JlYXRlIG5ldyB0aWNrZXQgYW5kIGFydGljbGUKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdG9yZU5ldycgKSB7CgogICAgICAgIG15ICVFcnJvcjsKICAgICAgICBteSAkTmV4dFN0YXRlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTmV4dFN0YXRlSUQnICkgfHwgJyc7CiAgICAgICAgbXkgJVN0YXRlRGF0YTsKICAgICAgICBpZiAoJE5leHRTdGF0ZUlEKSB7CiAgICAgICAgICAgICVTdGF0ZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKS0+U3RhdGVHZXQoCiAgICAgICAgICAgICAgICBJRCA9PiAkTmV4dFN0YXRlSUQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIG15ICROZXh0U3RhdGUgICAgICAgID0gJFN0YXRlRGF0YXtOYW1lfTsKICAgICAgICBteSAkTmV3UmVzcG9uc2libGVJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdOZXdSZXNwb25zaWJsZUlEJyApIHx8ICcnOwogICAgICAgIG15ICROZXdVc2VySUQgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ05ld1VzZXJJRCcgKSAgICAgICAgfHwgJyc7CiAgICAgICAgbXkgJERlc3QgICAgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRGVzdCcgKSAgICAgICAgICAgICB8fCAnJzsKCiAgICAgICAgIyBzZWUgaWYgb25seSBhIG5hbWUgaGFzIGJlZW4gcGFzc2VkCiAgICAgICAgaWYgKCAkRGVzdCAmJiAkRGVzdCAhfiBteyBcQSAoXGQrKT8gXHwgXHwgLisgXHogfXhtcyApIHsKCiAgICAgICAgICAgICMgc2VlIGlmIHdlIGNhbiBnZXQgYW4gSUQgZm9yIHRoaXMgcXVldWUgbmFtZQogICAgICAgICAgICBteSAkRGVzdElEID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxvb2t1cCgKICAgICAgICAgICAgICAgIFF1ZXVlID0+ICREZXN0LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCREZXN0SUQpIHsKICAgICAgICAgICAgICAgICREZXN0ID0gJERlc3RJRCAuICd8fCcgLiAkRGVzdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICREZXN0ID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICgkTmV3UXVldWVJRCkgPSBzcGxpdCggL1x8XHwvLCAkRGVzdCApOwogICAgICAgIGlmICggISROZXdRdWV1ZUlEICkgewogICAgICAgICAgICAkR2V0UGFyYW17T3duZXJBbGx9ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15ICVBZGRyZXNzID0gJFF1ZXVlT2JqZWN0LT5HZXRTeXN0ZW1BZGRyZXNzKCBRdWV1ZUlEID0+ICROZXdRdWV1ZUlEICk7CiAgICAgICAgICAgICRHZXRQYXJhbXtGcm9tfSA9ICRBZGRyZXNze0VtYWlsfTsKICAgICAgICB9CgogICAgICAgIG15ICRDdXN0b21lclVzZXIgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ3VzdG9tZXJVc2VyJyApCiAgICAgICAgICAgIHx8ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdQcmVTZWxlY3RlZEN1c3RvbWVyVXNlcicgKQogICAgICAgICAgICB8fCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VsZWN0ZWRDdXN0b21lclVzZXInICkKICAgICAgICAgICAgfHwgJyc7CiAgICAgICAgbXkgJEN1c3RvbWVySUQgICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVySUQnICkgfHwgJyc7CiAgICAgICAgbXkgJFNlbGVjdGVkQ3VzdG9tZXJVc2VyID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlbGVjdGVkQ3VzdG9tZXJVc2VyJyApCiAgICAgICAgICAgIHx8ICcnOwogICAgICAgIG15ICRFeHBhbmRDdXN0b21lck5hbWUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRXhwYW5kQ3VzdG9tZXJOYW1lJyApCiAgICAgICAgICAgIHx8IDA7CiAgICAgICAgbXkgJUZyb21FeHRlcm5hbEN1c3RvbWVyOwogICAgICAgICRGcm9tRXh0ZXJuYWxDdXN0b21lcntDdXN0b21lcn0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUHJlU2VsZWN0ZWRDdXN0b21lclVzZXInICkKICAgICAgICAgICAgfHwgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyVXNlcicgKQogICAgICAgICAgICB8fCAnJzsKICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gICAgICAgICAgICA9ICROZXdRdWV1ZUlEOwogICAgICAgICRHZXRQYXJhbXtFeHBhbmRDdXN0b21lck5hbWV9ID0gJEV4cGFuZEN1c3RvbWVyTmFtZTsKCiAgICAgICAgIyBnZXQgc2VuZGVyIHF1ZXVlIGZyb20KICAgICAgICBteSAkU2lnbmF0dXJlID0gJyc7CiAgICAgICAgaWYgKCROZXdRdWV1ZUlEKSB7CiAgICAgICAgICAgICRTaWduYXR1cmUgPSAkU2VsZi0+X0dldFNpZ25hdHVyZSgKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgID0+ICROZXdRdWV1ZUlELAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlcgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3duZXJBbGxSZWZyZXNoJyApICkgewogICAgICAgICAgICAkR2V0UGFyYW17T3duZXJBbGx9ID0gMTsKICAgICAgICAgICAgJEV4cGFuZEN1c3RvbWVyTmFtZSA9IDM7CiAgICAgICAgfQogICAgICAgIGlmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Jlc3BvbnNpYmxlQWxsUmVmcmVzaCcgKSApIHsKICAgICAgICAgICAgJEdldFBhcmFte1Jlc3BvbnNpYmxlQWxsfSA9IDE7CiAgICAgICAgICAgICRFeHBhbmRDdXN0b21lck5hbWUgPSAzOwogICAgICAgIH0KICAgICAgICBpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDbGVhclRvJyApICkgewogICAgICAgICAgICAkR2V0UGFyYW17VG99ID0gJyc7CiAgICAgICAgICAgICRFeHBhbmRDdXN0b21lck5hbWUgPSAzOwogICAgICAgIH0KICAgICAgICBmb3IgbXkgJENvdW50ICggMSAuLiAyICkgewogICAgICAgICAgICBteSAkSXRlbSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICJFeHBhbmRDdXN0b21lck5hbWUkQ291bnQiICkgfHwgMDsKICAgICAgICAgICAgaWYgKCAkQ291bnQgPT0gMSAmJiAkSXRlbSApIHsKICAgICAgICAgICAgICAgICRFeHBhbmRDdXN0b21lck5hbWUgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJENvdW50ID09IDIgJiYgJEl0ZW0gKSB7CiAgICAgICAgICAgICAgICAkRXhwYW5kQ3VzdG9tZXJOYW1lID0gMjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiMgUm90aGVyIE9TUyAvIElUU01Db3JlIC0gY2FsY3VsYXRlIFByaW9yaXR5IHZpYSBDSVAgbWF0cml4CiAgICAgICAgaWYgKCAkQ0lQQ2FsY3VsYXRlICYmICRDSVBDYWxjdWxhdGUgPT0gMiAmJiAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH0gKSB7CgogICAgICAgICAgICAjIGdldCB0aGUgY3JpdGljYWxpdHkgZWl0aGVyIGZyb20gdGhlIG1hbnVhbGx5IHNldCBkeW5hbWljIGZpZWxkLCBvciB0aGUgc2VydmljZQogICAgICAgICAgICBteSAkQ3JpdGljYWxpdHkgPSAkR2V0UGFyYW17RHluYW1pY0ZpZWxkX0lUU01Dcml0aWNhbGl0eX07CgogICAgICAgICAgICBpZiAoICEkQ3JpdGljYWxpdHkgJiYgJEdldFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICAgICBteSAlU2VydmljZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkR2V0UGFyYW17U2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJENyaXRpY2FsaXR5ID0gJFNlcnZpY2V7Q3JpdGljYWxpdHl9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRDcml0aWNhbGl0eSApIHsKICAgICAgICAgICAgICAgIG15ICRQcmlvcml0eUlEID0gJENJUEFsbG9jYXRlT2JqZWN0LT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJENyaXRpY2FsaXR5LAogICAgICAgICAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAkUHJpb3JpdHlJRCBuZSAkR2V0UGFyYW17UHJpb3JpdHlJRH0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuOyB3ZSBqdXN0IGVuZm9yY2UgdGhlIHByaW8gYW5kIHdyaXRlIGFuIGVycm9yIHRvIHRoZSBsb2cgZmlsZSBoZXJlCiAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJHb3QgUHJpb3JpdHlJRCAnJEdldFBhcmFte1ByaW9yaXR5SUR9JywgYnV0IENJUCBlbmZvcmNlcyAnJFByaW9yaXR5SUQnIC0gb3ZlcnJpZGluZyB0aGUgZnJvbnRlbmQgdmFsdWUuIiwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UHJpb3JpdHlJRH0gPSAkUHJpb3JpdHlJRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KIyBFTyBJVFNNQ29yZQoKICAgICAgICAjIHNraXAgdmFsaWRhdGlvbiBvZiBoaWRkZW4gZmllbGRzCiAgICAgICAgbXkgJVZpc2liaWxpdHk7CgogICAgICAgICMgdHJhbnNmb3JtIGR5bmFtaWMgZmllbGQgZGF0YSBpbnRvIERGTmFtZSA9PiBERk5hbWUgcGFpcgogICAgICAgIG15ICVEeW5hbWljRmllbGRBY2wgPSBtYXAgeyAkXyA9PiAkXyB9IGtleXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKjsKCiAgICAgICAgIyBjYWxsIHRpY2tldCBBQ0xzIGZvciBEeW5hbWljRmllbGRzIHRvIGNoZWNrIGZpZWxkIHZpc2liaWxpdHkKICAgICAgICBteSAkQUNMUmVzdWx0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRDdXN0b21lclVzZXIgfHwgJycsCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICAgPT4gJ0Zvcm0nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlICA9PiAnLScsCiAgICAgICAgICAgIERhdGEgICAgICAgICAgID0+IFwlRHluYW1pY0ZpZWxkQWNsLAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoJEFDTFJlc3VsdCkgewogICAgICAgICAgICAlVmlzaWJpbGl0eSA9IG1hcCB7ICdEeW5hbWljRmllbGRfJyAuICRfID0+IDAgfSBrZXlzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSo7CiAgICAgICAgICAgIG15ICVBY2xEYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpOwogICAgICAgICAgICBmb3IgbXkgJEZpZWxkICggc29ydCBrZXlzICVBY2xEYXRhICkgewogICAgICAgICAgICAgICAgJFZpc2liaWxpdHl7ICdEeW5hbWljRmllbGRfJyAuICRGaWVsZCB9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJVZpc2liaWxpdHkgPSBtYXAgeyAnRHluYW1pY0ZpZWxkXycgLiAkXyA9PiAxIH0ga2V5cyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqOwogICAgICAgIH0KCiAgICAgICAgIyByZW1lbWJlciBkeW5hbWljIGZpZWxkIHZhbGlkYXRpb24gcmVzdWx0cyBpZiBlcnJvbmVvdXMKICAgICAgICBteSAlRHluYW1pY0ZpZWxkVmFsaWRhdGlvblJlc3VsdDsKICAgICAgICBteSAlRHluYW1pY0ZpZWxkUG9zc2libGVWYWx1ZXM7CgogICAgICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIHZhbHVlcyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICBteSAkUG9zc2libGVWYWx1ZXNGaWx0ZXI7CgogICAgICAgICAgICBteSAkSXNBQ0xSZWR1Y2libGUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+SGFzQmVoYXZpb3IoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNBQ0xSZWR1Y2libGUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRJc0FDTFJlZHVjaWJsZSkgewoKICAgICAgICAgICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgICAgICAgICBteSAkUG9zc2libGVWYWx1ZXMgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+UG9zc2libGVWYWx1ZXNHZXQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgZmllbGQgaGFzIFBvc3NpYmxlVmFsdWVzIHByb3BlcnR5IGluIGl0cyBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCRQb3NzaWJsZVZhbHVlcykgKSB7CgogICAgICAgICAgICAgICAgICAgICMgY29udmVydCBwb3NzaWJsZSB2YWx1ZXMga2V5ID0+IHZhbHVlIHRvIGtleSA9PiBrZXkgZm9yIEFDTHMgdXNpbmcgYSBIYXNoIHNsaWNlCiAgICAgICAgICAgICAgICAgICAgbXkgJUFjbERhdGEgPSAleyRQb3NzaWJsZVZhbHVlc307CiAgICAgICAgICAgICAgICAgICAgQEFjbERhdGF7IGtleXMgJUFjbERhdGEgfSA9IGtleXMgJUFjbERhdGE7CgogICAgICAgICAgICAgICAgICAgICMgc2V0IHBvc3NpYmxlIHZhbHVlcyBmaWx0ZXIgZnJvbSBBQ0xzCiAgICAgICAgICAgICAgICAgICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRDdXN0b21lclVzZXIgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuVHlwZSAgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblN1YlR5cGUgID0+ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgICAgPT4gXCVBY2xEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJEFDTCkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAlRmlsdGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IEZpbGVyIGtleSA9PiBrZXkgYmFjayB0byBrZXkgPT4gdmFsdWUgdXNpbmcgbWFwCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBvc3NpYmxlVmFsdWVzRmlsdGVyfSA9IG1hcCB7ICRfID0+ICRQb3NzaWJsZVZhbHVlcy0+eyRffSB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzICVGaWx0ZXI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkRHluYW1pY0ZpZWxkUG9zc2libGVWYWx1ZXN7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJFBvc3NpYmxlVmFsdWVzRmlsdGVyOwoKICAgICAgICAgICAgIyBkbyBub3QgdmFsaWRhdGUgb24gaW52aXNpYmxlIGZpZWxkcwogICAgICAgICAgICBpZiAoICEkRXhwYW5kQ3VzdG9tZXJOYW1lICYmICRWaXNpYmlsaXR5eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSApIHsKCiAgICAgICAgICAgICAgICBteSAkVmFsaWRhdGlvblJlc3VsdCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZVZhbGlkYXRlKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXNGaWx0ZXIgPT4gJFBvc3NpYmxlVmFsdWVzRmlsdGVyLAogICAgICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICAgID0+ICRQYXJhbU9iamVjdCwKCiAgICAgICAgICAgICAgICAgICAgIyBNYW5kYXRvcnkgaXMgYWRkZWQgdG8gdGhlIGNvbmZpZ3MgYnkgJFNlbGYtPm5ldwogICAgICAgICAgICAgICAgICAgIE1hbmRhdG9yeSA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TWFuZGF0b3J5fSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJFZhbGlkYXRpb25SZXN1bHQpICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQ291bGQgbm90IHBlcmZvcm0gdmFsaWRhdGlvbiBvbiBmaWVsZCAlcyEnLCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9ICksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcHJvcGFnYXRlIHZhbGlkYXRpb24gZXJyb3IgdG8gdGhlIEVycm9yIHZhcmlhYmxlIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSBmcm9udGVuZAogICAgICAgICAgICAgICAgaWYgKCAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICAgICAgICAgICAgICAgICAgICAgICAgPSAnIFNlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkVmFsaWRhdGlvblJlc3VsdHsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkVmFsaWRhdGlvblJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIG1ldGEgZGF0YQogICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICk7CgogICAgICAgICMgZXhwYW5kIGN1c3RvbWVyIG5hbWUKICAgICAgICBteSAlQ3VzdG9tZXJVc2VyRGF0YTsKICAgICAgICBpZiAoICRFeHBhbmRDdXN0b21lck5hbWUgPT0gMSApIHsKCiAgICAgICAgICAgICMgc2VhcmNoIGN1c3RvbWVyCiAgICAgICAgICAgIG15ICVDdXN0b21lclVzZXJMaXN0OwogICAgICAgICAgICAlQ3VzdG9tZXJVc2VyTGlzdCA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyU2VhcmNoKAogICAgICAgICAgICAgICAgU2VhcmNoID0+ICRHZXRQYXJhbXtUb30sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIGlmIGp1c3Qgb25lIGN1c3RvbWVyIHVzZXIgZXhpc3RzCiAgICAgICAgICAgICMgaWYganVzdCBvbmUsIGZpbGx1cCBDdXN0b21lclVzZXJJRCBhbmQgQ3VzdG9tZXJJRAogICAgICAgICAgICAkUGFyYW17Q3VzdG9tZXJVc2VyTGlzdENvdW50fSA9IDA7CiAgICAgICAgICAgIGZvciBteSAkS2V5Q3VzdG9tZXJVc2VyICggc29ydCBrZXlzICVDdXN0b21lclVzZXJMaXN0ICkgewogICAgICAgICAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlckxpc3RDb3VudH0rKzsKICAgICAgICAgICAgICAgICRQYXJhbXtDdXN0b21lclVzZXJMaXN0TGFzdH0gICAgID0gJEN1c3RvbWVyVXNlckxpc3R7JEtleUN1c3RvbWVyVXNlcn07CiAgICAgICAgICAgICAgICAkUGFyYW17Q3VzdG9tZXJVc2VyTGlzdExhc3RVc2VyfSA9ICRLZXlDdXN0b21lclVzZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkUGFyYW17Q3VzdG9tZXJVc2VyTGlzdENvdW50fSA9PSAxICkgewogICAgICAgICAgICAgICAgJEdldFBhcmFte1RvfSAgICAgICAgICAgICAgPSAkUGFyYW17Q3VzdG9tZXJVc2VyTGlzdExhc3R9OwogICAgICAgICAgICAgICAgJEVycm9ye0V4cGFuZEN1c3RvbWVyTmFtZX0gPSAxOwogICAgICAgICAgICAgICAgbXkgJUN1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gJFBhcmFte0N1c3RvbWVyVXNlckxpc3RMYXN0VXNlcn0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAkQ3VzdG9tZXJVc2VyRGF0YXtVc2VyQ3VzdG9tZXJJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVySUQgPSAkQ3VzdG9tZXJVc2VyRGF0YXtVc2VyQ3VzdG9tZXJJRH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRDdXN0b21lclVzZXJEYXRhe1VzZXJMb2dpbn0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlciA9ICRDdXN0b21lclVzZXJEYXRhe1VzZXJMb2dpbn07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWYgbW9yZSB0aGUgb25lIGN1c3RvbWVyIHVzZXIgZXhpc3RzLCBzaG93IGxpc3QKICAgICAgICAgICAgIyBhbmQgY2xlYW4gQ3VzdG9tZXJVc2VySUQgYW5kIEN1c3RvbWVySUQKICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBkb24ndCBjaGVjayBlbWFpbCBzeW50YXggb24gbXVsdGkgY3VzdG9tZXIgc2VsZWN0CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+IDAKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJJRCA9ICcnOwoKICAgICAgICAgICAgICAgICMgY2xlYXIgdG8gaWYgdGhlcmUgaXMgbm8gY3VzdG9tZXIgZm91bmQKICAgICAgICAgICAgICAgIGlmICggISVDdXN0b21lclVzZXJMaXN0ICkgewogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtUb30gPSAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRFcnJvcntFeHBhbmRDdXN0b21lck5hbWV9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZnJvbSBhbmQgY3VzdG9tZXIgaWQgaWYgY3VzdG9tZXIgdXNlciBpcyBnaXZlbgogICAgICAgICMgVGhpcyBpcyB1c2VkIGJ5IEtlcm5lbDo6TW9kdWxlczo6QWRtaW5DdXN0b21lclVzZXIKICAgICAgICBlbHNpZiAoICRFeHBhbmRDdXN0b21lck5hbWUgPT0gMiApIHsKICAgICAgICAgICAgJUN1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgVXNlciA9PiAkQ3VzdG9tZXJVc2VyLAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAlQ3VzdG9tZXJVc2VyTGlzdCA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyU2VhcmNoKAogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGZvciBteSAkS2V5Q3VzdG9tZXJVc2VyICggc29ydCBrZXlzICVDdXN0b21lclVzZXJMaXN0ICkgewogICAgICAgICAgICAgICAgJEdldFBhcmFte1RvfSA9ICRDdXN0b21lclVzZXJMaXN0eyRLZXlDdXN0b21lclVzZXJ9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggJEN1c3RvbWVyVXNlckRhdGF7VXNlckN1c3RvbWVySUR9ICkgewogICAgICAgICAgICAgICAgJEN1c3RvbWVySUQgPSAkQ3VzdG9tZXJVc2VyRGF0YXtVc2VyQ3VzdG9tZXJJRH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkQ3VzdG9tZXJVc2VyRGF0YXtVc2VyTG9naW59ICkgewogICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlciA9ICRDdXN0b21lclVzZXJEYXRhe1VzZXJMb2dpbn07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkRnJvbUV4dGVybmFsQ3VzdG9tZXJ7Q3VzdG9tZXJ9ICkgewogICAgICAgICAgICAgICAgbXkgJUV4dGVybmFsQ3VzdG9tZXJVc2VyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiAkRnJvbUV4dGVybmFsQ3VzdG9tZXJ7Q3VzdG9tZXJ9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRGcm9tRXh0ZXJuYWxDdXN0b21lcntFbWFpbH0gPSAkRXh0ZXJuYWxDdXN0b21lclVzZXJEYXRhe1VzZXJNYWlsU3RyaW5nfTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkRXJyb3J7RXhwYW5kQ3VzdG9tZXJOYW1lfSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIGlmIGEgbmV3IGRlc3RpbmF0aW9uIHF1ZXVlIGlzIHNlbGVjdGVkCiAgICAgICAgZWxzaWYgKCAkRXhwYW5kQ3VzdG9tZXJOYW1lID09IDMgKSB7CiAgICAgICAgICAgICRFcnJvcntOb1N1Ym1pdH0gPSAxOwogICAgICAgICAgICAkQ3VzdG9tZXJVc2VyID0gJFNlbGVjdGVkQ3VzdG9tZXJVc2VyOwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGN1c3RvbWVyIGluZm8KICAgICAgICBteSAlQ3VzdG9tZXJEYXRhOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lckluZm9Db21wb3NlJykgKSB7CiAgICAgICAgICAgIGlmICggJEN1c3RvbWVyVXNlciB8fCAkU2VsZWN0ZWRDdXN0b21lclVzZXIgKSB7CiAgICAgICAgICAgICAgICAlQ3VzdG9tZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgICAgICBVc2VyID0+ICRDdXN0b21lclVzZXIgfHwgJFNlbGVjdGVkQ3VzdG9tZXJVc2VyLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoJEN1c3RvbWVySUQpIHsKICAgICAgICAgICAgICAgICVDdXN0b21lckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJEN1c3RvbWVySUQsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGVtYWlsIGFkZHJlc3MKICAgICAgICBQQVJBTUVURVI6CiAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KFRvIENjIEJjYykpIHsKICAgICAgICAgICAgbmV4dCBQQVJBTUVURVIgaWYgISRHZXRQYXJhbXskUGFyYW1ldGVyfTsKICAgICAgICAgICAgZm9yIG15ICRFbWFpbCAoICRFbWFpbEFkZHJlc3NPYmplY3QtPlBhcnNlQWRkcmVzc0xpbmUoIExpbmUgPT4gJEdldFBhcmFteyRQYXJhbWV0ZXJ9ICkgKSB7CiAgICAgICAgICAgICAgICBpZiAoICEkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0VtYWlsKCBBZGRyZXNzT2JqZWN0ID0+ICRFbWFpbCApICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnsgJFBhcmFtZXRlciAuICdFcnJvclR5cGUnIH0gPSAkUGFyYW1ldGVyIC4gJENoZWNrSXRlbU9iamVjdC0+Q2hlY2tFcnJvclR5cGUoKSAuICdTZXJ2ZXJFcnJvck1zZyc7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yeyAkUGFyYW1ldGVyIC4gJ0ludmFsaWQnIH0gICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJElzTG9jYWwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcycpLT5TeXN0ZW1BZGRyZXNzSXNMb2NhbEFkZHJlc3MoCiAgICAgICAgICAgICAgICAgICAgQWRkcmVzc09iamVjdCA9PiAkRW1haWwsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCRJc0xvY2FsKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yeyAkUGFyYW1ldGVyIC4gJ0lzTG9jYWxBZGRyZXNzJyB9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBpZiBpdCBpcyBub3QgYSBzdWJhY3Rpb24gYWJvdXQgYXR0YWNobWVudHMsIGNoZWNrIGZvciBzZXJ2ZXIgZXJyb3JzCiAgICAgICAgaWYgKCAhJEV4cGFuZEN1c3RvbWVyTmFtZSApIHsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte1RvfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnVG9JbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtTdWJqZWN0fSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnU3ViamVjdEludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhJE5ld1F1ZXVlSUQgKSB7CiAgICAgICAgICAgICAgICAkRXJyb3J7J0Rlc3RpbmF0aW9uSW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17Qm9keX0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3J7J0JvZHlJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGlmIGRhdGUgaXMgdmFsaWQKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgISRFeHBhbmRDdXN0b21lck5hbWUKICAgICAgICAgICAgICAgICYmICRTdGF0ZURhdGF7VHlwZU5hbWV9CiAgICAgICAgICAgICAgICAmJiAkU3RhdGVEYXRhe1R5cGVOYW1lfSA9fiAvXnBlbmRpbmcvaQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBjb252ZXJ0IHBlbmRpbmcgZGF0ZSB0byBhIGRhdGV0aW1lIG9iamVjdAogICAgICAgICAgICAgICAgbXkgJFBlbmRpbmdEYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBTZWNvbmQgPT4gMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGdldCBjdXJyZW50IHN5c3RlbSBlcG9jaAogICAgICAgICAgICAgICAgbXkgJEN1clN5c3RlbURhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CgogICAgICAgICAgICAgICAgaWYgKCAhJFBlbmRpbmdEYXRlVGltZU9iamVjdCB8fCAkUGVuZGluZ0RhdGVUaW1lT2JqZWN0IDwgJEN1clN5c3RlbURhdGVUaW1lT2JqZWN0ICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnsnRGF0ZUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlJykKICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXtTTEFJRH0KICAgICAgICAgICAgICAgICYmICEkR2V0UGFyYW17U2VydmljZUlEfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRXJyb3J7J1NlcnZpY2VJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIG1hbmRhdG9yeSBzZXJ2aWNlCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlJykKICAgICAgICAgICAgICAgICYmICRDb25maWctPntTZXJ2aWNlTWFuZGF0b3J5fQogICAgICAgICAgICAgICAgJiYgISRHZXRQYXJhbXtTZXJ2aWNlSUR9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnU2VydmljZUludmFsaWQnfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIG1hbmRhdG9yeSBzbGEKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKQogICAgICAgICAgICAgICAgJiYgJENvbmZpZy0+e1NMQU1hbmRhdG9yeX0KICAgICAgICAgICAgICAgICYmICEkR2V0UGFyYW17U0xBSUR9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnU0xBSW52YWxpZCd9ID0gJyBTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlR5cGUnKSAmJiAhJEdldFBhcmFte1R5cGVJRH0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3J7J1R5cGVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWNjb3VudFRpbWUnKQogICAgICAgICAgICAgICAgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScpCiAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17VGltZVVuaXRzfSBlcSAnJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRXJyb3J7J1RpbWVVbml0c0ludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcnVuIGNvbXBvc2UgbW9kdWxlcwogICAgICAgIG15ICVBcnRpY2xlUGFyYW07CiAgICAgICAgaWYgKCByZWYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlQ29tcG9zZU1vZHVsZScpIGVxICdIQVNIJyApIHsKICAgICAgICAgICAgbXkgJUpvYnMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFydGljbGVDb21wb3NlTW9kdWxlJykgfTsKICAgICAgICAgICAgZm9yIG15ICRKb2IgKCBzb3J0IGtleXMgJUpvYnMgKSB7CgogICAgICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICAgICAgaWYgKCAhJE1haW5PYmplY3QtPlJlcXVpcmUoICRKb2JzeyRKb2J9LT57TW9kdWxlfSApICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRKb2JzeyRKb2J9LT57TW9kdWxlfS0+bmV3KAogICAgICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgICAgIERlYnVnID0+ICREZWJ1ZywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgICAgICAgICBteSAkTXVsdGlwbGU7CiAgICAgICAgICAgICAgICBQQVJBTUVURVI6CiAgICAgICAgICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAoICRPYmplY3QtPk9wdGlvbiggJUdldFBhcmFtLCBDb25maWcgPT4gJEpvYnN7JEpvYn0gKSApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkSm9ic3skSm9ifS0+e1BhcmFtVHlwZX0gJiYgJEpvYnN7JEpvYn0tPntQYXJhbVR5cGV9IG5lICdTaW5nbGUnICkgewogICAgICAgICAgICAgICAgICAgICAgICBAeyAkR2V0UGFyYW17JFBhcmFtZXRlcn0gfSA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICRQYXJhbWV0ZXIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJE11bHRpcGxlID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBQQVJBTUVURVI7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtZXRlcn0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1ldGVyICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgICAgICAkT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFN0b3JlTmV3ID0+IDEsCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnICAgPT4gJEpvYnN7JEpvYn0KICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBnZXQgb3B0aW9ucyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHNlbGVjdGlvbgogICAgICAgICAgICAgICAgIyBhbmQgYWRkIHRoZW0gYmFjayB0byB0aGUgc2VsZWN0aW9uIHNvIHRoYXQgdGhlIHN1Ym1pdAogICAgICAgICAgICAgICAgIyB3aWxsIGNvbnRhaW4gb3B0aW9ucyB0aGF0IHdlcmUgaGlkZGVuIGZyb20gdGhlIGFnZW50CiAgICAgICAgICAgICAgICBteSAkS2V5ID0gJE9iamVjdC0+T3B0aW9uKCAlR2V0UGFyYW0sIENvbmZpZyA9PiAkSm9ic3skSm9ifSApOwoKICAgICAgICAgICAgICAgIGlmICggJE9iamVjdC0+Y2FuKCdHZXRPcHRpb25zVG9SZW1vdmVBSkFYJykgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgQFJlbW92ZWRPcHRpb25zID0gJE9iamVjdC0+R2V0T3B0aW9uc1RvUmVtb3ZlQUpBWCglR2V0UGFyYW0pOwogICAgICAgICAgICAgICAgICAgIGlmIChAUmVtb3ZlZE9wdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRNdWx0aXBsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRSZW1vdmVkT3B0aW9uIChAUmVtb3ZlZE9wdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRHZXRQYXJhbXskS2V5fSB9LCAkUmVtb3ZlZE9wdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXskS2V5fSA9IHNoaWZ0IEBSZW1vdmVkT3B0aW9uczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHRpY2tldCBwYXJhbXMKICAgICAgICAgICAgICAgICVBcnRpY2xlUGFyYW0gPSAoCiAgICAgICAgICAgICAgICAgICAgJUFydGljbGVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAkT2JqZWN0LT5BcnRpY2xlT3B0aW9uKCAlR2V0UGFyYW0sICVBcnRpY2xlUGFyYW0sIENvbmZpZyA9PiAkSm9ic3skSm9ifSApLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGdldCBlcnJvcnMKICAgICAgICAgICAgICAgICVFcnJvciA9ICgKICAgICAgICAgICAgICAgICAgICAlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgJE9iamVjdC0+RXJyb3IoICVHZXRQYXJhbSwgQ29uZmlnID0+ICRKb2JzeyRKb2J9ICksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJUVycm9yKSB7CgogICAgICAgICAgICBpZiAoICRFcnJvcntUb0lzTG9jYWxBZGRyZXNzfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RvSXNMb2NhbEFkZHJlc3NTZXJ2ZXJFcnJvck1zZycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkRXJyb3J7Q2NJc0xvY2FsQWRkcmVzc30gKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdDY0lzTG9jYWxBZGRyZXNzU2VydmVyRXJyb3JNc2cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJEVycm9ye0JjY0lzTG9jYWxBZGRyZXNzfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0JjY0lzTG9jYWxBZGRyZXNzU2VydmVyRXJyb3JNc2cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IGFuZCBmb3JtYXQgZGVmYXVsdCBzdWJqZWN0IGFuZCBib2R5CiAgICAgICAgICAgIG15ICRTdWJqZWN0ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJENvbmZpZy0+e1N1YmplY3R9IHx8ICcnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJEJvZHkgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAkQ29uZmlnLT57Qm9keX0gfHwgJycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG1ha2Ugc3VyZSBib2R5IGlzIHJpY2ggdGV4dAogICAgICAgICAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICAgICAgJEJvZHkgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJSaWNoVGV4dCgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEJvZHksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNldCBCb2R5IGFuZCBTdWJqZWN0IHBhcmFtZXRlcnMgZm9yIE91dHB1dAogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17U3ViamVjdH0gKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17U3ViamVjdH0gPSAkU3ViamVjdDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte0JvZHl9ICkgewogICAgICAgICAgICAgICAgJEdldFBhcmFte0JvZHl9ID0gJEJvZHk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IHNlcnZpY2VzCiAgICAgICAgICAgIG15ICRTZXJ2aWNlcyA9ICRTZWxmLT5fR2V0U2VydmljZXMoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkQ3VzdG9tZXJVc2VyIHx8ICcnLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICAgPT4gJE5ld1F1ZXVlSUQgICB8fCAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyByZXNldCBwcmV2aW91cyBTZXJ2aWNlSUQgdG8gcmVzZXQgU0xBLUxpc3QgaWYgbm8gc2VydmljZSBpcyBzZWxlY3RlZAogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17U2VydmljZUlEfSB8fCAhJFNlcnZpY2VzLT57ICRHZXRQYXJhbXtTZXJ2aWNlSUR9IH0gKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17U2VydmljZUlEfSA9ICcnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkU0xBcyA9ICRTZWxmLT5fR2V0U0xBcygKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVBQ0xDb21wYXRHZXRQYXJhbSwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgID0+ICROZXdRdWV1ZUlEIHx8IDEsCiAgICAgICAgICAgICAgICBTZXJ2aWNlcyA9PiAkU2VydmljZXMsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGhlYWRlciBhbmQgbmF2aWdhdGlvbiBiYXIKICAgICAgICAgICAgbXkgJE91dHB1dCA9IGpvaW4gJycsCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKSwKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tFbWFpbE5ldygKICAgICAgICAgICAgICAgIFF1ZXVlSUQgPT4gJFNlbGYtPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFVzZXJzICAgPT4gJFNlbGYtPl9HZXRVc2VycygKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJUFDTENvbXBhdEdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFF1ZXVlSUQgID0+ICROZXdRdWV1ZUlELAogICAgICAgICAgICAgICAgICAgIEFsbFVzZXJzID0+ICRHZXRQYXJhbXtPd25lckFsbH0KICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBVc2VyU2VsZWN0ZWQgICAgID0+ICROZXdVc2VySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZVVzZXJzID0+ICRTZWxmLT5fR2V0UmVzcG9uc2libGVzKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgUXVldWVJRCAgPT4gJE5ld1F1ZXVlSUQsCiAgICAgICAgICAgICAgICAgICAgQWxsVXNlcnMgPT4gJEdldFBhcmFte1Jlc3BvbnNpYmxlQWxsfQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlVXNlclNlbGVjdGVkID0+ICROZXdSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgTmV4dFN0YXRlcyAgICAgICAgICAgICAgPT4gJFNlbGYtPl9HZXROZXh0U3RhdGVzKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlciB8fCAnJywKICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgICA9PiAkTmV3UXVldWVJRCAgIHx8IDEsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgTmV4dFN0YXRlICA9PiAkTmV4dFN0YXRlLAogICAgICAgICAgICAgICAgUHJpb3JpdGllcyA9PiAkU2VsZi0+X0dldFByaW9yaXRpZXMoCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICVBQ0xDb21wYXRHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkQ3VzdG9tZXJVc2VyIHx8ICcnLAogICAgICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgID0+ICROZXdRdWV1ZUlEICAgfHwgMSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBUeXBlcyA9PiAkU2VsZi0+X0dldFR5cGVzKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlciB8fCAnJywKICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgICA9PiAkTmV3UXVldWVJRCAgIHx8IDEsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgU2VydmljZXMgICAgICAgICAgPT4gJFNlcnZpY2VzLAogICAgICAgICAgICAgICAgU0xBcyAgICAgICAgICAgICAgPT4gJFNMQXMsCiAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlcyA9PiAkU2VsZi0+X0dldFN0YW5kYXJkVGVtcGxhdGVzKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgUXVldWVJRCA9PiAkTmV3UXVldWVJRCB8fCAnJywKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBDdXN0b21lcklEICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRDdXN0b21lcklEICksCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgICAgICA9PiAkQ3VzdG9tZXJVc2VyLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJEYXRhICAgICAgPT4gXCVDdXN0b21lckRhdGEsCiAgICAgICAgICAgICAgICBUaW1lVW5pdHNSZXF1aXJlZCA9PiAoCiAgICAgICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScpCiAgICAgICAgICAgICAgICAgICAgPyAnVmFsaWRhdGVfUmVxdWlyZWQnCiAgICAgICAgICAgICAgICAgICAgOiAnJwogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIEZyb21MaXN0ICAgICA9PiAkU2VsZi0+X0dldFRvcygpLAogICAgICAgICAgICAgICAgRnJvbVNlbGVjdGVkID0+ICREZXN0LAogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgID0+ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJEdldFBhcmFte1N1YmplY3R9ICksCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgPT4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkR2V0UGFyYW17Qm9keX0gKSwKICAgICAgICAgICAgICAgIEVycm9ycyAgICAgICA9PiBcJUVycm9yLAogICAgICAgICAgICAgICAgQXR0YWNobWVudHMgID0+IFxAQXR0YWNobWVudHMsCiAgICAgICAgICAgICAgICBTaWduYXR1cmUgICAgPT4gJFNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIE11bHRpcGxlQ3VzdG9tZXIgICAgID0+IFxATXVsdGlwbGVDdXN0b21lciwKICAgICAgICAgICAgICAgIE11bHRpcGxlQ3VzdG9tZXJDYyAgID0+IFxATXVsdGlwbGVDdXN0b21lckNjLAogICAgICAgICAgICAgICAgTXVsdGlwbGVDdXN0b21lckJjYyAgPT4gXEBNdWx0aXBsZUN1c3RvbWVyQmNjLAogICAgICAgICAgICAgICAgRnJvbUV4dGVybmFsQ3VzdG9tZXIgPT4gXCVGcm9tRXh0ZXJuYWxDdXN0b21lciwKICAgICAgICAgICAgICAgIFZpc2liaWxpdHkgICAgICAgICAgID0+IFwlVmlzaWJpbGl0eSwKICAgICAgICAgICAgICAgIERGUG9zc2libGVWYWx1ZXMgICAgID0+IFwlRHluYW1pY0ZpZWxkUG9zc2libGVWYWx1ZXMsCiAgICAgICAgICAgICAgICBERkVycm9ycyAgICAgICAgICAgICA9PiBcJUR5bmFtaWNGaWVsZFZhbGlkYXRpb25SZXN1bHQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAjIGNyZWF0ZSBuZXcgdGlja2V0LCBkbyBkYiBpbnNlcnQKICAgICAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAkR2V0UGFyYW17U3ViamVjdH0sCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkTmV3UXVldWVJRCwKICAgICAgICAgICAgU3ViamVjdCAgICAgID0+ICRHZXRQYXJhbXtTdWJqZWN0fSwKICAgICAgICAgICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJEdldFBhcmFte1R5cGVJRH0sCiAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkR2V0UGFyYW17U2VydmljZUlEfSwKICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRHZXRQYXJhbXtTTEFJRH0sCiAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAkTmV4dFN0YXRlSUQsCiAgICAgICAgICAgIFByaW9yaXR5SUQgICA9PiAkR2V0UGFyYW17UHJpb3JpdHlJRH0sCiAgICAgICAgICAgIE93bmVySUQgICAgICA9PiAxLAogICAgICAgICAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVySUQsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkU2VsZWN0ZWRDdXN0b21lclVzZXIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgdGlja2V0IGR5bmFtaWMgZmllbGRzCiAgICAgICAgIyBjeWNsZSB0aHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggdmFsdWVzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9IG5lICdUaWNrZXQnOwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJFZpc2liaWxpdHl7IkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0ifTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e1JlYWRvbmx5fTsKCiAgICAgICAgICAgICMgc2V0IHRoZSB2YWx1ZQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBwcmUgbG9hZGVkIGF0dGFjaG1lbnQKICAgICAgICBteSBAQXR0YWNobWVudERhdGEgPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREdldEFsbEZpbGVzRGF0YSgKICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzdWJtaXQgYXR0YWNobWVudAogICAgICAgIG15ICVVcGxvYWRTdHVmZiA9ICRQYXJhbU9iamVjdC0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICBQYXJhbSA9PiAnRmlsZVVwbG9hZCcsCiAgICAgICAgKTsKICAgICAgICBpZiAoJVVwbG9hZFN0dWZmKSB7CiAgICAgICAgICAgIHB1c2ggQEF0dGFjaG1lbnREYXRhLCBcJVVwbG9hZFN0dWZmOwogICAgICAgIH0KCiAgICAgICAgIyBwcmVwYXJlIHN1YmplY3QKICAgICAgICBteSAkVG4gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXROdW1iZXJMb29rdXAoIFRpY2tldElEID0+ICRUaWNrZXRJRCApOwogICAgICAgICRHZXRQYXJhbXtTdWJqZWN0fSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN1YmplY3RCdWlsZCgKICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICRUbiwKICAgICAgICAgICAgU3ViamVjdCAgICAgID0+ICRHZXRQYXJhbXtTdWJqZWN0fSB8fCAnJywKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdOZXcnLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaWYgbmV3IG93bmVyIGlzIGdpdmVuICh0aGVuIHNlbmQgbm8gYWdlbnQgbm90aWZ5KQogICAgICAgIG15ICROb0FnZW50Tm90aWZ5ID0gMDsKICAgICAgICBpZiAoJE5ld1VzZXJJRCkgewogICAgICAgICAgICAkTm9BZ2VudE5vdGlmeSA9IDE7CiAgICAgICAgfQoKICAgICAgICBteSAkTWltZVR5cGUgPSAndGV4dC9wbGFpbic7CiAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgJE1pbWVUeXBlID0gJ3RleHQvaHRtbCc7CiAgICAgICAgICAgICRHZXRQYXJhbXtCb2R5fSAuPSAnPGJyLz48YnIvPicgLiAkU2lnbmF0dXJlOwoKICAgICAgICAgICAgIyByZW1vdmUgdW51c2VkIGlubGluZSBpbWFnZXMKICAgICAgICAgICAgbXkgQE5ld0F0dGFjaG1lbnREYXRhOwogICAgICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50RGF0YSkgewogICAgICAgICAgICAgICAgbXkgJENvbnRlbnRJRCA9ICRBdHRhY2htZW50LT57Q29udGVudElEfTsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkQ29udGVudElECiAgICAgICAgICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRUeXBlfSA9fiAvaW1hZ2UvaSApCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0Rpc3Bvc2l0aW9ufSBlcSAnaW5saW5lJyApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRDb250ZW50SURIVE1MUXVvdGUgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICAgICAgICAgICAgICBUZXh0ID0+ICRDb250ZW50SUQsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyB3b3JrYXJvdW5kIGZvciBsaW5rIGVuY29kZSBvZiByaWNoIHRleHQgZWRpdG9yLCBzZWUgYnVnIzUwNTMKICAgICAgICAgICAgICAgICAgICBteSAkQ29udGVudElETGlua0VuY29kZSA9ICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJENvbnRlbnRJRCk7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte0JvZHl9ID1+IHMvKENvbnRlbnRJRD0pJENvbnRlbnRJRExpbmtFbmNvZGUvJDEkQ29udGVudElEL2c7CgogICAgICAgICAgICAgICAgICAgICMgaWdub3JlIGF0dGFjaG1lbnQgaWYgbm90IGxpbmtlZCBpbiBib2R5CiAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICRHZXRQYXJhbXtCb2R5fSAhfiAvKFxRJENvbnRlbnRJREhUTUxRdW90ZVxFfFxRJENvbnRlbnRJRFxFKS9pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgaW5saW5lIGltYWdlcyBhbmQgbm9ybWFsIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICBwdXNoIEBOZXdBdHRhY2htZW50RGF0YSwgXCV7JEF0dGFjaG1lbnR9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIEBBdHRhY2htZW50RGF0YSA9IEBOZXdBdHRhY2htZW50RGF0YTsKCiAgICAgICAgICAgICMgdmVyaWZ5IGh0bWwgZG9jdW1lbnQKICAgICAgICAgICAgJEdldFBhcmFte0JvZHl9ID0gJExheW91dE9iamVjdC0+UmljaFRleHREb2N1bWVudENvbXBsZXRlKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRHZXRQYXJhbXtCb2R5fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtCb2R5fSAuPSAiXG5cbiIgLiAkU2lnbmF0dXJlOwogICAgICAgIH0KCiAgICAgICAgIyBsb29rdXAgc2VuZGVyCiAgICAgICAgbXkgJFRlbXBsYXRlR2VuZXJhdG9yID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRlbXBsYXRlR2VuZXJhdG9yJyk7CiAgICAgICAgbXkgJFNlbmRlciAgICAgICAgICAgID0gJFRlbXBsYXRlR2VuZXJhdG9yLT5TZW5kZXIoCiAgICAgICAgICAgIFF1ZXVlSUQgPT4gJE5ld1F1ZXVlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIG15ICRBcnRpY2xlT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckNoYW5uZWwoIENoYW5uZWxOYW1lID0+ICdFbWFpbCcgKTsKCiAgICAgICAgIyBzZW5kIGVtYWlsCiAgICAgICAgbXkgJEFydGljbGVJRCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZVNlbmQoCiAgICAgICAgICAgIE5vQWdlbnROb3RpZnkgICAgICAgID0+ICROb0FnZW50Tm90aWZ5LAogICAgICAgICAgICBBdHRhY2htZW50ICAgICAgICAgICA9PiBcQEF0dGFjaG1lbnREYXRhLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICRDb25maWctPntTZW5kZXJUeXBlfSwKICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gJENvbmZpZy0+e0lzVmlzaWJsZUZvckN1c3RvbWVyfSwKICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJFNlbmRlciwKICAgICAgICAgICAgVG8gICAgICAgICAgICAgICAgICAgPT4gJEdldFBhcmFte1RvfSwKICAgICAgICAgICAgQ2MgICAgICAgICAgICAgICAgICAgPT4gJEdldFBhcmFte0NjfSwKICAgICAgICAgICAgQmNjICAgICAgICAgICAgICAgICAgPT4gJEdldFBhcmFte0JjY30sCiAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICRHZXRQYXJhbXtTdWJqZWN0fSwKICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJEdldFBhcmFte0JvZHl9LAogICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57VXNlckNoYXJzZXR9LAogICAgICAgICAgICBNaW1lVHlwZSAgICAgICAgICAgICA9PiAkTWltZVR5cGUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJENvbmZpZy0+e0hpc3RvcnlUeXBlfSwKICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgPT4gJENvbmZpZy0+e0hpc3RvcnlDb21tZW50fQogICAgICAgICAgICAgICAgfHwgIlwlXCUkR2V0UGFyYW17VG99LCAkR2V0UGFyYW17Q2N9LCAkR2V0UGFyYW17QmNjfSIsCiAgICAgICAgICAgICVBcnRpY2xlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICEkQXJ0aWNsZUlEICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgICMgc2V0IGFydGljbGUgZHluYW1pYyBmaWVsZHMKICAgICAgICAjIGN5Y2xlIHRocm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCB2YWx1ZXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKiApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57T2JqZWN0VHlwZX0gbmUgJ0FydGljbGUnOwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJFZpc2liaWxpdHl7IkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0ifTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e1JlYWRvbmx5fTsKCiAgICAgICAgICAgICMgc2V0IHRoZSB2YWx1ZQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZFZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyByZW1vdmUgYWxsIGZvcm0gZGF0YQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OkZvcm1DYWNoZScpLT5Gb3JtSURSZW1vdmUoIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0gKTsKCiAgICAgICAgIyBkZWxldGUgaGlkZGVuIGZpZWxkcyBjYWNoZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgICAgIFR5cGUgPT4gJ0hpZGRlbkZpZWxkcycsCiAgICAgICAgICAgIEtleSAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICk7CgogICAgICAgICMgbGluayB0aWNrZXRzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkR2V0UGFyYW17TGlua1RpY2tldElEfQogICAgICAgICAgICAmJiAkQ29uZmlnLT57U3BsaXRMaW5rVHlwZX0KICAgICAgICAgICAgJiYgJENvbmZpZy0+e1NwbGl0TGlua1R5cGV9LT57TGlua1R5cGV9CiAgICAgICAgICAgICYmICRDb25maWctPntTcGxpdExpbmtUeXBlfS0+e0RpcmVjdGlvbn0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEFjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAncm8nLAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJEdldFBhcmFte0xpbmtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gIllvdSBuZWVkIHJvIHBlcm1pc3Npb24hIiwKICAgICAgICAgICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJFNvdXJjZUtleSA9ICRHZXRQYXJhbXtMaW5rVGlja2V0SUR9OwogICAgICAgICAgICBteSAkVGFyZ2V0S2V5ID0gJFRpY2tldElEOwoKICAgICAgICAgICAgaWYgKCAkQ29uZmlnLT57U3BsaXRMaW5rVHlwZX0tPntEaXJlY3Rpb259IGVxICdTb3VyY2UnICkgewogICAgICAgICAgICAgICAgJFNvdXJjZUtleSA9ICRUaWNrZXRJRDsKICAgICAgICAgICAgICAgICRUYXJnZXRLZXkgPSAkR2V0UGFyYW17TGlua1RpY2tldElEfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBsaW5rIHRoZSB0aWNrZXRzCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPkxpbmtBZGQoCiAgICAgICAgICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICBTb3VyY2VLZXkgICAgPT4gJFNvdXJjZUtleSwKICAgICAgICAgICAgICAgIFRhcmdldE9iamVjdCA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgIFRhcmdldEtleSAgICA9PiAkVGFyZ2V0S2V5LAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICRDb25maWctPntTcGxpdExpbmtUeXBlfS0+e0xpbmtUeXBlfSB8fCAnTm9ybWFsJywKICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2V0IG93bmVyIChpZiBuZXcgdXNlciBpZCBpcyBnaXZlbikKICAgICAgICBpZiAoJE5ld1VzZXJJRCkgewogICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRPd25lclNldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBOZXdVc2VySUQgPT4gJE5ld1VzZXJJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCBsb2NrCiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldExvY2tTZXQoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBMb2NrICAgICA9PiAnbG9jaycsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGVsc2Ugc2V0IG93bmVyIHRvIGN1cnJlbnQgYWdlbnQgYnV0IGRvIG5vdCBsb2NrIGl0CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldE93bmVyU2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIE5ld1VzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBTZW5kTm9Ob3RpZmljYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNldCByZXNwb25zaWJsZSAoaWYgbmV3IHVzZXIgaWQgaXMgZ2l2ZW4pCiAgICAgICAgaWYgKCROZXdSZXNwb25zaWJsZUlEKSB7CiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldFJlc3BvbnNpYmxlU2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIE5ld1VzZXJJRCA9PiAkTmV3UmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHRpbWUgYWNjb3VudGluZwogICAgICAgIGlmICggJEdldFBhcmFte1RpbWVVbml0c30gKSB7CiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRUaW1lKAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgVGltZVVuaXQgID0+ICRHZXRQYXJhbXtUaW1lVW5pdHN9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2xvc2VkIHRpY2tldHMgZ2V0IHVubG9ja2VkCiAgICAgICAgaWYgKCAkU3RhdGVEYXRhe1R5cGVOYW1lfSA9fiAvXmNsb3NlL2kgKSB7CgogICAgICAgICAgICAjIHNldCBsb2NrCiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldExvY2tTZXQoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBMb2NrICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2V0IHBlbmRpbmcgdGltZQogICAgICAgIGVsc2lmICggJFN0YXRlRGF0YXtUeXBlTmFtZX0gPX4gL15wZW5kaW5nL2kgKSB7CgogICAgICAgICAgICAjIHNldCBwZW5kaW5nIHRpbWUKICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCByZWRpcmVjdCBzY3JlZW4KICAgICAgICBteSAkTmV4dFNjcmVlbiA9ICRTZWxmLT57U2Vzc2lvbn17VXNlckNyZWF0ZU5leHRNYXNrfSB8fCAnQWdlbnRUaWNrZXRFbWFpbDtTdWJhY3Rpb249Q3JlYXRlZCc7CgogICAgICAgICMgcmVkaXJlY3QKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JE5leHRTY3JlZW47VGlja2V0SUQ9JFRpY2tldElEIiwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FKQVhVcGRhdGUnICkgewogICAgICAgIG15ICREZXN0ICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdEZXN0JyApIHx8ICcnOwogICAgICAgIG15ICRDdXN0b21lclVzZXIgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZWxlY3RlZEN1c3RvbWVyVXNlcicgKTsKICAgICAgICBteSAkRWxlbWVudENoYW5nZWQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRWxlbWVudENoYW5nZWQnICkgfHwgJyc7CgogICAgICAgICMgZ2V0IEZyb20gYmFzZWQgb24gc2VsZWN0ZWQgcXVldWUKICAgICAgICBteSAkUXVldWVJRCA9ICcnOwogICAgICAgIGlmICggJERlc3QgPX4gL14oXGR7MSwxMDB9KVx8XHwuKz8kLyApIHsKICAgICAgICAgICAgJFF1ZXVlSUQgPSAkMTsKICAgICAgICAgICAgbXkgJUFkZHJlc3MgPSAkUXVldWVPYmplY3QtPkdldFN5c3RlbUFkZHJlc3MoIFF1ZXVlSUQgPT4gJFF1ZXVlSUQgKTsKICAgICAgICAgICAgJEdldFBhcmFte0Zyb219ID0gJEFkZHJlc3N7RW1haWx9OwogICAgICAgIH0KICAgICAgICAkR2V0UGFyYW17RGVzdH0gICAgPSAkRGVzdDsKICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAkUXVldWVJRDsKCiAgICAgICAgIyBnZXQgbGlzdCB0eXBlCiAgICAgICAgbXkgJFRyZWVWaWV3ID0gMDsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKSBlcSAndHJlZScgKSB7CiAgICAgICAgICAgICRUcmVlVmlldyA9IDE7CiAgICAgICAgfQoKICAgICAgICBteSAkQXV0b3NlbGVjdCA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QUNMOjpBdXRvc2VsZWN0JykgfHwgdW5kZWY7CiAgICAgICAgbXkgJEFDTFByZXNlbGVjdGlvbjsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QUNMOjpBQ0xQcmVzZWxlY3Rpb24nKSApIHsKCiAgICAgICAgICAgICMgZ2V0IGNhY2hlZCBwcmVzZWxlY3Rpb24gcnVsZXMKICAgICAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24gPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RpY2tldEFDTCcsCiAgICAgICAgICAgICAgICBLZXkgID0+ICdQcmVzZWxlY3Rpb24nLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uICkgewogICAgICAgICAgICAgICAgJEFDTFByZXNlbGVjdGlvbiA9ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+U2V0QUNMUHJlc2VsZWN0aW9uQ2FjaGUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJUNvbnZlcmdlbmNlID0gKAogICAgICAgICAgICBTdGRGaWVsZHMgPT4gMCwKICAgICAgICAgICAgRmllbGRzICAgID0+IDAsCiAgICAgICAgKTsKICAgICAgICBteSAlQ2hhbmdlZEVsZW1lbnRzID0gJEVsZW1lbnRDaGFuZ2VkID8gKCAkRWxlbWVudENoYW5nZWQgPT4gMSApIDogKCk7CiAgICAgICAgaWYgKCAkQ2hhbmdlZEVsZW1lbnRze1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICRDaGFuZ2VkRWxlbWVudHN7Q3VzdG9tZXJVc2VySUR9ID0gMTsKICAgICAgICAgICAgJENoYW5nZWRFbGVtZW50c3tDdXN0b21lcklEfSAgICAgPSAxOwogICAgICAgIH0KICAgICAgICBteSAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydCA9ICVDaGFuZ2VkRWxlbWVudHM7CiAgICAgICAgbXkgJUNoYW5nZWRTdGRGaWVsZHMgICAgICAgPSAkRWxlbWVudENoYW5nZWQgJiYgJEVsZW1lbnRDaGFuZ2VkICF+IC9eRHluYW1pY0ZpZWxkXy8gPyAlQ2hhbmdlZEVsZW1lbnRzIDogKCk7CgogICAgICAgIG15ICRMb29wUHJvdGVjdGlvbiA9IDEwMDsKICAgICAgICBteSAlU3RkRmllbGRWYWx1ZXM7CiAgICAgICAgbXkgJUR5bkZpZWxkU3RhdGVzID0gKAogICAgICAgICAgICBWaXNpYmlsaXR5ID0+IHt9LAogICAgICAgICAgICBGaWVsZHMgICAgID0+IHt9LAogICAgICAgICAgICBTZXRzICAgICAgID0+IHt9LAogICAgICAgICk7CgogICAgICAgIHVudGlsICggJENvbnZlcmdlbmNle0ZpZWxkc30gKSB7CgogICAgICAgICAgICAjIGRldGVybWluZSBzdGFuZGFyZCBmaWVsZCBpbnB1dAogICAgICAgICAgICB1bnRpbCAoICRDb252ZXJnZW5jZXtTdGRGaWVsZHN9ICkgewoKICAgICAgICAgICAgICAgIG15ICVOZXdDaGFuZ2VkRWxlbWVudHM7CgogICAgICAgICAgICAgICAgIyB3aGljaCBzdGFuZGFyZCBmaWVsZHMgdG8gY2hlY2sgLSBGaWVsZElEID0+IEdldFBhcmFtVmFsdWUgKG5lY2Vzc2FyeSBmb3IgRGVzdCkKICAgICAgICAgICAgICAgIG15ICVDaGVjayA9ICgKICAgICAgICAgICAgICAgICAgICBEZXN0ICAgICAgICAgICAgICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgICAgICAgICAgICAgIE5ld1VzZXJJRCAgICAgICAgICA9PiAnTmV3VXNlcklEJywKICAgICAgICAgICAgICAgICAgICBOZXdSZXNwb25zaWJsZUlEICAgPT4gJ05ld1Jlc3BvbnNpYmxlSUQnLAogICAgICAgICAgICAgICAgICAgIE5leHRTdGF0ZUlEICAgICAgICA9PiAnTmV4dFN0YXRlSUQnLAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgICAgICA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEICAgICAgICAgID0+ICdTZXJ2aWNlSUQnLAogICAgICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgICAgICA9PiAnU0xBSUQnLAogICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAnU3RhbmRhcmRUZW1wbGF0ZUlEJywKICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCRBQ0xQcmVzZWxlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICBGSUVMRDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEZpZWxkSUQgKCBzb3J0IGtleXMgJUNoZWNrICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uLT57RmllbGRzfXskRmllbGRJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkRmllbGRJRCBub3QgZGVmaW5lZCBpbiBUaWNrZXRBQ0wgcHJlc2VsZWN0aW9uIHJ1bGVzISIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEF1dG9zZWxlY3QgJiYgJEF1dG9zZWxlY3QtPnskRmllbGRJRH0gJiYgJENoYW5nZWRFbGVtZW50c3skRmllbGRJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkRWxlbWVudCAoIHNvcnQga2V5cyAlQ2hhbmdlZEVsZW1lbnRzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24tPntSdWxlc317VGlja2V0fXskRWxlbWVudH17JEZpZWxkSUR9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJFNlbGYtPntJbnRlcm5hbERlcGVuZGFuY3l9eyRFbGVtZW50fXskRmllbGRJRH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBQ0xQcmVzZWxlY3Rpb24tPntGaWVsZHN9eyRFbGVtZW50fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRFbGVtZW50IG5vdCBkZWZpbmVkIGluIFRpY2tldEFDTCBwcmVzZWxlY3Rpb24gcnVsZXMhIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWxldGUgdW5hZmZlY3RlZCBmaWVsZHMKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRDaGVja3skRmllbGRJRH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZm9yIGVhY2ggc3RhbmRhcmQgZmllbGQgd2hpY2ggaGFzIHRvIGJlIGNoZWNrZWQsIHJ1biB0aGUgZGVmaW5lZCBtZXRob2QKICAgICAgICAgICAgICAgIE1FVEhPRDoKICAgICAgICAgICAgICAgIGZvciBteSAkRmllbGQgKCBAeyAkU2VsZi0+e0ZpZWxkTWV0aG9kc30gfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IE1FVEhPRCBpZiAhJENoZWNreyAkRmllbGQtPntGaWVsZElEfSB9OwoKICAgICAgICAgICAgICAgICAgICAjIHVzZSAkQ2hlY2t7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gZm9yIERlc3Q9PlF1ZXVlSUQKICAgICAgICAgICAgICAgICAgICAkU3RkRmllbGRWYWx1ZXN7ICRDaGVja3sgJEZpZWxkLT57RmllbGRJRH0gfSB9ID0gJEZpZWxkLT57TWV0aG9kfS0+KAogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBPd25lcklEICAgICAgICA9PiAkR2V0UGFyYW17TmV3VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlciB8fCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICAgPT4gJEdldFBhcmFte1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlcyAgICAgICA9PiAkU3RkRmllbGRWYWx1ZXN7U2VydmljZUlEfSB8fCB1bmRlZiwgICAgIyBuZWVkZWQgZm9yIFNMQUlECiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBzcGVjaWFsIHN0dWZmIGZvciBRdWV1ZUlEL0Rlc3Q6IERlc3QgaXMgIlF1ZXVlSUR8fFF1ZXVlTmFtZSIgPT4gIlF1ZXVlTmFtZSI7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkRmllbGQtPntGaWVsZElEfSBlcSAnRGVzdCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFRPczoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRRdWV1ZUlEICggc29ydCBrZXlzICV7ICRTdGRGaWVsZFZhbHVlc3tRdWV1ZUlEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBUT3MgaWYgKCAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH17JFF1ZXVlSUR9IGVxICctJyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFN0ZEZpZWxkVmFsdWVze0Rlc3R9eyIkUXVldWVJRHx8JFN0ZEZpZWxkVmFsdWVze1F1ZXVlSUR9eyAkUXVldWVJRCB9In0gPSAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH17JFF1ZXVlSUR9OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGN1cnJlbnQgc2VsZWN0aW9uIG9mIFF1ZXVlSUQgKERlc3Qgd2lsbCBiZSBkb25lIHRvZ2V0aGVyIHdpdGggdGhlIG90aGVyIGZpZWxkcykKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17UXVldWVJRH0gJiYgISRTdGRGaWVsZFZhbHVlc3tEZXN0fXsgJEdldFBhcmFte0Rlc3R9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBhdXRvc2VsZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtRdWV1ZUlEfSAmJiAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+e0Rlc3R9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5BdXRvc2VsZWN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzID0+ICRTdGRGaWVsZFZhbHVlc3tRdWV1ZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgojIFJvdGhlciBPU1MgLyBJVFNNQ29yZSAtIGNhbGN1bGF0ZSBQcmlvcml0eSB2aWEgQ0lQIG1hdHJpeAogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEZpZWxkLT57RmllbGRJRH0gZXEgJ1ByaW9yaXR5SUQnICYmICRDSVBDYWxjdWxhdGUgJiYgJEdldFBhcmFte0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgdGhlIGNyaXRpY2FsaXR5IGVpdGhlciBmcm9tIHRoZSBtYW51YWxseSBzZXQgZHluYW1pYyBmaWVsZCwgb3IgdGhlIHNlcnZpY2UKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJENyaXRpY2FsaXR5ID0gJEdldFBhcmFte0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENyaXRpY2FsaXR5ICYmICRHZXRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJVNlcnZpY2UgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJEdldFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDcml0aWNhbGl0eSA9ICRTZXJ2aWNle0NyaXRpY2FsaXR5fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ3JpdGljYWxpdHkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZWNhbGN1bGF0ZSB0aGUgcHJpb3JpdHkgaWYgYW55IG9mIHRoZSBpbXBhY3RpbmcgZWxlbWVudHMgY2hhbmdlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ2hhbmdlZEVsZW1lbnRze0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSB8fCAkQ2hhbmdlZEVsZW1lbnRze1NlcnZpY2VJRH0gfHwgJENoYW5nZWRFbGVtZW50c3tEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+UHJpb3JpdHlBbGxvY2F0aW9uR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkQ3JpdGljYWxpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRTdGRGaWVsZFZhbHVlc3tQcmlvcml0eUlEfXsgJFByaW9yaXR5SUQgfSAmJiAkUHJpb3JpdHlJRCBuZSAkR2V0UGFyYW17UHJpb3JpdHlJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtQcmlvcml0eUlEfSAgICAgICAgICAgPSAkUHJpb3JpdHlJRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ld0NoYW5nZWRFbGVtZW50c3tQcmlvcml0eUlEfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDaGFuZ2VkU3RkRmllbGRze1ByaW9yaXR5SUR9ICAgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIHdlIGVuZm9yY2UgQ0lQQWxsb2NhdGlvbiBpbiBhbnkgY2FzZSBkZWxldGUgYWxsIG90aGVyIHByaW9yaXR5IG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFte1ByaW9yaXR5SUR9ICYmICRDSVBDYWxjdWxhdGUgPT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU3RkRmllbGRWYWx1ZXN7UHJpb3JpdHlJRH0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtQcmlvcml0eUlEfSA9PiAkU3RkRmllbGRWYWx1ZXN7UHJpb3JpdHlJRH17ICRHZXRQYXJhbXtQcmlvcml0eUlEfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB3aGV0aGVyIGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWUgaXMgc3RpbGwgdmFsaWQgZm9yIHRoZSBmaWVsZAogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9CiAgICAgICAgICAgICAgICAgICAgICAgICYmICEkU3RkRmllbGRWYWx1ZXN7ICRGaWVsZC0+e0ZpZWxkSUR9IH17ICRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSB9CiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbm90IGVtcHR5IHRoZSBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gICAgICAgICAgID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICROZXdDaGFuZ2VkRWxlbWVudHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlZFN0ZEZpZWxkc3sgJEZpZWxkLT57RmllbGRJRH0gfSAgID0gMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgYXV0b3NlbGVjdAogICAgICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSAmJiAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+eyAkRmllbGQtPntGaWVsZElEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPkF1dG9zZWxlY3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiAkU3RkRmllbGRWYWx1ZXN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ld0NoYW5nZWRFbGVtZW50c3sgJEZpZWxkLT57RmllbGRJRH0gfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlZFN0ZEZpZWxkc3sgJEZpZWxkLT57RmllbGRJRH0gfSAgID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICElTmV3Q2hhbmdlZEVsZW1lbnRzICkgewogICAgICAgICAgICAgICAgICAgICRDb252ZXJnZW5jZXtTdGRGaWVsZHN9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHMgPSAlTmV3Q2hhbmdlZEVsZW1lbnRzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0ID0gKAogICAgICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0LAogICAgICAgICAgICAgICAgICAgICVOZXdDaGFuZ2VkRWxlbWVudHMsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICggJExvb3BQcm90ZWN0aW9uLS0gPCAxICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiUmFuIGludG8gdW5yZXNvbHZhYmxlIGxvb3AhIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHMgICAgICAgID0gJUNoYW5nZWRFbGVtZW50c0RGU3RhcnQ7CiAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0ID0gKCk7CgogICAgICAgICAgICAjIGNoZWNrIGR5bmFtaWMgZmllbGRzCiAgICAgICAgICAgIG15ICVDdXJGaWVsZFN0YXRlczsKICAgICAgICAgICAgaWYgKCVDaGFuZ2VkRWxlbWVudHMpIHsKCiAgICAgICAgICAgICAgICAjIGdldCB2YWx1ZXMgYW5kIHZpc2liaWxpdHkgb2YgZHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgICAgICVDdXJGaWVsZFN0YXRlcyA9ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+R2V0RmllbGRTdGF0ZXMoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0T2JqZWN0ICAgICAgICAgICAgICA9PiAkVGlja2V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgICAgICAgICAgICAgPT4gJFNlbGYtPntEeW5hbWljRmllbGR9LAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPT4gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZEVsZW1lbnRzICAgICAgICAgICA9PiBcJUNoYW5nZWRFbGVtZW50cywgICAgICAgICAgICAjIG9wdGlvbmFsIHRvIHJlZHVjZSBBQ0wgZXZhbHVhdGlvbgogICAgICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgICAgICAgICAgICAgPT4gJEN1c3RvbWVyVXNlciB8fCAnJywKICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBPd25lcklEID0+ICRHZXRQYXJhbXtOZXdVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgQXV0b3NlbGVjdCAgICAgID0+ICRBdXRvc2VsZWN0LAogICAgICAgICAgICAgICAgICAgIEFDTFByZXNlbGVjdGlvbiA9PiAkQUNMUHJlc2VsZWN0aW9uLAogICAgICAgICAgICAgICAgICAgIExvb3BQcm90ZWN0aW9uICA9PiBcJExvb3BQcm90ZWN0aW9uLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNvbWJpbmUgRmllbGRTdGF0ZXMKICAgICAgICAgICAgICAgICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9ID0gewogICAgICAgICAgICAgICAgICAgICV7ICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze0ZpZWxkc30gfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAkRHluRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJER5bkZpZWxkU3RhdGVze1Zpc2liaWxpdHl9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze1Zpc2liaWxpdHl9IH0sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgJER5bkZpZWxkU3RhdGVze1NldHN9ID0gewogICAgICAgICAgICAgICAgICAgICV7ICREeW5GaWVsZFN0YXRlc3tTZXRzfSB9LAogICAgICAgICAgICAgICAgICAgICV7ICRDdXJGaWVsZFN0YXRlc3tTZXRzfSB9LAogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAjIHN0b3JlIG5ldyB2YWx1ZXMKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtEeW5hbWljRmllbGR9ID0gewogICAgICAgICAgICAgICAgICAgICV7ICRHZXRQYXJhbXtEeW5hbWljRmllbGR9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze05ld1ZhbHVlc30gfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWYgZHluYW1pYyBmaWVsZHMgY2hhbmdlZCwgY2hlY2sgc3RhbmRhcmQgZmllbGRzIGFnYWluCiAgICAgICAgICAgIGlmICggJUN1ckZpZWxkU3RhdGVzICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQ3VyRmllbGRTdGF0ZXN7TmV3VmFsdWVzfSApICkgewogICAgICAgICAgICAgICAgJENvbnZlcmdlbmNle1N0ZEZpZWxkc30gPSAwOwogICAgICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50cyA9IG1hcCB7ICRfID0+IDEgfSBrZXlzICV7ICRDdXJGaWVsZFN0YXRlc3tOZXdWYWx1ZXN9IH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkQ29udmVyZ2VuY2V7RmllbGRzfSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBteSAkU2lnbmF0dXJlID0gJyc7CiAgICAgICAgaWYgKCAkR2V0UGFyYW17UXVldWVJRH0gKSB7CiAgICAgICAgICAgICRTaWduYXR1cmUgPSAkU2VsZi0+X0dldFNpZ25hdHVyZSgKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgID0+ICRHZXRQYXJhbXtRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRDdXN0b21lclVzZXIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBEeW5hbWljIEZpZWxkcyBQb3NzaWJsZSBWYWx1ZXMgdmlhIEFKQVgKICAgICAgICBteSBARHluYW1pY0ZpZWxkQUpBWCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5CdWlsZEFKQVhSZXR1cm4oCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZ3MgPT4gJFNlbGYtPntEeW5hbWljRmllbGR9LAogICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgIER5bkZpZWxkU3RhdGVzICAgICAgPT4gXCVEeW5GaWVsZFN0YXRlcywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIEFKQVggcmV0dXJuIGZvciB0aGUgc3RhbmRhcmQgZmllbGRzCiAgICAgICAgbXkgQFN0ZEZpZWxkQUpBWDsKICAgICAgICBteSAlQXR0cmlidXRlcyA9ICgKICAgICAgICAgICAgRGVzdCA9PiB7CiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gJFRyZWVWaWV3LAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBUcmVlVmlldyAgICAgPT4gJFRyZWVWaWV3LAogICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTmV3VXNlcklEID0+IHsKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBOZXdSZXNwb25zaWJsZUlEID0+IHsKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBOZXh0U3RhdGVJRCA9PiB7CiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgTWF4ICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcmlvcml0eUlEID0+IHsKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiB7CiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgICAgICBUcmVlVmlldyAgICAgPT4gJFRyZWVWaWV3LAogICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU0xBSUQgPT4gewogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiB7CiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVHlwZUlEID0+IHsKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgICAgICBkZWxldGUgJFN0ZEZpZWxkVmFsdWVze1F1ZXVlSUR9OwogICAgICAgIGZvciBteSAkRmllbGQgKCBzb3J0IGtleXMgJVN0ZEZpZWxkVmFsdWVzICkgewogICAgICAgICAgICBwdXNoIEBTdGRGaWVsZEFKQVgsIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJEZpZWxkLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiAkU3RkRmllbGRWYWx1ZXN7JEZpZWxkfSwKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJEdldFBhcmFteyRGaWVsZH0sCiAgICAgICAgICAgICAgICAleyAkQXR0cmlidXRlc3skRmllbGR9IH0sCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBteSBAVGVtcGxhdGVBSkFYOwoKICAgICAgICAjIHVwZGF0ZSB0aWNrZXQgYm9keSBhbmQgYXR0YWNobWVudHMgaWYgbmVlZGVkLgogICAgICAgIGlmICggJENoYW5nZWRTdGRGaWVsZHN7U3RhbmRhcmRUZW1wbGF0ZUlEfSApIHsKICAgICAgICAgICAgbXkgQFRpY2tldEF0dGFjaG1lbnRzOwogICAgICAgICAgICBteSAkVGVtcGxhdGVUZXh0OwoKICAgICAgICAgICAgIyByZW1vdmUgYWxsIGF0dGFjaG1lbnRzIGZyb20gdGhlIFVwbG9hZCBjYWNoZQogICAgICAgICAgICBteSAkUmVtb3ZlU3VjY2VzcyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEUmVtb3ZlKAogICAgICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJFJlbW92ZVN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJGb3JtIGF0dGFjaG1lbnRzIGNvdWxkIG5vdCBiZSBkZWxldGVkISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCB0aGUgdGVtcGxhdGUgdGV4dCBhbmQgc2V0IG5ldyBhdHRhY2htZW50cyBpZiBhIHRlbXBsYXRlIGlzIHNlbGVjdGVkCiAgICAgICAgICAgIGlmICggSXNQb3NpdGl2ZUludGVnZXIoICRHZXRQYXJhbXtTdGFuZGFyZFRlbXBsYXRlSUR9ICkgKSB7CiAgICAgICAgICAgICAgICBteSAkVGVtcGxhdGVHZW5lcmF0b3IgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGVtcGxhdGVHZW5lcmF0b3InKTsKCiAgICAgICAgICAgICAgICAjIHNldCB0ZW1wbGF0ZSB0ZXh0LCByZXBsYWNlIHNtYXJ0IHRhZ3MgKGxpbWl0ZWQgYXMgdGlja2V0IGlzIG5vdCBjcmVhdGVkKQogICAgICAgICAgICAgICAgJFRlbXBsYXRlVGV4dCA9ICRUZW1wbGF0ZUdlbmVyYXRvci0+VGVtcGxhdGUoCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICAgPT4gJEdldFBhcmFte1N0YW5kYXJkVGVtcGxhdGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRDdXN0b21lclVzZXIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY3JlYXRlIFN0ZEF0dGFjaG1lbnRPYmplY3QKICAgICAgICAgICAgICAgIG15ICRTdGRBdHRhY2htZW50T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0ZEF0dGFjaG1lbnQnKTsKCiAgICAgICAgICAgICAgICAjIGFkZCBzdGQuIGF0dGFjaG1lbnRzIHRvIHRpY2tldAogICAgICAgICAgICAgICAgbXkgJUFsbFN0ZEF0dGFjaG1lbnRzID0gJFN0ZEF0dGFjaG1lbnRPYmplY3QtPlN0ZEF0dGFjaG1lbnRTdGFuZGFyZFRlbXBsYXRlTWVtYmVyTGlzdCgKICAgICAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJEdldFBhcmFte1N0YW5kYXJkVGVtcGxhdGVJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgZm9yICggc29ydCBrZXlzICVBbGxTdGRBdHRhY2htZW50cyApIHsKICAgICAgICAgICAgICAgICAgICBteSAlQXR0YWNobWVudHNEYXRhID0gJFN0ZEF0dGFjaG1lbnRPYmplY3QtPlN0ZEF0dGFjaG1lbnRHZXQoIElEID0+ICRfICk7CiAgICAgICAgICAgICAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURBZGRGaWxlKAogICAgICAgICAgICAgICAgICAgICAgICBGb3JtSUQgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgICAgICAgICAgJUF0dGFjaG1lbnRzRGF0YSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc2VuZCBhIGxpc3Qgb2YgYXR0YWNobWVudHMgaW4gdGhlIHVwbG9hZCBjYWNoZSBiYWNrIHRvIHRoZSBjbGllbnRzaWRlIEphdmFTY3JpcHQKICAgICAgICAgICAgICAgICMgd2hpY2ggcmVuZGVycyB0aGVuIHRoZSBsaXN0IG9mIGN1cnJlbnRseSB1cGxvYWRlZCBhdHRhY2htZW50cwogICAgICAgICAgICAgICAgQFRpY2tldEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAVGlja2V0QXR0YWNobWVudHMpIHsKICAgICAgICAgICAgICAgICAgICAkQXR0YWNobWVudC0+e0ZpbGVzaXplfSA9ICRMYXlvdXRPYmplY3QtPkh1bWFuUmVhZGFibGVEYXRhU2l6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZSA9PiAkQXR0YWNobWVudC0+e0ZpbGVzaXplfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBAVGVtcGxhdGVBSkFYID0gKAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1VzZVRlbXBsYXRlQ3JlYXRlJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICcwJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmljaFRleHQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFRlbXBsYXRlVGV4dCB8fCAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1RpY2tldEF0dGFjaG1lbnRzJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICA9PiBcQFRpY2tldEF0dGFjaG1lbnRzLAogICAgICAgICAgICAgICAgICAgIEtlZXBEYXRhID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgQEV4dGVuZGVkRGF0YTsKCiAgICAgICAgIyBydW4gY29tcG9zZSBtb2R1bGVzCiAgICAgICAgaWYgKCByZWYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlQ29tcG9zZU1vZHVsZScpIGVxICdIQVNIJyApIHsKCiAgICAgICAgICAgIG15ICVKb2JzID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlQ29tcG9zZU1vZHVsZScpIH07CiAgICAgICAgICAgIEpPQjoKICAgICAgICAgICAgZm9yIG15ICRKb2IgKCBzb3J0IGtleXMgJUpvYnMgKSB7CgogICAgICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICAgICAgbmV4dCBKT0IgaWYgISRNYWluT2JqZWN0LT5SZXF1aXJlKCAkSm9ic3skSm9ifS0+e01vZHVsZX0gKTsKCiAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJEpvYnN7JEpvYn0tPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgRGVidWcgPT4gJERlYnVnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAkTXVsdGlwbGU7CgogICAgICAgICAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgICAgICAgICBQQVJBTUVURVI6CiAgICAgICAgICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAoICRPYmplY3QtPk9wdGlvbiggJUdldFBhcmFtLCBDb25maWcgPT4gJEpvYnN7JEpvYn0gKSApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkSm9ic3skSm9ifS0+e1BhcmFtVHlwZX0gJiYgJEpvYnN7JEpvYn0tPntQYXJhbVR5cGV9IG5lICdTaW5nbGUnICkgewogICAgICAgICAgICAgICAgICAgICAgICBAeyAkR2V0UGFyYW17JFBhcmFtZXRlcn0gfSA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICRQYXJhbWV0ZXIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJE11bHRpcGxlID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBQQVJBTUVURVI7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtZXRlcn0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1ldGVyICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgICAgICBteSAlRGF0YSA9ICRPYmplY3QtPkRhdGEoICVHZXRQYXJhbSwgQ29uZmlnID0+ICRKb2JzeyRKb2J9ICk7CgogICAgICAgICAgICAgICAgIyBnZXQgQUpBWCBwYXJhbSB2YWx1ZXMKICAgICAgICAgICAgICAgIGlmICggJE9iamVjdC0+Y2FuKCdHZXRQYXJhbUFKQVgnKSApIHsKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0gPSAoICVHZXRQYXJhbSwgJE9iamVjdC0+R2V0UGFyYW1BSkFYKCVHZXRQYXJhbSkgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGdldCBvcHRpb25zIHRoYXQgaGF2ZSB0byBiZSByZW1vdmVkIGZyb20gdGhlIHNlbGVjdGlvbiB2aXNpYmxlCiAgICAgICAgICAgICAgICAjIHRvIHRoZSBhZ2VudC4gVGhlc2Ugb3B0aW9ucyB3aWxsIGJlIGFkZGVkIGFnYWluIG9uIHN1Ym1pdC4KICAgICAgICAgICAgICAgIGlmICggJE9iamVjdC0+Y2FuKCdHZXRPcHRpb25zVG9SZW1vdmVBSkFYJykgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgQE9wdGlvbnNUb1JlbW92ZSA9ICRPYmplY3QtPkdldE9wdGlvbnNUb1JlbW92ZUFKQVgoJUdldFBhcmFtKTsKCiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRPcHRpb25Ub1JlbW92ZSAoQE9wdGlvbnNUb1JlbW92ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJERhdGF7JE9wdGlvblRvUmVtb3ZlfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJEtleSA9ICRPYmplY3QtPk9wdGlvbiggJUdldFBhcmFtLCBDb25maWcgPT4gJEpvYnN7JEpvYn0gKTsKCiAgICAgICAgICAgICAgICBpZiAoJEtleSkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQEV4dGVuZGVkRGF0YSwgewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJEtleSwKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRHZXRQYXJhbXskS2V5fSwKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICAgPT4gJE11bHRpcGxlLAogICAgICAgICAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRKU09OID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb25KU09OKAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdTaWduYXR1cmUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQFN0ZEZpZWxkQUpBWCwKICAgICAgICAgICAgICAgIEBEeW5hbWljRmllbGRBSkFYLAogICAgICAgICAgICAgICAgQFRlbXBsYXRlQUpBWCwKICAgICAgICAgICAgICAgIEBFeHRlbmRlZERhdGEsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBTdWJhY3Rpb24hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQp9CgpzdWIgX0dldE5leHRTdGF0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHVzZSBkZWZhdWx0IFF1ZXVlIGlmIG5vbmUgaXMgcHJvdmlkZWQKICAgICRQYXJhbXtRdWV1ZUlEfSA9ICRQYXJhbXtRdWV1ZUlEfSB8fCAxOwoKICAgIG15ICVOZXh0U3RhdGVzOwogICAgaWYgKCAkUGFyYW17UXVldWVJRH0gfHwgJFBhcmFte1RpY2tldElEfSApIHsKICAgICAgICAlTmV4dFN0YXRlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U3RhdGVMaXN0KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEFjdGlvbiA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybiBcJU5leHRTdGF0ZXM7Cn0KCnN1YiBfR2V0VXNlcnMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCB1c2VycwogICAgbXkgJVNob3duVXNlcnM7CiAgICBteSAlQWxsR3JvdXBzTWVtYmVycyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMaXN0KAogICAgICAgIFR5cGUgID0+ICdMb25nJywKICAgICAgICBWYWxpZCA9PiAxLAogICAgKTsKCiAgICAjIGdldCB0aWNrZXQgb2JqZWN0CiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICMganVzdCBzaG93IG9ubHkgdXNlcnMgd2l0aCBzZWxlY3RlZCBjdXN0b20gcXVldWUKICAgIGlmICggJFBhcmFte1F1ZXVlSUR9ICYmICEkUGFyYW17T3duZXJBbGx9ICkgewogICAgICAgIG15IEBVc2VySURzID0gJFRpY2tldE9iamVjdC0+R2V0U3Vic2NyaWJlZFVzZXJJRHNCeVF1ZXVlSUQoJVBhcmFtKTsKICAgICAgICBmb3IgbXkgJEtleUdyb3VwTWVtYmVyICggc29ydCBrZXlzICVBbGxHcm91cHNNZW1iZXJzICkgewogICAgICAgICAgICBteSAkSGl0ID0gMDsKICAgICAgICAgICAgZm9yIG15ICRVSUQgKEBVc2VySURzKSB7CiAgICAgICAgICAgICAgICBpZiAoICRVSUQgZXEgJEtleUdyb3VwTWVtYmVyICkgewogICAgICAgICAgICAgICAgICAgICRIaXQgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggISRIaXQgKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgJEFsbEdyb3Vwc01lbWJlcnN7JEtleUdyb3VwTWVtYmVyfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgYWxsIHN5c3RlbSB1c2VycwogICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1RpY2tldDo6Q2hhbmdlT3duZXJUb0V2ZXJ5b25lJykgKSB7CiAgICAgICAgJVNob3duVXNlcnMgPSAlQWxsR3JvdXBzTWVtYmVyczsKICAgIH0KCiAgICAjIHNob3cgYWxsIHVzZXJzIHdobyBhcmUgb3duZXIgb3IgcncgaW4gdGhlIHF1ZXVlIGdyb3VwCiAgICBlbHNpZiAoICRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICBteSAkR0lEICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5HZXRRdWV1ZUdyb3VwSUQoIFF1ZXVlSUQgPT4gJFBhcmFte1F1ZXVlSUR9ICk7CiAgICAgICAgbXkgJU1lbWJlckxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvbkdyb3VwR2V0KAogICAgICAgICAgICBHcm91cElEID0+ICRHSUQsCiAgICAgICAgICAgIFR5cGUgICAgPT4gJ293bmVyJywKICAgICAgICApOwogICAgICAgIGZvciBteSAkS2V5TWVtYmVyICggc29ydCBrZXlzICVNZW1iZXJMaXN0ICkgewogICAgICAgICAgICBpZiAoICRBbGxHcm91cHNNZW1iZXJzeyRLZXlNZW1iZXJ9ICkgewogICAgICAgICAgICAgICAgJFNob3duVXNlcnN7JEtleU1lbWJlcn0gPSAkQWxsR3JvdXBzTWVtYmVyc3skS2V5TWVtYmVyfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHdvcmtmbG93CiAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICVQYXJhbSwKICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ093bmVyJywKICAgICAgICBEYXRhICAgICAgICAgID0+IFwlU2hvd25Vc2VycywKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIHsgJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpIH0gaWYgJEFDTDsKCiAgICByZXR1cm4gXCVTaG93blVzZXJzOwp9CgpzdWIgX0dldFJlc3BvbnNpYmxlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHVzZXJzCiAgICBteSAlU2hvd25Vc2VyczsKICAgIG15ICVBbGxHcm91cHNNZW1iZXJzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxpc3QoCiAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgIFZhbGlkID0+IDEsCiAgICApOwoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBqdXN0IHNob3cgb25seSB1c2VycyB3aXRoIHNlbGVjdGVkIGN1c3RvbSBxdWV1ZQogICAgaWYgKCAkUGFyYW17UXVldWVJRH0gJiYgISRQYXJhbXtSZXNwb25zaWJsZUFsbH0gKSB7CiAgICAgICAgbXkgQFVzZXJJRHMgPSAkVGlja2V0T2JqZWN0LT5HZXRTdWJzY3JpYmVkVXNlcklEc0J5UXVldWVJRCglUGFyYW0pOwogICAgICAgIGZvciBteSAkS2V5R3JvdXBNZW1iZXIgKCBzb3J0IGtleXMgJUFsbEdyb3Vwc01lbWJlcnMgKSB7CiAgICAgICAgICAgIG15ICRIaXQgPSAwOwogICAgICAgICAgICBmb3IgbXkgJFVJRCAoQFVzZXJJRHMpIHsKICAgICAgICAgICAgICAgIGlmICggJFVJRCBlcSAkS2V5R3JvdXBNZW1iZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhpdCA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhJEhpdCApIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkQWxsR3JvdXBzTWVtYmVyc3skS2V5R3JvdXBNZW1iZXJ9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBhbGwgc3lzdGVtIHVzZXJzCiAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpDaGFuZ2VPd25lclRvRXZlcnlvbmUnKSApIHsKICAgICAgICAlU2hvd25Vc2VycyA9ICVBbGxHcm91cHNNZW1iZXJzOwogICAgfQoKICAgICMgc2hvdyBhbGwgdXNlcnMgd2hvIGFyZSByZXNwb25zaWJsZSBvciBydyBpbiB0aGUgcXVldWUgZ3JvdXAKICAgIGVsc2lmICggJFBhcmFte1F1ZXVlSUR9ICkgewogICAgICAgIG15ICRHSUQgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPkdldFF1ZXVlR3JvdXBJRCggUXVldWVJRCA9PiAkUGFyYW17UXVldWVJRH0gKTsKICAgICAgICBteSAlTWVtYmVyTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5QZXJtaXNzaW9uR3JvdXBHZXQoCiAgICAgICAgICAgIEdyb3VwSUQgPT4gJEdJRCwKICAgICAgICAgICAgVHlwZSAgICA9PiAncmVzcG9uc2libGUnLAogICAgICAgICk7CiAgICAgICAgZm9yIG15ICRLZXlNZW1iZXIgKCBzb3J0IGtleXMgJU1lbWJlckxpc3QgKSB7CiAgICAgICAgICAgIGlmICggJEFsbEdyb3Vwc01lbWJlcnN7JEtleU1lbWJlcn0gKSB7CiAgICAgICAgICAgICAgICAkU2hvd25Vc2Vyc3skS2V5TWVtYmVyfSA9ICRBbGxHcm91cHNNZW1iZXJzeyRLZXlNZW1iZXJ9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgd29ya2Zsb3cKICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgJVBhcmFtLAogICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUmVzcG9uc2libGUnLAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVTaG93blVzZXJzLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4geyAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCkgfSBpZiAkQUNMOwoKICAgIHJldHVybiBcJVNob3duVXNlcnM7Cn0KCnN1YiBfR2V0UHJpb3JpdGllcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdXNlIGRlZmF1bHQgUXVldWUgaWYgbm9uZSBpcyBwcm92aWRlZAogICAgJFBhcmFte1F1ZXVlSUR9ID0gJFBhcmFte1F1ZXVlSUR9IHx8IDE7CgogICAgIyBnZXQgcHJpb3JpdHkKICAgIG15ICVQcmlvcml0aWVzOwogICAgaWYgKCAkUGFyYW17UXVldWVJRH0gfHwgJFBhcmFte1RpY2tldElEfSApIHsKICAgICAgICAlUHJpb3JpdGllcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0UHJpb3JpdHlMaXN0KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEFjdGlvbiA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybiBcJVByaW9yaXRpZXM7Cn0KCnN1YiBfR2V0VHlwZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHVzZSBkZWZhdWx0IFF1ZXVlIGlmIG5vbmUgaXMgcHJvdmlkZWQKICAgICRQYXJhbXtRdWV1ZUlEfSA9ICRQYXJhbXtRdWV1ZUlEfSB8fCAxOwoKICAgICMgZ2V0IHR5cGUKICAgIG15ICVUeXBlOwogICAgaWYgKCAkUGFyYW17UXVldWVJRH0gfHwgJFBhcmFte1RpY2tldElEfSApIHsKICAgICAgICAlVHlwZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0VHlwZUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQogICAgcmV0dXJuIFwlVHlwZTsKfQoKc3ViIF9HZXRTZXJ2aWNlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNlcnZpY2UKICAgIG15ICVTZXJ2aWNlOwoKICAgICMgdXNlIGRlZmF1bHQgUXVldWUgaWYgbm9uZSBpcyBwcm92aWRlZAogICAgJFBhcmFte1F1ZXVlSUR9ID0gJFBhcmFte1F1ZXVlSUR9IHx8IDE7CgogICAgIyBnZXQgb3B0aW9ucyBmb3IgZGVmYXVsdCBzZXJ2aWNlcyBmb3IgdW5rbm93biBjdXN0b21lcnMKICAgIG15ICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpTZXJ2aWNlOjpEZWZhdWx0OjpVbmtub3duQ3VzdG9tZXInKTsKCiAgICAjIGNoZWNrIGlmIG5vIEN1c3RvbWVyVXNlcklEIGlzIHNlbGVjdGVkCiAgICAjIGlmICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lciA9IDAgbGVhdmUgQ3VzdG9tZXJVc2VySUQgZW1wdHksIGl0IHdpbGwgbm90IGdldCBhbnkgc2VydmljZXMKICAgICMgaWYgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyID0gMSBzZXQgQ3VzdG9tZXJVc2VySUQgdG8gZ2V0IGRlZmF1bHQgc2VydmljZXMKICAgIGlmICggISRQYXJhbXtDdXN0b21lclVzZXJJRH0gJiYgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyICkgewogICAgICAgICRQYXJhbXtDdXN0b21lclVzZXJJRH0gPSAnPERFRkFVTFQ+JzsKICAgIH0KCiAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgIGlmICggJFBhcmFte0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U2VydmljZUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQogICAgcmV0dXJuIFwlU2VydmljZTsKfQoKc3ViIF9HZXRTTEFzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB1c2UgZGVmYXVsdCBRdWV1ZSBpZiBub25lIGlzIHByb3ZpZGVkCiAgICAkUGFyYW17UXVldWVJRH0gPSAkUGFyYW17UXVldWVJRH0gfHwgMTsKCiAgICAjIGdldCBzZXJ2aWNlcyBpZiB0aGV5IHdlcmUgbm90IGRldGVybWluZWQgaW4gYW4gQUpBWCBjYWxsCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtTZXJ2aWNlc30gKSB7CiAgICAgICAgJFBhcmFte1NlcnZpY2VzfSA9ICRTZWxmLT5fR2V0U2VydmljZXMoJVBhcmFtKTsKICAgIH0KCiAgICAjIGdldCBzbGEKICAgIG15ICVTTEE7CiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICYmICRQYXJhbXtTZXJ2aWNlc30gJiYgJXsgJFBhcmFte1NlcnZpY2VzfSB9ICkgewogICAgICAgIGlmICggJFBhcmFte1NlcnZpY2VzfS0+eyAkUGFyYW17U2VydmljZUlEfSB9ICkgewogICAgICAgICAgICAlU0xBID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTTEFMaXN0KAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIFwlU0xBOwp9CgpzdWIgX0dldFRvcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgY2hlY2sgb3duIHNlbGVjdGlvbgogICAgbXkgJU5ld1RvczsKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZXdRdWV1ZU93blNlbGVjdGlvbicpICkgewogICAgICAgICVOZXdUb3MgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok5ld1F1ZXVlT3duU2VsZWN0aW9uJykgfTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIFNlbGVjdGlvblR5cGUgUXVldWUgb3IgU3lzdGVtQWRkcmVzcz8KICAgICAgICBteSAlVG9zOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZXdRdWV1ZVNlbGVjdGlvblR5cGUnKSBlcSAnUXVldWUnICkgewogICAgICAgICAgICAlVG9zID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5Nb3ZlTGlzdCgKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIFR5cGUgICA9PiAnY3JlYXRlJywKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJVRvcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzJyktPlN5c3RlbUFkZHJlc3NRdWV1ZUxpc3QoKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGNyZWF0ZSBwZXJtaXNzaW9uIHF1ZXVlcwogICAgICAgIG15ICVVc2VyR3JvdXBzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25Vc2VyR2V0KAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJ2NyZWF0ZScsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFN5c3RlbUFkZHJlc3NPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcycpOwogICAgICAgIG15ICRRdWV1ZU9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CgogICAgICAgICMgYnVpbGQgc2VsZWN0aW9uIHN0cmluZwogICAgICAgIFFVRVVFSUQ6CiAgICAgICAgZm9yIG15ICRRdWV1ZUlEICggc29ydCBrZXlzICVUb3MgKSB7CgogICAgICAgICAgICBteSAlUXVldWVEYXRhID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUdldCggSUQgPT4gJFF1ZXVlSUQgKTsKCiAgICAgICAgICAgICMgcGVybWlzc2lvbiBjaGVjaywgY2FuIHdlIGNyZWF0ZSBuZXcgdGlja2V0cyBpbiBxdWV1ZQogICAgICAgICAgICBuZXh0IFFVRVVFSUQgaWYgISRVc2VyR3JvdXBzeyAkUXVldWVEYXRhe0dyb3VwSUR9IH07CgogICAgICAgICAgICBteSAkU3RyaW5nID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZXdRdWV1ZVNlbGVjdGlvblN0cmluZycpCiAgICAgICAgICAgICAgICB8fCAnPFJlYWxuYW1lPiA8PEVtYWlsPj4gLSBRdWV1ZTogPFF1ZXVlPic7CiAgICAgICAgICAgICRTdHJpbmcgPX4gcy88UXVldWU+LyRRdWV1ZURhdGF7TmFtZX0vZzsKICAgICAgICAgICAgJFN0cmluZyA9fiBzLzxRdWV1ZUNvbW1lbnQ+LyRRdWV1ZURhdGF7Q29tbWVudH0vZzsKCiAgICAgICAgICAgICMgcmVtb3ZlIHRyYWlsaW5nIHNwYWNlcwogICAgICAgICAgICBpZiAoICEkUXVldWVEYXRhe0NvbW1lbnR9ICkgewogICAgICAgICAgICAgICAgJFN0cmluZyA9fiBze1xzK1x6fXt9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmV3UXVldWVTZWxlY3Rpb25UeXBlJykgbmUgJ1F1ZXVlJyApIHsKICAgICAgICAgICAgICAgIG15ICVTeXN0ZW1BZGRyZXNzRGF0YSA9ICRTeXN0ZW1BZGRyZXNzT2JqZWN0LT5TeXN0ZW1BZGRyZXNzR2V0KAogICAgICAgICAgICAgICAgICAgIElEID0+ICRUb3N7JFF1ZXVlSUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTdHJpbmcgPX4gcy88UmVhbG5hbWU+LyRTeXN0ZW1BZGRyZXNzRGF0YXtSZWFsbmFtZX0vZzsKICAgICAgICAgICAgICAgICRTdHJpbmcgPX4gcy88RW1haWw+LyRTeXN0ZW1BZGRyZXNzRGF0YXtOYW1lfS9nOwogICAgICAgICAgICB9CiAgICAgICAgICAgICROZXdUb3N7JFF1ZXVlSUR9ID0gJFN0cmluZzsKICAgICAgICB9CiAgICB9CgogICAgIyBhZGQgZW1wdHkgc2VsZWN0aW9uCiAgICAkTmV3VG9zeycnfSA9ICctJzsKCiAgICByZXR1cm4gXCVOZXdUb3M7Cn0KCnN1YiBfR2V0U2lnbmF0dXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBwcmVwYXJlIHNpZ25hdHVyZQogICAgbXkgJFRlbXBsYXRlR2VuZXJhdG9yID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRlbXBsYXRlR2VuZXJhdG9yJyk7CiAgICBteSAkU2lnbmF0dXJlICAgICAgICAgPSAkVGVtcGxhdGVHZW5lcmF0b3ItPlNpZ25hdHVyZSgKICAgICAgICBRdWV1ZUlEID0+ICRQYXJhbXtRdWV1ZUlEfSwKICAgICAgICBEYXRhICAgID0+IFwlUGFyYW0sCiAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAkU2lnbmF0dXJlOwp9CgpzdWIgX0dldFRpbWVVbml0cyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRBY2NvdW50ZWRUaW1lID0gJyc7CgogICAgIyBHZXQgYWNjb3VudGVkIHRpbWUgaWYgQWNjb3VudFRpbWUgY29uZmlnIGl0ZW0gaXMgZW5hYmxlZC4KICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBY2NvdW50VGltZScpICYmIGRlZmluZWQgJFBhcmFte0FydGljbGVJRH0gKSB7CiAgICAgICAgJEFjY291bnRlZFRpbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkFydGljbGVBY2NvdW50ZWRUaW1lR2V0KAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFBhcmFte0FydGljbGVJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJEFjY291bnRlZFRpbWUgPyAkQWNjb3VudGVkVGltZSA6ICcnOwp9CgpzdWIgX0dldFN0YW5kYXJkVGVtcGxhdGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVRlbXBsYXRlczsKICAgIG15ICRRdWV1ZUlEID0gJFBhcmFte1F1ZXVlSUR9IHx8ICcnOwoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJFF1ZXVlT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwoKICAgIGlmICggISRRdWV1ZUlEICkgewogICAgICAgIG15ICRVc2VyRGVmYXVsdFF1ZXVlID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpVc2VyRGVmYXVsdFF1ZXVlJykgfHwgJyc7CgogICAgICAgIGlmICgkVXNlckRlZmF1bHRRdWV1ZSkgewogICAgICAgICAgICAkUXVldWVJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVMb29rdXAoIFF1ZXVlID0+ICRVc2VyRGVmYXVsdFF1ZXVlICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkCiAgICByZXR1cm4gXCVUZW1wbGF0ZXMgaWYgISRRdWV1ZUlEICYmICEkUGFyYW17VGlja2V0SUR9OwoKICAgIGlmICggISRRdWV1ZUlEICYmICRQYXJhbXtUaWNrZXRJRH0gKSB7CgogICAgICAgICMgZ2V0IFF1ZXVlSUQgZnJvbSB0aGUgdGlja2V0CiAgICAgICAgbXkgJVRpY2tldCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICAkUXVldWVJRCA9ICRUaWNrZXR7UXVldWVJRH0gfHwgJyc7CiAgICB9CgogICAgIyBmZXRjaCBhbGwgc3RkLiB0ZW1wbGF0ZXMKICAgIG15ICVTdGFuZGFyZFRlbXBsYXRlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVTdGFuZGFyZFRlbXBsYXRlTWVtYmVyTGlzdCgKICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgIFRlbXBsYXRlVHlwZXMgPT4gMSwKICAgICk7CgogICAgIyByZXR1cm4gZW1wdHkgaGFzaCBpZiB0aGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciB0aGlzIHNjcmVlbgogICAgcmV0dXJuIFwlVGVtcGxhdGVzIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggJFN0YW5kYXJkVGVtcGxhdGVze0NyZWF0ZX0gKTsKCiAgICAjIHJldHVybiBqdXN0IHRoZSB0ZW1wbGF0ZXMgZm9yIHRoaXMgc2NyZWVuCiAgICByZXR1cm4gJFN0YW5kYXJkVGVtcGxhdGVze0NyZWF0ZX07Cn0KCnN1YiBfTWFza0VtYWlsTmV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFBhcmFte0Zvcm1JRH0gPSAkU2VsZi0+e0Zvcm1JRH07CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgbGlzdCB0eXBlCiAgICBteSAkVHJlZVZpZXcgPSAwOwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okxpc3RUeXBlJykgZXEgJ3RyZWUnICkgewogICAgICAgICRUcmVlVmlldyA9IDE7CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHNldCBKUyBkYXRhCiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ0N1c3RvbWVyU2VhcmNoJywKICAgICAgICBWYWx1ZSA9PiB7CiAgICAgICAgICAgIFNob3dDdXN0b21lclRpY2tldHMgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpTaG93Q3VzdG9tZXJUaWNrZXRzJyksCiAgICAgICAgfSwKICAgICk7CgogICAgaWYgKCAkUGFyYW17SGlkZUF1dG9zZWxlY3RlZH0gKSB7CgogICAgICAgICMgYWRkIEF1dG9zZWxlY3QgSlMKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU09uRG9jdW1lbnRDb21wbGV0ZSgKICAgICAgICAgICAgQ29kZSA9PiAiQ29yZS5Gb3JtLkluaXRIaWRlQXV0b3NlbGVjdGVkKHsgRmllbGRJRHM6ICRQYXJhbXtIaWRlQXV0b3NlbGVjdGVkfSB9KTsiLAogICAgICAgICk7CiAgICB9CgogICAgIyBidWlsZCBzdHJpbmcKICAgICRQYXJhbXtPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiAkUGFyYW17VXNlcnN9LAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17VXNlclNlbGVjdGVkfSwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZSBGb3JtVXBkYXRlJywKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ05ld1VzZXJJRCcsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICApOwoKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgYnVpbGQgbmV4dCBzdGF0ZXMgc3RyaW5nCiAgICAkUGFyYW17TmV4dFN0YXRlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgICA9PiAkUGFyYW17TmV4dFN0YXRlc30sCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnTmV4dFN0YXRlSUQnLAogICAgICAgIENsYXNzICAgICAgICAgPT4gJ01vZGVybml6ZSBGb3JtVXBkYXRlJywKICAgICAgICBUcmFuc2xhdGlvbiAgID0+IDEsCiAgICAgICAgU2VsZWN0ZWRWYWx1ZSA9PiAkUGFyYW17TmV4dFN0YXRlfSB8fCAkQ29uZmlnLT57U3RhdGVEZWZhdWx0fSwKICAgICk7CgogICAgIyBidWlsZCBEZXN0aW5hdGlvbiBzdHJpbmcKICAgIG15ICVOZXdUbzsKICAgIGlmICggJFBhcmFte0Zyb21MaXN0fSApIHsKICAgICAgICBmb3IgbXkgJEtleUZyb20gKCBzb3J0IGtleXMgJXsgJFBhcmFte0Zyb21MaXN0fSB9ICkgewogICAgICAgICAgICAkTmV3VG97IiRLZXlGcm9tfHwkUGFyYW17RnJvbUxpc3R9LT57JEtleUZyb219In0gPSAkUGFyYW17RnJvbUxpc3R9LT57JEtleUZyb219OwogICAgICAgIH0KICAgIH0KICAgIGlmICggISRQYXJhbXtGcm9tU2VsZWN0ZWR9ICkgewogICAgICAgIG15ICRVc2VyRGVmYXVsdFF1ZXVlID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpVc2VyRGVmYXVsdFF1ZXVlJykgfHwgJyc7CgogICAgICAgIGlmICgkVXNlckRlZmF1bHRRdWV1ZSkgewogICAgICAgICAgICBteSAkUXVldWVJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUxvb2t1cCggUXVldWUgPT4gJFVzZXJEZWZhdWx0UXVldWUgKTsKICAgICAgICAgICAgaWYgKCRRdWV1ZUlEKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17RnJvbVNlbGVjdGVkfSA9ICIkUXVldWVJRHx8JFVzZXJEZWZhdWx0UXVldWUiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZXdRdWV1ZVNlbGVjdGlvblR5cGUnKSBlcSAnUXVldWUnICkgewogICAgICAgICRQYXJhbXtGcm9tU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5BZ2VudFF1ZXVlTGlzdE9wdGlvbigKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ1ZhbGlkYXRlX1JlcXVpcmVkIE1vZGVybml6ZSBGb3JtVXBkYXRlICcgLiAoICRQYXJhbXtFcnJvcnN9LT57RGVzdGluYXRpb25JbnZhbGlkfSB8fCAnICcgKSwKICAgICAgICAgICAgRGF0YSAgICAgICAgICAgPT4gXCVOZXdUbywKICAgICAgICAgICAgTXVsdGlwbGUgICAgICAgPT4gMCwKICAgICAgICAgICAgU2l6ZSAgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0Rlc3QnLAogICAgICAgICAgICBUcmVlVmlldyAgICAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICAgID0+ICRQYXJhbXtGcm9tU2VsZWN0ZWR9LAogICAgICAgICAgICBPbkNoYW5nZVN1Ym1pdCA9PiAwLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkUGFyYW17RnJvbVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlTmV3VG8sCiAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdWYWxpZGF0ZV9SZXF1aXJlZCBNb2Rlcm5pemUgRm9ybVVwZGF0ZSAnIC4gKCAkUGFyYW17RXJyb3JzfS0+e0Rlc3RpbmF0aW9uSW52YWxpZH0gfHwgJyAnICksCiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdEZXN0JywKICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gJFRyZWVWaWV3LAogICAgICAgICAgICBUcmVlVmlldyAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtGcm9tU2VsZWN0ZWR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBjdXN0b21lciBpbmZvIHN0cmluZwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVySW5mb0NvbXBvc2UnKSApIHsKICAgICAgICAkUGFyYW17Q3VzdG9tZXJUYWJsZX0gPSAkTGF5b3V0T2JqZWN0LT5BZ2VudEN1c3RvbWVyVmlld1RhYmxlKAogICAgICAgICAgICBEYXRhID0+ICRQYXJhbXtDdXN0b21lckRhdGF9LAogICAgICAgICAgICBNYXggID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJJbmZvQ29tcG9zZU1heFNpemUnKSwKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDdXN0b21lclRhYmxlJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBwcmVwYXJlIGVycm9ycyEKICAgIGlmICggJFBhcmFte0Vycm9yc30gKSB7CiAgICAgICAgZm9yIG15ICRLZXlFcnJvciAoIHNvcnQga2V5cyAleyAkUGFyYW17RXJyb3JzfSB9ICkgewogICAgICAgICAgICAkUGFyYW17JEtleUVycm9yfSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFBhcmFte0Vycm9yc30tPnskS2V5RXJyb3J9ICk7CiAgICAgICAgfQogICAgfQoKICAgICMgRnJvbSBleHRlcm5hbAogICAgbXkgJFNob3dFcnJvcnMgPSAxOwogICAgaWYgKAogICAgICAgIGRlZmluZWQgJFBhcmFte0Zyb21FeHRlcm5hbEN1c3RvbWVyfSAmJgogICAgICAgIGRlZmluZWQgJFBhcmFte0Zyb21FeHRlcm5hbEN1c3RvbWVyfS0+e0VtYWlsfSAmJgogICAgICAgIGRlZmluZWQgJFBhcmFte0Zyb21FeHRlcm5hbEN1c3RvbWVyfS0+e0N1c3RvbWVyfQogICAgICAgICkKICAgIHsKICAgICAgICAkU2hvd0Vycm9ycyA9IDA7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0Zyb21FeHRlcm5hbEN1c3RvbWVyJywKICAgICAgICAgICAgRGF0YSA9PiAkUGFyYW17RnJvbUV4dGVybmFsQ3VzdG9tZXJ9LAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0RhdGFFbWFpbCcsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtGcm9tRXh0ZXJuYWxDdXN0b21lcn0tPntFbWFpbH0sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdEYXRhQ3VzdG9tZXInLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17RnJvbUV4dGVybmFsQ3VzdG9tZXJ9LT57Q3VzdG9tZXJ9LAogICAgICAgICk7CiAgICB9CgogICAgIyBDYwogICAgbXkgJEN1c3RvbWVyQ291bnRlckNjID0gMDsKICAgIGlmICggJFBhcmFte011bHRpcGxlQ3VzdG9tZXJDY30gKSB7CiAgICAgICAgZm9yIG15ICRJdGVtICggQHsgJFBhcmFte011bHRpcGxlQ3VzdG9tZXJDY30gfSApIHsKICAgICAgICAgICAgaWYgKCAhJFNob3dFcnJvcnMgKSB7CgogICAgICAgICAgICAgICAgIyBzZXQgZW1wdHkgdmFsdWVzIGZvciBlcnJvcnMKICAgICAgICAgICAgICAgICRJdGVtLT57Q3VzdG9tZXJFcnJvcn0gICAgPSAnJzsKICAgICAgICAgICAgICAgICRJdGVtLT57Q3VzdG9tZXJEaXNhYmxlZH0gPSAnJzsKICAgICAgICAgICAgICAgICRJdGVtLT57Q3VzdG9tZXJFcnJvck1zZ30gPSAnQ3VzdG9tZXJHZW5lcmljU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ2NNdWx0aXBsZUN1c3RvbWVyJywKICAgICAgICAgICAgICAgIERhdGEgPT4gJEl0ZW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ2MnIC4gJEl0ZW0tPntDdXN0b21lckVycm9yTXNnfSwKICAgICAgICAgICAgICAgIERhdGEgPT4gJEl0ZW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggJEl0ZW0tPntDdXN0b21lckVycm9yfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NjQ3VzdG9tZXJFcnJvckV4cGxhbmF0aW9uJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJEN1c3RvbWVyQ291bnRlckNjKys7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggISRDdXN0b21lckNvdW50ZXJDYyApIHsKICAgICAgICAkUGFyYW17Q2NDdXN0b21lckhpZGRlbkNvbnRhaW5lcn0gPSAnSGlkZGVuJzsKICAgIH0KCiAgICAjIHNldCBjdXN0b21lciBjb3VudGVyCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdDY011bHRpcGxlQ3VzdG9tZXJDb3VudGVyJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgQ3VzdG9tZXJDb3VudGVyID0+ICRDdXN0b21lckNvdW50ZXJDYysrLAogICAgICAgIH0sCiAgICApOwoKICAgICMgQmNjCiAgICBteSAkQ3VzdG9tZXJDb3VudGVyQmNjID0gMDsKICAgIGlmICggJFBhcmFte011bHRpcGxlQ3VzdG9tZXJCY2N9ICkgewogICAgICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtNdWx0aXBsZUN1c3RvbWVyQmNjfSB9ICkgewogICAgICAgICAgICBpZiAoICEkU2hvd0Vycm9ycyApIHsKCiAgICAgICAgICAgICAgICAjIHNldCBlbXB0eSB2YWx1ZXMgZm9yIGVycm9ycwogICAgICAgICAgICAgICAgJEl0ZW0tPntDdXN0b21lckVycm9yfSAgICA9ICcnOwogICAgICAgICAgICAgICAgJEl0ZW0tPntDdXN0b21lckRpc2FibGVkfSA9ICcnOwogICAgICAgICAgICAgICAgJEl0ZW0tPntDdXN0b21lckVycm9yTXNnfSA9ICdDdXN0b21lckdlbmVyaWNTZXJ2ZXJFcnJvck1zZyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdCY2NNdWx0aXBsZUN1c3RvbWVyJywKICAgICAgICAgICAgICAgIERhdGEgPT4gJEl0ZW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQmNjJyAuICRJdGVtLT57Q3VzdG9tZXJFcnJvck1zZ30sCiAgICAgICAgICAgICAgICBEYXRhID0+ICRJdGVtLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICRJdGVtLT57Q3VzdG9tZXJFcnJvcn0gKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdCY2NDdXN0b21lckVycm9yRXhwbGFuYXRpb24nLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkQ3VzdG9tZXJDb3VudGVyQmNjKys7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggISRDdXN0b21lckNvdW50ZXJCY2MgKSB7CiAgICAgICAgJFBhcmFte0JjY0N1c3RvbWVySGlkZGVuQ29udGFpbmVyfSA9ICdIaWRkZW4nOwogICAgfQoKICAgICMgc2V0IGN1c3RvbWVyIGNvdW50ZXIKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0JjY011bHRpcGxlQ3VzdG9tZXJDb3VudGVyJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgQ3VzdG9tZXJDb3VudGVyID0+ICRDdXN0b21lckNvdW50ZXJCY2MrKywKICAgICAgICB9LAogICAgKTsKCiAgICAjIFRvCiAgICBteSAkQ3VzdG9tZXJDb3VudGVyID0gMDsKICAgIGlmICggJFBhcmFte011bHRpcGxlQ3VzdG9tZXJ9ICkgewogICAgICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtNdWx0aXBsZUN1c3RvbWVyfSB9ICkgewogICAgICAgICAgICBpZiAoICEkU2hvd0Vycm9ycyApIHsKCiAgICAgICAgICAgICAgICAjIHNldCBlbXB0eSB2YWx1ZXMgZm9yIGVycm9ycwogICAgICAgICAgICAgICAgJEl0ZW0tPntDdXN0b21lckVycm9yfSAgICA9ICcnOwogICAgICAgICAgICAgICAgJEl0ZW0tPntDdXN0b21lckRpc2FibGVkfSA9ICcnOwogICAgICAgICAgICAgICAgJEl0ZW0tPntDdXN0b21lckVycm9yTXNnfSA9ICdDdXN0b21lckdlbmVyaWNTZXJ2ZXJFcnJvck1zZyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdNdWx0aXBsZUN1c3RvbWVyJywKICAgICAgICAgICAgICAgIERhdGEgPT4gJEl0ZW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAkSXRlbS0+e0N1c3RvbWVyRXJyb3JNc2d9LAogICAgICAgICAgICAgICAgRGF0YSA9PiAkSXRlbSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0N1c3RvbWVyRXJyb3J9ICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQ3VzdG9tZXJFcnJvckV4cGxhbmF0aW9uJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJEN1c3RvbWVyQ291bnRlcisrOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICEkQ3VzdG9tZXJDb3VudGVyICkgewogICAgICAgICRQYXJhbXtDdXN0b21lckhpZGRlbkNvbnRhaW5lcn0gPSAnSGlkZGVuJzsKICAgIH0KCiAgICAjIHNldCBjdXN0b21lciBjb3VudGVyCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNdWx0aXBsZUN1c3RvbWVyQ291bnRlcicsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEN1c3RvbWVyQ291bnRlciA9PiAkQ3VzdG9tZXJDb3VudGVyKyssCiAgICAgICAgfSwKICAgICk7CgogICAgaWYgKCAkUGFyYW17VG9JbnZhbGlkfSAmJiAkUGFyYW17RXJyb3JzfSAmJiAhJFBhcmFte0Vycm9yc30tPntUb0Vycm9yVHlwZX0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ1RvU2VydmVyRXJyb3JNc2cnICk7CiAgICB9CiAgICBpZiAoICRQYXJhbXtFcnJvcnN9LT57VG9FcnJvclR5cGV9IHx8ICEkU2hvd0Vycm9ycyApIHsKICAgICAgICAkUGFyYW17VG9JbnZhbGlkfSA9ICcnOwogICAgfQoKICAgIGlmICggJFBhcmFte0NjSW52YWxpZH0gJiYgJFBhcmFte0Vycm9yc30gJiYgISRQYXJhbXtFcnJvcnN9LT57Q2NFcnJvclR5cGV9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDY1NlcnZlckVycm9yTXNnJywKICAgICAgICApOwogICAgfQogICAgaWYgKCAkUGFyYW17RXJyb3JzfS0+e0NjRXJyb3JUeXBlfSB8fCAhJFNob3dFcnJvcnMgKSB7CiAgICAgICAgJFBhcmFte0NjSW52YWxpZH0gPSAnJzsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtCY2NJbnZhbGlkfSAmJiAkUGFyYW17RXJyb3JzfSAmJiAhJFBhcmFte0Vycm9yc30tPntCY2NFcnJvclR5cGV9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdCY2NTZXJ2ZXJFcnJvck1zZycsCiAgICAgICAgKTsKICAgIH0KICAgIGlmICggJFBhcmFte0Vycm9yc30tPntCY2NFcnJvclR5cGV9IHx8ICEkU2hvd0Vycm9ycyApIHsKICAgICAgICAkUGFyYW17QmNjSW52YWxpZH0gPSAnJzsKICAgIH0KCiAgICAjIGJ1aWxkIHR5cGUgc3RyaW5nCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpUeXBlJykgKSB7CiAgICAgICAgJFBhcmFte1R5cGVTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ1ZhbGlkYXRlX1JlcXVpcmVkIE1vZGVybml6ZSBGb3JtVXBkYXRlICcgLiAoICRQYXJhbXtFcnJvcnN9LT57VHlwZUludmFsaWR9IHx8ICcgJyApLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJFBhcmFte1R5cGVzfSwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdUeXBlSUQnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1R5cGVJRH0sCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBTb3J0ICAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0VHlwZScsCiAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIHNlcnZpY2Ugc3RyaW5nCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlJykgKSB7CgogICAgICAgICRQYXJhbXtTZXJ2aWNlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgPT4gJFBhcmFte1NlcnZpY2VzfSwKICAgICAgICAgICAgTmFtZSAgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgICAgIENsYXNzID0+ICdNb2Rlcm5pemUgRm9ybVVwZGF0ZSAnCiAgICAgICAgICAgICAgICAuICggJENvbmZpZy0+e1NlcnZpY2VNYW5kYXRvcnl9ID8gJ1ZhbGlkYXRlX1JlcXVpcmVkICcgOiAnJyApCiAgICAgICAgICAgICAgICAuICggJFBhcmFte0Vycm9yc30tPntTZXJ2aWNlSW52YWxpZH0gfHwgJycgKSwKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJlZVZpZXcgICAgID0+ICRUcmVlVmlldywKICAgICAgICAgICAgU29ydCAgICAgICAgID0+ICdUcmVlVmlldycsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAyMDAsCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0U2VydmljZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgU2VydmljZU1hbmRhdG9yeSA9PiAkQ29uZmlnLT57U2VydmljZU1hbmRhdG9yeX0gfHwgMCwKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkUGFyYW17U0xBU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICA9PiAkUGFyYW17U0xBc30sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ1NMQUlEJywKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17U0xBSUR9LAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUgRm9ybVVwZGF0ZSAnCiAgICAgICAgICAgICAgICAuICggJENvbmZpZy0+e1NMQU1hbmRhdG9yeX0gPyAnVmFsaWRhdGVfUmVxdWlyZWQgJyA6ICcnICkKICAgICAgICAgICAgICAgIC4gKCAkUGFyYW17RXJyb3JzfS0+e1NMQUludmFsaWR9IHx8ICcnICksCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBTb3J0ICAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAyMDAsCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0U0xBJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBTTEFNYW5kYXRvcnkgPT4gJENvbmZpZy0+e1NMQU1hbmRhdG9yeX0gfHwgMCwKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgaWYgZXhpc3RzIGNyZWF0ZSB0ZW1wbGF0ZXMgcmVnYXJkbGVzcyB0aGUgcXVldWUKICAgIG15ICVTdGFuZGFyZFRlbXBsYXRlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGFuZGFyZFRlbXBsYXRlJyktPlN0YW5kYXJkVGVtcGxhdGVMaXN0KAogICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgVHlwZSAgPT4gJ0NyZWF0ZScsCiAgICApOwoKICAgICMgYnVpbGQgdGV4dCB0ZW1wbGF0ZSBzdHJpbmcKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoIFwlU3RhbmRhcmRUZW1wbGF0ZXMgKSApIHsKICAgICAgICAkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZXN9IHx8IHt9LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1N0YW5kYXJkVGVtcGxhdGVJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSB8fCAnJywKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgU29ydCAgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICBNYXggICAgICAgICAgPT4gMjAwLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1N0YW5kYXJkVGVtcGxhdGUnLAogICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICk7CiAgICB9CgogICAgIyBidWlsZCBwcmlvcml0eSBzdHJpbmcKICAgIGlmICggISRQYXJhbXtQcmlvcml0eUlEfSApIHsKICAgICAgICAkUGFyYW17UHJpb3JpdHl9ID0gJENvbmZpZy0+e1ByaW9yaXR5fTsKICAgIH0KICAgICRQYXJhbXtQcmlvcml0eVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnTW9kZXJuaXplIEZvcm1VcGRhdGUnLAogICAgICAgIERhdGEgICAgICAgICAgPT4gJFBhcmFte1ByaW9yaXRpZXN9LAogICAgICAgIE5hbWUgICAgICAgICAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgIFNlbGVjdGVkSUQgICAgPT4gJFBhcmFte1ByaW9yaXR5SUR9LAogICAgICAgIFNlbGVjdGVkVmFsdWUgPT4gJFBhcmFte1ByaW9yaXR5fSwKICAgICAgICBUcmFuc2xhdGlvbiAgID0+IDEsCiAgICApOwoKICAgIG15ICRRdWlja0RhdGVCdXR0b25zID0gJENvbmZpZy0+e1F1aWNrRGF0ZUJ1dHRvbnN9IC8vICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6RGVmYXVsdFF1aWNrRGF0ZUJ1dHRvbnMnKTsKCiAgICAjIHBlbmRpbmcgZGF0YSBzdHJpbmcKICAgICRQYXJhbXtQZW5kaW5nRGF0ZVN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgJVBhcmFtLAogICAgICAgIEZvcm1hdCAgICAgICAgICAgICAgID0+ICdEYXRlSW5wdXRGb3JtYXRMb25nJywKICAgICAgICBZZWFyUGVyaW9kUGFzdCAgICAgICA9PiAwLAogICAgICAgIFllYXJQZXJpb2RGdXR1cmUgICAgID0+IDUsCiAgICAgICAgRGlmZlRpbWUgICAgICAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpQZW5kaW5nRGlmZlRpbWUnKSB8fCAwLAogICAgICAgIENsYXNzICAgICAgICAgICAgICAgID0+ICRQYXJhbXtFcnJvcnN9LT57RGF0ZUludmFsaWR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJyAnLAogICAgICAgIFZhbGlkYXRlICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVmFsaWRhdGVEYXRlSW5GdXR1cmUgPT4gMSwKICAgICAgICBRdWlja0RhdGVCdXR0b25zICAgICA9PiAkUXVpY2tEYXRlQnV0dG9ucywKICAgICk7CgogICAgIyBzaG93IG93bmVyIHNlbGVjdGlvbgogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok5ld093bmVyU2VsZWN0aW9uJykgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ093bmVyU2VsZWN0aW9uJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IHJlc3BvbnNpYmxlIHNlbGVjdGlvbgogICAgaWYgKAogICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpSZXNwb25zaWJsZScpCiAgICAgICAgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZXdSZXNwb25zaWJsZVNlbGVjdGlvbicpCiAgICAgICAgKQogICAgewogICAgICAgICRQYXJhbXtSZXNwb25zaWJsZVVzZXJzfS0+eycnfSA9ICctJzsKICAgICAgICAkUGFyYW17UmVzcG9uc2libGVPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgID0+ICRQYXJhbXtSZXNwb25zaWJsZVVzZXJzfSwKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17UmVzcG9uc2libGVVc2VyU2VsZWN0ZWR9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdOZXdSZXNwb25zaWJsZUlEJywKICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIEZvcm1VcGRhdGUnLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3BvbnNpYmxlU2VsZWN0aW9uJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyByZW5kZXIgZHluYW1pYyBmaWVsZHMKICAgICRQYXJhbXtEeW5hbWljRmllbGRIVE1MfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpEeW5hbWljRmllbGQ6Ok1hc2snKS0+RWRpdFNlY3Rpb25SZW5kZXIoCiAgICAgICAgQ29udGVudCAgICAgICAgICAgICAgPT4gJFNlbGYtPntNYXNrRGVmaW5pdGlvbn0sCiAgICAgICAgRHluYW1pY0ZpZWxkcyAgICAgICAgPT4gJFNlbGYtPntEeW5hbWljRmllbGR9LAogICAgICAgIExheW91dE9iamVjdCAgICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLAogICAgICAgIER5bmFtaWNGaWVsZFZhbHVlcyAgID0+ICRQYXJhbXtEeW5hbWljRmllbGR9LAogICAgICAgIFBvc3NpYmxlVmFsdWVzRmlsdGVyID0+ICRQYXJhbXtERlBvc3NpYmxlVmFsdWVzfSwKICAgICAgICBFcnJvcnMgICAgICAgICAgICAgICA9PiAkUGFyYW17REZFcnJvcnN9LAogICAgICAgIFZpc2liaWxpdHkgICAgICAgICAgID0+ICRQYXJhbXtWaXNpYmlsaXR5fSwKICAgICAgICBPYmplY3QgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgIEN1c3RvbWVySUQgICAgID0+ICRQYXJhbXtDdXN0b21lcklEfSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFBhcmFte0N1c3RvbWVyVXNlcn0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgJFBhcmFte0R5bmFtaWNGaWVsZH0tPiUqLAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvdyB0aW1lIGFjY291bnRpbmcgYm94CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWNjb3VudFRpbWUnKSApIHsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmVlZEFjY291bnRlZFRpbWUnKSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUaW1lVW5pdHNMYWJlbE1hbmRhdG9yeScsCiAgICAgICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpbWVVbml0c0xhYmVsJywKICAgICAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpbWVVbml0cycsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgU2hvdyB0aGUgY3VzdG9tZXIgdXNlciBhZGRyZXNzIGJvb2sgaWYgdGhlIG1vZHVsZSBpcyByZWdpc3RlcmVkLgogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+e0FnZW50Q3VzdG9tZXJVc2VyQWRkcmVzc0Jvb2t9ICkgewogICAgICAgICRQYXJhbXtPcHRpb25DdXN0b21lclVzZXJBZGRyZXNzQm9va30gPSAxOwogICAgfQoKICAgICMgc2hvdyBjdXN0b21lciBlZGl0IGxpbmsKICAgIG15ICRPcHRpb25DdXN0b21lciA9ICRMYXlvdXRPYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgQWN0aW9uID0+ICdBZG1pbkN1c3RvbWVyVXNlcicsCiAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICApOwoKICAgIG15ICRTaG93bk9wdGlvbnNCbG9jazsKCiAgICBpZiAoJE9wdGlvbkN1c3RvbWVyKSB7CgogICAgICAgICMgY2hlY2sgaWYgbmVlZCB0byBjYWxsIE9wdGlvbnMgYmxvY2sKICAgICAgICBpZiAoICEkU2hvd25PcHRpb25zQmxvY2sgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0T3B0aW9ucycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgZmxhZyB0byAidHJ1ZSIgaW4gb3JkZXIgdG8gcHJldmVudCBjYWxsaW5nIHRoZSBPcHRpb25zIGJsb2NrIGFnYWluCiAgICAgICAgICAgICRTaG93bk9wdGlvbnNCbG9jayA9IDE7CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3B0aW9uQ3VzdG9tZXInLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBhdHRhY2htZW50cwogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkQXR0YWNobWVudCAoIEB7ICRQYXJhbXtBdHRhY2htZW50c30gfSApIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgICRBdHRhY2htZW50LT57Q29udGVudElEfQogICAgICAgICAgICAmJiAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fQogICAgICAgICAgICAmJiAoICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9ID1+IC9pbWFnZS9pICkKICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0Rpc3Bvc2l0aW9ufSBlcSAnaW5saW5lJyApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICB9CgogICAgICAgIHB1c2ggQHsgJFBhcmFte0F0dGFjaG1lbnRMaXN0fSB9LCAkQXR0YWNobWVudDsKICAgIH0KCiAgICAjIGFkZCByaWNoIHRleHQgZWRpdG9yCiAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewoKICAgICAgICAjIHVzZSBoZWlnaHQvd2lkdGggZGVmaW5lZCBmb3IgdGhpcyBzY3JlZW4KICAgICAgICAkUGFyYW17UmljaFRleHRIZWlnaHR9ID0gJENvbmZpZy0+e1JpY2hUZXh0SGVpZ2h0fSB8fCAwOwogICAgICAgICRQYXJhbXtSaWNoVGV4dFdpZHRofSAgPSAkQ29uZmlnLT57UmljaFRleHRXaWR0aH0gIHx8IDA7CgogICAgICAgICMgc2V0IHVwIHJpY2ggdGV4dCBlZGl0b3IKICAgICAgICAkTGF5b3V0T2JqZWN0LT5TZXRSaWNoVGV4dFBhcmFtZXRlcnMoCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgZXhwbGFuYXRvcnkgbWVzc2FnZSBhYm91dCBhc3RlcmlzawogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFzdGVyaXNrRXhwbGFuYXRpb24nKSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXN0ZXJpc2tFeHBsYW5hdGlvbicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBvdXRwdXQgYmFjawogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0RW1haWwnLAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtCiAgICApOwp9CgoxOwo=</File>
        <File Location="Kernel/Modules/AgentTicketPhone.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBjM2JjNmEyYzA4ZDdiN2I3YzI0YzYwOGMyNWJmNmViNDg5NzcxMDM0IC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRQaG9uZS5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRUaWNrZXRQaG9uZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZnJvbnRlbmQgc3BlY2lmaWMgY29uZmlnCiAgICBteSAkQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsgJ1RpY2tldCcsICdBcnRpY2xlJyBdLAogICAgICAgIEZpZWxkRmlsdGVyID0+ICRDb25maWctPntEeW5hbWljRmllbGR9IHx8IHt9LAogICAgKTsKCiAgICBteSAkRGVmaW5pdGlvbiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6Ok1hc2snKS0+RGVmaW5pdGlvbkdldCgKICAgICAgICBNYXNrID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICkgfHwge307CgogICAgJFNlbGYtPntNYXNrRGVmaW5pdGlvbn0gPSAkRGVmaW5pdGlvbi0+e01hc2t9OwogICAgJFNlbGYtPntEeW5hbWljRmllbGR9ICAgPSB7fTsKCiAgICAjIGFsaWduIHN5c2NvbmZpZyBhbmQgdGlja2V0IG1hc2sgZGF0YSBJCiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7ICREeW5hbWljRmllbGRMaXN0IC8vIFtdIH0gKSB7CiAgICAgICAgaWYgKCBleGlzdHMgJERlZmluaXRpb24tPntEeW5hbWljRmllbGRzfXsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gKSB7CiAgICAgICAgICAgIG15ICRQYXJhbWV0ZXJzID0gZGVsZXRlICREZWZpbml0aW9uLT57RHluYW1pY0ZpZWxkc317ICREeW5hbWljRmllbGQtPntOYW1lfSB9IC8vIHt9OwoKICAgICAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBrZXlzICRQYXJhbWV0ZXJzLT4lKiApIHsKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGQtPnskQXR0cmlidXRlfSA9ICRQYXJhbWV0ZXJzLT57JEF0dHJpYnV0ZX07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHB1c2ggJFNlbGYtPntNYXNrRGVmaW5pdGlvbn0tPkAqLCB7CiAgICAgICAgICAgICAgICBERiAgICAgICAgPT4gJER5bmFtaWNGaWVsZC0+e05hbWV9LAogICAgICAgICAgICAgICAgTWFuZGF0b3J5ID0+ICRDb25maWctPntEeW5hbWljRmllbGR9eyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSA9PSAyID8gMSA6IDAsCiAgICAgICAgICAgIH07CgogICAgICAgICAgICBpZiAoICRDb25maWctPntEeW5hbWljRmllbGR9eyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSA9PSAyICkgewogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZC0+e01hbmRhdG9yeX0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZH17ICREeW5hbWljRmllbGQtPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZDsKICAgIH0KCiAgICAjIGFsaWduIHN5c2NvbmZpZyBhbmQgdGlja2V0IG1hc2sgZGF0YSBJSQogICAgZm9yIG15ICREeW5hbWljRmllbGROYW1lICgga2V5cyAkRGVmaW5pdGlvbi0+e0R5bmFtaWNGaWVsZHN9LT4lKiApIHsKICAgICAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZH17JER5bmFtaWNGaWVsZE5hbWV9ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICBOYW1lID0+ICREeW5hbWljRmllbGROYW1lLAogICAgICAgICk7CgogICAgICAgIG15ICRQYXJhbWV0ZXJzID0gJERlZmluaXRpb24tPntEeW5hbWljRmllbGRzfXskRHluYW1pY0ZpZWxkTmFtZX0gLy8ge307CgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICgga2V5cyAkUGFyYW1ldGVycy0+JSogKSB7CiAgICAgICAgICAgICRTZWxmLT57RHluYW1pY0ZpZWxkfXskRHluYW1pY0ZpZWxkTmFtZX17JEF0dHJpYnV0ZX0gPSAkUGFyYW1ldGVycy0+eyRBdHRyaWJ1dGV9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBmb3JtIGlkCiAgICAkU2VsZi0+e0Zvcm1JRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpGb3JtQ2FjaGUnKS0+UHJlcGFyZUZvcm1JRCgKICAgICAgICBQYXJhbU9iamVjdCAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLAogICAgICAgIExheW91dE9iamVjdCA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyksCiAgICApOwoKICAgICMgbWV0aG9kcyB3aGljaCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgc3RhbmRhcmQgZmllbGRzCiAgICAkU2VsZi0+e0ZpZWxkTWV0aG9kc30gPSBbCiAgICAgICAgewogICAgICAgICAgICBGaWVsZElEID0+ICdEZXN0JywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRUb3MKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnTmV3VXNlcklEJywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRVc2VycwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBGaWVsZElEID0+ICdOZXdSZXNwb25zaWJsZUlEJywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRSZXNwb25zaWJsZXMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnTmV4dFN0YXRlSUQnLAogICAgICAgICAgICBNZXRob2QgID0+IFwmX0dldE5leHRTdGF0ZXMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgICAgIE1ldGhvZCAgPT4gXCZfR2V0UHJpb3JpdGllcwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBGaWVsZElEID0+ICdTZXJ2aWNlSUQnLAogICAgICAgICAgICBNZXRob2QgID0+IFwmX0dldFNlcnZpY2VzCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEZpZWxkSUQgPT4gJ1NMQUlEJywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRTTEFzCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEZpZWxkSUQgPT4gJ1N0YW5kYXJkVGVtcGxhdGVJRCcsCiAgICAgICAgICAgIE1ldGhvZCAgPT4gXCZfR2V0U3RhbmRhcmRUZW1wbGF0ZXMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnVHlwZUlEJywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRUeXBlcwogICAgICAgIH0sCiAgICBdOwoKICAgICMgZGVwZW5kZW5jaWVzIG9mIHN0YW5kYXJkIGZpZWxkcyB3aGljaCBhcmUgbm90IGRlZmluZWQgdmlhIEFDTHMKICAgICRTZWxmLT57SW50ZXJuYWxEZXBlbmRhbmN5fSA9IHsKICAgICAgICBEZXN0ID0+IHsKICAgICAgICAgICAgTmV3VXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE5ld1Jlc3BvbnNpYmxlSUQgICA9PiAxLAogICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gMSwKICAgICAgICB9LAogICAgICAgIFNlcnZpY2VJRCA9PiB7CiAgICAgICAgICAgIFNMQUlEICAgICA9PiAxLAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gMSwgICAgI0N1c3RvbWVyVXNlciB1cGRhdGVzIGNhbiBiZSBzdWJtaXR0ZWQgYXMgRWxlbWVudENoYW5nZWQ6IFNlcnZpY2VJRAogICAgICAgIH0sCiAgICAgICAgQ3VzdG9tZXJVc2VyID0+IHsKICAgICAgICAgICAgU2VydmljZUlEID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPd25lckFsbCA9PiB7CiAgICAgICAgICAgIE5ld1VzZXJJRCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgUmVzcG9uc2libGVBbGwgPT4gewogICAgICAgICAgICBOZXdSZXNwb25zaWJsZUlEID0+IDEsCiAgICAgICAgfSwKICAgIH07CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJEVtYWlsQWRkcmVzc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbWFpbEFkZHJlc3MnKTsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkS2V5ICgKICAgICAgICBxdyhBcnRpY2xlSUQgTGlua1RpY2tldElEIFByaW9yaXR5SUQgTmV3VXNlcklECiAgICAgICAgRnJvbSBTdWJqZWN0IEJvZHkgTmV4dFN0YXRlSUQgVGltZVVuaXRzCiAgICAgICAgWWVhciBNb250aCBEYXkgSG91ciBNaW51dGUKICAgICAgICBOZXdSZXNwb25zaWJsZUlEIFJlc3BvbnNpYmxlQWxsIE93bmVyQWxsIFR5cGVJRCBTZXJ2aWNlSUQgU0xBSUQKICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgRnJvbUNoYXRJRCBEZXN0CiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICAkR2V0UGFyYW17JEtleX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkS2V5ICk7CiAgICB9CgogICAgIyBBQ0wgY29tcGF0aWJpbGl0eSB0cmFuc2xhdGlvbgogICAgbXkgJUFDTENvbXBhdEdldFBhcmFtOwogICAgJEFDTENvbXBhdEdldFBhcmFte093bmVySUR9ID0gJEdldFBhcmFte05ld1VzZXJJRH07CgogICAgIyBoYXNoIGZvciBjaGVjayBkdXBsaWNhdGVkIGVudHJpZXMKICAgIG15ICVBZGRyZXNzZXNMaXN0OwoKICAgICMgTXVsdGlwbGVDdXN0b21lciBGcm9tLWZpZWxkCiAgICBteSBATXVsdGlwbGVDdXN0b21lcjsKICAgIG15ICRDdXN0b21lcnNOdW1iZXJGcm9tID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyVGlja2V0Q291bnRlckZyb21DdXN0b21lcicgKSB8fCAwOwogICAgbXkgJFNlbGVjdGVkICAgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ3VzdG9tZXJTZWxlY3RlZCcgKSAgICAgICAgICAgICAgICAgIHx8ICcnOwoKICAgICMgZ2V0IGNoZWNrIGl0ZW0gb2JqZWN0CiAgICBteSAkQ2hlY2tJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpOwoKICAgIGlmICgkQ3VzdG9tZXJzTnVtYmVyRnJvbSkgewogICAgICAgIG15ICRDdXN0b21lckNvdW50ZXIgPSAxOwoKICAgICAgICBDT1VOVDoKICAgICAgICBmb3IgbXkgJENvdW50ICggMSAuLiAkQ3VzdG9tZXJzTnVtYmVyRnJvbSApIHsKICAgICAgICAgICAgbGFzdCBDT1VOVCBpZiAkQ291bnQgPiAxXzAwMDsgICAgIyBiYWlsIG91dCB3aGVuIHRoZSBudW1iZXIgb2YgY3VzdG9tZXJzIGlzIGFibm9ybWFsbHkgaGlnaAoKICAgICAgICAgICAgbXkgJEN1c3RvbWVyRWxlbWVudCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDdXN0b21lclRpY2tldFRleHRfJyAuICRDb3VudCApOwoKICAgICAgICAgICAgbmV4dCBDT1VOVCB1bmxlc3MgJEN1c3RvbWVyRWxlbWVudDsKCiAgICAgICAgICAgIG15ICRDdXN0b21lclNlbGVjdGVkID0gKCAkU2VsZWN0ZWQgZXEgJENvdW50ID8gJ2NoZWNrZWQgJyA6ICcnICk7CiAgICAgICAgICAgIG15ICRDdXN0b21lcktleSAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyS2V5XycgLiAkQ291bnQgKSB8fCAnJzsKCiAgICAgICAgICAgIG15ICRDb3VudEF1eCAgICAgICAgID0gJEN1c3RvbWVyQ291bnRlcisrOwogICAgICAgICAgICBteSAkQ3VzdG9tZXJFcnJvciAgICA9ICcnOwogICAgICAgICAgICBteSAkQ3VzdG9tZXJFcnJvck1zZyA9ICdDdXN0b21lckdlbmVyaWNTZXJ2ZXJFcnJvck1zZyc7CiAgICAgICAgICAgIG15ICRDdXN0b21lckRpc2FibGVkID0gJyc7CgogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtGcm9tfSApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtGcm9tfSAuPSAnLCAnIC4gJEN1c3RvbWVyRWxlbWVudDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtGcm9tfSA9ICRDdXN0b21lckVsZW1lbnQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgZW1haWwgYWRkcmVzcwogICAgICAgICAgICBmb3IgbXkgJEVtYWlsICggJEVtYWlsQWRkcmVzc09iamVjdC0+UGFyc2VBZGRyZXNzTGluZSggTGluZSA9PiAkQ3VzdG9tZXJFbGVtZW50ICkgKSB7CiAgICAgICAgICAgICAgICBpZiAoICEkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0VtYWlsKCBBZGRyZXNzT2JqZWN0ID0+ICRFbWFpbCApICkgewogICAgICAgICAgICAgICAgICAgICRDdXN0b21lckVycm9yTXNnID0gJENoZWNrSXRlbU9iamVjdC0+Q2hlY2tFcnJvclR5cGUoKQogICAgICAgICAgICAgICAgICAgICAgICAuICdTZXJ2ZXJFcnJvck1zZyc7CiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyRXJyb3IgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGZvciBkdXBsaWNhdGVkIGVudHJpZXMKICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRBZGRyZXNzZXNMaXN0eyRDdXN0b21lckVsZW1lbnR9ICYmICRDdXN0b21lckVycm9yIGVxICcnICkgewogICAgICAgICAgICAgICAgJEN1c3RvbWVyRXJyb3JNc2cgPSAnSXNEdXBsaWNhdGVkU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgJEN1c3RvbWVyRXJyb3IgICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRDdXN0b21lckVycm9yIG5lICcnICkgewogICAgICAgICAgICAgICAgJEN1c3RvbWVyRGlzYWJsZWQgPSAnZGlzYWJsZWQnOwogICAgICAgICAgICAgICAgJENvdW50QXV4ICAgICAgICAgPSAkQ291bnQgLiAnRXJyb3InOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwdXNoIEBNdWx0aXBsZUN1c3RvbWVyLCB7CiAgICAgICAgICAgICAgICBDb3VudCAgICAgICAgICAgID0+ICRDb3VudEF1eCwKICAgICAgICAgICAgICAgIEN1c3RvbWVyRWxlbWVudCAgPT4gJEN1c3RvbWVyRWxlbWVudCwKICAgICAgICAgICAgICAgIEN1c3RvbWVyU2VsZWN0ZWQgPT4gJEN1c3RvbWVyU2VsZWN0ZWQsCiAgICAgICAgICAgICAgICBDdXN0b21lcktleSAgICAgID0+ICRDdXN0b21lcktleSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyRXJyb3IgICAgPT4gJEN1c3RvbWVyRXJyb3IsCiAgICAgICAgICAgICAgICBDdXN0b21lckVycm9yTXNnID0+ICRDdXN0b21lckVycm9yTXNnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJEaXNhYmxlZCA9PiAkQ3VzdG9tZXJEaXNhYmxlZCwKICAgICAgICAgICAgfTsKICAgICAgICAgICAgJEFkZHJlc3Nlc0xpc3R7JEN1c3RvbWVyRWxlbWVudH0gPSAxOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBEeW5hbWljIGZpZWxkcyBmb3JtIFBhcmFtT2JqZWN0CiAgICBteSAlRHluYW1pY0ZpZWxkVmFsdWVzOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJEN1c3RvbWVyVXNlck9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7CiAgICBteSAkVXBsb2FkQ2FjaGVPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyk7CiAgICBteSAkVGlja2V0T2JqZWN0ICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgIG15ICRRdWV1ZU9iamVjdCAgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiAgICBteSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkZpZWxkUmVzdHJpY3Rpb25zJyk7CgogICAgIyBmcm9udGVuZCBzcGVjaWZpYyBjb25maWcKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUgLSBjYWxjdWxhdGUgUHJpb3JpdHkgdmlhIENJUCBtYXRyaXgKICAgIG15ICRDSVBDYWxjdWxhdGUgPSAkQ29uZmlnLT57UHJpb3JpdHlCeUNJUH0gLy8gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNOjpGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQnKTsKICAgIG15ICRTZXJ2aWNlT2JqZWN0OwogICAgbXkgJENJUEFsbG9jYXRlT2JqZWN0OwogICAgaWYgKCAkQ0lQQ2FsY3VsYXRlICkgewogICAgICAgICRTZXJ2aWNlT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CiAgICAgICAgJENJUEFsbG9jYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpOwoKICAgICAgICAkU2VsZi0+e0ludGVybmFsRGVwZW5kYW5jeX17U2VydmljZUlEfXtQcmlvcml0eUlEfSAgICAgICAgICAgICAgICAgICAgPSAxOwogICAgICAgICRTZWxmLT57SW50ZXJuYWxEZXBlbmRhbmN5fXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH17UHJpb3JpdHlJRH0gICAgICA9IDE7CiAgICAgICAgJFNlbGYtPntJbnRlcm5hbERlcGVuZGFuY3l9e0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9e1ByaW9yaXR5SUR9ID0gMTsKICAgIH0KIyBFTyBJVFNNQ29yZQoKICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCB2YWx1ZXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKiApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZXh0cmFjdCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIHRoZSB3ZWIgcmVxdWVzdAogICAgICAgICREeW5hbWljRmllbGRWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFZhbHVlR2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNvbnZlcnQgZHluYW1pYyBmaWVsZCB2YWx1ZXMgaW50byBhIHN0cnVjdHVyZSBmb3IgQUNMcwogICAgbXkgJUR5bmFtaWNGaWVsZEFDTFBhcmFtZXRlcnM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIHNvcnQga2V5cyAlRHluYW1pY0ZpZWxkVmFsdWVzICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFkZWZpbmVkICREeW5hbWljRmllbGRWYWx1ZXN7JER5bmFtaWNGaWVsZH07CgogICAgICAgICREeW5hbWljRmllbGRBQ0xQYXJhbWV0ZXJzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkIH0gPSAkRHluYW1pY0ZpZWxkVmFsdWVzeyREeW5hbWljRmllbGR9OwogICAgfQogICAgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gPSBcJUR5bmFtaWNGaWVsZEFDTFBhcmFtZXRlcnM7CgogICAgIyB0cmFuc2Zvcm0gcGVuZGluZyB0aW1lLCB0aW1lIHN0YW1wIGJhc2VkIG9uIHVzZXIgdGltZSB6b25lCiAgICBpZiAoCiAgICAgICAgZGVmaW5lZCAkR2V0UGFyYW17WWVhcn0KICAgICAgICAmJiBkZWZpbmVkICRHZXRQYXJhbXtNb250aH0KICAgICAgICAmJiBkZWZpbmVkICRHZXRQYXJhbXtEYXl9CiAgICAgICAgJiYgZGVmaW5lZCAkR2V0UGFyYW17SG91cn0KICAgICAgICAmJiBkZWZpbmVkICRHZXRQYXJhbXtNaW51dGV9CiAgICAgICAgKQogICAgewogICAgICAgICVHZXRQYXJhbSA9ICRMYXlvdXRPYmplY3QtPlRyYW5zZm9ybURhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJEdldFBhcmFte0Zyb21DaGF0SUR9ICkgewogICAgICAgIGlmICggISRDb25maWdPYmplY3QtPkdldCgnQ2hhdEVuZ2luZTo6QWN0aXZlJykgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0NoYXQgaXMgbm90IGFjdGl2ZS4nKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgT2ssIHRha2UgdGhlIGNoYXQKICAgICAgICBteSAlQ2hhdFBhcnRpY2lwYW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoYXQnKS0+Q2hhdFBhcnRpY2lwYW50Q2hlY2soCiAgICAgICAgICAgIENoYXRJRCAgICAgICAgPT4gJEdldFBhcmFte0Zyb21DaGF0SUR9LAogICAgICAgICAgICBDaGF0dGVyVHlwZSAgID0+ICdVc2VyJywKICAgICAgICAgICAgQ2hhdHRlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIENoYXR0ZXJBY3RpdmUgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoICElQ2hhdFBhcnRpY2lwYW50ICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBwZXJtaXNzaW9uLicpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBHZXQgcGVybWlzc2lvbnMKICAgICAgICBteSAkUGVybWlzc2lvbkxldmVsID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoYXQnKS0+Q2hhdFBlcm1pc3Npb25MZXZlbEdldCgKICAgICAgICAgICAgQ2hhdElEID0+ICRHZXRQYXJhbXtGcm9tQ2hhdElEfSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIENoZWNrIGlmIG9ic2VydmVyCiAgICAgICAgaWYgKCAkUGVybWlzc2lvbkxldmVsIG5lICdPd25lcicgJiYgJFBlcm1pc3Npb25MZXZlbCBuZSAnUGFydGljaXBhbnQnICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBwZXJtaXNzaW9uLicpLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAkUGVybWlzc2lvbkxldmVsLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICEkU2VsZi0+e1N1YmFjdGlvbn0gfHwgJFNlbGYtPntTdWJhY3Rpb259IGVxICdDcmVhdGVkJyApIHsKICAgICAgICBteSAlVGlja2V0OwogICAgICAgIGlmICggJFNlbGYtPntUaWNrZXRJRH0gKSB7CiAgICAgICAgICAgICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9ICk7CiAgICAgICAgfQoKICAgICAgICAjIGhlYWRlciBhbmQgbmF2aWdhdGlvbiBiYXIKICAgICAgICBteSAkT3V0cHV0ID0gam9pbiAnJywKICAgICAgICAgICAgJExheW91dE9iamVjdC0+SGVhZGVyKCksCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBpZiB0aGVyZSBpcyBubyB0aWNrZXQgaWQhCiAgICAgICAgaWYgKCAkU2VsZi0+e1RpY2tldElEfSAmJiAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NyZWF0ZWQnICkgewoKICAgICAgICAgICAgIyBub3RpZnkgaW5mbwogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSgKICAgICAgICAgICAgICAgIEluZm8gPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICdUaWNrZXQgIiVzIiBjcmVhdGVkIScsCiAgICAgICAgICAgICAgICAgICAgJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIExpbmsgPT4gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JwogICAgICAgICAgICAgICAgICAgIC4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHN0b3JlIGxhc3QgcXVldWUgc2NyZWVuCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e0xhc3RTY3JlZW5PdmVydmlld30KICAgICAgICAgICAgJiYgJFNlbGYtPntMYXN0U2NyZWVuT3ZlcnZpZXd9ICF+IC9BY3Rpb249QWdlbnRUaWNrZXRQaG9uZS8KICAgICAgICAgICAgJiYgJFNlbGYtPntSZXF1ZXN0ZWRVUkx9ICAgICAgICF+IC9BY3Rpb249QWdlbnRUaWNrZXRQaG9uZS4qTGlua1RpY2tldElEPS8KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyktPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc3BsaXQgYXJ0aWNsZSBpZiBnaXZlbgogICAgICAgICMgZ2V0IEFydGljbGVJRAogICAgICAgIG15ICVBcnRpY2xlOwogICAgICAgIG15ICVDdXN0b21lckRhdGE7CiAgICAgICAgbXkgJEFydGljbGVGcm9tID0gJyc7CiAgICAgICAgbXkgJVNwbGl0VGlja2V0RGF0YTsKICAgICAgICBpZiAoICRHZXRQYXJhbXtBcnRpY2xlSUR9ICkgewoKICAgICAgICAgICAgbXkgJEFjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAncm8nLAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gVHJhbnNsYXRhYmxlKCdZb3UgbmVlZCBybyBwZXJtaXNzaW9uIScpLAogICAgICAgICAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEdldCBpbmZvcm1hdGlvbiBmcm9tIG9yaWdpbmFsIHRpY2tldCAoU3BsaXRUaWNrZXQpLgogICAgICAgICAgICAlU3BsaXRUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkR2V0UGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICVBcnRpY2xlID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRHZXRQYXJhbXtBcnRpY2xlSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBpZiBhcnRpY2xlIGlzIGZyb20gdGhlIHNhbWUgVGlja2V0SUQgYXMgd2UgY2hlY2tlZCBwZXJtaXNzaW9ucyBmb3IuCiAgICAgICAgICAgIGlmICggJEFydGljbGV7VGlja2V0SUR9IG5lICRTZWxmLT57VGlja2V0SUR9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAnQXJ0aWNsZSBkb2VzIG5vdCBiZWxvbmcgdG8gdGlja2V0ICVzIScsICRTZWxmLT57VGlja2V0SUR9CiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRBcnRpY2xle1N1YmplY3R9ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3ViamVjdENsZWFuKAogICAgICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICA9PiAkQXJ0aWNsZXtTdWJqZWN0fSB8fCAnJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2F2ZSBhcnRpY2xlIGZyb20gZm9yIGFkZHJlc3NlcyBsaXN0CiAgICAgICAgICAgICRBcnRpY2xlRnJvbSA9ICRBcnRpY2xle0Zyb219OwoKICAgICAgICAgICAgIyBpZiBUbyBpcyBwcmVzZW50CiAgICAgICAgICAgICMgYW5kIGlzIG5vIGEgcXVldWUKICAgICAgICAgICAgIyBhbmQgYWxzbyBpcyBubyBhIHN5c3RlbSBhZGRyZXNzCiAgICAgICAgICAgICMgc2V0IFRvIGFzIGFydGljbGUgZnJvbQogICAgICAgICAgICBpZiAoIElzU3RyaW5nV2l0aERhdGEoICRBcnRpY2xle1RvfSApICkgewogICAgICAgICAgICAgICAgbXkgJVF1ZXVlcyA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0KCk7CgogICAgICAgICAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT57Q3VzdG9tZXJQYW5lbE93blNlbGVjdGlvbn0gKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRRdWV1ZSAoIHNvcnQga2V5cyAleyAkQ29uZmlnT2JqZWN0LT57Q3VzdG9tZXJQYW5lbE93blNlbGVjdGlvbn0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFZhbHVlID0gJENvbmZpZ09iamVjdC0+e0N1c3RvbWVyUGFuZWxPd25TZWxlY3Rpb259LT57JFF1ZXVlfTsKICAgICAgICAgICAgICAgICAgICAgICAgJFF1ZXVlc3skUXVldWV9ID0gJFZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAlUXVldWVMb29rdXAgICAgICAgICA9IHJldmVyc2UgJVF1ZXVlczsKICAgICAgICAgICAgICAgIG15ICVTeXN0ZW1BZGRyZXNzTG9va3VwID0gcmV2ZXJzZSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcycpLT5TeXN0ZW1BZGRyZXNzTGlzdCgpOwogICAgICAgICAgICAgICAgbXkgJFN5c3RlbUFkZHJlc3NFbWFpbDsKCiAgICAgICAgICAgICAgICBpZiAoJEFydGljbGVGcm9tKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgKCRBcnRpY2xlRnJvbUFkZHJlc3MpID0gJEVtYWlsQWRkcmVzc09iamVjdC0+UGFyc2VBZGRyZXNzTGluZSggTGluZSA9PiAkQXJ0aWNsZUZyb20gKTsKICAgICAgICAgICAgICAgICAgICAkU3lzdGVtQWRkcmVzc0VtYWlsID0gJEVtYWlsQWRkcmVzc09iamVjdC0+R2V0QWRkcmVzcyggQWRkcmVzc09iamVjdCA9PiAkQXJ0aWNsZUZyb21BZGRyZXNzICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkUXVldWVMb29rdXB7ICRBcnRpY2xle1RvfSB9ICYmIGRlZmluZWQgJFN5c3RlbUFkZHJlc3NMb29rdXB7JFN5c3RlbUFkZHJlc3NFbWFpbH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEFydGljbGVGcm9tID0gJEFydGljbGV7VG99OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGJvZHkgcHJlcGFyYXRpb24gZm9yIHBsYWluIHRleHQgcHJvY2Vzc2luZwogICAgICAgICAgICAkQXJ0aWNsZXtCb2R5fSA9ICRMYXlvdXRPYmplY3QtPkFydGljbGVRdW90ZSgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICA9PiAkQXJ0aWNsZXtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgPT4gJEdldFBhcmFte0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgVXBsb2FkQ2FjaGVPYmplY3QgID0+ICRVcGxvYWRDYWNoZU9iamVjdCwKICAgICAgICAgICAgICAgIEF0dGFjaG1lbnRzSW5jbHVkZSA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICAgICAgJEFydGljbGV7Q29udGVudFR5cGV9ID0gJ3RleHQvaHRtbCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkQXJ0aWNsZXtDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICVTYWZldHlDaGVja1Jlc3VsdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+U2FmZXR5KAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRBcnRpY2xle0JvZHl9LAoKICAgICAgICAgICAgICAgICMgU3RyaXAgb3V0IGV4dGVybmFsIGNvbnRlbnQgaWYgQmxvY2tMb2FkaW5nUmVtb3RlQ29udGVudCBpcyBlbmFibGVkLgogICAgICAgICAgICAgICAgTm9FeHRTcmNMb2FkID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QmxvY2tMb2FkaW5nUmVtb3RlQ29udGVudCcpLAoKICAgICAgICAgICAgICAgICMgRGlzYWxsb3cgcG90ZW50aWFsbHkgdW5zYWZlIGNvbnRlbnQuCiAgICAgICAgICAgICAgICBOb0FwcGxldCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIE5vT2JqZWN0ICAgICA9PiAxLAogICAgICAgICAgICAgICAgTm9FbWJlZCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBOb1NWRyAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIE5vSmF2YVNjcmlwdCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkQXJ0aWNsZXtCb2R5fSA9ICRTYWZldHlDaGVja1Jlc3VsdHtTdHJpbmd9OwoKICAgICAgICAgICAgIyBzaG93IGN1c3RvbWVyIGluZm8KICAgICAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVySW5mb0NvbXBvc2UnKSApIHsKICAgICAgICAgICAgICAgIGlmICggJFNwbGl0VGlja2V0RGF0YXtDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJUN1c3RvbWVyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gJFNwbGl0VGlja2V0RGF0YXtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFNwbGl0VGlja2V0RGF0YXtDdXN0b21lcklEfSApIHsKICAgICAgICAgICAgICAgICAgICAlQ3VzdG9tZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAkU3BsaXRUaWNrZXREYXRhe0N1c3RvbWVySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkU3BsaXRUaWNrZXREYXRhe0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAgICAgICAgIG15ICVDdXN0b21lclVzZXJMaXN0ID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJTZWFyY2goCiAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTcGxpdFRpY2tldERhdGF7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGZvciBteSAkS2V5Q3VzdG9tZXJVc2VyTGlzdCAoIHNvcnQga2V5cyAlQ3VzdG9tZXJVc2VyTGlzdCApIHsKICAgICAgICAgICAgICAgICAgICAkQXJ0aWNsZXtGcm9tfSA9ICRDdXN0b21lclVzZXJMaXN0eyRLZXlDdXN0b21lclVzZXJMaXN0fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBtdWx0aXBsZSBhZGRyZXNzZXMgbGlzdAogICAgICAgICMgY2hlY2sgZW1haWwgYWRkcmVzcwogICAgICAgIG15ICRDb3VudEZyb20gPSBzY2FsYXIgQE11bHRpcGxlQ3VzdG9tZXIgfHwgMTsKICAgICAgICBteSAlQ3VzdG9tZXJEYXRhRnJvbTsKICAgICAgICBpZiAoICRBcnRpY2xle0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAgICAgJUN1c3RvbWVyRGF0YUZyb20gPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgVXNlciA9PiAkQXJ0aWNsZXtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJEVtYWlsICggJEVtYWlsQWRkcmVzc09iamVjdC0+UGFyc2VBZGRyZXNzTGluZSggTGluZSA9PiAkQXJ0aWNsZUZyb20gKSApIHsKCiAgICAgICAgICAgIG15ICRDb3VudEF1eCAgICAgICAgID0gJENvdW50RnJvbTsKICAgICAgICAgICAgbXkgJEN1c3RvbWVyRXJyb3IgICAgPSAnJzsKICAgICAgICAgICAgbXkgJEN1c3RvbWVyRXJyb3JNc2cgPSAnQ3VzdG9tZXJHZW5lcmljU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICBteSAkQ3VzdG9tZXJEaXNhYmxlZCA9ICcnOwogICAgICAgICAgICBteSAkQ3VzdG9tZXJTZWxlY3RlZCA9ICRDb3VudEZyb20gZXEgJzEnID8gJ2NoZWNrZWQgJyA6ICcnOwogICAgICAgICAgICBpZiAoICEkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0VtYWlsKCBBZGRyZXNzT2JqZWN0ID0+ICRFbWFpbCApICkgewogICAgICAgICAgICAgICAgJEN1c3RvbWVyRXJyb3JNc2cgPSAkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0Vycm9yVHlwZSgpCiAgICAgICAgICAgICAgICAgICAgLiAnU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgJEN1c3RvbWVyRXJyb3IgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGZvciBkdXBsaWNhdGVkIGVudHJpZXMKICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRBZGRyZXNzZXNMaXN0eyRFbWFpbH0gJiYgJEN1c3RvbWVyRXJyb3IgZXEgJycgKSB7CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFcnJvck1zZyA9ICdJc0R1cGxpY2F0ZWRTZXJ2ZXJFcnJvck1zZyc7CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFcnJvciAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJEN1c3RvbWVyRXJyb3IgbmUgJycgKSB7CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJEaXNhYmxlZCA9ICdkaXNhYmxlZCc7CiAgICAgICAgICAgICAgICAkQ291bnRBdXggICAgICAgICA9ICRDb3VudEZyb20gLiAnRXJyb3InOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkUGhyYXNlICAgICAgID0gJEVtYWlsQWRkcmVzc09iamVjdC0+R2V0UmVhbE5hbWUoIEFkZHJlc3NPYmplY3QgPT4gJEVtYWlsICkgfHwgJyc7CiAgICAgICAgICAgIG15ICRDdXN0b21lcktleSAgPSAnJzsKICAgICAgICAgICAgbXkgJEVtYWlsQWRkcmVzcyA9ICRFbWFpbEFkZHJlc3NPYmplY3QtPkdldEFkZHJlc3MoIEFkZHJlc3NPYmplY3QgPT4gJEVtYWlsICk7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIGRlZmluZWQgJEN1c3RvbWVyRGF0YUZyb217VXNlckVtYWlsfQogICAgICAgICAgICAgICAgJiYgJEN1c3RvbWVyRGF0YUZyb217VXNlckVtYWlsfSBlcSAkRW1haWxBZGRyZXNzCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRDdXN0b21lcktleSA9ICRBcnRpY2xle0N1c3RvbWVyVXNlcklEfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoJEVtYWlsQWRkcmVzcykgewogICAgICAgICAgICAgICAgbXkgJUxpc3QgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclNlYXJjaCgKICAgICAgICAgICAgICAgICAgICBQb3N0TWFzdGVyU2VhcmNoID0+ICRFbWFpbEFkZHJlc3MsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGZvciBteSAkVXNlckxvZ2luICggc29ydCBrZXlzICVMaXN0ICkgewoKICAgICAgICAgICAgICAgICAgICAjIFNldCByaWdodCBvbmUgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjdXN0b21lciB1c2VyIHdpdGggdGhlIHNhbWUgZW1haWwgYWRkcmVzcy4KICAgICAgICAgICAgICAgICAgICBpZiAoICRQaHJhc2UgJiYgJExpc3R7JFVzZXJMb2dpbn0gPX4gLyRQaHJhc2UvICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJLZXkgPSAkVXNlckxvZ2luOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJEN1c3RvbWVyRWxlbWVudCA9ICRFbWFpbEFkZHJlc3M7CiAgICAgICAgICAgIGlmICgkUGhyYXNlKSB7CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJFbGVtZW50ID0gJFBocmFzZSAuICIgPCRFbWFpbEFkZHJlc3M+IjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkQ3VzdG9tZXJTZWxlY3RlZCAmJiAkQ3VzdG9tZXJLZXkgKSB7CiAgICAgICAgICAgICAgICAlQ3VzdG9tZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgICAgICBVc2VyID0+ICRDdXN0b21lcktleSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1c2ggQE11bHRpcGxlQ3VzdG9tZXIsIHsKICAgICAgICAgICAgICAgIENvdW50ICAgICAgICAgICAgPT4gJENvdW50QXV4LAogICAgICAgICAgICAgICAgQ3VzdG9tZXJFbGVtZW50ICA9PiAkQ3VzdG9tZXJFbGVtZW50LAogICAgICAgICAgICAgICAgQ3VzdG9tZXJTZWxlY3RlZCA9PiAkQ3VzdG9tZXJTZWxlY3RlZCwKICAgICAgICAgICAgICAgIEN1c3RvbWVyS2V5ICAgICAgPT4gJEN1c3RvbWVyS2V5LAogICAgICAgICAgICAgICAgQ3VzdG9tZXJFcnJvciAgICA9PiAkQ3VzdG9tZXJFcnJvciwKICAgICAgICAgICAgICAgIEN1c3RvbWVyRXJyb3JNc2cgPT4gJEN1c3RvbWVyRXJyb3JNc2csCiAgICAgICAgICAgICAgICBDdXN0b21lckRpc2FibGVkID0+ICRDdXN0b21lckRpc2FibGVkLAogICAgICAgICAgICB9OwogICAgICAgICAgICAkQWRkcmVzc2VzTGlzdHskRW1haWxBZGRyZXNzfSA9IDE7CiAgICAgICAgICAgICRDb3VudEZyb20rKzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHVzZXIgcHJlZmVyZW5jZXMKICAgICAgICBteSAlVXNlclByZWZlcmVuY2VzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJVNwbGl0VGlja2V0UGFyYW07CgogICAgICAgICMgaW4gY2FzZSBvZiBzcGxpdCBhIFRpY2tldElEIGFuZCBBcnRpY2xlSUQgYXJlIGFsd2F5cyBnaXZlbiwgc2VuZCB0aGUgVGlja2V0SUQgdG8gY2FsY3VsYXRlCiAgICAgICAgIyBBQ0xzIGJhc2VkIG9uIHBhcmVudCBpbmZvcm1hdGlvbgogICAgICAgIGlmICggJFNlbGYtPntUaWNrZXRJRH0gJiYgJEFydGljbGV7QXJ0aWNsZUlEfSApIHsKICAgICAgICAgICAgJFNwbGl0VGlja2V0UGFyYW17VGlja2V0SUR9ID0gJFNlbGYtPntUaWNrZXRJRH07CiAgICAgICAgfQoKICAgICAgICAjIGZpeCB0byBidWcjIDgwNjggRmllbGQgJiBEeW5hbWljRmllbGQgcHJlc2VsZWN0aW9uIG9uIFRpY2tldFNwbGl0CiAgICAgICAgIyB3aGVuIHNwbGl0dGluZyBhIHRpY2tldCB0aGUgc2VsZWN0ZWQgYXR0cmlidXRlcyBtdXN0IHJlbWFpbiBpbiB0aGUgbmV3IHRpY2tldCBzY3JlZW4KICAgICAgICAjIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBhdmFpbGFibGUgaW4gdGhlIFNwbGl0VGlja2V0UGFyYW0gaGFzaAogICAgICAgIGlmICggJFNwbGl0VGlja2V0UGFyYW17VGlja2V0SUR9ICkgewoKICAgICAgICAgICAgIyBnZXQgaW5mb3JtYXRpb24gZnJvbSBvcmlnaW5hbCB0aWNrZXQgKFNwbGl0VGlja2V0KQogICAgICAgICAgICBteSAlU3BsaXRUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU3BsaXRUaWNrZXRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2V0IHNpbXBsZSBJRHMgdG8gcGFzcyB0aGVtIHRvIHRoZSBtYXNrCiAgICAgICAgICAgIGZvciBteSAkU3BsaXRQYXJhbSAocXcoVHlwZUlEIFNlcnZpY2VJRCBTTEFJRCBQcmlvcml0eUlEKSkgewogICAgICAgICAgICAgICAgJFNwbGl0VGlja2V0UGFyYW17JFNwbGl0UGFyYW19ID0gJFNwbGl0VGlja2V0RGF0YXskU3BsaXRQYXJhbX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2V0IFN0YXRlSUQgYXMgTmV4dFN0YXRlSUQKICAgICAgICAgICAgJFNwbGl0VGlja2V0UGFyYW17TmV4dFN0YXRlSUR9ID0gJFNwbGl0VGlja2V0RGF0YXtTdGF0ZUlEfTsKCiAgICAgICAgICAgICMgc2V0IE93bmVyIGFuZCBSZXNwb25zaWJsZQogICAgICAgICAgICAkU3BsaXRUaWNrZXRQYXJhbXtVc2VyU2VsZWN0ZWR9ICAgICAgICAgICAgPSAkU3BsaXRUaWNrZXREYXRhe093bmVySUR9OwogICAgICAgICAgICAkU3BsaXRUaWNrZXRQYXJhbXtSZXNwb25zaWJsZVVzZXJTZWxlY3RlZH0gPSAkU3BsaXRUaWNrZXREYXRhe1Jlc3BvbnNpYmxlSUR9OwoKICAgICAgICAgICAgIyBzZXQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIE93bmVyIGFuZCBSZXNwb25zaWJsZQogICAgICAgICAgICBpZiAoICRTcGxpdFRpY2tldERhdGF7UXVldWVJRH0gKSB7CiAgICAgICAgICAgICAgICAkU3BsaXRUaWNrZXRQYXJhbXtRdWV1ZUlEfSA9ICRTcGxpdFRpY2tldERhdGF7UXVldWVJRH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRHZXRQYXJhbXtPd25lckFsbH0gICAgICAgPSAxOwogICAgICAgICAgICAkR2V0UGFyYW17UmVzcG9uc2libGVBbGx9ID0gMTsKCiAgICAgICAgICAgICMgc2V0IHRoZSBzZWxlY3RlZCBxdWV1ZSBpbiBmb3JtYXQgSUR8fE5hbWUKICAgICAgICAgICAgJFNwbGl0VGlja2V0UGFyYW17VG9TZWxlY3RlZH0gPSAkU3BsaXRUaWNrZXREYXRhe1F1ZXVlSUR9IC4gJ3x8JyAuICRTcGxpdFRpY2tldERhdGF7UXVldWV9OwoKICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJVNwbGl0VGlja2V0RGF0YSApIHsKICAgICAgICAgICAgICAgIGlmICggJEtleSA9fiAvRHluYW1pY0ZpZWxkXF8oLiopLyApIHsKICAgICAgICAgICAgICAgICAgICAkU3BsaXRUaWNrZXRQYXJhbXtEeW5hbWljRmllbGR9eyQxfSA9ICRTcGxpdFRpY2tldERhdGF7JEtleX07CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRTcGxpdFRpY2tldFBhcmFteyRLZXl9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGRlZmluZSBzZWxlY3RlZCB2YWx1ZXMgYXQgdGhlIHN0YXJ0CgogICAgICAgICMgaW4gY2FzZSBvZiB0aWNrZXQgc3BsaXQgc2V0ICRTZWxmLT57UXVldWVJRH0gYXMgdGhlIFF1ZXVlSUQgb2YgdGhlIG9yaWdpbmFsIHRpY2tldCwKICAgICAgICAjIGluIG9yZGVyIHRvIHNldCBjb3JyZWN0IEFDTHMgb24gcGFnZSBsb2FkIChpbml0aWFsKS4gU2VlIGJ1ZyA4Njg3LgogICAgICAgIGlmICgKICAgICAgICAgICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU3BsaXRUaWNrZXRQYXJhbSApCiAgICAgICAgICAgICYmICRTcGxpdFRpY2tldFBhcmFte1F1ZXVlSUR9CiAgICAgICAgICAgICYmICEkU2VsZi0+e1F1ZXVlSUR9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRHZXRQYXJhbXtRdWV1ZUlEfSA9ICRTcGxpdFRpY2tldFBhcmFte1F1ZXVlSUR9OwogICAgICAgICAgICAkR2V0UGFyYW17RGVzdH0gICAgPSAkU3BsaXRUaWNrZXRQYXJhbXtUb1NlbGVjdGVkfTsKICAgICAgICB9CgogICAgICAgICMgR2V0IHByZWRlZmluZWQgUXVldWVJRCAoaWYgbm8gcXVldWUgZnJvbSBzcGxpdCB0aWNrZXQgaXMgc2V0KS4KICAgICAgICBlbHNpZiAoICEkU2VsZi0+e1F1ZXVlSUR9ICYmICRHZXRQYXJhbXtEZXN0fSApIHsKICAgICAgICAgICAgbXkgQFF1ZXVlUGFydHMgPSBzcGxpdCggL1x8XHwvLCAkR2V0UGFyYW17RGVzdH0gKTsKICAgICAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJFF1ZXVlUGFydHNbMF07CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbXkgJFVzZXJEZWZhdWx0UXVldWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OlVzZXJEZWZhdWx0UXVldWUnKSB8fCAnJzsKCiAgICAgICAgICAgIGlmICgkVXNlckRlZmF1bHRRdWV1ZSkgewogICAgICAgICAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkVXNlckRlZmF1bHRRdWV1ZSApOwogICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17UXVldWVJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte0Rlc3R9ID0gIiRHZXRQYXJhbXtRdWV1ZUlEfXx8JFVzZXJEZWZhdWx0UXVldWUiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGRvbid0IHVzZSB0aGUgc3BsaXQgdGlja2V0IHN0YXRlLCBqdXN0IHRoZSBkZWZhdWx0CiAgICAgICAgaWYgKCAkQ29uZmlnLT57U3RhdGVEZWZhdWx0fSApIHsKICAgICAgICAgICAgbXkgJU5leHRTdGF0ZXM7CgogICAgICAgICAgICAlTmV4dFN0YXRlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U3RhdGVMaXN0KAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgUXVldWVJRCA9PiAkR2V0UGFyYW17UXVldWVJRH0gfHwgMSwKICAgICAgICAgICAgICAgIEFjdGlvbiAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkR2V0UGFyYW17TmV4dFN0YXRlSUR9ID0geyByZXZlcnNlICVOZXh0U3RhdGVzIH0tPnsgJENvbmZpZy0+e1N0YXRlRGVmYXVsdH0gfSAvLyAnJzsKICAgICAgICB9CgogICAgICAgICMgc3BsaXQgdGlja2V0IGluZm8gZm9yIHRoZSByZXN0CiAgICAgICAgaWYgKCAkU3BsaXRUaWNrZXRQYXJhbXtVc2VyU2VsZWN0ZWR9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17TmV3VXNlcklEfSA9ICRTcGxpdFRpY2tldERhdGF7T3duZXJJRH07CiAgICAgICAgfQogICAgICAgIGlmICggJFNwbGl0VGlja2V0UGFyYW17UmVzcG9uc2libGVVc2VyU2VsZWN0ZWR9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17TmV3UmVzcG9uc2libGVJRH0gPSAkU3BsaXRUaWNrZXREYXRhe1Jlc3BvbnNpYmxlVXNlclNlbGVjdGVkfTsKICAgICAgICB9CiAgICAgICAgZm9yIG15ICRTcGxpdFBhcmFtIChxdyhUeXBlSUQgU2VydmljZUlEIFNMQUlEIFByaW9yaXR5SUQpKSB7CiAgICAgICAgICAgICRTcGxpdFRpY2tldFBhcmFteyRTcGxpdFBhcmFtfSA9ICRTcGxpdFRpY2tldERhdGF7JFNwbGl0UGFyYW19OwogICAgICAgIH0KCiAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCB2YWx1ZXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKiApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9ICk7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CgogICAgICAgICAgICAjIHRvIHN0b3JlIGR5bmFtaWMgZmllbGQgdmFsdWUgZnJvbSBkYXRhYmFzZSAob3IgdW5kZWZpbmVkKQogICAgICAgICAgICBteSAkVmFsdWU7CgogICAgICAgICAgICAjIGluIGNhc2Ugb2Ygc3BsaXQgYSBUaWNrZXRJRCBhbmQgQXJ0aWNsZUlEIGFyZSBhbHdheXMgZ2l2ZW4sIEdldCB0aGUgdmFsdWUKICAgICAgICAgICAgIyBmcm9tIERCIHRoaXMgY2FzZXMKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e1RpY2tldElEfSAmJiAkQXJ0aWNsZXtBcnRpY2xlSUR9ICkgewoKICAgICAgICAgICAgICAgICMgc2VsZWN0IFRpY2tldElEIG9yIEFydGljbGVJRCB0byBnZXQgdGhlIHZhbHVlIGRlcGVuZGluZyBvbiBkeW5hbWljIGZpZWxkIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAgIG15ICRPYmplY3RJRCA9ICREeW5hbWljRmllbGRDb25maWctPntPYmplY3RUeXBlfSBlcSAnVGlja2V0JwogICAgICAgICAgICAgICAgICAgID8gJFNlbGYtPntUaWNrZXRJRH0KICAgICAgICAgICAgICAgICAgICA6ICRBcnRpY2xle0FydGljbGVJRH07CgogICAgICAgICAgICAgICAgIyBnZXQgdmFsdWUgc3RvcmVkIG9uIHRoZSBkYXRhYmFzZSAoc3BsaXQpCiAgICAgICAgICAgICAgICAkVmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRPYmplY3RJRCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3RoZXJ3aXNlIChvbiBhIG5ldyB0aWNrZXQpLiBDaGVjayBpZiB0aGUgdXNlciBoYXMgYSB1c2VyIHNwZWNpZmljIGRlZmF1bHQgdmFsdWUgZm9yCiAgICAgICAgICAgICMgdGhlIGR5bmFtaWMgZmllbGQsIG90aGVyd2lzZSB3aWxsIHVzZSBEeW5hbWljIEZpZWxkIGRlZmF1bHQgdmFsdWUKICAgICAgICAgICAgZWxzaWYgKCAhJER5bmFtaWNGaWVsZENvbmZpZy0+e1JlYWRvbmx5fSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBkZWZhdWx0IHZhbHVlIGZyb20gZHluYW1pYyBmaWVsZCBjb25maWcgKGlmIGFueSkKICAgICAgICAgICAgICAgICRWYWx1ZSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57RGVmYXVsdFZhbHVlfSB8fCAnJzsKCiAgICAgICAgICAgICAgICAjIG92ZXJyaWRlIHRoZSB2YWx1ZSBmcm9tIHVzZXIgcHJlZmVyZW5jZXMgaWYgaXMgc2V0CiAgICAgICAgICAgICAgICBpZiAoICRVc2VyUHJlZmVyZW5jZXN7ICdVc2VyRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSApIHsKICAgICAgICAgICAgICAgICAgICAkVmFsdWUgPSAkVXNlclByZWZlcmVuY2VzeyAnVXNlckR5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRHZXRQYXJhbXtEeW5hbWljRmllbGR9eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICRWYWx1ZTsKICAgICAgICB9CgogICAgICAgIG15ICRBdXRvc2VsZWN0ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBQ0w6OkF1dG9zZWxlY3QnKSB8fCB1bmRlZjsKCiAgICAgICAgIyBnYXRoZXIgZmllbGRzIHdoaWNoIGFyZSBzdXBwb3NlZCB0byBiZSBoaWRkZW4gd2hlbiBhdXRvc2VsZWN0ZWQKICAgICAgICBteSAkSGlkZUF1dG9zZWxlY3RlZEpTT047CiAgICAgICAgaWYgKCRBdXRvc2VsZWN0KSB7CiAgICAgICAgICAgIG15IEBIaWRlQXV0b3NlbGVjdGVkID0gZ3JlcCB7ICFyZWYoICRBdXRvc2VsZWN0LT57JF99ICkgJiYgJEF1dG9zZWxlY3QtPnskX30gPT0gMiB9IGtleXMgJXskQXV0b3NlbGVjdH07CiAgICAgICAgICAgIGlmICggJEF1dG9zZWxlY3QtPntEeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICAgICAgcHVzaCBASGlkZUF1dG9zZWxlY3RlZCwKICAgICAgICAgICAgICAgICAgICBtYXAgeyAiRHluYW1pY0ZpZWxkXyIgLiAkXyB9CiAgICAgICAgICAgICAgICAgICAgKCBncmVwIHsgJEF1dG9zZWxlY3QtPntEeW5hbWljRmllbGR9eyRffSA9PSAyIH0ga2V5cyAleyAkQXV0b3NlbGVjdC0+e0R5bmFtaWNGaWVsZH0gfSApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoQEhpZGVBdXRvc2VsZWN0ZWQpIHsKICAgICAgICAgICAgICAgIG15ICRKU09OT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKTsKICAgICAgICAgICAgICAgICRIaWRlQXV0b3NlbGVjdGVkSlNPTiA9ICRKU09OT2JqZWN0LT5FbmNvZGUoCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiBcQEhpZGVBdXRvc2VsZWN0ZWQsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHRyYWNrIGNoYW5naW5nIHN0YW5kYXJkIGZpZWxkcwogICAgICAgIG15ICRBQ0xQcmVzZWxlY3Rpb247CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldEFDTDo6QUNMUHJlc2VsZWN0aW9uJykgKSB7CgogICAgICAgICAgICAjIGdldCBjYWNoZWQgcHJlc2VsZWN0aW9uIHJ1bGVzCiAgICAgICAgICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwogICAgICAgICAgICAkQUNMUHJlc2VsZWN0aW9uID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgICAgICBUeXBlID0+ICdUaWNrZXRBQ0wnLAogICAgICAgICAgICAgICAgS2V5ICA9PiAnUHJlc2VsZWN0aW9uJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJEFDTFByZXNlbGVjdGlvbiApIHsKICAgICAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24gPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPlNldEFDTFByZXNlbGVjdGlvbkNhY2hlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICVDb252ZXJnZW5jZSA9ICgKICAgICAgICAgICAgU3RkRmllbGRzID0+IDAsCiAgICAgICAgICAgIEZpZWxkcyAgICA9PiAwLAogICAgICAgICk7CiAgICAgICAgbXkgJUNoYW5nZWRFbGVtZW50czsKICAgICAgICBteSAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydDsKICAgICAgICBteSAlQ2hhbmdlZFN0ZEZpZWxkczsKCiMgUm90aGVyIE9TUyAvIElUU01Db3JlIC0gY2FsY3VsYXRlIFByaW9yaXR5IHZpYSBDSVAgbWF0cml4CiAgICAgICAgaWYgKCAkQ0lQQ2FsY3VsYXRlICYmICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fQogICAgICAgICAgICAmJiAoICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9IHx8ICRHZXRQYXJhbXtTZXJ2aWNlSUR9ICkgKSB7CgogICAgICAgICAgICAjIGlmIHdlIGhhdmUgYW4gaW5pdGlhbCBjcml0aWNhbGl0eSBhbmQgaW1wYWN0LCB0cmlnZ2VyIHByaW9yaXR5IGNhbGN1bGF0aW9uCiAgICAgICAgICAgICRDaGFuZ2VkRWxlbWVudHN7RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9ID0gMTsKICAgICAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICAgICAgbXkgJExvb3BQcm90ZWN0aW9uID0gMTAwOwogICAgICAgIG15ICVTdGRGaWVsZFZhbHVlczsKICAgICAgICBteSAlRHluRmllbGRTdGF0ZXMgPSAoCiAgICAgICAgICAgIFZpc2liaWxpdHkgPT4ge30sCiAgICAgICAgICAgIEZpZWxkcyAgICAgPT4ge30sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJEluaXRpYWxSdW4gPSAxOwoKICAgICAgICB1bnRpbCAoICRDb252ZXJnZW5jZXtGaWVsZHN9ICkgewoKICAgICAgICAgICAgIyBkZXRlcm1pbmUgc3RhbmRhcmQgZmllbGQgaW5wdXQKICAgICAgICAgICAgdW50aWwgKCAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSApIHsKCiAgICAgICAgICAgICAgICBteSAlTmV3Q2hhbmdlZEVsZW1lbnRzOwoKICAgICAgICAgICAgICAgICMgd2hpY2ggc3RhbmRhcmQgZmllbGRzIHRvIGNoZWNrIC0gRmllbGRJRCA9PiBHZXRQYXJhbVZhbHVlIChuZWNlc3NhcnkgZm9yIERlc3QpCiAgICAgICAgICAgICAgICBteSAlQ2hlY2sgPSAoCiAgICAgICAgICAgICAgICAgICAgRGVzdCAgICAgICAgICAgICAgID0+ICdRdWV1ZUlEJywKICAgICAgICAgICAgICAgICAgICBOZXdVc2VySUQgICAgICAgICAgPT4gJ05ld1VzZXJJRCcsCiAgICAgICAgICAgICAgICAgICAgTmV3UmVzcG9uc2libGVJRCAgID0+ICdOZXdSZXNwb25zaWJsZUlEJywKICAgICAgICAgICAgICAgICAgICBOZXh0U3RhdGVJRCAgICAgICAgPT4gJ05leHRTdGF0ZUlEJywKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgICAgICAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgICAgICA9PiAnU2VydmljZUlEJywKICAgICAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgICAgICAgPT4gJ1NMQUlEJywKICAgICAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJ1N0YW5kYXJkVGVtcGxhdGVJRCcsCiAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICAgICAgID0+ICdUeXBlSUQnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggJEFDTFByZXNlbGVjdGlvbiAmJiAhJEluaXRpYWxSdW4gKSB7CiAgICAgICAgICAgICAgICAgICAgRklFTEQ6CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRGaWVsZElEICggc29ydCBrZXlzICVDaGVjayApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEFDTFByZXNlbGVjdGlvbi0+e0ZpZWxkc317JEZpZWxkSUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEZpZWxkSUQgbm90IGRlZmluZWQgaW4gVGlja2V0QUNMIHByZXNlbGVjdGlvbiBydWxlcyEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRBdXRvc2VsZWN0ICYmICRBdXRvc2VsZWN0LT57JEZpZWxkSUR9ICYmICRDaGFuZ2VkRWxlbWVudHN7JEZpZWxkSUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEVsZW1lbnQgKCBzb3J0IGtleXMgJUNoYW5nZWRFbGVtZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQUNMUHJlc2VsZWN0aW9uLT57UnVsZXN9e1RpY2tldH17JEVsZW1lbnR9eyRGaWVsZElEfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRTZWxmLT57SW50ZXJuYWxEZXBlbmRhbmN5fXskRWxlbWVudH17JEZpZWxkSUR9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uLT57RmllbGRzfXskRWxlbWVudH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkRWxlbWVudCBub3QgZGVmaW5lZCBpbiBUaWNrZXRBQ0wgcHJlc2VsZWN0aW9uIHJ1bGVzISIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsZXRlIHVuYWZmZWN0ZWQgZmllbGRzCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkQ2hlY2t7JEZpZWxkSUR9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGZvciBlYWNoIHN0YW5kYXJkIGZpZWxkIHdoaWNoIGhhcyB0byBiZSBjaGVja2VkLCBydW4gdGhlIGRlZmluZWQgbWV0aG9kCiAgICAgICAgICAgICAgICBNRVRIT0Q6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEZpZWxkICggQHsgJFNlbGYtPntGaWVsZE1ldGhvZHN9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBNRVRIT0QgaWYgISRDaGVja3sgJEZpZWxkLT57RmllbGRJRH0gfTsKCiAgICAgICAgICAgICAgICAgICAgIyB1c2UgJENoZWNreyAkRmllbGQtPntGaWVsZElEfSB9IGZvciBEZXN0PT5RdWV1ZUlECiAgICAgICAgICAgICAgICAgICAgJFN0ZEZpZWxkVmFsdWVzeyAkQ2hlY2t7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gfSA9ICRGaWVsZC0+e01ldGhvZH0tPigKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICAgPT4gJEdldFBhcmFte05ld1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTcGxpdFRpY2tldERhdGF7Q3VzdG9tZXJVc2VySUR9IHx8ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgICA9PiAkR2V0UGFyYW17UXVldWVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VzICAgICAgID0+ICRTdGRGaWVsZFZhbHVlc3tTZXJ2aWNlSUR9IHx8IHVuZGVmLCAgICAgICMgbmVlZGVkIGZvciBTTEFJRAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgc3BlY2lhbCBzdHVmZiBmb3IgUXVldWVJRC9EZXN0OiBEZXN0IGlzICJRdWV1ZUlEfHxRdWV1ZU5hbWUiID0+ICJRdWV1ZU5hbWUiOwogICAgICAgICAgICAgICAgICAgIGlmICggJEZpZWxkLT57RmllbGRJRH0gZXEgJ0Rlc3QnICkgewogICAgICAgICAgICAgICAgICAgICAgICBUT3M6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkUXVldWVJRCAoIHNvcnQga2V5cyAleyAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgVE9zIGlmICggJFN0ZEZpZWxkVmFsdWVze1F1ZXVlSUR9eyRRdWV1ZUlEfSBlcSAnLScgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTdGRGaWVsZFZhbHVlc3tEZXN0fXsiJFF1ZXVlSUR8fCRTdGRGaWVsZFZhbHVlc3tRdWV1ZUlEfXsgJFF1ZXVlSUQgfSJ9ID0gJFN0ZEZpZWxkVmFsdWVze1F1ZXVlSUR9eyRRdWV1ZUlEfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBjdXJyZW50IHNlbGVjdGlvbiBvZiBRdWV1ZUlEIChEZXN0IHdpbGwgYmUgZG9uZSB0b2dldGhlciB3aXRoIHRoZSBvdGhlciBmaWVsZHMpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFte1F1ZXVlSUR9ICYmICEkU3RkRmllbGRWYWx1ZXN7RGVzdH17ICRHZXRQYXJhbXtEZXN0fSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgYXV0b3NlbGVjdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17UXVldWVJRH0gJiYgJEF1dG9zZWxlY3QgJiYgJEF1dG9zZWxlY3QtPntEZXN0fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtRdWV1ZUlEfSA9ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+QXV0b3NlbGVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHx8ICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUgLSBjYWxjdWxhdGUgUHJpb3JpdHkgdmlhIENJUCBtYXRyaXgKICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRGaWVsZC0+e0ZpZWxkSUR9IGVxICdQcmlvcml0eUlEJyAmJiAkQ0lQQ2FsY3VsYXRlICYmICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBjcml0aWNhbGl0eSBlaXRoZXIgZnJvbSB0aGUgbWFudWFsbHkgc2V0IGR5bmFtaWMgZmllbGQsIG9yIHRoZSBzZXJ2aWNlCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRDcml0aWNhbGl0eSA9ICRHZXRQYXJhbXtEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRDcml0aWNhbGl0eSAmJiAkR2V0UGFyYW17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICVTZXJ2aWNlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ3JpdGljYWxpdHkgPSAkU2VydmljZXtDcml0aWNhbGl0eX07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENyaXRpY2FsaXR5ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVjYWxjdWxhdGUgdGhlIHByaW9yaXR5IGlmIGFueSBvZiB0aGUgaW1wYWN0aW5nIGVsZW1lbnRzIGNoYW5nZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENoYW5nZWRFbGVtZW50c3tEeW5hbWljRmllbGRfSVRTTUltcGFjdH0gfHwgJENoYW5nZWRFbGVtZW50c3tTZXJ2aWNlSUR9IHx8ICRDaGFuZ2VkRWxlbWVudHN7RHluYW1pY0ZpZWxkX0lUU01Dcml0aWNhbGl0eX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPlByaW9yaXR5QWxsb2NhdGlvbkdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJENyaXRpY2FsaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBhY3QgICAgICA9PiAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkU3RkRmllbGRWYWx1ZXN7UHJpb3JpdHlJRH17ICRQcmlvcml0eUlEIH0gJiYgJFByaW9yaXR5SUQgbmUgJEdldFBhcmFte1ByaW9yaXR5SUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UHJpb3JpdHlJRH0gICAgICAgICAgID0gJFByaW9yaXR5SUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROZXdDaGFuZ2VkRWxlbWVudHN7UHJpb3JpdHlJRH0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlZFN0ZEZpZWxkc3tQcmlvcml0eUlEfSAgID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB3ZSBlbmZvcmNlIENJUEFsbG9jYXRpb24gaW4gYW55IGNhc2UgZGVsZXRlIGFsbCBvdGhlciBwcmlvcml0eSBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtQcmlvcml0eUlEfSAmJiAkQ0lQQ2FsY3VsYXRlID09IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFN0ZEZpZWxkVmFsdWVze1ByaW9yaXR5SUR9ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UHJpb3JpdHlJRH0gPT4gJFN0ZEZpZWxkVmFsdWVze1ByaW9yaXR5SUR9eyAkR2V0UGFyYW17UHJpb3JpdHlJRH0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQojIEVPIElUU01Db3JlCgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgd2hldGhlciBjdXJyZW50IHNlbGVjdGVkIHZhbHVlIGlzIHN0aWxsIHZhbGlkIGZvciB0aGUgZmllbGQKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfQogICAgICAgICAgICAgICAgICAgICAgICAmJiAhJFN0ZEZpZWxkVmFsdWVzeyAkRmllbGQtPntGaWVsZElEfSB9eyAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gfQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAjIGlmIG5vdCBlbXB0eSB0aGUgZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9ICAgICAgICAgICA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAkTmV3Q2hhbmdlZEVsZW1lbnRzeyAkRmllbGQtPntGaWVsZElEfSB9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgJENoYW5nZWRTdGRGaWVsZHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gICA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGF1dG9zZWxlY3QKICAgICAgICAgICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gJiYgJEF1dG9zZWxlY3QgJiYgJEF1dG9zZWxlY3QtPnsgJEZpZWxkLT57RmllbGRJRH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9ID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5BdXRvc2VsZWN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgPT4gJFN0ZEZpZWxkVmFsdWVzeyAkRmllbGQtPntGaWVsZElEfSB9LAogICAgICAgICAgICAgICAgICAgICAgICApIHx8ICcnOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICROZXdDaGFuZ2VkRWxlbWVudHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJENoYW5nZWRTdGRGaWVsZHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gICA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhJU5ld0NoYW5nZWRFbGVtZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzID0gJU5ld0NoYW5nZWRFbGVtZW50czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydCA9ICgKICAgICAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydCwKICAgICAgICAgICAgICAgICAgICAlTmV3Q2hhbmdlZEVsZW1lbnRzLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICRMb29wUHJvdGVjdGlvbi0tIDwgMSApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlJhbiBpbnRvIHVucmVzb2x2YWJsZSBsb29wISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzICAgICAgICA9ICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0OwogICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydCA9ICgpOwoKICAgICAgICAgICAgIyBjaGVjayBkeW5hbWljIGZpZWxkcwogICAgICAgICAgICBteSAlQ3VyRmllbGRTdGF0ZXM7CiAgICAgICAgICAgIGlmICggJUNoYW5nZWRFbGVtZW50cyB8fCAkSW5pdGlhbFJ1biApIHsKCiAgICAgICAgICAgICAgICAjIGdldCB2YWx1ZXMgYW5kIHZpc2liaWxpdHkgb2YgZHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgICAgICVDdXJGaWVsZFN0YXRlcyA9ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+R2V0RmllbGRTdGF0ZXMoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0T2JqZWN0ICAgICAgICAgICAgICA9PiAkVGlja2V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgICAgICAgICAgICAgPT4gJFNlbGYtPntEeW5hbWljRmllbGR9LAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPT4gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZEVsZW1lbnRzICAgICAgICAgICA9PiBcJUNoYW5nZWRFbGVtZW50cywgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIHRvIHJlZHVjZSBBQ0wgZXZhbHVhdGlvbgogICAgICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgICAgICAgICAgICAgPT4gJFNwbGl0VGlja2V0RGF0YXtDdXN0b21lclVzZXJJRH0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgT3duZXJJRCA9PiAkR2V0UGFyYW17TmV3VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIEF1dG9zZWxlY3QgICAgICA9PiAkQXV0b3NlbGVjdCwKICAgICAgICAgICAgICAgICAgICBBQ0xQcmVzZWxlY3Rpb24gPT4gJEFDTFByZXNlbGVjdGlvbiwKICAgICAgICAgICAgICAgICAgICBMb29wUHJvdGVjdGlvbiAgPT4gXCRMb29wUHJvdGVjdGlvbiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjb21iaW5lIEZpZWxkU3RhdGVzCiAgICAgICAgICAgICAgICAkRHluRmllbGRTdGF0ZXN7RmllbGRzfSA9IHsKICAgICAgICAgICAgICAgICAgICAleyAkRHluRmllbGRTdGF0ZXN7RmllbGRzfSB9LAogICAgICAgICAgICAgICAgICAgICV7ICRDdXJGaWVsZFN0YXRlc3tGaWVsZHN9IH0sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgJER5bkZpZWxkU3RhdGVze1Zpc2liaWxpdHl9ID0gewogICAgICAgICAgICAgICAgICAgICV7ICREeW5GaWVsZFN0YXRlc3tWaXNpYmlsaXR5fSB9LAogICAgICAgICAgICAgICAgICAgICV7ICRDdXJGaWVsZFN0YXRlc3tWaXNpYmlsaXR5fSB9LAogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAjIHN0b3JlIG5ldyB2YWx1ZXMKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtEeW5hbWljRmllbGR9ID0gewogICAgICAgICAgICAgICAgICAgICV7ICRHZXRQYXJhbXtEeW5hbWljRmllbGR9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze05ld1ZhbHVlc30gfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWYgZHluYW1pYyBmaWVsZHMgY2hhbmdlZCwgY2hlY2sgc3RhbmRhcmQgZmllbGRzIGFnYWluCiAgICAgICAgICAgIGlmICggJUN1ckZpZWxkU3RhdGVzICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQ3VyRmllbGRTdGF0ZXN7TmV3VmFsdWVzfSApICkgewogICAgICAgICAgICAgICAgJENvbnZlcmdlbmNle1N0ZEZpZWxkc30gPSAwOwogICAgICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50cyA9IG1hcCB7ICRfID0+IDEgfSBrZXlzICV7ICRDdXJGaWVsZFN0YXRlc3tOZXdWYWx1ZXN9IH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkQ29udmVyZ2VuY2V7RmllbGRzfSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRJbml0aWFsUnVuID0gMDsKICAgICAgICB9CgogICAgICAgIG15ICVEeW5hbWljRmllbGRQb3NzaWJsZVZhbHVlcyA9IG1hcCB7CiAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRfID0+IGRlZmluZWQgJER5bkZpZWxkU3RhdGVze0ZpZWxkc317JF99CiAgICAgICAgICAgICAgICA/ICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9eyRffXtQb3NzaWJsZVZhbHVlc30KICAgICAgICAgICAgICAgIDogdW5kZWYKICAgICAgICB9ICgga2V5cyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqICk7CgogICAgICAgICMgZ2V0IGFsbCBhdHRhY2htZW50cyBtZXRhIGRhdGEKICAgICAgICBteSBAQXR0YWNobWVudHMgPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREdldEFsbEZpbGVzTWV0YSgKICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBhbmQgZm9ybWF0IGRlZmF1bHQgc3ViamVjdCBhbmQgYm9keQogICAgICAgIG15ICRTdWJqZWN0ID0gJEFydGljbGV7U3ViamVjdH07CiAgICAgICAgaWYgKCAhJFN1YmplY3QgKSB7CiAgICAgICAgICAgICRTdWJqZWN0ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJENvbmZpZy0+e1N1YmplY3R9IHx8ICcnLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBteSAkQm9keSA9ICRBcnRpY2xle0JvZHl9IHx8ICcnOwogICAgICAgIGlmICggISRCb2R5ICkgewogICAgICAgICAgICAkQm9keSA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICRDb25maWctPntCb2R5fSB8fCAnJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbWFrZSBzdXJlIGJvZHkgaXMgcmljaCB0ZXh0IChpZiBib2R5IGlzIGJhc2VkIG9uIGNvbmZpZykKICAgICAgICBpZiAoICEkR2V0UGFyYW17QXJ0aWNsZUlEfSAmJiAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgJEJvZHkgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJSaWNoVGV4dCgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkQm9keSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9NYXNrUGhvbmVOZXcoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgTmV4dFN0YXRlICAgICAgICAgICAgICAgPT4gJEdldFBhcmFte05leHRTdGF0ZUlEfSA/ICRTdGRGaWVsZFZhbHVlc3tOZXh0U3RhdGVJRH17ICRHZXRQYXJhbXtOZXh0U3RhdGVJRH0gfSA6ICcnLAogICAgICAgICAgICBUb1NlbGVjdGVkICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17RGVzdH0sCiAgICAgICAgICAgIFVzZXJTZWxlY3RlZCAgICAgICAgICAgID0+ICRHZXRQYXJhbXtOZXdVc2VySUR9LAogICAgICAgICAgICBSZXNwb25zaWJsZVVzZXJTZWxlY3RlZCA9PiAkR2V0UGFyYW17TmV3UmVzcG9uc2libGVJRH0sCiAgICAgICAgICAgIE5leHRTdGF0ZXMgICAgICAgICAgICAgID0+ICRTdGRGaWVsZFZhbHVlc3tOZXh0U3RhdGVJRH0sCiAgICAgICAgICAgIFByaW9yaXRpZXMgICAgICAgICAgICAgID0+ICRTdGRGaWVsZFZhbHVlc3tQcmlvcml0eUlEfSwKICAgICAgICAgICAgVHlwZXMgICAgICAgICAgICAgICAgICAgPT4gJFN0ZEZpZWxkVmFsdWVze1R5cGVJRH0sCiAgICAgICAgICAgIFNlcnZpY2VzICAgICAgICAgICAgICAgID0+ICRTdGRGaWVsZFZhbHVlc3tTZXJ2aWNlSUR9LAogICAgICAgICAgICBTTEFzICAgICAgICAgICAgICAgICAgICA9PiAkU3RkRmllbGRWYWx1ZXN7U0xBSUR9LAogICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlcyAgICAgICA9PiAkU3RkRmllbGRWYWx1ZXN7U3RhbmRhcmRUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgVXNlcnMgICAgICAgICAgICAgICAgICAgPT4gJFN0ZEZpZWxkVmFsdWVze05ld1VzZXJJRH0sCiAgICAgICAgICAgIFJlc3BvbnNpYmxlVXNlcnMgICAgICAgID0+ICRTdGRGaWVsZFZhbHVlc3tOZXdSZXNwb25zaWJsZUlEfSwKICAgICAgICAgICAgVG8gICAgICAgICAgICAgICAgICAgICAgPT4gJFN0ZEZpZWxkVmFsdWVze1F1ZXVlSUR9LAogICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICA9PiAkQXJ0aWNsZXtGcm9tfSwKICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgPT4gJFN1YmplY3QsCiAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgID0+ICRCb2R5LAogICAgICAgICAgICBDdXN0b21lclVzZXIgICAgICAgICAgICA9PiAkU3BsaXRUaWNrZXREYXRhe0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgQ3VzdG9tZXJJRCAgICAgICAgICAgICAgPT4gJFNwbGl0VGlja2V0RGF0YXtDdXN0b21lcklEfSwKICAgICAgICAgICAgQ3VzdG9tZXJEYXRhICAgICAgICAgICAgPT4gXCVDdXN0b21lckRhdGEsCiAgICAgICAgICAgIEF0dGFjaG1lbnRzICAgICAgICAgICAgID0+IFxAQXR0YWNobWVudHMsCiAgICAgICAgICAgIExpbmtUaWNrZXRJRCAgICAgICAgICAgID0+ICRHZXRQYXJhbXtMaW5rVGlja2V0SUR9IHx8ICcnLAogICAgICAgICAgICBGcm9tQ2hhdElEICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17RnJvbUNoYXRJRH0gICB8fCAnJywKICAgICAgICAgICAgTXVsdGlwbGVDdXN0b21lciAgICAgICAgPT4gXEBNdWx0aXBsZUN1c3RvbWVyLAogICAgICAgICAgICBIaWRlQXV0b3NlbGVjdGVkICAgICAgICA9PiAkSGlkZUF1dG9zZWxlY3RlZEpTT04sCiAgICAgICAgICAgIFZpc2liaWxpdHkgICAgICAgICAgICAgID0+ICREeW5GaWVsZFN0YXRlc3tWaXNpYmlsaXR5fSwKICAgICAgICAgICAgREZQb3NzaWJsZVZhbHVlcyAgICAgICAgPT4gXCVEeW5hbWljRmllbGRQb3NzaWJsZVZhbHVlcywKICAgICAgICAgICAgVGltZVVuaXRzICAgICAgICAgICAgICAgPT4gJFNlbGYtPl9HZXRUaW1lVW5pdHMoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAlU3BsaXRUaWNrZXRQYXJhbSwKICAgICAgICAgICAgICAgIE93bmVySUQgICA9PiAkR2V0UGFyYW17TmV3VXNlcklEfSwKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICApLAogICAgICAgICk7CgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgY3JlYXRlIG5ldyB0aWNrZXQgYW5kIGFydGljbGUKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdG9yZU5ldycgKSB7CgogICAgICAgIG15ICVFcnJvcjsKICAgICAgICBteSAlU3RhdGVEYXRhOwogICAgICAgIGlmICggJEdldFBhcmFte05leHRTdGF0ZUlEfSApIHsKICAgICAgICAgICAgJVN0YXRlRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpLT5TdGF0ZUdldCgKICAgICAgICAgICAgICAgIElEID0+ICRHZXRQYXJhbXtOZXh0U3RhdGVJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIG15ICROZXh0U3RhdGUgPSAkU3RhdGVEYXRhe05hbWV9ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAnJzsKICAgICAgICBteSAkRGVzdCAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Rlc3QnICkgfHwgJyc7CgogICAgICAgICMgc2VlIGlmIG9ubHkgYSBuYW1lIGhhcyBiZWVuIHBhc3NlZAogICAgICAgIGlmICggJERlc3QgJiYgJERlc3QgIX4gbXsgXEEgKFxkKyk/IFx8IFx8IC4rIFx6IH14bXMgKSB7CgogICAgICAgICAgICAjIHNlZSBpZiB3ZSBjYW4gZ2V0IGFuIElEIGZvciB0aGlzIHF1ZXVlIG5hbWUKICAgICAgICAgICAgbXkgJERlc3RJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVMb29rdXAoCiAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkRGVzdCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkRGVzdElEKSB7CiAgICAgICAgICAgICAgICAkRGVzdCA9ICREZXN0SUQgLiAnfHwnIC4gJERlc3Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkRGVzdCA9ICcnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAoICROZXdRdWV1ZUlELCAkVG8gKSA9IHNwbGl0KCAvXHxcfC8sICREZXN0ICk7CiAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJE5ld1F1ZXVlSUQ7CgogICAgICAgIG15ICRDdXN0b21lclVzZXIgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ3VzdG9tZXJVc2VyJyApCiAgICAgICAgICAgIHx8ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdQcmVTZWxlY3RlZEN1c3RvbWVyVXNlcicgKQogICAgICAgICAgICB8fCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VsZWN0ZWRDdXN0b21lclVzZXInICkKICAgICAgICAgICAgfHwgJyc7CiAgICAgICAgbXkgJEN1c3RvbWVySUQgICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVySUQnICkgfHwgJyc7CiAgICAgICAgbXkgJFNlbGVjdGVkQ3VzdG9tZXJVc2VyID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlbGVjdGVkQ3VzdG9tZXJVc2VyJyApCiAgICAgICAgICAgIHx8ICcnOwogICAgICAgIG15ICRFeHBhbmRDdXN0b21lck5hbWUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRXhwYW5kQ3VzdG9tZXJOYW1lJyApCiAgICAgICAgICAgIHx8IDA7CiAgICAgICAgbXkgJUZyb21FeHRlcm5hbEN1c3RvbWVyOwogICAgICAgICRGcm9tRXh0ZXJuYWxDdXN0b21lcntDdXN0b21lcn0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUHJlU2VsZWN0ZWRDdXN0b21lclVzZXInICkKICAgICAgICAgICAgfHwgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyVXNlcicgKQogICAgICAgICAgICB8fCAnJzsKCiAgICAgICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3duZXJBbGxSZWZyZXNoJyApICkgewogICAgICAgICAgICAkR2V0UGFyYW17T3duZXJBbGx9ID0gMTsKICAgICAgICAgICAgJEV4cGFuZEN1c3RvbWVyTmFtZSA9IDM7CiAgICAgICAgfQogICAgICAgIGlmICggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Jlc3BvbnNpYmxlQWxsUmVmcmVzaCcgKSApIHsKICAgICAgICAgICAgJEdldFBhcmFte1Jlc3BvbnNpYmxlQWxsfSA9IDE7CiAgICAgICAgICAgICRFeHBhbmRDdXN0b21lck5hbWUgPSAzOwogICAgICAgIH0KICAgICAgICBpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDbGVhckZyb20nICkgKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtGcm9tfSA9ICcnOwogICAgICAgICAgICAkRXhwYW5kQ3VzdG9tZXJOYW1lID0gMzsKICAgICAgICB9CiAgICAgICAgZm9yIG15ICRDb3VudCAoIDEgLi4gMiApIHsKICAgICAgICAgICAgbXkgJEl0ZW0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiRXhwYW5kQ3VzdG9tZXJOYW1lJENvdW50IiApIHx8IDA7CiAgICAgICAgICAgIGlmICggJENvdW50ID09IDEgJiYgJEl0ZW0gKSB7CiAgICAgICAgICAgICAgICAkRXhwYW5kQ3VzdG9tZXJOYW1lID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRDb3VudCA9PSAyICYmICRJdGVtICkgewogICAgICAgICAgICAgICAgJEV4cGFuZEN1c3RvbWVyTmFtZSA9IDI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcmV3cmFwIGJvZHkgaWYgbm8gcmljaCB0ZXh0IGlzIHVzZWQKICAgICAgICBpZiAoICRHZXRQYXJhbXtCb2R5fSAmJiAhJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtCb2R5fSA9ICRMYXlvdXRPYmplY3QtPldyYXBQbGFpblRleHQoCiAgICAgICAgICAgICAgICBNYXhDaGFyYWN0ZXJzID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlJyksCiAgICAgICAgICAgICAgICBQbGFpblRleHQgICAgID0+ICRHZXRQYXJhbXtCb2R5fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgcGVuZGluZyBkYXRlCiAgICAgICAgaWYgKCAhJEV4cGFuZEN1c3RvbWVyTmFtZSAmJiAkU3RhdGVEYXRhe1R5cGVOYW1lfSAmJiAkU3RhdGVEYXRhe1R5cGVOYW1lfSA9fiAvXnBlbmRpbmcvaSApIHsKCiAgICAgICAgICAgICMgY3JlYXRlIGEgZGF0ZXRpbWUgb2JqZWN0IGJhc2VkIG9uIHBlbmRpbmcgZGF0ZQogICAgICAgICAgICBteSAkUGVuZGluZ0RhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgU2Vjb25kID0+IDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgY3VycmVudCBzeXN0ZW0gZXBvY2gKICAgICAgICAgICAgbXkgJEN1clN5c3RlbURhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiAgICAgICAgICAgIGlmICggISRQZW5kaW5nRGF0ZVRpbWVPYmplY3QgfHwgJFBlbmRpbmdEYXRlVGltZU9iamVjdCA8ICRDdXJTeXN0ZW1EYXRlVGltZU9iamVjdCApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnRGF0ZUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgojIFJvdGhlciBPU1MgLyBJVFNNQ29yZSAtIGNhbGN1bGF0ZSBQcmlvcml0eSB2aWEgQ0lQIG1hdHJpeAogICAgICAgIGlmICggJENJUENhbGN1bGF0ZSAmJiAkQ0lQQ2FsY3VsYXRlID09IDIgJiYgJEdldFBhcmFte0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9ICkgewoKICAgICAgICAgICAgIyBnZXQgdGhlIGNyaXRpY2FsaXR5IGVpdGhlciBmcm9tIHRoZSBtYW51YWxseSBzZXQgZHluYW1pYyBmaWVsZCwgb3IgdGhlIHNlcnZpY2UKICAgICAgICAgICAgbXkgJENyaXRpY2FsaXR5ID0gJEdldFBhcmFte0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9OwoKICAgICAgICAgICAgaWYgKCAhJENyaXRpY2FsaXR5ICYmICRHZXRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICAgICAgICAgbXkgJVNlcnZpY2UgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJEdldFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRDcml0aWNhbGl0eSA9ICRTZXJ2aWNle0NyaXRpY2FsaXR5fTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkQ3JpdGljYWxpdHkgKSB7CiAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+UHJpb3JpdHlBbGxvY2F0aW9uR2V0KAogICAgICAgICAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICRDcml0aWNhbGl0eSwKICAgICAgICAgICAgICAgICAgICBJbXBhY3QgICAgICA9PiAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICggJFByaW9yaXR5SUQgbmUgJEdldFBhcmFte1ByaW9yaXR5SUR9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbjsgd2UganVzdCBlbmZvcmNlIHRoZSBwcmlvIGFuZCB3cml0ZSBhbiBlcnJvciB0byB0aGUgbG9nIGZpbGUgaGVyZQogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiR290IFByaW9yaXR5SUQgJyRHZXRQYXJhbXtQcmlvcml0eUlEfScsIGJ1dCBDSVAgZW5mb3JjZXMgJyRQcmlvcml0eUlEJyAtIG92ZXJyaWRpbmcgdGhlIGZyb250ZW5kIHZhbHVlLiIsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1ByaW9yaXR5SUR9ID0gJFByaW9yaXR5SUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICAgICAgIyBza2lwIHZhbGlkYXRpb24gb2YgaGlkZGVuIGZpZWxkcwogICAgICAgIG15ICVWaXNpYmlsaXR5OwoKICAgICAgICAjIHRyYW5zZm9ybSBkeW5hbWljIGZpZWxkIGRhdGEgaW50byBERk5hbWUgPT4gREZOYW1lIHBhaXIKICAgICAgICBteSAlRHluYW1pY0ZpZWxkQWNsID0gbWFwIHsgJF8gPT4gJF8gfSBrZXlzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSo7CgogICAgICAgICMgY2FsbCB0aWNrZXQgQUNMcyBmb3IgRHluYW1pY0ZpZWxkcyB0byBjaGVjayBmaWVsZCB2aXNpYmlsaXR5CiAgICAgICAgbXkgJEFDTFJlc3VsdCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkQ3VzdG9tZXJVc2VyIHx8ICcnLAogICAgICAgICAgICBBY3Rpb24gICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgID0+ICdGb3JtJywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJy0nLAogICAgICAgICAgICBEYXRhICAgICAgICAgICA9PiBcJUR5bmFtaWNGaWVsZEFjbCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgaWYgKCRBQ0xSZXN1bHQpIHsKICAgICAgICAgICAgJVZpc2liaWxpdHkgPSBtYXAgeyAnRHluYW1pY0ZpZWxkXycgLiAkXyA9PiAwIH0ga2V5cyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqOwogICAgICAgICAgICBteSAlQWNsRGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKTsKICAgICAgICAgICAgZm9yIG15ICRGaWVsZCAoIHNvcnQga2V5cyAlQWNsRGF0YSApIHsKICAgICAgICAgICAgICAgICRWaXNpYmlsaXR5eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQgfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICVWaXNpYmlsaXR5ID0gbWFwIHsgJ0R5bmFtaWNGaWVsZF8nIC4gJF8gPT4gMSB9IGtleXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKjsKICAgICAgICB9CgogICAgICAgICMgcmVtZW1iZXIgZHluYW1pYyBmaWVsZCB2YWxpZGF0aW9uIHJlc3VsdHMgaWYgZXJyb25lb3VzCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZFZhbGlkYXRpb25SZXN1bHQ7CiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZFBvc3NpYmxlVmFsdWVzOwoKICAgICAgICAjIGN5Y2xlIHRocm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCB2YWx1ZXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKiApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgbXkgJFBvc3NpYmxlVmFsdWVzRmlsdGVyOwoKICAgICAgICAgICAgbXkgJElzQUNMUmVkdWNpYmxlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzQUNMUmVkdWNpYmxlJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkSXNBQ0xSZWR1Y2libGUpIHsKCiAgICAgICAgICAgICAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgICAgICAgICAgICAgbXkgJFBvc3NpYmxlVmFsdWVzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlBvc3NpYmxlVmFsdWVzR2V0KAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIGZpZWxkIGhhcyBQb3NzaWJsZVZhbHVlcyBwcm9wZXJ0eSBpbiBpdHMgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkUG9zc2libGVWYWx1ZXMpICkgewoKICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgcG9zc2libGUgdmFsdWVzIGtleSA9PiB2YWx1ZSB0byBrZXkgPT4ga2V5IGZvciBBQ0xzIHVzaW5nIGEgSGFzaCBzbGljZQogICAgICAgICAgICAgICAgICAgIG15ICVBY2xEYXRhID0gJXskUG9zc2libGVWYWx1ZXN9OwogICAgICAgICAgICAgICAgICAgIEBBY2xEYXRheyBrZXlzICVBY2xEYXRhIH0gPSBrZXlzICVBY2xEYXRhOwoKICAgICAgICAgICAgICAgICAgICAjIHNldCBwb3NzaWJsZSB2YWx1ZXMgZmlsdGVyIGZyb20gQUNMcwogICAgICAgICAgICAgICAgICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlciB8fCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5UeXBlICAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgICA9PiBcJUFjbERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGlmICgkQUNMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVGaWx0ZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgRmlsZXIga2V5ID0+IGtleSBiYWNrIHRvIGtleSA9PiB2YWx1ZSB1c2luZyBtYXAKICAgICAgICAgICAgICAgICAgICAgICAgJXskUG9zc2libGVWYWx1ZXNGaWx0ZXJ9ID0gbWFwIHsgJF8gPT4gJFBvc3NpYmxlVmFsdWVzLT57JF99IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgJUZpbHRlcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICREeW5hbWljRmllbGRQb3NzaWJsZVZhbHVlc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkUG9zc2libGVWYWx1ZXNGaWx0ZXI7CgogICAgICAgICAgICAjIGRvIG5vdCB2YWxpZGF0ZSBvbiBpbnZpc2libGUgZmllbGRzCiAgICAgICAgICAgIGlmICggISRFeHBhbmRDdXN0b21lck5hbWUgJiYgJFZpc2liaWxpdHl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICkgewoKICAgICAgICAgICAgICAgIG15ICRWYWxpZGF0aW9uUmVzdWx0ID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFZhbHVlVmFsaWRhdGUoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlc0ZpbHRlciA9PiAkUG9zc2libGVWYWx1ZXNGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAoKICAgICAgICAgICAgICAgICAgICAjIE1hbmRhdG9yeSBpcyBhZGRlZCB0byB0aGUgY29uZmlncyBieSAkU2VsZi0+bmV3CiAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5ID0+ICREeW5hbWljRmllbGRDb25maWctPntNYW5kYXRvcnl9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkVmFsaWRhdGlvblJlc3VsdCkgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb3VsZCBub3QgcGVyZm9ybSB2YWxpZGF0aW9uIG9uIGZpZWxkICVzIScsICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH0gKSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBwcm9wYWdhdGUgdmFsaWRhdGlvbiBlcnJvciB0byB0aGUgRXJyb3IgdmFyaWFibGUgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlIGZyb250ZW5kCiAgICAgICAgICAgICAgICBpZiAoICRWYWxpZGF0aW9uUmVzdWx0LT57U2VydmVyRXJyb3J9ICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gICAgICAgICAgICAgICAgICAgICAgICA9ICcgU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRWYWxpZGF0aW9uUmVzdWx0eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICRWYWxpZGF0aW9uUmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICAgICAgbXkgQEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBleHBhbmQgY3VzdG9tZXIgbmFtZQogICAgICAgIG15ICVDdXN0b21lclVzZXJEYXRhOwogICAgICAgIGlmICggJEV4cGFuZEN1c3RvbWVyTmFtZSA9PSAxICkgewoKICAgICAgICAgICAgIyBzZWFyY2ggY3VzdG9tZXIKICAgICAgICAgICAgbXkgJUN1c3RvbWVyVXNlckxpc3Q7CiAgICAgICAgICAgICVDdXN0b21lclVzZXJMaXN0ID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJTZWFyY2goCiAgICAgICAgICAgICAgICBTZWFyY2ggICAgICAgICAgID0+ICRHZXRQYXJhbXtGcm9tfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlck9ubHkgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgaWYganVzdCBvbmUgY3VzdG9tZXIgdXNlciBleGlzdHMKICAgICAgICAgICAgIyBpZiBqdXN0IG9uZSwgZmlsbHVwIEN1c3RvbWVyVXNlcklEIGFuZCBDdXN0b21lcklECiAgICAgICAgICAgICRQYXJhbXtDdXN0b21lclVzZXJMaXN0Q291bnR9ID0gMDsKICAgICAgICAgICAgZm9yIG15ICRLZXlDdXN0b21lclVzZXIgKCBzb3J0IGtleXMgJUN1c3RvbWVyVXNlckxpc3QgKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17Q3VzdG9tZXJVc2VyTGlzdENvdW50fSsrOwogICAgICAgICAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlckxpc3RMYXN0fSAgICAgPSAkQ3VzdG9tZXJVc2VyTGlzdHskS2V5Q3VzdG9tZXJVc2VyfTsKICAgICAgICAgICAgICAgICRQYXJhbXtDdXN0b21lclVzZXJMaXN0TGFzdFVzZXJ9ID0gJEtleUN1c3RvbWVyVXNlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRQYXJhbXtDdXN0b21lclVzZXJMaXN0Q291bnR9ID09IDEgKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17RnJvbX0gICAgICAgICAgICA9ICRQYXJhbXtDdXN0b21lclVzZXJMaXN0TGFzdH07CiAgICAgICAgICAgICAgICAkRXJyb3J7RXhwYW5kQ3VzdG9tZXJOYW1lfSA9IDE7CiAgICAgICAgICAgICAgICBteSAlQ3VzdG9tZXJVc2VyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiAkUGFyYW17Q3VzdG9tZXJVc2VyTGlzdExhc3RVc2VyfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICRDdXN0b21lclVzZXJEYXRhe1VzZXJDdXN0b21lcklEfSApIHsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJJRCA9ICRDdXN0b21lclVzZXJEYXRhe1VzZXJDdXN0b21lcklEfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggJEN1c3RvbWVyVXNlckRhdGF7VXNlckxvZ2lufSApIHsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VyID0gJEN1c3RvbWVyVXNlckRhdGF7VXNlckxvZ2lufTsKICAgICAgICAgICAgICAgICAgICAkRnJvbUV4dGVybmFsQ3VzdG9tZXJ7Q3VzdG9tZXJ9ID0gJEN1c3RvbWVyVXNlckRhdGF7VXNlckxvZ2lufTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggJEZyb21FeHRlcm5hbEN1c3RvbWVye0N1c3RvbWVyfSApIHsKICAgICAgICAgICAgICAgICAgICBteSAlRXh0ZXJuYWxDdXN0b21lclVzZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgVXNlciA9PiAkRnJvbUV4dGVybmFsQ3VzdG9tZXJ7Q3VzdG9tZXJ9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJEZyb21FeHRlcm5hbEN1c3RvbWVye0VtYWlsfSA9ICRFeHRlcm5hbEN1c3RvbWVyVXNlckRhdGF7VXNlckVtYWlsfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBtb3JlIHRoZSBvbmUgY3VzdG9tZXIgdXNlciBleGlzdHMsIHNob3cgbGlzdAogICAgICAgICAgICAjIGFuZCBjbGVhbiBDdXN0b21lclVzZXJJRCBhbmQgQ3VzdG9tZXJJRAogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGRvbid0IGNoZWNrIGVtYWlsIHN5bnRheCBvbiBtdWx0aSBjdXN0b21lciBzZWxlY3QKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gMAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRDdXN0b21lcklEID0gJyc7CgogICAgICAgICAgICAgICAgIyBjbGVhciBmcm9tIGlmIHRoZXJlIGlzIG5vIGN1c3RvbWVyIGZvdW5kCiAgICAgICAgICAgICAgICBpZiAoICElQ3VzdG9tZXJVc2VyTGlzdCApIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17RnJvbX0gPSAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRFcnJvcntFeHBhbmRDdXN0b21lck5hbWV9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZnJvbSBhbmQgY3VzdG9tZXIgaWQgaWYgY3VzdG9tZXIgdXNlciBpcyBnaXZlbgogICAgICAgICMgVGhpcyBpcyB1c2VkIGJ5IEtlcm5lbDo6TW9kdWxlczo6QWRtaW5DdXN0b21lclVzZXIKICAgICAgICBlbHNpZiAoICRFeHBhbmRDdXN0b21lck5hbWUgPT0gMiApIHsKICAgICAgICAgICAgJUN1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgVXNlciA9PiAkQ3VzdG9tZXJVc2VyLAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAlQ3VzdG9tZXJVc2VyTGlzdCA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyU2VhcmNoKAogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGZvciBteSAkS2V5Q3VzdG9tZXJVc2VyICggc29ydCBrZXlzICVDdXN0b21lclVzZXJMaXN0ICkgewogICAgICAgICAgICAgICAgJEdldFBhcmFte0Zyb219ID0gJEN1c3RvbWVyVXNlckxpc3R7JEtleUN1c3RvbWVyVXNlcn07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkQ3VzdG9tZXJVc2VyRGF0YXtVc2VyQ3VzdG9tZXJJRH0gKSB7CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJJRCA9ICRDdXN0b21lclVzZXJEYXRhe1VzZXJDdXN0b21lcklEfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRDdXN0b21lclVzZXJEYXRhe1VzZXJMb2dpbn0gKSB7CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VyID0gJEN1c3RvbWVyVXNlckRhdGF7VXNlckxvZ2lufTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRGcm9tRXh0ZXJuYWxDdXN0b21lcntDdXN0b21lcn0gKSB7CiAgICAgICAgICAgICAgICBteSAlRXh0ZXJuYWxDdXN0b21lclVzZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgICAgICBVc2VyID0+ICRGcm9tRXh0ZXJuYWxDdXN0b21lcntDdXN0b21lcn0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJEZyb21FeHRlcm5hbEN1c3RvbWVye0VtYWlsfSA9ICRFeHRlcm5hbEN1c3RvbWVyVXNlckRhdGF7VXNlck1haWxTdHJpbmd9OwogICAgICAgICAgICB9CiAgICAgICAgICAgICRFcnJvcntFeHBhbmRDdXN0b21lck5hbWV9ID0gMTsKICAgICAgICB9CgogICAgICAgICMgaWYgYSBuZXcgZGVzdGluYXRpb24gcXVldWUgaXMgc2VsZWN0ZWQKICAgICAgICBlbHNpZiAoICRFeHBhbmRDdXN0b21lck5hbWUgPT0gMyApIHsKICAgICAgICAgICAgJEVycm9ye05vU3VibWl0fSA9IDE7CiAgICAgICAgICAgICRDdXN0b21lclVzZXIgPSAkU2VsZWN0ZWRDdXN0b21lclVzZXI7CiAgICAgICAgfQoKICAgICAgICAjICdqdXN0JyBubyBzdWJtaXQKICAgICAgICBlbHNpZiAoICRFeHBhbmRDdXN0b21lck5hbWUgPT0gNCApIHsKICAgICAgICAgICAgJEVycm9ye05vU3VibWl0fSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgY3VzdG9tZXIgaW5mbwogICAgICAgIG15ICVDdXN0b21lckRhdGE7CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVySW5mb0NvbXBvc2UnKSApIHsKICAgICAgICAgICAgaWYgKCAkQ3VzdG9tZXJVc2VyIHx8ICRTZWxlY3RlZEN1c3RvbWVyVXNlciApIHsKICAgICAgICAgICAgICAgICVDdXN0b21lckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gJEN1c3RvbWVyVXNlciB8fCAkU2VsZWN0ZWRDdXN0b21lclVzZXIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICgkQ3VzdG9tZXJJRCkgewogICAgICAgICAgICAgICAgJUN1c3RvbWVyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAkQ3VzdG9tZXJJRCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZW1haWwgYWRkcmVzcwogICAgICAgIGZvciBteSAkRW1haWwgKCAkRW1haWxBZGRyZXNzT2JqZWN0LT5QYXJzZUFkZHJlc3NMaW5lKCBMaW5lID0+ICRHZXRQYXJhbXtGcm9tfSApICkgewogICAgICAgICAgICBpZiAoICEkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0VtYWlsKCBBZGRyZXNzT2JqZWN0ID0+ICRFbWFpbCApICkgewogICAgICAgICAgICAgICAgJEVycm9ye0Vycm9yVHlwZX0gICA9ICRDaGVja0l0ZW1PYmplY3QtPkNoZWNrRXJyb3JUeXBlKCkgLiAnU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICAgICAgJEVycm9ye0Zyb21JbnZhbGlkfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGlmIGl0IGlzIG5vdCBhIHN1YmFjdGlvbiBhYm91dCBhdHRhY2htZW50cywgY2hlY2sgZm9yIHNlcnZlciBlcnJvcnMKICAgICAgICBpZiAoICEkRXhwYW5kQ3VzdG9tZXJOYW1lICkgewogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17RnJvbX0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3J7J0Zyb21JbnZhbGlkJ30gPSAnIFNlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17U3ViamVjdH0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3J7J1N1YmplY3RJbnZhbGlkJ30gPSAnIFNlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICEkTmV3UXVldWVJRCApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnRGVzdGluYXRpb25JbnZhbGlkJ30gPSAnIFNlcnZlckVycm9yJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKQogICAgICAgICAgICAgICAgJiYgJEdldFBhcmFte1NMQUlEfQogICAgICAgICAgICAgICAgJiYgISRHZXRQYXJhbXtTZXJ2aWNlSUR9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnU2VydmljZUludmFsaWQnfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIG1hbmRhdG9yeSBzZXJ2aWNlCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlJykKICAgICAgICAgICAgICAgICYmICRDb25maWctPntTZXJ2aWNlTWFuZGF0b3J5fQogICAgICAgICAgICAgICAgJiYgISRHZXRQYXJhbXtTZXJ2aWNlSUR9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnU2VydmljZUludmFsaWQnfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIG1hbmRhdG9yeSBzbGEKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKQogICAgICAgICAgICAgICAgJiYgJENvbmZpZy0+e1NMQU1hbmRhdG9yeX0KICAgICAgICAgICAgICAgICYmICEkR2V0UGFyYW17U0xBSUR9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnU0xBSW52YWxpZCd9ID0gJyBTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggKCAhJEdldFBhcmFte1R5cGVJRH0gKSAmJiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpUeXBlJykgKSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnVHlwZUlESW52YWxpZCd9ID0gJyBTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte0JvZHl9ICkgewogICAgICAgICAgICAgICAgJEVycm9yeydSaWNoVGV4dEludmFsaWQnfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWNjb3VudFRpbWUnKQogICAgICAgICAgICAgICAgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScpCiAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17VGltZVVuaXRzfSBlcSAnJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRXJyb3J7J1RpbWVVbml0c0ludmFsaWQnfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJUVycm9yKSB7CgogICAgICAgICAgICAjIGdldCBhbmQgZm9ybWF0IGRlZmF1bHQgc3ViamVjdCBhbmQgYm9keQogICAgICAgICAgICBteSAkU3ViamVjdCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICRDb25maWctPntTdWJqZWN0fSB8fCAnJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRCb2R5ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJENvbmZpZy0+e0JvZHl9IHx8ICcnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBtYWtlIHN1cmUgYm9keSBpcyByaWNoIHRleHQKICAgICAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgICAgICRCb2R5ID0gJExheW91dE9iamVjdC0+QXNjaWkyUmljaFRleHQoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRCb2R5LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgQm9keSBhbmQgU3ViamVjdCBwYXJhbWV0ZXJzIGZvciBPdXRwdXQKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte1N1YmplY3R9ICkgewogICAgICAgICAgICAgICAgJEdldFBhcmFte1N1YmplY3R9ID0gJFN1YmplY3Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtCb2R5fSApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtCb2R5fSA9ICRCb2R5OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBzZXJ2aWNlcwogICAgICAgICAgICBteSAkU2VydmljZXMgPSAkU2VsZi0+X0dldFNlcnZpY2VzKAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgJUFDTENvbXBhdEdldFBhcmFtLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlciB8fCAnJywKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgID0+ICROZXdRdWV1ZUlEICAgfHwgMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVzZXQgcHJldmlvdXMgU2VydmljZUlEIHRvIHJlc2V0IFNMQS1MaXN0IGlmIG5vIHNlcnZpY2UgaXMgc2VsZWN0ZWQKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte1NlcnZpY2VJRH0gfHwgISRTZXJ2aWNlcy0+eyAkR2V0UGFyYW17U2VydmljZUlEfSB9ICkgewogICAgICAgICAgICAgICAgJEdldFBhcmFte1NlcnZpY2VJRH0gPSAnJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJFNMQXMgPSAkU2VsZi0+X0dldFNMQXMoCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkQ3VzdG9tZXJVc2VyIHx8ICRTZWxlY3RlZEN1c3RvbWVyVXNlciB8fCAnJywKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgID0+ICROZXdRdWV1ZUlEICAgfHwgMSwKICAgICAgICAgICAgICAgIFNlcnZpY2VzICAgICAgID0+ICRTZXJ2aWNlcywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgaGVhZGVyIGFuZCBuYXZpZ2F0aW9uIGJhcgogICAgICAgICAgICBteSAkT3V0cHV0ID0gam9pbiAnJywKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkhlYWRlcigpLAogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAgICAgIyBodG1sIG91dHB1dAogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza1Bob25lTmV3KAogICAgICAgICAgICAgICAgUXVldWVJRCA9PiAkU2VsZi0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVXNlcnMgICA9PiAkU2VsZi0+X0dldFVzZXJzKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgUXVldWVJRCAgPT4gJE5ld1F1ZXVlSUQsCiAgICAgICAgICAgICAgICAgICAgQWxsVXNlcnMgPT4gJEdldFBhcmFte093bmVyQWxsfQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIFVzZXJTZWxlY3RlZCAgICAgPT4gJEdldFBhcmFte05ld1VzZXJJRH0sCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZVVzZXJzID0+ICRTZWxmLT5fR2V0UmVzcG9uc2libGVzKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgUXVldWVJRCAgPT4gJE5ld1F1ZXVlSUQsCiAgICAgICAgICAgICAgICAgICAgQWxsVXNlcnMgPT4gJEdldFBhcmFte1Jlc3BvbnNpYmxlQWxsfQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlVXNlclNlbGVjdGVkID0+ICRHZXRQYXJhbXtOZXdSZXNwb25zaWJsZUlEfSwKICAgICAgICAgICAgICAgIE5leHRTdGF0ZXMgICAgICAgICAgICAgID0+ICRTZWxmLT5fR2V0TmV4dFN0YXRlcygKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJUFDTENvbXBhdEdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRDdXN0b21lclVzZXIgfHwgJFNlbGVjdGVkQ3VzdG9tZXJVc2VyIHx8ICcnLAogICAgICAgICAgICAgICAgICAgIFF1ZXVlSUQgPT4gJE5ld1F1ZXVlSUQgfHwgMSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBOZXh0U3RhdGUgID0+ICROZXh0U3RhdGUsCiAgICAgICAgICAgICAgICBQcmlvcml0aWVzID0+ICRTZWxmLT5fR2V0UHJpb3JpdGllcygKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJUFDTENvbXBhdEdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRDdXN0b21lclVzZXIgfHwgJFNlbGVjdGVkQ3VzdG9tZXJVc2VyIHx8ICcnLAogICAgICAgICAgICAgICAgICAgIFF1ZXVlSUQgPT4gJE5ld1F1ZXVlSUQgfHwgMSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBUeXBlcyA9PiAkU2VsZi0+X0dldFR5cGVzKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlciB8fCAkU2VsZWN0ZWRDdXN0b21lclVzZXIgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgUXVldWVJRCA9PiAkTmV3UXVldWVJRCB8fCAxLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIFNlcnZpY2VzICAgICAgICAgID0+ICRTZXJ2aWNlcywKICAgICAgICAgICAgICAgIFNMQXMgICAgICAgICAgICAgID0+ICRTTEFzLAogICAgICAgICAgICAgICAgU3RhbmRhcmRUZW1wbGF0ZXMgPT4gJFNlbGYtPl9HZXRTdGFuZGFyZFRlbXBsYXRlcygKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJUFDTENvbXBhdEdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFF1ZXVlSUQgPT4gJE5ld1F1ZXVlSUQgfHwgJycsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCAgID0+ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJEN1c3RvbWVySUQgKSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkQ3VzdG9tZXJVc2VyLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJEYXRhID0+IFwlQ3VzdG9tZXJEYXRhLAogICAgICAgICAgICAgICAgVG8gICAgICAgICAgID0+ICRTZWxmLT5fR2V0VG9zKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgUXVldWVJRCA9PiAkTmV3UXVldWVJRAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIFRvU2VsZWN0ZWQgID0+ICREZXN0LAogICAgICAgICAgICAgICAgRXJyb3JzICAgICAgPT4gXCVFcnJvciwKICAgICAgICAgICAgICAgIEF0dGFjaG1lbnRzID0+IFxAQXR0YWNobWVudHMsCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBNdWx0aXBsZUN1c3RvbWVyICAgICA9PiBcQE11bHRpcGxlQ3VzdG9tZXIsCiAgICAgICAgICAgICAgICBGcm9tRXh0ZXJuYWxDdXN0b21lciA9PiBcJUZyb21FeHRlcm5hbEN1c3RvbWVyLAogICAgICAgICAgICAgICAgVmlzaWJpbGl0eSAgICAgICAgICAgPT4gXCVWaXNpYmlsaXR5LAogICAgICAgICAgICAgICAgREZQb3NzaWJsZVZhbHVlcyAgICAgPT4gXCVEeW5hbWljRmllbGRQb3NzaWJsZVZhbHVlcywKICAgICAgICAgICAgICAgIERGRXJyb3JzICAgICAgICAgICAgID0+IFwlRHluYW1pY0ZpZWxkVmFsaWRhdGlvblJlc3VsdCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgICMgY3JlYXRlIG5ldyB0aWNrZXQsIGRvIGRiIGluc2VydAogICAgICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICRHZXRQYXJhbXtTdWJqZWN0fSwKICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICROZXdRdWV1ZUlELAogICAgICAgICAgICBTdWJqZWN0ICAgICAgPT4gJEdldFBhcmFte1N1YmplY3R9LAogICAgICAgICAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkR2V0UGFyYW17VHlwZUlEfSwKICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJEdldFBhcmFte1NMQUlEfSwKICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICRHZXRQYXJhbXtOZXh0U3RhdGVJRH0sCiAgICAgICAgICAgIFByaW9yaXR5SUQgICA9PiAkR2V0UGFyYW17UHJpb3JpdHlJRH0sCiAgICAgICAgICAgIE93bmVySUQgICAgICA9PiAxLAogICAgICAgICAgICBDdXN0b21lck5vICAgPT4gJEN1c3RvbWVySUQsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkU2VsZWN0ZWRDdXN0b21lclVzZXIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgdGlja2V0IGR5bmFtaWMgZmllbGRzCiAgICAgICAgIyBjeWNsZSB0aHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggdmFsdWVzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9IG5lICdUaWNrZXQnOwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJFZpc2liaWxpdHl7IkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0ifTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e1JlYWRvbmx5fTsKCiAgICAgICAgICAgICMgc2V0IHRoZSB2YWx1ZQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBwcmUgbG9hZGVkIGF0dGFjaG1lbnQKICAgICAgICBteSBAQXR0YWNobWVudERhdGEgPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREdldEFsbEZpbGVzRGF0YSgKICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzdWJtaXQgYXR0YWNobWVudAogICAgICAgIG15ICVVcGxvYWRTdHVmZiA9ICRQYXJhbU9iamVjdC0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICBQYXJhbSA9PiAnRmlsZVVwbG9hZCcsCiAgICAgICAgKTsKICAgICAgICBpZiAoJVVwbG9hZFN0dWZmKSB7CiAgICAgICAgICAgIHB1c2ggQEF0dGFjaG1lbnREYXRhLCBcJVVwbG9hZFN0dWZmOwogICAgICAgIH0KCiAgICAgICAgbXkgJE1pbWVUeXBlID0gJ3RleHQvcGxhaW4nOwogICAgICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgICRNaW1lVHlwZSA9ICd0ZXh0L2h0bWwnOwoKICAgICAgICAgICAgIyByZW1vdmUgdW51c2VkIGlubGluZSBpbWFnZXMKICAgICAgICAgICAgbXkgQE5ld0F0dGFjaG1lbnREYXRhOwogICAgICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50RGF0YSkgewogICAgICAgICAgICAgICAgbXkgJENvbnRlbnRJRCA9ICRBdHRhY2htZW50LT57Q29udGVudElEfTsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkQ29udGVudElECiAgICAgICAgICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRUeXBlfSA9fiAvaW1hZ2UvaSApCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0Rpc3Bvc2l0aW9ufSBlcSAnaW5saW5lJyApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRDb250ZW50SURIVE1MUXVvdGUgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICAgICAgICAgICAgICBUZXh0ID0+ICRDb250ZW50SUQsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyB3b3JrYXJvdW5kIGZvciBsaW5rIGVuY29kZSBvZiByaWNoIHRleHQgZWRpdG9yLCBzZWUgYnVnIzUwNTMKICAgICAgICAgICAgICAgICAgICBteSAkQ29udGVudElETGlua0VuY29kZSA9ICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJENvbnRlbnRJRCk7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte0JvZHl9ID1+IHMvKENvbnRlbnRJRD0pJENvbnRlbnRJRExpbmtFbmNvZGUvJDEkQ29udGVudElEL2c7CgogICAgICAgICAgICAgICAgICAgICMgaWdub3JlIGF0dGFjaG1lbnQgaWYgbm90IGxpbmtlZCBpbiBib2R5CiAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICRHZXRQYXJhbXtCb2R5fSAhfiAvKFxRJENvbnRlbnRJREhUTUxRdW90ZVxFfFxRJENvbnRlbnRJRFxFKS9pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgaW5saW5lIGltYWdlcyBhbmQgbm9ybWFsIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICBwdXNoIEBOZXdBdHRhY2htZW50RGF0YSwgXCV7JEF0dGFjaG1lbnR9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIEBBdHRhY2htZW50RGF0YSA9IEBOZXdBdHRhY2htZW50RGF0YTsKCiAgICAgICAgICAgICMgdmVyaWZ5IGh0bWwgZG9jdW1lbnQKICAgICAgICAgICAgJEdldFBhcmFte0JvZHl9ID0gJExheW91dE9iamVjdC0+UmljaFRleHREb2N1bWVudENvbXBsZXRlKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRHZXRQYXJhbXtCb2R5fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICRQbGFpbkJvZHkgPSAkR2V0UGFyYW17Qm9keX07CgogICAgICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgICRQbGFpbkJvZHkgPSAkTGF5b3V0T2JqZWN0LT5SaWNoVGV4dDJBc2NpaSggU3RyaW5nID0+ICRHZXRQYXJhbXtCb2R5fSApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiBuZXcgb3duZXIgaXMgZ2l2ZW4gKHRoZW4gc2VuZCBubyBhZ2VudCBub3RpZnkpCiAgICAgICAgbXkgJE5vQWdlbnROb3RpZnkgPSAwOwogICAgICAgIGlmICggJEdldFBhcmFte05ld1VzZXJJRH0gKSB7CiAgICAgICAgICAgICROb0FnZW50Tm90aWZ5ID0gMTsKICAgICAgICB9CiAgICAgICAgbXkgJEFydGljbGVPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwogICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQ2hhbm5lbCggQ2hhbm5lbE5hbWUgPT4gJ1Bob25lJyApOwogICAgICAgIG15ICRBcnRpY2xlSUQgICAgICAgICAgICA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUNyZWF0ZSgKICAgICAgICAgICAgTm9BZ2VudE5vdGlmeSAgICAgICAgPT4gJE5vQWdlbnROb3RpZnksCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJENvbmZpZy0+e1NlbmRlclR5cGV9LAogICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAkQ29uZmlnLT57SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9LAogICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17RnJvbX0sCiAgICAgICAgICAgIFRvICAgICAgICAgICAgICAgICAgID0+ICRUbywKICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJEdldFBhcmFte1N1YmplY3R9LAogICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17Qm9keX0sCiAgICAgICAgICAgIE1pbWVUeXBlICAgICAgICAgICAgID0+ICRNaW1lVHlwZSwKICAgICAgICAgICAgQ2hhcnNldCAgICAgICAgICAgICAgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICA9PiAkQ29uZmlnLT57SGlzdG9yeVR5cGV9LAogICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAkQ29uZmlnLT57SGlzdG9yeUNvbW1lbnR9IHx8ICclJScsCiAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgID0+ICggJENvbmZpZ09iamVjdC0+R2V0KCdBdXRvUmVzcG9uc2VGb3JXZWJUaWNrZXRzJykgKQogICAgICAgICAgICA/ICdhdXRvIHJlcGx5JwogICAgICAgICAgICA6ICcnLAogICAgICAgICAgICBPcmlnSGVhZGVyID0+IHsKICAgICAgICAgICAgICAgIEZyb20gICAgPT4gJEdldFBhcmFte0Zyb219LAogICAgICAgICAgICAgICAgVG8gICAgICA9PiAkR2V0UGFyYW17VG99LAogICAgICAgICAgICAgICAgU3ViamVjdCA9PiAkR2V0UGFyYW17U3ViamVjdH0sCiAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICRQbGFpbkJvZHksCgogICAgICAgICAgICB9LAogICAgICAgICAgICBRdWV1ZSA9PiAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKCBRdWV1ZUlEID0+ICROZXdRdWV1ZUlEICksCiAgICAgICAgKTsKICAgICAgICBpZiAoICEkQXJ0aWNsZUlEICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgICMgc2V0IGFydGljbGUgZHluYW1pYyBmaWVsZHMKICAgICAgICAjIGN5Y2xlIHRocm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCB2YWx1ZXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKiApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57T2JqZWN0VHlwZX0gbmUgJ0FydGljbGUnOwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJFZpc2liaWxpdHl7IkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0ifTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e1JlYWRvbmx5fTsKCiAgICAgICAgICAgICMgc2V0IHRoZSB2YWx1ZQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZFZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBQZXJtaXNzaW9ucyBjaGVjayB3ZXJlIGRvbmUgZWFybGllcgogICAgICAgIGlmICggJEdldFBhcmFte0Zyb21DaGF0SUR9ICkgewogICAgICAgICAgICBteSAkQ2hhdE9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoYXQnKTsKICAgICAgICAgICAgbXkgQENoYXRNZXNzYWdlTGlzdCA9ICRDaGF0T2JqZWN0LT5DaGF0TWVzc2FnZUxpc3QoCiAgICAgICAgICAgICAgICBDaGF0SUQgPT4gJEdldFBhcmFte0Zyb21DaGF0SUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkQ2hhdEFydGljbGVJRDsKCiAgICAgICAgICAgIGlmIChAQ2hhdE1lc3NhZ2VMaXN0KSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJE1lc3NhZ2UgKEBDaGF0TWVzc2FnZUxpc3QpIHsKICAgICAgICAgICAgICAgICAgICAkTWVzc2FnZS0+e01lc3NhZ2VUZXh0fSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgID0+ICRNZXNzYWdlLT57TWVzc2FnZVRleHR9LAogICAgICAgICAgICAgICAgICAgICAgICBMaW5rRmVhdHVyZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJEFydGljbGVDaGF0QmFja2VuZCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQ2hhbm5lbCggQ2hhbm5lbE5hbWUgPT4gJ0NoYXQnICk7CiAgICAgICAgICAgICAgICAkQ2hhdEFydGljbGVJRCA9ICRBcnRpY2xlQ2hhdEJhY2tlbmQtPkFydGljbGVDcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICRDb25maWctPntTZW5kZXJUeXBlfSwKICAgICAgICAgICAgICAgICAgICBDaGF0TWVzc2FnZUxpc3QgICAgICA9PiBcQENoYXRNZXNzYWdlTGlzdCwKICAgICAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAkQ29uZmlnLT57SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICA9PiAkQ29uZmlnLT57SGlzdG9yeVR5cGV9LAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICRDb25maWctPntIaXN0b3J5Q29tbWVudH0gfHwgJyUlJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRDaGF0QXJ0aWNsZUlEKSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpcyBjdXN0b21lciBhY3RpdmVseSBwcmVzZW50CiAgICAgICAgICAgICAgICAjIGl0IG1lYW5zIGN1c3RvbWVyIGhhcyBhY2NlcHRlZCB0aGlzIGNoYXQgYW5kIG5vdCBsZWZ0IGl0IQogICAgICAgICAgICAgICAgbXkgJEN1c3RvbWVyUHJlc2VudCA9ICRDaGF0T2JqZWN0LT5DdXN0b21lclByZXNlbnQoCiAgICAgICAgICAgICAgICAgICAgQ2hhdElEID0+ICRHZXRQYXJhbXtGcm9tQ2hhdElEfSwKICAgICAgICAgICAgICAgICAgICBBY3RpdmUgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3M7CgogICAgICAgICAgICAgICAgIyBpZiB0aGVyZSBpcyBubyBjdXN0b21lciBwcmVzZW50IGluIHRoZSBjaGF0CiAgICAgICAgICAgICAgICAjIGp1c3QgcmVtb3ZlIHRoZSBjaGF0CiAgICAgICAgICAgICAgICBpZiAoICEkQ3VzdG9tZXJQcmVzZW50ICkgewogICAgICAgICAgICAgICAgICAgICRTdWNjZXNzID0gJENoYXRPYmplY3QtPkNoYXREZWxldGUoCiAgICAgICAgICAgICAgICAgICAgICAgIENoYXRJRCA9PiAkR2V0UGFyYW17RnJvbUNoYXRJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBzZXQgY2hhdCBzdGF0dXMgdG8gY2xvc2VkIGFuZCBpbmZvcm0gb3RoZXIgYWdlbnRzCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU3VjY2VzcyA9ICRDaGF0T2JqZWN0LT5DaGF0VXBkYXRlKAogICAgICAgICAgICAgICAgICAgICAgICBDaGF0SUQgICAgID0+ICRHZXRQYXJhbXtGcm9tQ2hhdElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICAgICA9PiAnY2xvc2VkJywKICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZCA9PiAxLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IHVzZXIgZGF0YQogICAgICAgICAgICAgICAgICAgIG15ICVVc2VyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJFJlcXVlc3Rlck5hbWUgPSAkVXNlcntVc2VyRnVsbG5hbWV9OwogICAgICAgICAgICAgICAgICAgICRSZXF1ZXN0ZXJOYW1lIHx8PSAkU2VsZi0+e1VzZXJJRH07CgogICAgICAgICAgICAgICAgICAgIG15ICRMZWF2ZU1lc3NhZ2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Okxhbmd1YWdlJyktPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGhhcyBsZWZ0IHRoZSBjaGF0LiIsCiAgICAgICAgICAgICAgICAgICAgICAgICRSZXF1ZXN0ZXJOYW1lLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICRTdWNjZXNzID0gJENoYXRPYmplY3QtPkNoYXRNZXNzYWdlQWRkKAogICAgICAgICAgICAgICAgICAgICAgICBDaGF0SUQgICAgICAgICAgPT4gJEdldFBhcmFte0Zyb21DaGF0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBDaGF0dGVySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICBDaGF0dGVyVHlwZSAgICAgPT4gJ1VzZXInLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlVGV4dCAgICAgPT4gJExlYXZlTWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtR2VuZXJhdGVkID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyB0aW1lIGFmdGVyIGNoYXQgd2lsbCBiZSByZW1vdmVkCiAgICAgICAgICAgICAgICAgICAgbXkgJENoYXRUVEwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0NoYXRFbmdpbmU6OkNoYXRUVEwnKTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJENoYXRDbG9zZWRNZXNzYWdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpLT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGNoYXQgaGFzIGJlZW4gY2xvc2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJXMgaG91cnMuIiwKICAgICAgICAgICAgICAgICAgICAgICAgJENoYXRUVEwsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkQ2hhdE9iamVjdC0+Q2hhdE1lc3NhZ2VBZGQoCiAgICAgICAgICAgICAgICAgICAgICAgIENoYXRJRCAgICAgICAgICA9PiAkR2V0UGFyYW17RnJvbUNoYXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIENoYXR0ZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIENoYXR0ZXJUeXBlICAgICA9PiAnVXNlcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VUZXh0ICAgICA9PiAkQ2hhdENsb3NlZE1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbUdlbmVyYXRlZCA9PiAxLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIGFsbCBBR0VOVCBwYXJ0aWNpcGFudHMgZnJvbSBjaGF0CiAgICAgICAgICAgICAgICAgICAgbXkgQFBhcnRpY2lwYW50c0xpc3QgPSAkQ2hhdE9iamVjdC0+Q2hhdFBhcnRpY2lwYW50TGlzdCgKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhdElEID0+ICRHZXRQYXJhbXtGcm9tQ2hhdElEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIENIQVRQQVJUSUNJUEFOVDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJENoYXRQYXJ0aWNpcGFudCAoQFBhcnRpY2lwYW50c0xpc3QpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcCBpdCB0aGlzIHBhcnRpY2lwYW50IGlzIG5vdCBhZ2VudAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IENIQVRQQVJUSUNJUEFOVCBpZiAkQ2hhdFBhcnRpY2lwYW50LT57Q2hhdHRlclR5cGV9IG5lICdVc2VyJzsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIHRoaXMgcGFydGljaXBhbnRzIGZyb20gdGhlIGNoYXQKICAgICAgICAgICAgICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkQ2hhdE9iamVjdC0+Q2hhdFBhcnRpY2lwYW50UmVtb3ZlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhdElEICAgICAgPT4gJEdldFBhcmFte0Zyb21DaGF0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhdHRlcklEICAgPT4gJENoYXRQYXJ0aWNpcGFudC0+e0NoYXR0ZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGF0dGVyVHlwZSA9PiAnVXNlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNldCBvd25lciAoaWYgbmV3IHVzZXIgaWQgaXMgZ2l2ZW4pCiAgICAgICAgaWYgKCAkR2V0UGFyYW17TmV3VXNlcklEfSApIHsKICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0T3duZXJTZXQoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgTmV3VXNlcklEID0+ICRHZXRQYXJhbXtOZXdVc2VySUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2V0IGxvY2sKICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0TG9ja1NldCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIExvY2sgICAgID0+ICdsb2NrJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZWxzZSBzZXQgb3duZXIgdG8gY3VycmVudCBhZ2VudCBidXQgZG8gbm90IGxvY2sgaXQKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0T3duZXJTZXQoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgTmV3VXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2V0IHJlc3BvbnNpYmxlIChpZiBuZXcgdXNlciBpZCBpcyBnaXZlbikKICAgICAgICBpZiAoICRHZXRQYXJhbXtOZXdSZXNwb25zaWJsZUlEfSApIHsKICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0UmVzcG9uc2libGVTZXQoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgTmV3VXNlcklEID0+ICRHZXRQYXJhbXtOZXdSZXNwb25zaWJsZUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHRpbWUgYWNjb3VudGluZwogICAgICAgIGlmICggJEdldFBhcmFte1RpbWVVbml0c30gKSB7CiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRUaW1lKAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgVGltZVVuaXQgID0+ICRHZXRQYXJhbXtUaW1lVW5pdHN9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgd3JpdGUgYXR0YWNobWVudHMKICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50RGF0YSkgewogICAgICAgICAgICAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVXcml0ZUF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAleyRBdHRhY2htZW50fSwKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlbW92ZSBwcmUgc3VibWl0dGVkIGF0dGFjaG1lbnRzCiAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURSZW1vdmUoIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0gKTsKCiAgICAgICAgIyBkZWxldGUgaGlkZGVuIGZpZWxkcyBjYWNoZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgICAgIFR5cGUgPT4gJ0hpZGRlbkZpZWxkcycsCiAgICAgICAgICAgIEtleSAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICk7CgogICAgICAgICMgbGluayB0aWNrZXRzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkR2V0UGFyYW17TGlua1RpY2tldElEfQogICAgICAgICAgICAmJiAkQ29uZmlnLT57U3BsaXRMaW5rVHlwZX0KICAgICAgICAgICAgJiYgJENvbmZpZy0+e1NwbGl0TGlua1R5cGV9LT57TGlua1R5cGV9CiAgICAgICAgICAgICYmICRDb25maWctPntTcGxpdExpbmtUeXBlfS0+e0RpcmVjdGlvbn0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEFjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAncm8nLAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJEdldFBhcmFte0xpbmtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gVHJhbnNsYXRhYmxlKCdZb3UgbmVlZCBybyBwZXJtaXNzaW9uIScpLAogICAgICAgICAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkU291cmNlS2V5ID0gJEdldFBhcmFte0xpbmtUaWNrZXRJRH07CiAgICAgICAgICAgIG15ICRUYXJnZXRLZXkgPSAkVGlja2V0SUQ7CgogICAgICAgICAgICBpZiAoICRDb25maWctPntTcGxpdExpbmtUeXBlfS0+e0RpcmVjdGlvbn0gZXEgJ1NvdXJjZScgKSB7CiAgICAgICAgICAgICAgICAkU291cmNlS2V5ID0gJFRpY2tldElEOwogICAgICAgICAgICAgICAgJFRhcmdldEtleSA9ICRHZXRQYXJhbXtMaW5rVGlja2V0SUR9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGxpbmsgdGhlIHRpY2tldHMKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0FkZCgKICAgICAgICAgICAgICAgIFNvdXJjZU9iamVjdCA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgIFNvdXJjZUtleSAgICA9PiAkU291cmNlS2V5LAogICAgICAgICAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdUaWNrZXQnLAogICAgICAgICAgICAgICAgVGFyZ2V0S2V5ICAgID0+ICRUYXJnZXRLZXksCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJENvbmZpZy0+e1NwbGl0TGlua1R5cGV9LT57TGlua1R5cGV9IHx8ICdOb3JtYWwnLAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjbG9zZWQgdGlja2V0cyBnZXQgdW5sb2NrZWQKICAgICAgICBpZiAoICRTdGF0ZURhdGF7VHlwZU5hbWV9ID1+IC9eY2xvc2UvaSApIHsKCiAgICAgICAgICAgICMgc2V0IGxvY2sKICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0TG9ja1NldCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIExvY2sgICAgID0+ICd1bmxvY2snLAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgcGVuZGluZyB0aW1lCiAgICAgICAgZWxzaWYgKCAkU3RhdGVEYXRhe1R5cGVOYW1lfSA9fiAvXnBlbmRpbmcvaSApIHsKCiAgICAgICAgICAgICMgc2V0IHBlbmRpbmcgdGltZQogICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZW5kaW5nVGltZVNldCgKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHJlZGlyZWN0IHNjcmVlbgogICAgICAgIG15ICROZXh0U2NyZWVuID0gJFNlbGYtPntTZXNzaW9ufXtVc2VyQ3JlYXRlTmV4dE1hc2t9IHx8ICdBZ2VudFRpY2tldFBob25lO1N1YmFjdGlvbj1DcmVhdGVkJzsKCiAgICAgICAgIyByZWRpcmVjdAogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kTmV4dFNjcmVlbjtUaWNrZXRJRD0kVGlja2V0SUQiLAogICAgICAgICk7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQUpBWFVwZGF0ZScgKSB7CiAgICAgICAgbXkgJERlc3QgICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Rlc3QnICkgfHwgJyc7CiAgICAgICAgbXkgJEN1c3RvbWVyVXNlciAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlbGVjdGVkQ3VzdG9tZXJVc2VyJyApOwogICAgICAgIG15ICRFbGVtZW50Q2hhbmdlZCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdFbGVtZW50Q2hhbmdlZCcgKSB8fCAnJzsKICAgICAgICBteSAkUXVldWVJRCAgICAgICAgPSAnJzsKICAgICAgICBpZiAoICREZXN0ID1+IC9eKFxkezEsMTAwfSlcfFx8Lis/JC8gKSB7CiAgICAgICAgICAgICRRdWV1ZUlEID0gJDE7CiAgICAgICAgfQogICAgICAgICRHZXRQYXJhbXtEZXN0fSAgICA9ICREZXN0OwogICAgICAgICRHZXRQYXJhbXtRdWV1ZUlEfSA9ICRRdWV1ZUlEOwoKICAgICAgICAjIGdldCBsaXN0IHR5cGUKICAgICAgICBteSAkVHJlZVZpZXcgPSAwOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpIGVxICd0cmVlJyApIHsKICAgICAgICAgICAgJFRyZWVWaWV3ID0gMTsKICAgICAgICB9CgogICAgICAgIG15ICRBdXRvc2VsZWN0ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBQ0w6OkF1dG9zZWxlY3QnKSB8fCB1bmRlZjsKICAgICAgICBteSAkQUNMUHJlc2VsZWN0aW9uOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBQ0w6OkFDTFByZXNlbGVjdGlvbicpICkgewoKICAgICAgICAgICAgIyBnZXQgY2FjaGVkIHByZXNlbGVjdGlvbiBydWxlcwogICAgICAgICAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKICAgICAgICAgICAgJEFDTFByZXNlbGVjdGlvbiA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGlja2V0QUNMJywKICAgICAgICAgICAgICAgIEtleSAgPT4gJ1ByZXNlbGVjdGlvbicsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggISRBQ0xQcmVzZWxlY3Rpb24gKSB7CiAgICAgICAgICAgICAgICAkQUNMUHJlc2VsZWN0aW9uID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5TZXRBQ0xQcmVzZWxlY3Rpb25DYWNoZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAlQ29udmVyZ2VuY2UgPSAoCiAgICAgICAgICAgIFN0ZEZpZWxkcyA9PiAwLAogICAgICAgICAgICBGaWVsZHMgICAgPT4gMCwKICAgICAgICApOwogICAgICAgIG15ICVDaGFuZ2VkRWxlbWVudHMgPSAkRWxlbWVudENoYW5nZWQgPyAoICRFbGVtZW50Q2hhbmdlZCA9PiAxICkgOiAoKTsKICAgICAgICBpZiAoICRDaGFuZ2VkRWxlbWVudHN7U2VydmljZUlEfSApIHsKICAgICAgICAgICAgJENoYW5nZWRFbGVtZW50c3tDdXN0b21lclVzZXJJRH0gPSAxOwogICAgICAgICAgICAkQ2hhbmdlZEVsZW1lbnRze0N1c3RvbWVySUR9ICAgICA9IDE7CiAgICAgICAgfQogICAgICAgIG15ICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0ID0gJUNoYW5nZWRFbGVtZW50czsKICAgICAgICBteSAlQ2hhbmdlZFN0ZEZpZWxkcyAgICAgICA9ICRFbGVtZW50Q2hhbmdlZCAmJiAkRWxlbWVudENoYW5nZWQgIX4gL15EeW5hbWljRmllbGRfLyA/ICVDaGFuZ2VkRWxlbWVudHMgOiAoKTsKCiAgICAgICAgbXkgJExvb3BQcm90ZWN0aW9uID0gMTAwOwogICAgICAgIG15ICVTdGRGaWVsZFZhbHVlczsKICAgICAgICBteSAlRHluRmllbGRTdGF0ZXMgPSAoCiAgICAgICAgICAgIFZpc2liaWxpdHkgPT4ge30sCiAgICAgICAgICAgIEZpZWxkcyAgICAgPT4ge30sCiAgICAgICAgICAgIFNldHMgICAgICAgPT4ge30sCiAgICAgICAgKTsKCiAgICAgICAgdW50aWwgKCAkQ29udmVyZ2VuY2V7RmllbGRzfSApIHsKCiAgICAgICAgICAgICMgZGV0ZXJtaW5lIHN0YW5kYXJkIGZpZWxkIGlucHV0CiAgICAgICAgICAgIHVudGlsICggJENvbnZlcmdlbmNle1N0ZEZpZWxkc30gKSB7CgogICAgICAgICAgICAgICAgbXkgJU5ld0NoYW5nZWRFbGVtZW50czsKCiAgICAgICAgICAgICAgICAjIHdoaWNoIHN0YW5kYXJkIGZpZWxkcyB0byBjaGVjayAtIEZpZWxkSUQgPT4gR2V0UGFyYW1WYWx1ZSAobmVjZXNzYXJ5IGZvciBEZXN0KQogICAgICAgICAgICAgICAgbXkgJUNoZWNrID0gKAogICAgICAgICAgICAgICAgICAgIERlc3QgICAgICAgICAgICAgICA9PiAnUXVldWVJRCcsCiAgICAgICAgICAgICAgICAgICAgTmV3VXNlcklEICAgICAgICAgID0+ICdOZXdVc2VySUQnLAogICAgICAgICAgICAgICAgICAgIE5ld1Jlc3BvbnNpYmxlSUQgICA9PiAnTmV3UmVzcG9uc2libGVJRCcsCiAgICAgICAgICAgICAgICAgICAgTmV4dFN0YXRlSUQgICAgICAgID0+ICdOZXh0U3RhdGVJRCcsCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICAgICAgID0+ICdQcmlvcml0eUlEJywKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgICAgICAgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICAgICAgID0+ICdTTEFJRCcsCiAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmRUZW1wbGF0ZUlEID0+ICdTdGFuZGFyZFRlbXBsYXRlSUQnLAogICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgICA9PiAnVHlwZUlEJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoJEFDTFByZXNlbGVjdGlvbikgewogICAgICAgICAgICAgICAgICAgIEZJRUxEOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRmllbGRJRCAoIHNvcnQga2V5cyAlQ2hlY2sgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBQ0xQcmVzZWxlY3Rpb24tPntGaWVsZHN9eyRGaWVsZElEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRGaWVsZElEIG5vdCBkZWZpbmVkIGluIFRpY2tldEFDTCBwcmVzZWxlY3Rpb24gcnVsZXMhIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+eyRGaWVsZElEfSAmJiAkQ2hhbmdlZEVsZW1lbnRzeyRGaWVsZElEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRFbGVtZW50ICggc29ydCBrZXlzICVDaGFuZ2VkRWxlbWVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFDTFByZXNlbGVjdGlvbi0+e1J1bGVzfXtUaWNrZXR9eyRFbGVtZW50fXskRmllbGRJRH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkU2VsZi0+e0ludGVybmFsRGVwZW5kYW5jeX17JEVsZW1lbnR9eyRGaWVsZElEfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEFDTFByZXNlbGVjdGlvbi0+e0ZpZWxkc317JEVsZW1lbnR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEVsZW1lbnQgbm90IGRlZmluZWQgaW4gVGlja2V0QUNMIHByZXNlbGVjdGlvbiBydWxlcyEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGRlbGV0ZSB1bmFmZmVjdGVkIGZpZWxkcwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJENoZWNreyRGaWVsZElEfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBmb3IgZWFjaCBzdGFuZGFyZCBmaWVsZCB3aGljaCBoYXMgdG8gYmUgY2hlY2tlZCwgcnVuIHRoZSBkZWZpbmVkIG1ldGhvZAogICAgICAgICAgICAgICAgTUVUSE9EOgogICAgICAgICAgICAgICAgZm9yIG15ICRGaWVsZCAoIEB7ICRTZWxmLT57RmllbGRNZXRob2RzfSB9ICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgTUVUSE9EIGlmICEkQ2hlY2t7ICRGaWVsZC0+e0ZpZWxkSUR9IH07CgogICAgICAgICAgICAgICAgICAgICMgdXNlICRDaGVja3sgJEZpZWxkLT57RmllbGRJRH0gfSBmb3IgRGVzdD0+UXVldWVJRAogICAgICAgICAgICAgICAgICAgICRTdGRGaWVsZFZhbHVlc3sgJENoZWNreyAkRmllbGQtPntGaWVsZElEfSB9IH0gPSAkRmllbGQtPntNZXRob2R9LT4oCiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgID0+ICRHZXRQYXJhbXtOZXdVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkQ3VzdG9tZXJVc2VyIHx8ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgICA9PiAkR2V0UGFyYW17UXVldWVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VzICAgICAgID0+ICRTdGRGaWVsZFZhbHVlc3tTZXJ2aWNlSUR9IHx8IHVuZGVmLCAgICAjIG5lZWRlZCBmb3IgU0xBSUQKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIHNwZWNpYWwgc3R1ZmYgZm9yIFF1ZXVlSUQvRGVzdDogRGVzdCBpcyAiUXVldWVJRHx8UXVldWVOYW1lIiA9PiAiUXVldWVOYW1lIjsKICAgICAgICAgICAgICAgICAgICBpZiAoICRGaWVsZC0+e0ZpZWxkSUR9IGVxICdEZXN0JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgVE9zOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFF1ZXVlSUQgKCBzb3J0IGtleXMgJXsgJFN0ZEZpZWxkVmFsdWVze1F1ZXVlSUR9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IFRPcyBpZiAoICRTdGRGaWVsZFZhbHVlc3tRdWV1ZUlEfXskUXVldWVJRH0gZXEgJy0nICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU3RkRmllbGRWYWx1ZXN7RGVzdH17IiRRdWV1ZUlEfHwkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH17ICRRdWV1ZUlEIH0ifSA9ICRTdGRGaWVsZFZhbHVlc3tRdWV1ZUlEfXskUXVldWVJRH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgY3VycmVudCBzZWxlY3Rpb24gb2YgUXVldWVJRCAoRGVzdCB3aWxsIGJlIGRvbmUgdG9nZXRoZXIgd2l0aCB0aGUgb3RoZXIgZmllbGRzKQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtRdWV1ZUlEfSAmJiAhJFN0ZEZpZWxkVmFsdWVze0Rlc3R9eyAkR2V0UGFyYW17RGVzdH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtRdWV1ZUlEfSA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGF1dG9zZWxlY3QKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte1F1ZXVlSUR9ICYmICRBdXRvc2VsZWN0ICYmICRBdXRvc2VsZWN0LT57RGVzdH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPkF1dG9zZWxlY3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgPT4gJFN0ZEZpZWxkVmFsdWVze1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8fCAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiMgUm90aGVyIE9TUyAvIElUU01Db3JlIC0gY2FsY3VsYXRlIFByaW9yaXR5IHZpYSBDSVAgbWF0cml4CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkRmllbGQtPntGaWVsZElEfSBlcSAnUHJpb3JpdHlJRCcgJiYgJENJUENhbGN1bGF0ZSAmJiAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGdldCB0aGUgY3JpdGljYWxpdHkgZWl0aGVyIGZyb20gdGhlIG1hbnVhbGx5IHNldCBkeW5hbWljIGZpZWxkLCBvciB0aGUgc2VydmljZQogICAgICAgICAgICAgICAgICAgICAgICBteSAkQ3JpdGljYWxpdHkgPSAkR2V0UGFyYW17RHluYW1pY0ZpZWxkX0lUU01Dcml0aWNhbGl0eX07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkQ3JpdGljYWxpdHkgJiYgJEdldFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAlU2VydmljZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkR2V0UGFyYW17U2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJENyaXRpY2FsaXR5ID0gJFNlcnZpY2V7Q3JpdGljYWxpdHl9OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRDcml0aWNhbGl0eSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlY2FsY3VsYXRlIHRoZSBwcmlvcml0eSBpZiBhbnkgb2YgdGhlIGltcGFjdGluZyBlbGVtZW50cyBjaGFuZ2VkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRDaGFuZ2VkRWxlbWVudHN7RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9IHx8ICRDaGFuZ2VkRWxlbWVudHN7U2VydmljZUlEfSB8fCAkQ2hhbmdlZEVsZW1lbnRze0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRQcmlvcml0eUlEID0gJENJUEFsbG9jYXRlT2JqZWN0LT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICRDcml0aWNhbGl0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wYWN0ICAgICAgPT4gJEdldFBhcmFte0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFN0ZEZpZWxkVmFsdWVze1ByaW9yaXR5SUR9eyAkUHJpb3JpdHlJRCB9ICYmICRQcmlvcml0eUlEIG5lICRHZXRQYXJhbXtQcmlvcml0eUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1ByaW9yaXR5SUR9ICAgICAgICAgICA9ICRQcmlvcml0eUlEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTmV3Q2hhbmdlZEVsZW1lbnRze1ByaW9yaXR5SUR9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJENoYW5nZWRTdGRGaWVsZHN7UHJpb3JpdHlJRH0gICA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgd2UgZW5mb3JjZSBDSVBBbGxvY2F0aW9uIGluIGFueSBjYXNlIGRlbGV0ZSBhbGwgb3RoZXIgcHJpb3JpdHkgb3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17UHJpb3JpdHlJRH0gJiYgJENJUENhbGN1bGF0ZSA9PSAyICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTdGRGaWVsZFZhbHVlc3tQcmlvcml0eUlEfSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1ByaW9yaXR5SUR9ID0+ICRTdGRGaWVsZFZhbHVlc3tQcmlvcml0eUlEfXsgJEdldFBhcmFte1ByaW9yaXR5SUR9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KIyBFTyBJVFNNQ29yZQoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIHdoZXRoZXIgY3VycmVudCBzZWxlY3RlZCB2YWx1ZSBpcyBzdGlsbCB2YWxpZCBmb3IgdGhlIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0KICAgICAgICAgICAgICAgICAgICAgICAgJiYgISRTdGRGaWVsZFZhbHVlc3sgJEZpZWxkLT57RmllbGRJRH0gfXsgJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9IH0KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBub3QgZW1wdHkgdGhlIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSAgICAgICAgICAgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgJE5ld0NoYW5nZWRFbGVtZW50c3sgJEZpZWxkLT57RmllbGRJRH0gfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICRDaGFuZ2VkU3RkRmllbGRzeyAkRmllbGQtPntGaWVsZElEfSB9ICAgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBhdXRvc2VsZWN0CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9ICYmICRBdXRvc2VsZWN0ICYmICRBdXRvc2VsZWN0LT57ICRGaWVsZC0+e0ZpZWxkSUR9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSA9ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+QXV0b3NlbGVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzID0+ICRTdGRGaWVsZFZhbHVlc3sgJEZpZWxkLT57RmllbGRJRH0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgKSB8fCAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTmV3Q2hhbmdlZEVsZW1lbnRzeyAkRmllbGQtPntGaWVsZElEfSB9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDaGFuZ2VkU3RkRmllbGRzeyAkRmllbGQtPntGaWVsZElEfSB9ICAgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggISVOZXdDaGFuZ2VkRWxlbWVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgJENvbnZlcmdlbmNle1N0ZEZpZWxkc30gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50cyA9ICVOZXdDaGFuZ2VkRWxlbWVudHM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50c0RGU3RhcnQgPSAoCiAgICAgICAgICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50c0RGU3RhcnQsCiAgICAgICAgICAgICAgICAgICAgJU5ld0NoYW5nZWRFbGVtZW50cywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAkTG9vcFByb3RlY3Rpb24tLSA8IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJSYW4gaW50byB1bnJlc29sdmFibGUgbG9vcCEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50cyAgICAgICAgPSAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydDsKICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50c0RGU3RhcnQgPSAoKTsKCiAgICAgICAgICAgICMgY2hlY2sgZHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgbXkgJUN1ckZpZWxkU3RhdGVzOwogICAgICAgICAgICBpZiAoJUNoYW5nZWRFbGVtZW50cykgewoKICAgICAgICAgICAgICAgICMgZ2V0IHZhbHVlcyBhbmQgdmlzaWJpbGl0eSBvZiBkeW5hbWljIGZpZWxkcwogICAgICAgICAgICAgICAgJUN1ckZpZWxkU3RhdGVzID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5HZXRGaWVsZFN0YXRlcygKICAgICAgICAgICAgICAgICAgICBUaWNrZXRPYmplY3QgICAgICAgICAgICAgID0+ICRUaWNrZXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyAgICAgICAgICAgICA9PiAkU2VsZi0+e0R5bmFtaWNGaWVsZH0sCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9PiAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkRWxlbWVudHMgICAgICAgICAgID0+IFwlQ2hhbmdlZEVsZW1lbnRzLCAgICAgICAgICAgICMgb3B0aW9uYWwgdG8gcmVkdWNlIEFDTCBldmFsdWF0aW9uCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICAgICAgICAgICAgICA9PiAkQ3VzdG9tZXJVc2VyIHx8ICcnLAogICAgICAgICAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIE93bmVySUQgPT4gJEdldFBhcmFte05ld1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBBdXRvc2VsZWN0ICAgICAgPT4gJEF1dG9zZWxlY3QsCiAgICAgICAgICAgICAgICAgICAgQUNMUHJlc2VsZWN0aW9uID0+ICRBQ0xQcmVzZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgTG9vcFByb3RlY3Rpb24gID0+IFwkTG9vcFByb3RlY3Rpb24sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY29tYmluZSBGaWVsZFN0YXRlcwogICAgICAgICAgICAgICAgJER5bkZpZWxkU3RhdGVze0ZpZWxkc30gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJER5bkZpZWxkU3RhdGVze0ZpZWxkc30gfSwKICAgICAgICAgICAgICAgICAgICAleyAkQ3VyRmllbGRTdGF0ZXN7RmllbGRzfSB9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICREeW5GaWVsZFN0YXRlc3tWaXNpYmlsaXR5fSA9IHsKICAgICAgICAgICAgICAgICAgICAleyAkRHluRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0gfSwKICAgICAgICAgICAgICAgICAgICAleyAkQ3VyRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0gfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAkRHluRmllbGRTdGF0ZXN7U2V0c30gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJER5bkZpZWxkU3RhdGVze1NldHN9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze1NldHN9IH0sCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICMgc3RvcmUgbmV3IHZhbHVlcwogICAgICAgICAgICAgICAgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gfSwKICAgICAgICAgICAgICAgICAgICAleyAkQ3VyRmllbGRTdGF0ZXN7TmV3VmFsdWVzfSB9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBkeW5hbWljIGZpZWxkcyBjaGFuZ2VkLCBjaGVjayBzdGFuZGFyZCBmaWVsZHMgYWdhaW4KICAgICAgICAgICAgaWYgKCAlQ3VyRmllbGRTdGF0ZXMgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRDdXJGaWVsZFN0YXRlc3tOZXdWYWx1ZXN9ICkgKSB7CiAgICAgICAgICAgICAgICAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSA9IDA7CiAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzID0gbWFwIHsgJF8gPT4gMSB9IGtleXMgJXsgJEN1ckZpZWxkU3RhdGVze05ld1ZhbHVlc30gfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRDb252ZXJnZW5jZXtGaWVsZHN9ID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIER5bmFtaWMgRmllbGRzIFBvc3NpYmxlIFZhbHVlcyB2aWEgQUpBWAogICAgICAgIG15IEBEeW5hbWljRmllbGRBSkFYID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkJ1aWxkQUpBWFJldHVybigKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlncyA9PiAkU2VsZi0+e0R5bmFtaWNGaWVsZH0sCiAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgRHluRmllbGRTdGF0ZXMgICAgICA9PiBcJUR5bkZpZWxkU3RhdGVzLAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgQUpBWCByZXR1cm4gZm9yIHRoZSBzdGFuZGFyZCBmaWVsZHMKICAgICAgICBteSBAU3RkRmllbGRBSkFYOwogICAgICAgIG15ICVBdHRyaWJ1dGVzID0gKAogICAgICAgICAgICBEZXN0ID0+IHsKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFRyZWVWaWV3ICAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBOZXdVc2VySUQgPT4gewogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE5ld1Jlc3BvbnNpYmxlSUQgPT4gewogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE5leHRTdGF0ZUlEID0+IHsKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByaW9yaXR5SUQgPT4gewogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIE1heCAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2VydmljZUlEID0+IHsKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+ICRUcmVlVmlldywKICAgICAgICAgICAgICAgIFRyZWVWaWV3ICAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTTEFJRCA9PiB7CiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3RhbmRhcmRUZW1wbGF0ZUlEID0+IHsKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBUeXBlSUQgPT4gewogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgICAgIGRlbGV0ZSAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH07CiAgICAgICAgZm9yIG15ICRGaWVsZCAoIHNvcnQga2V5cyAlU3RkRmllbGRWYWx1ZXMgKSB7CiAgICAgICAgICAgIHB1c2ggQFN0ZEZpZWxkQUpBWCwgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkRmllbGQsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgID0+ICRTdGRGaWVsZFZhbHVlc3skRmllbGR9LAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17JEZpZWxkfSwKICAgICAgICAgICAgICAgICV7ICRBdHRyaWJ1dGVzeyRGaWVsZH0gfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIG15IEBUZW1wbGF0ZUFKQVg7CgogICAgICAgICMgdXBkYXRlIHRpY2tldCBib2R5IGFuZCBhdHRhY2htZW50cyBpZiBuZWVkZWQuCiAgICAgICAgaWYgKCAkQ2hhbmdlZFN0ZEZpZWxkc3tTdGFuZGFyZFRlbXBsYXRlSUR9ICkgewogICAgICAgICAgICBteSBAVGlja2V0QXR0YWNobWVudHM7CiAgICAgICAgICAgIG15ICRUZW1wbGF0ZVRleHQ7CgogICAgICAgICAgICAjIHJlbW92ZSBhbGwgYXR0YWNobWVudHMgZnJvbSB0aGUgVXBsb2FkIGNhY2hlCiAgICAgICAgICAgIG15ICRSZW1vdmVTdWNjZXNzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURSZW1vdmUoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICEkUmVtb3ZlU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZvcm0gYXR0YWNobWVudHMgY291bGQgbm90IGJlIGRlbGV0ZWQhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IHRoZSB0ZW1wbGF0ZSB0ZXh0IGFuZCBzZXQgbmV3IGF0dGFjaG1lbnRzIGlmIGEgdGVtcGxhdGUgaXMgc2VsZWN0ZWQKICAgICAgICAgICAgaWYgKCBJc1Bvc2l0aXZlSW50ZWdlciggJEdldFBhcmFte1N0YW5kYXJkVGVtcGxhdGVJRH0gKSApIHsKICAgICAgICAgICAgICAgIG15ICRUZW1wbGF0ZUdlbmVyYXRvciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUZW1wbGF0ZUdlbmVyYXRvcicpOwoKICAgICAgICAgICAgICAgICMgc2V0IHRlbXBsYXRlIHRleHQsIHJlcGxhY2Ugc21hcnQgdGFncyAobGltaXRlZCBhcyB0aWNrZXQgaXMgbm90IGNyZWF0ZWQpCiAgICAgICAgICAgICAgICAkVGVtcGxhdGVUZXh0ID0gJFRlbXBsYXRlR2VuZXJhdG9yLT5UZW1wbGF0ZSgKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgICA9PiAkR2V0UGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlciwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgU3RkQXR0YWNobWVudE9iamVjdAogICAgICAgICAgICAgICAgbXkgJFN0ZEF0dGFjaG1lbnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RkQXR0YWNobWVudCcpOwoKICAgICAgICAgICAgICAgICMgYWRkIHN0ZC4gYXR0YWNobWVudHMgdG8gdGlja2V0CiAgICAgICAgICAgICAgICBteSAlQWxsU3RkQXR0YWNobWVudHMgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudFN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkVGVtcGxhdGVJRCA9PiAkR2V0UGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBmb3IgKCBzb3J0IGtleXMgJUFsbFN0ZEF0dGFjaG1lbnRzICkgewogICAgICAgICAgICAgICAgICAgIG15ICVBdHRhY2htZW50c0RhdGEgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudEdldCggSUQgPT4gJF8gKTsKICAgICAgICAgICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREFkZEZpbGUoCiAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgICAgICAgICAlQXR0YWNobWVudHNEYXRhLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBzZW5kIGEgbGlzdCBvZiBhdHRhY2htZW50cyBpbiB0aGUgdXBsb2FkIGNhY2hlIGJhY2sgdG8gdGhlIGNsaWVudHNpZGUgSmF2YVNjcmlwdAogICAgICAgICAgICAgICAgIyB3aGljaCByZW5kZXJzIHRoZW4gdGhlIGxpc3Qgb2YgY3VycmVudGx5IHVwbG9hZGVkIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICBAVGlja2V0QXR0YWNobWVudHMgPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREdldEFsbEZpbGVzTWV0YSgKICAgICAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBUaWNrZXRBdHRhY2htZW50cykgewogICAgICAgICAgICAgICAgICAgICRBdHRhY2htZW50LT57RmlsZXNpemV9ID0gJExheW91dE9iamVjdC0+SHVtYW5SZWFkYWJsZURhdGFTaXplKAogICAgICAgICAgICAgICAgICAgICAgICBTaXplID0+ICRBdHRhY2htZW50LT57RmlsZXNpemV9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEBUZW1wbGF0ZUFKQVggPSAoCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVXNlVGVtcGxhdGVDcmVhdGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJzAnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSaWNoVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkVGVtcGxhdGVUZXh0IHx8ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICA9PiAnVGlja2V0QXR0YWNobWVudHMnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFxAVGlja2V0QXR0YWNobWVudHMsCiAgICAgICAgICAgICAgICAgICAgS2VlcERhdGEgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uSlNPTigKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgQFN0ZEZpZWxkQUpBWCwKICAgICAgICAgICAgICAgIEBEeW5hbWljRmllbGRBSkFYLAogICAgICAgICAgICAgICAgQFRlbXBsYXRlQUpBWCwKICAgICAgICAgICAgXSwKICAgICAgICApOwoKICAgICAgICAjIGNhbid0IHVzZSBKU09OUmVwbHkgaGVyZSwgYXMgd2UgYWxyZWFkeSBoYXZlIEpTT04KICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFN1YmFjdGlvbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9Cn0KCnN1YiBfR2V0TmV4dFN0YXRlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdXNlIGRlZmF1bHQgUXVldWUgaWYgbm9uZSBpcyBwcm92aWRlZAogICAgJFBhcmFte1F1ZXVlSUR9ID0gJFBhcmFte1F1ZXVlSUR9IHx8IDE7CgogICAgbXkgJU5leHRTdGF0ZXM7CiAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSB8fCAkUGFyYW17VGlja2V0SUR9ICkgewogICAgICAgICVOZXh0U3RhdGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTdGF0ZUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQogICAgcmV0dXJuIFwlTmV4dFN0YXRlczsKfQoKc3ViIF9HZXRVc2VycyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHVzZXJzCiAgICBteSAlU2hvd25Vc2VyczsKICAgIG15ICVBbGxHcm91cHNNZW1iZXJzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxpc3QoCiAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgIFZhbGlkID0+IDEsCiAgICApOwoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBqdXN0IHNob3cgb25seSB1c2VycyB3aXRoIHNlbGVjdGVkIGN1c3RvbSBxdWV1ZQogICAgaWYgKCAkUGFyYW17UXVldWVJRH0gJiYgISRQYXJhbXtPd25lckFsbH0gKSB7CiAgICAgICAgbXkgQFVzZXJJRHMgPSAkVGlja2V0T2JqZWN0LT5HZXRTdWJzY3JpYmVkVXNlcklEc0J5UXVldWVJRCglUGFyYW0pOwogICAgICAgIGZvciBteSAkS2V5R3JvdXBNZW1iZXIgKCBzb3J0IGtleXMgJUFsbEdyb3Vwc01lbWJlcnMgKSB7CiAgICAgICAgICAgIG15ICRIaXQgPSAwOwogICAgICAgICAgICBmb3IgbXkgJFVJRCAoQFVzZXJJRHMpIHsKICAgICAgICAgICAgICAgIGlmICggJFVJRCBlcSAkS2V5R3JvdXBNZW1iZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhpdCA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhJEhpdCApIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkQWxsR3JvdXBzTWVtYmVyc3skS2V5R3JvdXBNZW1iZXJ9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBhbGwgc3lzdGVtIHVzZXJzCiAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpDaGFuZ2VPd25lclRvRXZlcnlvbmUnKSApIHsKICAgICAgICAlU2hvd25Vc2VycyA9ICVBbGxHcm91cHNNZW1iZXJzOwogICAgfQoKICAgICMgc2hvdyBhbGwgdXNlcnMgd2hvIGFyZSBvd25lciBvciBydyBpbiB0aGUgcXVldWUgZ3JvdXAKICAgIGVsc2lmICggJFBhcmFte1F1ZXVlSUR9ICkgewogICAgICAgIG15ICRHSUQgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPkdldFF1ZXVlR3JvdXBJRCggUXVldWVJRCA9PiAkUGFyYW17UXVldWVJRH0gKTsKICAgICAgICBteSAlTWVtYmVyTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5QZXJtaXNzaW9uR3JvdXBHZXQoCiAgICAgICAgICAgIEdyb3VwSUQgPT4gJEdJRCwKICAgICAgICAgICAgVHlwZSAgICA9PiAnb3duZXInLAogICAgICAgICk7CiAgICAgICAgZm9yIG15ICRLZXlNZW1iZXIgKCBzb3J0IGtleXMgJU1lbWJlckxpc3QgKSB7CiAgICAgICAgICAgIGlmICggJEFsbEdyb3Vwc01lbWJlcnN7JEtleU1lbWJlcn0gKSB7CiAgICAgICAgICAgICAgICAkU2hvd25Vc2Vyc3skS2V5TWVtYmVyfSA9ICRBbGxHcm91cHNNZW1iZXJzeyRLZXlNZW1iZXJ9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgd29ya2Zsb3cKICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgJVBhcmFtLAogICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnT3duZXInLAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVTaG93blVzZXJzLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4geyAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCkgfSBpZiAkQUNMOwoKICAgIHJldHVybiBcJVNob3duVXNlcnM7Cn0KCnN1YiBfR2V0UmVzcG9uc2libGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdXNlcnMKICAgIG15ICVTaG93blVzZXJzOwogICAgbXkgJUFsbEdyb3Vwc01lbWJlcnMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTGlzdCgKICAgICAgICBUeXBlICA9PiAnTG9uZycsCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIGp1c3Qgc2hvdyBvbmx5IHVzZXJzIHdpdGggc2VsZWN0ZWQgY3VzdG9tIHF1ZXVlCiAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSAmJiAhJFBhcmFte1Jlc3BvbnNpYmxlQWxsfSApIHsKICAgICAgICBteSBAVXNlcklEcyA9ICRUaWNrZXRPYmplY3QtPkdldFN1YnNjcmliZWRVc2VySURzQnlRdWV1ZUlEKCVQYXJhbSk7CiAgICAgICAgZm9yIG15ICRLZXlHcm91cE1lbWJlciAoIHNvcnQga2V5cyAlQWxsR3JvdXBzTWVtYmVycyApIHsKICAgICAgICAgICAgbXkgJEhpdCA9IDA7CiAgICAgICAgICAgIGZvciBteSAkVUlEIChAVXNlcklEcykgewogICAgICAgICAgICAgICAgaWYgKCAkVUlEIGVxICRLZXlHcm91cE1lbWJlciApIHsKICAgICAgICAgICAgICAgICAgICAkSGl0ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICEkSGl0ICkgewogICAgICAgICAgICAgICAgZGVsZXRlICRBbGxHcm91cHNNZW1iZXJzeyRLZXlHcm91cE1lbWJlcn07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IGFsbCBzeXN0ZW0gdXNlcnMKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OkNoYW5nZU93bmVyVG9FdmVyeW9uZScpICkgewogICAgICAgICVTaG93blVzZXJzID0gJUFsbEdyb3Vwc01lbWJlcnM7CiAgICB9CgogICAgIyBzaG93IGFsbCB1c2VycyB3aG8gYXJlIHJlc3BvbnNpYmxlIG9yIHJ3IGluIHRoZSBxdWV1ZSBncm91cAogICAgZWxzaWYgKCAkUGFyYW17UXVldWVJRH0gKSB7CiAgICAgICAgbXkgJEdJRCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+R2V0UXVldWVHcm91cElEKCBRdWV1ZUlEID0+ICRQYXJhbXtRdWV1ZUlEfSApOwogICAgICAgIG15ICVNZW1iZXJMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25Hcm91cEdldCgKICAgICAgICAgICAgR3JvdXBJRCA9PiAkR0lELAogICAgICAgICAgICBUeXBlICAgID0+ICdyZXNwb25zaWJsZScsCiAgICAgICAgKTsKICAgICAgICBmb3IgbXkgJEtleU1lbWJlciAoIHNvcnQga2V5cyAlTWVtYmVyTGlzdCApIHsKICAgICAgICAgICAgaWYgKCAkQWxsR3JvdXBzTWVtYmVyc3skS2V5TWVtYmVyfSApIHsKICAgICAgICAgICAgICAgICRTaG93blVzZXJzeyRLZXlNZW1iZXJ9ID0gJEFsbEdyb3Vwc01lbWJlcnN7JEtleU1lbWJlcn07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyB3b3JrZmxvdwogICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICAlUGFyYW0sCiAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdSZXNwb25zaWJsZScsCiAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJVNob3duVXNlcnMsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiB7ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKSB9IGlmICRBQ0w7CgogICAgcmV0dXJuIFwlU2hvd25Vc2VyczsKfQoKc3ViIF9HZXRQcmlvcml0aWVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB1c2UgZGVmYXVsdCBRdWV1ZSBpZiBub25lIGlzIHByb3ZpZGVkCiAgICAkUGFyYW17UXVldWVJRH0gPSAkUGFyYW17UXVldWVJRH0gfHwgMTsKCiAgICAjIGdldCBwcmlvcml0eQogICAgbXkgJVByaW9yaXRpZXM7CiAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSB8fCAkUGFyYW17VGlja2V0SUR9ICkgewogICAgICAgICVQcmlvcml0aWVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRQcmlvcml0eUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQogICAgcmV0dXJuIFwlUHJpb3JpdGllczsKfQoKc3ViIF9HZXRUeXBlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdXNlIGRlZmF1bHQgUXVldWUgaWYgbm9uZSBpcyBwcm92aWRlZAogICAgJFBhcmFte1F1ZXVlSUR9ID0gJFBhcmFte1F1ZXVlSUR9IHx8IDE7CgogICAgIyBnZXQgdHlwZQogICAgbXkgJVR5cGU7CiAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSB8fCAkUGFyYW17VGlja2V0SUR9ICkgewogICAgICAgICVUeXBlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRUeXBlTGlzdCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gXCVUeXBlOwp9CgpzdWIgX0dldFNlcnZpY2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgc2VydmljZQogICAgbXkgJVNlcnZpY2U7CgogICAgIyB1c2UgZGVmYXVsdCBRdWV1ZSBpZiBub25lIGlzIHByb3ZpZGVkCiAgICAkUGFyYW17UXVldWVJRH0gPSAkUGFyYW17UXVldWVJRH0gfHwgMTsKCiAgICAjIGdldCBvcHRpb25zIGZvciBkZWZhdWx0IHNlcnZpY2VzIGZvciB1bmtub3duIGN1c3RvbWVycwogICAgbXkgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2U6OkRlZmF1bHQ6OlVua25vd25DdXN0b21lcicpOwoKICAgICMgY2hlY2sgaWYgbm8gQ3VzdG9tZXJVc2VySUQgaXMgc2VsZWN0ZWQKICAgICMgaWYgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyID0gMCBsZWF2ZSBDdXN0b21lclVzZXJJRCBlbXB0eSwgaXQgd2lsbCBub3QgZ2V0IGFueSBzZXJ2aWNlcwogICAgIyBpZiAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgPSAxIHNldCBDdXN0b21lclVzZXJJRCB0byBnZXQgZGVmYXVsdCBzZXJ2aWNlcwogICAgaWYgKCAhJFBhcmFte0N1c3RvbWVyVXNlcklEfSAmJiAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgKSB7CiAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlcklEfSA9ICc8REVGQVVMVD4nOwogICAgfQoKICAgICMgZ2V0IHNlcnZpY2UgbGlzdAogICAgaWYgKCAkUGFyYW17Q3VzdG9tZXJVc2VySUR9ICkgewogICAgICAgICVTZXJ2aWNlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTZXJ2aWNlTGlzdCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gXCVTZXJ2aWNlOwp9CgpzdWIgX0dldFNMQXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHVzZSBkZWZhdWx0IFF1ZXVlIGlmIG5vbmUgaXMgcHJvdmlkZWQKICAgICRQYXJhbXtRdWV1ZUlEfSA9ICRQYXJhbXtRdWV1ZUlEfSB8fCAxOwoKICAgICMgZ2V0IHNlcnZpY2VzIGlmIHRoZXkgd2VyZSBub3QgZGV0ZXJtaW5lZCBpbiBhbiBBSkFYIGNhbGwKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1NlcnZpY2VzfSApIHsKICAgICAgICAkUGFyYW17U2VydmljZXN9ID0gJFNlbGYtPl9HZXRTZXJ2aWNlcyglUGFyYW0pOwogICAgfQoKICAgICMgZ2V0IHNsYQogICAgbXkgJVNMQTsKICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gJiYgJFBhcmFte1NlcnZpY2VzfSAmJiAleyAkUGFyYW17U2VydmljZXN9IH0gKSB7CiAgICAgICAgaWYgKCAkUGFyYW17U2VydmljZXN9LT57ICRQYXJhbXtTZXJ2aWNlSUR9IH0gKSB7CiAgICAgICAgICAgICVTTEEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldFNMQUxpc3QoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gXCVTTEE7Cn0KCnN1YiBfR2V0VG9zIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBjaGVjayBvd24gc2VsZWN0aW9uCiAgICBteSAlTmV3VG9zOwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok5ld1F1ZXVlT3duU2VsZWN0aW9uJykgKSB7CiAgICAgICAgJU5ld1RvcyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmV3UXVldWVPd25TZWxlY3Rpb24nKSB9OwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgU2VsZWN0aW9uVHlwZSBRdWV1ZSBvciBTeXN0ZW1BZGRyZXNzPwogICAgICAgIG15ICVUb3M7CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok5ld1F1ZXVlU2VsZWN0aW9uVHlwZScpIGVxICdRdWV1ZScgKSB7CiAgICAgICAgICAgICVUb3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPk1vdmVMaXN0KAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnY3JlYXRlJywKICAgICAgICAgICAgICAgIEFjdGlvbiAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgUXVldWVJRCA9PiAkU2VsZi0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAlVG9zID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c3RlbUFkZHJlc3MnKS0+U3lzdGVtQWRkcmVzc1F1ZXVlTGlzdCgpOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY3JlYXRlIHBlcm1pc3Npb24gcXVldWVzCiAgICAgICAgbXkgJVVzZXJHcm91cHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvblVzZXJHZXQoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIFR5cGUgICA9PiAnY3JlYXRlJywKICAgICAgICApOwoKICAgICAgICBteSAkU3lzdGVtQWRkcmVzc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzJyk7CiAgICAgICAgbXkgJFF1ZXVlT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKCiAgICAgICAgIyBidWlsZCBzZWxlY3Rpb24gc3RyaW5nCiAgICAgICAgUVVFVUVJRDoKICAgICAgICBmb3IgbXkgJFF1ZXVlSUQgKCBzb3J0IGtleXMgJVRvcyApIHsKCiAgICAgICAgICAgIG15ICVRdWV1ZURhdGEgPSAkUXVldWVPYmplY3QtPlF1ZXVlR2V0KCBJRCA9PiAkUXVldWVJRCApOwoKICAgICAgICAgICAgIyBwZXJtaXNzaW9uIGNoZWNrLCBjYW4gd2UgY3JlYXRlIG5ldyB0aWNrZXRzIGluIHF1ZXVlCiAgICAgICAgICAgIG5leHQgUVVFVUVJRCBpZiAhJFVzZXJHcm91cHN7ICRRdWV1ZURhdGF7R3JvdXBJRH0gfTsKCiAgICAgICAgICAgIG15ICRTdHJpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok5ld1F1ZXVlU2VsZWN0aW9uU3RyaW5nJykKICAgICAgICAgICAgICAgIHx8ICc8UmVhbG5hbWU+IDw8RW1haWw+PiAtIFF1ZXVlOiA8UXVldWU+JzsKICAgICAgICAgICAgJFN0cmluZyA9fiBzLzxRdWV1ZT4vJFF1ZXVlRGF0YXtOYW1lfS9nOwogICAgICAgICAgICAkU3RyaW5nID1+IHMvPFF1ZXVlQ29tbWVudD4vJFF1ZXVlRGF0YXtDb21tZW50fS9nOwoKICAgICAgICAgICAgIyByZW1vdmUgdHJhaWxpbmcgc3BhY2VzCiAgICAgICAgICAgIGlmICggISRRdWV1ZURhdGF7Q29tbWVudH0gKSB7CiAgICAgICAgICAgICAgICAkU3RyaW5nID1+IHN7XHMrXHp9e307CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZXdRdWV1ZVNlbGVjdGlvblR5cGUnKSBuZSAnUXVldWUnICkgewogICAgICAgICAgICAgICAgbXkgJVN5c3RlbUFkZHJlc3NEYXRhID0gJFN5c3RlbUFkZHJlc3NPYmplY3QtPlN5c3RlbUFkZHJlc3NHZXQoCiAgICAgICAgICAgICAgICAgICAgSUQgPT4gJFRvc3skUXVldWVJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFN0cmluZyA9fiBzLzxSZWFsbmFtZT4vJFN5c3RlbUFkZHJlc3NEYXRhe1JlYWxuYW1lfS9nOwogICAgICAgICAgICAgICAgJFN0cmluZyA9fiBzLzxFbWFpbD4vJFN5c3RlbUFkZHJlc3NEYXRhe05hbWV9L2c7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJE5ld1Rvc3skUXVldWVJRH0gPSAkU3RyaW5nOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCBlbXB0eSBzZWxlY3Rpb24KICAgICROZXdUb3N7Jyd9ID0gJy0nOwoKICAgIHJldHVybiBcJU5ld1RvczsKfQoKc3ViIF9HZXRUaW1lVW5pdHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQWNjb3VudGVkVGltZSA9ICcnOwoKICAgICMgR2V0IGFjY291bnRlZCB0aW1lIGlmIEFjY291bnRUaW1lIGNvbmZpZyBpdGVtIGlzIGVuYWJsZWQuCiAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWNjb3VudFRpbWUnKSAmJiBkZWZpbmVkICRQYXJhbXtBcnRpY2xlSUR9ICkgewogICAgICAgICRBY2NvdW50ZWRUaW1lID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5BcnRpY2xlQWNjb3VudGVkVGltZUdldCgKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRQYXJhbXtBcnRpY2xlSUR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRBY2NvdW50ZWRUaW1lID8gJEFjY291bnRlZFRpbWUgOiAnJzsKfQoKc3ViIF9HZXRTdGFuZGFyZFRlbXBsYXRlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVUZW1wbGF0ZXM7CiAgICBteSAkUXVldWVJRCA9ICRQYXJhbXtRdWV1ZUlEfSB8fCAnJzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRRdWV1ZU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKCiAgICBpZiAoICEkUXVldWVJRCApIHsKICAgICAgICBteSAkVXNlckRlZmF1bHRRdWV1ZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6VXNlckRlZmF1bHRRdWV1ZScpIHx8ICcnOwoKICAgICAgICBpZiAoJFVzZXJEZWZhdWx0UXVldWUpIHsKICAgICAgICAgICAgJFF1ZXVlSUQgPSAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkVXNlckRlZmF1bHRRdWV1ZSApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZAogICAgcmV0dXJuIFwlVGVtcGxhdGVzIGlmICEkUXVldWVJRCAmJiAhJFBhcmFte1RpY2tldElEfTsKCiAgICBpZiAoICEkUXVldWVJRCAmJiAkUGFyYW17VGlja2V0SUR9ICkgewoKICAgICAgICAjIGdldCBRdWV1ZUlEIGZyb20gdGhlIHRpY2tldAogICAgICAgIG15ICVUaWNrZXQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgJFF1ZXVlSUQgPSAkVGlja2V0e1F1ZXVlSUR9IHx8ICcnOwogICAgfQoKICAgICMgZmV0Y2ggYWxsIHN0ZC4gdGVtcGxhdGVzCiAgICBteSAlU3RhbmRhcmRUZW1wbGF0ZXMgPSAkUXVldWVPYmplY3QtPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoCiAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICBUZW1wbGF0ZVR5cGVzID0+IDEsCiAgICApOwoKICAgICMgcmV0dXJuIGVtcHR5IGhhc2ggaWYgdGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgdGhpcyBzY3JlZW4KICAgIHJldHVybiBcJVRlbXBsYXRlcyBpZiAhSXNIYXNoUmVmV2l0aERhdGEoICRTdGFuZGFyZFRlbXBsYXRlc3tDcmVhdGV9ICk7CgogICAgIyByZXR1cm4ganVzdCB0aGUgdGVtcGxhdGVzIGZvciB0aGlzIHNjcmVlbgogICAgcmV0dXJuICRTdGFuZGFyZFRlbXBsYXRlc3tDcmVhdGV9Owp9CgpzdWIgX01hc2tQaG9uZU5ldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRQYXJhbXtGb3JtSUR9ID0gJFNlbGYtPntGb3JtSUR9OwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGxpc3QgdHlwZQogICAgbXkgJFRyZWVWaWV3ID0gMDsKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpIGVxICd0cmVlJyApIHsKICAgICAgICAkVHJlZVZpZXcgPSAxOwogICAgfQoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBzZXQgSlMgZGF0YQogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdDdXN0b21lclNlYXJjaCcsCiAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICBTaG93Q3VzdG9tZXJUaWNrZXRzID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6U2hvd0N1c3RvbWVyVGlja2V0cycpLAogICAgICAgICAgICBBbGxvd011bHRpcGxlRnJvbSAgID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRQaG9uZTo6QWxsb3dNdWx0aXBsZUZyb20nKSwKICAgICAgICB9LAogICAgKTsKCiAgICBpZiAoICRQYXJhbXtIaWRlQXV0b3NlbGVjdGVkfSApIHsKCiAgICAgICAgIyBhZGQgQXV0b3NlbGVjdCBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTT25Eb2N1bWVudENvbXBsZXRlKAogICAgICAgICAgICBDb2RlID0+ICJDb3JlLkZvcm0uSW5pdEhpZGVBdXRvc2VsZWN0ZWQoeyBGaWVsZElEczogJFBhcmFte0hpZGVBdXRvc2VsZWN0ZWR9IH0pOyIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIHN0cmluZwogICAgJFBhcmFte09wdGlvblN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+ICRQYXJhbXtVc2Vyc30sCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtVc2VyU2VsZWN0ZWR9LAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIEZvcm1VcGRhdGUnLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgIE5hbWUgICAgICAgICA9PiAnTmV3VXNlcklEJywKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICk7CgogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBidWlsZCBuZXh0IHN0YXRlcyBzdHJpbmcKICAgICRQYXJhbXtOZXh0U3RhdGVzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgID0+ICRQYXJhbXtOZXh0U3RhdGVzfSwKICAgICAgICBOYW1lICAgICAgICAgID0+ICdOZXh0U3RhdGVJRCcsCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnTW9kZXJuaXplIEZvcm1VcGRhdGUnLAogICAgICAgIFRyYW5zbGF0aW9uICAgPT4gMSwKICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICRQYXJhbXtOZXh0U3RhdGV9IHx8ICRDb25maWctPntTdGF0ZURlZmF1bHR9LAogICAgKTsKCiAgICAjIGJ1aWxkIHRvIHN0cmluZwogICAgbXkgJU5ld1RvOwogICAgaWYgKCAkUGFyYW17VG99ICkgewogICAgICAgIGZvciBteSAkS2V5VG8gKCBzb3J0IGtleXMgJXsgJFBhcmFte1RvfSB9ICkgewogICAgICAgICAgICAkTmV3VG97IiRLZXlUb3x8JFBhcmFte1RvfS0+eyRLZXlUb30ifSA9ICRQYXJhbXtUb30tPnskS2V5VG99OwogICAgICAgIH0KICAgIH0KICAgIGlmICggISRQYXJhbXtUb1NlbGVjdGVkfSApIHsKICAgICAgICBteSAkVXNlckRlZmF1bHRRdWV1ZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6VXNlckRlZmF1bHRRdWV1ZScpIHx8ICcnOwoKICAgICAgICBpZiAoJFVzZXJEZWZhdWx0UXVldWUpIHsKICAgICAgICAgICAgbXkgJFF1ZXVlSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVMb29rdXAoIFF1ZXVlID0+ICRVc2VyRGVmYXVsdFF1ZXVlICk7CiAgICAgICAgICAgIGlmICgkUXVldWVJRCkgewogICAgICAgICAgICAgICAgJFBhcmFte1RvU2VsZWN0ZWR9ID0gIiRRdWV1ZUlEfHwkVXNlckRlZmF1bHRRdWV1ZSI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok5ld1F1ZXVlU2VsZWN0aW9uVHlwZScpIGVxICdRdWV1ZScgKSB7CiAgICAgICAgJFBhcmFte1RvU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5BZ2VudFF1ZXVlTGlzdE9wdGlvbigKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ1ZhbGlkYXRlX1JlcXVpcmVkIE1vZGVybml6ZSBGb3JtVXBkYXRlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgICAgPT4gXCVOZXdUbywKICAgICAgICAgICAgTXVsdGlwbGUgICAgICAgPT4gMCwKICAgICAgICAgICAgU2l6ZSAgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0Rlc3QnLAogICAgICAgICAgICBUcmVlVmlldyAgICAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICAgID0+ICRQYXJhbXtUb1NlbGVjdGVkfSwKICAgICAgICAgICAgT25DaGFuZ2VTdWJtaXQgPT4gMCwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFBhcmFte1RvU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ1ZhbGlkYXRlX1JlcXVpcmVkIE1vZGVybml6ZSBGb3JtVXBkYXRlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gXCVOZXdUbywKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ0Rlc3QnLAogICAgICAgICAgICBUcmVlVmlldyAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtUb1NlbGVjdGVkfSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gJFRyZWVWaWV3LAogICAgICAgICk7CiAgICB9CgogICAgIyBjdXN0b21lciBpbmZvIHN0cmluZwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVySW5mb0NvbXBvc2UnKSApIHsKICAgICAgICAkUGFyYW17Q3VzdG9tZXJUYWJsZX0gPSAkTGF5b3V0T2JqZWN0LT5BZ2VudEN1c3RvbWVyVmlld1RhYmxlKAogICAgICAgICAgICBEYXRhID0+ICRQYXJhbXtDdXN0b21lckRhdGF9LAogICAgICAgICAgICBNYXggID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJJbmZvQ29tcG9zZU1heFNpemUnKSwKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDdXN0b21lclRhYmxlJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBwcmVwYXJlIGVycm9ycyEKICAgIGlmICggJFBhcmFte0Vycm9yc30gKSB7CiAgICAgICAgZm9yIG15ICRLZXlFcnJvciAoIHNvcnQga2V5cyAleyAkUGFyYW17RXJyb3JzfSB9ICkgewogICAgICAgICAgICAkUGFyYW17JEtleUVycm9yfSA9ICcqICcgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRQYXJhbXtFcnJvcnN9LT57JEtleUVycm9yfSApOwogICAgICAgIH0KICAgIH0KCiAgICAjIEZyb20gZXh0ZXJuYWwKICAgIG15ICRTaG93RXJyb3JzID0gMTsKICAgIGlmICgKICAgICAgICBkZWZpbmVkICRQYXJhbXtGcm9tRXh0ZXJuYWxDdXN0b21lcn0gJiYKICAgICAgICBkZWZpbmVkICRQYXJhbXtGcm9tRXh0ZXJuYWxDdXN0b21lcn0tPntFbWFpbH0gJiYKICAgICAgICBkZWZpbmVkICRQYXJhbXtGcm9tRXh0ZXJuYWxDdXN0b21lcn0tPntDdXN0b21lcn0KICAgICAgICApCiAgICB7CiAgICAgICAgJFNob3dFcnJvcnMgPSAwOwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0Zyb21FeHRlcm5hbEN1c3RvbWVyTmFtZScsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtGcm9tRXh0ZXJuYWxDdXN0b21lcn0tPntDdXN0b21lcn0sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdGcm9tRXh0ZXJuYWxDdXN0b21lckVtYWlsJywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte0Zyb21FeHRlcm5hbEN1c3RvbWVyfS0+e0VtYWlsfSwKICAgICAgICApOwogICAgfQogICAgbXkgJEN1c3RvbWVyQ291bnRlciA9IDA7CiAgICBpZiAoICRQYXJhbXtNdWx0aXBsZUN1c3RvbWVyfSApIHsKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17TXVsdGlwbGVDdXN0b21lcn0gfSApIHsKICAgICAgICAgICAgaWYgKCAhJFNob3dFcnJvcnMgKSB7CgogICAgICAgICAgICAgICAgIyBzZXQgZW1wdHkgdmFsdWVzIGZvciBlcnJvcnMKICAgICAgICAgICAgICAgICRJdGVtLT57Q3VzdG9tZXJFcnJvcn0gICAgPSAnJzsKICAgICAgICAgICAgICAgICRJdGVtLT57Q3VzdG9tZXJEaXNhYmxlZH0gPSAnJzsKICAgICAgICAgICAgICAgICRJdGVtLT57Q3VzdG9tZXJFcnJvck1zZ30gPSAnQ3VzdG9tZXJHZW5lcmljU2VydmVyRXJyb3JNc2cnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTXVsdGlwbGVDdXN0b21lcicsCiAgICAgICAgICAgICAgICBEYXRhID0+ICRJdGVtLAogICAgICAgICAgICApOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJEl0ZW0tPntDdXN0b21lckVycm9yTXNnfSwKICAgICAgICAgICAgICAgIERhdGEgPT4gJEl0ZW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggJEl0ZW0tPntDdXN0b21lckVycm9yfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0N1c3RvbWVyRXJyb3JFeHBsYW5hdGlvbicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRDdXN0b21lckNvdW50ZXIrKzsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhJEN1c3RvbWVyQ291bnRlciApIHsKICAgICAgICAkUGFyYW17Q3VzdG9tZXJIaWRkZW5Db250YWluZXJ9ID0gJ0hpZGRlbic7CiAgICB9CgogICAgIyBzZXQgY3VzdG9tZXIgY291bnRlcgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTXVsdGlwbGVDdXN0b21lckNvdW50ZXInLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBDdXN0b21lckNvdW50ZXIgPT4gJEN1c3RvbWVyQ291bnRlcisrLAogICAgICAgIH0sCiAgICApOwoKICAgIGlmICggJFBhcmFte0Zyb21JbnZhbGlkfSAmJiAkUGFyYW17RXJyb3JzfSAmJiAhJFBhcmFte0Vycm9yc30tPntGcm9tRXJyb3JUeXBlfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnRnJvbVNlcnZlckVycm9yTXNnJyApOwogICAgfQogICAgaWYgKCAkUGFyYW17RXJyb3JzfS0+e0Zyb21FcnJvclR5cGV9IHx8ICEkU2hvd0Vycm9ycyApIHsKICAgICAgICAkUGFyYW17RnJvbUludmFsaWR9ID0gJyc7CiAgICB9CgogICAgIyBidWlsZCB0eXBlIHN0cmluZwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6VHlwZScpICkgewogICAgICAgICRQYXJhbXtUeXBlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUgVmFsaWRhdGVfUmVxdWlyZWQgRm9ybVVwZGF0ZScgLiAoICRQYXJhbXtFcnJvcnN9LT57VHlwZUlESW52YWxpZH0gfHwgJyAnICksCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkUGFyYW17VHlwZXN9LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17VHlwZUlEfSwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFNvcnQgICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRUeXBlJywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgfQoKICAgICMgYnVpbGQgc2VydmljZSBzdHJpbmcKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKCiAgICAgICAgJFBhcmFte1NlcnZpY2VTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICA9PiAkUGFyYW17U2VydmljZXN9LAogICAgICAgICAgICBOYW1lICA9PiAnU2VydmljZUlEJywKICAgICAgICAgICAgQ2xhc3MgPT4gJ01vZGVybml6ZSBGb3JtVXBkYXRlICcKICAgICAgICAgICAgICAgIC4gKCAkQ29uZmlnLT57U2VydmljZU1hbmRhdG9yeX0gPyAnVmFsaWRhdGVfUmVxdWlyZWQgJyA6ICcnICkKICAgICAgICAgICAgICAgIC4gKCAkUGFyYW17RXJyb3JzfS0+e1NlcnZpY2VJREludmFsaWR9IHx8ICcnICksCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17U2VydmljZUlEfSwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyZWVWaWV3ICAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgIFNvcnQgICAgICAgICA9PiAnVHJlZVZpZXcnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gJFRyZWVWaWV3LAogICAgICAgICAgICBNYXggICAgICAgICAgPT4gMjAwLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldFNlcnZpY2UnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VNYW5kYXRvcnkgPT4gJENvbmZpZy0+e1NlcnZpY2VNYW5kYXRvcnl9IHx8IDAsCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJFBhcmFte1NMQVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgPT4gJFBhcmFte1NMQXN9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdTTEFJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1NMQUlEfSwKICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIEZvcm1VcGRhdGUgJwogICAgICAgICAgICAgICAgLiAoICRDb25maWctPntTTEFNYW5kYXRvcnl9ID8gJ1ZhbGlkYXRlX1JlcXVpcmVkICcgOiAnJyApCiAgICAgICAgICAgICAgICAuICggJFBhcmFte0Vycm9yc30tPntTTEFJbnZhbGlkfSB8fCAnJyApLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgU29ydCAgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICBNYXggICAgICAgICAgPT4gMjAwLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldFNMQScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgU0xBTWFuZGF0b3J5ID0+ICRDb25maWctPntTTEFNYW5kYXRvcnl9IHx8IDAsCiAgICAgICAgICAgICAgICAlUGFyYW0KICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgaWYgZXhpc3RzIGNyZWF0ZSB0ZW1wbGF0ZXMgcmVnYXJkbGVzcyB0aGUgcXVldWUKICAgIG15ICVTdGFuZGFyZFRlbXBsYXRlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGFuZGFyZFRlbXBsYXRlJyktPlN0YW5kYXJkVGVtcGxhdGVMaXN0KAogICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgVHlwZSAgPT4gJ0NyZWF0ZScsCiAgICApOwoKICAgICMgYnVpbGQgdGV4dCB0ZW1wbGF0ZSBzdHJpbmcKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoIFwlU3RhbmRhcmRUZW1wbGF0ZXMgKSApIHsKICAgICAgICAkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZXN9IHx8IHt9LAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1N0YW5kYXJkVGVtcGxhdGVJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSB8fCAnJywKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgU29ydCAgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICBNYXggICAgICAgICAgPT4gMjAwLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1N0YW5kYXJkVGVtcGxhdGUnLAogICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICk7CiAgICB9CgogICAgIyBidWlsZCBwcmlvcml0eSBzdHJpbmcKICAgIGlmICggISRQYXJhbXtQcmlvcml0eUlEfSApIHsKICAgICAgICAkUGFyYW17UHJpb3JpdHl9ID0gJENvbmZpZy0+e1ByaW9yaXR5fTsKICAgIH0KICAgICRQYXJhbXtQcmlvcml0eVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnTW9kZXJuaXplIEZvcm1VcGRhdGUnLAogICAgICAgIERhdGEgICAgICAgICAgPT4gJFBhcmFte1ByaW9yaXRpZXN9LAogICAgICAgIE5hbWUgICAgICAgICAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgIFNlbGVjdGVkSUQgICAgPT4gJFBhcmFte1ByaW9yaXR5SUR9LAogICAgICAgIFNlbGVjdGVkVmFsdWUgPT4gJFBhcmFte1ByaW9yaXR5fSwKICAgICAgICBUcmFuc2xhdGlvbiAgID0+IDEsCiAgICApOwoKICAgIG15ICRRdWlja0RhdGVCdXR0b25zID0gJENvbmZpZy0+e1F1aWNrRGF0ZUJ1dHRvbnN9IC8vICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6RGVmYXVsdFF1aWNrRGF0ZUJ1dHRvbnMnKTsKCiAgICAjIHBlbmRpbmcgZGF0YSBzdHJpbmcKICAgICRQYXJhbXtQZW5kaW5nRGF0ZVN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgJVBhcmFtLAogICAgICAgIEZvcm1hdCAgICAgICAgICAgICAgID0+ICdEYXRlSW5wdXRGb3JtYXRMb25nJywKICAgICAgICBZZWFyUGVyaW9kUGFzdCAgICAgICA9PiAwLAogICAgICAgIFllYXJQZXJpb2RGdXR1cmUgICAgID0+IDUsCiAgICAgICAgRGlmZlRpbWUgICAgICAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpQZW5kaW5nRGlmZlRpbWUnKSB8fCAwLAogICAgICAgIENsYXNzICAgICAgICAgICAgICAgID0+ICRQYXJhbXtFcnJvcnN9LT57RGF0ZUludmFsaWR9LAogICAgICAgIFZhbGlkYXRlICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVmFsaWRhdGVEYXRlSW5GdXR1cmUgPT4gMSwKICAgICAgICBRdWlja0RhdGVCdXR0b25zICAgICA9PiAkUXVpY2tEYXRlQnV0dG9ucywKICAgICk7CgogICAgIyBzaG93IG93bmVyIHNlbGVjdGlvbgogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok5ld093bmVyU2VsZWN0aW9uJykgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ093bmVyU2VsZWN0aW9uJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IHJlc3BvbnNpYmxlIHNlbGVjdGlvbgogICAgaWYgKAogICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpSZXNwb25zaWJsZScpCiAgICAgICAgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZXdSZXNwb25zaWJsZVNlbGVjdGlvbicpCiAgICAgICAgKQogICAgewogICAgICAgICRQYXJhbXtSZXNwb25zaWJsZVVzZXJzfS0+eycnfSA9ICctJzsKICAgICAgICAkUGFyYW17UmVzcG9uc2libGVPcHRpb25TdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgID0+ICRQYXJhbXtSZXNwb25zaWJsZVVzZXJzfSwKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17UmVzcG9uc2libGVVc2VyU2VsZWN0ZWR9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdOZXdSZXNwb25zaWJsZUlEJywKICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIEZvcm1VcGRhdGUnLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3BvbnNpYmxlU2VsZWN0aW9uJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyByZW5kZXIgZHluYW1pYyBmaWVsZHMKICAgICRQYXJhbXtEeW5hbWljRmllbGRIVE1MfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpEeW5hbWljRmllbGQ6Ok1hc2snKS0+RWRpdFNlY3Rpb25SZW5kZXIoCiAgICAgICAgQ29udGVudCAgICAgICAgICAgICAgPT4gJFNlbGYtPntNYXNrRGVmaW5pdGlvbn0sCiAgICAgICAgRHluYW1pY0ZpZWxkcyAgICAgICAgPT4gJFNlbGYtPntEeW5hbWljRmllbGR9LAogICAgICAgIExheW91dE9iamVjdCAgICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLAogICAgICAgIER5bmFtaWNGaWVsZFZhbHVlcyAgID0+ICRQYXJhbXtEeW5hbWljRmllbGR9LAogICAgICAgIFBvc3NpYmxlVmFsdWVzRmlsdGVyID0+ICRQYXJhbXtERlBvc3NpYmxlVmFsdWVzfSwKICAgICAgICBFcnJvcnMgICAgICAgICAgICAgICA9PiAkUGFyYW17REZFcnJvcnN9LAogICAgICAgIFZpc2liaWxpdHkgICAgICAgICAgID0+ICRQYXJhbXtWaXNpYmlsaXR5fSwKICAgICAgICBPYmplY3QgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgIEN1c3RvbWVySUQgICAgID0+ICRQYXJhbXtDdXN0b21lcklEfSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFBhcmFte0N1c3RvbWVyVXNlcn0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgJFBhcmFte0R5bmFtaWNGaWVsZH0tPiUqLAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvdyB0aW1lIGFjY291bnRpbmcgYm94CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWNjb3VudFRpbWUnKSApIHsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmVlZEFjY291bnRlZFRpbWUnKSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUaW1lVW5pdHNMYWJlbE1hbmRhdG9yeScsCiAgICAgICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYXJhbXtUaW1lVW5pdHNSZXF1aXJlZH0gPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUaW1lVW5pdHNMYWJlbCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYXJhbXtUaW1lVW5pdHNSZXF1aXJlZH0gPSAnJzsKICAgICAgICB9CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpbWVVbml0cycsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBjdXN0b21lciBlZGl0IGxpbmsKICAgIG15ICRPcHRpb25DdXN0b21lciA9ICRMYXlvdXRPYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgQWN0aW9uID0+ICdBZG1pbkN1c3RvbWVyVXNlcicsCiAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICApOwoKICAgIG15ICRTaG93bk9wdGlvbnNCbG9jazsKCiAgICBpZiAoJE9wdGlvbkN1c3RvbWVyKSB7CgogICAgICAgICMgY2hlY2sgaWYgbmVlZCB0byBjYWxsIE9wdGlvbnMgYmxvY2sKICAgICAgICBpZiAoICEkU2hvd25PcHRpb25zQmxvY2sgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0T3B0aW9ucycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgZmxhZyB0byAidHJ1ZSIgaW4gb3JkZXIgdG8gcHJldmVudCBjYWxsaW5nIHRoZSBPcHRpb25zIGJsb2NrIGFnYWluCiAgICAgICAgICAgICRTaG93bk9wdGlvbnNCbG9jayA9IDE7CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3B0aW9uQ3VzdG9tZXInLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBhdHRhY2htZW50cwogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkQXR0YWNobWVudCAoIEB7ICRQYXJhbXtBdHRhY2htZW50c30gfSApIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgICRBdHRhY2htZW50LT57Q29udGVudElEfQogICAgICAgICAgICAmJiAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fQogICAgICAgICAgICAmJiAoICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9ID1+IC9pbWFnZS9pICkKICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0Rpc3Bvc2l0aW9ufSBlcSAnaW5saW5lJyApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICB9CgogICAgICAgIHB1c2ggQHsgJFBhcmFte0F0dGFjaG1lbnRMaXN0fSB9LCAkQXR0YWNobWVudDsKICAgIH0KCiAgICAjIGFkZCByaWNoIHRleHQgZWRpdG9yCiAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewoKICAgICAgICAjIHVzZSBoZWlnaHQvd2lkdGggZGVmaW5lZCBmb3IgdGhpcyBzY3JlZW4KICAgICAgICAkUGFyYW17UmljaFRleHRIZWlnaHR9ID0gJENvbmZpZy0+e1JpY2hUZXh0SGVpZ2h0fSB8fCAwOwogICAgICAgICRQYXJhbXtSaWNoVGV4dFdpZHRofSAgPSAkQ29uZmlnLT57UmljaFRleHRXaWR0aH0gIHx8IDA7CgogICAgICAgICMgc2V0IHVwIHJpY2ggdGV4dCBlZGl0b3IKICAgICAgICAkTGF5b3V0T2JqZWN0LT5TZXRSaWNoVGV4dFBhcmFtZXRlcnMoCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgUGVybWlzc2lvbnMgaGF2ZSBiZWVuIGNoZWNrZWQgYmVmb3JlIGluIFJ1bigpCiAgICBpZiAoICRQYXJhbXtGcm9tQ2hhdElEfSApIHsKICAgICAgICBteSBAQ2hhdE1lc3NhZ2VzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoYXQnKS0+Q2hhdE1lc3NhZ2VMaXN0KAogICAgICAgICAgICBDaGF0SUQgPT4gJFBhcmFte0Zyb21DaGF0SUR9LAogICAgICAgICk7CgogICAgICAgIGZvciBteSAkTWVzc2FnZSAoQENoYXRNZXNzYWdlcykgewogICAgICAgICAgICAkTWVzc2FnZS0+e01lc3NhZ2VUZXh0fSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICBUZXh0ICAgICAgICA9PiAkTWVzc2FnZS0+e01lc3NhZ2VUZXh0fSwKICAgICAgICAgICAgICAgIExpbmtGZWF0dXJlID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQ2hhdEFydGljbGVQcmV2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDaGF0TWVzc2FnZXMgPT4gXEBDaGF0TWVzc2FnZXMsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGV4cGxhbmF0b3J5IG1lc3NhZ2UgYWJvdXQgYXN0ZXJpc2sKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBc3Rlcmlza0V4cGxhbmF0aW9uJykgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FzdGVyaXNrRXhwbGFuYXRpb24nLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgb3V0cHV0IGJhY2sKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpY2tldFBob25lJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Modules/AgentTicketProcess.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmNGEyZmMxMTI4MGY4ODhkNTE2Y2MzMjM4NjBlMzJiZmM0YmMzZjllIC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRQcm9jZXNzLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpY2tldFByb2Nlc3M7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIGNvcmUgbW9kdWxlcwp1c2UgTGlzdDo6VXRpbCBxdyhub25lKTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgS2VybmVsOjpMYW5ndWFnZSAgICAgICAgICAgICAgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyAkU2VsZiwgJFR5cGU7CgogICAgIyBnbG9iYWwgY29uZmlnIGhhc2ggZm9yIGlkIGRpc3NvbHV0aW9uCiAgICAkU2VsZi0+e05hbWVUb0lEfSA9IHsKICAgICAgICBUaXRsZSAgICAgICAgICA9PiAnVGl0bGUnLAogICAgICAgIFN0YXRlICAgICAgICAgID0+ICdTdGF0ZUlEJywKICAgICAgICBTdGF0ZUlEICAgICAgICA9PiAnU3RhdGVJRCcsCiAgICAgICAgUHJpb3JpdHkgICAgICAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgIFByaW9yaXR5SUQgICAgID0+ICdQcmlvcml0eUlEJywKICAgICAgICBMb2NrICAgICAgICAgICA9PiAnTG9ja0lEJywKICAgICAgICBMb2NrSUQgICAgICAgICA9PiAnTG9ja0lEJywKICAgICAgICBRdWV1ZSAgICAgICAgICA9PiAnUXVldWVJRCcsCiAgICAgICAgUXVldWVJRCAgICAgICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgIEN1c3RvbWVyICAgICAgID0+ICdDdXN0b21lcklEJywKICAgICAgICBDdXN0b21lcklEICAgICA9PiAnQ3VzdG9tZXJJRCcsCiAgICAgICAgQ3VzdG9tZXJObyAgICAgPT4gJ0N1c3RvbWVySUQnLAogICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICdDdXN0b21lclVzZXJJRCcsCiAgICAgICAgT3duZXIgICAgICAgICAgPT4gJ093bmVySUQnLAogICAgICAgIE93bmVySUQgICAgICAgID0+ICdPd25lcklEJywKICAgICAgICBUeXBlICAgICAgICAgICA9PiAnVHlwZUlEJywKICAgICAgICBUeXBlSUQgICAgICAgICA9PiAnVHlwZUlEJywKICAgICAgICBTTEEgICAgICAgICAgICA9PiAnU0xBSUQnLAogICAgICAgIFNMQUlEICAgICAgICAgID0+ICdTTEFJRCcsCiAgICAgICAgU2VydmljZSAgICAgICAgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgU2VydmljZUlEICAgICAgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgUmVzcG9uc2libGUgICAgPT4gJ1Jlc3BvbnNpYmxlSUQnLAogICAgICAgIFJlc3BvbnNpYmxlSUQgID0+ICdSZXNwb25zaWJsZUlEJywKICAgICAgICBQZW5kaW5nVGltZSAgICA9PiAnUGVuZGluZ1RpbWUnLAogICAgICAgIEFydGljbGUgICAgICAgID0+ICdBcnRpY2xlJywKICAgIH07CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgbXkgJFRpY2tldElEICAgICAgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0SUQnICk7CiAgICBteSAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdBY3Rpdml0eURpYWxvZ0VudGl0eUlEJyApOwogICAgbXkgJEFjdGl2aXR5RGlhbG9nSGFzaFJlZjsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJEFjdGl2aXR5RGlhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eURpYWxvZycpOwogICAgbXkgJExheW91dE9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFRpY2tldE9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICRTZWxmLT57Rmlyc3RBY3Rpdml0eURpYWxvZ30gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRmlyc3RBY3Rpdml0eURpYWxvZycgKTsKICAgICRTZWxmLT57TGlua1RpY2tldElEfSAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTGlua1RpY2tldElEJyApIHx8ICcnOwogICAgJFNlbGYtPntBcnRpY2xlSUR9ICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdBcnRpY2xlSUQnICkgICAgfHwgJyc7CgogICAgIyBnZXQgdGhlIHRpY2tldCBpbmZvcm1hdGlvbiBvbiBsaW5rIGFjdGlvbnMKICAgIGlmICggJFNlbGYtPntMaW5rVGlja2V0SUR9ICkgewogICAgICAgIG15ICVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e0xpbmtUaWNrZXRJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgRXh0ZW5kZWQgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT57TGlua1RpY2tldERhdGF9ID0gXCVUaWNrZXREYXRhOwoKICAgICAgICAjIHNldCBMaW5rVGlja2V0SUQgcGFyYW0gZm9yIHNob3dpbmcgb24gbWFpbiBmb3JtCiAgICAgICAgJFBhcmFte0xpbmtUaWNrZXRJRH0gPSAkU2VsZi0+e0xpbmtUaWNrZXRJRH07CiAgICB9CgogICAgIyBnZXQgdGhlIGFydGljbGUgaW5mb3JtYXRpb24gb24gbGluayBhY3Rpb25zCiAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUlEfSApIHsKICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntMaW5rVGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICk7CgogICAgICAgIG15ICVBcnRpY2xlID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntMaW5rVGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICk7CgogICAgICAgICRTZWxmLT57TGlua0FydGljbGVEYXRhfSA9IFwlQXJ0aWNsZTsKCiAgICAgICAgIyBzZXQgQXJ0aWNsZUlEIHBhcmFtIGZvciBzaG93aW5nIG9uIG1haW4gZm9ybQogICAgICAgICRQYXJhbXtBcnRpY2xlSUR9ID0gJFNlbGYtPntBcnRpY2xlSUR9OwogICAgfQoKICAgIGlmICgkVGlja2V0SUQpIHsKCiAgICAgICAgIyBjaGVjayBpZiB0aGVyZSBpcyBhIGNvbmZpZ3VyZWQgcmVxdWlyZWQgcGVybWlzc2lvbgogICAgICAgICMgZm9yIHRoZSBBY3Rpdml0eURpYWxvZyAoaWYgdGhlcmUgaXMgb25lKQogICAgICAgIG15ICRBY3Rpdml0eURpYWxvZ1Blcm1pc3Npb24gPSAncncnOwogICAgICAgIGlmICgkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCkgewogICAgICAgICAgICAkQWN0aXZpdHlEaWFsb2dIYXNoUmVmID0gJEFjdGl2aXR5RGlhbG9nT2JqZWN0LT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgPT4gJEFjdGl2aXR5RGlhbG9nRW50aXR5SUQsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgICAgICAgID0+ICdBZ2VudEludGVyZmFjZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkQWN0aXZpdHlEaWFsb2dIYXNoUmVmKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJ0NvdWxkblwndCBnZXQgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCAiJXMiIScsCiAgICAgICAgICAgICAgICAgICAgICAgICRBY3Rpdml0eURpYWxvZ0VudGl0eUlELAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkQWN0aXZpdHlEaWFsb2dIYXNoUmVmLT57UGVybWlzc2lvbn0gKSB7CiAgICAgICAgICAgICAgICAkQWN0aXZpdHlEaWFsb2dQZXJtaXNzaW9uID0gJEFjdGl2aXR5RGlhbG9nSGFzaFJlZi0+e1Blcm1pc3Npb259OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICAgICAgbXkgJEFjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICRBY3Rpdml0eURpYWxvZ1Blcm1pc3Npb24sCiAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0KICAgICAgICApOwoKICAgICAgICAjIGVycm9yIHNjcmVlbiwgZG9uJ3Qgc2hvdyB0aWNrZXQKICAgICAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICRBY3Rpdml0eURpYWxvZ1Blcm1pc3Npb24gKSwKICAgICAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBBQ0wgcmVzdHJpY3Rpb25zCiAgICAgICAgbXkgJVBvc3NpYmxlQWN0aW9ucyA9ICggMSA9PiAkU2VsZi0+e0FjdGlvbn0gKTsKCiAgICAgICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJVBvc3NpYmxlQWN0aW9ucywKICAgICAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgICAgIG15ICVBY2xBY3Rpb24gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xBY3Rpb25EYXRhKCk7CgogICAgICAgICMgY2hlY2sgaWYgQUNMIHJlc3RyaWN0aW9ucyBleGlzdAogICAgICAgIGlmICgkQUNMKSB7CgogICAgICAgICAgICBteSAlQWNsQWN0aW9uTG9va3VwID0gcmV2ZXJzZSAlQWNsQWN0aW9uOwoKICAgICAgICAgICAgIyBzaG93IGVycm9yIHNjcmVlbiBpZiBBQ0wgcHJvaGliaXRzIHRoaXMgYWN0aW9uCiAgICAgICAgICAgIGlmICggISRBY2xBY3Rpb25Mb29rdXB7ICRTZWxmLT57QWN0aW9ufSB9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCRBY3Rpdml0eURpYWxvZ0hhc2hSZWYpICkgewoKICAgICAgICAgICAgIyBjaGVjayBpZiBpdCdzIGFscmVhZHkgbG9ja2VkIGJ5IHNvbWVib2R5IGVsc2UKICAgICAgICAgICAgaWYgKCAkQWN0aXZpdHlEaWFsb2dIYXNoUmVmLT57UmVxdWlyZWRMb2NrfSApIHsKCiAgICAgICAgICAgICAgICBpZiAoICRUaWNrZXRPYmplY3QtPlRpY2tldExvY2tHZXQoIFRpY2tldElEID0+ICRUaWNrZXRJRCApICkgewogICAgICAgICAgICAgICAgICAgIG15ICRBY2Nlc3NPayA9ICRUaWNrZXRPYmplY3QtPk93bmVyQ2hlY2soCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgT3duZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEFjY2Vzc09rICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnU21hbGwnLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPldhcm5pbmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnU29ycnksIHlvdSBuZWVkIHRvIGJlIHRoZSB0aWNrZXQgb3duZXIgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbi4nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY2hhbmdlIHRoZSBvd25lciBmaXJzdC4nKSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdTbWFsbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJExvY2sgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRMb2NrU2V0KAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIExvY2sgICAgID0+ICdsb2NrJywKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9CiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBTZXQgbmV3IG93bmVyIGlmIHRpY2tldCBvd25lciBpcyBkaWZmZXJlbnQgdGhlbiBsb2dnZWQgdXNlci4KICAgICAgICAgICAgICAgICAgICBpZiAoICRMb2NrICYmICggJFRpY2tldHtPd25lcklEfSAhPSAkU2VsZi0+e1VzZXJJRH0gKSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgUmVtZW1iZXIgcHJldmlvdXMgb3duZXIsIHdoaWNoIHdpbGwgYmUgdXNlZCB0byByZXN0b3JlIHRpY2tldCBvd25lciBvbiB1bmRvIGFjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgJFBhcmFte1ByZXZpb3VzT3duZXJ9ID0gJFRpY2tldHtPd25lcklEfTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0T3duZXJTZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ld1VzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIFJlbG9hZCB0aGUgcGFyZW50IHdpbmRvdyB0byBzaG93IHRoZSB1cGRhdGVkIGxvY2sgc3RhdGUuCiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtQYXJlbnRSZWxvYWR9ID0gMTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgU2hvdyBsb2NrIHN0YXRlIGxpbmsuCiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtSZW5kZXJMb2NrZWR9ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIG15ICRUaWNrZXROdW1iZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXROdW1iZXJMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgbm90aWZ5IHRoZSBhZ2VudCB0aGF0IHRoZSB0aWNrZXQgd2FzIGxvY2tlZAogICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte05vdGlmeX0gfSwgewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnTm90aWNlJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gIiRUaWNrZXROdW1iZXI6ICIgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlRpY2tldCBsb2NrZWQuIiksCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJFBvc3NpYmxlQWN0aXZpdHlEaWFsb2dzID0geyAxID0+ICRBY3Rpdml0eURpYWxvZ0VudGl0eUlEIH07CgogICAgICAgICAgICAjIGdldCBBQ0wgcmVzdHJpY3Rpb25zCiAgICAgICAgICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgICAgICAgICAgID0+ICRQb3NzaWJsZUFjdGl2aXR5RGlhbG9ncywKICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgPT4gJEFjdGl2aXR5RGlhbG9nRW50aXR5SUQsCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFJldHVyblR5cGUgICAgICAgICAgICAgPT4gJ0FjdGl2aXR5RGlhbG9nJywKICAgICAgICAgICAgICAgIFJldHVyblN1YlR5cGUgICAgICAgICAgPT4gJy0nLAogICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkQUNMKSB7CiAgICAgICAgICAgICAgICAleyRQb3NzaWJsZUFjdGl2aXR5RGlhbG9nc30gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgaWYgQUNMIHJlc3RyaWN0aW9ucyBleGlzdAogICAgICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkUG9zc2libGVBY3Rpdml0eURpYWxvZ3MpICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgbGlzdCBvbmx5IEFjdGl2ZSBwcm9jZXNzZXMgYnkgZGVmYXVsdAogICAgbXkgQFByb2Nlc3NTdGF0ZXMgPSAoJ0FjdGl2ZScpOwoKICAgICMgc2V0IElzTWFpbldpbmRvdywgSXNBamF4UmVxdWVzdCwgSXNQcm9jZXNzRW5yb2xsIGZvciBwcm9wZXIgZXJyb3IgcmVzcG9uc2VzLCBzY3JlZW4gZGlzcGxheQogICAgIyBhbmQgcHJvY2VzcyBsaXN0CiAgICAkU2VsZi0+e0lzTWFpbldpbmRvd30gICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSXNNYWluV2luZG93JyApICAgIHx8ICcnOwogICAgJFNlbGYtPntJc0FqYXhSZXF1ZXN0fSAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0lzQWpheFJlcXVlc3QnICkgICB8fCAnJzsKICAgICRTZWxmLT57SXNQcm9jZXNzRW5yb2xsfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJc1Byb2Nlc3NFbnJvbGwnICkgfHwgJyc7CgogICAgIyBmZXRjaCBhbHNvIEZhZGVBd2F5IHByb2Nlc3NlcyB0byBjb250aW51ZSB3b3JraW5nIHdpdGggZXhpc3RpbmcgdGlja2V0cywgYnV0IG5vdCB0byBzdGFydCBuZXcKICAgICMgICAgb25lcwogICAgaWYgKCAhJFNlbGYtPntJc01haW5XaW5kb3d9ICYmICRTZWxmLT57U3ViYWN0aW9ufSApIHsKICAgICAgICBwdXNoIEBQcm9jZXNzU3RhdGVzLCAnRmFkZUF3YXknOwogICAgfQoKICAgICMgY3JlYXRlIHByb2Nlc3Mgb2JqZWN0CiAgICAkS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2VzcycgPT4gewogICAgICAgICAgICBBY3Rpdml0eU9iamVjdCAgICAgICAgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHknKSwKICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dPYmplY3QgICA9PiAkQWN0aXZpdHlEaWFsb2dPYmplY3QsCiAgICAgICAgICAgIFRyYW5zaXRpb25PYmplY3QgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uJyksCiAgICAgICAgICAgIFRyYW5zaXRpb25BY3Rpb25PYmplY3QgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uJyksCiAgICAgICAgfQogICAgKTsKICAgIG15ICRQcm9jZXNzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzJyk7CgogICAgIyBnZXQgcHJvY2Vzc2VzCiAgICBteSAkUHJvY2Vzc0xpc3QgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc0xpc3QoCiAgICAgICAgUHJvY2Vzc1N0YXRlID0+IFxAUHJvY2Vzc1N0YXRlcywKICAgICAgICBJbnRlcmZhY2UgICAgPT4gWydBZ2VudEludGVyZmFjZSddLAogICAgKTsKCiAgICAjIGFsc28gZ2V0IHRoZSBsaXN0IG9mIHByb2Nlc3NlcyBpbml0aWF0ZWQgYnkgY3VzdG9tZXJzLCBhcyBhbiBhY3Rpdml0eSBkaWFsb2cgbWlnaHQgYmUKICAgICMgY29uZmlndXJlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZQogICAgbXkgJEZvbGxvd3VwUHJvY2Vzc0xpc3QgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc0xpc3QoCiAgICAgICAgUHJvY2Vzc1N0YXRlID0+IFxAUHJvY2Vzc1N0YXRlcywKICAgICAgICBJbnRlcmZhY2UgICAgPT4gJ2FsbCcsCiAgICApOwoKICAgIG15ICRQcm9jZXNzRW50aXR5SUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnUHJvY2Vzc0VudGl0eUlEJyApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRQcm9jZXNzTGlzdCkgJiYgIUlzSGFzaFJlZldpdGhEYXRhKCRGb2xsb3d1cFByb2Nlc3NMaXN0KSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBQcm9jZXNzIGNvbmZpZ3VyZWQhJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgcHJlcGFyZSBwcm9jZXNzIGxpc3QgZm9yIEFDTHMsIHVzZSBvbmx5IGVudGl0aWVzIGluc3RlYWQgb2YgbmFtZXMsIGNvbnZlcnQgZnJvbQogICAgIyAgIFAxID0+IE5hbWUgdG8gUDEgPT4gUDEuIEFzIEFDTHMgc2hvdWxkIHdvcmsgb25seSBhZ2FpbnN0IGVudGl0aWVzCiAgICBteSAlUHJvY2Vzc0xpc3RBQ0wgPSBtYXAgeyAkXyA9PiAkXyB9IHNvcnQga2V5cyAleyRQcm9jZXNzTGlzdH07CgogICAgIyB2YWxpZGF0ZSB0aGUgUHJvY2Vzc0xpc3Qgd2l0aCBzdG9yZWQgQUNMcwogICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdQcm9jZXNzJywKICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICBEYXRhICAgICAgICAgID0+IFwlUHJvY2Vzc0xpc3RBQ0wsCiAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICApOwoKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJFByb2Nlc3NMaXN0KSAmJiAkQUNMICkgewoKICAgICAgICAjIGdldCBBQ0wgcmVzdWx0cwogICAgICAgIG15ICVBQ0xEYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpOwoKICAgICAgICAjIHJlY292ZXIgcHJvY2VzcyBuYW1lcwogICAgICAgIG15ICVSZWR1Y2VkUHJvY2Vzc0xpc3QgPSBtYXAgeyAkXyA9PiAkUHJvY2Vzc0xpc3QtPnskX30gfSBzb3J0IGtleXMgJUFDTERhdGE7CgogICAgICAgICMgcmVwbGFjZSBvcmlnaW5hbCBwcm9jZXNzIGxpc3Qgd2l0aCB0aGUgcmVkdWNlZCBvbmUKICAgICAgICAkUHJvY2Vzc0xpc3QgPSBcJVJlZHVjZWRQcm9jZXNzTGlzdDsKICAgIH0KCiAgICAjIGdldCBmb3JtIGlkCiAgICAkU2VsZi0+e0Zvcm1JRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpGb3JtQ2FjaGUnKS0+UHJlcGFyZUZvcm1JRCgKICAgICAgICBQYXJhbU9iamVjdCAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgIExheW91dE9iamVjdCA9PiAkTGF5b3V0T2JqZWN0LAogICAgKTsKCiAgICAjIGlmIHdlIGhhdmUgbm8gc3ViYWN0aW9uIGRpc3BsYXkgdGhlIHByb2Nlc3MgbGlzdCB0byBzdGFydCBhIG5ldyBvbmUKICAgIGlmICggISRTZWxmLT57U3ViYWN0aW9ufSApIHsKCiAgICAgICAgIyB0byBkaXNwbGF5IHRoZSBwcm9jZXNzIGxpc3QgaXMgbWFuZGF0b3J5IHRvIGhhdmUgcHJvY2Vzc2VzIHRoYXQgYWdlbnQgY2FuIHN0YXJ0CiAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJFByb2Nlc3NMaXN0KSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFByb2Nlc3MgY29uZmlndXJlZCEnKSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHByb2Nlc3MgaWQgKGlmIGFueSwgYSBwcm9jZXNzIHNob3VsZCBiZSBwcmUtc2VsZWN0ZWQpCiAgICAgICAgJFBhcmFte1Byb2Nlc3NJRH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CiAgICAgICAgaWYgKCAkUGFyYW17UHJvY2Vzc0lEfSApIHsKICAgICAgICAgICAgJFBhcmFte1ByZVNlbGVjdFByb2Nlc3N9ID0gMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkU2VsZi0+X0Rpc3BsYXlQcm9jZXNzTGlzdCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBQcm9jZXNzTGlzdCAgICAgPT4gJFByb2Nlc3NMaXN0LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFByb2Nlc3NFbnRpdHlJRCB8fCAkUGFyYW17UHJvY2Vzc0lEfSwKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgaWYgdGhlIHNlbGVjdGVkIHByb2Nlc3MgZnJvbSB0aGUgbGlzdCBpcyB2YWxpZCwgcHJldmVudCB0YW1wZXIgd2l0aCBwcm9jZXNzIHNlbGVjdGlvbgogICAgIyAgICBsaXN0IChub3QgZXhpc3RpbmcsIGludmFsaWQgYW4gZmFkZSBhd2F5IHByb2Nlc3NlcyBtdXN0IG5vdCBiZSBhYmxlIHRvIHN0YXJ0IGEgbmV3IHByb2Nlc3MKICAgICMgICAgdGlja2V0KQogICAgZWxzaWYgKAogICAgICAgICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGlzcGxheUFjdGl2aXR5RGlhbG9nQUpBWCcKICAgICAgICAmJiAhJFByb2Nlc3NMaXN0LT57JFByb2Nlc3NFbnRpdHlJRH0KICAgICAgICAmJiAkU2VsZi0+e0lzTWFpbldpbmRvd30KICAgICAgICApCiAgICB7CgogICAgICAgICMgdHJhbnNsYXRlIHRoZSBlcnJvciBtZXNzYWdlIChhcyBpdCB3aWxsIGJlIGluamVjdGVkIGluIHRoZSBIVE1MKQogICAgICAgIG15ICRFcnJvck1lc3NhZ2UgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlRoZSBzZWxlY3RlZCBwcm9jZXNzIGlzIGludmFsaWQhIik7CgogICAgICAgICMgcmV0dXJuIGEgcHJlZGVmaW5lZCBIVE1MIHN0cnVjdHVyZSBhcyB0aGUgQUpBWCBjYWxsIGlzIGV4cGVjdGluZyBhbmQgSFRNTCByZXNwb25zZQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sOyBjaGFyc2V0PScgLiAkTGF5b3V0T2JqZWN0LT57Q2hhcnNldH0sCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICc8ZGl2IGNsYXNzPSJTZXJ2ZXJFcnJvciIgZGF0YS1tZXNzYWdlPSInIC4gJEVycm9yTWVzc2FnZSAuICciPjwvZGl2PicsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBpZiBpbnZhbGlkIHByb2Nlc3MgaXMgZGV0ZWN0ZWQgb24gYSBBY3Rpdml0eURpbG9nIHBvcC11cCBzY3JlZW4gc2hvdyBhbiBlcnJvciBtZXNzYWdlCiAgICBlbHNpZiAoCiAgICAgICAgJFNlbGYtPntTdWJhY3Rpb259IGVxICdEaXNwbGF5QWN0aXZpdHlEaWFsb2cnCiAgICAgICAgJiYgISRGb2xsb3d1cFByb2Nlc3NMaXN0LT57JFByb2Nlc3NFbnRpdHlJRH0KICAgICAgICAmJiAhJFNlbGYtPntJc01haW5XaW5kb3d9CiAgICAgICAgKQogICAgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUHJvY2VzcyAlcyBpcyBpbnZhbGlkIScsICRQcm9jZXNzRW50aXR5SUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBHZXQgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzCiAgICAjIGNvbGxlY3RzIGEgbWl4dHVyZSBvZiBwcmVzZW50IHZhbHVlcyBib3R0b20gdG8gdG9wOgogICAgIyBTeXNDb25maWcgRGVmYXVsdFZhbHVlcywgQWN0aXZpdHlEaWFsb2cgRGVmYXVsdFZhbHVlcywgVGlja2V0VmFsdWVzLCBTdWJtaXR0ZWRWYWx1ZXMKICAgICMgaW5jbHVkaW5nIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgYW5kIFByb2Nlc3NFbnRpdHlJRAogICAgIyBhbHNvIHNldHMgJFNlbGYtPntEeW5hbWljRmllbGR9IHdoaWNoIGNvbnRhaW5zIGFsbCBERnMgb2YgdGhlIGN1cnJlbnQgRGlhbG9nCiAgICAjIGlzIHVzZWQgZm9yOgogICAgIyAtIFBhcmFtZXRlciBjaGVja2luZyBiZWZvcmUgc3RvcmluZwogICAgIyAtIHdpbGwgYmUgdXNlZCBmb3IgQUNMIGNoZWNraW5nIGxhdGVyIG9uCiAgICBteSAkR2V0UGFyYW0gPSAkU2VsZi0+X0dldFBhcmFtKAogICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAkUHJvY2Vzc0VudGl0eUlELAogICAgKTsKCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3RvcmVBY3Rpdml0eURpYWxvZycgJiYgJFByb2Nlc3NFbnRpdHlJRCApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIHJldHVybiAkU2VsZi0+X1N0b3JlQWN0aXZpdHlEaWFsb2coCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgUHJvY2Vzc05hbWUgICAgID0+ICRQcm9jZXNzTGlzdC0+eyRQcm9jZXNzRW50aXR5SUR9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFByb2Nlc3NFbnRpdHlJRCwKICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgID0+ICRHZXRQYXJhbSwKICAgICAgICApOwogICAgfQogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Rpc3BsYXlBY3Rpdml0eURpYWxvZycgJiYgJFByb2Nlc3NFbnRpdHlJRCApIHsKCiAgICAgICAgIyBpbml0aWFsIHJlbmRlcmluZyAtIHByZS1maWxsIGR5bmFtaWMgZmllbGRzIHdpdGggdGlja2V0IHZhbHVlcwogICAgICAgIG15ICVUaWNrZXQ7CiAgICAgICAgaWYgKCRUaWNrZXRJRCkgewogICAgICAgICAgICAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIHZhbHVlcyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCB1bmxlc3MgSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAjIFRoaXMgb3ZlcndyaXRlcyB0aGUgdmFsdWVzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIHRha2VuIGZyb20gdGhlIHdlYiByZXF1ZXN0LgogICAgICAgICAgICAjIE5vdGUgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IHZhbHVlcyBmcm9tIHRoZSB3ZWIgcmVxdWVzdCwKICAgICAgICAgICAgIyBiZWNhdXNlIHN1Ym1pdHMsIHN1Y2Nlc3NmdWwgYW5kIHVuc3VjY2Vzc2Z1bCBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5IGFib3ZlLgogICAgICAgICAgICBpZiAoICggJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9IGVxICdUaWNrZXQnICkgJiYgJFRpY2tldElEICkgewoKICAgICAgICAgICAgICAgICMgVmFsdWUgaXMgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSBmcm9tIFRpY2tldC4KICAgICAgICAgICAgICAgICRHZXRQYXJhbS0+e0R5bmFtaWNGaWVsZH17ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkU2VsZi0+X091dHB1dEFjdGl2aXR5RGlhbG9nKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAkUHJvY2Vzc0VudGl0eUlELAogICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgPT4gJEdldFBhcmFtLAogICAgICAgICk7CiAgICB9CiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGlzcGxheUFjdGl2aXR5RGlhbG9nQUpBWCcgJiYgJFByb2Nlc3NFbnRpdHlJRCApIHsKCiAgICAgICAgIyBkZWxldGUgdmlzaWJpbGl0eSBjYWNoZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgICAgIFR5cGUgPT4gJ0hpZGRlbkZpZWxkcycsCiAgICAgICAgICAgIEtleSAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICk7CgogICAgICAgIG15ICRBY3Rpdml0eURpYWxvZ0hUTUwgPSAkU2VsZi0+X091dHB1dEFjdGl2aXR5RGlhbG9nKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAkUHJvY2Vzc0VudGl0eUlELAogICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgPT4gJEdldFBhcmFtLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWw7IGNoYXJzZXQ9JyAuICRMYXlvdXRPYmplY3QtPntDaGFyc2V0fSwKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEFjdGl2aXR5RGlhbG9nSFRNTCwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICB9CgogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FKQVhVcGRhdGUnICkgewoKICAgICAgICByZXR1cm4gJFNlbGYtPl9SZW5kZXJBamF4KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAkUHJvY2Vzc0VudGl0eUlELAogICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgPT4gJEdldFBhcmFtLAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ1N1YmFjdGlvbiBpcyBpbnZhbGlkIScpLAogICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICk7Cn0KCnN1YiBfUmVuZGVyQWpheCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBGYXRhbEVycm9yIGlzIHNhZmUgYmVjYXVzZSBhIEpTT04gc3RydWN0dXJlIGlzIGV4cGVjdGluZywgdGhlbiBpdCB3aWxsIHJlc3VsdCBpbnRvIGEKICAgICMgY29tbXVuaWNhdGlvbnMgZXJyb3IKCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUHJvY2Vzc0VudGl0eUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJE5lZWRlZCwgJ19SZW5kZXJBamF4JyApLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIG15ICRBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0gJFBhcmFte0dldFBhcmFtfXtBY3Rpdml0eURpYWxvZ0VudGl0eUlEfTsKICAgIGlmICggISRBY3Rpdml0eURpYWxvZ0VudGl0eUlEICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJ0FjdGl2aXR5RGlhbG9nRW50aXR5SUQnLCAnX1JlbmRlckFqYXgnICksCiAgICAgICAgKTsKICAgIH0KICAgIG15ICRBY3Rpdml0eURpYWxvZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHlEaWFsb2cnKS0+QWN0aXZpdHlEaWFsb2dHZXQoCiAgICAgICAgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9PiAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCwKICAgICAgICBJbnRlcmZhY2UgICAgICAgICAgICAgID0+ICdBZ2VudEludGVyZmFjZScsCiAgICApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRBY3Rpdml0eURpYWxvZykgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnTm8gQWN0aXZpdHlEaWFsb2cgY29uZmlndXJlZCBmb3IgJXMgaW4gX1JlbmRlckFqYXghJywKICAgICAgICAgICAgICAgICRBY3Rpdml0eURpYWxvZ0VudGl0eUlELAogICAgICAgICAgICApLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbGlzdCB0eXBlCiAgICBteSAkVHJlZVZpZXcgPSAwOwogICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okxpc3RUeXBlJykgZXEgJ3RyZWUnICkgewogICAgICAgICRUcmVlVmlldyA9IDE7CiAgICB9CgogICAgbXkgJUZpZWxkc1Byb2Nlc3NlZDsKICAgIG15IEBKU09OQ29sbGVjdG9yOwogICAgbXkgJFNlcnZpY2VzOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICMgR2V0IHRoZSBhY3Rpdml0eSBkaWFsb2cncyBTdWJtaXQgUGFyYW0ncyBvciBDb25maWcgUGFyYW1zCiAgICBESUFMT0dGSUVMRDoKICAgIGZvciBteSAkQ3VycmVudEZpZWxkICggQHsgJEFjdGl2aXR5RGlhbG9nLT57RmllbGRPcmRlcn0gfSApIHsKCiAgICAgICAgIyBTa2lwIGlmIHdlJ3JlIHdvcmtpbmcgb24gYSBmaWVsZCB0aGF0IHdhcyBhbHJlYWR5IGRvbmUgd2l0aCBvciB3aXRob3V0IElECiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfQogICAgICAgICAgICAmJiAkRmllbGRzUHJvY2Vzc2VkeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQ7CiAgICAgICAgfQoKICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRDdXJyZW50RmllbGQgPX4gbXteRHluYW1pY0ZpZWxkXyguKil9eG1zOwoKICAgICAgICBpZiAoICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IGVxICdPd25lcklEJyApIHsKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkRmllbGRzUHJvY2Vzc2VkeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgbXkgJERhdGEgPSAkU2VsZi0+X0dldE93bmVycygKICAgICAgICAgICAgICAgICV7ICRQYXJhbXtHZXRQYXJhbX0gfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIE93bmVyIHRvIHRoZSBKU09OQ29sbGVjdG9yCiAgICAgICAgICAgIHB1c2goCiAgICAgICAgICAgICAgICBASlNPTkNvbGxlY3RvciwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0sCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICREYXRhLAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17R2V0UGFyYW19eyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9LAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkRmllbGRzUHJvY2Vzc2VkeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnUmVzcG9uc2libGVJRCcgKSB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJEZpZWxkc1Byb2Nlc3NlZHsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICREYXRhID0gJFNlbGYtPl9HZXRSZXNwb25zaWJsZXMoCiAgICAgICAgICAgICAgICAleyAkUGFyYW17R2V0UGFyYW19IH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCBSZXNwb25zaWJsZSB0byB0aGUgSlNPTkNvbGxlY3RvcgogICAgICAgICAgICBwdXNoKAogICAgICAgICAgICAgICAgQEpTT05Db2xsZWN0b3IsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9LAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkRGF0YSwKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte0dldFBhcmFtfXsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSwKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJEZpZWxkc1Byb2Nlc3NlZHsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gZXEgJ1F1ZXVlSUQnICkgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRGaWVsZHNQcm9jZXNzZWR7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH07CgogICAgICAgICAgICBteSAkRGF0YSA9ICRTZWxmLT5fR2V0UXVldWVzKAogICAgICAgICAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgUXVldWUgdG8gdGhlIEpTT05Db2xsZWN0b3IKICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIEBKU09OQ29sbGVjdG9yLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSwKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJERhdGEsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtHZXRQYXJhbX17ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0sCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+ICRUcmVlVmlldywKICAgICAgICAgICAgICAgICAgICBUcmVlVmlldyAgICAgPT4gJFRyZWVWaWV3LAogICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkRmllbGRzUHJvY2Vzc2VkeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CgogICAgICAgIGVsc2lmICggJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gZXEgJ1N0YXRlSUQnICkgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRGaWVsZHNQcm9jZXNzZWR7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH07CgogICAgICAgICAgICBteSAkRGF0YSA9ICRTZWxmLT5fR2V0U3RhdGVzKAogICAgICAgICAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgU3RhdGUgdG8gdGhlIEpTT05Db2xsZWN0b3IKICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIEBKU09OQ29sbGVjdG9yLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdTdGF0ZUlEJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiAkRGF0YSwKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17R2V0UGFyYW19eyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9LAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTWF4ICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJEZpZWxkc1Byb2Nlc3NlZHsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gZXEgJ1ByaW9yaXR5SUQnICkgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRGaWVsZHNQcm9jZXNzZWR7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH07CgogICAgICAgICAgICBteSAkRGF0YSA9ICRTZWxmLT5fR2V0UHJpb3JpdGllcygKICAgICAgICAgICAgICAgICV7ICRQYXJhbXtHZXRQYXJhbX0gfSwKICAgICAgICAgICAgKTsKCiMgUm90aGVyIE9TUyAvIElUU01Db3JlIC0gY2FsY3VsYXRlIFByaW9yaXR5IHZpYSBDSVAgbWF0cml4CiAgICAgICAgICAgICMgbm90ZTogSW1wbGVtZW50aW5nIHRoaXMgaGVyZSB3aWxsIGxlYWQgdG8gYSB3cm9uZyByZXN1bHQgaWYgZS5nLiBhbiB1cGRhdGUgb2YgdGhlIGltcGFjdCBkZiBsZWFkcwogICAgICAgICAgICAjIHRvIHRoZSBzZXJ2aWNlcyBiZWluZyBlbXB0aWVkLiBUaGlzIGlzIGFjY2VwdGVkLCBhcyBubyBzeXN0ZW0gaXMgcHJvYmFibHkgZXZlciBjb25maWd1cmVkIHRoaXMgd2F5LgogICAgICAgICAgICAjIEN1cnJlbnRseSBBZ2VudFRpY2tldFByb2Nlc3MgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBjb252ZXJnZW5jZSBsb29wIG9mIG90aGVyIG1hc2tzIGFuZCAibGFncyIgYWxsCiAgICAgICAgICAgICMgZmllbGRzLiBDaGFuZ2luZyB0aGF0IHdpbGwgaW1wbGljaXRlbHkgc29sdmUgdGhlIGFib3ZlLCB0b28uCiAgICAgICAgICAgIG15ICRDb25maWcgICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpIC8vIHt9OwogICAgICAgICAgICBteSAkQ0lQQ2FsY3VsYXRlID0gJENvbmZpZy0+e1ByaW9yaXR5QnlDSVB9IC8vICRDb25maWdPYmplY3QtPkdldCgnSVRTTTo6RnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Jyk7CgogICAgICAgICAgICBpZiAoICRDSVBDYWxjdWxhdGUgJiYgJFBhcmFte0dldFBhcmFtfXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSApIHsKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBjcml0aWNhbGl0eSBlaXRoZXIgZnJvbSB0aGUgbWFudWFsbHkgc2V0IGR5bmFtaWMgZmllbGQsIG9yIHRoZSBzZXJ2aWNlCiAgICAgICAgICAgICAgICBteSAkQ3JpdGljYWxpdHkgPSAkUGFyYW17R2V0UGFyYW19e0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9OwoKICAgICAgICAgICAgICAgIGlmICggISRDcml0aWNhbGl0eSAmJiAkUGFyYW17R2V0UGFyYW19e1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJVNlcnZpY2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte0dldFBhcmFtfXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAkQ3JpdGljYWxpdHkgPSAkU2VydmljZXtDcml0aWNhbGl0eX07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAkQ3JpdGljYWxpdHkgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJENoYW5nZWQgPSAkUGFyYW17R2V0UGFyYW19e0VsZW1lbnRDaGFuZ2VkfTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ2hhbmdlZCBlcSAnRHluYW1pY0ZpZWxkX0lUU01JbXBhY3QnIHx8ICRDaGFuZ2VkIGVxICdEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5JyB8fCAkQ2hhbmdlZCBlcSAnU2VydmljZUlEJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlJyktPlByaW9yaXR5QWxsb2NhdGlvbkdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICRDcml0aWNhbGl0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX17RHluYW1pY0ZpZWxkfXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19e1ByaW9yaXR5SUR9ID0gJFByaW9yaXR5SUQ7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGlmIHdlIGVuZm9yY2UgQ0lQQWxsb2NhdGlvbiBpbiBhbnkgY2FzZSBkZWxldGUgYWxsIG90aGVyIHByaW9yaXR5IG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXtHZXRQYXJhbX17UHJpb3JpdHlJRH0gJiYgJENJUENhbGN1bGF0ZSA9PSAyICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YSA9IHsgJFBhcmFte0dldFBhcmFtfXtQcmlvcml0eUlEfSA9PiAkRGF0YS0+eyAkUGFyYW17R2V0UGFyYW19e1ByaW9yaXR5SUR9IH0gfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KIyBFTyBJVFNNQ29yZQoKICAgICAgICAgICAgIyBhZGQgUHJpb3JpdHkgdG8gdGhlIEpTT05Db2xsZWN0b3IKICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIEBKU09OQ29sbGVjdG9yLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9LAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+ICREYXRhLAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtHZXRQYXJhbX17ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0sCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgICAgICBNYXggICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkRmllbGRzUHJvY2Vzc2VkeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnU2VydmljZUlEJyApIHsKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkRmllbGRzUHJvY2Vzc2VkeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgbXkgJERhdGEgPSAkU2VsZi0+X0dldFNlcnZpY2VzKAogICAgICAgICAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VydmljZXMgPSAkRGF0YTsKCiAgICAgICAgICAgICMgYWRkIFNlcnZpY2UgdG8gdGhlIEpTT05Db2xsZWN0b3IgKFVzZSBTZXJ2aWNlSUQgZnJvbSB3ZWIgcmVxdWVzdCkKICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIEBKU09OQ29sbGVjdG9yLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSwKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJERhdGEsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZXJ2aWNlSUQnICkgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+ICRUcmVlVmlldywKICAgICAgICAgICAgICAgICAgICBUcmVlVmlldyAgICAgPT4gJFRyZWVWaWV3LAogICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkRmllbGRzUHJvY2Vzc2VkeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnU0xBSUQnICkgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRGaWVsZHNQcm9jZXNzZWR7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH07CgogICAgICAgICAgICAjIGlmIFNMQSBpcyByZW5kZXIgYmVmb3JlIHNlcnZpY2UgKGJ5IGl0IG9yZGVyIGluIHRoZSBmaWVsZHMpIGl0IG5lZWRzIHRvIGNyZWF0ZQogICAgICAgICAgICAjIHRoZSBzZXJ2aWNlIGxpc3QKICAgICAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJFNlcnZpY2VzKSApIHsKICAgICAgICAgICAgICAgICRTZXJ2aWNlcyA9ICRTZWxmLT5fR2V0U2VydmljZXMoCiAgICAgICAgICAgICAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJERhdGEgPSAkU2VsZi0+X0dldFNMQXMoCiAgICAgICAgICAgICAgICAleyAkUGFyYW17R2V0UGFyYW19IH0sCiAgICAgICAgICAgICAgICBTZXJ2aWNlcyAgPT4gJFNlcnZpY2VzLAogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZXJ2aWNlSUQnICkgfHwgJycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCBTTEEgdG8gdGhlIEpTT05Db2xsZWN0b3IgKFVzZSBTZWxlY3RlZElEIGZyb20gd2ViIHJlcXVlc3QpCiAgICAgICAgICAgIHB1c2goCiAgICAgICAgICAgICAgICBASlNPTkNvbGxlY3RvciwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0sCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICREYXRhLAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU0xBSUQnICkgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRGaWVsZHNQcm9jZXNzZWR7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IGVxICdUeXBlSUQnICkgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRGaWVsZHNQcm9jZXNzZWR7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH07CgogICAgICAgICAgICBteSAkRGF0YSA9ICRTZWxmLT5fR2V0VHlwZXMoCiAgICAgICAgICAgICAgICAleyAkUGFyYW17R2V0UGFyYW19IH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEFkZCBUeXBlIHRvIHRoZSBKU09OQ29sbGVjdG9yIChVc2UgU2VsZWN0ZWRJRCBmcm9tIHdlYiByZXF1ZXN0KS4KICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIEBKU09OQ29sbGVjdG9yLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSwKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJERhdGEsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUeXBlSUQnICkgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRGaWVsZHNQcm9jZXNzZWR7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFjdGl2YXRlIHN0YW5kYXJkIHRlbXBsYXRlcyBpZiBhcnRpY2xlIGlzIGNvbmZpZ3VyZWQgYW5kIHN0YW5kYXJkIHRlbXBsYXRlcyBhcmUgbm90IGV4cGxpY2l0bHkgc2V0IHRvIDAKICAgIG15ICRBY3RpdmF0ZVN0YW5kYXJkVGVtcGxhdGVzID0gMDsKICAgIGlmICggJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXtBcnRpY2xlfSApIHsKICAgICAgICAkQWN0aXZhdGVTdGFuZGFyZFRlbXBsYXRlcwogICAgICAgICAgICA9IGRlZmluZWQgJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXtBcnRpY2xlfXtDb25maWd9e1N0YW5kYXJkVGVtcGxhdGVzfSA/ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317QXJ0aWNsZX17Q29uZmlnfXtTdGFuZGFyZFRlbXBsYXRlc30gOiAxOwogICAgfQogICAgaWYgKCRBY3RpdmF0ZVN0YW5kYXJkVGVtcGxhdGVzKSB7CgogICAgICAgIG15ICREYXRhID0gJFNlbGYtPl9HZXRTdGFuZGFyZFRlbXBsYXRlcygKICAgICAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgICAgICk7CgogICAgICAgICMgQWRkIFN0YW5kYXJkVGVtcGxhdGUgdG8gdGhlIEpTT05Db2xsZWN0b3IgKFVzZSBTZWxlY3RlZElEIGZyb20gd2ViIHJlcXVlc3QpLgogICAgICAgIHB1c2goCiAgICAgICAgICAgIEBKU09OQ29sbGVjdG9yLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1N0YW5kYXJkVGVtcGxhdGVJRCcsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJERhdGEsCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N0YW5kYXJkVGVtcGxhdGVJRCcgKSB8fCAnJywKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CiAgICBteSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkZpZWxkUmVzdHJpY3Rpb25zJyk7CgogICAgIyByZXRyaWV2ZSBmaWVsZCByZXN0cmljdGlvbnMgZm9yIGR5bmFtaWMgZmllbGRzCiAgICBteSAkQUNMUHJlc2VsZWN0aW9uOwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldEFDTDo6QUNMUHJlc2VsZWN0aW9uJykgKSB7CgogICAgICAgICMgZ2V0IGNhY2hlZCBwcmVzZWxlY3Rpb24gcnVsZXMKICAgICAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKICAgICAgICAkQUNMUHJlc2VsZWN0aW9uID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJ1RpY2tldEFDTCcsCiAgICAgICAgICAgIEtleSAgPT4gJ1ByZXNlbGVjdGlvbicsCiAgICAgICAgKTsKICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uICkgewogICAgICAgICAgICAkQUNMUHJlc2VsZWN0aW9uID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5TZXRBQ0xQcmVzZWxlY3Rpb25DYWNoZSgpOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkQXV0b3NlbGVjdCAgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBQ0w6OkF1dG9zZWxlY3QnKSB8fCB1bmRlZjsKICAgIG15ICRMb29wUHJvdGVjdGlvbiAgPSAxMDA7CiAgICBteSAlQ2hhbmdlZEVsZW1lbnRzID0gJFBhcmFte0dldFBhcmFtfXtFbGVtZW50Q2hhbmdlZH0gPyAoICRQYXJhbXtHZXRQYXJhbX17RWxlbWVudENoYW5nZWR9ID0+IDEgKSA6ICgpOwogICAgaWYgKCAkQ2hhbmdlZEVsZW1lbnRze1NlcnZpY2VJRH0gKSB7CiAgICAgICAgJENoYW5nZWRFbGVtZW50c3tDdXN0b21lclVzZXJJRH0gPSAxOwogICAgICAgICRDaGFuZ2VkRWxlbWVudHN7Q3VzdG9tZXJJRH0gICAgID0gMTsKICAgIH0KCiAgICAjIGdldCB2YWx1ZXMgYW5kIHZpc2liaWxpdHkgb2YgZHluYW1pYyBmaWVsZHMKICAgIG15ICVEeW5GaWVsZFN0YXRlcyA9ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+R2V0RmllbGRTdGF0ZXMoCiAgICAgICAgVGlja2V0T2JqZWN0ICAgICAgICAgICAgICA9PiAkVGlja2V0T2JqZWN0LAogICAgICAgIER5bmFtaWNGaWVsZHMgICAgICAgICAgICAgPT4gJFNlbGYtPntEeW5hbWljRmllbGR9LAogICAgICAgIER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpLAogICAgICAgIEFjdGlvbiAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIENoYW5nZWRFbGVtZW50cyAgICAgICAgICAgPT4gXCVDaGFuZ2VkRWxlbWVudHMsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19e1RpY2tldElEfSwKICAgICAgICBGb3JtSUQgICAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICBDdXN0b21lclVzZXIgICAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX17Q3VzdG9tZXJVc2VySUR9IHx8ICcnLAogICAgICAgIEdldFBhcmFtICAgICAgICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfSwKICAgICAgICBBdXRvc2VsZWN0ICAgICAgICAgICAgICAgID0+ICRBdXRvc2VsZWN0LAogICAgICAgIEFDTFByZXNlbGVjdGlvbiAgICAgICAgICAgPT4gJEFDTFByZXNlbGVjdGlvbiAvLyAnJywKICAgICAgICBMb29wUHJvdGVjdGlvbiAgICAgICAgICAgID0+IFwkTG9vcFByb3RlY3Rpb24sCiAgICApOwoKICAgIGlmICgkQWN0aXZhdGVTdGFuZGFyZFRlbXBsYXRlcykgewogICAgICAgIG15ICRTdGFuZGFyZFRlbXBsYXRlcyA9ICRTZWxmLT5fR2V0U3RhbmRhcmRUZW1wbGF0ZXMoICRQYXJhbXtHZXRQYXJhbX0tPiUqICk7CgogICAgICAgICMgY2hlY2sgd2hldGhlciBjdXJyZW50IHNlbGVjdGVkIHZhbHVlIGlzIHN0aWxsIHZhbGlkIGZvciB0aGUgZmllbGQKICAgICAgICBpZiAoCiAgICAgICAgICAgICRQYXJhbXtHZXRQYXJhbX17U3RhbmRhcmRUZW1wbGF0ZUlEfQogICAgICAgICAgICAmJiAhJFN0YW5kYXJkVGVtcGxhdGVzLT57ICRQYXJhbXtHZXRQYXJhbX17U3RhbmRhcmRUZW1wbGF0ZUlEfSB9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICMgaWYgbm90IGVtcHR5IHRoZSBmaWVsZAogICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19e1N0YW5kYXJkVGVtcGxhdGVJRH0gPSAnJzsKICAgICAgICAgICAgJENoYW5nZWRFbGVtZW50c3tTdGFuZGFyZFRlbXBsYXRlSUR9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgJFBhcmFte0dldFBhcmFtfXtEeW5hbWljRmllbGR9IC8vPSB7fTsKCiAgICAjIHNldCBuZXcgdmFsdWVzCiAgICBteSAkREZQYXJhbSA9IHsKICAgICAgICAkUGFyYW17R2V0UGFyYW19e0R5bmFtaWNGaWVsZH0tPiUqLAogICAgICAgICREeW5GaWVsZFN0YXRlc3tOZXdWYWx1ZXN9LT4lKiwKICAgIH07CgogICAgbXkgQER5bmFtaWNGaWVsZEFKQVggPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+QnVpbGRBSkFYUmV0dXJuKAogICAgICAgIER5bmFtaWNGaWVsZENvbmZpZ3MgPT4gJFNlbGYtPntEeW5hbWljRmllbGR9LAogICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gewogICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19LT4lKiwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+ICRERlBhcmFtLAogICAgICAgIH0sCiAgICAgICAgRHluRmllbGRTdGF0ZXMgPT4gXCVEeW5GaWVsZFN0YXRlcywKICAgICk7CgogICAgcHVzaCBASlNPTkNvbGxlY3RvciwgQER5bmFtaWNGaWVsZEFKQVg7CgogICAgIyB1cGRhdGUgdGlja2V0IGJvZHkgYW5kIGF0dGFjaGVtZW50cyBpZiBuZWVkZWQuCiAgICBpZiAoICRBY3RpdmF0ZVN0YW5kYXJkVGVtcGxhdGVzICYmICRDaGFuZ2VkRWxlbWVudHN7U3RhbmRhcmRUZW1wbGF0ZUlEfSApIHsKICAgICAgICBteSBAVGlja2V0QXR0YWNobWVudHM7CiAgICAgICAgbXkgJFRlbXBsYXRlVGV4dDsKCiAgICAgICAgbXkgJFVwbG9hZENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGUnKTsKCiAgICAgICAgIyByZW1vdmUgYWxsIGF0dGFjaG1lbnRzIGZyb20gdGhlIFVwbG9hZCBjYWNoZQogICAgICAgIG15ICRSZW1vdmVTdWNjZXNzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURSZW1vdmUoCiAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICEkUmVtb3ZlU3VjY2VzcyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZvcm0gYXR0YWNobWVudHMgY291bGQgbm90IGJlIGRlbGV0ZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSB0ZW1wbGF0ZSB0ZXh0IGFuZCBzZXQgbmV3IGF0dGFjaG1lbnRzIGlmIGEgdGVtcGxhdGUgaXMgc2VsZWN0ZWQKICAgICAgICBpZiAoIElzUG9zaXRpdmVJbnRlZ2VyKCAkUGFyYW17R2V0UGFyYW19e1N0YW5kYXJkVGVtcGxhdGVJRH0gKSApIHsKICAgICAgICAgICAgbXkgJFRlbXBsYXRlR2VuZXJhdG9yID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRlbXBsYXRlR2VuZXJhdG9yJyk7CgogICAgICAgICAgICAjIHNldCB0ZW1wbGF0ZSB0ZXh0LCByZXBsYWNlIHNtYXJ0IHRhZ3MKICAgICAgICAgICAgJFRlbXBsYXRlVGV4dCA9ICRUZW1wbGF0ZUdlbmVyYXRvci0+VGVtcGxhdGUoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgICA9PiAkUGFyYW17R2V0UGFyYW19e1N0YW5kYXJkVGVtcGxhdGVJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRQYXJhbXtHZXRQYXJhbX17Q3VzdG9tZXJVc2VySUR9IHx8ICcnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjcmVhdGUgU3RkQXR0YWNobWVudE9iamVjdAogICAgICAgICAgICBteSAkU3RkQXR0YWNobWVudE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGRBdHRhY2htZW50Jyk7CgogICAgICAgICAgICAjIGFkZCBzdGQuIGF0dGFjaG1lbnRzIHRvIHRpY2tldAogICAgICAgICAgICBteSAlQWxsU3RkQXR0YWNobWVudHMgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudFN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgU3RhbmRhcmRUZW1wbGF0ZUlEID0+ICRQYXJhbXtHZXRQYXJhbX17U3RhbmRhcmRUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yICggc29ydCBrZXlzICVBbGxTdGRBdHRhY2htZW50cyApIHsKICAgICAgICAgICAgICAgIG15ICVBdHRhY2htZW50c0RhdGEgPSAkU3RkQXR0YWNobWVudE9iamVjdC0+U3RkQXR0YWNobWVudEdldCggSUQgPT4gJF8gKTsKICAgICAgICAgICAgICAgICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEQWRkRmlsZSgKICAgICAgICAgICAgICAgICAgICBGb3JtSUQgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgICAgICVBdHRhY2htZW50c0RhdGEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNlbmQgYSBsaXN0IG9mIGF0dGFjaG1lbnRzIGluIHRoZSB1cGxvYWQgY2FjaGUgYmFjayB0byB0aGUgY2xpZW50c2lkZSBKYXZhU2NyaXB0CiAgICAgICAgICAgICMgd2hpY2ggcmVuZGVycyB0aGVuIHRoZSBsaXN0IG9mIGN1cnJlbnRseSB1cGxvYWRlZCBhdHRhY2htZW50cwogICAgICAgICAgICBAVGlja2V0QXR0YWNobWVudHMgPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREdldEFsbEZpbGVzTWV0YSgKICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBUaWNrZXRBdHRhY2htZW50cykgewogICAgICAgICAgICAgICAgJEF0dGFjaG1lbnQtPntGaWxlc2l6ZX0gPSAkTGF5b3V0T2JqZWN0LT5IdW1hblJlYWRhYmxlRGF0YVNpemUoCiAgICAgICAgICAgICAgICAgICAgU2l6ZSA9PiAkQXR0YWNobWVudC0+e0ZpbGVzaXplfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHB1c2ggQEpTT05Db2xsZWN0b3IsICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiAnVXNlVGVtcGxhdGVQcm9jZXNzRGlhbG9nJywKICAgICAgICAgICAgICAgIERhdGEgPT4gJzAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lID0+ICdSaWNoVGV4dCcsCiAgICAgICAgICAgICAgICBEYXRhID0+ICRUZW1wbGF0ZVRleHQgfHwgJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgID0+ICdUaWNrZXRBdHRhY2htZW50cycsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiBcQFRpY2tldEF0dGFjaG1lbnRzLAogICAgICAgICAgICAgICAgS2VlcERhdGEgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRKU09OID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb25KU09OKCBbQEpTT05Db2xsZWN0b3JdICk7CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICApOwp9CgojID1jdXQKIwojIF9HZXRQYXJhbSgpCiMKIyByZXR1cm5zIHRoZSBjdXJyZW50IGRhdGEgc3RhdGUgb2YgdGhlIHN1Ym1pdHRlZCBpbmZvcm1hdGlvbgojCiMgVGhpcyBjb250YWlucyB0aGUgZm9sbG93aW5nIGRhdGEgZm9yIHRoZSBkaWZmZXJlbnQgY2FsbGVyczoKIwojICAgICBJbml0aWFsIGNhbGwgd2l0aCBzZWxlY3RlZCBQcm9jZXNzOgojICAgICAgICAgUHJvY2Vzc0VudGl0eUlECiMgICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlECiMgICAgICAgICBEZWZhdWx0VmFsdWVzIGZvciB0aGUgY29uZmlndXJlZCBGaWVsZHMgaW4gdGhhdCBBY3Rpdml0eURpYWxvZwojICAgICAgICAgRGVmYXVsdFZhbHVlcyBmb3IgdGhlIDQgcmVxdWlyZWQgRmllbGRzIFF1ZXVlIFN0YXRlIExvY2sgUHJpb3JpdHkKIwojICAgICBGaXJzdCBTdG9yZSBjYWxsIHN1Ym1pdHRpbmcgYW4gQWN0aXZpdHkgRGlhbG9nOgojICAgICAgICAgUHJvY2Vzc0VudGl0eUlECiMgICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlECiMgICAgICAgICBTdWJtaXR0ZWRWYWx1ZXMgZm9yIHRoZSBjdXJyZW50IEFjdGl2aXR5RGlhbG9nCiMgICAgICAgICBBY3Rpdml0eURpYWxvZyBEZWZhdWx0VmFsdWVzIGZvciBpbnZpc2libGUgZmllbGRzIG9mIHRoYXQgQWN0aXZpdHlEaWFsb2cKIyAgICAgICAgIERlZmF1bHRWYWx1ZXMgZm9yIHRoZSA0IHJlcXVpcmVkIEZpZWxkcyBRdWV1ZSBTdGF0ZSBMb2NrIFByaW9yaXR5CiMgICAgICAgICAgICAgaWYgbm90IGNvbmZpZ3VyZWQgaW4gdGhlIEFjdGl2aXR5RGlhbG9nCiMKIyAgICAgQWN0aXZpdHlEaWFsb2cgZmlsbG91dCByZXF1ZXN0IG9uIGV4aXN0aW5nIFRpY2tldDoKIyAgICAgICAgIFByb2Nlc3NFbnRpdHlJRAojICAgICAgICAgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRAojICAgICAgICAgVGlja2V0VmFsdWVzCiMKIyAgICAgQWN0aXZpdHlEaWFsb2cgc3RvcmUgcmVxdWVzdCBvciBBamF4VXBkYXRlIHJlcXVlc3Qgb24gZXhpc3RpbmcgVGlja2V0czoKIyAgICAgICAgIFByb2Nlc3NFbnRpdHlJRAojICAgICAgICAgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRAojICAgICAgICAgVGlja2V0VmFsdWVzIGZvciBhbGwgbm90LVN1Ym1pdHRlZCBWYWx1ZXMKIyAgICAgICAgIFN1Ym1pdHRlZCBWYWx1ZXMKIwojICAgICBteSAkR2V0UGFyYW0gPSBfR2V0UGFyYW0oCiMgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFByb2Nlc3NFbnRpdHlJRCwKIyAgICAgKTsKIwojID1jdXQKCnN1YiBfR2V0UGFyYW0gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIGZvciBteSAkTmVlZGVkIChxdyhQcm9jZXNzRW50aXR5SUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAkTmVlZGVkLCAnX0dldFBhcmFtJyApLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICBteSAlR2V0UGFyYW07CiAgICBteSAlVGlja2V0OwogICAgbXkgJFByb2Nlc3NFbnRpdHlJRCAgICAgICAgPSAkUGFyYW17UHJvY2Vzc0VudGl0eUlEfTsKICAgIG15ICRUaWNrZXRJRCAgICAgICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RpY2tldElEJyApOwogICAgbXkgJEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKAogICAgICAgIFBhcmFtID0+ICdBY3Rpdml0eURpYWxvZ0VudGl0eUlEJywKICAgICk7CiAgICBteSAkQWN0aXZpdHlFbnRpdHlJRDsKICAgIG15ICVWYWx1ZXNHb3R0ZW47CiAgICBteSAkVmFsdWU7CgogICAgIyBnZXQgYWN0aXZpdHkgZGlhbG9nIG9iamVjdAogICAgbXkgJEFjdGl2aXR5RGlhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eURpYWxvZycpOwoKICAgICMgY3JlYXRlIHByb2Nlc3Mgb2JqZWN0CiAgICAkS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2VzcycgPT4gewogICAgICAgICAgICBBY3Rpdml0eU9iamVjdCAgICAgICAgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHknKSwKICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dPYmplY3QgICA9PiAkQWN0aXZpdHlEaWFsb2dPYmplY3QsCiAgICAgICAgICAgIFRyYW5zaXRpb25PYmplY3QgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uJyksCiAgICAgICAgICAgIFRyYW5zaXRpb25BY3Rpb25PYmplY3QgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uJyksCiAgICAgICAgfQogICAgKTsKICAgIG15ICRQcm9jZXNzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzJyk7CgogICAgIyBJZiB3ZSBnb3Qgbm8gQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCBhbmQgbm8gVGlja2V0SUQKICAgICMgd2UgaGF2ZSB0byBnZXQgdGhlIFByb2Nlc3NlcycgU3RhcnRwb2ludAogICAgaWYgKCAhJEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgJiYgKCAhJFRpY2tldElEIHx8ICRTZWxmLT57SXNQcm9jZXNzRW5yb2xsfSApICkgewogICAgICAgIG15ICRBY3Rpdml0eUFjdGl2aXR5RGlhbG9nID0gJFByb2Nlc3NPYmplY3QtPlByb2Nlc3NTdGFydHBvaW50R2V0KAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFByb2Nlc3NFbnRpdHlJRCwKICAgICAgICApOwogICAgICAgIGlmICgKICAgICAgICAgICAgISRBY3Rpdml0eUFjdGl2aXR5RGlhbG9nLT57QWN0aXZpdHlEaWFsb2d9CiAgICAgICAgICAgIHx8ICEkQWN0aXZpdHlBY3Rpdml0eURpYWxvZy0+e0FjdGl2aXR5fQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkTWVzc2FnZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICdHb3Qgbm8gU3RhcnQgQWN0aXZpdHlFbnRpdHlJRCBvciBTdGFydCBBY3Rpdml0eURpYWxvZ0VudGl0eUlEIGZvciBQcm9jZXNzOiAlcyBpbiBfR2V0UGFyYW0hJywKICAgICAgICAgICAgICAgICRQcm9jZXNzRW50aXR5SUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0lzTWFpbldpbmRvd30gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRNZXNzYWdlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9ICRBY3Rpdml0eUFjdGl2aXR5RGlhbG9nLT57QWN0aXZpdHlEaWFsb2d9OwogICAgICAgICRBY3Rpdml0eUVudGl0eUlEICAgICAgID0gJEFjdGl2aXR5QWN0aXZpdHlEaWFsb2ctPntBY3Rpdml0eX07CiAgICB9CgogICAgbXkgJEFjdGl2aXR5RGlhbG9nID0gJEFjdGl2aXR5RGlhbG9nT2JqZWN0LT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0+ICRBY3Rpdml0eURpYWxvZ0VudGl0eUlELAogICAgICAgIEludGVyZmFjZSAgICAgICAgICAgICAgPT4gJ0FnZW50SW50ZXJmYWNlJywKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJEFjdGl2aXR5RGlhbG9nKSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ0NvdWxkblwndCBnZXQgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCAiJXMiIScsCiAgICAgICAgICAgICAgICAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBpZiB0aGVyZSBpcyBhIHRpY2tldCB0aGVuIGlzIG5vdCBhbiBBSkFYIHJlcXVlc3QKICAgIGlmICgkVGlja2V0SUQpIHsKICAgICAgICAlVGlja2V0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICk7CgogICAgICAgICVHZXRQYXJhbSA9ICVUaWNrZXQ7CiAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoIFwlR2V0UGFyYW0gKSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICdDb3VsZG5cJ3QgZ2V0IFRpY2tldCBmb3IgVGlja2V0SUQ6ICVzIGluIF9HZXRQYXJhbSEnLAogICAgICAgICAgICAgICAgICAgICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICEkU2VsZi0+e0lzUHJvY2Vzc0Vucm9sbH0gKSB7CiAgICAgICAgICAgICRBY3Rpdml0eUVudGl0eUlEID0gJFRpY2tldHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJwogICAgICAgICAgICAgICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCJQcm9jZXNzOjpEeW5hbWljRmllbGRQcm9jZXNzTWFuYWdlbWVudEFjdGl2aXR5SUQiKQogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoICEkQWN0aXZpdHlFbnRpdHlJRCApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZG5cJ3QgZGV0ZXJtaW5lIEFjdGl2aXR5RW50aXR5SUQuIER5bmFtaWNGaWVsZCBvciBDb25maWcgaXNuXCd0IHNldCBwcm9wZXJseSEnCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgfQogICAgJEdldFBhcmFte0FjdGl2aXR5RGlhbG9nRW50aXR5SUR9ID0gJEFjdGl2aXR5RGlhbG9nRW50aXR5SUQ7CiAgICAkR2V0UGFyYW17QWN0aXZpdHlFbnRpdHlJRH0gICAgICAgPSAkQWN0aXZpdHlFbnRpdHlJRCAvLyAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQWN0aXZpdHlFbnRpdHlJRCcgKTsKICAgICRHZXRQYXJhbXtQcm9jZXNzRW50aXR5SUR9ICAgICAgICA9ICRQcm9jZXNzRW50aXR5SUQ7CgogICAgIyBHZXQgdGhlIGFjdGl2aXR5ZGlhbG9ncydzIFN1Ym1pdCBQYXJhbSdzIG9yIENvbmZpZyBQYXJhbXMKICAgIERJQUxPR0ZJRUxEOgogICAgZm9yIG15ICRDdXJyZW50RmllbGQgKCBAeyAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZE9yZGVyfSB9ICkgewoKICAgICAgICAjIFNraXAgaWYgd2UncmUgd29ya2luZyBvbiBhIGZpZWxkIHRoYXQgd2FzIGFscmVhZHkgZG9uZSB3aXRoIG9yIHdpdGhvdXQgSUQKICAgICAgICBpZiAoICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9ICYmICRWYWx1ZXNHb3R0ZW57ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gKQogICAgICAgIHsKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRDsKICAgICAgICB9CgogICAgICAgICMgaGFuZGxlIGR5bmFtaWMgZmllbGRzIHNlcGFyYXRlbHkKICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRDdXJyZW50RmllbGQgPX4gbXteRHluYW1pY0ZpZWxkXyguKil9eG1zOwoKICAgICAgICAjIGdldCBhcnRpY2xlIGZpZWxkcwogICAgICAgIGlmICggJEN1cnJlbnRGaWVsZCBlcSAnQXJ0aWNsZScgKSB7CgogICAgICAgICAgICAkR2V0UGFyYW17U3ViamVjdH0gICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJqZWN0JyApOwogICAgICAgICAgICAkR2V0UGFyYW17Qm9keX0gICAgICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdCb2R5JyApOwogICAgICAgICAgICAkR2V0UGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFuZGFyZFRlbXBsYXRlSUQnICk7CiAgICAgICAgICAgIEB7ICRHZXRQYXJhbXtJbmZvcm1Vc2VySUR9IH0gPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KAogICAgICAgICAgICAgICAgUGFyYW0gPT4gJ0luZm9ybVVzZXJJRCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkVmFsdWVzR290dGVue0FydGljbGV9ID0gMSBpZiAoICRHZXRQYXJhbXtTdWJqZWN0fSAmJiAkR2V0UGFyYW17Qm9keX0gKTsKCiAgICAgICAgICAgICRHZXRQYXJhbXtUaW1lVW5pdHN9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RpbWVVbml0cycgKTsKICAgICAgICB9CgogICAgICAgIGlmICggJEN1cnJlbnRGaWVsZCBlcSAnQ3VzdG9tZXJJRCcgKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtDdXN0b21lcn0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKAogICAgICAgICAgICAgICAgUGFyYW0gPT4gJ1NlbGVjdGVkQ3VzdG9tZXJVc2VyJywKICAgICAgICAgICAgKSB8fCAnJzsKICAgICAgICAgICAgJEdldFBhcmFte0N1c3RvbWVyVXNlcklEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICBQYXJhbSA9PiAnU2VsZWN0ZWRDdXN0b21lclVzZXInLAogICAgICAgICAgICApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkQ3VycmVudEZpZWxkIGVxICdQZW5kaW5nVGltZScgKSB7CiAgICAgICAgICAgIG15ICRQcmVmaXggPSAnUGVuZGluZ1RpbWUnOwoKICAgICAgICAgICAgIyBPaywgd2UgbmVlZCB0byB0cnkgdG8gZmluZCB0aGUgdGFyZ2V0IHN0YXRlIG5vdwogICAgICAgICAgICBteSAlU3RhdGVEYXRhOwoKICAgICAgICAgICAgIyBnZXQgc3RhdGUgb2JqZWN0CiAgICAgICAgICAgIG15ICRTdGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpOwoKICAgICAgICAgICAgIyBXYXMgc29tZXRoaW5nIHN1Ym1pdHRlZCBmcm9tIHRoZSBHVUk/CiAgICAgICAgICAgIG15ICRUYXJnZXRTdGF0ZUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N0YXRlSUQnICk7CiAgICAgICAgICAgIGlmICgkVGFyZ2V0U3RhdGVJRCkgewogICAgICAgICAgICAgICAgJVN0YXRlRGF0YSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICAgICAgICAgICAgICAgICAgSUQgPT4gJFRhcmdldFN0YXRlSUQsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEZhbGxiYWNrIDE6IGRlZmF1bHQgdmFsdWUgb2YgZGlhbG9nIGZpZWxkIFN0YXRlCiAgICAgICAgICAgIGlmICggISVTdGF0ZURhdGEgJiYgJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXtTdGF0ZX17RGVmYXVsdFZhbHVlfSApIHsKICAgICAgICAgICAgICAgICVTdGF0ZURhdGEgPSAkU3RhdGVPYmplY3QtPlN0YXRlR2V0KAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXtTdGF0ZX17RGVmYXVsdFZhbHVlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgRmFsbGJhY2sgMjogZGVmYXVsdCB2YWx1ZSBvZiBkaWFsb2cgZmllbGQgU3RhdGVJRAogICAgICAgICAgICBpZiAoICElU3RhdGVEYXRhICYmICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317U3RhdGVJRH17RGVmYXVsdFZhbHVlfSApIHsKICAgICAgICAgICAgICAgICVTdGF0ZURhdGEgPSAkU3RhdGVPYmplY3QtPlN0YXRlR2V0KAogICAgICAgICAgICAgICAgICAgIElEID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317U3RhdGVJRH17RGVmYXVsdFZhbHVlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgRmFsbGJhY2sgMzogZXhpc3RpbmcgdGlja2V0IHN0YXRlCiAgICAgICAgICAgIGlmICggISVTdGF0ZURhdGEgJiYgJVRpY2tldCApIHsKICAgICAgICAgICAgICAgICVTdGF0ZURhdGEgPSAkU3RhdGVPYmplY3QtPlN0YXRlR2V0KAogICAgICAgICAgICAgICAgICAgIElEID0+ICRUaWNrZXR7U3RhdGVJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBwZW5kaW5nIHRpbWUgdmFsdWVzCiAgICAgICAgICAgICMgZGVwZW5kcyBvbiBTdGF0ZVR5cGUgY29udGFpbmluZyAnXnBlbmRpbmcnCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVN0YXRlRGF0YSApCiAgICAgICAgICAgICAgICAmJiAkU3RhdGVEYXRhe1R5cGVOYW1lfQogICAgICAgICAgICAgICAgJiYgJFN0YXRlRGF0YXtUeXBlTmFtZX0gPX4gL15wZW5kaW5nL2kKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgbWFwIHRoZSBHZXRQYXJhbSdzIERhdGUgVmFsdWVzIHRvIG91ciBEYXRlUGFyYW1IYXNoCiAgICAgICAgICAgICAgICBteSAlRGF0ZVBhcmFtID0gKAogICAgICAgICAgICAgICAgICAgIFByZWZpeCA9PiAkUHJlZml4LAogICAgICAgICAgICAgICAgICAgIG1hcCB7CiAgICAgICAgICAgICAgICAgICAgICAgICggJFByZWZpeCAuICRfICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICggJFByZWZpeCAuICRfICkgKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcXcoWWVhciBNb250aCBEYXkgSG91ciBNaW51dGUpCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgaWYgYWxsIHZhbHVlcyBhcmUgcHJlc2VudAogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIGRlZmluZWQgJERhdGVQYXJhbXsgJFByZWZpeCAuICdZZWFyJyB9CiAgICAgICAgICAgICAgICAgICAgJiYgZGVmaW5lZCAkRGF0ZVBhcmFteyAkUHJlZml4IC4gJ01vbnRoJyB9CiAgICAgICAgICAgICAgICAgICAgJiYgZGVmaW5lZCAkRGF0ZVBhcmFteyAkUHJlZml4IC4gJ0RheScgfQogICAgICAgICAgICAgICAgICAgICYmIGRlZmluZWQgJERhdGVQYXJhbXsgJFByZWZpeCAuICdIb3VyJyB9CiAgICAgICAgICAgICAgICAgICAgJiYgZGVmaW5lZCAkRGF0ZVBhcmFteyAkUHJlZml4IC4gJ01pbnV0ZScgfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgIyByZWNhbGN1bGF0ZSB0aW1lIGFjY29yZGluZyB0byB0aGUgdXNlcidzIHRpbWV6b25lCiAgICAgICAgICAgICAgICAgICAgJURhdGVQYXJhbSA9ICRMYXlvdXRPYmplY3QtPlRyYW5zZm9ybURhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICVEYXRlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyByZWZvcm1hdCBmb3Igc3RvcmluZyAoZS5nLiB0YWtlIG91dCBQcmVmaXgpCiAgICAgICAgICAgICAgICAgICAgJXsgJEdldFBhcmFteyRDdXJyZW50RmllbGR9IH0gPSBtYXAgeyAkXyA9PiAkRGF0ZVBhcmFteyAkUHJlZml4IC4gJF8gfSB9IHF3KFllYXIgTW9udGggRGF5IEhvdXIgTWludXRlKTsKICAgICAgICAgICAgICAgICAgICAkVmFsdWVzR290dGVue1BlbmRpbmdUaW1lfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgTm9uIER5bmFtaWNGaWVsZHMKICAgICAgICAjIDEuIHRyeSB0byBnZXQgdGhlIHJlcXVpcmVkIHBhcmFtCiAgICAgICAgbXkgJFZhbHVlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gKTsKCiAgICAgICAgaWYgKCRWYWx1ZSkgewoKICAgICAgICAgICAgIyBpZiB3ZSBoYXZlIGFuIElEIGZpZWxkIG1ha2Ugc3VyZSB0aGUgdmFsdWUgd2l0aG91dCBJRCB3b24ndCBiZSBpbiB0aGUKICAgICAgICAgICAgIyAlR2V0UGFyYW0gSGFzaCBhbnkgbW9yZQogICAgICAgICAgICAjIGV4Y2x1ZGUgcXVldWUgZnJvbSB0aGlzIGFzIHdlIG5lZWQgaXQgZm9yIHNjcmlwdCBmaWVsZCBldmFsdWF0aW9uCiAgICAgICAgICAgIGlmICggJEN1cnJlbnRGaWVsZCBlcSAnUXVldWUnICkgewogICAgICAgICAgICAgICAgbXkgJFF1ZXVlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlTG9va3VwKCBRdWV1ZUlEID0+ICRWYWx1ZSApOwogICAgICAgICAgICAgICAgaWYgKCRRdWV1ZSkgewogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXskQ3VycmVudEZpZWxkfSA9ICRRdWV1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9ID1+IG17KC4qKUlEJH14bXMgKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JDF9ID0gdW5kZWY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJEdldFBhcmFteyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ICAgICA9ICRWYWx1ZTsKICAgICAgICAgICAgJFZhbHVlc0dvdHRlbnsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQ7CiAgICAgICAgfQoKICAgICAgICAjIElmIHdlIGdvdCB0aWNrZXQgcGFyYW1zLCB0aGUgR2V0UGFyYW0gSGFzaCB3YXMgYWxyZWFkeSBmaWxsZWQgYmVmb3JlIHRoZSBsb29wCiAgICAgICAgIyBhbmQgd2UgY2FuIG5leHQgb3V0CiAgICAgICAgaWYgKCAkR2V0UGFyYW17ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gKSB7CiAgICAgICAgICAgICRWYWx1ZXNHb3R0ZW57ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkQ3VycmVudEZpZWxkIGVxICdRdWV1ZScgJiYgISRHZXRQYXJhbXsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSApIHsKICAgICAgICAgICAgbXkgJFVzZXJEZWZhdWx0UXVldWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OlVzZXJEZWZhdWx0UXVldWUnKSB8fCAnJzsKICAgICAgICAgICAgaWYgKCRVc2VyRGVmYXVsdFF1ZXVlKSB7CiAgICAgICAgICAgICAgICBteSAkUXVldWVJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUxvb2t1cCggUXVldWUgPT4gJFVzZXJEZWZhdWx0UXVldWUgKTsKICAgICAgICAgICAgICAgIGlmICgkUXVldWVJRCkgewogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXskQ3VycmVudEZpZWxkfSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkVXNlckRlZmF1bHRRdWV1ZTsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gICAgID0gJFF1ZXVlSUQ7CiAgICAgICAgICAgICAgICAgICAgJFZhbHVlc0dvdHRlbnsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBpZiBubyBTdWJtaXR0ZWQgbm9yIFRpY2tldCBQYXJhbSBnZXQgQWN0aXZpdHlEaWFsb2cgQ29uZmlnJ3MgUGFyYW0KICAgICAgICBpZiAoICRDdXJyZW50RmllbGQgbmUgJ0N1c3RvbWVySUQnICkgewogICAgICAgICAgICAkVmFsdWUgPSAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0RlZmF1bHRWYWx1ZX07CiAgICAgICAgfQogICAgICAgIGlmICgkVmFsdWUpIHsKICAgICAgICAgICAgJFZhbHVlc0dvdHRlbnsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgICAgICRHZXRQYXJhbXskQ3VycmVudEZpZWxkfSA9ICRWYWx1ZTsKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRDsKICAgICAgICB9CiAgICB9CgogICAgUkVRVUlSRURGSUVMRExPT1A6CiAgICBmb3IgbXkgJEN1cnJlbnRGaWVsZCAocXcoUXVldWUgU3RhdGUgTG9jayBQcmlvcml0eSkpIHsKICAgICAgICAkVmFsdWUgPSB1bmRlZjsKICAgICAgICBpZiAoICEkVmFsdWVzR290dGVueyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ICkgewogICAgICAgICAgICAkVmFsdWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlByb2Nlc3M6OkRlZmF1bHQkQ3VycmVudEZpZWxkIik7CiAgICAgICAgICAgIGlmICggISRWYWx1ZSApIHsKCiAgICAgICAgICAgICAgICBteSAkTWVzc2FnZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAnUHJvY2Vzczo6RGVmYXVsdCVzIENvbmZpZyBWYWx1ZSBtaXNzaW5nIScsCiAgICAgICAgICAgICAgICAgICAgJEN1cnJlbnRGaWVsZCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57SXNNYWluV2luZG93fSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJE1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJE1lc3NhZ2UsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRHZXRQYXJhbXskQ3VycmVudEZpZWxkfSA9ICRWYWx1ZTsKICAgICAgICAgICAgJFZhbHVlc0dvdHRlbnsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgIG15ICREZXN0ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Rlc3QnICkgfHwgJyc7CiAgICBpZiAoJERlc3QpIHsKCiAgICAgICAgbXkgQFF1ZXVlUGFydHMgPSBzcGxpdCggL1x8XHwvLCAkRGVzdCApOwoKICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAkUXVldWVQYXJ0c1swXTsKICAgICAgICAkR2V0UGFyYW17UXVldWV9ICAgPSAkUXVldWVQYXJ0c1sxXTsKCiAgICAgICAgJFZhbHVlc0dvdHRlbntRdWV1ZUlEfSA9IDE7CiAgICB9CgogICAgIyBnZXQgYWxzbyB0aGUgSURzIGZvciB0aGUgUmVxdWlyZWQgZmlsZXMgKGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50KQogICAgaWYgKCAkR2V0UGFyYW17UXVldWV9ICYmICEkR2V0UGFyYW17UXVldWVJRH0gKSB7CiAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkR2V0UGFyYW17UXVldWV9ICk7CiAgICB9CiAgICBpZiAoICRHZXRQYXJhbXtTdGF0ZX0gJiYgISRHZXRQYXJhbXtTdGF0ZUlEfSApIHsKICAgICAgICAkR2V0UGFyYW17U3RhdGVJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKS0+U3RhdGVMb29rdXAoIFN0YXRlID0+ICRHZXRQYXJhbXtTdGF0ZX0gKTsKICAgIH0KICAgIGlmICggJEdldFBhcmFte0xvY2t9ICYmICEkR2V0UGFyYW17TG9ja0lEfSApIHsKICAgICAgICAkR2V0UGFyYW17TG9ja0lEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2NrJyktPkxvY2tMb29rdXAoIExvY2sgPT4gJEdldFBhcmFte0xvY2t9ICk7CiAgICB9CiAgICBpZiAoICRHZXRQYXJhbXtQcmlvcml0eX0gJiYgISRHZXRQYXJhbXtQcmlvcml0eUlEfSApIHsKICAgICAgICAkR2V0UGFyYW17UHJpb3JpdHlJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKS0+UHJpb3JpdHlMb29rdXAoCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICRHZXRQYXJhbXtQcmlvcml0eX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFuZCBhbG1vc3QgZmluYWxseSB3ZSdsbCBoYXZlIHRoZSBzcGVjaWFsIHBhcmFtZXRlcnM6CiAgICAkR2V0UGFyYW17UmVzcG9uc2libGVBbGx9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Jlc3BvbnNpYmxlQWxsJyApOwogICAgJEdldFBhcmFte093bmVyQWxsfSAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPd25lckFsbCcgKTsKICAgICRHZXRQYXJhbXtFbGVtZW50Q2hhbmdlZH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRWxlbWVudENoYW5nZWQnICk7CgogICAgIyBoYW5kbGUgZHluYW1pYyBmaWVsZHMKICAgICRTZWxmLT57RHluYW1pY0ZpZWxkfSA9IHt9OwoKICAgICMgUGFyc2UgZGVmaW5pdGlvbiBpZiBwcmVzZW50CiAgICBpZiAoICRBY3Rpdml0eURpYWxvZy0+e0lucHV0RmllbGREZWZpbml0aW9ufSApIHsKICAgICAgICBteSAkSW5wdXRGaWVsZERlZmluaXRpb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6WUFNTCcpLT5Mb2FkKAogICAgICAgICAgICBEYXRhID0+ICRBY3Rpdml0eURpYWxvZy0+e0lucHV0RmllbGREZWZpbml0aW9ufSwKICAgICAgICApOwoKICAgICAgICBteSAkRHluYW1pY0ZpZWxkcyA9ICRTZWxmLT5fR2V0SW5wdXREZWZpbml0aW9uRHluYW1pY0ZpZWxkcygKICAgICAgICAgICAgSW5wdXRGaWVsZERlZmluaXRpb24gPT4gJElucHV0RmllbGREZWZpbml0aW9uLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT57RHluYW1pY0ZpZWxkfSA9ICREeW5hbWljRmllbGRzIC8vIHt9OwogICAgfQoKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc30gKSApIHsKICAgICAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKICAgICAgICBERk5BTUU6CiAgICAgICAgZm9yIG15ICRERk5hbWUgKCBtYXAgey9eRHluYW1pY0ZpZWxkXyguKykkL30ga2V5cyAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9LT4lKiApIHsKICAgICAgICAgICAgbmV4dCBERk5BTUUgaWYgJFNlbGYtPntEeW5hbWljRmllbGR9eyRERk5hbWV9OwoKICAgICAgICAgICAgJFNlbGYtPntEeW5hbWljRmllbGR9eyRERk5hbWV9ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICAgICAgTmFtZSA9PiAkREZOYW1lLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZE5hbWUgKCBrZXlzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKSB7CgogICAgICAgICMgb3ZlcndyaXRlIGR5bmFtaWMgZmllbGQgY29uZmlnIGRlZmF1bHQgdmFsdWUgd2l0aCBhY3Rpdml0eSBkaWFsb2cgZGVmYXVsdCB2YWx1ZSwgaWYgcHJlc2VudAogICAgICAgIGlmICgKICAgICAgICAgICAgJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXsiRHluYW1pY0ZpZWxkXyREeW5hbWljRmllbGROYW1lIn0KICAgICAgICAgICAgJiYgJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXsiRHluYW1pY0ZpZWxkXyREeW5hbWljRmllbGROYW1lIn17RGVmYXVsdFZhbHVlfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZH17JER5bmFtaWNGaWVsZE5hbWV9e0NvbmZpZ317RGVmYXVsdFZhbHVlfSA9ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317IkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkTmFtZSJ9e0RlZmF1bHRWYWx1ZX07CiAgICAgICAgfQoKICAgICAgICAjIEdldCB0aGUgQ29uZmlnIG9mIHRoZSBjdXJyZW50IER5bmFtaWNGaWVsZAogICAgICAgIG15ICREeW5hbWljRmllbGRDb25maWcgPSAkU2VsZi0+e0R5bmFtaWNGaWVsZH17JER5bmFtaWNGaWVsZE5hbWV9OwoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKSApIHsKICAgICAgICAgICAgbXkgJE1lc3NhZ2UgPQogICAgICAgICAgICAgICAgIkR5bmFtaWNGaWVsZENvbmZpZyBtaXNzaW5nIGZvciBmaWVsZDogJER5bmFtaWNGaWVsZE5hbWUsIG9yIGlzIG5vdCBhIFRpY2tldCBEeW5hbWljIEZpZWxkISI7CgogICAgICAgICAgICAjIGxvZyBlcnJvciBidXQgZG9lcyBub3Qgc3RvcCB0aGUgZXhlY3V0aW9uIGFzIGl0IGNvdWxkIGJlIGFuIG9sZCBBcnRpY2xlCiAgICAgICAgICAgICMgRHluYW1pY0ZpZWxkLCBzZWUgYnVnIzExNjY2CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICRNZXNzYWdlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQ7CiAgICAgICAgfQoKICAgICAgICAjIEdldCBEeW5hbWljRmllbGQgVmFsdWVzCiAgICAgICAgJEdldFBhcmFteyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9ID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFZhbHVlR2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgKTsKCiAgICAgICAgIyBBQ0xDb21wYXQKICAgICAgICAkR2V0UGFyYW17RHluYW1pY0ZpZWxkfXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgfSA9ICRHZXRQYXJhbXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgfTsKICAgIH0KCiAgICByZXR1cm4gXCVHZXRQYXJhbTsKfQoKc3ViIF9PdXRwdXRBY3Rpdml0eURpYWxvZyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwogICAgbXkgJFRpY2tldElEICAgICAgICAgICAgICAgPSAkUGFyYW17R2V0UGFyYW19e1RpY2tldElEfTsKICAgIG15ICRBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0gJFBhcmFte0dldFBhcmFtfXtBY3Rpdml0eURpYWxvZ0VudGl0eUlEfTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgQ2hlY2sgbmVlZGVkIHBhcmFtZXRlcnM6CiAgICAjIFByb2Nlc3NFbnRpdHlJRCBvbmx5CiAgICAjIFRpY2tldElEIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQKICAgIGlmICggISRQYXJhbXtQcm9jZXNzRW50aXR5SUR9IHx8ICggISRUaWNrZXRJRCAmJiAhJEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgKSApIHsKICAgICAgICBteSAkTWVzc2FnZSA9IFRyYW5zbGF0YWJsZSgnR290IG5vIFByb2Nlc3NFbnRpdHlJRCBvciBUaWNrZXRJRCBhbmQgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCEnKTsKCiAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgaWYgKCAkU2VsZi0+e0lzTWFpbldpbmRvd30gKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJE1lc3NhZ2UsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICRNZXNzYWdlLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJEFjdGl2aXR5QWN0aXZpdHlEaWFsb2c7CiAgICBteSAlVGlja2V0OwogICAgbXkgJUVycm9yICAgICAgICAgPSAoKTsKICAgIG15ICVFcnJvck1lc3NhZ2VzID0gKCk7CgogICAgIyBJZiB3ZSBoYWQgRXJyb3JzLCB3ZSBnb3QgYW4gRXJyb3JoYXNoCiAgICAlRXJyb3IgICAgICAgICA9ICV7ICRQYXJhbXtFcnJvcn0gfSAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvcn0gKSApOwogICAgJUVycm9yTWVzc2FnZXMgPSAleyAkUGFyYW17RXJyb3JNZXNzYWdlc30gfSBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3JNZXNzYWdlc30gKSApOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkQWN0aXZpdHlPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OkFjdGl2aXR5Jyk7CiAgICBteSAkQWN0aXZpdHlEaWFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OkFjdGl2aXR5RGlhbG9nJyk7CgogICAgIyBjcmVhdGUgcHJvY2VzcyBvYmplY3QKICAgICRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgIEFjdGl2aXR5T2JqZWN0ICAgICAgICAgPT4gJEFjdGl2aXR5T2JqZWN0LAogICAgICAgICAgICBBY3Rpdml0eURpYWxvZ09iamVjdCAgID0+ICRBY3Rpdml0eURpYWxvZ09iamVjdCwKICAgICAgICAgICAgVHJhbnNpdGlvbk9iamVjdCAgICAgICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb24nKSwKICAgICAgICAgICAgVHJhbnNpdGlvbkFjdGlvbk9iamVjdCA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb24nKSwKICAgICAgICB9CiAgICApOwogICAgbXkgJFByb2Nlc3NPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MnKTsKICAgIG15ICRDb25maWdPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRUaWNrZXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICMgYWRkIHJpY2ggdGV4dCBlZGl0b3IKICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CgogICAgICAgICMgdXNlIGhlaWdodC93aWR0aCBkZWZpbmVkIGZvciB0aGlzIHNjcmVlbgogICAgICAgICRQYXJhbXtSaWNoVGV4dEhlaWdodH0gPSAkU2VsZi0+e0NvbmZpZ317UmljaFRleHRIZWlnaHR9IHx8IDA7CiAgICAgICAgJFBhcmFte1JpY2hUZXh0V2lkdGh9ICA9ICRTZWxmLT57Q29uZmlnfXtSaWNoVGV4dFdpZHRofSAgfHwgMDsKCiAgICAgICAgIyBzZXQgdXAgcmljaCB0ZXh0IGVkaXRvcgogICAgICAgICRMYXlvdXRPYmplY3QtPlNldFJpY2hUZXh0UGFyYW1ldGVycygKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAhJFRpY2tldElEIHx8ICRTZWxmLT57SXNQcm9jZXNzRW5yb2xsfSApIHsKICAgICAgICAkQWN0aXZpdHlBY3Rpdml0eURpYWxvZyA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzU3RhcnRwb2ludEdldCgKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICRQYXJhbXtQcm9jZXNzRW50aXR5SUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRBY3Rpdml0eUFjdGl2aXR5RGlhbG9nKSApIHsKICAgICAgICAgICAgbXkgJE1lc3NhZ2UgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnQ2FuXCd0IGdldCBTdGFydEFjdGl2aXR5RGlhbG9nIGFuZCBTdGFydEFjdGl2aXR5RGlhbG9nIGZvciB0aGUgUHJvY2Vzc0VudGl0eUlEICIlcyIhJywKICAgICAgICAgICAgICAgICRQYXJhbXtQcm9jZXNzRW50aXR5SUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgICAgIGlmICggJFNlbGYtPntJc01haW5XaW5kb3d9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJE1lc3NhZ2UsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBubyBBSkFYIHVwZGF0ZSBpbiB0aGlzIHBhcnQKICAgICAgICAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXQgKSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQ2FuXCd0IGdldCBUaWNrZXQgIiVzIiEnLCAkUGFyYW17VGlja2V0SUR9ICksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkRHluYW1pY0ZpZWxkUHJvY2Vzc0lEID0gJ0R5bmFtaWNGaWVsZF8nCiAgICAgICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9jZXNzOjpEeW5hbWljRmllbGRQcm9jZXNzTWFuYWdlbWVudFByb2Nlc3NJRCcpOwogICAgICAgIG15ICREeW5hbWljRmllbGRBY3Rpdml0eUlEID0gJ0R5bmFtaWNGaWVsZF8nCiAgICAgICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9jZXNzOjpEeW5hbWljRmllbGRQcm9jZXNzTWFuYWdlbWVudEFjdGl2aXR5SUQnKTsKCiAgICAgICAgaWYgKCAhJFRpY2tldHskRHluYW1pY0ZpZWxkUHJvY2Vzc0lEfSB8fCAhJFRpY2tldHskRHluYW1pY0ZpZWxkQWN0aXZpdHlJRH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAnQ2FuXCd0IGdldCBQcm9jZXNzRW50aXR5SUQgb3IgQWN0aXZpdHlFbnRpdHlJRCBmb3IgVGlja2V0ICIlcyIhJywKICAgICAgICAgICAgICAgICAgICAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRBY3Rpdml0eUFjdGl2aXR5RGlhbG9nID0gewogICAgICAgICAgICBBY3Rpdml0eSAgICAgICA9PiAkVGlja2V0eyREeW5hbWljRmllbGRBY3Rpdml0eUlEfSwKICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gJEFjdGl2aXR5RGlhbG9nRW50aXR5SUQsCiAgICAgICAgfTsKICAgIH0KCiAgICBpZiAoICElVGlja2V0ICYmICRTZWxmLT57SXNQcm9jZXNzRW5yb2xsfSApIHsKICAgICAgICAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRBY3Rpdml0eSA9ICRBY3Rpdml0eU9iamVjdC0+QWN0aXZpdHlHZXQoCiAgICAgICAgSW50ZXJmYWNlICAgICAgICA9PiAnQWdlbnRJbnRlcmZhY2UnLAogICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJEFjdGl2aXR5QWN0aXZpdHlEaWFsb2ctPntBY3Rpdml0eX0KICAgICk7CiAgICBpZiAoICEkQWN0aXZpdHkgKSB7CiAgICAgICAgbXkgJE1lc3NhZ2UgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICdDYW5cJ3QgZ2V0IEFjdGl2aXR5IGNvbmZpZ3VyYXRpb24gZm9yIEFjdGl2aXR5RW50aXR5SUQgIiVzIiEnLAogICAgICAgICAgICAkQWN0aXZpdHlBY3Rpdml0eURpYWxvZy0+e0FjdGl2aXR5fSwKICAgICAgICApOwoKICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICBpZiAoICRTZWxmLT57SXNNYWluV2luZG93fSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJE1lc3NhZ2UsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkQWN0aXZpdHlEaWFsb2cgPSAkQWN0aXZpdHlEaWFsb2dPYmplY3QtPkFjdGl2aXR5RGlhbG9nR2V0KAogICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgPT4gJEFjdGl2aXR5QWN0aXZpdHlEaWFsb2ctPntBY3Rpdml0eURpYWxvZ30sCiAgICAgICAgSW50ZXJmYWNlICAgICAgICAgICAgICA9PiAnQWdlbnRJbnRlcmZhY2UnLAogICAgKTsKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRBY3Rpdml0eURpYWxvZykgKSB7CiAgICAgICAgbXkgJE1lc3NhZ2UgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICdDYW5cJ3QgZ2V0IEFjdGl2aXR5RGlhbG9nIGNvbmZpZ3VyYXRpb24gZm9yIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgIiVzIiEnLAogICAgICAgICAgICAkQWN0aXZpdHlBY3Rpdml0eURpYWxvZy0+e0FjdGl2aXR5RGlhbG9nfSwKICAgICAgICApOwoKICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICBpZiAoICRTZWxmLT57SXNNYWluV2luZG93fSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJE1lc3NhZ2UsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdyZXAgb3V0IE92ZXJ3cml0ZXMgaWYgZGVmaW5lZCBvbiB0aGUgQWN0aXZpdHkKICAgIG15IEBPdmVyd3JpdGVBY3Rpdml0eURpYWxvZ051bWJlciA9IGdyZXAgewogICAgICAgIHJlZiAkQWN0aXZpdHktPntBY3Rpdml0eURpYWxvZ317JF99IGVxICdIQVNIJwogICAgICAgICAgICAmJiAkQWN0aXZpdHktPntBY3Rpdml0eURpYWxvZ317JF99e0FjdGl2aXR5RGlhbG9nRW50aXR5SUR9CiAgICAgICAgICAgICYmICRBY3Rpdml0eS0+e0FjdGl2aXR5RGlhbG9nfXskX317QWN0aXZpdHlEaWFsb2dFbnRpdHlJRH0gZXEKICAgICAgICAgICAgJEFjdGl2aXR5QWN0aXZpdHlEaWFsb2ctPntBY3Rpdml0eURpYWxvZ30KICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBY3Rpdml0eS0+e0FjdGl2aXR5RGlhbG9nfXskX317T3ZlcndyaXRlfSApCiAgICB9IGtleXMgJXsgJEFjdGl2aXR5LT57QWN0aXZpdHlEaWFsb2d9IH07CgogICAgIyBsZXQgdGhlIE92ZXJ3cml0ZXMgT3ZlcndyaXRlIHRoZSBBY3Rpdml0eURpYWxvZydzIEhhc2ggdmFsdWVzCiAgICBpZiAoICRPdmVyd3JpdGVBY3Rpdml0eURpYWxvZ051bWJlclswXSApIHsKICAgICAgICAleyRBY3Rpdml0eURpYWxvZ30gPSAoCiAgICAgICAgICAgICV7JEFjdGl2aXR5RGlhbG9nfSwKICAgICAgICAgICAgJXsgJEFjdGl2aXR5LT57QWN0aXZpdHlEaWFsb2d9eyAkT3ZlcndyaXRlQWN0aXZpdHlEaWFsb2dOdW1iZXJbMF0gfXtPdmVyd3JpdGV9IH0KICAgICAgICApOwogICAgfQoKICAgICMgQWRkIFBhZ2VIZWFkZXIsIE5hdmJhciwgRm9ybWhlYWRlciAoUHJvY2Vzcy9BY3Rpdml0eURpYWxvZ0hlYWRlcikKICAgIG15ICRPdXRwdXQ7CiAgICBteSAkTWFpbkJveENsYXNzOwoKICAgIGlmICggISRTZWxmLT57SXNNYWluV2luZG93fSAmJiAhJFNlbGYtPntJc1Byb2Nlc3NFbnJvbGx9ICkgewogICAgICAgICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgICAgIFR5cGUgID0+ICdTbWFsbCcsCiAgICAgICAgICAgIFZhbHVlID0+ICRUaWNrZXR7TnVtYmVyfSwKICAgICAgICApOwoKICAgICAgICAjIGRpc3BsYXkgZ2l2ZW4gbm90aWZ5IG1lc3NhZ2VzIGlmIHRoaXMgaXMgbm90IGFuIEFKQVggcmVxdWVzdAogICAgICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17Tm90aWZ5fSApICkgewoKICAgICAgICAgICAgZm9yIG15ICROb3RpZnlEYXRhICggQHsgJFBhcmFte05vdGlmeX0gfSApIHsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCAleyROb3RpZnlEYXRhfSApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkQWN0aXZpdHlEaWFsb2ctPntOYW1lfSApCiAgICAgICAgICAgICAgICAgICAgfHwgJycsCiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQogICAgZWxzaWYgKAogICAgICAgICggJFNlbGYtPntJc01haW5XaW5kb3d9IHx8ICRTZWxmLT57SXNQcm9jZXNzRW5yb2xsfSApCiAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoIFwlRXJyb3IgKQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBkaXNwbGF5IGNvbXBsZXRlIGhlYWRlciBhbmQgbmF2aWdhdGlvbiBiYXIgaW4gQUpBWCBkaWFsb2dzIHdoZW4gdGhlcmUgaXMgYSBzZXJ2ZXIgZXJyb3IKICAgICAgICAjICAgIHVubGVzcyB3ZSBhcmUgaW4gYSBwcm9jZXNzIGVucm9sbG1lbnQgKG9ubHkgd2hlbiBJc01haW5XaW5kb3cgaXMgYWN0aXZlKQogICAgICAgIG15ICRUeXBlID0gJFNlbGYtPntJc01haW5XaW5kb3d9ID8gJycgOiAnU21hbGwnOwogICAgICAgICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgICAgIFR5cGUgPT4gJFR5cGUsCiAgICAgICAgKTsKICAgICAgICBpZiAoICRTZWxmLT57SXNNYWluV2luZG93fSApIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgfQoKICAgICAgICAjIGRpc3BsYXkgb3JpZ2luYWwgaGVhZGVyIHRleHRzICh0aGUgcHJvY2VzcyBsaXN0IG1heWJlIGlzIG5vdCBuZWNlc3NhcnkpCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaWNrZXRQcm9jZXNzJyAuICRUeXBlLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIElzUHJvY2Vzc0Vucm9sbCA9PiAkU2VsZi0+e0lzUHJvY2Vzc0Vucm9sbH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgdGhlIE1haW5Cb3ggY2xhc3MgdG8gYWRkIGNvcnJlY3QgYm9yZGVycyB0byB0aGUgc2NyZWVuCiAgICAgICAgJE1haW5Cb3hDbGFzcyA9ICdNYWluQm94JzsKICAgIH0KCiAgICAjIGRpc3BsYXkgcHJvY2VzcyBpbmZvcm1hdGlvbgogICAgaWYgKCAkU2VsZi0+e0lzTWFpbldpbmRvd30gKSB7CgogICAgICAgICMgZ2V0IHByb2Nlc3MgZGF0YQogICAgICAgIG15ICRQcm9jZXNzID0gJFByb2Nlc3NPYmplY3QtPlByb2Nlc3NHZXQoCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAkUGFyYW17UHJvY2Vzc0VudGl0eUlEfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBtYWluIHByb2Nlc3MgaW5mb3JtYXRpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUHJvY2Vzc0luZm9TaWRlYmFyJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBQcm9jZXNzICAgICAgICA9PiAkUHJvY2Vzcy0+e05hbWV9ICAgICAgICB8fCAnJywKICAgICAgICAgICAgICAgIEFjdGl2aXR5ICAgICAgID0+ICRBY3Rpdml0eS0+e05hbWV9ICAgICAgIHx8ICcnLAogICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gJEFjdGl2aXR5RGlhbG9nLT57TmFtZX0gfHwgJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgYWN0aXZpdHkgZGlhbG9nIHNob3J0IGRlc2NyaXB0aW9uIChpZiBhbnkpCiAgICAgICAgaWYgKAogICAgICAgICAgICBkZWZpbmVkICRBY3Rpdml0eURpYWxvZy0+e0Rlc2NyaXB0aW9uU2hvcnR9CiAgICAgICAgICAgICYmICRBY3Rpdml0eURpYWxvZy0+e0Rlc2NyaXB0aW9uU2hvcnR9IG5lICcnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUHJvY2Vzc0luZm9TaWRlYmFyQWN0aXZpdHlEaWFsb2dEZXNjJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRGVzY3JpcHRpb24gPT4gJEFjdGl2aXR5RGlhbG9nLT57RGVzY3JpcHRpb25TaG9ydH0gfHwgJycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgbG9uZyBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbiBpZiBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgIGRlZmluZWQgJEFjdGl2aXR5RGlhbG9nLT57RGVzY3JpcHRpb25Mb25nfQogICAgICAgICAgICAmJiBsZW5ndGggJEFjdGl2aXR5RGlhbG9nLT57RGVzY3JpcHRpb25Mb25nfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0xvbmdEZXNjcmlwdGlvblNpZGViYXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJEFjdGl2aXR5RGlhbG9nLT57RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBkZXNjcmlwdGlvbnMKICAgIGlmICggJEFjdGl2aXR5RGlhbG9nLT57RGVzY3JpcHRpb25TaG9ydH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0Rlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQKICAgICAgICAgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICRBY3Rpdml0eURpYWxvZy0+e0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KICAgIGlmICggJEFjdGl2aXR5RGlhbG9nLT57RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRGVzY3JpcHRpb25Mb25nJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcKICAgICAgICAgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICRBY3Rpdml0eURpYWxvZy0+e0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBjbG9zZSAmIGNhbmNlbCBsaW5rIGlmIG5lY2Vzc2FyeQogICAgaWYgKCAhJFNlbGYtPntJc01haW5XaW5kb3d9ICYmICEkU2VsZi0+e0lzUHJvY2Vzc0Vucm9sbH0gKSB7CiAgICAgICAgaWYgKCAkUGFyYW17UmVuZGVyTG9ja2VkfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdQcm9wZXJ0aWVzTG9jaycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ2FuY2VsTGluaycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgIH0KCiAgICAjIGV4cGxhbmF0b3J5IG1lc3NhZ2UgYWJvdXQgYXN0ZXJpc2sKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBc3Rlcmlza0V4cGxhbmF0aW9uJykgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FzdGVyaXNrRXhwbGFuYXRpb24nLAogICAgICAgICk7CiAgICB9CgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQcm9jZXNzTWFuYWdlbWVudC9BY3Rpdml0eURpYWxvZ0hlYWRlcicsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgRm9ybU5hbWUgICAgICAgICAgICAgICA9PiAnQWN0aXZpdHlEaWFsb2dEaWFsb2cnIC4gJEFjdGl2aXR5QWN0aXZpdHlEaWFsb2ctPntBY3Rpdml0eURpYWxvZ30sCiAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICBTdWJhY3Rpb24gICAgICAgICAgICAgID0+ICdTdG9yZUFjdGl2aXR5RGlhbG9nJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICA9PiAkVGlja2V0e1RpY2tldElEfSB8fCAnJywKICAgICAgICAgICAgTGlua1RpY2tldElEICAgICAgICAgICA9PiAkU2VsZi0+e0xpbmtUaWNrZXRJRH0sCiAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgPT4gJEFjdGl2aXR5QWN0aXZpdHlEaWFsb2ctPntBY3Rpdml0eURpYWxvZ30sCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfXtBY3Rpdml0eUVudGl0eUlEfQogICAgICAgICAgICAgICAgfHwgJFRpY2tldHsKICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycKICAgICAgICAgICAgICAgICAgICAuICRDb25maWdPYmplY3QtPkdldCgKICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkR5bmFtaWNGaWVsZFByb2Nlc3NNYW5hZ2VtZW50QWN0aXZpdHlJRCcKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFBhcmFte1Byb2Nlc3NFbnRpdHlJRH0KICAgICAgICAgICAgICAgIHx8ICRUaWNrZXR7CiAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nCiAgICAgICAgICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICdQcm9jZXNzOjpEeW5hbWljRmllbGRQcm9jZXNzTWFuYWdlbWVudFByb2Nlc3NJRCcKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBJc01haW5XaW5kb3cgICAgPT4gJFNlbGYtPntJc01haW5XaW5kb3d9LAogICAgICAgICAgICBJc1Byb2Nlc3NFbnJvbGwgPT4gJFNlbGYtPntJc1Byb2Nlc3NFbnJvbGx9LAogICAgICAgICAgICBNYWluQm94Q2xhc3MgICAgPT4gJE1haW5Cb3hDbGFzcyB8fCAnJywKICAgICAgICB9LAogICAgKTsKCiAgICBteSAlUmVuZGVyZWRGaWVsZHMgPSAoKTsKCiAgICBteSAkSW5wdXREZWZpbml0aW9uUmVuZGVyZWQgPSAwOwogICAgbXkgJURGUG9zc2libGVWYWx1ZXMgICAgICAgID0gJXsgJFBhcmFte0RGUG9zc2libGVWYWx1ZXN9IC8vIHt9IH07CiAgICBteSAlVmlzaWJpbGl0eSAgICAgICAgICAgICAgPSAleyAkUGFyYW17VmlzaWJpbGl0eX0gICAgICAgLy8ge30gfTsKCiAgICAjIGlmIHdlIGFyZSByZW5kZXJpbmcgYSBuZXcgbWFzayBhbmQgYXJlIG5vdCByZXJlbmRlcmluZyB3aXRoIGVycm9ycyBnZXQgdGlja2V0IGFuZCBkZWZhdWx0IGR5bmFtaWMgZmllbGQgdmFsdWVzCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBuZSAnU3RvcmVBY3Rpdml0eURpYWxvZycgKSB7CgogICAgICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwogICAgICAgIG15ICROZXdUaWNrZXQ7CgogICAgICAgICMgZ2V0IHN0b3JlZCBkeW5hbWljIGZpZWxkIHZhbHVlIChzcGxpdCkKICAgICAgICBpZiAoICRTZWxmLT57TGlua1RpY2tldElEfSApIHsKCiAgICAgICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCB2YWx1ZXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKiApIHsKICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIHVubGVzcyBJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZUdldCgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFNlbGYtPntMaW5rVGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIFByb2Nlc3NTdWZmaXggICAgICA9PiAkU2VsZi0+e0lEU3VmZml4fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgd2UgYXJlIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHRpY2tldAogICAgICAgIGVsc2lmICglVGlja2V0KSB7CgogICAgICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgICAgIGZvciBteSAkTmFtZSAoIGtleXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKiApIHsKICAgICAgICAgICAgICAgICRQYXJhbXtHZXRQYXJhbX17ICdEeW5hbWljRmllbGRfJyAuICROYW1lIH0gPSAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkTmFtZSB9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJE5ld1RpY2tldCA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIHJldHJpZXZlIGZpZWxkIHJlc3RyaWN0aW9ucyBmb3IgZHluYW1pYyBmaWVsZHMKICAgICAgICBteSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpGaWVsZFJlc3RyaWN0aW9ucycpOwogICAgICAgIG15ICRBQ0xQcmVzZWxlY3Rpb247CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldEFDTDo6QUNMUHJlc2VsZWN0aW9uJykgKSB7CgogICAgICAgICAgICAjIGdldCBjYWNoZWQgcHJlc2VsZWN0aW9uIHJ1bGVzCiAgICAgICAgICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwogICAgICAgICAgICAkQUNMUHJlc2VsZWN0aW9uID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgICAgICBUeXBlID0+ICdUaWNrZXRBQ0wnLAogICAgICAgICAgICAgICAgS2V5ICA9PiAnUHJlc2VsZWN0aW9uJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJEFDTFByZXNlbGVjdGlvbiApIHsKICAgICAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24gPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPlNldEFDTFByZXNlbGVjdGlvbkNhY2hlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRBdXRvc2VsZWN0ICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QUNMOjpBdXRvc2VsZWN0JykgfHwgdW5kZWY7CiAgICAgICAgbXkgJExvb3BQcm90ZWN0aW9uID0gMTAwOwoKICAgICAgICAjIGdldCB2YWx1ZXMgYW5kIHZpc2liaWxpdHkgb2YgZHluYW1pYyBmaWVsZHMKICAgICAgICBteSAlRHluRmllbGRTdGF0ZXMgPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPkdldEZpZWxkU3RhdGVzKAogICAgICAgICAgICBUaWNrZXRPYmplY3QgICAgICAgICAgICAgID0+ICRUaWNrZXRPYmplY3QsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgICAgICAgICAgICAgPT4gJFNlbGYtPntEeW5hbWljRmllbGR9LAogICAgICAgICAgICBEeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0+ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LAogICAgICAgICAgICBBY3Rpb24gICAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgQ2hhbmdlZEVsZW1lbnRzICAgICAgICAgICA9PiB7fSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICAgICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19e0N1c3RvbWVyVXNlcklEfSB8fCAnJywKICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19LAogICAgICAgICAgICBBdXRvc2VsZWN0ICAgICAgICAgICAgICAgID0+ICRBdXRvc2VsZWN0LAogICAgICAgICAgICBBQ0xQcmVzZWxlY3Rpb24gICAgICAgICAgID0+ICRBQ0xQcmVzZWxlY3Rpb24sCiAgICAgICAgICAgIExvb3BQcm90ZWN0aW9uICAgICAgICAgICAgPT4gXCRMb29wUHJvdGVjdGlvbiwKICAgICAgICApOwoKICAgICAgICAlREZQb3NzaWJsZVZhbHVlcyA9IG1hcCB7ICRfID0+ICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9eyRffXtQb3NzaWJsZVZhbHVlc30gfSBrZXlzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSo7CiAgICAgICAgJVZpc2liaWxpdHkgICAgICAgPSAkRHluRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0tPiUqOwogICAgfQoKICAgICMgUGFyc2UgZGVmaW5pdGlvbiBpZiBwcmVzZW50CiAgICBteSAkSW5wdXRGaWVsZERlZmluaXRpb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6WUFNTCcpLT5Mb2FkKAogICAgICAgIERhdGEgPT4gJEFjdGl2aXR5RGlhbG9nLT57SW5wdXRGaWVsZERlZmluaXRpb259LAogICAgKTsKICAgIG15ICVEZWZpbmVkRmllbGRzTGlzdDsKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCRJbnB1dEZpZWxkRGVmaW5pdGlvbikgKSB7CiAgICAgICAgZm9yIG15ICRSb3cgKCAkSW5wdXRGaWVsZERlZmluaXRpb24tPkAqICkgewogICAgICAgICAgICBpZiAoICRSb3ctPntERn0gKSB7CiAgICAgICAgICAgICAgICAkRGVmaW5lZEZpZWxkc0xpc3R7ICdEeW5hbWljRmllbGRfJyAuICRSb3ctPntERn0gfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkUm93LT57R3JpZH0gKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEdyaWRSb3cgKCAkUm93LT57R3JpZH17Um93c30tPkAqICkgewogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRmllbGQgKCBncmVwIHsgJF8tPntERn0gfSAkR3JpZFJvdy0+QCogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREZWZpbmVkRmllbGRzTGlzdHsgJ0R5bmFtaWNGaWVsZF8nIC4gJEZpZWxkLT57REZ9IH0gPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBteSAlRHluYW1pY0ZpZWxkVmFsdWVzID0gbWFwIHsgKCAnRHluYW1pY0ZpZWxkXycgLiAkXyA9PiAkUGFyYW17R2V0UGFyYW19eyAnRHluYW1pY0ZpZWxkXycgLiAkXyB9ICkgfSBrZXlzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSo7CgogICAgIyBMb29wIHRocm91Z2ggQWN0aXZpdHlEaWFsb2dGaWVsZHMgYW5kIHJlbmRlciB0aGVpciBvdXRwdXQKICAgIERJQUxPR0ZJRUxEOgogICAgZm9yIG15ICRDdXJyZW50RmllbGQgKCBAeyAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZE9yZGVyfSB9ICkgewogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9ICkgKSB7CiAgICAgICAgICAgIG15ICRNZXNzYWdlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ0NhblwndCBnZXQgZGF0YSBmb3IgRmllbGQgIiVzIiBvZiBBY3Rpdml0eURpYWxvZyAiJXMiIScsCiAgICAgICAgICAgICAgICAkQ3VycmVudEZpZWxkLAogICAgICAgICAgICAgICAgJEFjdGl2aXR5QWN0aXZpdHlEaWFsb2ctPntBY3Rpdml0eURpYWxvZ30sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0lzTWFpbldpbmRvd30gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRNZXNzYWdlLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJUZpZWxkRGF0YSA9ICV7ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgIyBXZSByZW5kZXIganVzdCB2aXNpYmxlIEFjdGl2aXR5RGlhbG9nRmllbGRzCiAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAhJEZpZWxkRGF0YXtEaXNwbGF5fTsKCiAgICAgICAgIyBIYW5kbGUgbXVsdGljb2x1bW4gZmllbGQgcmVuZGVyaW5nCiAgICAgICAgaWYgKCAkRGVmaW5lZEZpZWxkc0xpc3R7JEN1cnJlbnRGaWVsZH0gKSB7CgogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRJbnB1dERlZmluaXRpb25SZW5kZXJlZDsKCiAgICAgICAgICAgICRPdXRwdXQgLj0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkR5bmFtaWNGaWVsZDo6TWFzaycpLT5FZGl0U2VjdGlvblJlbmRlcigKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgICAgICAgICAgID0+ICRJbnB1dEZpZWxkRGVmaW5pdGlvbiwKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgICAgICAgID0+ICRTZWxmLT57RHluYW1pY0ZpZWxkfSwKICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyksCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRWYWx1ZXMgICA9PiBcJUR5bmFtaWNGaWVsZFZhbHVlcywKICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzRmlsdGVyID0+IFwlREZQb3NzaWJsZVZhbHVlcywKICAgICAgICAgICAgICAgIEVycm9ycyAgICAgICAgICAgICAgID0+ICRQYXJhbXtERkVycm9yc30sCiAgICAgICAgICAgICAgICBWaXNpYmlsaXR5ICAgICAgICAgICA9PiBcJVZpc2liaWxpdHksCiAgICAgICAgICAgICAgICBPYmplY3QgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCAgICAgPT4gJFBhcmFte0dldFBhcmFtfXtDdXN0b21lcklEfSwKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkUGFyYW17R2V0UGFyYW19e0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgJUR5bmFtaWNGaWVsZFZhbHVlcywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkSW5wdXREZWZpbml0aW9uUmVuZGVyZWQgPSAxOwoKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRDsKICAgICAgICB9CgogICAgICAgICMgcmVuZGVyIER5bmFtaWNGaWVsZHMKICAgICAgICBpZiAoICRDdXJyZW50RmllbGQgPX4gbXteRHluYW1pY0ZpZWxkXyguKil9eG1zICkgewogICAgICAgICAgICBteSAkRHluYW1pY0ZpZWxkTmFtZSA9ICQxOwogICAgICAgICAgICBteSAkUmVzcG9uc2UgICAgICAgICA9ICRTZWxmLT5fUmVuZGVyRHluYW1pY0ZpZWxkKAogICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dGaWVsZCA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9LAogICAgICAgICAgICAgICAgRmllbGROYW1lICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkTmFtZSwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgfSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgICA9PiBcJVRpY2tldCAgICAgICAgfHwge30sCiAgICAgICAgICAgICAgICBFcnJvciAgICAgICAgICAgICAgID0+IFwlRXJyb3IgICAgICAgICB8fCB7fSwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZXMgICAgICAgPT4gXCVFcnJvck1lc3NhZ2VzIHx8IHt9LAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyAgICAgID0+ICRERlBvc3NpYmxlVmFsdWVzeyREeW5hbWljRmllbGROYW1lfSwKICAgICAgICAgICAgICAgIFZpc2liaWxpdHkgICAgICAgICAgPT4gJFZpc2liaWxpdHl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH0gLy8gMCwKICAgICAgICAgICAgICAgIFZpc2liaWxpdGllcyAgICAgICAgPT4gXCVWaXNpYmlsaXR5LAogICAgICAgICAgICAgICAgT2JqZWN0ICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCAgICAgPT4gJFBhcmFte0dldFBhcmFtfXtDdXN0b21lcklEfSwKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkUGFyYW17R2V0UGFyYW19e0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgJUR5bmFtaWNGaWVsZFZhbHVlcywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkUmVzcG9uc2UtPntTdWNjZXNzfSApIHsKCiAgICAgICAgICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntJc01haW5XaW5kb3d9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFJlc3BvbnNlLT57SFRNTH07CgogICAgICAgICAgICAkUmVuZGVyZWRGaWVsZHN7JEN1cnJlbnRGaWVsZH0gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyByZW5kZXIgU3RhdGUKICAgICAgICBlbHNpZiAoICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IGVxICdTdGF0ZUlEJyApCiAgICAgICAgewoKICAgICAgICAgICAgIyBXZSBkb24ndCByZW5kZXIgRmllbGRzIHR3aWNlLAogICAgICAgICAgICAjIGlmIHRoZXJlIHdhcyBhbHJlYWR5IGEgQ29uZmlnIHdpdGhvdXQgSUQsIHNraXAgdGhpcyBmaWVsZAogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRSZW5kZXJlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICRSZXNwb25zZSA9ICRTZWxmLT5fUmVuZGVyU3RhdGUoCiAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0ZpZWxkID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH0sCiAgICAgICAgICAgICAgICBGaWVsZE5hbWUgICAgICAgICAgID0+ICRDdXJyZW50RmllbGQsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25TaG9ydH0sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgICAgPT4gXCVUaWNrZXQgfHwge30sCiAgICAgICAgICAgICAgICBFcnJvciAgICAgICAgICAgICAgID0+IFwlRXJyb3IgIHx8IHt9LAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkUmVzcG9uc2UtPntTdWNjZXNzfSApIHsKCiAgICAgICAgICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntJc01haW5XaW5kb3d9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFJlc3BvbnNlLT57SFRNTH07CgogICAgICAgICAgICAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyByZW5kZXIgUXVldWUKICAgICAgICBlbHNpZiAoICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IGVxICdRdWV1ZUlEJyApCiAgICAgICAgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRSZW5kZXJlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICRSZXNwb25zZSA9ICRTZWxmLT5fUmVuZGVyUXVldWUoCiAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0ZpZWxkID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH0sCiAgICAgICAgICAgICAgICBGaWVsZE5hbWUgICAgICAgICAgID0+ICRDdXJyZW50RmllbGQsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25TaG9ydH0sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgICAgPT4gXCVUaWNrZXQgfHwge30sCiAgICAgICAgICAgICAgICBFcnJvciAgICAgICAgICAgICAgID0+IFwlRXJyb3IgIHx8IHt9LAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkUmVzcG9uc2UtPntTdWNjZXNzfSApIHsKCiAgICAgICAgICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntJc01haW5XaW5kb3d9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFJlc3BvbnNlLT57SFRNTH07CgogICAgICAgICAgICAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyByZW5kZXIgUHJpb3JpdHkKICAgICAgICBlbHNpZiAoICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IGVxICdQcmlvcml0eUlEJyApCiAgICAgICAgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRSZW5kZXJlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICRSZXNwb25zZSA9ICRTZWxmLT5fUmVuZGVyUHJpb3JpdHkoCiAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0ZpZWxkID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH0sCiAgICAgICAgICAgICAgICBGaWVsZE5hbWUgICAgICAgICAgID0+ICRDdXJyZW50RmllbGQsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25TaG9ydH0sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgICAgPT4gXCVUaWNrZXQgfHwge30sCiAgICAgICAgICAgICAgICBFcnJvciAgICAgICAgICAgICAgID0+IFwlRXJyb3IgIHx8IHt9LAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkUmVzcG9uc2UtPntTdWNjZXNzfSApIHsKCiAgICAgICAgICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntJc01haW5XaW5kb3d9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFJlc3BvbnNlLT57SFRNTH07CgogICAgICAgICAgICAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyByZW5kZXIgTG9jawogICAgICAgIGVsc2lmICggJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gZXEgJ0xvY2tJRCcgKSB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJFJlbmRlcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgbXkgJFJlc3BvbnNlID0gJFNlbGYtPl9SZW5kZXJMb2NrKAogICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dGaWVsZCA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9LAogICAgICAgICAgICAgICAgRmllbGROYW1lICAgICAgICAgICA9PiAkQ3VycmVudEZpZWxkLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCAgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICAgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgICAgICBUaWNrZXQgICAgICAgICAgICAgID0+IFwlVGlja2V0IHx8IHt9LAogICAgICAgICAgICAgICAgRXJyb3IgICAgICAgICAgICAgICA9PiBcJUVycm9yICB8fCB7fSwKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFJlc3BvbnNlLT57U3VjY2Vzc30gKSB7CgogICAgICAgICAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57SXNNYWluV2luZG93fSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJFJlc3BvbnNlLT57TWVzc2FnZX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJFJlc3BvbnNlLT57TWVzc2FnZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkT3V0cHV0IC49ICRSZXNwb25zZS0+e0hUTUx9OwoKICAgICAgICAgICAgJFJlbmRlcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CgogICAgICAgICMgcmVuZGVyIFNlcnZpY2UKICAgICAgICBlbHNpZiAoICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IGVxICdTZXJ2aWNlSUQnICkgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRSZW5kZXJlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICRSZXNwb25zZSA9ICRTZWxmLT5fUmVuZGVyU2VydmljZSgKICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRmllbGQgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfSwKICAgICAgICAgICAgICAgIEZpZWxkTmFtZSAgICAgICAgICAgPT4gJEN1cnJlbnRGaWVsZCwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgICA9PiBcJVRpY2tldCB8fCB7fSwKICAgICAgICAgICAgICAgIEVycm9yICAgICAgICAgICAgICAgPT4gXCVFcnJvciAgfHwge30sCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRSZXNwb25zZS0+e1N1Y2Nlc3N9ICkgewoKICAgICAgICAgICAgICAgICMgZG9lcyBub3Qgc2hvdyBoZWFkZXIgYW5kIGZvb3RlciBhZ2FpbgogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0lzTWFpbldpbmRvd30gKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE91dHB1dCAuPSAkUmVzcG9uc2UtPntIVE1MfTsKCiAgICAgICAgICAgICRSZW5kZXJlZEZpZWxkc3skQ3VycmVudEZpZWxkfSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIHJlbmRlciBTTEEKICAgICAgICBlbHNpZiAoICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IGVxICdTTEFJRCcgKSB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJFJlbmRlcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgbXkgJFJlc3BvbnNlID0gJFNlbGYtPl9SZW5kZXJTTEEoCiAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0ZpZWxkID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH0sCiAgICAgICAgICAgICAgICBGaWVsZE5hbWUgICAgICAgICAgID0+ICRDdXJyZW50RmllbGQsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25TaG9ydH0sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgICAgPT4gXCVUaWNrZXQgfHwge30sCiAgICAgICAgICAgICAgICBFcnJvciAgICAgICAgICAgICAgID0+IFwlRXJyb3IgIHx8IHt9LAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkUmVzcG9uc2UtPntTdWNjZXNzfSApIHsKCiAgICAgICAgICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntJc01haW5XaW5kb3d9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFJlc3BvbnNlLT57SFRNTH07CgogICAgICAgICAgICAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyByZW5kZXIgT3duZXIKICAgICAgICBlbHNpZiAoICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IGVxICdPd25lcklEJyApIHsKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH07CgogICAgICAgICAgICBteSAkUmVzcG9uc2UgPSAkU2VsZi0+X1JlbmRlck93bmVyKAogICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dGaWVsZCA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9LAogICAgICAgICAgICAgICAgRmllbGROYW1lICAgICAgICAgICA9PiAkQ3VycmVudEZpZWxkLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCAgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICAgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgICAgICBUaWNrZXQgICAgICAgICAgICAgID0+IFwlVGlja2V0IHx8IHt9LAogICAgICAgICAgICAgICAgRXJyb3IgICAgICAgICAgICAgICA9PiBcJUVycm9yICB8fCB7fSwKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFJlc3BvbnNlLT57U3VjY2Vzc30gKSB7CgogICAgICAgICAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57SXNNYWluV2luZG93fSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJFJlc3BvbnNlLT57TWVzc2FnZX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJFJlc3BvbnNlLT57TWVzc2FnZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkT3V0cHV0IC49ICRSZXNwb25zZS0+e0hUTUx9OwoKICAgICAgICAgICAgJFJlbmRlcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CgogICAgICAgICMgcmVuZGVyIHJlc3BvbnNpYmxlCiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnUmVzcG9uc2libGVJRCcgKSB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJFJlbmRlcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgbXkgJFJlc3BvbnNlID0gJFNlbGYtPl9SZW5kZXJSZXNwb25zaWJsZSgKICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRmllbGQgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfSwKICAgICAgICAgICAgICAgIEZpZWxkTmFtZSAgICAgICAgICAgPT4gJEN1cnJlbnRGaWVsZCwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgICA9PiBcJVRpY2tldCB8fCB7fSwKICAgICAgICAgICAgICAgIEVycm9yICAgICAgICAgICAgICAgPT4gXCVFcnJvciAgfHwge30sCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRSZXNwb25zZS0+e1N1Y2Nlc3N9ICkgewoKICAgICAgICAgICAgICAgICMgZG9lcyBub3Qgc2hvdyBoZWFkZXIgYW5kIGZvb3RlciBhZ2FpbgogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0lzTWFpbldpbmRvd30gKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE91dHB1dCAuPSAkUmVzcG9uc2UtPntIVE1MfTsKCiAgICAgICAgICAgICRSZW5kZXJlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIHJlbmRlciBDdXN0b21lcklECiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnQ3VzdG9tZXJJRCcgKSB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJFJlbmRlcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgbXkgJFJlc3BvbnNlID0gJFNlbGYtPl9SZW5kZXJDdXN0b21lcigKICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRmllbGQgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfSwKICAgICAgICAgICAgICAgIEZpZWxkTmFtZSAgICAgICAgICAgPT4gJEN1cnJlbnRGaWVsZCwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgICA9PiBcJVRpY2tldCB8fCB7fSwKICAgICAgICAgICAgICAgIEVycm9yICAgICAgICAgICAgICAgPT4gXCVFcnJvciAgfHwge30sCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRSZXNwb25zZS0+e1N1Y2Nlc3N9ICkgewoKICAgICAgICAgICAgICAgICMgZG9lcyBub3Qgc2hvdyBoZWFkZXIgYW5kIGZvb3RlciBhZ2FpbgogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0lzTWFpbldpbmRvd30gKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE91dHB1dCAuPSAkUmVzcG9uc2UtPntIVE1MfTsKCiAgICAgICAgICAgICRSZW5kZXJlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgfQoKICAgICAgICBlbHNpZiAoICRDdXJyZW50RmllbGQgZXEgJ1BlbmRpbmdUaW1lJyApIHsKCiAgICAgICAgICAgICMgUGVuZGluZ1RpbWUgaXMganVzdCB1c2VmdWwgaWYgd2UgaGF2ZSBTdGF0ZSBvciBTdGF0ZUlECiAgICAgICAgICAgIGlmICggbm9uZSB7bXteKFN0YXRlSUR8U3RhdGUpJH14bXN9IEB7ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkT3JkZXJ9IH0gKSB7CiAgICAgICAgICAgICAgICBteSAkTWVzc2FnZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAnUGVuZGluZ1RpbWUgY2FuIGp1c3QgYmUgdXNlZCBpZiBTdGF0ZSBvciBTdGF0ZUlEIGlzIGNvbmZpZ3VyZWQgZm9yIHRoZSBzYW1lIEFjdGl2aXR5RGlhbG9nLiBBY3Rpdml0eURpYWxvZzogJXMhJywKICAgICAgICAgICAgICAgICAgICAkQWN0aXZpdHlBY3Rpdml0eURpYWxvZy0+e0FjdGl2aXR5RGlhbG9nfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57SXNNYWluV2luZG93fSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJE1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJE1lc3NhZ2UsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRSZW5kZXJlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICRSZXNwb25zZSA9ICRTZWxmLT5fUmVuZGVyUGVuZGluZ1RpbWUoCiAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0ZpZWxkID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH0sCiAgICAgICAgICAgICAgICBGaWVsZE5hbWUgICAgICAgICAgID0+ICRDdXJyZW50RmllbGQsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25TaG9ydH0sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgICAgPT4gXCVUaWNrZXQgfHwge30sCiAgICAgICAgICAgICAgICBFcnJvciAgICAgICAgICAgICAgID0+IFwlRXJyb3IgIHx8IHt9LAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkUmVzcG9uc2UtPntTdWNjZXNzfSApIHsKCiAgICAgICAgICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntJc01haW5XaW5kb3d9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFJlc3BvbnNlLT57SFRNTH07CgogICAgICAgICAgICAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyByZW5kZXIgVGl0bGUKICAgICAgICBlbHNpZiAoICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IGVxICdUaXRsZScgKSB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJFJlbmRlcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgbXkgJFJlc3BvbnNlID0gJFNlbGYtPl9SZW5kZXJUaXRsZSgKICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRmllbGQgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfSwKICAgICAgICAgICAgICAgIEZpZWxkTmFtZSAgICAgICAgICAgPT4gJEN1cnJlbnRGaWVsZCwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgICA9PiBcJVRpY2tldCB8fCB7fSwKICAgICAgICAgICAgICAgIEVycm9yICAgICAgICAgICAgICAgPT4gXCVFcnJvciAgfHwge30sCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRSZXNwb25zZS0+e1N1Y2Nlc3N9ICkgewoKICAgICAgICAgICAgICAgICMgZG9lcyBub3Qgc2hvdyBoZWFkZXIgYW5kIGZvb3RlciBhZ2FpbgogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0lzTWFpbldpbmRvd30gKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE91dHB1dCAuPSAkUmVzcG9uc2UtPntIVE1MfTsKCiAgICAgICAgICAgICRSZW5kZXJlZEZpZWxkc3skQ3VycmVudEZpZWxkfSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIHJlbmRlciBBcnRpY2xlCiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnQXJ0aWNsZScgKSB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJFJlbmRlcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgbXkgJFN0YW5kYXJkVGVtcGxhdGVzID0gJFNlbGYtPl9HZXRTdGFuZGFyZFRlbXBsYXRlcyggJFBhcmFte0dldFBhcmFtfS0+JSogKTsKCiAgICAgICAgICAgIG15ICRSZXNwb25zZSA9ICRTZWxmLT5fUmVuZGVyQXJ0aWNsZSgKICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRmllbGQgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfSwKICAgICAgICAgICAgICAgIEZpZWxkTmFtZSAgICAgICAgICAgPT4gJEN1cnJlbnRGaWVsZCwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgICA9PiBcJVRpY2tldCB8fCB7fSwKICAgICAgICAgICAgICAgIEVycm9yICAgICAgICAgICAgICAgPT4gXCVFcnJvciAgfHwge30sCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfSwKICAgICAgICAgICAgICAgIEluZm9ybUFnZW50cyAgICAgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXtBcnRpY2xlfXtDb25maWd9e0luZm9ybUFnZW50c30sCiAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlcyAgID0+ICRTdGFuZGFyZFRlbXBsYXRlcywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRSZXNwb25zZS0+e1N1Y2Nlc3N9ICkgewoKICAgICAgICAgICAgICAgICMgZG9lcyBub3Qgc2hvdyBoZWFkZXIgYW5kIGZvb3RlciBhZ2FpbgogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0lzTWFpbldpbmRvd30gKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE91dHB1dCAuPSAkUmVzcG9uc2UtPntIVE1MfTsKCiAgICAgICAgICAgICRSZW5kZXJlZEZpZWxkc3skQ3VycmVudEZpZWxkfSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIHJlbmRlciBUeXBlCiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnVHlwZUlEJyApIHsKCiAgICAgICAgICAgICMgV2UgZG9uJ3QgcmVuZGVyIEZpZWxkcyB0d2ljZSwKICAgICAgICAgICAgIyBpZiB0aGVyZSB3YXMgYWxyZWFkeSBhIENvbmZpZyB3aXRob3V0IElELCBza2lwIHRoaXMgZmllbGQKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH07CgogICAgICAgICAgICBteSAkUmVzcG9uc2UgPSAkU2VsZi0+X1JlbmRlclR5cGUoCiAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0ZpZWxkID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH0sCiAgICAgICAgICAgICAgICBGaWVsZE5hbWUgICAgICAgICAgID0+ICRDdXJyZW50RmllbGQsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25TaG9ydH0sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgICAgPT4gXCVUaWNrZXQgfHwge30sCiAgICAgICAgICAgICAgICBFcnJvciAgICAgICAgICAgICAgID0+IFwlRXJyb3IgIHx8IHt9LAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkUmVzcG9uc2UtPntTdWNjZXNzfSApIHsKCiAgICAgICAgICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntJc01haW5XaW5kb3d9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFJlc3BvbnNlLT57SFRNTH07CgogICAgICAgICAgICAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRm9vdGVyQ1NTQ2xhc3MgPSAnRm9vdGVyJzsKCiAgICBpZiAoICRTZWxmLT57SXNBamF4UmVxdWVzdH0gKSB7CgogICAgICAgICMgRHVlIHRvIHRoZSBpbml0aWFsIGxvYWRpbmcgb2YKICAgICAgICAjIHRoZSBmaXJzdCBBY3Rpdml0eURpYWxvZyBhZnRlciBQcm9jZXNzIHNlbGVjdGlvbgogICAgICAgICMgd2UgaGF2ZSB0byBiaW5kIHRoZSBBamF4VXBkYXRlIEZ1bmN0aW9uIG9uCiAgICAgICAgIyB0aGUgc2VsZWN0cywgc28gd2UgZ2V0IHRoZSBjb21wbGV0ZSBKU09uRG9jdW1lbnRDb21wbGV0ZSBjb2RlCiAgICAgICAgIyBhbmQgZGVsaXZlciBpdCBpbiB0aGUgRm9vdGVySlMgYmxvY2suCiAgICAgICAgIyBUaGlzIEphdmFzY3JpcHQgUGFydCBpcyBleGVjdXRlZCBpbgogICAgICAgICMgQWdlbnRUaWNrZXRQcm9jZXNzLnR0CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0Zvb3RlckpTJywKICAgICAgICApOwoKICAgICAgICAkRm9vdGVyQ1NTQ2xhc3MgPSAnQ2VudGVyZWQnOwogICAgfQoKICAgICMgc2V0IHN1Ym1pdCBidXR0b24gZGF0YQogICAgbXkgJEJ1dHRvblRleHQgID0gJ1N1Ym1pdCc7CiAgICBteSAkQnV0dG9uVGl0bGUgPSAnU2F2ZSc7CiAgICBteSAkQnV0dG9uSUQgICAgPSAnU3VibWl0JyAuICRBY3Rpdml0eUFjdGl2aXR5RGlhbG9nLT57QWN0aXZpdHlEaWFsb2d9OwogICAgaWYgKCAkQWN0aXZpdHlEaWFsb2ctPntTdWJtaXRCdXR0b25UZXh0fSApIHsKICAgICAgICAkQnV0dG9uVGV4dCAgPSAkQWN0aXZpdHlEaWFsb2ctPntTdWJtaXRCdXR0b25UZXh0fTsKICAgICAgICAkQnV0dG9uVGl0bGUgPSAkQWN0aXZpdHlEaWFsb2ctPntTdWJtaXRCdXR0b25UZXh0fTsKICAgIH0KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdGb290ZXInLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBGb290ZXJDU1NDbGFzcyA9PiAkRm9vdGVyQ1NTQ2xhc3MsCiAgICAgICAgICAgIEJ1dHRvblRleHQgICAgID0+ICRCdXR0b25UZXh0LAogICAgICAgICAgICBCdXR0b25UaXRsZSAgICA9PiAkQnV0dG9uVGl0bGUsCiAgICAgICAgICAgIEJ1dHRvbklEICAgICAgID0+ICRCdXR0b25JRAogICAgICAgIH0sCiAgICApOwoKICAgIGlmICggJEFjdGl2aXR5RGlhbG9nLT57U3VibWl0QWR2aWNlVGV4dH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1N1Ym1pdEFkdmljZVRleHQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEFkdmljZVRleHQgPT4gJEFjdGl2aXR5RGlhbG9nLT57U3VibWl0QWR2aWNlVGV4dH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHJlbG9hZCBwYXJlbnQgd2luZG93CiAgICBpZiAoICRQYXJhbXtQYXJlbnRSZWxvYWR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1BhcmVudFJlbG9hZCcsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIEFkZCB0aGUgRm9ybUZvb3RlcgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQcm9jZXNzTWFuYWdlbWVudC9BY3Rpdml0eURpYWxvZ0Zvb3RlcicsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHt9LAogICAgKTsKCiAgICAjIGRpc3BsYXkgcmVndWxhciBmb290ZXIgb25seSBpbiBub24tYWpheCBjYXNlCiAgICBpZiAoICEkU2VsZi0+e0lzQWpheFJlcXVlc3R9ICkgewogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCBUeXBlID0+ICRTZWxmLT57SXNNYWluV2luZG93fSA/ICcnIDogJ1NtYWxsJyApOwogICAgfQoKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX1JlbmRlclBlbmRpbmdUaW1lIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRm9ybUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJE5lZWRlZCwgJ19SZW5kZXJQZW5kaW5nVGltZScgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICdBY3Rpdml0eURpYWxvZ0ZpZWxkJywgJ19SZW5kZXJQZW5kaW5nVGltZScgKSwKICAgICAgICB9OwogICAgfQoKICAgIG15ICVEYXRhID0gKAogICAgICAgIExhYmVsID0+ICgKICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdQZW5kaW5nIERhdGUnKQogICAgICAgICAgICAgICAgLiAnICgnCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnZm9yIHBlbmRpbmcqIHN0YXRlcycpIC4gJyknCiAgICAgICAgKSwKICAgICAgICBGaWVsZElEID0+ICdSZXNwb25zaWJsZUlEJywKICAgICAgICBGb3JtSUQgID0+ICRQYXJhbXtGb3JtSUR9LAogICAgKTsKCiAgICBteSAkRXJyb3IgPSAnJzsKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvcn0gKSApIHsKICAgICAgICBpZiAoICRQYXJhbXtFcnJvcn17J1BlbmRpbmd0VGltZURheSd9ICkgewogICAgICAgICAgICAkRGF0YXtQZW5kaW5ndFRpbWVEYXlFcnJvcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIkRhdGUgaW52YWxpZCEiKTsKICAgICAgICAgICAgJEVycm9yID0gJFBhcmFte0Vycm9yfXsnUGVuZGluZ3RUaW1lRGF5J307CiAgICAgICAgfQogICAgICAgIGlmICggJFBhcmFte0Vycm9yfXsnUGVuZGluZ3RUaW1lSG91cid9ICkgewogICAgICAgICAgICAkRGF0YXtQZW5kaW5ndFRpbWVIb3VyRXJyb3J9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJEYXRlIGludmFsaWQhIik7CiAgICAgICAgICAgICRFcnJvciA9ICRQYXJhbXtFcnJvcn17J1BlbmRpbmd0VGltZURheSd9OwogICAgICAgIH0KICAgIH0KCiAgICBteSAkQ2FsZW5kYXIgPSAnJzsKCiAgICAjIGdldCB0aWNrZXQgb2JqZWN0CiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICMgZ2V0IHVzZWQgY2FsZW5kYXIgaWYgd2UgaGF2ZSB0aWNrZXQgZGF0YQogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte1RpY2tldH0gKSApIHsKICAgICAgICAkQ2FsZW5kYXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDYWxlbmRhckdldCgKICAgICAgICAgICAgJXsgJFBhcmFte1RpY2tldH0gfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRRdWlja0RhdGVCdXR0b25zID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKS0+e1F1aWNrRGF0ZUJ1dHRvbnN9CiAgICAgICAgLy8gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpEZWZhdWx0UXVpY2tEYXRlQnV0dG9ucycpOwoKICAgICREYXRhe0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgIFByZWZpeCAgICAgICAgICAgICAgPT4gJ1BlbmRpbmdUaW1lJywKICAgICAgICBQZW5kaW5nVGltZVJlcXVpcmVkID0+CiAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEaXNwbGF5fSAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gPT0gMgogICAgICAgICAgICApID8gMSA6IDAsCiAgICAgICAgRm9ybWF0ICAgICAgICAgICA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgWWVhclBlcmlvZFBhc3QgICA9PiAwLAogICAgICAgIFllYXJQZXJpb2RGdXR1cmUgPT4gNSwKICAgICAgICBEaWZmVGltZSAgICAgICAgID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9CiAgICAgICAgICAgIHx8ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpGcm9udGVuZDo6UGVuZGluZ0RpZmZUaW1lJykKICAgICAgICAgICAgfHwgODY0MDAsCiAgICAgICAgQ2xhc3MgICAgICAgICAgICAgICAgPT4gJEVycm9yLAogICAgICAgIFZhbGlkYXRlICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVmFsaWRhdGVEYXRlSW5GdXR1cmUgPT4gMSwKICAgICAgICBDYWxlbmRhciAgICAgICAgICAgICA9PiAkQ2FsZW5kYXIsCiAgICAgICAgUXVpY2tEYXRlQnV0dG9ucyAgICAgPT4gJFF1aWNrRGF0ZUJ1dHRvbnMsCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0xheW91dEJsb2NrfSB8fCAncnc6UGVuZGluZ1RpbWUnLAogICAgICAgIERhdGEgPT4gXCVEYXRhLAogICAgKTsKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtMYXlvdXRCbG9ja30gfHwgJ3J3OlBlbmRpbmdUaW1lOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6UGVuZGluZ1RpbWU6RGVzY3JpcHRpb25Mb25nJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgPT4gJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBIVE1MICAgID0+ICRMYXlvdXRPYmplY3QtPk91dHB1dCggVGVtcGxhdGVGaWxlID0+ICdQcm9jZXNzTWFuYWdlbWVudC9QZW5kaW5nVGltZScgKSwKICAgIH07Cn0KCnN1YiBfUmVuZGVyRHluYW1pY0ZpZWxkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZvcm1JRCBGaWVsZE5hbWUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAkTmVlZGVkLCAnX1JlbmRlckR5bmFtaWNGaWVsZCcgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICRTZWxmLT57RHluYW1pY0ZpZWxkfXsgJFBhcmFte0ZpZWxkTmFtZX0gfTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKSApIHsKCiAgICAgICAgbXkgJE1lc3NhZ2UgPSAiRHluYW1pY0ZpZWxkQ29uZmlnIG1pc3NpbmcgZm9yIGZpZWxkOiAkUGFyYW17RmllbGROYW1lfSwgb3IgaXMgbm90IGEgVGlja2V0IER5bmFtaWMgRmllbGQhIjsKCiAgICAgICAgIyBsb2cgZXJyb3IgYnV0IGRvZXMgbm90IHN0b3AgdGhlIGV4ZWN1dGlvbiBhcyBpdCBjb3VsZCBiZSBhbiBvbGQgQXJ0aWNsZQogICAgICAgICMgRHluYW1pY0ZpZWxkLCBzZWUgYnVnIzExNjY2CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICRNZXNzYWdlLAogICAgICAgICk7CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICAgICAgSFRNTCAgICA9PiAnJywKICAgICAgICB9OwogICAgfQoKICAgIG15ICRTZXJ2ZXJFcnJvcjsKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvcn0gKSApIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgIGRlZmluZWQgJFBhcmFte0Vycm9yfXsgJFBhcmFte0ZpZWxkTmFtZX0gfQogICAgICAgICAgICAmJiAkUGFyYW17RXJyb3J9eyAkUGFyYW17RmllbGROYW1lfSB9IG5lICcnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRTZXJ2ZXJFcnJvciA9IDE7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRFcnJvck1lc3NhZ2UgPSAnJzsKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvck1lc3NhZ2VzfSApICkgewogICAgICAgIGlmICgKICAgICAgICAgICAgZGVmaW5lZCAkUGFyYW17RXJyb3JNZXNzYWdlc317ICRQYXJhbXtGaWVsZE5hbWV9IH0KICAgICAgICAgICAgJiYgJFBhcmFte0Vycm9yTWVzc2FnZXN9eyAkUGFyYW17RmllbGROYW1lfSB9IG5lICcnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgPSAkUGFyYW17RXJyb3JNZXNzYWdlc317ICRQYXJhbXtGaWVsZE5hbWV9IH07CiAgICAgICAgfQogICAgfQoKICAgIG15ICREeW5hbWljRmllbGRIVE1MID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFJlbmRlcigKICAgICAgICBEeW5hbWljRmllbGRDb25maWcgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgIFBvc3NpYmxlVmFsdWVzRmlsdGVyID0+ICRQYXJhbXtQb3NzaWJsZVZhbHVlc30sCiAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAgPT4gJFBhcmFte1ZhbHVlfSwKICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICAgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKSwKICAgICAgICBBSkFYVXBkYXRlICAgICAgICAgICA9PiAxLAogICAgICAgIE1hbmRhdG9yeSAgICAgICAgICAgID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEaXNwbGF5fSA9PSAyLAogICAgICAgIEFDTEhpZGRlbiAgICAgICAgICAgID0+ICggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0Rpc3BsYXl9ID09IDIgJiYgISRQYXJhbXtWaXNpYmlsaXR5fSApLAogICAgICAgIFNlcnZlckVycm9yICAgICAgICAgID0+ICRTZXJ2ZXJFcnJvciwKICAgICAgICBFcnJvck1lc3NhZ2UgICAgICAgICA9PiAkRXJyb3JNZXNzYWdlLAogICAgICAgIE9iamVjdCAgICAgICAgICAgICAgID0+ICRQYXJhbXtPYmplY3R9LAogICAgICAgIFZpc2liaWxpdHkgICAgICAgICAgID0+ICRQYXJhbXtWaXNpYmlsaXRpZXN9LAogICAgKTsKCiAgICBteSAkRmllbGRDbGFzc2VzID0gJ0ZpZWxkJyAuICggJER5bmFtaWNGaWVsZENvbmZpZy0+e0ZpZWxkVHlwZX0gZXEgJ1JpY2hUZXh0JyA/ICcgUmljaFRleHRGaWVsZCcgOiAnJyApOwoKICAgIG15ICVEYXRhID0gKAogICAgICAgIE5hbWUgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgTGFiZWwgICAgICAgID0+ICREeW5hbWljRmllbGRIVE1MLT57TGFiZWx9LAogICAgICAgIEhpZGRlbkNsYXNzICA9PiAhJFBhcmFte1Zpc2liaWxpdHl9ID8gJyBvb29BQ0xIaWRkZW4nIDogJycsCiAgICAgICAgRmllbGRDbGFzc2VzID0+ICRGaWVsZENsYXNzZXMsCiAgICApOwoKICAgICMgaGFuZGxlIG11bHRpdmFsdWUgZmllbGQKICAgIGlmICggJER5bmFtaWNGaWVsZEhUTUwtPntNdWx0aVZhbHVlfSApIHsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jvd19EeW5hbWljRmllbGQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRlbXBsYXRlQ29sdW1ucyA9PiAnMWZyJywKICAgICAgICAgICAgICAgIFJvd0NsYXNzZXMgICAgICA9PiAnIE11bHRpVmFsdWUnLAogICAgICAgICAgICAgICAgSGlkZGVuQ2xhc3MgICAgID0+ICEkUGFyYW17VmlzaWJpbGl0eX0gPyAnIG9vb0FDTEhpZGRlbicgOiAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBvbmUgYmxvY2sgZm9yIGVhY2ggbXVsdGl2YWx1ZSBpdGVtCiAgICAgICAgZm9yIG15ICRNdWx0aVZhbHVlSW5kZXggKCAwIC4uICQjeyAkRHluYW1pY0ZpZWxkSFRNTC0+e011bHRpVmFsdWV9IH0gKSB7CgogICAgICAgICAgICAkRGF0YXtDb250ZW50fSA9ICREeW5hbWljRmllbGRIVE1MLT57TXVsdGlWYWx1ZX1bJE11bHRpVmFsdWVJbmRleF07CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17TGF5b3V0QmxvY2t9IHx8ICdydzpEeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICAgICAgTXVsdGlWYWx1ZSA9PiAxLAoKICAgICAgICAgICAgICAgICAgICAjIFRPRE8gYXNrIGFib3V0IHRoaXMKICAgICAgICAgICAgICAgICAgICAjIFJvd1JlYWRPbmx5ICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZy0+e1JlYWRvbmx5fSwKICAgICAgICAgICAgICAgICAgICBDb2x1bW5DbGFzc2VzID0+ICcgTXVsdGlWYWx1ZV8nIC4gJE11bHRpVmFsdWVJbmRleCwKICAgICAgICAgICAgICAgICAgICBDb2x1bW5TdHlsZSAgID0+ICdncmlkLWNvbHVtbjogMSAvIHNwYW4gMScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyByZW5kZXIgc2hvcnQgZGVzY3JpcHRpb24gb25jZSBmb3IgZmlyc3QgZWxlbWVudAogICAgICAgICAgICBpZiAoICEkTXVsdGlWYWx1ZUluZGV4ICkgewogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAncnc6RHluYW1pY0ZpZWxkOkRlc2NyaXB0aW9uTG9uZycsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nID0+ICRQYXJhbXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVuZGVyIGxvbmcgZGVzY3JpcHRpb24gb25jZSBmb3IgbGFzdCBlbGVtZW50CiAgICAgICAgICAgIGlmICggJE11bHRpVmFsdWVJbmRleCA9PSAkI3sgJER5bmFtaWNGaWVsZEhUTUwtPntNdWx0aVZhbHVlfSB9ICkgewogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25TaG9ydH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0xheW91dEJsb2NrfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJ3J3OkR5bmFtaWNGaWVsZDpEZXNjcmlwdGlvblNob3J0JywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkTXVsdGlWYWx1ZVRlbXBsYXRlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e011bHRpVmFsdWVUZW1wbGF0ZX0sCiAgICAgICAgICAgICAgICBMYWJlbCAgICAgICA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgIENvbHVtblN0eWxlID0+ICdncmlkLWNvbHVtbjogMSAvIHNwYW4gMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZW5kZXIgc2hvcnQgZGVzY3JpcHRpb24gb25jZSBmb3IgZmlyc3QgZWxlbWVudAogICAgICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAncnc6RHluYW1pY0ZpZWxkOkRlc2NyaXB0aW9uTG9uZ1RlbXBsYXRlJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyA9PiAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgJERhdGF7Q29udGVudH0gPSAkRHluYW1pY0ZpZWxkSFRNTC0+e0ZpZWxkfTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0xheW91dEJsb2NrfSB8fCAncnc6RHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiBcJURhdGEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25TaG9ydH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17TGF5b3V0QmxvY2t9CiAgICAgICAgICAgICAgICAgICAgfHwgJ3J3OkR5bmFtaWNGaWVsZDpEZXNjcmlwdGlvblNob3J0JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAncnc6RHluYW1pY0ZpZWxkOkRlc2NyaXB0aW9uTG9uZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgPT4gJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkVGVtcGxhdGVGaWxlID0gJ1Byb2Nlc3NNYW5hZ2VtZW50LycgLiAoICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9e011bHRpVmFsdWV9ID8gJ1Jvd0R5bmFtaWNGaWVsZCcgOiAnRHluYW1pY0ZpZWxkJyApOwoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIEhUTUwgICAgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KCBUZW1wbGF0ZUZpbGUgPT4gJFRlbXBsYXRlRmlsZSApLAogICAgfTsKfQoKc3ViIF9SZW5kZXJUaXRsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZvcm1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICROZWVkZWQsICdfUmVuZGVyVGl0bGUnICksCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfSApICkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAnQWN0aXZpdHlEaWFsb2dGaWVsZCcsICdfUmVuZGVyVGl0bGUnICksCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkVGl0bGUgPSAkUGFyYW17VGlja2V0fXtUaXRsZX0gLy8gJyc7CgogICAgaWYgKCAhJFRpdGxlICYmICRTZWxmLT57TGlua0FydGljbGVEYXRhfSApIHsKICAgICAgICBteSAlVGlja2V0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57TGlua0FydGljbGVEYXRhfXtUaWNrZXRJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgICAgICRUaXRsZSA9ICRUaWNrZXR7VGl0bGV9OwogICAgfQoKICAgICRQYXJhbXtHZXRQYXJhbX17VGl0bGV9IC8vPSAkVGl0bGU7CgogICAgbXkgJURhdGEgPSAoCiAgICAgICAgTGFiZWwgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlRpdGxlIiksCiAgICAgICAgRmllbGRJRCAgICAgICAgICA9PiAnVGl0bGUnLAogICAgICAgIEZvcm1JRCAgICAgICAgICAgPT4gJFBhcmFte0Zvcm1JRH0sCiAgICAgICAgVmFsdWUgICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19e1RpdGxlfSwKICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdUaXRsZScsCiAgICAgICAgTWFuZGF0b3J5Q2xhc3MgICA9PiAnJywKICAgICAgICBWYWxpZGF0ZVJlcXVpcmVkID0+ICcnLAogICAgKTsKCiAgICAjIElmIGZpZWxkIGlzIHJlcXVpcmVkIHB1dCBpbiB0aGUgbmVjZXNzYXJ5IHZhcmlhYmxlcyBmb3IKICAgICMgVmFsaWRhdGVSZXF1aXJlZCBjbGFzcyBpbnB1dCBmaWVsZCwgTWFuZGF0b3J5IGNsYXNzIGZvciB0aGUgbGFiZWwKICAgIGlmICggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0Rpc3BsYXl9ICYmICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEaXNwbGF5fSA9PSAyICkgewogICAgICAgICREYXRhe1ZhbGlkYXRlUmVxdWlyZWR9ID0gJ1ZhbGlkYXRlX1JlcXVpcmVkJzsKICAgICAgICAkRGF0YXtNYW5kYXRvcnlDbGFzc30gICA9ICdNYW5kYXRvcnknOwogICAgfQoKICAgICMgb3V0cHV0IHNlcnZlciBlcnJvcnMKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvcn0gKSAmJiAkUGFyYW17RXJyb3J9eydUaXRsZSd9ICkgewogICAgICAgICREYXRhe1NlcnZlckVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17TGF5b3V0QmxvY2t9IHx8ICdydzpUaXRsZScsCiAgICAgICAgRGF0YSA9PiBcJURhdGEsCiAgICApOwoKICAgICMgc2V0IG1hbmRhdG9yeSBsYWJlbCBtYXJrZXIKICAgIGlmICggJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICYmICREYXRhe01hbmRhdG9yeUNsYXNzfSBuZSAnJyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGFiZWxTcGFuJywKICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtMYXlvdXRCbG9ja30gfHwgJ3J3OlRpdGxlOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17TGF5b3V0QmxvY2t9IHx8ICdydzpUaXRsZTpEZXNjcmlwdGlvbkxvbmcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyA9PiAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIEhUTUwgICAgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KCBUZW1wbGF0ZUZpbGUgPT4gJ1Byb2Nlc3NNYW5hZ2VtZW50L1RpdGxlJyApLAogICAgfTsKCn0KCnN1YiBfUmVuZGVyQXJ0aWNsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRm9ybUlEIFRpY2tldCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICROZWVkZWQsICdfUmVuZGVyQXJ0aWNsZScgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICdBY3Rpdml0eURpYWxvZ0ZpZWxkJywgJ19SZW5kZXJBcnRpY2xlJyApLAogICAgICAgIH07CiAgICB9CgogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFNlbGYtPntMaW5rQXJ0aWNsZURhdGF9ICkgKSB7CiAgICAgICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgICAgICBteSAkVGlja2V0TnVtYmVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0TnVtYmVyTG9va3VwKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e0xpbmtBcnRpY2xlRGF0YX17VGlja2V0SUR9LAogICAgICAgICk7CgogICAgICAgICMgcHJlcGFyZSBzdWJqZWN0CiAgICAgICAgJFBhcmFte0dldFBhcmFtfXtTdWJqZWN0fSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN1YmplY3RDbGVhbigKICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgIFN1YmplY3QgICAgICA9PiAkU2VsZi0+e0xpbmtBcnRpY2xlRGF0YX17U3ViamVjdH0gfHwgJycsCiAgICAgICAgKTsKCiAgICAgICAgIyBib2R5IHByZXBhcmF0aW9uIGZvciBwbGFpbiB0ZXh0IHByb2Nlc3NpbmcKICAgICAgICAkUGFyYW17R2V0UGFyYW19e0JvZHl9ID0gJExheW91dE9iamVjdC0+QXJ0aWNsZVF1b3RlKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgPT4gJFNlbGYtPntMaW5rQXJ0aWNsZURhdGF9e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgID0+ICRTZWxmLT57TGlua0FydGljbGVEYXRhfXtBcnRpY2xlSUR9LAogICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICBVcGxvYWRDYWNoZU9iamVjdCAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGUnKSwKICAgICAgICAgICAgQXR0YWNobWVudHNJbmNsdWRlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJVNhZmV0eUNoZWNrUmVzdWx0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5TYWZldHkoCiAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17R2V0UGFyYW19e0JvZHl9LAoKICAgICAgICAgICAgIyBTdHJpcCBvdXQgZXh0ZXJuYWwgY29udGVudCBpZiBCbG9ja0xvYWRpbmdSZW1vdGVDb250ZW50IGlzIGVuYWJsZWQuCiAgICAgICAgICAgIE5vRXh0U3JjTG9hZCA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkJsb2NrTG9hZGluZ1JlbW90ZUNvbnRlbnQnKSwKCiAgICAgICAgICAgICMgRGlzYWxsb3cgcG90ZW50aWFsbHkgdW5zYWZlIGNvbnRlbnQuCiAgICAgICAgICAgIE5vQXBwbGV0ICAgICA9PiAxLAogICAgICAgICAgICBOb09iamVjdCAgICAgPT4gMSwKICAgICAgICAgICAgTm9FbWJlZCAgICAgID0+IDEsCiAgICAgICAgICAgIE5vU1ZHICAgICAgICA9PiAxLAogICAgICAgICAgICBOb0phdmFTY3JpcHQgPT4gMSwKICAgICAgICApOwogICAgICAgICRQYXJhbXtHZXRQYXJhbX17Qm9keX0gPSAkU2FmZXR5Q2hlY2tSZXN1bHR7U3RyaW5nfTsKICAgIH0KCiAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICBteSBAQXR0YWNobWVudHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZScpLT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICk7CgogICAgIyBzaG93IGF0dGFjaG1lbnRzCiAgICBBVFRBQ0hNRU5UOgogICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudHMpIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgICRBdHRhY2htZW50LT57Q29udGVudElEfQogICAgICAgICAgICAmJiAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fQogICAgICAgICAgICAmJiAoICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9ID1+IC9pbWFnZS9pICkKICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0Rpc3Bvc2l0aW9ufSBlcSAnaW5saW5lJyApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICB9CgogICAgICAgIHB1c2ggQHsgJFBhcmFte0F0dGFjaG1lbnRMaXN0fSB9LCAkQXR0YWNobWVudDsKICAgIH0KCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdBcnRpY2xlJywKICAgICAgICBNYW5kYXRvcnlDbGFzcyAgID0+ICcnLAogICAgICAgIFZhbGlkYXRlUmVxdWlyZWQgPT4gJycsCiAgICAgICAgU3ViamVjdCAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19e1N1YmplY3R9LAogICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfXtCb2R5fSwKICAgICAgICBMYWJlbFN1YmplY3QgICAgID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtDb25maWd9e0xhYmVsU3ViamVjdH0KICAgICAgICAgICAgfHwgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJTdWJqZWN0IiksCiAgICAgICAgTGFiZWxCb2R5ID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtDb25maWd9e0xhYmVsQm9keX0KICAgICAgICAgICAgfHwgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJUZXh0IiksCiAgICAgICAgQXR0YWNobWVudExpc3QgPT4gJFBhcmFte0F0dGFjaG1lbnRMaXN0fSwKICAgICk7CgogICAgIyBJZiBmaWVsZCBpcyByZXF1aXJlZCBwdXQgaW4gdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZXMgZm9yCiAgICAjIFZhbGlkYXRlUmVxdWlyZWQgY2xhc3MgaW5wdXQgZmllbGQsIE1hbmRhdG9yeSBjbGFzcyBmb3IgdGhlIGxhYmVsCiAgICBpZiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEaXNwbGF5fSAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gPT0gMiApIHsKICAgICAgICAkRGF0YXtWYWxpZGF0ZVJlcXVpcmVkfSA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICAgICAgJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICAgPSAnTWFuZGF0b3J5JzsKICAgIH0KCiAgICAjIG91dHB1dCBzZXJ2ZXIgZXJyb3JzCiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3J9ICkgJiYgJFBhcmFte0Vycm9yfXsnQXJ0aWNsZVN1YmplY3QnfSApIHsKICAgICAgICAkRGF0YXtTdWJqZWN0U2VydmVyRXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgIH0KICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvcn0gKSAmJiAkUGFyYW17RXJyb3J9eydBcnRpY2xlQm9keSd9ICkgewogICAgICAgICREYXRhe0JvZHlTZXJ2ZXJFcnJvcn0gPSAnU2VydmVyRXJyb3InOwogICAgfQoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0xheW91dEJsb2NrfSB8fCAncnc6QXJ0aWNsZScsCiAgICAgICAgRGF0YSA9PiBcJURhdGEsCiAgICApOwoKICAgICMgc2V0IG1hbmRhdG9yeSBsYWJlbCBtYXJrZXIKICAgIGlmICggJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICYmICREYXRhe01hbmRhdG9yeUNsYXNzfSBuZSAnJyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGFiZWxTcGFuU3ViamVjdCcsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGFiZWxTcGFuQm9keScsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFkZCByaWNoIHRleHQgZWRpdG9yCiAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewoKICAgICAgICAjIHVzZSBoZWlnaHQvd2lkdGggZGVmaW5lZCBmb3IgdGhpcyBzY3JlZW4KICAgICAgICAkUGFyYW17UmljaFRleHRIZWlnaHR9ID0gJFNlbGYtPntDb25maWd9e1JpY2hUZXh0SGVpZ2h0fSB8fCAwOwogICAgICAgICRQYXJhbXtSaWNoVGV4dFdpZHRofSAgPSAkU2VsZi0+e0NvbmZpZ317UmljaFRleHRXaWR0aH0gIHx8IDA7CgogICAgICAgICMgc2V0IHVwIHJpY2ggdGV4dCBlZGl0b3IKICAgICAgICAkTGF5b3V0T2JqZWN0LT5TZXRSaWNoVGV4dFBhcmFtZXRlcnMoCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdydzpBcnRpY2xlOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6QXJ0aWNsZTpEZXNjcmlwdGlvbkxvbmcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyA9PiAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRBY3RpdmF0ZVN0YW5kYXJkVGVtcGxhdGVzID0gZGVmaW5lZCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17Q29uZmlnfXtTdGFuZGFyZFRlbXBsYXRlc30gPyAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17Q29uZmlnfXtTdGFuZGFyZFRlbXBsYXRlc30gOiAxOwogICAgaWYgKCRBY3RpdmF0ZVN0YW5kYXJkVGVtcGxhdGVzKSB7CgogICAgICAgICMgY2hlY2sgaWYgZXhpc3RzIGNyZWF0ZSB0ZW1wbGF0ZXMgcmVnYXJkbGVzcyB0aGUgcXVldWUKICAgICAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGFuZGFyZFRlbXBsYXRlJyk7CiAgICAgICAgbXkgJVN0YW5kYXJkVGVtcGxhdGVzICAgICAgPSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdC0+U3RhbmRhcmRUZW1wbGF0ZUxpc3QoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIFR5cGUgID0+ICdQcm9jZXNzRGlhbG9nJywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIHRleHQgdGVtcGxhdGUgc3RyaW5nCiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggXCVTdGFuZGFyZFRlbXBsYXRlcyApICkgewoKICAgICAgICAgICAgbXkgJFNlbGVjdGVkVmFsdWU7CgogICAgICAgICAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZUlEUGFyYW0gPSAkUGFyYW17R2V0UGFyYW19e1N0YW5kYXJkVGVtcGxhdGVJRH07CiAgICAgICAgICAgIGlmICgkU3RhbmRhcmRUZW1wbGF0ZUlEUGFyYW0pIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFN0YW5kYXJkVGVtcGxhdGVPYmplY3QtPlN0YW5kYXJkVGVtcGxhdGVMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmRUZW1wbGF0ZUlEID0+ICRTdGFuZGFyZFRlbXBsYXRlSURQYXJhbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2V0IHNlcnZlciBlcnJvcnMKICAgICAgICAgICAgbXkgJFNlcnZlckVycm9yID0gJyc7CiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvcn0gKSAmJiAkUGFyYW17RXJyb3J9LT57J1N0YW5kYXJkVGVtcGxhdGVJRCd9ICkgewogICAgICAgICAgICAgICAgJFNlcnZlckVycm9yID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFBhcmFte1N0YW5kYXJkVGVtcGxhdGVTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgICA9PiAkUGFyYW17U3RhbmRhcmRUZW1wbGF0ZXN9IHx8IHt9LAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAnU3RhbmRhcmRUZW1wbGF0ZUlEJywKICAgICAgICAgICAgICAgIFNlbGVjdGVkVmFsdWUgPT4gJFNlbGVjdGVkVmFsdWUsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgID0+ICJNb2Rlcm5pemUgJFNlcnZlckVycm9yIiwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSAgPT4gMSwKICAgICAgICAgICAgICAgIFNvcnQgICAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICAgPT4gMSwKICAgICAgICAgICAgICAgIE1heCAgICAgICAgICAgPT4gMjAwLAogICAgICAgICAgICApOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YW5kYXJkVGVtcGxhdGUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkUGFyYW17SW5mb3JtQWdlbnRzfSApIHsKCiAgICAgICAgbXkgJVNob3duVXNlcnM7CiAgICAgICAgbXkgJUFsbEdyb3Vwc01lbWJlcnMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTGlzdCgKICAgICAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CiAgICAgICAgbXkgJEdJRCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+R2V0UXVldWVHcm91cElEKCBRdWV1ZUlEID0+ICRQYXJhbXtUaWNrZXR9e1F1ZXVlSUR9ICk7CiAgICAgICAgbXkgJU1lbWJlckxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvbkdyb3VwR2V0KAogICAgICAgICAgICBHcm91cElEID0+ICRHSUQsCiAgICAgICAgICAgIFR5cGUgICAgPT4gJ3JvJywKICAgICAgICApOwogICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCBrZXlzICVNZW1iZXJMaXN0ICkgewogICAgICAgICAgICAkU2hvd25Vc2Vyc3skVXNlcklEfSA9ICRBbGxHcm91cHNNZW1iZXJzeyRVc2VySUR9OwogICAgICAgIH0KICAgICAgICAkUGFyYW17T3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVNob3duVXNlcnMsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0luZm9ybVVzZXJJRCcsCiAgICAgICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICAgICAgU2l6ZSAgICAgICA9PiAzLAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ3J3OkFydGljbGU6SW5mb3JtQWdlbnQnLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG91dHB1dCBzZXJ2ZXIgZXJyb3JzCiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3J9ICkgJiYgJFBhcmFte0Vycm9yfXsnVGltZVVuaXRzJ30gKSB7CiAgICAgICAgJFBhcmFte1RpbWVVbml0c0ludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIHNob3cgdGltZSB1bml0cwogICAgaWYgKAogICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWNjb3VudFRpbWUnKQogICAgICAgICYmICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtDb25maWd9e1RpbWVVbml0c30KICAgICAgICApCiAgICB7CgogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScpICkgewoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUaW1lVW5pdHNMYWJlbE1hbmRhdG9yeScsCiAgICAgICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYXJhbXtUaW1lVW5pdHNSZXF1aXJlZH0gPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtDb25maWd9e1RpbWVVbml0c30gPT0gMSApIHsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGltZVVuaXRzTGFiZWwnLAogICAgICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICAgICApOwogICAgICAgICAgICAkUGFyYW17VGltZVVuaXRzUmVxdWlyZWR9ID0gJyc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUaW1lVW5pdHNMYWJlbE1hbmRhdG9yeScsCiAgICAgICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYXJhbXtUaW1lVW5pdHNSZXF1aXJlZH0gPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgIH0KCiAgICAgICAgIyBHZXQgVGltZVVuaXRzIHZhbHVlLgogICAgICAgICRQYXJhbXtUaW1lVW5pdHN9ID0gJFBhcmFte0dldFBhcmFtfXtUaW1lVW5pdHN9OwoKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtUaW1lVW5pdHN9ICYmICRTZWxmLT57QXJ0aWNsZUlEfSApIHsKICAgICAgICAgICAgJFBhcmFte1RpbWVVbml0c30gPSAkU2VsZi0+X0dldFRpbWVVbml0cygKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVGltZVVuaXRzJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgSFRNTCAgICA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoIFRlbXBsYXRlRmlsZSA9PiAnUHJvY2Vzc01hbmFnZW1lbnQvQXJ0aWNsZScgKSwKICAgIH07Cn0KCnN1YiBfR2V0VGltZVVuaXRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEFjY291bnRlZFRpbWUgPSAnJzsKCiAgICAjIEdldCBhY2NvdW50ZWQgdGltZSBpZiBBY2NvdW50VGltZSBjb25maWcgaXRlbSBpcyBlbmFibGVkLgogICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFjY291bnRUaW1lJykgJiYgZGVmaW5lZCAkUGFyYW17QXJ0aWNsZUlEfSApIHsKICAgICAgICAkQWNjb3VudGVkVGltZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QXJ0aWNsZUFjY291bnRlZFRpbWVHZXQoCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkUGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkQWNjb3VudGVkVGltZSA/ICRBY2NvdW50ZWRUaW1lIDogJyc7Cn0KCnN1YiBfUmVuZGVyQ3VzdG9tZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIGZvciBteSAkTmVlZGVkIChxdyhGb3JtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAkTmVlZGVkLCAnX1JlbmRlckN1c3RvbWVyJyApLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0gKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJ0FjdGl2aXR5RGlhbG9nRmllbGQnLCAnX1JlbmRlckN1c3RvbWVyJyApLAogICAgICAgIH07CiAgICB9CgogICAgbXkgJUN1c3RvbWVyVXNlckRhdGEgPSAoKTsKCiAgICBteSAkU3VibWl0dGVkQ3VzdG9tZXJVc2VySUQgPSAkUGFyYW17R2V0UGFyYW19e0N1c3RvbWVyVXNlcklEfTsKCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBMYWJlbEN1c3RvbWVyVXNlciA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIkN1c3RvbWVyIHVzZXIiKSwKICAgICAgICBMYWJlbEN1c3RvbWVySUQgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIkN1c3RvbWVySUQiKSwKICAgICAgICBGb3JtSUQgICAgICAgICAgICA9PiAkUGFyYW17Rm9ybUlEfSwKICAgICAgICBNYW5kYXRvcnlDbGFzcyAgICA9PiAnJywKICAgICAgICBWYWxpZGF0ZVJlcXVpcmVkICA9PiAnJywKICAgICk7CgogICAgIyBJZiBmaWVsZCBpcyByZXF1aXJlZCBwdXQgaW4gdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZXMgZm9yCiAgICAjIFZhbGlkYXRlUmVxdWlyZWQgY2xhc3MgaW5wdXQgZmllbGQsIE1hbmRhdG9yeSBjbGFzcyBmb3IgdGhlIGxhYmVsCiAgICBpZiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEaXNwbGF5fSAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gPT0gMiApIHsKICAgICAgICAkRGF0YXtWYWxpZGF0ZVJlcXVpcmVkfSA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICAgICAgJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICAgPSAnTWFuZGF0b3J5JzsKICAgIH0KCiAgICAjIG91dHB1dCBzZXJ2ZXIgZXJyb3JzCiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3J9ICkgJiYgJFBhcmFte0Vycm9yfXtDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgJERhdGF7Q3VzdG9tZXJBdXRvQ29tcGxldGVTZXJ2ZXJFcnJvcn0gPSAnU2VydmVyRXJyb3InOwogICAgfQogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0Vycm9yfSApICYmICRQYXJhbXtFcnJvcn17Q3VzdG9tZXJJRH0gKSB7CiAgICAgICAgJERhdGF7Q3VzdG9tZXJJRFNlcnZlckVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e0xpbmtUaWNrZXREYXRhfSApIHsKICAgICAgICAlQ3VzdG9tZXJVc2VyRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKS0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgVXNlciA9PiAkU2VsZi0+e0xpbmtUaWNrZXREYXRhfXtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoCiAgICAgICAgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte1RpY2tldH0gKSAmJiAkUGFyYW17VGlja2V0fXtDdXN0b21lclVzZXJJRH0gKQogICAgICAgIHx8ICRTdWJtaXR0ZWRDdXN0b21lclVzZXJJRAogICAgICAgICkKICAgIHsKICAgICAgICAlQ3VzdG9tZXJVc2VyRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKS0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgVXNlciA9PiAkU3VibWl0dGVkQ3VzdG9tZXJVc2VySUQKICAgICAgICAgICAgICAgIHx8ICRQYXJhbXtUaWNrZXR9e0N1c3RvbWVyVXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgQ3VzdG9tZXIgdXNlciBmcm9tIGFydGljbGUgaXMgcHJlc2VsZWN0ZWQgZm9yIG5ldyBzcGxpdCB0aWNrZXQuIFNlZSBidWcjMTI5NTYuCiAgICBpZiAoCiAgICAgICAgSXNIYXNoUmVmV2l0aERhdGEoICRTZWxmLT57TGlua0FydGljbGVEYXRhfSApCiAgICAgICAgJiYgJFNlbGYtPntMaW5rQXJ0aWNsZURhdGF9e0Zyb219CiAgICAgICAgJiYgJFNlbGYtPntMaW5rQXJ0aWNsZURhdGF9e1NlbmRlclR5cGV9IGVxICdjdXN0b21lcicKICAgICAgICApCiAgICB7CiAgICAgICAgbXkgJEVtYWlsQWRkcmVzc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbWFpbEFkZHJlc3MnKTsKICAgICAgICBteSAoJEFydGljbGVGcm9tQWRkcmVzcykgPSAkRW1haWxBZGRyZXNzT2JqZWN0LT5QYXJzZUFkZHJlc3NMaW5lKCBMaW5lID0+ICRTZWxmLT57TGlua0FydGljbGVEYXRhfXtGcm9tfSApOwoKICAgICAgICBteSAkQ3VzdG9tZXJVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwogICAgICAgIG15ICVMaXN0ICAgICAgICAgICAgICAgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclNlYXJjaCgKICAgICAgICAgICAgUG9zdE1hc3RlclNlYXJjaCA9PiAkRW1haWxBZGRyZXNzT2JqZWN0LT5HZXRBZGRyZXNzKCBBZGRyZXNzT2JqZWN0ID0+ICRBcnRpY2xlRnJvbUFkZHJlc3MgKSwKICAgICAgICAgICAgVmFsaWQgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15IEBDdXN0b21lclVzZXIgPSBzb3J0IGtleXMgJUxpc3Q7CiAgICAgICAgJUN1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICBVc2VyID0+ICRDdXN0b21lclVzZXJbMF0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgY3VzdG9tZXIgZmllbGQgYXMgIkZpcnN0TmFtZSBMYXN0bmFtZSIgPE1haWxBZGRyZXNzPgogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggXCVDdXN0b21lclVzZXJEYXRhICkgKSB7CiAgICAgICAgJERhdGF7Q3VzdG9tZXJVc2VySUR9ICAgICAgID0gIlwiJEN1c3RvbWVyVXNlckRhdGF7VXNlckZ1bGxuYW1lfSIgLiAiXCIgPCRDdXN0b21lclVzZXJEYXRhe1VzZXJFbWFpbH0+IjsKICAgICAgICAkRGF0YXtDdXN0b21lcklEfSAgICAgICAgICAgPSAkQ3VzdG9tZXJVc2VyRGF0YXtVc2VyQ3VzdG9tZXJJRH0gfHwgJyc7CiAgICAgICAgJERhdGF7U2VsZWN0ZWRDdXN0b21lclVzZXJ9ID0gJEN1c3RvbWVyVXNlckRhdGF7VXNlcklEfSAgICAgICAgIHx8ICcnOwogICAgfQoKICAgICMgV2hlbiB0aGVyZSBpcyBubyBDdXN0b21lciBpbiB0aGUgREIsIGl0IGNvdWxkIGJlIHVua25vd24gQ3VzdG9tZXIsIHNldCBpdCBmcm9tIHRoZSB0aWNrZXQuCiAgICAjIFNlZSBidWcjMTI3OTcgKCBodHRwczovL2J1Z3Mub3Rycy5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk3ICkuCiAgICBlbHNlIHsKICAgICAgICAkRGF0YXtDdXN0b21lclVzZXJJRH0gPSAkUGFyYW17VGlja2V0fXtDdXN0b21lclVzZXJJRH0gfHwgJyc7CiAgICAgICAgJERhdGF7Q3VzdG9tZXJJRH0gICAgID0gJFBhcmFte1RpY2tldH17Q3VzdG9tZXJJRH0gICAgIHx8ICcnOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICREYXRhe0Rlc2NyaXB0aW9uU2hvcnR9ID0gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9OwogICAgfQoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0xheW91dEJsb2NrfSB8fCAncnc6Q3VzdG9tZXInLAogICAgICAgIERhdGEgPT4gXCVEYXRhLAogICAgKTsKCiAgICAjIHNldCBtYW5kYXRvcnkgbGFiZWwgbWFya2VyCiAgICBpZiAoICREYXRhe01hbmRhdG9yeUNsYXNzfSAmJiAkRGF0YXtNYW5kYXRvcnlDbGFzc30gbmUgJycgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhYmVsU3BhbkN1c3RvbWVyVXNlcicsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEZXNjcmlwdGlvbkxvbmd9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdydzpDdXN0b21lcjpEZXNjcmlwdGlvbkxvbmcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyA9PiAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIEhUTUwgICAgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KCBUZW1wbGF0ZUZpbGUgPT4gJ1Byb2Nlc3NNYW5hZ2VtZW50L0N1c3RvbWVyJyApLAogICAgfTsKfQoKc3ViIF9SZW5kZXJSZXNwb25zaWJsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZvcm1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICROZWVkZWQsICdfUmVuZGVyUmVzcG9uc2libGUnICksCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfSApICkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAnQWN0aXZpdHlEaWFsb2dGaWVsZCcsICdfUmVuZGVyUmVzcG9uc2libGUnICksCiAgICAgICAgfTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57TGlua1RpY2tldERhdGF9ICkgewogICAgICAgICRQYXJhbXtHZXRQYXJhbX17UmVzcG9uc2libGVBbGx9ID0gMTsKICAgIH0KCiAgICBteSAkUmVzcG9uc2libGVzID0gJFNlbGYtPl9HZXRSZXNwb25zaWJsZXMoICV7ICRQYXJhbXtHZXRQYXJhbX0gfSApOwoKICAgIG15ICVEYXRhID0gKAogICAgICAgIExhYmVsICAgICAgICAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJSZXNwb25zaWJsZSIpLAogICAgICAgIEZpZWxkSUQgICAgICAgICAgPT4gJ1Jlc3BvbnNpYmxlSUQnLAogICAgICAgIEZvcm1JRCAgICAgICAgICAgPT4gJFBhcmFte0Zvcm1JRH0sCiAgICAgICAgUmVzcG9uc2libGVBbGwgICA9PiAkUGFyYW17R2V0UGFyYW19e1Jlc3BvbnNpYmxlQWxsfSwKICAgICAgICBNYW5kYXRvcnlDbGFzcyAgID0+ICcnLAogICAgICAgIFZhbGlkYXRlUmVxdWlyZWQgPT4gJycsCiAgICApOwoKICAgICMgaWYgZmllbGQgaXMgcmVxdWlyZWQgcHV0IGluIHRoZSBuZWNlc3NhcnkgdmFyaWFibGVzIGZvcgogICAgIyAgICBWYWxpZGF0ZVJlcXVpcmVkIGNsYXNzIGlucHV0IGZpZWxkLCBNYW5kYXRvcnkgY2xhc3MgZm9yIHRoZSBsYWJlbAogICAgaWYgKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gJiYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0Rpc3BsYXl9ID09IDIgKSB7CiAgICAgICAgJERhdGF7VmFsaWRhdGVSZXF1aXJlZH0gPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgICREYXRhe01hbmRhdG9yeUNsYXNzfSAgID0gJ01hbmRhdG9yeSc7CiAgICB9CgogICAgbXkgJFNlbGVjdGVkVmFsdWU7CgogICAgIyBnZXQgdXNlciBvYmplY3QKICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICBpZiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9ICkgewoKICAgICAgICBpZiAoICRQYXJhbXtGaWVsZE5hbWV9IGVxICdSZXNwb25zaWJsZScgKSB7CgogICAgICAgICAgICAjIEZldGNoIERlZmF1bHRWYWx1ZSBmcm9tIENvbmZpZwogICAgICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9IHx8ICcnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgkU2VsZWN0ZWRWYWx1ZSkgewogICAgICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICggISRTZWxlY3RlZFZhbHVlICkgewogICAgICAgICAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX0gfHwgJycsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG15ICRSZXNwb25zaWJsZUlEUGFyYW0gPSAkUGFyYW17R2V0UGFyYW19e1Jlc3BvbnNpYmxlSUR9OwogICAgaWYgKCAkUmVzcG9uc2libGVJRFBhcmFtICYmICEkU2VsZWN0ZWRWYWx1ZSApIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKCBVc2VySUQgPT4gJFJlc3BvbnNpYmxlSURQYXJhbSApOwogICAgfQoKICAgICMgaWYgdGhlcmUgaXMgbm8gdXNlciBmcm9tIEdldFBhcmFtIG9yIGRlZmF1bHQgYW5kIHRoZSBmaWVsZCBpcyBtYW5kYXRvcnkgZ2V0IGl0IGZyb20gdGhlIHRpY2tldAogICAgIyAgICAoaWYgYW55KQogICAgaWYgKAogICAgICAgICEkU2VsZWN0ZWRWYWx1ZQogICAgICAgICYmICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEaXNwbGF5fSA9PSAyCiAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtUaWNrZXR9ICkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUGFyYW17VGlja2V0fXtSZXNwb25zaWJsZX07CiAgICB9CgogICAgIyBpZiB3ZSBoYXZlIGEgdXNlciBhbHJlYWR5IGFuZCB0aGUgZmllbGQgaXMgbm90IG1hbmRhdG9yeSBhbmQgaXQgaXMgdGhlIHNhbWUgYXMgaW4gdGlja2V0LCB0aGVuCiAgICAjICAgIHNldCBpdCB0byBub25lIChhcyBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZCBhZnRlcmFsbCkKICAgIGVsc2lmICgKICAgICAgICAkU2VsZWN0ZWRWYWx1ZQogICAgICAgICYmICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEaXNwbGF5fSAhPSAyCiAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtUaWNrZXR9ICkKICAgICAgICAmJiAkU2VsZWN0ZWRWYWx1ZSBlcSAkUGFyYW17VGlja2V0fXtSZXNwb25zaWJsZX0KICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAnJzsKICAgIH0KCiAgICAjIHNldCBzZXJ2ZXIgZXJyb3JzCiAgICBteSAkU2VydmVyRXJyb3IgPSAnJzsKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvcn0gKSAmJiAkUGFyYW17RXJyb3J9eydSZXNwb25zaWJsZUlEJ30gKSB7CiAgICAgICAgJFNlcnZlckVycm9yID0gJ1NlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIGxvb2sgdXAgJFNlbGVjdGVkSUQKICAgIG15ICRTZWxlY3RlZElEOwogICAgaWYgKCRTZWxlY3RlZFZhbHVlKSB7CiAgICAgICAgJFNlbGVjdGVkSUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxlY3RlZFZhbHVlLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e0xpbmtUaWNrZXREYXRhfSApIHsKICAgICAgICAkU2VsZWN0ZWRJRCA9ICRTZWxmLT57TGlua1RpY2tldERhdGF9e1Jlc3BvbnNpYmxlSUR9OwogICAgfQoKICAgICMgYnVpbGQgUmVzcG9uc2libGUgc3RyaW5nCiAgICAkRGF0YXtDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiAkUmVzcG9uc2libGVzLAogICAgICAgIE5hbWUgICAgICAgICA9PiAnUmVzcG9uc2libGVJRCcsCiAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRTZWxlY3RlZElELAogICAgICAgIENsYXNzICAgICAgICA9PiAiTW9kZXJuaXplIEZvcm1VcGRhdGUgJFNlcnZlckVycm9yIiwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17TGF5b3V0QmxvY2t9IHx8ICdydzpSZXNwb25zaWJsZScsCiAgICAgICAgRGF0YSA9PiBcJURhdGEsCiAgICApOwoKICAgICMgc2V0IG1hbmRhdG9yeSBsYWJlbCBtYXJrZXIKICAgIGlmICggJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICYmICREYXRhe01hbmRhdG9yeUNsYXNzfSBuZSAnJyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGFiZWxTcGFuJywKICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtMYXlvdXRCbG9ja30gfHwgJ3J3OlJlc3BvbnNpYmxlOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6UmVzcG9uc2libGU6RGVzY3JpcHRpb25Mb25nJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgPT4gJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBIVE1MICAgID0+ICRMYXlvdXRPYmplY3QtPk91dHB1dCggVGVtcGxhdGVGaWxlID0+ICdQcm9jZXNzTWFuYWdlbWVudC9SZXNwb25zaWJsZScgKSwKICAgIH07Cgp9CgpzdWIgX1JlbmRlck93bmVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRm9ybUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJE5lZWRlZCwgJ19SZW5kZXJPd25lcicgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICdBY3Rpdml0eURpYWxvZ0ZpZWxkJywgJ19SZW5kZXJPd25lcicgKSwKICAgICAgICB9OwogICAgfQoKICAgIGlmICggJFNlbGYtPntMaW5rVGlja2V0RGF0YX0gKSB7CiAgICAgICAgJFBhcmFte0dldFBhcmFtfXtPd25lckFsbH0gPSAxOwogICAgfQoKICAgIG15ICRPd25lcnMgPSAkU2VsZi0+X0dldE93bmVycyggJXsgJFBhcmFte0dldFBhcmFtfSB9ICk7CgogICAgbXkgJURhdGEgPSAoCiAgICAgICAgTGFiZWwgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIk93bmVyIiksCiAgICAgICAgRmllbGRJRCAgICAgICAgICA9PiAnT3duZXJJRCcsCiAgICAgICAgRm9ybUlEICAgICAgICAgICA9PiAkUGFyYW17Rm9ybUlEfSwKICAgICAgICBPd25lckFsbCAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX17T3duZXJBbGx9LAogICAgICAgIE1hbmRhdG9yeUNsYXNzICAgPT4gJycsCiAgICAgICAgVmFsaWRhdGVSZXF1aXJlZCA9PiAnJywKICAgICk7CgogICAgIyBpZiBmaWVsZCBpcyByZXF1aXJlZCBwdXQgaW4gdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZXMgZm9yCiAgICAjICAgIFZhbGlkYXRlUmVxdWlyZWQgY2xhc3MgaW5wdXQgZmllbGQsIE1hbmRhdG9yeSBjbGFzcyBmb3IgdGhlIGxhYmVsCiAgICBpZiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEaXNwbGF5fSAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gPT0gMiApIHsKICAgICAgICAkRGF0YXtWYWxpZGF0ZVJlcXVpcmVkfSA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICAgICAgJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICAgPSAnTWFuZGF0b3J5JzsKICAgIH0KCiAgICBteSAkU2VsZWN0ZWRWYWx1ZTsKCiAgICAjIGdldCB1c2VyIG9iamVjdAogICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgIGlmICggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX0gKSB7CgogICAgICAgIGlmICggJFBhcmFte0ZpZWxkTmFtZX0gZXEgJ093bmVyJyApIHsKCiAgICAgICAgICAgIGlmICggISRTZWxlY3RlZFZhbHVlICkgewoKICAgICAgICAgICAgICAgICMgRmV0Y2ggRGVmYXVsdFZhbHVlIGZyb20gQ29uZmlnCiAgICAgICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGVmYXVsdFZhbHVlfSB8fCAnJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoJFNlbGVjdGVkVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9IHx8ICcnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBteSAkT3duZXJJRFBhcmFtID0gJFBhcmFte0dldFBhcmFtfXtPd25lcklEfTsKICAgIGlmICggJE93bmVySURQYXJhbSAmJiAhJFNlbGVjdGVkVmFsdWUgKSB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlcklEID0+ICRPd25lcklEUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGlmIHRoZXJlIGlzIG5vIHVzZXIgZnJvbSBHZXRQYXJhbSBvciBkZWZhdWx0IGFuZCB0aGUgZmllbGQgaXMgbWFuZGF0b3J5IGdldCBpdCBmcm9tIHRoZSB0aWNrZXQKICAgICMgICAgKGlmIGFueSkKICAgIGlmICgKICAgICAgICAhJFNlbGVjdGVkVmFsdWUKICAgICAgICAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gPT0gMgogICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17VGlja2V0fSApCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte1RpY2tldH17T3duZXJ9OwogICAgfQoKICAgICMgaWYgd2UgaGF2ZSBhIHVzZXIgYWxyZWFkeSBhbmQgdGhlIGZpZWxkIGlzIG5vdCBtYW5kYXRvcnkgYW5kIGl0IGlzIHRoZSBzYW1lIGFzIGluIHRpY2tldCwgdGhlbgogICAgIyAgICBzZXQgaXQgdG8gbm9uZSAoYXMgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQgYWZ0ZXJhbGwpCiAgICBlbHNpZiAoCiAgICAgICAgJFNlbGVjdGVkVmFsdWUKICAgICAgICAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gIT0gMgogICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17VGlja2V0fSApCiAgICAgICAgJiYgJFNlbGVjdGVkVmFsdWUgZXEgJFBhcmFte1RpY2tldH17T3duZXJ9CiAgICAgICAgKQogICAgewogICAgICAgICRTZWxlY3RlZFZhbHVlID0gJyc7CiAgICB9CgogICAgIyBzZXQgc2VydmVyIGVycm9ycwogICAgbXkgJFNlcnZlckVycm9yID0gJyc7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3J9ICkgJiYgJFBhcmFte0Vycm9yfXsnT3duZXJJRCd9ICkgewogICAgICAgICRTZXJ2ZXJFcnJvciA9ICdTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e0xpbmtUaWNrZXREYXRhfSApIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRTZWxmLT57TGlua1RpY2tldERhdGF9e093bmVySUR9OwogICAgfQoKICAgICMgbG9vayB1cCAkU2VsZWN0ZWRJRAogICAgbXkgJFNlbGVjdGVkSUQ7CiAgICBpZiAoJFNlbGVjdGVkVmFsdWUpIHsKICAgICAgICAkU2VsZWN0ZWRJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGVjdGVkVmFsdWUsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIE93bmVyIHN0cmluZwogICAgJERhdGF7Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gJE93bmVycywKICAgICAgICBOYW1lICAgICAgICAgPT4gJ093bmVySUQnLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkU2VsZWN0ZWRJRCB8fCAnJywKICAgICAgICBDbGFzcyAgICAgICAgPT4gIk1vZGVybml6ZSBGb3JtVXBkYXRlICRTZXJ2ZXJFcnJvciIsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0xheW91dEJsb2NrfSB8fCAncnc6T3duZXInLAogICAgICAgIERhdGEgPT4gXCVEYXRhLAogICAgKTsKCiAgICAjIHNldCBtYW5kYXRvcnkgbGFiZWwgbWFya2VyCiAgICBpZiAoICREYXRhe01hbmRhdG9yeUNsYXNzfSAmJiAkRGF0YXtNYW5kYXRvcnlDbGFzc30gbmUgJycgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhYmVsU3BhbicsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17TGF5b3V0QmxvY2t9IHx8ICdydzpPd25lcjpEZXNjcmlwdGlvblNob3J0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ3J3Ok93bmVyOkRlc2NyaXB0aW9uTG9uZycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nID0+ICRQYXJhbXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgSFRNTCAgICA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoIFRlbXBsYXRlRmlsZSA9PiAnUHJvY2Vzc01hbmFnZW1lbnQvT3duZXInICksCiAgICB9Owp9CgpzdWIgX1JlbmRlclNMQSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZvcm1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICROZWVkZWQsICdfUmVuZGVyU0xBJyApLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0gKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJ0FjdGl2aXR5RGlhbG9nRmllbGQnLCAnX1JlbmRlclNMQScgKSwKICAgICAgICB9OwogICAgfQoKICAgIGlmICggJFNlbGYtPntMaW5rVGlja2V0RGF0YX0gKSB7CiAgICAgICAgJFBhcmFte0dldFBhcmFtfXtRdWV1ZUlEfSAgICAgICAgPSAkU2VsZi0+e0xpbmtUaWNrZXREYXRhfXtRdWV1ZUlEfTsKICAgICAgICAkUGFyYW17R2V0UGFyYW19e1RpY2tldElEfSAgICAgICA9ICRTZWxmLT57TGlua1RpY2tldERhdGF9e1RpY2tldElEfTsKICAgICAgICAkUGFyYW17R2V0UGFyYW19e0N1c3RvbWVyVXNlcklEfSA9ICRTZWxmLT57TGlua1RpY2tldERhdGF9e0N1c3RvbWVyVXNlcklEfTsKICAgIH0KCiAgICAjIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgdGhlIEdldFBhcmFtCiAgICBteSAlR2V0U2VydmljZXNQYXJhbSA9ICV7ICRQYXJhbXtHZXRQYXJhbX0gfTsKCiAgICAjIHVzZSB0aWNrZXQgaW5mb3JtYXRpb24gYXMgYSBmYWxsIGJhY2sgaWYgY3VzdG9tZXIgd2FzIGFscmVhZHkgc2V0LCBvdGhlcndpc2Ugd2hlbiB0aGUKICAgICMgYWN0aXZpdHkgZGlhbG9nIGRpc3BsYXlzIHRoZSBzZXJ2aWNlIGxpc3Qgd2lsbCBiZSBpbml0aWFsbHkgZW1wdHksIHNlZSBidWcjMTAwNTkKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtUaWNrZXR9ICkgKSB7CiAgICAgICAgJEdldFNlcnZpY2VzUGFyYW17Q3VzdG9tZXJVc2VySUR9IHx8PSAkUGFyYW17VGlja2V0fXtDdXN0b21lclVzZXJJRH0gfHw9ICcnOwogICAgfQoKICAgIG15ICRTZXJ2aWNlcyA9ICRTZWxmLT5fR2V0U2VydmljZXMoCiAgICAgICAgJUdldFNlcnZpY2VzUGFyYW0sCiAgICApOwoKICAgIGlmICggJFNlbGYtPntMaW5rVGlja2V0RGF0YX0gKSB7CiAgICAgICAgJFBhcmFte0dldFBhcmFtfXtTZXJ2aWNlc30gID0gJFNlcnZpY2VzOwogICAgICAgICRQYXJhbXtHZXRQYXJhbX17U2VydmljZUlEfSA9ICRTZWxmLT57TGlua1RpY2tldERhdGF9e1NlcnZpY2VJRH07CiAgICB9CgogICAgbXkgJFNMQXMgPSAkU2VsZi0+X0dldFNMQXMoCiAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgICAgIFNlcnZpY2VzID0+ICRTZXJ2aWNlcywKICAgICk7CgogICAgbXkgJURhdGEgPSAoCiAgICAgICAgTGFiZWwgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlNMQSIpLAogICAgICAgIEZpZWxkSUQgICAgICAgICAgPT4gJ1NMQUlEJywKICAgICAgICBGb3JtSUQgICAgICAgICAgID0+ICRQYXJhbXtGb3JtSUR9LAogICAgICAgIE1hbmRhdG9yeUNsYXNzICAgPT4gJycsCiAgICAgICAgVmFsaWRhdGVSZXF1aXJlZCA9PiAnJywKICAgICk7CgogICAgIyBJZiBmaWVsZCBpcyByZXF1aXJlZCBwdXQgaW4gdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZXMgZm9yCiAgICAjIFZhbGlkYXRlUmVxdWlyZWQgY2xhc3MgaW5wdXQgZmllbGQsIE1hbmRhdG9yeSBjbGFzcyBmb3IgdGhlIGxhYmVsCiAgICBpZiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEaXNwbGF5fSAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gPT0gMiApIHsKICAgICAgICAkRGF0YXtWYWxpZGF0ZVJlcXVpcmVkfSA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICAgICAgJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICAgPSAnTWFuZGF0b3J5JzsKICAgIH0KCiAgICBteSAkU2VsZWN0ZWRWYWx1ZTsKCiAgICAjIGdldCBTTEEgb2JqZWN0CiAgICBteSAkU0xBT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwoKICAgIG15ICRTTEFJRFBhcmFtID0gJFBhcmFte0dldFBhcmFtfXtTTEFJRH07CiAgICBpZiAoJFNMQUlEUGFyYW0pIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCggU0xBSUQgPT4gJFNMQUlEUGFyYW0gKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtGaWVsZE5hbWV9IGVxICdTTEEnICkgewoKICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKCiAgICAgICAgICAgICMgRmV0Y2ggRGVmYXVsdFZhbHVlIGZyb20gQ29uZmlnCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIGRlZmluZWQgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX0KICAgICAgICAgICAgICAgICYmICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9IG5lICcnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFNMQU9iamVjdC0+U0xBTG9va3VwKAogICAgICAgICAgICAgICAgICAgIFNMQSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGVmYXVsdFZhbHVlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkU2VsZWN0ZWRWYWx1ZSkgewogICAgICAgICAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGVmYXVsdFZhbHVlfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICggISRTZWxlY3RlZFZhbHVlICkgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBkZWZpbmVkICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9CiAgICAgICAgICAgICAgICAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGVmYXVsdFZhbHVlfSBuZSAnJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgR2V0IFRpY2tldFZhbHVlCiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17VGlja2V0fSApICYmICEkU2VsZWN0ZWRWYWx1ZSApIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRQYXJhbXtUaWNrZXR9e1NMQX07CiAgICB9CgogICAgIyBzZXQgc2VydmVyIGVycm9ycwogICAgbXkgJFNlcnZlckVycm9yID0gJyc7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3J9ICkgJiYgJFBhcmFte0Vycm9yfXsnU0xBSUQnfSApIHsKICAgICAgICAkU2VydmVyRXJyb3IgPSAnU2VydmVyRXJyb3InOwogICAgfQoKICAgIGlmICggJFNlbGYtPntMaW5rVGlja2V0RGF0YX0gKSB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkU2VsZi0+e0xpbmtUaWNrZXREYXRhfXtTTEF9OwogICAgfQoKICAgICMgYnVpbGQgU0xBIHN0cmluZwogICAgJERhdGF7Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgID0+ICRTTEFzLAogICAgICAgIE5hbWUgICAgICAgICAgPT4gJ1NMQUlEJywKICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICRTZWxlY3RlZFZhbHVlLAogICAgICAgIFBvc3NpYmxlTm9uZSAgPT4gMSwKICAgICAgICBTb3J0ICAgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgVHJhbnNsYXRpb24gICA9PiAxLAogICAgICAgIENsYXNzICAgICAgICAgPT4gIk1vZGVybml6ZSBGb3JtVXBkYXRlICRTZXJ2ZXJFcnJvciIsCiAgICAgICAgTWF4ICAgICAgICAgICA9PiAyMDAsCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0xheW91dEJsb2NrfSB8fCAncnc6U0xBJywKICAgICAgICBEYXRhID0+IFwlRGF0YSwKICAgICk7CgogICAgIyBzZXQgbWFuZGF0b3J5IGxhYmVsIG1hcmtlcgogICAgaWYgKCAkRGF0YXtNYW5kYXRvcnlDbGFzc30gJiYgJERhdGF7TWFuZGF0b3J5Q2xhc3N9IG5lICcnICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMYWJlbFNwYW4nLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25TaG9ydH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0xheW91dEJsb2NrfSB8fCAncnc6U0xBOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6U0xBOkRlc2NyaXB0aW9uTG9uZycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nID0+ICRQYXJhbXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgSFRNTCAgICA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoIFRlbXBsYXRlRmlsZSA9PiAnUHJvY2Vzc01hbmFnZW1lbnQvU0xBJyApLAogICAgfTsKfQoKc3ViIF9SZW5kZXJTZXJ2aWNlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRm9ybUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJE5lZWRlZCwgJ19SZW5kZXJTZXJ2aWNlJyApLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0gKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJ0FjdGl2aXR5RGlhbG9nRmllbGQnLCAnX1JlbmRlclNlcnZpY2UnICksCiAgICAgICAgfTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57TGlua1RpY2tldERhdGF9ICkgewogICAgICAgICRQYXJhbXtHZXRQYXJhbX17UXVldWVJRH0gICAgICAgID0gJFNlbGYtPntMaW5rVGlja2V0RGF0YX17UXVldWVJRH07CiAgICAgICAgJFBhcmFte0dldFBhcmFtfXtUaWNrZXRJRH0gICAgICAgPSAkU2VsZi0+e0xpbmtUaWNrZXREYXRhfXtUaWNrZXRJRH07CiAgICAgICAgJFBhcmFte0dldFBhcmFtfXtDdXN0b21lclVzZXJJRH0gPSAkU2VsZi0+e0xpbmtUaWNrZXREYXRhfXtDdXN0b21lclVzZXJJRH07CiAgICB9CgogICAgIyBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIHRoZSBHZXRQYXJhbQogICAgbXkgJUdldFNlcnZpY2VzUGFyYW0gPSAleyAkUGFyYW17R2V0UGFyYW19IH07CgogICAgIyB1c2UgdGlja2V0IGluZm9ybWF0aW9uIGFzIGEgZmFsbCBiYWNrIGlmIGN1c3RvbWVyIHdhcyBhbHJlYWR5IHNldCwgb3RoZXJ3aXNlIHdoZW4gdGhlCiAgICAjIGFjdGl2aXR5IGRpYWxvZyBkaXNwbGF5cyB0aGUgc2VydmljZSBsaXN0IHdpbGwgYmUgaW5pdGlhbGx5IGVtcHR5LCBzZWUgYnVnIzEwMDU5CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17VGlja2V0fSApICkgewogICAgICAgICRHZXRTZXJ2aWNlc1BhcmFte0N1c3RvbWVyVXNlcklEfSB8fD0gJFBhcmFte1RpY2tldH17Q3VzdG9tZXJVc2VySUR9IHx8PSAnJzsKICAgIH0KCiAgICBteSAkU2VydmljZXMgPSAkU2VsZi0+X0dldFNlcnZpY2VzKAogICAgICAgICVHZXRTZXJ2aWNlc1BhcmFtLAogICAgKTsKCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBMYWJlbCAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgiU2VydmljZSIpLAogICAgICAgIEZpZWxkSUQgICAgICAgICAgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgRm9ybUlEICAgICAgICAgICA9PiAkUGFyYW17Rm9ybUlEfSwKICAgICAgICBNYW5kYXRvcnlDbGFzcyAgID0+ICcnLAogICAgICAgIFZhbGlkYXRlUmVxdWlyZWQgPT4gJycsCiAgICApOwoKICAgICMgSWYgZmllbGQgaXMgcmVxdWlyZWQgcHV0IGluIHRoZSBuZWNlc3NhcnkgdmFyaWFibGVzIGZvcgogICAgIyBWYWxpZGF0ZVJlcXVpcmVkIGNsYXNzIGlucHV0IGZpZWxkLCBNYW5kYXRvcnkgY2xhc3MgZm9yIHRoZSBsYWJlbAogICAgaWYgKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gJiYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0Rpc3BsYXl9ID09IDIgKSB7CiAgICAgICAgJERhdGF7VmFsaWRhdGVSZXF1aXJlZH0gPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgICREYXRhe01hbmRhdG9yeUNsYXNzfSAgID0gJ01hbmRhdG9yeSc7CiAgICB9CgogICAgbXkgJFNlbGVjdGVkVmFsdWU7CgogICAgIyBnZXQgc2VydmljZSBvYmplY3QKICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCiAgICBteSAkU2VydmljZUlEUGFyYW0gPSAkUGFyYW17R2V0UGFyYW19e1NlcnZpY2VJRH07CiAgICBpZiAoJFNlcnZpY2VJRFBhcmFtKSB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSURQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0ZpZWxkTmFtZX0gZXEgJ1NlcnZpY2UnICkgewoKICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKCiAgICAgICAgICAgICMgRmV0Y2ggRGVmYXVsdFZhbHVlIGZyb20gQ29uZmlnCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIGRlZmluZWQgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX0KICAgICAgICAgICAgICAgICYmICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9IG5lICcnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGVmYXVsdFZhbHVlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRTZWxlY3RlZFZhbHVlKSB7CiAgICAgICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgaWYgKCAhJFNlbGVjdGVkVmFsdWUgKSB7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIGRlZmluZWQgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX0KICAgICAgICAgICAgICAgICYmICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9IG5lICcnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGVmYXVsdFZhbHVlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgVGlja2V0VmFsdWUKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtUaWNrZXR9ICkgJiYgISRTZWxlY3RlZFZhbHVlICkgewogICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte1RpY2tldH17U2VydmljZX07CiAgICB9CgogICAgIyBzZXQgc2VydmVyIGVycm9ycwogICAgbXkgJFNlcnZlckVycm9yID0gJyc7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3J9ICkgJiYgJFBhcmFte0Vycm9yfXsnU2VydmljZUlEJ30gKSB7CiAgICAgICAgJFNlcnZlckVycm9yID0gJ1NlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIGdldCBsaXN0IHR5cGUKICAgIG15ICRUcmVlVmlldyA9IDA7CiAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKSBlcSAndHJlZScgKSB7CiAgICAgICAgJFRyZWVWaWV3ID0gMTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57TGlua1RpY2tldERhdGF9ICkgewogICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFNlbGYtPntMaW5rVGlja2V0RGF0YX17U2VydmljZX07CiAgICB9CgogICAgIyBidWlsZCBTZXJ2aWNlIHN0cmluZwogICAgJERhdGF7Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgID0+ICRTZXJ2aWNlcywKICAgICAgICBOYW1lICAgICAgICAgID0+ICdTZXJ2aWNlSUQnLAogICAgICAgIENsYXNzICAgICAgICAgPT4gIk1vZGVybml6ZSBGb3JtVXBkYXRlICRTZXJ2ZXJFcnJvciIsCiAgICAgICAgU2VsZWN0ZWRWYWx1ZSA9PiAkU2VsZWN0ZWRWYWx1ZSwKICAgICAgICBQb3NzaWJsZU5vbmUgID0+IDEsCiAgICAgICAgVHJlZVZpZXcgICAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgU29ydCAgICAgICAgICA9PiAnVHJlZVZpZXcnLAogICAgICAgIFRyYW5zbGF0aW9uICAgPT4gJFRyZWVWaWV3LAogICAgICAgIE1heCAgICAgICAgICAgPT4gMjAwLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtMYXlvdXRCbG9ja30gfHwgJ3J3OlNlcnZpY2UnLAogICAgICAgIERhdGEgPT4gXCVEYXRhLAogICAgKTsKCiAgICAjIHNldCBtYW5kYXRvcnkgbGFiZWwgbWFya2VyCiAgICBpZiAoICREYXRhe01hbmRhdG9yeUNsYXNzfSAmJiAkRGF0YXtNYW5kYXRvcnlDbGFzc30gbmUgJycgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhYmVsU3BhbicsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17TGF5b3V0QmxvY2t9IHx8ICdydzpTZXJ2aWNlOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6U2VydmljZTpEZXNjcmlwdGlvbkxvbmcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyA9PiAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIEhUTUwgICAgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KCBUZW1wbGF0ZUZpbGUgPT4gJ1Byb2Nlc3NNYW5hZ2VtZW50L1NlcnZpY2UnICksCiAgICB9OwoKfQoKc3ViIF9SZW5kZXJMb2NrIHsKCiAgICAjIGZvciBsb2NrIHN0YXRlcyB0aGVyZSdzIG5vIEFDTCBjaGVja2luZyB5ZXQgaW1wbGVtZW50ZWQgc28gbm8gY2hlY2tpbmcuLi4KCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZvcm1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICROZWVkZWQsICdfUmVuZGVyTG9jaycgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICdBY3Rpdml0eURpYWxvZ0ZpZWxkJywgJ19SZW5kZXJMb2NrJyApLAogICAgICAgIH07CiAgICB9CgogICAgbXkgJExvY2tzID0gJFNlbGYtPl9HZXRMb2NrcygKICAgICAgICAleyAkUGFyYW17R2V0UGFyYW19IH0sCiAgICApOwoKICAgIG15ICVEYXRhID0gKAogICAgICAgIExhYmVsICAgICAgICAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJMb2NrIHN0YXRlIiksCiAgICAgICAgRmllbGRJRCAgICAgICAgICA9PiAnTG9ja0lEJywKICAgICAgICBGb3JtSUQgICAgICAgICAgID0+ICRQYXJhbXtGb3JtSUR9LAogICAgICAgIE1hbmRhdG9yeUNsYXNzICAgPT4gJycsCiAgICAgICAgVmFsaWRhdGVSZXF1aXJlZCA9PiAnJywKICAgICk7CgogICAgIyBJZiBmaWVsZCBpcyByZXF1aXJlZCBwdXQgaW4gdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZXMgZm9yCiAgICAjIFZhbGlkYXRlUmVxdWlyZWQgY2xhc3MgaW5wdXQgZmllbGQsIE1hbmRhdG9yeSBjbGFzcyBmb3IgdGhlIGxhYmVsCiAgICBpZiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEaXNwbGF5fSAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gPT0gMiApIHsKICAgICAgICAkRGF0YXtWYWxpZGF0ZVJlcXVpcmVkfSA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICAgICAgJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICAgPSAnTWFuZGF0b3J5JzsKICAgIH0KCiAgICBteSAkU2VsZWN0ZWRWYWx1ZTsKCiAgICAjIGdldCBsb2NrIG9iamVjdAogICAgbXkgJExvY2tPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9jaycpOwoKICAgIG15ICRMb2NrSURQYXJhbSA9ICRQYXJhbXtHZXRQYXJhbX17TG9ja0lEfTsKICAgICRTZWxlY3RlZFZhbHVlID0gJExvY2tPYmplY3QtPkxvY2tMb29rdXAoIExvY2tJRCA9PiAkTG9ja0lEUGFyYW0gKQogICAgICAgIGlmICgkTG9ja0lEUGFyYW0pOwoKICAgIGlmICggJFBhcmFte0ZpZWxkTmFtZX0gZXEgJ0xvY2snICkgewoKICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKCiAgICAgICAgICAgICMgRmV0Y2ggRGVmYXVsdFZhbHVlIGZyb20gQ29uZmlnCiAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJExvY2tPYmplY3QtPkxvY2tMb29rdXAoCiAgICAgICAgICAgICAgICBMb2NrID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9IHx8ICcnLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoJFNlbGVjdGVkVmFsdWUpIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRMb2NrT2JqZWN0LT5Mb2NrTG9va3VwKAogICAgICAgICAgICBMb2NrSUQgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX0gfHwgJycKICAgICAgICAgICAgKQogICAgICAgICAgICBpZiAhJFNlbGVjdGVkVmFsdWU7CiAgICB9CgogICAgIyBHZXQgVGlja2V0VmFsdWUKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtUaWNrZXR9ICkgJiYgISRTZWxlY3RlZFZhbHVlICkgewogICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte1RpY2tldH17TG9ja307CiAgICB9CgogICAgIyBzZXQgc2VydmVyIGVycm9ycwogICAgbXkgJFNlcnZlckVycm9yID0gJyc7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3J9ICkgJiYgJFBhcmFte0Vycm9yfXsnTG9ja0lEJ30gKSB7CiAgICAgICAgJFNlcnZlckVycm9yID0gJ1NlcnZlckVycm9yJzsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57TGlua1RpY2tldERhdGF9ICkgewogICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFNlbGYtPntMaW5rVGlja2V0RGF0YX17TG9ja307CiAgICB9CgogICAgIyBidWlsZCBsb2NrIHN0cmluZwogICAgJERhdGF7Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgID0+ICRMb2NrcywKICAgICAgICBOYW1lICAgICAgICAgID0+ICdMb2NrSUQnLAogICAgICAgIFRyYW5zbGF0aW9uICAgPT4gMSwKICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICRTZWxlY3RlZFZhbHVlLAogICAgICAgIENsYXNzICAgICAgICAgPT4gIk1vZGVybml6ZSBGb3JtVXBkYXRlICRTZXJ2ZXJFcnJvciIsCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0xheW91dEJsb2NrfSB8fCAncnc6TG9jaycsCiAgICAgICAgRGF0YSA9PiBcJURhdGEsCiAgICApOwoKICAgICMgc2V0IG1hbmRhdG9yeSBsYWJlbCBtYXJrZXIKICAgIGlmICggJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICYmICREYXRhe01hbmRhdG9yeUNsYXNzfSBuZSAnJyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGFiZWxTcGFuJywKICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtMYXlvdXRCbG9ja30gfHwgJ3J3OkxvY2s6RGVzY3JpcHRpb25TaG9ydCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCA9PiAkUGFyYW17RGVzY3JpcHRpb25TaG9ydH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEZXNjcmlwdGlvbkxvbmd9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdydzpMb2NrOkRlc2NyaXB0aW9uTG9uZycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nID0+ICRQYXJhbXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgSFRNTCAgICA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoIFRlbXBsYXRlRmlsZSA9PiAnUHJvY2Vzc01hbmFnZW1lbnQvTG9jaycgKSwKICAgIH07Cn0KCnN1YiBfUmVuZGVyUHJpb3JpdHkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIGZvciBteSAkTmVlZGVkIChxdyhGb3JtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAkTmVlZGVkLCAnX1JlbmRlclByaW9yaXR5JyApLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0gKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJ0FjdGl2aXR5RGlhbG9nRmllbGQnLCAnX1JlbmRlclByaW9yaXR5JyApLAogICAgICAgIH07CiAgICB9CgogICAgbXkgJFByaW9yaXRpZXMgPSAkU2VsZi0+X0dldFByaW9yaXRpZXMoCiAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgKTsKCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBMYWJlbCAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgiUHJpb3JpdHkiKSwKICAgICAgICBGaWVsZElEICAgICAgICAgID0+ICdQcmlvcml0eUlEJywKICAgICAgICBGb3JtSUQgICAgICAgICAgID0+ICRQYXJhbXtGb3JtSUR9LAogICAgICAgIE1hbmRhdG9yeUNsYXNzICAgPT4gJycsCiAgICAgICAgVmFsaWRhdGVSZXF1aXJlZCA9PiAnJywKICAgICk7CgogICAgIyBJZiBmaWVsZCBpcyByZXF1aXJlZCBwdXQgaW4gdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZXMgZm9yCiAgICAjIFZhbGlkYXRlUmVxdWlyZWQgY2xhc3MgaW5wdXQgZmllbGQsIE1hbmRhdG9yeSBjbGFzcyBmb3IgdGhlIGxhYmVsCiAgICBpZiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEaXNwbGF5fSAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gPT0gMiApIHsKICAgICAgICAkRGF0YXtWYWxpZGF0ZVJlcXVpcmVkfSA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICAgICAgJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICAgPSAnTWFuZGF0b3J5JzsKICAgIH0KCiAgICBteSAkU2VsZWN0ZWRWYWx1ZTsKCiAgICAjIGdldCBwcmlvcml0eSBvYmplY3QKICAgIG15ICRQcmlvcml0eU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpOwoKICAgIG15ICRQcmlvcml0eUlEUGFyYW0gPSAkUGFyYW17R2V0UGFyYW19e1ByaW9yaXR5SUR9OwogICAgaWYgKCRQcmlvcml0eUlEUGFyYW0pIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlMb29rdXAoCiAgICAgICAgICAgIFByaW9yaXR5SUQgPT4gJFByaW9yaXR5SURQYXJhbSwKICAgICAgICApOwogICAgfQoKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUgLSBjYWxjdWxhdGUgUHJpb3JpdHkgdmlhIENJUCBtYXRyaXgKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJENvbmZpZyAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259IikgLy8ge307CiAgICBteSAkQ0lQQ2FsY3VsYXRlID0gJENvbmZpZy0+e1ByaW9yaXR5QnlDSVB9IC8vICRDb25maWdPYmplY3QtPkdldCgnSVRTTTo6RnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Jyk7CgogICAgaWYgKCAkQ0lQQ2FsY3VsYXRlICYmICRQYXJhbXtHZXRQYXJhbX17RHluYW1pY0ZpZWxkfXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH0gKSB7CiAgICAgICAgIyBnZXQgdGhlIGNyaXRpY2FsaXR5IGVpdGhlciBmcm9tIHRoZSBtYW51YWxseSBzZXQgZHluYW1pYyBmaWVsZCwgb3IgdGhlIHNlcnZpY2UKICAgICAgICBteSAkQ3JpdGljYWxpdHkgPSAkUGFyYW17R2V0UGFyYW19e0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9OwoKICAgICAgICBpZiAoICEkQ3JpdGljYWxpdHkgJiYgJFBhcmFte0dldFBhcmFtfXtTZXJ2aWNlSUR9ICkgewogICAgICAgICAgICBteSAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte0dldFBhcmFtfXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQ3JpdGljYWxpdHkgPSAkU2VydmljZXtDcml0aWNhbGl0eX07CiAgICAgICAgfQoKICAgICAgICBpZiAoICRDcml0aWNhbGl0eSApIHsKICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlJyktPlByaW9yaXR5QWxsb2NhdGlvbkdldCgKICAgICAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICRDcml0aWNhbGl0eSwKICAgICAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX17RHluYW1pY0ZpZWxkfXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlMb29rdXAoCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgaWYgd2UgZW5mb3JjZSBDSVBBbGxvY2F0aW9uIGluIGFueSBjYXNlIGRlbGV0ZSBhbGwgb3RoZXIgcHJpb3JpdHkgb3B0aW9ucwogICAgICAgICAgICBpZiAoICRQcmlvcml0eUlEICYmICRDSVBDYWxjdWxhdGUgPT0gMiApIHsKICAgICAgICAgICAgICAgICRQcmlvcml0aWVzID0geyAkUHJpb3JpdHlJRCA9PiAkU2VsZWN0ZWRWYWx1ZSB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQojIEVPIElUU01Db3JlCgogICAgaWYgKCAkUGFyYW17RmllbGROYW1lfSBlcSAnUHJpb3JpdHknICkgewoKICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKCiAgICAgICAgICAgICMgRmV0Y2ggRGVmYXVsdFZhbHVlIGZyb20gQ29uZmlnCiAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eUxvb2t1cCgKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9IHx8ICcnLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoJFNlbGVjdGVkVmFsdWUpIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKICAgICAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUHJpb3JpdHlPYmplY3QtPlByaW9yaXR5TG9va3VwKAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGVmYXVsdFZhbHVlfSB8fCAnJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgVGlja2V0VmFsdWUKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtUaWNrZXR9ICkgJiYgISRTZWxlY3RlZFZhbHVlICkgewogICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte1RpY2tldH17UHJpb3JpdHl9OwogICAgfQoKICAgICMgc2V0IHNlcnZlciBlcnJvcnMKICAgIG15ICRTZXJ2ZXJFcnJvciA9ICcnOwogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0Vycm9yfSApICYmICRQYXJhbXtFcnJvcn17J1ByaW9yaXR5SUQnfSApIHsKICAgICAgICAkU2VydmVyRXJyb3IgPSAnU2VydmVyRXJyb3InOwogICAgfQoKICAgIGlmICggJFNlbGYtPntMaW5rVGlja2V0RGF0YX0gKSB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkU2VsZi0+e0xpbmtUaWNrZXREYXRhfXtQcmlvcml0eX07CiAgICB9CgogICAgIyBidWlsZCBuZXh0IFByaW9yaXRpZXMgc3RyaW5nCiAgICAkRGF0YXtDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgPT4gJFByaW9yaXRpZXMsCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgVHJhbnNsYXRpb24gICA9PiAxLAogICAgICAgIFNlbGVjdGVkVmFsdWUgPT4gJFNlbGVjdGVkVmFsdWUsCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAiTW9kZXJuaXplIEZvcm1VcGRhdGUgJFNlcnZlckVycm9yIiwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17TGF5b3V0QmxvY2t9IHx8ICdydzpQcmlvcml0eScsCiAgICAgICAgRGF0YSA9PiBcJURhdGEsCiAgICApOwoKICAgICMgc2V0IG1hbmRhdG9yeSBsYWJlbCBtYXJrZXIKICAgIGlmICggJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICYmICREYXRhe01hbmRhdG9yeUNsYXNzfSBuZSAnJyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGFiZWxTcGFuJywKICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtMYXlvdXRCbG9ja30gfHwgJ3J3OlByaW9yaXR5OkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6UHJpb3JpdHk6RGVzY3JpcHRpb25Mb25nJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgPT4gJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBIVE1MICAgID0+ICRMYXlvdXRPYmplY3QtPk91dHB1dCggVGVtcGxhdGVGaWxlID0+ICdQcm9jZXNzTWFuYWdlbWVudC9Qcmlvcml0eScgKSwKICAgIH07Cn0KCnN1YiBfUmVuZGVyUXVldWUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIGZvciBteSAkTmVlZGVkIChxdyhGb3JtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAkTmVlZGVkLCAnX1JlbmRlclF1ZXVlJyApLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0gKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJ0FjdGl2aXR5RGlhbG9nRmllbGQnLCAnX1JlbmRlclF1ZXVlJyApLAogICAgICAgIH07CiAgICB9CgogICAgbXkgJFF1ZXVlcyA9ICRTZWxmLT5fR2V0UXVldWVzKAogICAgICAgICV7ICRQYXJhbXtHZXRQYXJhbX0gfSwKICAgICk7CgogICAgbXkgJURhdGEgPSAoCiAgICAgICAgTGFiZWwgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlRvIHF1ZXVlIiksCiAgICAgICAgRmllbGRJRCAgICAgICAgICA9PiAnUXVldWVJRCcsCiAgICAgICAgRm9ybUlEICAgICAgICAgICA9PiAkUGFyYW17Rm9ybUlEfSwKICAgICAgICBNYW5kYXRvcnlDbGFzcyAgID0+ICcnLAogICAgICAgIFZhbGlkYXRlUmVxdWlyZWQgPT4gJycsCiAgICApOwoKICAgICMgSWYgZmllbGQgaXMgcmVxdWlyZWQgcHV0IGluIHRoZSBuZWNlc3NhcnkgdmFyaWFibGVzIGZvcgogICAgIyBWYWxpZGF0ZVJlcXVpcmVkIGNsYXNzIGlucHV0IGZpZWxkLCBNYW5kYXRvcnkgY2xhc3MgZm9yIHRoZSBsYWJlbAogICAgaWYgKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gJiYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0Rpc3BsYXl9ID09IDIgKSB7CiAgICAgICAgJERhdGF7VmFsaWRhdGVSZXF1aXJlZH0gPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgICREYXRhe01hbmRhdG9yeUNsYXNzfSAgID0gJ01hbmRhdG9yeSc7CiAgICB9CiAgICBteSAkU2VsZWN0ZWRWYWx1ZTsKCiAgICAjIGdldCBxdWV1ZSBvYmplY3QKICAgIG15ICRRdWV1ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwoKICAgICMgaWYgd2UgZ290IFF1ZXVlSUQgYXMgUGFyYW0gZnJvbSB0aGUgR1VJCiAgICBteSAkUXVldWVJRFBhcmFtID0gJFBhcmFte0dldFBhcmFtfXtRdWV1ZUlEfTsKICAgIGlmICgkUXVldWVJRFBhcmFtKSB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKAogICAgICAgICAgICBRdWV1ZUlEID0+ICRRdWV1ZUlEUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtGaWVsZE5hbWV9IGVxICdRdWV1ZScgKSB7CgogICAgICAgIGlmICggISRTZWxlY3RlZFZhbHVlICkgewoKICAgICAgICAgICAgIyBGZXRjaCBEZWZhdWx0VmFsdWUgZnJvbSBDb25maWcKICAgICAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKAogICAgICAgICAgICAgICAgUXVldWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX0gfHwgJycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkU2VsZWN0ZWRWYWx1ZSkgewogICAgICAgICAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGVmYXVsdFZhbHVlfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICggISRTZWxlY3RlZFZhbHVlICkgewogICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRRdWV1ZU9iamVjdC0+UXVldWVMb29rdXAoCiAgICAgICAgICAgICAgICBRdWV1ZUlEID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9IHx8ICcnLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIEdldCBUaWNrZXRWYWx1ZQogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte1RpY2tldH0gKSAmJiAhJFNlbGVjdGVkVmFsdWUgKSB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUGFyYW17VGlja2V0fXtRdWV1ZX07CiAgICB9CgogICAgIyBzZXQgc2VydmVyIGVycm9ycwogICAgbXkgJFNlcnZlckVycm9yID0gJyc7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3J9ICkgJiYgJFBhcmFte0Vycm9yfXsnUXVldWVJRCd9ICkgewogICAgICAgICRTZXJ2ZXJFcnJvciA9ICdTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgIyBnZXQgbGlzdCB0eXBlCiAgICBteSAkVHJlZVZpZXcgPSAwOwogICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okxpc3RUeXBlJykgZXEgJ3RyZWUnICkgewogICAgICAgICRUcmVlVmlldyA9IDE7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e0xpbmtUaWNrZXREYXRhfSApIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRTZWxmLT57TGlua1RpY2tldERhdGF9e1F1ZXVlfTsKICAgIH0KCiAgICAjIGJ1aWxkIG5leHQgcXVldWVzIHN0cmluZwogICAgJERhdGF7Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgID0+ICRRdWV1ZXMsCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnUXVldWVJRCcsCiAgICAgICAgVHJhbnNsYXRpb24gICA9PiAkVHJlZVZpZXcsCiAgICAgICAgU2VsZWN0ZWRWYWx1ZSA9PiAkU2VsZWN0ZWRWYWx1ZSwKICAgICAgICBDbGFzcyAgICAgICAgID0+ICJNb2Rlcm5pemUgRm9ybVVwZGF0ZSAkU2VydmVyRXJyb3IiLAogICAgICAgIFRyZWVWaWV3ICAgICAgPT4gJFRyZWVWaWV3LAogICAgICAgIFNvcnQgICAgICAgICAgPT4gJ1RyZWVWaWV3JywKICAgICAgICBQb3NzaWJsZU5vbmUgID0+IDEsCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0xheW91dEJsb2NrfSB8fCAncnc6UXVldWUnLAogICAgICAgIERhdGEgPT4gXCVEYXRhLAogICAgKTsKCiAgICAjIHNldCBtYW5kYXRvcnkgbGFiZWwgbWFya2VyCiAgICBpZiAoICREYXRhe01hbmRhdG9yeUNsYXNzfSAmJiAkRGF0YXtNYW5kYXRvcnlDbGFzc30gbmUgJycgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhYmVsU3BhbicsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17TGF5b3V0QmxvY2t9IHx8ICdydzpRdWV1ZTpEZXNjcmlwdGlvblNob3J0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ3J3OlF1ZXVlOkRlc2NyaXB0aW9uTG9uZycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nID0+ICRQYXJhbXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgSFRNTCAgICA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoIFRlbXBsYXRlRmlsZSA9PiAnUHJvY2Vzc01hbmFnZW1lbnQvUXVldWUnICksCiAgICB9Owp9CgpzdWIgX1JlbmRlclN0YXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRm9ybUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJE5lZWRlZCwgJ19SZW5kZXJTdGF0ZScgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICdBY3Rpdml0eURpYWxvZ0ZpZWxkJywgJ19SZW5kZXJTdGF0ZScgKSwKICAgICAgICB9OwogICAgfQoKICAgIG15ICRTdGF0ZXMgPSAkU2VsZi0+X0dldFN0YXRlcyggJXsgJFBhcmFte0dldFBhcmFtfSB9ICk7CgogICAgbXkgJURhdGEgPSAoCiAgICAgICAgTGFiZWwgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIk5leHQgdGlja2V0IHN0YXRlIiksCiAgICAgICAgRmllbGRJRCAgICAgICAgICA9PiAnU3RhdGVJRCcsCiAgICAgICAgRm9ybUlEICAgICAgICAgICA9PiAkUGFyYW17Rm9ybUlEfSwKICAgICAgICBNYW5kYXRvcnlDbGFzcyAgID0+ICcnLAogICAgICAgIFZhbGlkYXRlUmVxdWlyZWQgPT4gJycsCiAgICApOwoKICAgICMgSWYgZmllbGQgaXMgcmVxdWlyZWQgcHV0IGluIHRoZSBuZWNlc3NhcnkgdmFyaWFibGVzIGZvcgogICAgIyBWYWxpZGF0ZVJlcXVpcmVkIGNsYXNzIGlucHV0IGZpZWxkLCBNYW5kYXRvcnkgY2xhc3MgZm9yIHRoZSBsYWJlbAogICAgaWYgKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gJiYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0Rpc3BsYXl9ID09IDIgKSB7CiAgICAgICAgJERhdGF7VmFsaWRhdGVSZXF1aXJlZH0gPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgICREYXRhe01hbmRhdG9yeUNsYXNzfSAgID0gJ01hbmRhdG9yeSc7CiAgICB9CiAgICBteSAkU2VsZWN0ZWRWYWx1ZTsKCiAgICAjIGdldCBzdGF0ZSBvYmplY3QKICAgIG15ICRTdGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpOwoKICAgIG15ICRTdGF0ZUlEUGFyYW0gPSAkUGFyYW17R2V0UGFyYW19e1N0YXRlSUR9OwogICAgaWYgKCRTdGF0ZUlEUGFyYW0pIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVMb29rdXAoIFN0YXRlSUQgPT4gJFN0YXRlSURQYXJhbSApOwogICAgfQoKICAgIGlmICggJFBhcmFte0ZpZWxkTmFtZX0gZXEgJ1N0YXRlJyApIHsKCiAgICAgICAgaWYgKCAhJFNlbGVjdGVkVmFsdWUgKSB7CgogICAgICAgICAgICAjIEZldGNoIERlZmF1bHRWYWx1ZSBmcm9tIENvbmZpZwogICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVMb29rdXAoCiAgICAgICAgICAgICAgICBTdGF0ZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGVmYXVsdFZhbHVlfSB8fCAnJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCRTZWxlY3RlZFZhbHVlKSB7CiAgICAgICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgaWYgKCAhJFNlbGVjdGVkVmFsdWUgKSB7CiAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUxvb2t1cCgKICAgICAgICAgICAgICAgIFN0YXRlSUQgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX0gfHwgJycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgR2V0IFRpY2tldFZhbHVlCiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17VGlja2V0fSApICYmICEkU2VsZWN0ZWRWYWx1ZSApIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRQYXJhbXtUaWNrZXR9e1N0YXRlfTsKICAgIH0KCiAgICAjIHNldCBzZXJ2ZXIgZXJyb3JzCiAgICBteSAkU2VydmVyRXJyb3IgPSAnJzsKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvcn0gKSAmJiAkUGFyYW17RXJyb3J9eydTdGF0ZUlEJ30gKSB7CiAgICAgICAgJFNlcnZlckVycm9yID0gJ1NlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIGJ1aWxkIG5leHQgc3RhdGVzIHN0cmluZwogICAgJERhdGF7Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgID0+ICRTdGF0ZXMsCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnU3RhdGVJRCcsCiAgICAgICAgVHJhbnNsYXRpb24gICA9PiAxLAogICAgICAgIFNlbGVjdGVkVmFsdWUgPT4gJFNlbGVjdGVkVmFsdWUsCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAiTW9kZXJuaXplIEZvcm1VcGRhdGUgJFNlcnZlckVycm9yIiwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17TGF5b3V0QmxvY2t9IHx8ICdydzpTdGF0ZScsCiAgICAgICAgRGF0YSA9PiBcJURhdGEsCiAgICApOwoKICAgICMgc2V0IG1hbmRhdG9yeSBsYWJlbCBtYXJrZXIKICAgIGlmICggJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICYmICREYXRhe01hbmRhdG9yeUNsYXNzfSBuZSAnJyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGFiZWxTcGFuJywKICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtMYXlvdXRCbG9ja30gfHwgJ3J3OlN0YXRlOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6U3RhdGU6RGVzY3JpcHRpb25Mb25nJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgPT4gJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBIVE1MICAgID0+ICRMYXlvdXRPYmplY3QtPk91dHB1dCggVGVtcGxhdGVGaWxlID0+ICdQcm9jZXNzTWFuYWdlbWVudC9TdGF0ZScgKSwKICAgIH07Cn0KCnN1YiBfUmVuZGVyVHlwZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZvcm1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICROZWVkZWQsICdfUmVuZGVyVHlwZScgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICdBY3Rpdml0eURpYWxvZ0ZpZWxkJywgJ19SZW5kZXJUeXBlJyApLAogICAgICAgIH07CiAgICB9CgogICAgbXkgJFR5cGVzID0gJFNlbGYtPl9HZXRUeXBlcygKICAgICAgICAleyAkUGFyYW17R2V0UGFyYW19IH0sCiAgICApOwoKICAgIG15ICVEYXRhID0gKAogICAgICAgIExhYmVsICAgICAgICAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJUeXBlIiksCiAgICAgICAgRmllbGRJRCAgICAgICAgICA9PiAnVHlwZUlEJywKICAgICAgICBGb3JtSUQgICAgICAgICAgID0+ICRQYXJhbXtGb3JtSUR9LAogICAgICAgIE1hbmRhdG9yeUNsYXNzICAgPT4gJycsCiAgICAgICAgVmFsaWRhdGVSZXF1aXJlZCA9PiAnJywKICAgICk7CgogICAgIyBJZiBmaWVsZCBpcyByZXF1aXJlZCBwdXQgaW4gdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZXMgZm9yCiAgICAjIFZhbGlkYXRlUmVxdWlyZWQgY2xhc3MgaW5wdXQgZmllbGQsIE1hbmRhdG9yeSBjbGFzcyBmb3IgdGhlIGxhYmVsCiAgICBpZiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEaXNwbGF5fSAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGlzcGxheX0gPT0gMiApIHsKICAgICAgICAkRGF0YXtWYWxpZGF0ZVJlcXVpcmVkfSA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICAgICAgJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICAgPSAnTWFuZGF0b3J5JzsKICAgIH0KCiAgICBteSAkU2VsZWN0ZWRWYWx1ZTsKCiAgICAjIGdldCB0eXBlIG9iamVjdAogICAgbXkgJFR5cGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpOwoKICAgIG15ICRUeXBlSURQYXJhbSA9ICRQYXJhbXtHZXRQYXJhbX17VHlwZUlEfTsKICAgIGlmICgkVHlwZUlEUGFyYW0pIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRUeXBlT2JqZWN0LT5UeXBlTG9va3VwKAogICAgICAgICAgICBUeXBlSUQgPT4gJFR5cGVJRFBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RmllbGROYW1lfSBlcSAnVHlwZScgKSB7CgogICAgICAgIGlmICggISRTZWxlY3RlZFZhbHVlICkgewoKICAgICAgICAgICAgIyBGZXRjaCBEZWZhdWx0VmFsdWUgZnJvbSBDb25maWcKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGVmYXVsdFZhbHVlfQogICAgICAgICAgICAgICAgJiYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX0gbmUgJycKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkVHlwZU9iamVjdC0+VHlwZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJFNlbGVjdGVkVmFsdWUpIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17RGVmYXVsdFZhbHVlfQogICAgICAgICAgICAgICAgJiYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9e0RlZmF1bHRWYWx1ZX0gbmUgJycKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkVHlwZU9iamVjdC0+VHlwZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtEZWZhdWx0VmFsdWV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIEdldCBUaWNrZXRWYWx1ZQogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte1RpY2tldH0gKSAmJiAhJFNlbGVjdGVkVmFsdWUgKSB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUGFyYW17VGlja2V0fXtUeXBlfTsKICAgIH0KCiAgICAjIHNldCBzZXJ2ZXIgZXJyb3JzCiAgICBteSAkU2VydmVyRXJyb3IgPSAnJzsKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvcn0gKSAmJiAkUGFyYW17RXJyb3J9eydUeXBlSUQnfSApIHsKICAgICAgICAkU2VydmVyRXJyb3IgPSAnU2VydmVyRXJyb3InOwogICAgfQoKICAgIGlmICggJFNlbGYtPntMaW5rVGlja2V0RGF0YX0gKSB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkU2VsZi0+e0xpbmtUaWNrZXREYXRhfXtUeXBlfTsKICAgIH0KCiAgICAjIGJ1aWxkIFNlcnZpY2Ugc3RyaW5nCiAgICAkRGF0YXtDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgPT4gJFR5cGVzLAogICAgICAgIE5hbWUgICAgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAiTW9kZXJuaXplIEZvcm1VcGRhdGUgJFNlcnZlckVycm9yIiwKICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICRTZWxlY3RlZFZhbHVlLAogICAgICAgIFBvc3NpYmxlTm9uZSAgPT4gMSwKICAgICAgICBTb3J0ICAgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgVHJhbnNsYXRpb24gICA9PiAxLAogICAgICAgIE1heCAgICAgICAgICAgPT4gMjAwLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfXtMYXlvdXRCbG9ja30gfHwgJ3J3OlR5cGUnLAogICAgICAgIERhdGEgPT4gXCVEYXRhLAogICAgKTsKCiAgICAjIHNldCBtYW5kYXRvcnkgbGFiZWwgbWFya2VyCiAgICBpZiAoICREYXRhe01hbmRhdG9yeUNsYXNzfSAmJiAkRGF0YXtNYW5kYXRvcnlDbGFzc30gbmUgJycgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhYmVsU3BhbicsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH17TGF5b3V0QmxvY2t9IHx8ICdydzpUeXBlOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6VHlwZTpEZXNjcmlwdGlvbkxvbmcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyA9PiAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIEhUTUwgICAgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KCBUZW1wbGF0ZUZpbGUgPT4gJ1Byb2Nlc3NNYW5hZ2VtZW50L1R5cGUnICksCiAgICB9Owp9CgpzdWIgX1N0b3JlQWN0aXZpdHlEaWFsb2cgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVGlja2V0SUQgPSAkUGFyYW17R2V0UGFyYW19e1RpY2tldElEfTsKICAgIG15ICRQcm9jZXNzU3RhcnRwb2ludDsKICAgIG15ICVUaWNrZXQ7CiAgICBteSAkUHJvY2Vzc0VudGl0eUlEOwogICAgbXkgJEFjdGl2aXR5RW50aXR5SUQ7CiAgICBteSAlRXJyb3I7CiAgICBteSAlRXJyb3JNZXNzYWdlczsKCiAgICBteSAlVGlja2V0UGFyYW07CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBteSAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9ICRQYXJhbXtHZXRQYXJhbX17QWN0aXZpdHlEaWFsb2dFbnRpdHlJRH07CiAgICBpZiAoICEkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCBtaXNzaW5nIScpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgYWN0aXZpdHkgZGlhbG9nIG9iamVjdAogICAgbXkgJEFjdGl2aXR5RGlhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eURpYWxvZycpOwogICAgbXkgJEFjdGl2aXR5RGlhbG9nICAgICAgID0gJEFjdGl2aXR5RGlhbG9nT2JqZWN0LT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0+ICRBY3Rpdml0eURpYWxvZ0VudGl0eUlELAogICAgICAgIEludGVyZmFjZSAgICAgICAgICAgICAgPT4gJ0FnZW50SW50ZXJmYWNlJywKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJEFjdGl2aXR5RGlhbG9nKSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICdDb3VsZG5cJ3QgZ2V0IENvbmZpZyBmb3IgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCAiJXMiIScsCiAgICAgICAgICAgICAgICAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCwKICAgICAgICAgICAgKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IHVwbG9hZCBjYWNoZSBvYmplY3QKICAgIG15ICRVcGxvYWRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyk7CgogICAgIyBjaGVjayBlYWNoIEZpZWxkIG9mIGFuIEFjdGl2aXR5IERpYWxvZyBhbmQgZmlsbCB0aGUgZXJyb3IgaGFzaCBpZiBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZwogICAgbXkgJUNoZWNrZWRGaWVsZHM7CiAgICBESUFMT0dGSUVMRDoKICAgIGZvciBteSAkQ3VycmVudEZpZWxkICggQHsgJEFjdGl2aXR5RGlhbG9nLT57RmllbGRPcmRlcn0gfSApIHsKCiAgICAgICAgIyBoYW5kbGUgZHluYW1pYyBmaWVsZHMgc2VwYXJhdGVseQogICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJEN1cnJlbnRGaWVsZCA9fiBte15EeW5hbWljRmllbGRfKC4qKX14bXM7CgogICAgICAgIGlmICgKICAgICAgICAgICAgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gZXEgJ0N1c3RvbWVySUQnCiAgICAgICAgICAgIHx8ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IGVxICdDdXN0b21lclVzZXJJRCcKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJENoZWNrZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9eydDdXN0b21lcklEJ30gfTsKCiAgICAgICAgICAgICMgaXMgbm90IHBvc3NpYmxlIHRvIGEgaGF2ZSBhbiBpbnZpc2libGUgZmllbGQgZm9yIHRoaXMgcGFydGljdWxhciB2YWx1ZQogICAgICAgICAgICAjIG9uIGFnZW50IGludGVyZmFjZQogICAgICAgICAgICBpZiAoICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGlzcGxheX0gPT0gMCApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0NvdWxkblwndCB1c2UgQ3VzdG9tZXJJRCBhcyBhbiBpbnZpc2libGUgZmllbGQuJyksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBDdXN0b21lcklEIHNob3VsZCBub3QgYmUgbWFuZGF0b3J5IGFzIGluIG90aGVyIHNjcmVlbnMKICAgICAgICAgICAgJFRpY2tldFBhcmFte0N1c3RvbWVySUR9ID0gJFBhcmFte0dldFBhcmFtfXtDdXN0b21lcklEfSB8fCAnJzsKCiAgICAgICAgICAgICMgVW5mb3J0dW5hdGVseSBUaWNrZXRDcmVhdGUgbmVlZHMgJ0N1c3RvbWVyVXNlcicgYXMgcGFyYW0gaW5zdGVhZCBvZiAnQ3VzdG9tZXJVc2VySUQnCiAgICAgICAgICAgIG15ICRDdXN0b21lclVzZXJJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZWxlY3RlZEN1c3RvbWVyVXNlcicgKTsKCiAgICAgICAgICAgICMgZmFsbC1iYWNrLCBpZiBjdXN0b21lciBhdXRvLWNvbXBsZXRlIGRvZXMgbm90IHNob3duIGFueSByZXN1bHRzLCB0aGVuIHRyeSB0byB1c2UKICAgICAgICAgICAgIyB0aGUgY29udGVudCBvZiB0aGUgb3JpZ2luYWwgZmllbGQgYXMgY3VzdG9tZXIgdXNlciBpZAogICAgICAgICAgICBpZiAoICEkQ3VzdG9tZXJVc2VySUQgKSB7CgogICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyQXV0b0NvbXBsZXRlJyApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgZW1haWwgYWRkcmVzcwogICAgICAgICAgICAgICAgbXkgJEVtYWlsQWRkcmVzc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbWFpbEFkZHJlc3MnKTsKICAgICAgICAgICAgICAgIGZvciBteSAkRW1haWwgKCAkRW1haWxBZGRyZXNzT2JqZWN0LT5QYXJzZUFkZHJlc3NMaW5lKCBMaW5lID0+ICRDdXN0b21lclVzZXJJRCApICkgewogICAgICAgICAgICAgICAgICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+Q2hlY2tFbWFpbCggQWRkcmVzc09iamVjdCA9PiAkRW1haWwgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEVycm9yeydDdXN0b21lclVzZXJJRCd9ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISRDdXN0b21lclVzZXJJRCApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnQ3VzdG9tZXJVc2VySUQnfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkVGlja2V0UGFyYW17Q3VzdG9tZXJVc2VyfSA9ICRDdXN0b21lclVzZXJJRDsKICAgICAgICAgICAgfQogICAgICAgICAgICAkQ2hlY2tlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH17J0N1c3RvbWVySUQnfSB9ICAgICA9IDE7CiAgICAgICAgICAgICRDaGVja2VkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXsnQ3VzdG9tZXJVc2VySUQnfSB9ID0gMTsKCiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEN1cnJlbnRGaWVsZCBlcSAnUGVuZGluZ1RpbWUnICkgewoKICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBWYWx1ZXMgb3RoZXJ3aXNlIHRha2UgYW4gZW1wdHkgc3RyaW5nCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17R2V0UGFyYW19e1BlbmRpbmdUaW1lfSApCiAgICAgICAgICAgICAgICAmJiBkZWZpbmVkICRQYXJhbXtHZXRQYXJhbX17UGVuZGluZ1RpbWV9e1llYXJ9CiAgICAgICAgICAgICAgICAmJiBkZWZpbmVkICRQYXJhbXtHZXRQYXJhbX17UGVuZGluZ1RpbWV9e01vbnRofQogICAgICAgICAgICAgICAgJiYgZGVmaW5lZCAkUGFyYW17R2V0UGFyYW19e1BlbmRpbmdUaW1lfXtEYXl9CiAgICAgICAgICAgICAgICAmJiBkZWZpbmVkICRQYXJhbXtHZXRQYXJhbX17UGVuZGluZ1RpbWV9e0hvdXJ9CiAgICAgICAgICAgICAgICAmJiBkZWZpbmVkICRQYXJhbXtHZXRQYXJhbX17UGVuZGluZ1RpbWV9e01pbnV0ZX0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFRpY2tldFBhcmFteyRDdXJyZW50RmllbGR9ID0gJFBhcmFte0dldFBhcmFtfXtQZW5kaW5nVGltZX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWYgd2UgaGF2ZSBubyBQZW5kaW5nIHN0YXR1cyB3ZSBoYXZlIG5vIHRpbWUgdG8gc2V0CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFRpY2tldFBhcmFteyRDdXJyZW50RmllbGR9ID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJENoZWNrZWRGaWVsZHN7J1BlbmRpbmdUaW1lJ30gPSAxOwogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIHNraXAgaWYgd2UndmUgYWxyZWFkeSBjaGVja2VkIElEIG9yIE5hbWUKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkQ2hlY2tlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfTsKCiMgUm90aGVyIE9TUyAvIElUU01Db3JlIC0gY2FsY3VsYXRlIFByaW9yaXR5IHZpYSBDSVAgbWF0cml4CiAgICAgICAgICAgIGlmICggJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gZXEgJ1ByaW9yaXR5SUQnICkgewogICAgICAgICAgICAgICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICAgICAgICAgICAgICBteSAkQ29uZmlnICAgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKSAvLyB7fTsKICAgICAgICAgICAgICAgIG15ICRDSVBDYWxjdWxhdGUgPSAkQ29uZmlnLT57UHJpb3JpdHlCeUNJUH0gLy8gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNOjpGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQnKTsKCiAgICAgICAgICAgICAgICBpZiAoICRDSVBDYWxjdWxhdGUgJiYgJENJUENhbGN1bGF0ZSA9PSAyICYmICRQYXJhbXtHZXRQYXJhbX17RHluYW1pY0ZpZWxkfXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBjcml0aWNhbGl0eSBlaXRoZXIgZnJvbSB0aGUgbWFudWFsbHkgc2V0IGR5bmFtaWMgZmllbGQsIG9yIHRoZSBzZXJ2aWNlCiAgICAgICAgICAgICAgICAgICAgbXkgJENyaXRpY2FsaXR5ID0gJFBhcmFte0dldFBhcmFtfXtEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENyaXRpY2FsaXR5ICYmICRQYXJhbXtHZXRQYXJhbX17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJVNlcnZpY2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbXtHZXRQYXJhbX17U2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgJENyaXRpY2FsaXR5ID0gJFNlcnZpY2V7Q3JpdGljYWxpdHl9OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ3JpdGljYWxpdHkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRQcmlvcml0eUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpLT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkQ3JpdGljYWxpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBhY3QgICAgICA9PiAkUGFyYW17R2V0UGFyYW19e0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkUHJpb3JpdHlJRCBuZSAkUGFyYW17R2V0UGFyYW19e1ByaW9yaXR5SUR9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuOyB3ZSBqdXN0IGVuZm9yY2UgdGhlIHByaW8gYW5kIHdyaXRlIGFuIGVycm9yIHRvIHRoZSBsb2cgZmlsZSBoZXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJHb3QgUHJpb3JpdHlJRCAnJFBhcmFte0dldFBhcmFtfXtQcmlvcml0eUlEfScsIGJ1dCBDSVAgZW5mb3JjZXMgJyRQcmlvcml0eUlEJyAtIG92ZXJyaWRpbmcgdGhlIGZyb250ZW5kIHZhbHVlLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtHZXRQYXJhbX17UHJpb3JpdHlJRH0gPSAkUHJpb3JpdHlJRDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQojIEVPIElUU01Db3JlCgogICAgICAgICAgICBteSAkUmVzdWx0ID0gJFNlbGYtPl9DaGVja0ZpZWxkKAogICAgICAgICAgICAgICAgRmllbGQgPT4gJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0sCiAgICAgICAgICAgICAgICAleyAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9IH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkUmVzdWx0ICkgewoKICAgICAgICAgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciBBcnRpY2xlIChTdWJqZWN0ICYgQm9keSkKICAgICAgICAgICAgICAgIGlmICggJEN1cnJlbnRGaWVsZCBlcSAnQXJ0aWNsZScgKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRBcnRpY2xlUGFydCAocXcoU3ViamVjdCBCb2R5KSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkUGFyYW17R2V0UGFyYW19eyRBcnRpY2xlUGFydH0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzZXQgZXJyb3IgZm9yIGVhY2ggcGFydCAoaWYgYW55KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVycm9yeyAnQXJ0aWNsZScgLiAkQXJ0aWNsZVBhcnQgfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhbGwgb3RoZXIgZmllbGRzCiAgICAgICAgICAgICAgICBlbHNpZiAoICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGlzcGxheX0gPT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkQ3VycmVudEZpZWxkIGVxICdBcnRpY2xlJwogICAgICAgICAgICAgICAgJiYgJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtDb25maWd9e1RpbWVVbml0c30KICAgICAgICAgICAgICAgICYmICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17Q29uZmlnfXtUaW1lVW5pdHN9ID09IDIKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17R2V0UGFyYW19e1RpbWVVbml0c30gKSB7CgogICAgICAgICAgICAgICAgICAgICMgc2V0IGVycm9yIGZvciB0aGUgdGltZS11bml0cyAoaWYgYW55KQogICAgICAgICAgICAgICAgICAgICRFcnJvcnsnVGltZVVuaXRzJ30gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNpZiAoJFJlc3VsdCkgewogICAgICAgICAgICAgICAgJFRpY2tldFBhcmFteyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gJFJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgICAgICAkQ2hlY2tlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgYmFja2VuZCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICMgc2tpcCB2YWxpZGF0aW9uIG9mIGhpZGRlbiBmaWVsZHMKICAgIG15ICVWaXNpYmlsaXR5OwoKICAgICMgdHJhbnNmb3JtIGR5bmFtaWMgZmllbGQgZGF0YSBpbnRvIERGTmFtZSA9PiBERk5hbWUgcGFpcgogICAgbXkgJUR5bmFtaWNGaWVsZEFjbCA9IG1hcCB7ICRfID0+ICRfIH0ga2V5cyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqOwoKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBjYWxsIHRpY2tldCBBQ0xzIGZvciBEeW5hbWljRmllbGRzIHRvIGNoZWNrIGZpZWxkIHZpc2liaWxpdHkKICAgIG15ICRBQ0xSZXN1bHQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgJFBhcmFte0dldFBhcmFtfS0+JSosCiAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnRm9ybScsCiAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnLScsCiAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJUR5bmFtaWNGaWVsZEFjbCwKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoJEFDTFJlc3VsdCkgewogICAgICAgICVWaXNpYmlsaXR5ID0gbWFwIHsgJ0R5bmFtaWNGaWVsZF8nIC4gJF8gPT4gMCB9IGtleXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKjsKICAgICAgICBteSAlQWNsRGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKTsKICAgICAgICBmb3IgbXkgJEZpZWxkICggc29ydCBrZXlzICVBY2xEYXRhICkgewogICAgICAgICAgICAkVmlzaWJpbGl0eXsgJ0R5bmFtaWNGaWVsZF8nIC4gJEZpZWxkIH0gPSAxOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICVWaXNpYmlsaXR5ID0gbWFwIHsgJ0R5bmFtaWNGaWVsZF8nIC4gJF8gPT4gMSB9IGtleXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKjsKICAgIH0KCiAgICBteSAlRHluYW1pY0ZpZWxkVmFsaWRhdGlvblJlc3VsdDsKICAgIG15ICVEeW5hbWljRmllbGRQb3NzaWJsZVZhbHVlczsKCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZE5hbWUgKCBrZXlzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKSB7CgogICAgICAgICMgR2V0IHRoZSBDb25maWcgb2YgdGhlIGN1cnJlbnQgRHluYW1pY0ZpZWxkICh0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgZ3JlcCByZXN1bHQgYXJyYXkpCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICRTZWxmLT57RHluYW1pY0ZpZWxkfXskRHluYW1pY0ZpZWxkTmFtZX07CgogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpICkgewoKICAgICAgICAgICAgbXkgJE1lc3NhZ2UgPSAiRHluYW1pY0ZpZWxkQ29uZmlnIG1pc3NpbmcgZm9yIGZpZWxkOiAkUGFyYW17RmllbGROYW1lfSwgb3IgaXMgbm90IGEgVGlja2V0IER5bmFtaWMgRmllbGQhIjsKCiAgICAgICAgICAgICMgbG9nIGVycm9yIGJ1dCBkb2VzIG5vdCBzdG9wIHRoZSBleGVjdXRpb24gYXMgaXQgY291bGQgYmUgYW4gb2xkIEFydGljbGUKICAgICAgICAgICAgIyBEeW5hbWljRmllbGQsIHNlZSBidWcjMTE2NjYKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJE1lc3NhZ2UsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRDsKICAgICAgICB9CgogICAgICAgICMgV2lsbCBiZSBleHRlbmRlZCBsYXRlciBvbiBmb3IgQUNMIENoZWNraW5nOgogICAgICAgIG15ICRQb3NzaWJsZVZhbHVlc0ZpbHRlcjsKCiAgICAgICAgbXkgJElzQUNMUmVkdWNpYmxlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgQmVoYXZpb3IgICAgICAgICAgID0+ICdJc0FDTFJlZHVjaWJsZScsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRJc0FDTFJlZHVjaWJsZSkgewoKICAgICAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICAgICAgbXkgJFBvc3NpYmxlVmFsdWVzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlBvc3NpYmxlVmFsdWVzR2V0KAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIGlmIGZpZWxkIGhhcyBQb3NzaWJsZVZhbHVlcyBwcm9wZXJ0eSBpbiBpdHMgY29uZmlndXJhdGlvbgogICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCRQb3NzaWJsZVZhbHVlcykgKSB7CgogICAgICAgICAgICAgICAgIyBjb252ZXJ0IHBvc3NpYmxlIHZhbHVlcyBrZXkgPT4gdmFsdWUgdG8ga2V5ID0+IGtleSBmb3IgQUNMcyB1c2luZyBhIEhhc2ggc2xpY2UKICAgICAgICAgICAgICAgIG15ICVBY2xEYXRhID0gJXskUG9zc2libGVWYWx1ZXN9OwogICAgICAgICAgICAgICAgQEFjbERhdGF7IGtleXMgJUFjbERhdGEgfSA9IGtleXMgJUFjbERhdGE7CgogICAgICAgICAgICAgICAgIyBzZXQgcG9zc2libGUgdmFsdWVzIGZpbHRlciBmcm9tIEFDTHMKICAgICAgICAgICAgICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgICAgICAgICAgICAgJFBhcmFte0dldFBhcmFtfS0+JSosCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgID0+IFwlQWNsRGF0YSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoJEFDTCkgewogICAgICAgICAgICAgICAgICAgIG15ICVGaWx0ZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CgogICAgICAgICAgICAgICAgICAgICMgY29udmVydCBGaWxlciBrZXkgPT4ga2V5IGJhY2sgdG8ga2V5ID0+IHZhbHVlIHVzaW5nIG1hcAogICAgICAgICAgICAgICAgICAgICV7JFBvc3NpYmxlVmFsdWVzRmlsdGVyfSA9IG1hcCB7ICRfID0+ICRQb3NzaWJsZVZhbHVlcy0+eyRffSB9CiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgJUZpbHRlcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRQb3NzaWJsZVZhbHVlc0ZpbHRlciA9ICRQb3NzaWJsZVZhbHVlczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJER5bmFtaWNGaWVsZFBvc3NpYmxlVmFsdWVzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9ID0gJFBvc3NpYmxlVmFsdWVzRmlsdGVyOwoKICAgICAgICAjIGlmIHdlIGhhdmUgYW4gaW52aXNpYmxlIGZpZWxkLCB1c2UgY29uZmlnJ3MgZGVmYXVsdCB2YWx1ZQogICAgICAgIGlmICggJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgfSAmJiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9e0Rpc3BsYXl9ID09IDAgKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9e0RlZmF1bHRWYWx1ZX0KICAgICAgICAgICAgICAgICYmIGxlbmd0aCAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9e0RlZmF1bHRWYWx1ZX0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFRpY2tldFBhcmFteyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9ID0gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgfXtEZWZhdWx0VmFsdWV9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFRpY2tldFBhcmFteyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9ID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2tpcCBmaWVsZHMgd2hpY2ggYXJlIGhpZGRlbiBieSBBQ0xzCiAgICAgICAgZWxzaWYgKCAhJFZpc2liaWxpdHl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRDsKICAgICAgICB9CgogICAgICAgICMgb25seSB2YWxpZGF0ZSB2aXNpYmxlIGZpZWxkcwogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkTWFuZGF0b3J5ID0gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgfQogICAgICAgICAgICAgICAgPyAoICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH17RGlzcGxheX0gPT0gMiApCiAgICAgICAgICAgICAgICA6ICREeW5hbWljRmllbGRDb25maWctPntNYW5kYXRvcnl9OwoKICAgICAgICAgICAgIyBDaGVjayBEeW5hbWljRmllbGQgVmFsdWVzCiAgICAgICAgICAgIG15ICRWYWxpZGF0aW9uUmVzdWx0ID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFZhbHVlVmFsaWRhdGUoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXNGaWx0ZXIgPT4gJFBvc3NpYmxlVmFsdWVzRmlsdGVyLAogICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgTWFuZGF0b3J5ICAgICAgICAgICAgPT4gJE1hbmRhdG9yeSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRWYWxpZGF0aW9uUmVzdWx0KSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3QgcGVyZm9ybSB2YWxpZGF0aW9uIG9uIGZpZWxkICVzIScsCiAgICAgICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJFZhbGlkYXRpb25SZXN1bHQtPntTZXJ2ZXJFcnJvcn0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3J7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICAgICAgICAgICAgICAgICAgICAgICAgPSAxOwogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICAgICAgICAgICAgICAgID0gJFZhbGlkYXRpb25SZXN1bHQtPntFcnJvck1lc3NhZ2V9OwogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZFZhbGlkYXRpb25SZXN1bHR7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJFZhbGlkYXRpb25SZXN1bHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRUaWNrZXRQYXJhbXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgfSA9CiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVHZXQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIHByb2Nlc3Mgb2JqZWN0CiAgICAkS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2VzcycgPT4gewogICAgICAgICAgICBBY3Rpdml0eU9iamVjdCAgICAgICAgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHknKSwKICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dPYmplY3QgICA9PiAkQWN0aXZpdHlEaWFsb2dPYmplY3QsCiAgICAgICAgICAgIFRyYW5zaXRpb25PYmplY3QgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uJyksCiAgICAgICAgICAgIFRyYW5zaXRpb25BY3Rpb25PYmplY3QgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uJyksCiAgICAgICAgfQogICAgKTsKICAgIG15ICRQcm9jZXNzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzJyk7CgogICAgbXkgQE5vdGlmeTsKCiAgICBteSAkTmV3VGlja2V0SUQ7CiAgICBteSAkTmV3T3duZXJJRDsKICAgIGlmICggISRUaWNrZXRJRCApIHsKCiAgICAgICAgJFByb2Nlc3NFbnRpdHlJRCA9ICRQYXJhbXtHZXRQYXJhbX17UHJvY2Vzc0VudGl0eUlEfTsKICAgICAgICBpZiAoICEkUHJvY2Vzc0VudGl0eUlEICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ01pc3NpbmcgUHJvY2Vzc0VudGl0eUlELCBjaGVjayB5b3VyIEFjdGl2aXR5RGlhbG9nSGVhZGVyLnR0IScpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJFByb2Nlc3NTdGFydHBvaW50ID0gJFByb2Nlc3NPYmplY3QtPlByb2Nlc3NTdGFydHBvaW50R2V0KAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFBhcmFte1Byb2Nlc3NFbnRpdHlJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAhJFByb2Nlc3NTdGFydHBvaW50CiAgICAgICAgICAgIHx8ICFJc0hhc2hSZWZXaXRoRGF0YSgkUHJvY2Vzc1N0YXJ0cG9pbnQpCiAgICAgICAgICAgIHx8ICEkUHJvY2Vzc1N0YXJ0cG9pbnQtPntBY3Rpdml0eX0gfHwgISRQcm9jZXNzU3RhcnRwb2ludC0+e0FjdGl2aXR5RGlhbG9nfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgJ05vIFN0YXJ0QWN0aXZpdHlEaWFsb2cgb3IgU3RhcnRBY3Rpdml0eURpYWxvZyBmb3IgUHJvY2VzcyAiJXMiIGNvbmZpZ3VyZWQhJywKICAgICAgICAgICAgICAgICAgICAkUGFyYW17UHJvY2Vzc0VudGl0eUlEfSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkQWN0aXZpdHlFbnRpdHlJRCA9ICRQcm9jZXNzU3RhcnRwb2ludC0+e0FjdGl2aXR5fTsKCiAgICAgICAgTkVFREVETE9PUDoKICAgICAgICBmb3IgbXkgJE5lZWRlZCAocXcoUXVldWUgU3RhdGUgTG9jayBQcmlvcml0eSkpIHsKCiAgICAgICAgICAgIGlmICggISRUaWNrZXRQYXJhbXsgJFNlbGYtPntOYW1lVG9JRH17JE5lZWRlZH0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGlmIGEgcmVxdWlyZWQgZmllbGQgaGFzIG5vIHZhbHVlIGNhbGwgX0NoZWNrRmllbGQgYXMgZmlsZWQgaXMgaGlkZGVuCiAgICAgICAgICAgICAgICAjIChObyBEaXNwbGF5IHBhcmFtID0gRGlzcGxheSA9PiAwKSBhbmQgbm8gRGVmYXVsdFZhbHVlLCB0byB1c2UgZ2xvYmFsIGRlZmF1bHQgYXMKICAgICAgICAgICAgICAgICMgZmFsbC1iYWNrLiBPbmUgcmVhc29uIGZvciB0aGlzIHRvIGhhcHBlbiBpcyB0aGF0IEFjdGl2aXR5RGlhbG9nIERlZmF1bHRWYWx1ZSB0cmllZAogICAgICAgICAgICAgICAgIyB0byBzZXQgYmVmb3JlLCB3YXMgbm90IHZhbGlkLgogICAgICAgICAgICAgICAgbXkgJFJlc3VsdCA9ICRTZWxmLT5fQ2hlY2tGaWVsZCgKICAgICAgICAgICAgICAgICAgICBGaWVsZCA9PiAkU2VsZi0+e05hbWVUb0lEfXskTmVlZGVkfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhJFJlc3VsdCApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7ICRTZWxmLT57TmFtZVRvSUR9eyROZWVkZWR9IH0gPSAnIFNlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICgkUmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgJFRpY2tldFBhcmFteyAkU2VsZi0+e05hbWVUb0lEfXskTmVlZGVkfSB9ID0gJFJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYWQgbm8gRXJyb3JzLCB3ZSBjYW4gY3JlYXRlIHRoZSBUaWNrZXQgYW5kIFNldCBBY3Rpdml0eUVudGl0eUlEIGFzIHdlbGwgYXMKICAgICAgICAjIFByb2Nlc3NFbnRpdHlJRAogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCBcJUVycm9yICkgKSB7CgogICAgICAgICAgICAkVGlja2V0UGFyYW17VXNlcklEfSA9ICRTZWxmLT57VXNlcklEfTsKCiAgICAgICAgICAgIGlmICggJFRpY2tldFBhcmFte093bmVySUR9ICkgewogICAgICAgICAgICAgICAgJE5ld093bmVySUQgPSAkVGlja2V0UGFyYW17T3duZXJJRH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgU2V0IE93bmVySUQgdG8gMSBvbiBUaWNrZXRDcmVhdGUuIFRoaXMgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIG9uLCBzbyBldmVudHMgY2FuIGJlIHRyaWdnZXJlZC4KICAgICAgICAgICAgJFRpY2tldFBhcmFte093bmVySUR9ID0gMTsKCiAgICAgICAgICAgICMgaWYgU3RhcnRBY3Rpdml0eURpYWxvZyBkb2VzIG5vdCBwcm92aWRlIGEgdGlja2V0IHRpdGxlIHNldCBhIGRlZmF1bHQgdmFsdWUKICAgICAgICAgICAgaWYgKCAhJFRpY2tldFBhcmFte1RpdGxlfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCB0aGUgY3VycmVudCBzZXJ2ZXIgVGltZS1zdGFtcAogICAgICAgICAgICAgICAgbXkgJERhdGVUaW1lT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgICAgICAgICAgICAgIG15ICRDdXJyZW50VGltZVN0YW1wID0gJERhdGVUaW1lT2JqZWN0LT5Ub1N0cmluZygpOwogICAgICAgICAgICAgICAgbXkgJE9UT0JPVGltZVpvbmUgICAgPSAkRGF0ZVRpbWVPYmplY3QtPk9UT0JPVGltZVpvbmVHZXQoKTsKICAgICAgICAgICAgICAgICRUaWNrZXRQYXJhbXtUaXRsZX0gPSAiJFBhcmFte1Byb2Nlc3NOYW1lfSAtICRDdXJyZW50VGltZVN0YW1wICgkT1RPQk9UaW1lWm9uZSkiOwoKICAgICAgICAgICAgICAgICMgdXNlIGFydGljbGUgc3ViamVjdCBmcm9tIHRoZSB3ZWIgcmVxdWVzdCBpZiBhbnkKICAgICAgICAgICAgICAgIGlmICggSXNTdHJpbmdXaXRoRGF0YSggJFBhcmFte0dldFBhcmFtfXtTdWJqZWN0fSApICkgewogICAgICAgICAgICAgICAgICAgICRUaWNrZXRQYXJhbXtUaXRsZX0gPSAkUGFyYW17R2V0UGFyYW19e1N1YmplY3R9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNyZWF0ZSBhIG5ldyB0aWNrZXQKICAgICAgICAgICAgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKCVUaWNrZXRQYXJhbSk7CgogICAgICAgICAgICBpZiAoICEkVGlja2V0SUQgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAnQ291bGRuXCd0IGNyZWF0ZSB0aWNrZXQgZm9yIFByb2Nlc3Mgd2l0aCBQcm9jZXNzRW50aXR5SUQgIiVzIiEnLAogICAgICAgICAgICAgICAgICAgICAgICAkUGFyYW17UHJvY2Vzc0VudGl0eUlEfSwKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQoCiAgICAgICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFBhcmFte1Byb2Nlc3NFbnRpdHlJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAnQ291bGRuXCd0IHNldCBQcm9jZXNzRW50aXR5SUQgIiVzIiBvbiBUaWNrZXRJRCAiJXMiIScsCiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtQcm9jZXNzRW50aXR5SUR9LAogICAgICAgICAgICAgICAgICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTdWNjZXNzID0gdW5kZWY7CgogICAgICAgICAgICAkU3VjY2VzcyA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQoCiAgICAgICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICRQYXJhbXtQcm9jZXNzRW50aXR5SUR9LAogICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAkUHJvY2Vzc1N0YXJ0cG9pbnQtPntBY3Rpdml0eX0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAnQ291bGRuXCd0IHNldCBBY3Rpdml0eUVudGl0eUlEICIlcyIgb24gVGlja2V0SUQgIiVzIiEnLAogICAgICAgICAgICAgICAgICAgICAgICAkUGFyYW17UHJvY2Vzc0VudGl0eUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXQgKSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3Qgc3RvcmUgQWN0aXZpdHlEaWFsb2csIGludmFsaWQgVGlja2V0SUQ6ICVzIScsCiAgICAgICAgICAgICAgICAgICAgICAgICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVtZW1iZXIgbmV3IGNyZWF0ZWQgVGlja2V0SUQKICAgICAgICAgICAgJE5ld1RpY2tldElEID0gJFRpY2tldElEOwogICAgICAgIH0KICAgIH0KCiAgICBlbHNpZiAoICRUaWNrZXRJRCAmJiAkU2VsZi0+e0lzUHJvY2Vzc0Vucm9sbH0gKSB7CgogICAgICAgICMgdXNlIEVycm9yIGluc3RlYWQgb2YgRmF0YWxFcnJvciBhcyB3ZSBhcmUgaW4gYSBQb3AtdXAgd2luZG93CiAgICAgICAgIyBHZXQgVGlja2V0IHRvIGNoZWNrIFRpY2tldElEIHdhcyB2YWxpZAogICAgICAgICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICk7CgogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldCApICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5FcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnSW52YWxpZCBUaWNrZXRJRDogJXMhJywgJFRpY2tldElEICksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkU3VjY2VzcyA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzVGlja2V0UHJvY2Vzc1NldCgKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICRQYXJhbXtQcm9jZXNzRW50aXR5SUR9LAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgJ0NvdWxkblwndCBzZXQgUHJvY2Vzc0VudGl0eUlEICIlcyIgb24gVGlja2V0SUQgIiVzIiEnLAogICAgICAgICAgICAgICAgICAgICRQYXJhbXtQcm9jZXNzRW50aXR5SUR9LAogICAgICAgICAgICAgICAgICAgICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkU3VjY2VzcyA9IHVuZGVmOwoKICAgICAgICAkUHJvY2Vzc1N0YXJ0cG9pbnQgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc1N0YXJ0cG9pbnRHZXQoCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAkUGFyYW17UHJvY2Vzc0VudGl0eUlEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoCiAgICAgICAgICAgICEkUHJvY2Vzc1N0YXJ0cG9pbnQKICAgICAgICAgICAgfHwgIUlzSGFzaFJlZldpdGhEYXRhKCRQcm9jZXNzU3RhcnRwb2ludCkKICAgICAgICAgICAgfHwgISRQcm9jZXNzU3RhcnRwb2ludC0+e0FjdGl2aXR5fSB8fCAhJFByb2Nlc3NTdGFydHBvaW50LT57QWN0aXZpdHlEaWFsb2d9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgJ05vIFN0YXJ0QWN0aXZpdHlEaWFsb2cgb3IgU3RhcnRBY3Rpdml0eURpYWxvZyBmb3IgUHJvY2VzcyAiJXMiIGNvbmZpZ3VyZWQhJywKICAgICAgICAgICAgICAgICAgICAkUGFyYW17UHJvY2Vzc0VudGl0eUlEfSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkU3VjY2VzcyA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQoCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJFBhcmFte1Byb2Nlc3NFbnRpdHlJRH0sCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJFByb2Nlc3NTdGFydHBvaW50LT57QWN0aXZpdHl9LAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgJ0NvdWxkblwndCBzZXQgQWN0aXZpdHlFbnRpdHlJRCAiJXMiIG9uIFRpY2tldElEICIlcyIhJywKICAgICAgICAgICAgICAgICAgICAkUGFyYW17UHJvY2Vzc0VudGl0eUlEfSwKICAgICAgICAgICAgICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB1c2UgUHJvY2Vzc0VudGl0eUlEIGZyb20gdGhlIHdlYiByZXF1ZXN0CiAgICAgICAgJFByb2Nlc3NFbnRpdHlJRCA9ICRQYXJhbXtQcm9jZXNzRW50aXR5SUR9OwogICAgfQoKICAgICMgSWYgd2UgaGFkIGEgVGlja2V0SUQsIGdldCB0aGUgVGlja2V0CiAgICBlbHNlIHsKCiAgICAgICAgIyBHZXQgVGlja2V0IHRvIGNoZWNrIFRpY2tldElEIHdhcyB2YWxpZAogICAgICAgICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldCApICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBzdG9yZSBBY3Rpdml0eURpYWxvZywgaW52YWxpZCBUaWNrZXRJRDogJXMhJywKICAgICAgICAgICAgICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICAgICAkQWN0aXZpdHlFbnRpdHlJRCA9ICRUaWNrZXR7CiAgICAgICAgICAgICdEeW5hbWljRmllbGRfJwogICAgICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Byb2Nlc3M6OkR5bmFtaWNGaWVsZFByb2Nlc3NNYW5hZ2VtZW50QWN0aXZpdHlJRCcpCiAgICAgICAgfTsKICAgICAgICBpZiAoICEkQWN0aXZpdHlFbnRpdHlJRCApCiAgICAgICAgewoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fU2hvd0RpYWxvZ0Vycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgJ01pc3NpbmcgQWN0aXZpdHlFbnRpdHlJRCBpbiBUaWNrZXQgJXMhJywKICAgICAgICAgICAgICAgICAgICAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgYWN0aXZpdHkgZGlhbG9nIHRvIHNhdmUgaXMgc3RpbGwgdGhlIGNvcnJlY3QgYWN0aXZpdHkKICAgICAgICBteSAkQWN0aXZpdHkgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OkFjdGl2aXR5JyktPkFjdGl2aXR5R2V0KAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICRBY3Rpdml0eUVudGl0eUlELAogICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgID0+IFsnQWdlbnRJbnRlcmZhY2UnXSwKICAgICAgICApOwogICAgICAgIG15ICVBY3Rpdml0eURpYWxvZ3MgPSByZXZlcnNlICV7ICRBY3Rpdml0eS0+e0FjdGl2aXR5RGlhbG9nfSAvLyB7fSB9OwogICAgICAgIGlmICggISRBY3Rpdml0eURpYWxvZ3N7JEFjdGl2aXR5RGlhbG9nRW50aXR5SUR9ICkgewoKICAgICAgICAgICAgbXkgJFRpY2tldEhvb2sgICAgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Okhvb2snKTsKICAgICAgICAgICAgbXkgJFRpY2tldEhvb2tEaXZpZGVyID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Okhvb2tEaXZpZGVyJyk7CgogICAgICAgICAgICAkRXJyb3J7V3JvbmdBY3Rpdml0eX0gPSAxOwogICAgICAgICAgICBwdXNoIEBOb3RpZnksIHsKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgJ1RoaXMgc3RlcCBkb2VzIG5vdCBiZWxvbmcgYW55bW9yZSB0byB0aGUgY3VycmVudCBhY3Rpdml0eSBpbiBwcm9jZXNzIGZvciB0aWNrZXQgXCclcyVzJXNcJyEgQW5vdGhlciB1c2VyIGNoYW5nZWQgdGhpcyB0aWNrZXQgaW4gdGhlIG1lYW50aW1lLiBQbGVhc2UgY2xvc2UgdGhpcyB3aW5kb3cgYW5kIHJlbG9hZCB0aGUgdGlja2V0LicsCiAgICAgICAgICAgICAgICAgICAgJFRpY2tldEhvb2ssCiAgICAgICAgICAgICAgICAgICAgJFRpY2tldEhvb2tEaXZpZGVyLAogICAgICAgICAgICAgICAgICAgICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkUHJvY2Vzc0VudGl0eUlEID0gJFRpY2tldHsKICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nCiAgICAgICAgICAgICAgICAuICRDb25maWdPYmplY3QtPkdldCgnUHJvY2Vzczo6RHluYW1pY0ZpZWxkUHJvY2Vzc01hbmFnZW1lbnRQcm9jZXNzSUQnKQogICAgICAgIH07CgogICAgICAgIGlmICggISRQcm9jZXNzRW50aXR5SUQgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fU2hvd0RpYWxvZ0Vycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgJ01pc3NpbmcgUHJvY2Vzc0VudGl0eUlEIGluIFRpY2tldCAlcyEnLAogICAgICAgICAgICAgICAgICAgICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBpZiB3ZSBnb3QgZXJyb3JzIGdvIGJhY2sgdG8gZGlzcGxheWluZyB0aGUgQWN0aXZpdHlEaWFsb2cKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoIFwlRXJyb3IgKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPl9PdXRwdXRBY3Rpdml0eURpYWxvZygKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICAgICAgICA9PiAkUHJvY2Vzc0VudGl0eUlELAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgID0+ICRUaWNrZXRJRCB8fCB1bmRlZiwKICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9PiAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCwKICAgICAgICAgICAgRXJyb3IgICAgICAgICAgICAgICAgICA9PiBcJUVycm9yLAogICAgICAgICAgICBFcnJvck1lc3NhZ2VzICAgICAgICAgID0+IFwlRXJyb3JNZXNzYWdlcywKICAgICAgICAgICAgVmlzaWJpbGl0eSAgICAgICAgICAgICA9PiBcJVZpc2liaWxpdHksCiAgICAgICAgICAgIERGRXJyb3JzICAgICAgICAgICAgICAgPT4gXCVEeW5hbWljRmllbGRWYWxpZGF0aW9uUmVzdWx0LAogICAgICAgICAgICBERlBvc3NpYmxlVmFsdWVzICAgICAgID0+IFwlRHluYW1pY0ZpZWxkUG9zc2libGVWYWx1ZXMsCiAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfSwKICAgICAgICAgICAgTm90aWZ5ICAgICAgICAgICAgICAgICA9PiBcQE5vdGlmeSwKICAgICAgICApOwogICAgfQoKICAgICMgQ2hlY2sgaWYgd2UgZGVhbCB3aXRoIGEgVGlja2V0IFVwZGF0ZQogICAgbXkgJFVwZGF0ZVRpY2tldElEID0gJFBhcmFte0dldFBhcmFtfXtUaWNrZXRJRH07CgogICAgIyBXZSBzYXZlIG9ubHkgb25jZSwgbm8gbWF0dGVyIGlmIG9uZSBvciBtb3JlIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgZm9yIHRoZSBzYW1lIHBhcmFtCiAgICBteSAlU3RvcmVkRmllbGRzOwoKICAgICMgU2F2ZSBsb29wIGZvciBzdG9yaW5nIFRpY2tldCBWYWx1ZXMgdGhhdCB3ZXJlIG5vdCByZXF1aXJlZCBvbiB0aGUgaW5pdGlhbCBUaWNrZXRDcmVhdGUKICAgIERJQUxPR0ZJRUxEOgogICAgZm9yIG15ICRDdXJyZW50RmllbGQgKCBAeyAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZE9yZGVyfSB9ICkgewoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfSApICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgJ0NhblwndCBnZXQgZGF0YSBmb3IgRmllbGQgIiVzIiBvZiBBY3Rpdml0eURpYWxvZyAiJXMiIScsCiAgICAgICAgICAgICAgICAgICAgJEN1cnJlbnRGaWVsZCwKICAgICAgICAgICAgICAgICAgICAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRDdXJyZW50RmllbGQgPX4gbXteRHluYW1pY0ZpZWxkXyguKil9eG1zOwoKICAgICAgICBpZiAoICRDdXJyZW50RmllbGQgZXEgJ1BlbmRpbmdUaW1lJyApIHsKCiAgICAgICAgICAgICMgVGhpcyBWYWx1ZSBpcyBqdXN0IHNldCBpZiBTdGF0dXMgd2FzIG9uIGEgUGVuZGluZyBzdGF0ZQogICAgICAgICAgICAjIHNvIGl0IGhhcyB0byBiZSBwb3NzaWJsZSB0byBzdG9yZSB0aGUgdGlja2V0IGlmIHRoaXMgb25lJ3MgZW1wdHkKICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFRpY2tldFBhcmFteydQZW5kaW5nVGltZSd9ICkgKSB7CiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlbmRpbmdUaW1lU2V0KAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgJXsgJFRpY2tldFBhcmFteydQZW5kaW5nVGltZSd9IH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ291bGQgbm90IHNldCBQZW5kaW5nVGltZSBmb3IgVGlja2V0IHdpdGggSUQgIiVzIiBpbiBBY3Rpdml0eURpYWxvZyAiJXMiIScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlbHNpZiAoICRDdXJyZW50RmllbGQgZXEgJ0FydGljbGUnICYmICggJFVwZGF0ZVRpY2tldElEIHx8ICROZXdUaWNrZXRJRCApICkgewoKICAgICAgICAgICAgbXkgJFRpY2tldElEID0gJFVwZGF0ZVRpY2tldElEIHx8ICROZXdUaWNrZXRJRDsKCiAgICAgICAgICAgIGlmICggJFBhcmFte0dldFBhcmFtfXtTdWJqZWN0fSAmJiAkUGFyYW17R2V0UGFyYW19e0JvZHl9ICkgewoKICAgICAgICAgICAgICAgICMgYWRkIG5vdGUKICAgICAgICAgICAgICAgIG15ICRBcnRpY2xlSUQgPSAnJzsKICAgICAgICAgICAgICAgIG15ICRNaW1lVHlwZSAgPSAndGV4dC9wbGFpbic7CgogICAgICAgICAgICAgICAgIyBnZXQgcHJlIGxvYWRlZCBhdHRhY2htZW50CiAgICAgICAgICAgICAgICBteSBAQXR0YWNobWVudHMgPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREdldEFsbEZpbGVzRGF0YSgKICAgICAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGdldCBzdWJtaXQgYXR0YWNobWVudAogICAgICAgICAgICAgICAgbXkgJVVwbG9hZFN0dWZmID0gJFBhcmFtT2JqZWN0LT5HZXRVcGxvYWRBbGwoCiAgICAgICAgICAgICAgICAgICAgUGFyYW0gPT4gJ0ZpbGVVcGxvYWQnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICglVXBsb2FkU3R1ZmYpIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBBdHRhY2htZW50cywgXCVVcGxvYWRTdHVmZjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICAgICAgICAgICRNaW1lVHlwZSA9ICd0ZXh0L2h0bWwnOwoKICAgICAgICAgICAgICAgICAgICAjIHdyaXRlIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICAgICAgbXkgQE5ld0F0dGFjaG1lbnREYXRhOwogICAgICAgICAgICAgICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcCwgZGVsZXRlZCBub3QgdXNlZCBpbmxpbmUgaW1hZ2VzCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRDb250ZW50SUQgPSAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDb250ZW50SUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICggJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX0gPX4gL2ltYWdlL2kgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0Rpc3Bvc2l0aW9ufSBlcSAnaW5saW5lJyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRDb250ZW50SURIVE1MUXVvdGUgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgPT4gJENvbnRlbnRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3b3JrYXJvdW5kIGZvciBsaW5rIGVuY29kZSBvZiByaWNoIHRleHQgZWRpdG9yLCBzZWUgYnVnIzUwNTMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRDb250ZW50SURMaW5rRW5jb2RlID0gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkQ29udGVudElEKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtHZXRQYXJhbX17Qm9keX0gPX4gcy8oQ29udGVudElEPSkkQ29udGVudElETGlua0VuY29kZS8kMSRDb250ZW50SUQvZzsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlnbm9yZSBhdHRhY2htZW50IGlmIG5vdCBsaW5rZWQgaW4gYm9keQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17R2V0UGFyYW19e0JvZHl9ICF+IC8oXFEkQ29udGVudElESFRNTFF1b3RlXEV8XFEkQ29udGVudElEXEUpL2kgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBSZW1lbWJlciBpbmxpbmUgaW1hZ2VzIGFuZCBub3JtYWwgYXR0YWNobWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQE5ld0F0dGFjaG1lbnREYXRhLCBcJXskQXR0YWNobWVudH07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBAQXR0YWNobWVudHMgPSBATmV3QXR0YWNobWVudERhdGE7CgogICAgICAgICAgICAgICAgICAgICMgdmVyaWZ5IGh0bWwgZG9jdW1lbnQKICAgICAgICAgICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19e0JvZHl9ID0gJExheW91dE9iamVjdC0+UmljaFRleHREb2N1bWVudENvbXBsZXRlKAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte0dldFBhcmFtfXtCb2R5fSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRDb21tdW5pY2F0aW9uQ2hhbm5lbCA9ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317QXJ0aWNsZX17Q29uZmlnfXtDb21tdW5pY2F0aW9uQ2hhbm5lbH0KICAgICAgICAgICAgICAgICAgICAvLyAnSW50ZXJuYWwnOwoKICAgICAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QmFja2VuZEZvckNoYW5uZWwoCiAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbE5hbWUgPT4gJENvbW11bmljYXRpb25DaGFubmVsLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIENoYW5nZSBoaXN0b3J5IHR5cGUgYW5kIGNvbW1lbnQgYWNjb3JkaW5nbHkgdG8gdGhlIHByb2Nlc3MgYXJ0aWNsZS4KICAgICAgICAgICAgICAgIG15ICRIaXN0b3J5VHlwZSAgICA9ICdBZGROb3RlJzsKICAgICAgICAgICAgICAgIG15ICRIaXN0b3J5Q29tbWVudCA9ICclJU5vdGUnOwogICAgICAgICAgICAgICAgaWYgKCAkQ29tbXVuaWNhdGlvbkNoYW5uZWwgZXEgJ1Bob25lJyApIHsKICAgICAgICAgICAgICAgICAgICAkSGlzdG9yeVR5cGUgICAgPSAnUGhvbmVDYWxsQWdlbnQnOwogICAgICAgICAgICAgICAgICAgICRIaXN0b3J5Q29tbWVudCA9ICclJSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJEZyb20gPSAiXCIkU2VsZi0+e1VzZXJGdWxsbmFtZX1cIiA8JFNlbGYtPntVc2VyRW1haWx9PiI7CiAgICAgICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQ3JlYXRlKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgICAgICAgPT4gJ2FnZW50JywKICAgICAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317QXJ0aWNsZX17Q29uZmlnfXtJc1Zpc2libGVGb3JDdXN0b21lcn0gLy8gMCwKICAgICAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgID0+ICRGcm9tLAogICAgICAgICAgICAgICAgICAgIE1pbWVUeXBlICAgICAgICAgICAgICAgICAgPT4gJE1pbWVUeXBlLAogICAgICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICAgICAgICAgICAgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgID0+ICRIaXN0b3J5VHlwZSwKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgID0+ICRIaXN0b3J5Q29tbWVudCwKICAgICAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX17Qm9keX0sCiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19e1N1YmplY3R9LAogICAgICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXtBcnRpY2xlfXtDb25maWd9e0luZm9ybUFnZW50c30KICAgICAgICAgICAgICAgICAgICA/ICRQYXJhbXtHZXRQYXJhbX17SW5mb3JtVXNlcklEfQogICAgICAgICAgICAgICAgICAgIDogW10sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJEFydGljbGVJRCApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHdyaXRlIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50cykgewogICAgICAgICAgICAgICAgICAgICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZVdyaXRlQXR0YWNobWVudCgKICAgICAgICAgICAgICAgICAgICAgICAgJXskQXR0YWNobWVudH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyByZW1vdmUgYWxsIGZvcm0gZGF0YQogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6Rm9ybUNhY2hlJyktPkZvcm1JRFJlbW92ZSggRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSApOwoKICAgICAgICAgICAgICAgICMgdGltZSBhY2NvdW50aW5nCiAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXtHZXRQYXJhbX17VGltZVVuaXRzfSApIHsKICAgICAgICAgICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2NvdW50VGltZSgKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVVbml0ICA9PiAkUGFyYW17R2V0UGFyYW19e1RpbWVVbml0c30sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYXZlIHRvIFVwZGF0ZSBhIHRpY2tldCwgdXBkYXRlIHRoZSB0cmFuc21pdHRlZCB2YWx1ZXMKICAgICAgICBlbHNpZiAoJFVwZGF0ZVRpY2tldElEKSB7CgogICAgICAgICAgICBteSAkU3VjY2VzczsKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnVGl0bGUnICkgewoKICAgICAgICAgICAgICAgICMgaWYgdGhlcmUgaXMgbm8gdGl0bGUsIG5vdGhpbmcgaXMgbmVlZGVkIHRvIGJlIGRvbmUKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAhZGVmaW5lZCAkVGlja2V0UGFyYW17J1RpdGxlJ30KICAgICAgICAgICAgICAgICAgICB8fCAoIGRlZmluZWQgJFRpY2tldFBhcmFteydUaXRsZSd9ICYmICRUaWNrZXRQYXJhbXsnVGl0bGUnfSBlcSAnJyApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRTdWNjZXNzID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBzZXQgdGhlIHRpY2tldCB0aXRsZQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRUaXRsZVVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJFRpY2tldFBhcmFteydUaXRsZSd9LAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnQ3VzdG9tZXJJRCcKICAgICAgICAgICAgICAgICAgICB8fCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnQ3VzdG9tZXJVc2VySUQnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJFN0b3JlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgICAgICBpZiAoICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGlzcGxheX0gPT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXcm9uZyBBY3Rpdml0eURpYWxvZyBGaWVsZCBjb25maWc6ICVzIGNhblwndCBiZSBEaXNwbGF5ID0+IDEgLyBTaG93IGZpZWxkIChQbGVhc2UgY2hhbmdlIGl0cyBjb25maWd1cmF0aW9uIHRvIGJlIERpc3BsYXkgPT4gMCAvIERvIG5vdCBzaG93IGZpZWxkIG9yIERpc3BsYXkgPT4gMiAvIFNob3cgZmllbGQgYXMgbWFuZGF0b3J5KSEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEN1cnJlbnRGaWVsZCwKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc2tpcCBUaWNrZXRDdXN0b21lclNldCgpIGlmIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiB0aGUgY3VzdG9tZXIKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkVGlja2V0e0N1c3RvbWVySUR9IGVxICRUaWNrZXRQYXJhbXtDdXN0b21lcklEfQogICAgICAgICAgICAgICAgICAgICYmICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9IGVxICRUaWNrZXRQYXJhbXtDdXN0b21lclVzZXJ9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAjIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIGNhbGwgYW55IGFkZGl0aW9uYWwgc3RvcmVzCiAgICAgICAgICAgICAgICAgICAgIyBvbiBDdXN0b21lciwgQ3VzdG9tZXJObywgQ3VzdG9tZXJJRCBvciBDdXN0b21lclVzZXJJRAogICAgICAgICAgICAgICAgICAgICMgc28gbWFrZSBzdXJlIGJvdGggZmllbGRzIGFyZSBzZXQgdG8gIlN0b3JlZCIgOykKICAgICAgICAgICAgICAgICAgICAkU3RvcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXsnQ3VzdG9tZXJJRCd9IH0gICAgID0gMTsKICAgICAgICAgICAgICAgICAgICAkU3RvcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXsnQ3VzdG9tZXJVc2VySUQnfSB9ID0gMTsKICAgICAgICAgICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3VzdG9tZXJTZXQoCiAgICAgICAgICAgICAgICAgICAgTm8gPT4gJFRpY2tldFBhcmFte0N1c3RvbWVySUR9LAoKICAgICAgICAgICAgICAgICAgICAjIGhlcmUgdG9vOiB1bmZvcnR1bmF0ZWx5IFRpY2tldENyZWF0ZSB0YWtlcyBQYXJhbSAnQ3VzdG9tZXJVc2VyJwogICAgICAgICAgICAgICAgICAgICMgaW5zdGVhZCBvZiBDdXN0b21lclVzZXJJRCwgc28gb3VyIFRpY2tldFBhcmFtIGhhc2gKICAgICAgICAgICAgICAgICAgICAjIGhhcyB0aGUgQ3VzdG9tZXJVc2VyIEtleSBpbnN0ZWFkIG9mICdDdXN0b21lclVzZXJJRCcKICAgICAgICAgICAgICAgICAgICBVc2VyICAgICA9PiAkVGlja2V0UGFyYW17Q3VzdG9tZXJVc2VyfSwKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIGNhbGwgYW55IGFkZGl0aW9uYWwgc3RvcmVzCiAgICAgICAgICAgICAgICAjIG9uIEN1c3RvbWVyLCBDdXN0b21lck5vLCBDdXN0b21lcklEIG9yIEN1c3RvbWVyVXNlcklECiAgICAgICAgICAgICAgICAjIHNvIG1ha2Ugc3VyZSBib3RoIGZpZWxkcyBhcmUgc2V0IHRvICJTdG9yZWQiIDspCiAgICAgICAgICAgICAgICAkU3RvcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXsnQ3VzdG9tZXJJRCd9IH0gICAgID0gMTsKICAgICAgICAgICAgICAgICRTdG9yZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9eydDdXN0b21lclVzZXJJRCd9IH0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkU3RvcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgICAgIG15ICRUaWNrZXRGaWVsZFNldFN1YiA9ICRDdXJyZW50RmllbGQ7CiAgICAgICAgICAgICAgICAkVGlja2V0RmllbGRTZXRTdWIgPX4gc3tJRCR9e314bXM7CiAgICAgICAgICAgICAgICAkVGlja2V0RmllbGRTZXRTdWIgPSAnVGlja2V0JyAuICRUaWNrZXRGaWVsZFNldFN1YiAuICdTZXQnOwoKICAgICAgICAgICAgICAgIGlmICggJFRpY2tldE9iamVjdC0+Y2FuKCRUaWNrZXRGaWVsZFNldFN1YikgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRVcGRhdGVGaWVsZE5hbWU7CgogICAgICAgICAgICAgICAgICAgICMgc2FkbHkgd2UgbmVlZCBhbiBleGNlcHRpb24gZm9yIE93bmVyKElEKSBhbmQgUmVzcG9uc2libGUoSUQpLCBiZWNhdXNlIHRoZQogICAgICAgICAgICAgICAgICAgICMgVGlja2V0KlNldCBzdWJzIG5lZWQgTmV3VXNlcklEIGFzIHBhcmFtCiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXIgZ3JlcCB7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IGVxICRfIH0KICAgICAgICAgICAgICAgICAgICAgICAgcXcoIE93bmVySUQgUmVzcG9uc2libGVJRCApCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRVcGRhdGVGaWVsZE5hbWUgPSAnTmV3VXNlcklEJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRVcGRhdGVGaWVsZE5hbWUgPSAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgdG8gc3RvcmUgaWYgdGhlIGZpZWxkIG5lZWRzIHRvIGJlIHVwZGF0ZWQKICAgICAgICAgICAgICAgICAgICBteSAkRmllbGRVcGRhdGU7CgogICAgICAgICAgICAgICAgICAgICMgb25seSBTZXJ2aWNlIGFuZCBTTEEgZmllbGRzIGFjY2VwdHMgZW1wdHkgdmFsdWVzIGlmIHRoZSBoYXNoIGtleSBpcyBub3QKICAgICAgICAgICAgICAgICAgICAjIGRlZmluZWQgc2V0IGl0IHRvIGVtcHR5IHNvIHRoZSBUaWNrZXQqU2V0IGZ1bmN0aW9uIGNhbGwgd2lsbCBnZXQgdGhlIGVtcHR5CiAgICAgICAgICAgICAgICAgICAgIyB2YWx1ZQogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgKCAkVXBkYXRlRmllbGROYW1lIGVxICdTZXJ2aWNlSUQnIHx8ICRVcGRhdGVGaWVsZE5hbWUgZXEgJ1NMQUlEJyApCiAgICAgICAgICAgICAgICAgICAgICAgICYmICFkZWZpbmVkICRUaWNrZXRQYXJhbXsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkVGlja2V0UGFyYW17ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgJEZpZWxkVXBkYXRlID0gMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgdXBkYXRlIFNlcnZpY2UgYW4gU0xBIGZpZWxkcyBpZiB0aGV5IGhhdmUgYSBkZWZpbmVkIHZhbHVlIChldmVuIGVtcHR5KQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJFVwZGF0ZUZpZWxkTmFtZSBlcSAnU2VydmljZUlEJyB8fCAkVXBkYXRlRmllbGROYW1lIGVxICdTTEFJRCcgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEZpZWxkVXBkYXRlID0gMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgdXBkYXRlIGFueSBvdGhlciBmaWVsZCB0aGF0IGl0cyB2YWx1ZSBpcyBkZWZpbmVkIGFuZCBub3QgZW1wdHkKICAgICAgICAgICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRVcGRhdGVGaWVsZE5hbWUgbmUgJ1NlcnZpY2VJRCcKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJFVwZGF0ZUZpZWxkTmFtZSBuZSAnU0xBSUQnCiAgICAgICAgICAgICAgICAgICAgICAgICYmIGRlZmluZWQgJFRpY2tldFBhcmFteyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9CiAgICAgICAgICAgICAgICAgICAgICAgICYmICRUaWNrZXRQYXJhbXsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSBuZSAnJwogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkRmllbGRVcGRhdGUgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJFN1Y2Nlc3MgPSAxOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIGZpZWxkIG5lZWRzIHRvIGJlIHVwZGF0ZWQKICAgICAgICAgICAgICAgICAgICBpZiAoJEZpZWxkVXBkYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+JFRpY2tldEZpZWxkU2V0U3ViKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFVwZGF0ZUZpZWxkTmFtZSA9PiAkVGlja2V0UGFyYW17ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGEgbmV3IHNlcnZpY2UgYW5kIG5vIG5ldyBTTEEgaXMgdG8gYmUgc2V0LCBjaGVjayBpZiBjdXJyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICMgYXNzaWduZWQgU0xBIGlzIHN0aWxsIHZhbGlkCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRVcGRhdGVGaWVsZE5hbWUgZXEgJ1NlcnZpY2VJRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFkZWZpbmVkICRUaWNrZXRQYXJhbXtTTEFJRH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHRpY2tldCBkZXRhaWxzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB0aWNrZXQgYWxyZWFkeSBoYXZlIGFuIFNMQSBhc3NpZ25lZCBnZXQgdGhlIGxpc3QgU0xBcyBmb3IgdGhlIG5ldwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzZXJ2aWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIElzUG9zaXRpdmVJbnRlZ2VyKCAkVGlja2V0e1NMQUlEfSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICVTTEFMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFMaXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFRpY2tldFBhcmFteyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgdGhlIGN1cnJlbnQgU0xBIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBTTEEgZm9yIG5ldyBzZXJ2aWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZW1vdmUgU0xBIGZyb20gdGlja2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFNMQUxpc3R7ICRUaWNrZXR7U0xBSUR9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldFNMQVNldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMQUlEICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3Qgc2V0ICVzIGZvciBUaWNrZXQgd2l0aCBJRCAiJXMiIGluIEFjdGl2aXR5RGlhbG9nICIlcyIhJywKICAgICAgICAgICAgICAgICAgICAgICAgJEN1cnJlbnRGaWVsZCwKICAgICAgICAgICAgICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCwKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZE5hbWUgKCBrZXlzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKSB7CgogICAgICAgIG15ICREeW5hbWljRmllbGRDb25maWcgPSAkU2VsZi0+e0R5bmFtaWNGaWVsZH17JER5bmFtaWNGaWVsZE5hbWV9OwogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpICkgewoKICAgICAgICAgICAgbXkgJE1lc3NhZ2UgPSAiRHluYW1pY0ZpZWxkQ29uZmlnIG1pc3NpbmcgZm9yIGZpZWxkOiAkRHluYW1pY0ZpZWxkTmFtZSwgb3IgaXMgbm90IGEgVGlja2V0IER5bmFtaWMgRmllbGQhIjsKCiAgICAgICAgICAgICMgbG9nIGVycm9yIGJ1dCBkb2VzIG5vdCBzdG9wIHRoZSBleGVjdXRpb24gYXMgaXQgY291bGQgYmUgYW4gb2xkIEFydGljbGUKICAgICAgICAgICAgIyBEeW5hbWljRmllbGQsIHNlZSBidWcjMTE2NjYKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJE1lc3NhZ2UsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRDsKICAgICAgICB9CgogICAgICAgICMgZG9uJ3Qgc2V0IHZhbHVlIG9mIGR5bmFtaWMgZmllbGQgaWYgaXQgaXMgaGlkZGVuIHZpYSBBQ0wgKGFuZCBub3QgdmlhIGFjdGl2aXR5IGRpYWxvZyBkZWZpbml0aW9uKQogICAgICAgIGlmICgKICAgICAgICAgICAgISRWaXNpYmlsaXR5eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfQogICAgICAgICAgICAmJiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfXtEaXNwbGF5fSAhPSAwCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEOwogICAgICAgIH0KCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFRpY2tldFBhcmFteyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3Qgc2V0IER5bmFtaWNGaWVsZCB2YWx1ZSBmb3IgJXMgb2YgVGlja2V0IHdpdGggSUQgIiVzIiBpbiBBY3Rpdml0eURpYWxvZyAiJXMiIScsCiAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICRBY3Rpdml0eURpYWxvZ0VudGl0eUlELAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgaGlkZGVuIGZpZWxkcyBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICBUeXBlID0+ICdIaWRkZW5GaWVsZHMnLAogICAgICAgIEtleSAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgKTsKCiAgICAjIGdldCB0aGUgbGluayB0aWNrZXQgaWQgaWYgZ2l2ZW4KICAgIG15ICRMaW5rVGlja2V0SUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTGlua1RpY2tldElEJyApIHx8ICcnOwoKICAgICMgZ2V0IHNjcmVlbiBjb25maWcKICAgIG15ICRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgbGluayB0aWNrZXRzCiAgICBpZiAoCiAgICAgICAgJExpbmtUaWNrZXRJRAogICAgICAgICYmICRDb25maWctPntTcGxpdExpbmtUeXBlfQogICAgICAgICYmICRDb25maWctPntTcGxpdExpbmtUeXBlfXtMaW5rVHlwZX0KICAgICAgICAmJiAkQ29uZmlnLT57U3BsaXRMaW5rVHlwZX17RGlyZWN0aW9ufQogICAgICAgICkKICAgIHsKCiAgICAgICAgbXkgJEFjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdybycsCiAgICAgICAgICAgIFRpY2tldElEID0+ICRMaW5rVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfQogICAgICAgICk7CgogICAgICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgID0+ICJZb3UgbmVlZCBybyBwZXJtaXNzaW9uISIsCiAgICAgICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJFNvdXJjZUtleSA9ICRMaW5rVGlja2V0SUQ7CiAgICAgICAgbXkgJFRhcmdldEtleSA9ICRUaWNrZXRJRDsKCiAgICAgICAgaWYgKCAkQ29uZmlnLT57U3BsaXRMaW5rVHlwZX17RGlyZWN0aW9ufSBlcSAnU291cmNlJyApIHsKICAgICAgICAgICAgJFNvdXJjZUtleSA9ICRUaWNrZXRJRDsKICAgICAgICAgICAgJFRhcmdldEtleSA9ICRMaW5rVGlja2V0SUQ7CiAgICAgICAgfQoKICAgICAgICAjIGxpbmsgdGhlIHRpY2tldHMKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rQWRkKAogICAgICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFNvdXJjZUtleSAgICA9PiAkU291cmNlS2V5LAogICAgICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFRhcmdldEtleSAgICA9PiAkVGFyZ2V0S2V5LAogICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJENvbmZpZy0+e1NwbGl0TGlua1R5cGV9e0xpbmtUeXBlfSB8fCAnTm9ybWFsJywKICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoJE5ld093bmVySUQpIHsKICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRPd25lclNldCgKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgTmV3VXNlcklEID0+ICROZXdPd25lcklELAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBUcmFuc2l0aW9ucyB3aWxsIGJlIGhhbmRsZWQgYnkgdGlja2V0IGV2ZW50IG1vZHVsZSAoVGlja2V0UHJvY2Vzc1RyYW5zaXRpb25zLnBtKS4KCiAgICAjIGlmIHdlIHdlcmUgdXBkYXRpbmcgYSB0aWNrZXQsIGNsb3NlIHRoZSBwb3AtdXAgYW5kIHJldHVybiB0byB6b29tCiAgICAjIGVsc2UgKG5ldyB0aWNrZXQpIGp1c3QgZ28gdG8gem9vbSB0byBzaG93IHRoZSBuZXcgdGlja2V0CiAgICBpZiAoJFVwZGF0ZVRpY2tldElEKSB7CgogICAgICAgICMgbG9hZCBuZXcgVVJMIGluIHBhcmVudCB3aW5kb3cgYW5kIGNsb3NlIHBvcC11cAogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Qb3B1cENsb3NlKAogICAgICAgICAgICBVUkwgPT4gIkFjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JFVwZGF0ZVRpY2tldElEIiwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD0kVGlja2V0SUQiLAogICAgKTsKfQoKc3ViIF9EaXNwbGF5UHJvY2Vzc0xpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIElmIHdlIGhhdmUgYSBQcm9jZXNzRW50aXR5SUQKICAgICRQYXJhbXtFcnJvcnN9e1Byb2Nlc3NFbnRpdHlJREludmFsaWR9ID0gJyBTZXJ2ZXJFcnJvcicKICAgICAgICBpZiAoICRQYXJhbXtQcm9jZXNzRW50aXR5SUR9ICYmICEkUGFyYW17UHJvY2Vzc0xpc3R9eyAkUGFyYW17UHJvY2Vzc0VudGl0eUlEfSB9ICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAkUGFyYW17UHJvY2Vzc0xpc3R9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUgVmFsaWRhdGVfUmVxdWlyZWQnIC4gKCAkUGFyYW17RXJyb3JzfXtQcm9jZXNzRW50aXR5SURJbnZhbGlkfSB8fCAnICcgKSwKICAgICAgICBEYXRhICAgICAgICAgPT4gJFBhcmFte1Byb2Nlc3NMaXN0fSwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1Byb2Nlc3NFbnRpdHlJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtQcm9jZXNzRW50aXR5SUR9LAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIFNvcnQgICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgIEF1dG9Db21wbGV0ZSA9PiAnb2ZmJywKICAgICk7CgogICAgIyBhZGQgcmljaCB0ZXh0IGVkaXRvcgogICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKCiAgICAgICAgIyB1c2UgaGVpZ2h0L3dpZHRoIGRlZmluZWQgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgJFBhcmFte1JpY2hUZXh0SGVpZ2h0fSA9ICRTZWxmLT57Q29uZmlnfXtSaWNoVGV4dEhlaWdodH0gfHwgMDsKICAgICAgICAkUGFyYW17UmljaFRleHRXaWR0aH0gID0gJFNlbGYtPntDb25maWd9e1JpY2hUZXh0V2lkdGh9ICB8fCAwOwoKICAgICAgICAjIHNldCB1cCByaWNoIHRleHQgZWRpdG9yCiAgICAgICAgJExheW91dE9iamVjdC0+U2V0UmljaFRleHRQYXJhbWV0ZXJzKAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtQcmVTZWxlY3RQcm9jZXNzfSAmJiAkUGFyYW17UHJvY2Vzc0lEfSApIHsKCiAgICAgICAgIyBzZW5kIGRhdGEgdG8gSlMKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdQcm9jZXNzSUQnLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17UHJvY2Vzc0lEfSwKICAgICAgICApOwogICAgfQoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1Byb2Nlc3NMaXN0JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgb24gaW5pdGlhbCBzY3JlZW4gZnJvbSBuYXZiYXIgdGhlcmUgaXMgbm8gSXNNYWluV2lub3cgYnV0IGFsc28gbm8gSXNQcm9jZXNzRW5yb2xsLAogICAgIyB0aGVuIGl0IG11c3QgYmUgYSBNYWluV2luZG93CiAgICBpZiAoICEkU2VsZi0+e0lzTWFpbldpbmRvd30gJiYgISRTZWxmLT57SXNQcm9jZXNzRW5yb2xsfSApIHsKICAgICAgICAkU2VsZi0+e0lzTWFpbldpbmRvd30gPSAxOwogICAgfQoKICAgIG15ICRUeXBlID0gJFNlbGYtPntJc01haW5XaW5kb3d9ID8gJycgOiAnU21hbGwnOwoKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgVHlwZSA9PiAkVHlwZSwKICAgICk7CiAgICBpZiAoICRTZWxmLT57SXNNYWluV2luZG93fSApIHsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgIH0KCiAgICAjIGV4cGxhbmF0b3J5IG1lc3NhZ2UgYWJvdXQgYXN0ZXJpc2sKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFzdGVyaXNrRXhwbGFuYXRpb24nKSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXN0ZXJpc2tFeHBsYW5hdGlvbicsCiAgICAgICAgKTsKICAgIH0KCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0UHJvY2VzcycgLiAkVHlwZSwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgIElzUHJvY2Vzc0Vucm9sbCA9PiAkU2VsZi0+e0lzUHJvY2Vzc0Vucm9sbH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyB3b3JrYXJvdW5kIHdoZW4gYWN0aXZpdHkgZGlhbG9nIGlzIGxvYWRlZCBieSBBSkFYIGFzIGZpcnN0IGFjdGl2aXR5IGRpYWxvZywgaWYgdGhlcmUgaXMKICAgICMgYSBkYXRlIGZpZWxkIGxpa2UgUGVuZGluZyBUaW1lIG9yIER5bmFtaWMgRmllbGRzIERhdGUvVGltZSBvciBEYXRlLCB0aGVyZSBpcyBubyB3YXkgdG8gc2V0CiAgICAjIHRoaXMgb3B0aW9ucyBpbiB0aGUgZm9vdGVyIGFnYWluCiAgICAkTGF5b3V0T2JqZWN0LT57SGFzRGF0ZXBpY2tlcn0gPSAxOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCBUeXBlID0+ICRUeXBlICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCiMgPWN1dAojCiMgX0NoZWNrRmllbGQoKQojCiMgY2hlY2tzIGFsbCB0aGUgcG9zc2libGUgdGlja2V0IGZpZWxkcyBhbmQgcmV0dXJucyB0aGUgSUQgKGlmIHBvc3NpYmxlKSB2YWx1ZSBvZiB0aGUgZmllbGQsIGlmIHZhbGlkCiMgYW5kIGNoZWNrcyBhcmUgc3VjY2Vzc2Z1bAojCiMgaWYgRGlzcGxheSBwYXJhbSBpcyBzZXQgdG8gMCBvciBub3QgZ2l2ZW4sIGl0IHVzZXMgQWN0aXZpdHlEaWFsb2cgZmllbGQgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGZpZWxkcwojIG9yIGdsb2JhbCBkZWZhdWx0IHZhbHVlIGFzIGZhbGxiYWNrIG9ubHkgZm9yIGNlcnRhaW4gZmllbGRzCiMKIyBpZiBEaXNwbGF5IHBhcmFtIGlzIHNldCB0byAxIG9yIDIgaXQgdXNlcyB0aGUgdmFsdWUgZnJvbSB0aGUgd2ViIHJlcXVlc3QKIwojICAgICBteSAkUHJpb3JpdHlJRCA9ICRBZ2VudFRpY2tldFByb2Nlc3NPYmplY3QtPl9DaGVja0ZpZWxkKAojICAgICAgICAgRmllbGQgICAgICAgID0+ICdQcmlvcml0eUlEJywKIyAgICAgICAgIERpc3BsYXkgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCAwIG9yIDEgb3IgMgojICAgICAgICAgRGVmYXVsdFZhbHVlID0+ICczIG5vcm1hbCcsICAgICAgICAgICMgQWN0aXZpdHlEaWFsb2cgZmllbGQgZGVmYXVsdCB2YWx1ZSAoaXQgdXNlcyBnbG9iYWwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgIGRlZmF1bHQgdmFsdWUgYXMgZmFsbCBiYWNrIGZvciBtYW5kYXRvcnkgZmllbGRzCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAoUXVldWUsIFNhdGUsIExvY2sgYW5kIFByaW9yaXR5KQojICAgICApOwojCiMgUmV0dXJuczoKIyAgICAgJFByaW9yaXR5SUQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIFByaW9yaXR5SUQgaXMgc2V0IHRvIDEgaW4gdGhlIHdlYiByZXF1ZXN0CiMKIyAgICAgbXkgJFByaW9yaXR5SUQgPSAkQWdlbnRUaWNrZXRQcm9jZXNzT2JqZWN0LT5fQ2hlY2tGaWVsZCgKIyAgICAgICAgIEZpZWxkICAgICAgICA9PiAnUHJpb3JpdHlJRCcsCiMgICAgICAgICBEaXNwbGF5ICAgICAgPT4gMCwKIyAgICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnMyBub3JtYWwnLAojICAgICApOwojCiMgUmV0dXJuczoKIyAgICAgJFByaW9yaXR5SUQgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICMgc2luY2UgQWN0aXZpdHlEaWFsb2cgZGVmYXVsdCB2YWx1ZSBpcyAnMyBub3JtYWwnIGFuZAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgZmllbGQgaXMgaGlkZGVuCiMKIyA9Y3V0CgpzdWIgX0NoZWNrRmllbGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZpZWxkKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyByZW1vdmUgdGhlIElEIGFuZCBjaGVjayBpZiB0aGUgZ2l2ZW4gZmllbGQgaXMgcmVxdWlyZWQgZm9yIGNyZWF0aW5nIGEgdGlja2V0CiAgICBteSAkRmllbGRXaXRob3V0SUQgPSAkUGFyYW17RmllbGR9OwogICAgJEZpZWxkV2l0aG91dElEID1+IHN7SUQkfXt9eG1zOwogICAgbXkgJFRpY2tldFJlcXVpcmVkRmllbGQgPSBzY2FsYXIgZ3JlcCB7ICRfIGVxICRGaWVsZFdpdGhvdXRJRCB9IHF3KFF1ZXVlIFN0YXRlIExvY2sgUHJpb3JpdHkpOwoKICAgIG15ICRWYWx1ZTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBpZiBubyBEaXNwbGF5IChvciBEaXNwbGF5ID09IDApIGlzIGNvbW1pdHRlZAogICAgaWYgKCAhJFBhcmFte0Rpc3BsYXl9ICkgewoKICAgICAgICAjIENoZWNrIGlmIGEgRGVmYXVsdFZhbHVlIGlzIGdpdmVuCiAgICAgICAgaWYgKCAkUGFyYW17RGVmYXVsdFZhbHVlfSApIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIGdpdmVuIGZpZWxkIHBhcmFtIGlzIHZhbGlkCiAgICAgICAgICAgICRWYWx1ZSA9ICRTZWxmLT5fTG9va3VwVmFsdWUoCiAgICAgICAgICAgICAgICBGaWVsZCA9PiAkRmllbGRXaXRob3V0SUQsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17RGVmYXVsdFZhbHVlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgaWYgd2UgZ290IGEgcmVxdWlyZWQgdGlja2V0IGZpZWxkLCBjaGVjayBpZiB3ZSBnb3QgYSB2YWxpZCBEZWZhdWx0VmFsdWUgaW4gdGhlIFN5c0NvbmZpZwogICAgICAgIGlmICggISRWYWx1ZSAmJiAkVGlja2V0UmVxdWlyZWRGaWVsZCApIHsKICAgICAgICAgICAgJFZhbHVlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJQcm9jZXNzOjpEZWZhdWx0JEZpZWxkV2l0aG91dElEIik7CgogICAgICAgICAgICBpZiAoICEkVmFsdWUgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAnRGVmYXVsdCBDb25maWcgZm9yIFByb2Nlc3M6OkRlZmF1bHQlcyBtaXNzaW5nIScsCiAgICAgICAgICAgICAgICAgICAgICAgICRGaWVsZFdpdGhvdXRJRCwKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSBnaXZlbiBmaWVsZCBwYXJhbSBpcyB2YWxpZAogICAgICAgICAgICAgICAgJFZhbHVlID0gJFNlbGYtPl9Mb29rdXBWYWx1ZSgKICAgICAgICAgICAgICAgICAgICBGaWVsZCA9PiAkRmllbGRXaXRob3V0SUQsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggISRWYWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZWZhdWx0IENvbmZpZyBmb3IgUHJvY2Vzczo6RGVmYXVsdCVzIGludmFsaWQhJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGaWVsZFdpdGhvdXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUGFyYW17RGlzcGxheX0gPT0gMSApIHsKCiAgICAgICAgIyBEaXNwbGF5ID09IDEgaXMgbG9naWNhbGl0eSBub3QgcG9zc2libGUgZm9yIGEgdGlja2V0IHJlcXVpcmVkIGZpZWxkCiAgICAgICAgaWYgKCRUaWNrZXRSZXF1aXJlZEZpZWxkKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAnV3JvbmcgQWN0aXZpdHlEaWFsb2cgRmllbGQgY29uZmlnOiAlcyBjYW5cJ3QgYmUgRGlzcGxheSA9PiAxIC8gU2hvdyBmaWVsZCAoUGxlYXNlIGNoYW5nZSBpdHMgY29uZmlndXJhdGlvbiB0byBiZSBEaXNwbGF5ID0+IDAgLyBEbyBub3Qgc2hvdyBmaWVsZCBvciBEaXNwbGF5ID0+IDIgLyBTaG93IGZpZWxkIGFzIG1hbmRhdG9yeSkhJywKICAgICAgICAgICAgICAgICAgICAkUGFyYW17RmllbGR9LAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgdGhlIGdpdmVuIGZpZWxkIHBhcmFtIGlzIHZhbGlkCiAgICAgICAgaWYgKCAkUGFyYW17RmllbGR9IGVxICdBcnRpY2xlJyApIHsKCiAgICAgICAgICAgICRWYWx1ZSA9IDE7CgogICAgICAgICAgICBteSAoICRCb2R5LCAkU3ViamVjdCwgJEF0dGFjaG1lbnRFeGlzdHMsICRUaW1lVW5pdHMgKSA9ICgKICAgICAgICAgICAgICAgICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdCb2R5JyApLAogICAgICAgICAgICAgICAgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmplY3QnICksCiAgICAgICAgICAgICAgICAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQXR0YWNobWVudEV4aXN0cycgKSwKICAgICAgICAgICAgICAgICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaW1lVW5pdHMnICkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgSWYgYXR0YWNobWVudCBleGlzdHMgYW5kIGJvZHkgYW5kIHN1YmplY3Qgbm90LCBpdCBpcyBlcnJvciAoc2VlIGJ1ZyMxMzA4MSkuCiAgICAgICAgICAgIGlmICggJEF0dGFjaG1lbnRFeGlzdHMgJiYgKCAhJEJvZHkgJiYgISRTdWJqZWN0ICkgKSB7CiAgICAgICAgICAgICAgICAkVmFsdWUgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIElmIHRpbWUgdW5pdHMgZXhpc3RzIGFuZCBib2R5IGFuZCBzdWJqZWN0IG5vdCwgaXQgaXMgZXJyb3IgKHNlZSBidWcjMTMyNjYpLgogICAgICAgICAgICBpZiAoICRUaW1lVW5pdHMgJiYgKCAhJEJvZHkgJiYgISRTdWJqZWN0ICkgKSB7CiAgICAgICAgICAgICAgICAkVmFsdWUgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgJFZhbHVlID0gJFNlbGYtPl9Mb29rdXBWYWx1ZSgKICAgICAgICAgICAgICAgIEZpZWxkID0+ICRQYXJhbXtGaWVsZH0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17RmllbGR9ICkgfHwgJycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUGFyYW17RGlzcGxheX0gPT0gMiApIHsKCiAgICAgICAgIyBjaGVjayBpZiB0aGUgZ2l2ZW4gZmllbGQgcGFyYW0gaXMgdmFsaWQKICAgICAgICBpZiAoICRQYXJhbXtGaWVsZH0gZXEgJ0FydGljbGUnICkgewoKICAgICAgICAgICAgbXkgKCAkQm9keSwgJFN1YmplY3QgKSA9ICgKICAgICAgICAgICAgICAgICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdCb2R5JyApLAogICAgICAgICAgICAgICAgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmplY3QnICkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRWYWx1ZSA9IDA7CiAgICAgICAgICAgIGlmICggJEJvZHkgJiYgJFN1YmplY3QgKSB7CiAgICAgICAgICAgICAgICAkVmFsdWUgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkVmFsdWUgPSAkU2VsZi0+X0xvb2t1cFZhbHVlKAogICAgICAgICAgICAgICAgRmllbGQgPT4gJFBhcmFte0ZpZWxkfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtGaWVsZH0gKSB8fCAnJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRWYWx1ZTsKfQoKIyA9Y3V0CiMKIyBfTG9va3VwVmFsdWUoKQojCiMgcmV0dXJucyB0aGUgSUQgKGlmIHBvc3NpYmxlKSBvZiBuZWFybHkgYWxsIHRpY2tldCBmaWVsZHMgYW5kL29yIGNoZWNrcyBpZiBpdHMgdmFsaWQuCiMgQ2FuIGhhbmRsZSBJRHMgb3IgU3RyaW5ncy4KIyBDdXJyZW50bHkgd29ya2luZyB3aXRoOiBTdGF0ZSwgUXVldWUsIExvY2ssIFByaW9yaXR5IChwb3NzaWJsZSBtb3JlKS4KIwojICAgICBteSAkUHJpb3JpdHlJRCA9ICRBZ2VudFRpY2tldFByb2Nlc3NPYmplY3QtPl9Mb29rdXBWYWx1ZSgKIyAgICAgICAgIFByaW9yaXR5SUQgPT4gMSwKIyAgICAgKTsKIyAgICAgJFByaW9yaXR5SUQgPSAxOwojCiMgICAgIG15ICRTdGF0ZUlEID0gJEFnZW50VGlja2V0UHJvY2Vzc09iamVjdC0+X0xvb2t1cFZhbHVlKAojICAgICAgICAgU3RhdGUgPT4gJ29wZW4nLAojICAgICApOwojICAgICAkU3RhdGVJRCA9IDM7CiMKIyAgICAgbXkgJFByaW9yaXR5SUQgPSAkQWdlbnRUaWNrZXRQcm9jZXNzT2JqZWN0LT5fTG9va3VwVmFsdWUoCiMgICAgICAgICBQcmlvcml0eSA9PiAndW5rbm93bnByaW9yaXR5MTIzNCcsCiMgICAgICk7CiMgICAgICRQcmlvcml0eUlEID0gdW5kZWY7CiMKIyA9Y3V0CgpzdWIgX0xvb2t1cFZhbHVlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZpZWxkIFZhbHVlKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhJFBhcmFte0ZpZWxkfSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJGaWVsZCBzaG91bGQgbm90IGJlIGVtcHR5ISIKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGlmIHRoZXJlIGlzIG5vIHZhbHVlLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvCiAgICByZXR1cm4gaWYgISRQYXJhbXtWYWx1ZX07CgogICAgIyByZW1vdmUgdGhlIElEIGZvciBmdW5jdGlvbiBuYW1lIHB1cnBvc2UKICAgIG15ICRGaWVsZFdpdGhvdXRJRCA9ICRQYXJhbXtGaWVsZH07CiAgICAkRmllbGRXaXRob3V0SUQgPX4gc3tJRCR9e314bXM7CgogICAgbXkgJExvb2t1cEZpZWxkTmFtZTsKICAgIG15ICRPYmplY3ROYW1lOwogICAgbXkgJEZ1bmN0aW9uTmFtZTsKCiAgICAjIG93bmVyKElEKSBhbmQgcmVzcG9uc2libGUoSUQpIGxvb2t1cCBuZWVkcyBVc2VySUQgYXMgcGFyYW1ldGVyCiAgICBpZiAoIHNjYWxhciBncmVwIHsgJFBhcmFte0ZpZWxkfSBlcSAkXyB9IHF3KCBPd25lcklEIFJlc3BvbnNpYmxlSUQgKSApIHsKICAgICAgICAkTG9va3VwRmllbGROYW1lID0gJ1VzZXJJRCc7CiAgICAgICAgJE9iamVjdE5hbWUgICAgICA9ICdVc2VyJzsKICAgICAgICAkRnVuY3Rpb25OYW1lICAgID0gJ1VzZXJMb29rdXAnOwogICAgfQoKICAgICMgb3duZXIgYW5kIHJlc3BvbnNpYmxlIGxvb2t1cCBuZWVkcyBVc2VyTG9naW4gYXMgcGFyYW1ldGVyCiAgICBlbHNpZiAoIHNjYWxhciBncmVwIHsgJFBhcmFte0ZpZWxkfSBlcSAkXyB9IHF3KCBPd25lciBSZXNwb25zaWJsZSApICkgewogICAgICAgICRMb29rdXBGaWVsZE5hbWUgPSAnVXNlckxvZ2luJzsKICAgICAgICAkT2JqZWN0TmFtZSAgICAgID0gJ1VzZXInOwogICAgICAgICRGdW5jdGlvbk5hbWUgICAgPSAnVXNlckxvb2t1cCc7CiAgICB9CgogICAgIyBzZXJ2aWNlIGFuZCBTTEEgbG9va3VwIG5lZWRzIE5hbWUgYXMgcGFyYW1ldGVyIChXaGlsZSBTZXJ2aWNlSUQgYW4gU0xBSUQgdXNlcyBzdGFuZGFyZCkKICAgIGVsc2lmICggc2NhbGFyIGdyZXAgeyAkUGFyYW17RmllbGR9IGVxICRfIH0gcXcoIFNlcnZpY2UgU0xBICkgKSB7CiAgICAgICAgJExvb2t1cEZpZWxkTmFtZSA9ICdOYW1lJzsKICAgICAgICAkT2JqZWN0TmFtZSAgICAgID0gJEZpZWxkV2l0aG91dElEOwogICAgICAgICRGdW5jdGlvbk5hbWUgICAgPSAkRmllbGRXaXRob3V0SUQgLiAnTG9va3VwJzsKICAgIH0KCiAgICAjIG90aGVyIGZpZWxkcyBjYW4gdXNlIHN0YW5kYXJkIHBhcmFtZXRlciBuYW1lcyBhcyBQcmlvcml0eSBvciBQcmlvcml0eUlECiAgICBlbHNlIHsKICAgICAgICAkTG9va3VwRmllbGROYW1lID0gJFBhcmFte0ZpZWxkfTsKICAgICAgICAkT2JqZWN0TmFtZSAgICAgID0gJEZpZWxkV2l0aG91dElEOwogICAgICAgICRGdW5jdGlvbk5hbWUgICAgPSAkRmllbGRXaXRob3V0SUQgLiAnTG9va3VwJzsKICAgIH0KCiAgICAjIGdldCBhcHByb3ByaWF0ZSBvYmplY3Qgb2YgZmllbGQKICAgIG15ICRGaWVsZE9iamVjdDsKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSggJ0tlcm5lbDo6U3lzdGVtOjonIC4gJE9iamVjdE5hbWUsIFNpbGVudCA9PiAxICkgKSB7CiAgICAgICAgJEZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCggJ0tlcm5lbDo6U3lzdGVtOjonIC4gJE9iamVjdE5hbWUgKTsKICAgIH0KCiAgICBteSAkVmFsdWU7CgogICAgIyBjaGVjayBpZiB0aGUgYmFja2VuZCBtb2R1bGUgaGFzIHRoZSBuZWVkZWQgKkxvb2t1cCBzdWIKICAgIGlmICggJEZpZWxkT2JqZWN0ICYmICRGaWVsZE9iamVjdC0+Y2FuKCRGdW5jdGlvbk5hbWUpICkgewoKICAgICAgICAjIGNhbGwgdGhlICpMb29rdXAgc3ViIGFuZCBnZXQgdGhlIHZhbHVlCiAgICAgICAgJFZhbHVlID0gJEZpZWxkT2JqZWN0LT4kRnVuY3Rpb25OYW1lKAogICAgICAgICAgICAkTG9va3VwRmllbGROYW1lID0+ICRQYXJhbXtWYWx1ZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGlmIHdlIGRpZG4ndCBoYXZlIGFuIG9iamVjdCBhbmQgdGhlIHZhbHVlIGhhcyBubyByZWYgYSBzdHJpbmcgZS5nLiBUaXRsZSBhbmQgc28gb24KICAgICMgcmV0dXJuIHRydWUKICAgIGVsc2lmICggJFBhcmFte0ZpZWxkfSBlcSAkRmllbGRXaXRob3V0SUQgJiYgIXJlZiAkUGFyYW17VmFsdWV9ICkgewogICAgICAgIHJldHVybiAkUGFyYW17VmFsdWV9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRXJyb3Igd2hpbGUgY2hlY2tpbmcgd2l0aCAiIC4gJEZpZWxkV2l0aG91dElEIC4gIk9iamVjdCEiCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIGlmICggISRWYWx1ZSApOwoKICAgICMgcmV0dXJuIHRoZSBnaXZlbiBJRCB2YWx1ZSBpZiB0aGUgKkxvb2t1cCByZXN1bHQgd2FzIGEgc3RyaW5nCiAgICBpZiAoICRQYXJhbXtGaWVsZH0gbmUgJEZpZWxkV2l0aG91dElEICkgewogICAgICAgIHJldHVybiAkUGFyYW17VmFsdWV9OwogICAgfQoKICAgICMgcmV0dXJuIHRoZSAqTG9va3VwIHN0cmluZyByZXR1cm4gdmFsdWUKICAgIHJldHVybiAkVmFsdWU7Cn0KCnN1YiBfR2V0UmVzcG9uc2libGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdXNlcnMKICAgIG15ICVTaG93blVzZXJzOwogICAgbXkgJUFsbEdyb3Vwc01lbWJlcnMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTGlzdCgKICAgICAgICBUeXBlICA9PiAnTG9uZycsCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkUXVldWVPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiAgICBteSAkR3JvdXBPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIEdldCBhdmFpbGFibGUgcGVybWlzc2lvbnMgYW5kIHNldCBwZXJtaXNzaW9uIGdyb3VwIHR5cGUgYWNjb3JkaW5nbHkuCiAgICBteSAkQ29uZmlnUGVybWlzc2lvbnMgICA9ICRDb25maWdPYmplY3QtPkdldCgnU3lzdGVtOjpQZXJtaXNzaW9uJyk7CiAgICBteSAkUGVybWlzc2lvbkdyb3VwVHlwZSA9ICggZ3JlcCB7ICRfIGVxICdyZXNwb25zaWJsZScgfSBAeyRDb25maWdQZXJtaXNzaW9uc30gKSA/ICdyZXNwb25zaWJsZScgOiAncncnOwoKICAgICMgaWYgd2UgYXJlIHVwZGF0aW5nIGEgdGlja2V0IHNob3cgdGhlIGZ1bGwgbGlzdCBvZiBwb3NzaWJsZSByZXNwb25zaWJsZXMKICAgIGlmICggJFBhcmFte1RpY2tldElEfSApIHsKICAgICAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSAmJiAhJFBhcmFte0FsbFVzZXJzfSApIHsKICAgICAgICAgICAgbXkgJEdJRCAgICAgICAgPSAkUXVldWVPYmplY3QtPkdldFF1ZXVlR3JvdXBJRCggUXVldWVJRCA9PiAkUGFyYW17UXVldWVJRH0gKTsKICAgICAgICAgICAgbXkgJU1lbWJlckxpc3QgPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25Hcm91cEdldCgKICAgICAgICAgICAgICAgIEdyb3VwSUQgPT4gJEdJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJFBlcm1pc3Npb25Hcm91cFR5cGUsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCBrZXlzICVNZW1iZXJMaXN0ICkgewogICAgICAgICAgICAgICAgJFNob3duVXNlcnN7JFVzZXJJRH0gPSAkQWxsR3JvdXBzTWVtYmVyc3skVXNlcklEfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIHRoZSBTdGFydEFjdGl2aXR5RGlhbG9nIGRvZXMgbm90IHByb3ZpZGUgYSBUaWNrZXRJRCBhbmQgaXQgY291bGQgYmUgdGhhdCBhbHNvIHRoZXJlCiAgICAgICAgIyBpcyBubyBRdWV1ZUlEIGluZm9ybWF0aW9uLiBHZXQgdGhlIGRlZmF1bHQgUXVldWVJRCBmb3IgdGhpcyBtYXR0ZXJzLgogICAgICAgIGlmICggISRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAgICAgbXkgJFF1ZXVlICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlByb2Nlc3M6OkRlZmF1bHRRdWV1ZSIpOwogICAgICAgICAgICBteSAkUXVldWVJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVMb29rdXAoIFF1ZXVlID0+ICRRdWV1ZSApOwogICAgICAgICAgICBpZiAoJFF1ZXVlSUQpIHsKICAgICAgICAgICAgICAgICRQYXJhbXtRdWV1ZUlEfSA9ICRRdWV1ZUlEOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGp1c3Qgc2hvdyBvbmx5IHVzZXJzIHdpdGggc2VsZWN0ZWQgY3VzdG9tIHF1ZXVlCiAgICAgICAgaWYgKCAkUGFyYW17UXVldWVJRH0gJiYgISRQYXJhbXtSZXNwb25zaWJsZUFsbH0gKSB7CiAgICAgICAgICAgIG15IEBVc2VySURzID0gJFRpY2tldE9iamVjdC0+R2V0U3Vic2NyaWJlZFVzZXJJRHNCeVF1ZXVlSUQoJVBhcmFtKTsKICAgICAgICAgICAgZm9yIG15ICRLZXlHcm91cE1lbWJlciAoIHNvcnQga2V5cyAlQWxsR3JvdXBzTWVtYmVycyApIHsKICAgICAgICAgICAgICAgIG15ICRIaXQgPSAwOwogICAgICAgICAgICAgICAgZm9yIG15ICRVSUQgKEBVc2VySURzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkVUlEIGVxICRLZXlHcm91cE1lbWJlciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEhpdCA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAhJEhpdCApIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJEFsbEdyb3Vwc01lbWJlcnN7JEtleUdyb3VwTWVtYmVyfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGFsbCBzeXN0ZW0gdXNlcnMKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpDaGFuZ2VPd25lclRvRXZlcnlvbmUnKSApIHsKICAgICAgICAgICAgJVNob3duVXNlcnMgPSAlQWxsR3JvdXBzTWVtYmVyczsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBhbGwgc3Vic2NyaWJlZCB1c2VycyB3aG8gaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbiBpbiB0aGUgcXVldWUgZ3JvdXAKICAgICAgICBlbHNpZiAoICRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAgICAgbXkgJEdJRCAgICAgICAgPSAkUXVldWVPYmplY3QtPkdldFF1ZXVlR3JvdXBJRCggUXVldWVJRCA9PiAkUGFyYW17UXVldWVJRH0gKTsKICAgICAgICAgICAgbXkgJU1lbWJlckxpc3QgPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25Hcm91cEdldCgKICAgICAgICAgICAgICAgIEdyb3VwSUQgPT4gJEdJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJFBlcm1pc3Npb25Hcm91cFR5cGUsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGZvciBteSAkS2V5TWVtYmVyICggc29ydCBrZXlzICVNZW1iZXJMaXN0ICkgewogICAgICAgICAgICAgICAgaWYgKCAkQWxsR3JvdXBzTWVtYmVyc3skS2V5TWVtYmVyfSApIHsKICAgICAgICAgICAgICAgICAgICAkU2hvd25Vc2Vyc3skS2V5TWVtYmVyfSA9ICRBbGxHcm91cHNNZW1iZXJzeyRLZXlNZW1iZXJ9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgd29ya2Zsb3cKICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgJVBhcmFtLAogICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUmVzcG9uc2libGUnLAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVTaG93blVzZXJzLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4geyAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCkgfSBpZiAkQUNMOwoKICAgIHJldHVybiBcJVNob3duVXNlcnM7Cn0KCnN1YiBfR2V0T3duZXJzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdXNlcnMKICAgIG15ICVTaG93blVzZXJzOwogICAgbXkgJUFsbEdyb3Vwc01lbWJlcnMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTGlzdCgKICAgICAgICBUeXBlICA9PiAnTG9uZycsCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkUXVldWVPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiAgICBteSAkR3JvdXBPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIEdldCBhdmFpbGFibGUgcGVybWlzc2lvbnMgYW5kIHNldCBwZXJtaXNzaW9uIGdyb3VwIHR5cGUgYWNjb3JkaW5nbHkuCiAgICBteSAkQ29uZmlnUGVybWlzc2lvbnMgICA9ICRDb25maWdPYmplY3QtPkdldCgnU3lzdGVtOjpQZXJtaXNzaW9uJyk7CiAgICBteSAkUGVybWlzc2lvbkdyb3VwVHlwZSA9ICggZ3JlcCB7ICRfIGVxICdvd25lcicgfSBAeyRDb25maWdQZXJtaXNzaW9uc30gKSA/ICdvd25lcicgOiAncncnOwoKICAgICMgaWYgd2UgYXJlIHVwZGF0aW5nIGEgdGlja2V0IHNob3cgdGhlIGZ1bGwgbGlzdCBvZiBwb3NzaWJsZSBvd25lcnMKICAgIGlmICggJFBhcmFte1RpY2tldElEfSApIHsKICAgICAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSAmJiAhJFBhcmFte0FsbFVzZXJzfSApIHsKICAgICAgICAgICAgbXkgJEdJRCAgICAgICAgPSAkUXVldWVPYmplY3QtPkdldFF1ZXVlR3JvdXBJRCggUXVldWVJRCA9PiAkUGFyYW17UXVldWVJRH0gKTsKICAgICAgICAgICAgbXkgJU1lbWJlckxpc3QgPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25Hcm91cEdldCgKICAgICAgICAgICAgICAgIEdyb3VwSUQgPT4gJEdJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJFBlcm1pc3Npb25Hcm91cFR5cGUsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCBrZXlzICVNZW1iZXJMaXN0ICkgewogICAgICAgICAgICAgICAgJFNob3duVXNlcnN7JFVzZXJJRH0gPSAkQWxsR3JvdXBzTWVtYmVyc3skVXNlcklEfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIHRoZSBTdGFydEFjdGl2aXR5RGlhbG9nIGRvZXMgbm90IHByb3ZpZGUgYSBUaWNrZXRJRCBhbmQgaXQgY291bGQgYmUgdGhhdCBhbHNvIHRoZXJlCiAgICAgICAgIyBpcyBubyBRdWV1ZUlEIGluZm9ybWF0aW9uLiBHZXQgdGhlIGRlZmF1bHQgUXVldWVJRCBmb3IgdGhpcyBtYXR0ZXJzLgogICAgICAgIGlmICggISRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAgICAgbXkgJFF1ZXVlICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlByb2Nlc3M6OkRlZmF1bHRRdWV1ZSIpOwogICAgICAgICAgICBteSAkUXVldWVJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVMb29rdXAoIFF1ZXVlID0+ICRRdWV1ZSApOwogICAgICAgICAgICBpZiAoJFF1ZXVlSUQpIHsKICAgICAgICAgICAgICAgICRQYXJhbXtRdWV1ZUlEfSA9ICRRdWV1ZUlEOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGp1c3Qgc2hvdyBvbmx5IHVzZXJzIHdpdGggc2VsZWN0ZWQgY3VzdG9tIHF1ZXVlCiAgICAgICAgaWYgKCAkUGFyYW17UXVldWVJRH0gJiYgISRQYXJhbXtPd25lckFsbH0gKSB7CiAgICAgICAgICAgIG15IEBVc2VySURzID0gJFRpY2tldE9iamVjdC0+R2V0U3Vic2NyaWJlZFVzZXJJRHNCeVF1ZXVlSUQoJVBhcmFtKTsKICAgICAgICAgICAgZm9yIG15ICRLZXlHcm91cE1lbWJlciAoIHNvcnQga2V5cyAlQWxsR3JvdXBzTWVtYmVycyApIHsKICAgICAgICAgICAgICAgIG15ICRIaXQgPSAwOwogICAgICAgICAgICAgICAgZm9yIG15ICRVSUQgKEBVc2VySURzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkVUlEIGVxICRLZXlHcm91cE1lbWJlciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEhpdCA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAhJEhpdCApIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJEFsbEdyb3Vwc01lbWJlcnN7JEtleUdyb3VwTWVtYmVyfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGFsbCBzeXN0ZW0gdXNlcnMKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpDaGFuZ2VPd25lclRvRXZlcnlvbmUnKSApIHsKICAgICAgICAgICAgJVNob3duVXNlcnMgPSAlQWxsR3JvdXBzTWVtYmVyczsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBhbGwgc3Vic2NyaWJlZCB1c2VycyB3aG8gaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbiBpbiB0aGUgcXVldWUgZ3JvdXAKICAgICAgICBlbHNpZiAoICRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAgICAgbXkgJEdJRCAgICAgICAgPSAkUXVldWVPYmplY3QtPkdldFF1ZXVlR3JvdXBJRCggUXVldWVJRCA9PiAkUGFyYW17UXVldWVJRH0gKTsKICAgICAgICAgICAgbXkgJU1lbWJlckxpc3QgPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25Hcm91cEdldCgKICAgICAgICAgICAgICAgIEdyb3VwSUQgPT4gJEdJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJFBlcm1pc3Npb25Hcm91cFR5cGUsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGZvciBteSAkS2V5TWVtYmVyICggc29ydCBrZXlzICVNZW1iZXJMaXN0ICkgewogICAgICAgICAgICAgICAgaWYgKCAkQWxsR3JvdXBzTWVtYmVyc3skS2V5TWVtYmVyfSApIHsKICAgICAgICAgICAgICAgICAgICAkU2hvd25Vc2Vyc3skS2V5TWVtYmVyfSA9ICRBbGxHcm91cHNNZW1iZXJzeyRLZXlNZW1iZXJ9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgd29ya2Zsb3cKICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgJVBhcmFtLAogICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnT3duZXInLAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVTaG93blVzZXJzLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4geyAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCkgfSBpZiAkQUNMOwoKICAgIHJldHVybiBcJVNob3duVXNlcnM7Cn0KCnN1YiBfR2V0U0xBcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNsYQogICAgbXkgJVNMQTsKICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gJiYgJFBhcmFte1NlcnZpY2VzfSAmJiAleyAkUGFyYW17U2VydmljZXN9IH0gKSB7CiAgICAgICAgaWYgKCAkUGFyYW17U2VydmljZXN9eyAkUGFyYW17U2VydmljZUlEfSB9ICkgewogICAgICAgICAgICAlU0xBID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTTEFMaXN0KAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIFwlU0xBOwp9CgpzdWIgX0dldFNlcnZpY2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgc2VydmljZQogICAgbXkgJVNlcnZpY2U7CgogICAgIyBjaGVjayBuZWVkZWQKICAgIHJldHVybiBcJVNlcnZpY2UgaWYgISRQYXJhbXtRdWV1ZUlEfSAmJiAhJFBhcmFte1RpY2tldElEfTsKCiAgICAjIGdldCBvcHRpb25zIGZvciBkZWZhdWx0IHNlcnZpY2VzIGZvciB1bmtub3duIGN1c3RvbWVycwogICAgbXkgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2U6OkRlZmF1bHQ6OlVua25vd25DdXN0b21lcicpOwoKICAgICMgY2hlY2sgaWYgbm8gQ3VzdG9tZXJVc2VySUQgaXMgc2VsZWN0ZWQKICAgICMgaWYgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyID0gMCBsZWF2ZSBDdXN0b21lclVzZXJJRCBlbXB0eSwgaXQgd2lsbCBub3QgZ2V0IGFueSBzZXJ2aWNlcwogICAgIyBpZiAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgPSAxIHNldCBDdXN0b21lclVzZXJJRCB0byBnZXQgZGVmYXVsdCBzZXJ2aWNlcwogICAgaWYgKCAhJFBhcmFte0N1c3RvbWVyVXNlcklEfSAmJiAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgKSB7CiAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlcklEfSA9ICc8REVGQVVMVD4nOwogICAgfQoKICAgICMgZ2V0IHNlcnZpY2UgbGlzdAogICAgaWYgKCAkUGFyYW17Q3VzdG9tZXJVc2VySUR9ICkgewogICAgICAgICVTZXJ2aWNlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTZXJ2aWNlTGlzdCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gXCVTZXJ2aWNlOwp9CgpzdWIgX0dldExvY2tzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJUxvY2tzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvY2snKS0+TG9ja0xpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIFwlTG9ja3M7Cn0KCnN1YiBfR2V0UHJpb3JpdGllcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVQcmlvcml0aWVzOwoKICAgICMgSW5pdGlhbGx5IHdlIGhhdmUganVzdCB0aGUgZGVmYXVsdCBRdWV1ZSBQYXJhbWV0ZXIKICAgICMgc28gbWFrZSBzdXJlIHRvIGdldCB0aGUgSUQgaW4gdGhhdCBjYXNlCiAgICBteSAkUXVldWVJRDsKICAgIGlmICggISRQYXJhbXtRdWV1ZUlEfSAmJiAkUGFyYW17UXVldWV9ICkgewogICAgICAgICRRdWV1ZUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkUGFyYW17UXVldWV9ICk7CiAgICB9CiAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSB8fCAkUXVldWVJRCB8fCAkUGFyYW17VGlja2V0SUR9ICkgewogICAgICAgICVQcmlvcml0aWVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRQcmlvcml0eUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgIH0KICAgIHJldHVybiBcJVByaW9yaXRpZXM7Cn0KCnN1YiBfR2V0UXVldWVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayB3aGljaCB0eXBlIG9mIHBlcm1pc3Npb24gaXMgbmVlZGVkOiBpZiB0aGUgcHJvY2VzcyB0aWNrZXQKICAgICMgYWxyZWFkeSBleGlzdHMgKD0gVGlja2V0SUQgaXMgcHJlc2VudCksIHdlIG5lZWQgdGhlICdtb3ZlX2ludG8nCiAgICAjIHBlcm1pc3Npb24gb3RoZXJ3aXNlIHRoZSAnY3JlYXRlJyBwZXJtaXNzaW9uCiAgICBteSAkUGVybWlzc2lvblR5cGUgPSAnY3JlYXRlJzsKICAgIGlmICggJFBhcmFte1RpY2tldElEfSApIHsKICAgICAgICAkUGVybWlzc2lvblR5cGUgPSAnbW92ZV9pbnRvJzsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGNoZWNrIG93biBzZWxlY3Rpb24KICAgIG15ICVOZXdRdWV1ZXM7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmV3UXVldWVPd25TZWxlY3Rpb24nKSApIHsKICAgICAgICAlTmV3UXVldWVzID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZXdRdWV1ZU93blNlbGVjdGlvbicpIH07CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBTZWxlY3Rpb25UeXBlIFF1ZXVlIG9yIFN5c3RlbUFkZHJlc3M/CiAgICAgICAgbXkgJVF1ZXVlczsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmV3UXVldWVTZWxlY3Rpb25UeXBlJykgZXEgJ1F1ZXVlJyApIHsKICAgICAgICAgICAgJVF1ZXVlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+TW92ZUxpc3QoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBUeXBlICAgID0+ICRQZXJtaXNzaW9uVHlwZSwKICAgICAgICAgICAgICAgIEFjdGlvbiAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgUXVldWVJRCA9PiAkU2VsZi0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAlUXVldWVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c3RlbUFkZHJlc3MnKS0+U3lzdGVtQWRkcmVzc1F1ZXVlTGlzdCgpOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgcGVybWlzc2lvbiBxdWV1ZXMKICAgICAgICBteSAlVXNlckdyb3VwcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5QZXJtaXNzaW9uVXNlckdldCgKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgVHlwZSAgID0+ICRQZXJtaXNzaW9uVHlwZSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIHNlbGVjdGlvbiBzdHJpbmcKICAgICAgICBRVUVVRUlEOgogICAgICAgIGZvciBteSAkUXVldWVJRCAoIHNvcnQga2V5cyAlUXVldWVzICkgewogICAgICAgICAgICBteSAlUXVldWVEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlR2V0KCBJRCA9PiAkUXVldWVJRCApOwoKICAgICAgICAgICAgIyBwZXJtaXNzaW9uIGNoZWNrLCBjYW4gd2UgY3JlYXRlIG5ldyB0aWNrZXRzIGluIHF1ZXVlCiAgICAgICAgICAgIG5leHQgUVVFVUVJRCBpZiAhJFVzZXJHcm91cHN7ICRRdWV1ZURhdGF7R3JvdXBJRH0gfTsKCiAgICAgICAgICAgIG15ICRTdHJpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok5ld1F1ZXVlU2VsZWN0aW9uU3RyaW5nJykKICAgICAgICAgICAgICAgIHx8ICc8UmVhbG5hbWU+IDw8RW1haWw+PiAtIFF1ZXVlOiA8UXVldWU+JzsKICAgICAgICAgICAgJFN0cmluZyA9fiBzLzxRdWV1ZT4vJFF1ZXVlRGF0YXtOYW1lfS9nOwogICAgICAgICAgICAkU3RyaW5nID1+IHMvPFF1ZXVlQ29tbWVudD4vJFF1ZXVlRGF0YXtDb21tZW50fS9nOwoKICAgICAgICAgICAgIyByZW1vdmUgdHJhaWxpbmcgc3BhY2VzCiAgICAgICAgICAgICRTdHJpbmcgPX4gc3tccytcen17fSBpZiAhJFF1ZXVlRGF0YXtDb21tZW50fTsKCiAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZXdRdWV1ZVNlbGVjdGlvblR5cGUnKSBuZSAnUXVldWUnICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJVN5c3RlbUFkZHJlc3NEYXRhID0gJFNlbGYtPntTeXN0ZW1BZGRyZXNzfS0+U3lzdGVtQWRkcmVzc0dldCgKICAgICAgICAgICAgICAgICAgICBJRCA9PiAkUXVldWVzeyRRdWV1ZUlEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU3RyaW5nID1+IHMvPFJlYWxuYW1lPi8kU3lzdGVtQWRkcmVzc0RhdGF7UmVhbG5hbWV9L2c7CiAgICAgICAgICAgICAgICAkU3RyaW5nID1+IHMvPEVtYWlsPi8kU3lzdGVtQWRkcmVzc0RhdGF7TmFtZX0vZzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkTmV3UXVldWVzeyRRdWV1ZUlEfSA9ICRTdHJpbmc7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcJU5ld1F1ZXVlczsKfQoKc3ViIF9HZXRTdGF0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlU3RhdGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTdGF0ZUxpc3QoCiAgICAgICAgJVBhcmFtLAoKICAgICAgICAjIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IHByb2Nlc3MgdGlja2V0CiAgICAgICAgUXVldWVJRCAgPT4gJFBhcmFte1F1ZXVlSUR9ICB8fCAxLAogICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXRJRH0gfHwgJycsCgogICAgICAgICMgcmVtb3ZlIHR5cGUsIHNpbmNlIGlmIFRpY2tldDo6VHlwZSBpcyBhY3RpdmUgaW4gc3lzY29uZmlnLCB0aGUgVHlwZSBwYXJhbWV0ZXIgd2lsbAogICAgICAgICMgYmUgc2VudCBhbmQgdGhlIFRpY2tldFN0YXRlTGlzdCB3aWxsIHNlbmQgdGhlIHBhcmFtZXRlciBhcyBTdGF0ZSBUeXBlCiAgICAgICAgVHlwZSA9PiB1bmRlZiwKCiAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gXCVTdGF0ZXM7Cn0KCnN1YiBfR2V0VHlwZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCB0eXBlCiAgICBteSAlVHlwZTsKICAgIGlmICggJFBhcmFte1F1ZXVlSUR9IHx8ICRQYXJhbXtUaWNrZXRJRH0gKSB7CiAgICAgICAgJVR5cGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldFR5cGVMaXN0KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEFjdGlvbiA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybiBcJVR5cGU7Cn0KCnN1YiBfR2V0U3RhbmRhcmRUZW1wbGF0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlVGVtcGxhdGVzOwogICAgbXkgJFF1ZXVlSUQgPSAkUGFyYW17UXVldWVJRH0gfHwgJyc7CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkUXVldWVPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CgogICAgaWYgKCAhJFF1ZXVlSUQgKSB7CiAgICAgICAgbXkgJERlZmF1bHRRdWV1ZSAgID0gJENvbmZpZ09iamVjdC0+R2V0KCJQcm9jZXNzOjpEZWZhdWx0UXVldWUiKTsKICAgICAgICBteSAkRGVmYXVsdFF1ZXVlSUQgPSAkUXVldWVPYmplY3QtPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkRGVmYXVsdFF1ZXVlICk7CiAgICAgICAgaWYgKCREZWZhdWx0UXVldWVJRCkgewogICAgICAgICAgICAkUXVldWVJRCA9ICREZWZhdWx0UXVldWVJRDsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQKICAgIHJldHVybiBcJVRlbXBsYXRlcyBpZiAhJFF1ZXVlSUQgJiYgISRQYXJhbXtUaWNrZXRJRH07CgogICAgaWYgKCAhJFF1ZXVlSUQgJiYgJFBhcmFte1RpY2tldElEfSApIHsKCiAgICAgICAgIyBnZXQgUXVldWVJRCBmcm9tIHRoZSB0aWNrZXQKICAgICAgICBteSAlVGlja2V0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgICAgICRRdWV1ZUlEID0gJFRpY2tldHtRdWV1ZUlEfSB8fCAnJzsKICAgIH0KCiAgICAjIGZldGNoIGFsbCBzdGQuIHRlbXBsYXRlcwogICAgbXkgJVN0YW5kYXJkVGVtcGxhdGVzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KAogICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgVGVtcGxhdGVUeXBlcyA9PiAxLAogICAgKTsKCiAgICAjIHJldHVybiBlbXB0eSBoYXNoIGlmIHRoZXJlIGFyZSBubyB0ZW1wbGF0ZXMgZm9yIHRoaXMgc2NyZWVuCiAgICByZXR1cm4gXCVUZW1wbGF0ZXMgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCAkU3RhbmRhcmRUZW1wbGF0ZXN7UHJvY2Vzc0RpYWxvZ30gKTsKCiAgICAjIHJldHVybiBqdXN0IHRoZSB0ZW1wbGF0ZXMgZm9yIHRoaXMgc2NyZWVuCiAgICByZXR1cm4gJFN0YW5kYXJkVGVtcGxhdGVze1Byb2Nlc3NEaWFsb2d9Owp9CgpzdWIgX1Nob3dEaWFsb2dFcnJvciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlciggVHlwZSA9PiAnU21hbGwnICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkVycm9yKCVQYXJhbSk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlciggVHlwZSA9PiAnU21hbGwnICk7CiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9HZXRJbnB1dERlZmluaXRpb25EeW5hbWljRmllbGRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgIG15ICVEeW5hbWljRmllbGQ7CgogICAgIyBUaGlzIHN1YnJvdXRpbmUgdGFrZXMgYSBERkVudHJ5IGFuZCB0aGUgRHluYW1pY0ZpZWxkT2JqZWN0IGFzIGFyZ3VtZW50cwogICAgIyBJdCByZXRyaWV2ZXMgdGhlIGR5bmFtaWMgZmllbGQgZGVmaW5pdGlvbiBmb3IgdGhlIGdpdmVuIERGRW50cnkKICAgICMgSWYgdGhlIGRlZmluaXRpb24gaXMgbm90IGF2YWlsYWJsZSwgaXQgcmV0cmlldmVzIGl0IGZyb20gdGhlIER5bmFtaWNGaWVsZE9iamVjdAogICAgIyBSZXR1cm5zIHRoZSBkeW5hbWljIGZpZWxkIGRlZmluaXRpb24KICAgIG15ICRHZXREeW5hbWljRmllbGQgPSBzdWIgewoKICAgICAgICBteSAoJERGRW50cnkpID0gQF87CgogICAgICAgIG15ICREeW5hbWljRmllbGQgPSAkREZFbnRyeS0+e0RlZmluaXRpb259IC8vICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgTmFtZSA9PiAkREZFbnRyeS0+e0RGfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJER5bmFtaWNGaWVsZDsKICAgIH07CgogICAgSVRFTToKICAgIGZvciBteSAkSW5jbHVkZUl0ZW0gKCBAeyAkUGFyYW17SW5wdXRGaWVsZERlZmluaXRpb259IH0gKSB7CgogICAgICAgIGlmICggJEluY2x1ZGVJdGVtLT57R3JpZH0gKSB7CgogICAgICAgICAgICBmb3IgbXkgJFJvdyAoIEB7ICRJbmNsdWRlSXRlbS0+e0dyaWR9e1Jvd3N9IH0gKSB7CgogICAgICAgICAgICAgICAgREZFTlRSWToKICAgICAgICAgICAgICAgIGZvciBteSAkREZFbnRyeSAoICRSb3ctPkAqICkgewoKICAgICAgICAgICAgICAgICAgICBteSAkRHluYW1pY0ZpZWxkID0gJEdldER5bmFtaWNGaWVsZC0+KCRERkVudHJ5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGQpICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkLT57TWFuZGF0b3J5fSAgICAgID0gJERGRW50cnktPntNYW5kYXRvcnl9OwogICAgICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkLT57UmVhZG9ubHl9ICAgICAgID0gJERGRW50cnktPntSZWFkb25seX07CiAgICAgICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGR7ICRERkVudHJ5LT57REZ9IH0gPSAkRHluYW1pY0ZpZWxkOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkR5bmFtaWNGaWVsZENvbmZpZyBtaXNzaW5nIGZvciBmaWVsZDogJERGRW50cnktPntERn0sIG9yIGlzIG5vdCBhIFRpY2tldCBEeW5hbWljIEZpZWxkISIsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERGRU5UUlk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEluY2x1ZGVJdGVtLT57REZ9ICkgewoKICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZCA9ICRHZXREeW5hbWljRmllbGQtPigkSW5jbHVkZUl0ZW0pOwogICAgICAgICAgICBpZiAoJER5bmFtaWNGaWVsZCkgewogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZC0+e01hbmRhdG9yeX0gICAgICAgICAgPSAkSW5jbHVkZUl0ZW0tPntNYW5kYXRvcnl9OwogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZC0+e1JlYWRvbmx5fSAgICAgICAgICAgPSAkSW5jbHVkZUl0ZW0tPntSZWFkb25seX07CiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkeyAkSW5jbHVkZUl0ZW0tPntERn0gfSA9ICREeW5hbWljRmllbGQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJEeW5hbWljRmllbGRDb25maWcgbWlzc2luZyBmb3IgZmllbGQ6ICRJbmNsdWRlSXRlbS0+e0RGfSwgb3IgaXMgbm90IGEgVGlja2V0IER5bmFtaWMgRmllbGQhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBuZXh0IElURU07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG5leHQgSVRFTTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFwlRHluYW1pY0ZpZWxkOwp9CgoxOwo=</File>
        <File Location="Kernel/Modules/AgentITSMService.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNU2VydmljZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgIG15ICRTZXJ2aWNlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VMaXN0R2V0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2V0IGluY2lkZW50IHNpZ25hbAogICAgbXkgJUluY2lTaWduYWxzID0gKAogICAgICAgIFRyYW5zbGF0YWJsZSgnb3BlcmF0aW9uYWwnKSA9PiAnZ3JlZW5sZWQnLAogICAgICAgIFRyYW5zbGF0YWJsZSgnd2FybmluZycpICAgICA9PiAneWVsbG93bGVkJywKICAgICAgICBUcmFuc2xhdGFibGUoJ2luY2lkZW50JykgICAgPT4gJ3JlZGxlZCcsCiAgICAgICAgVHJhbnNsYXRhYmxlKCd1bmtub3duJykgICAgID0+ICdncmF5bGVkJywKICAgICk7CgogICAgaWYgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgICMgc29ydCB0aGUgc2VydmljZSBsaXN0IGJ5IGxvbmcgc2VydmljZSBuYW1lCiAgICAgICAgQHskU2VydmljZUxpc3R9ID0gc29ydCB7ICRhLT57TmFtZX0gLiAnOjonIGNtcCAkYi0+e05hbWV9IC4gJzo6JyB9IEB7JFNlcnZpY2VMaXN0fTsKCiAgICAgICAgZm9yIG15ICRTZXJ2aWNlRGF0YSAoIEB7JFNlcnZpY2VMaXN0fSApIHsKCiAgICAgICAgICAgICRTZXJ2aWNlRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IHx8PSAndW5rbm93bic7CgogICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyByb3cKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1JvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAleyRTZXJ2aWNlRGF0YX0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAkU2VydmljZURhdGEtPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU2lnbmFsID0+ICRJbmNpU2lnbmFsc3sgJFNlcnZpY2VEYXRhLT57Q3VySW5jaVN0YXRlVHlwZX0gfSwKICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICRTZXJ2aWNlRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UgaXQgZGlzcGxheXMgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UKICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGludmVzdGlnYXRlIHJlZnJlc2gKICAgIG15ICRSZWZyZXNoID0gJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9ID8gNjAgKiAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gOiB1bmRlZjsKCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgICA9PiAnT3ZlcnZpZXcnLAogICAgICAgIFJlZnJlc2ggPT4gJFJlZnJlc2gsCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU2VydmljZScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK</File>
        <File Location="Kernel/Modules/AgentITSMServicePrint.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNU2VydmljZVByaW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU2VydmljZUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlcnZpY2VJRCcgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkU2VydmljZUlEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgc2VydmljZQogICAgbXkgJVNlcnZpY2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICApOwogICAgaWYgKCAhJFNlcnZpY2V7U2VydmljZUlEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnU2VydmljZUlEICVzIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnLCAkU2VydmljZUlEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNsYSBsaXN0CiAgICBteSAlU0xBTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKS0+U0xBTGlzdCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2V7U2VydmljZUlEfSwKICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCB1c2VyIG9iamVjdAogICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgICMgZ2V0IHVzZXIgZGF0YSAoY3JlYXRlIGJ5KQogICAgJFNlcnZpY2V7Q3JlYXRlQnlOYW1lfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICBVc2VySUQgPT4gJFNlcnZpY2V7Q3JlYXRlQnl9LAogICAgKTsKCiAgICAjIGdldCB1c2VyIGRhdGEgKGNoYW5nZSBieSkKICAgICRTZXJ2aWNle0NoYW5nZUJ5TmFtZX0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTZXJ2aWNle0NoYW5nZUJ5fSwKICAgICk7CgogICAgIyBnZXQgUERGIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIGdlbmVyYXRlIHBkZiBvdXRwdXQKICAgIG15ICVQYWdlOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzCiAgICAkUGFnZXtNYXhQYWdlc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1BERjo6TWF4UGFnZXMnKTsKICAgIGlmICggISRQYWdle01heFBhZ2VzfSB8fCAkUGFnZXtNYXhQYWdlc30gPCAxIHx8ICRQYWdle01heFBhZ2VzfSA+IDEwMDAgKSB7CiAgICAgICAgJFBhZ2V7TWF4UGFnZXN9ID0gMTAwOwogICAgfQogICAgJFBhZ2V7TWFyZ2luVG9wfSAgICA9IDMwOwogICAgJFBhZ2V7TWFyZ2luUmlnaHR9ICA9IDQwOwogICAgJFBhZ2V7TWFyZ2luQm90dG9tfSA9IDQwOwogICAgJFBhZ2V7TWFyZ2luTGVmdH0gICA9IDQwOwogICAgJFBhZ2V7SGVhZGVyUmlnaHR9ICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU2VydmljZScpOwogICAgJFBhZ2V7UGFnZVRleHR9ICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnUGFnZScpOwogICAgJFBhZ2V7UGFnZUNvdW50fSAgICA9IDE7CgogICAgIyBjcmVhdGUgbmV3IHBkZiBkb2N1bWVudAogICAgJFBERk9iamVjdC0+RG9jdW1lbnROZXcoCiAgICAgICAgVGl0bGUgID0+ICRDb25maWdPYmplY3QtPkdldCgnUHJvZHVjdCcpIC4gJzogJyAuICRTZXJ2aWNle05hbWVTaG9ydH0sCiAgICAgICAgRW5jb2RlID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICApOwoKICAgICMgY3JlYXRlIGZpcnN0IHBkZiBwYWdlCiAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICVQYWdlLAogICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICApOwogICAgJFBhZ2V7UGFnZUNvdW50fSsrOwoKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTYsCiAgICApOwoKICAgICMgb3V0cHV0IHRpdGxlCiAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgIFRleHQgICAgID0+ICRTZXJ2aWNle05hbWVTaG9ydH0sCiAgICAgICAgRm9udFNpemUgPT4gMTMsCiAgICApOwoKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTYsCiAgICApOwoKICAgICMgb3V0cHV0ICJwcmludGVkIGJ5IgogICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICBUZXh0ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgncHJpbnRlZCBieScpIC4gJyAnCiAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRnVsbG5hbWV9IC4gJyAnCiAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e1RpbWV9LAogICAgICAgIEZvbnRTaXplID0+IDksCiAgICApOwoKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE0LAogICAgKTsKCiAgICAjIG91dHB1dCBnZW5lcmFsIGluZm9zCiAgICAkU2VsZi0+X1BERk91dHB1dEdlbmVyYWxJbmZvcygKICAgICAgICBQYWdlICAgID0+IFwlUGFnZSwKICAgICAgICBTZXJ2aWNlID0+IFwlU2VydmljZSwKICAgICk7CgogICAgIyBvdXRwdXQgYXNzb2NpYXRlZCBzbGFzCiAgICBpZiAoJVNMQUxpc3QpIHsKICAgICAgICAkU2VsZi0+X1BERk91dHB1dEFzc29jaWF0ZWRTTEFzKAogICAgICAgICAgICBQYWdlICAgID0+IFwlUGFnZSwKICAgICAgICAgICAgU0xBTGlzdCA9PiBcJVNMQUxpc3QsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG91dHB1dCBkZXRhaWxlZCBpbmZvcwogICAgJFNlbGYtPl9QREZPdXRwdXREZXRhaWxlZEluZm9zKAogICAgICAgIFBhZ2UgICAgPT4gXCVQYWdlLAogICAgICAgIFNlcnZpY2UgPT4gXCVTZXJ2aWNlLAogICAgKTsKCiAgICAjIGdldCBkYXRldGltZSBvYmplY3QKICAgIG15ICREYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwoKICAgICMgY3JlYXRlIGZpbGUgbmFtZQogICAgbXkgJEZpbGVuYW1lICAgICAgICA9ICJzZXJ2aWNlXyRTZXJ2aWNle05hbWVTaG9ydH1fIiAuICREYXRlVGltZU9iamVjdC0+Rm9ybWF0KCBGb3JtYXQgPT4gJyVZLSVtLSVkXyVIOiVNJyApIC4gJy5wZGYnOwogICAgbXkgJENsZWFuZWRGaWxlbmFtZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICBGaWxlbmFtZSA9PiAkRmlsZW5hbWUsCiAgICAgICAgVHlwZSAgICAgPT4gJ0F0dGFjaG1lbnQnLAogICAgKTsKCiAgICAjIHJldHVybiB0aGUgcGRmIGRvY3VtZW50CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBGaWxlbmFtZSAgICA9PiAkQ2xlYW5lZEZpbGVuYW1lLAogICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9wZGYnLAogICAgICAgIENvbnRlbnQgICAgID0+ICRQREZPYmplY3QtPkRvY3VtZW50T3V0cHV0KCksCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICApOwp9CgpzdWIgX1BERk91dHB1dEdlbmVyYWxJbmZvcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQYWdlIFNlcnZpY2UpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY3JlYXRlIGxlZnQgdGFibGUKICAgIG15ICRUYWJsZUxlZnQgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1NlcnZpY2UnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NlcnZpY2V9LT57TmFtZVNob3J0fSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDdXJyZW50IEluY2lkZW50IFN0YXRlJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtTZXJ2aWNlfS0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgfSwKICAgIF07CgogICAgIyBjcmVhdGUgcmlnaHQgdGFibGUKICAgIG15ICRUYWJsZVJpZ2h0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDcmVhdGVkJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXScsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiBcJXsgJFBhcmFte1NlcnZpY2V9IH0sCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3JlYXRlZCBieScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U2VydmljZX0tPntDcmVhdGVCeU5hbWV9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0xhc3QgY2hhbmdlZCcpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAnWyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gXCV7ICRQYXJhbXtTZXJ2aWNlfSB9LAogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0xhc3QgY2hhbmdlZCBieScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U2VydmljZX0tPntDcmVhdGVCeU5hbWV9LAogICAgICAgIH0sCiAgICBdOwoKICAgIG15ICRSb3dzID0gQHskVGFibGVMZWZ0fTsKICAgIGlmICggQHskVGFibGVSaWdodH0gPiAkUm93cyApIHsKICAgICAgICAkUm93cyA9IEB7JFRhYmxlUmlnaHR9OwogICAgfQoKICAgIG15ICVUYWJsZVBhcmFtOwogICAgZm9yIG15ICRSb3cgKCAxIC4uICRSb3dzICkgewogICAgICAgICRSb3ctLTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gICAgICAgICA9ICRUYWJsZUxlZnQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzFde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntWYWx1ZX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzJde0NvbnRlbnR9ICAgICAgICAgPSAnICc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzJde0JhY2tncm91bmRDb2xvcn0gPSAnI0ZGRkZGRic7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bM117Rm9udH0gICAgICAgICAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bNF17Q29udGVudH0gICAgICAgICA9ICRUYWJsZVJpZ2h0LT5bJFJvd10tPntWYWx1ZX07CiAgICB9CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA4MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDE3MC41OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMl17V2lkdGh9ID0gNDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzNde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bNF17V2lkdGh9ID0gMTcwLjU7CiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICAgPSAnQ3V0JzsKICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yRXZlbn0gID0gJyNEREREREQnOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgICAgICAgPSAzOwoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9IC4uICRQYXJhbXtQYWdlfS0+e01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfUERGT3V0cHV0RGV0YWlsZWRJbmZvcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQYWdlIFNlcnZpY2UpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBQREYgb2JqZWN0CiAgICBteSAkUERGT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTUsCiAgICApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdTZXJ2aWNlJyksCiAgICAgICAgSGVpZ2h0ICAgPT4gNywKICAgICAgICBUeXBlICAgICA9PiAnQ3V0JywKICAgICAgICBGb250ICAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZEl0YWxpYycsCiAgICAgICAgRm9udFNpemUgPT4gNywKICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICApOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNCwKICAgICk7CgogICAgIyBjcmVhdGUgdGFibGUKICAgIG15ICRUYWJsZSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU2VydmljZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U2VydmljZX0tPntOYW1lfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdUeXBlJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJFBhcmFte1NlcnZpY2V9LT57VHlwZX0gKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDcml0aWNhbGl0eScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQYXJhbXtTZXJ2aWNlfS0+e0NyaXRpY2FsaXR5fSApLAogICAgICAgIH0sCiAgICBdOwogICAgbXkgJVRhYmxlUGFyYW07CiAgICBteSAkUm93cyA9IEB7JFRhYmxlfTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ID0gJFRhYmxlLT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMV17Q29udGVudH0gPSAkVGFibGUtPlskUm93XS0+e1ZhbHVlfTsKICAgIH0KICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gNDMxOwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gICAgICA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICAgICAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0gLi4gJFBhcmFte1BhZ2V9LT57TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRQREZPYmplY3QtPlRhYmxlKCVUYWJsZVBhcmFtKTsKCiAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgbGFzdCBQQUdFIGlmICRUYWJsZVBhcmFte1N0YXRlfTsKCiAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgJXsgJFBhcmFte1BhZ2V9IH0sCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYXJhbXtQYWdlfS0+e1BhZ2VUZXh0fSAuICcgJyAuICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0KICAgICAgICApOwogICAgICAgICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0rKzsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXRwdXRBc3NvY2lhdGVkU0xBcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQYWdlIFNMQUxpc3QpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3cgPSAwOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBnZW5lcmF0ZSB0YWJsZSBkYXRhCiAgICBmb3IgbXkgJFNMQUlEICggc29ydCBrZXlzICV7ICRQYXJhbXtTTEFMaXN0fSB9ICkgewogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU0xBJykgLiAnOic7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICRQYXJhbXtTTEFMaXN0fS0+eyRTTEFJRH07CiAgICAgICAgJFJvdysrOwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSA0MzE7CgogICAgIyBnZXQgUERGIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE1LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkbGluZQogICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICBUZXh0ICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0Fzc29jaWF0ZWQgU0xBcycpLAogICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgdGFibGUgcGFyYW1zCiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yfSA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0gLi4gJFBhcmFte1BhZ2V9LT57TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRQREZPYmplY3QtPlRhYmxlKCVUYWJsZVBhcmFtKTsKCiAgICAgICAgIyBzdG9wIG91dHB1dCBvciBvdXRwdXQgbmV4dCBwYWdlCiAgICAgICAgbGFzdCBQQUdFIGlmICRUYWJsZVBhcmFte1N0YXRlfTsKCiAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgJXsgJFBhcmFte1BhZ2V9IH0sCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYXJhbXtQYWdlfS0+e1BhZ2VUZXh0fSAuICcgJyAuICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0KICAgICAgICApOwogICAgICAgICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0rKzsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKMTsK</File>
        <File Location="Kernel/Modules/AgentITSMServiceZoom.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNU2VydmljZVpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICRTZXJ2aWNlSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VydmljZUlEJyApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRTZXJ2aWNlSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gU2VydmljZUlEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzZXJ2aWNlCiAgICBteSAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoICEkU2VydmljZXtTZXJ2aWNlSUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdTZXJ2aWNlSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlIScsICRTZXJ2aWNlSUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBydW4gY29uZmlnIGl0ZW0gbWVudSBtb2R1bGVzCiAgICBpZiAoIHJlZiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01TZXJ2aWNlOjpGcm9udGVuZDo6TWVudU1vZHVsZScpIGVxICdIQVNIJyApIHsKICAgICAgICBteSAlTWVudXMgICA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnSVRTTVNlcnZpY2U6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgfTsKICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgZm9yIG15ICRNZW51ICggc29ydCBrZXlzICVNZW51cyApIHsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAkTWVudXN7JE1lbnV9LT57TW9kdWxlfSApICkgewogICAgICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNZW51c3skTWVudX0tPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNle1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IGNsYXNzZXMKICAgICAgICAgICAgICAgIGlmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnUG9wVXAnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnV9LT57TWVudUNsYXNzfSA9ICdBc1BvcHVwJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnQmFjaycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntNZW51Q2xhc3N9ID0gJ0hpc3RvcnlCYWNrJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgICAgICAkQ291bnRlciA9ICRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiBcJVNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgQ291bnRlciA9PiAkQ291bnRlciwKICAgICAgICAgICAgICAgICAgICBDb25maWcgID0+ICRNZW51c3skTWVudX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBzbGEgb2JqZWN0CiAgICBteSAkU0xBT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwoKICAgICMgZ2V0IHNsYSBsaXN0CiAgICBteSAlU0xBTGlzdCA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoJVNMQUxpc3QpIHsKCiAgICAgICAgIyBvdXRwdXQgcm93CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NMQScsCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRTTEFJRCAoIHNvcnQgeyAkU0xBTGlzdHskYX0gY21wICRTTEFMaXN0eyRifSB9IGtleXMgJVNMQUxpc3QgKSB7CgogICAgICAgICAgICAjIGdldCBzbGEgZGF0YQogICAgICAgICAgICBteSAlU0xBID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICAgICAgU0xBSUQgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCByb3cKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTTEFSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVNMQSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGxpbmtlZCBvYmplY3RzCiAgICBteSAkTGlua0xpc3RXaXRoRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBLZXkgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICBTdGF0ZSAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBsaW5rIHRhYmxlIHZpZXcgbW9kZQogICAgbXkgJExpbmtUYWJsZVZpZXdNb2RlID0gJENvbmZpZ09iamVjdC0+R2V0KCdMaW5rT2JqZWN0OjpWaWV3TW9kZScpOwoKICAgICMgY3JlYXRlIHRoZSBsaW5rIHRhYmxlCiAgICBteSAkTGlua1RhYmxlU3RyZyA9ICRMYXlvdXRPYmplY3QtPkxpbmtPYmplY3RUYWJsZUNyZWF0ZSgKICAgICAgICBMaW5rTGlzdFdpdGhEYXRhID0+ICRMaW5rTGlzdFdpdGhEYXRhLAogICAgICAgIFZpZXdNb2RlICAgICAgICAgPT4gJExpbmtUYWJsZVZpZXdNb2RlLAogICAgICAgIE9iamVjdCAgICAgICAgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgIEtleSAgICAgICAgICAgICAgPT4gJFNlcnZpY2VJRCwKICAgICk7CgogICAgIyBvdXRwdXQgdGhlIGxpbmsgdGFibGUKICAgIGlmICgkTGlua1RhYmxlU3RyZykgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMaW5rVGFibGUnIC4gJExpbmtUYWJsZVZpZXdNb2RlLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIExpbmtUYWJsZVN0cmcgPT4gJExpbmtUYWJsZVN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBpbmNpZGVudCBzaWduYWwKICAgIG15ICVJbmNpU2lnbmFscyA9ICgKICAgICAgICBUcmFuc2xhdGFibGUoJ29wZXJhdGlvbmFsJykgPT4gJ2dyZWVubGVkJywKICAgICAgICBUcmFuc2xhdGFibGUoJ3dhcm5pbmcnKSAgICAgPT4gJ3llbGxvd2xlZCcsCiAgICAgICAgVHJhbnNsYXRhYmxlKCdpbmNpZGVudCcpICAgID0+ICdyZWRsZWQnLAogICAgICAgIFRyYW5zbGF0YWJsZSgndW5rbm93bicpICAgICA9PiAnZ3JheWxlZCcsCiAgICApOwoKICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBnZXQgY3JlYXRlIHVzZXIgZGF0YQogICAgJFNlcnZpY2V7Q3JlYXRlQnlOYW1lfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICBVc2VySUQgPT4gJFNlcnZpY2V7Q3JlYXRlQnl9LAogICAgKTsKCiAgICAjIGdldCBjaGFuZ2UgdXNlciBkYXRhCiAgICAkU2VydmljZXtDaGFuZ2VCeU5hbWV9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU2VydmljZXtDaGFuZ2VCeX0sCiAgICApOwoKICAgICRTZXJ2aWNle0N1ckluY2lTdGF0ZVR5cGV9IHx8PSAndW5rbm93bic7CgogICAgIyBzdG9yZSBsYXN0IHNjcmVlbgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyktPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlblZpZXcnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU2VydmljZVpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJVNlcnZpY2UsCiAgICAgICAgICAgIEN1ckluY2lTaWduYWwgPT4gJEluY2lTaWduYWxzeyAkU2VydmljZXtDdXJJbmNpU3RhdGVUeXBlfSB9LAogICAgICAgIH0sCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK</File>
        <File Location="Kernel/Modules/AgentITSMSLA.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNU0xBOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIG91dHB1dCBvdmVydmlldwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICMgZ2V0IHNsYSBvYmplY3QKICAgIG15ICRTTEFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7CgogICAgIyBnZXQgc2xhIGxpc3QKICAgIG15ICVTTEFMaXN0ID0gJFNMQU9iamVjdC0+U0xBTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBpZiAoJVNMQUxpc3QpIHsKICAgICAgICBmb3IgbXkgJFNMQUlEICggc29ydCB7ICRTTEFMaXN0eyRhfSBjbXAgJFNMQUxpc3R7JGJ9IH0ga2V5cyAlU0xBTGlzdCApIHsKCiAgICAgICAgICAgICMgZ2V0IHNsYSBkYXRhCiAgICAgICAgICAgIG15ICVTTEEgPSAkU0xBT2JqZWN0LT5TTEFHZXQoCiAgICAgICAgICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJvdwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVTTEEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG90aGVyd2lzZSBpdCBkaXNwbGF5cyBhIG5vIGRhdGEgZm91bmQgbWVzc2FnZQogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJywKICAgICAgICApOwogICAgfQoKICAgICMgaW52ZXN0aWdhdGUgcmVmcmVzaAogICAgbXkgJFJlZnJlc2ggPSAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gPyA2MCAqICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA6IHVuZGVmOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBUaXRsZSAgID0+IFRyYW5zbGF0YWJsZSgnT3ZlcnZpZXcnKSwKICAgICAgICBSZWZyZXNoID0+ICRSZWZyZXNoLAogICAgKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVNMQScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK</File>
        <File Location="Kernel/Modules/AgentITSMSLAPrint.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNU0xBUHJpbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBwYXJhbXMKICAgIG15ICRTTEFJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTTEFJRCIgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkU0xBSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gU0xBSUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNsYQogICAgbXkgJVNMQSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKS0+U0xBR2V0KAogICAgICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoICEkU0xBe1NMQUlEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnU0xBSUQgJXMgbm90IGZvdW5kIGluIGRhdGFiYXNlIScsICRTTEFJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBjYWxlbmRhciBuYW1lCiAgICBpZiAoICRTTEF7Q2FsZW5kYXJ9ICkgewogICAgICAgICRTTEF7Q2FsZW5kYXJOYW1lfSA9ICJDYWxlbmRhciAkU0xBe0NhbGVuZGFyfSAtICIKICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoICJUaW1lWm9uZTo6Q2FsZW5kYXIiIC4gJFNMQXtDYWxlbmRhcn0gLiAiTmFtZSIgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTTEF7Q2FsZW5kYXJOYW1lfSA9IFRyYW5zbGF0YWJsZSgnQ2FsZW5kYXIgRGVmYXVsdCcpOwogICAgfQoKICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBnZXQgdXNlciBkYXRhIChjcmVhdGUgYnkpCiAgICAkU0xBe0NyZWF0ZUJ5TmFtZX0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTTEF7Q3JlYXRlQnl9LAogICAgKTsKCiAgICAjIGdldCB1c2VyIGRhdGEgKGNoYW5nZSBieSkKICAgICRTTEF7Q2hhbmdlQnlOYW1lfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICBVc2VySUQgPT4gJFNMQXtDaGFuZ2VCeX0sCiAgICApOwoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBnZW5lcmF0ZSBQREYgb3V0cHV0CiAgICBteSAlUGFnZTsKCiAgICAjIGdldCBtYXhpbXVtIG51bWJlciBvZiBwYWdlcwogICAgJFBhZ2V7TWF4UGFnZXN9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdQREY6Ok1heFBhZ2VzJyk7CiAgICBpZiAoICEkUGFnZXtNYXhQYWdlc30gfHwgJFBhZ2V7TWF4UGFnZXN9IDwgMSB8fCAkUGFnZXtNYXhQYWdlc30gPiAxMDAwICkgewogICAgICAgICRQYWdle01heFBhZ2VzfSA9IDEwMDsKICAgIH0KICAgICRQYWdle01hcmdpblRvcH0gICAgPSAzMDsKICAgICRQYWdle01hcmdpblJpZ2h0fSAgPSA0MDsKICAgICRQYWdle01hcmdpbkJvdHRvbX0gPSA0MDsKICAgICRQYWdle01hcmdpbkxlZnR9ICAgPSA0MDsKICAgICRQYWdle0hlYWRlclJpZ2h0fSAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1NMQScpOwogICAgJFBhZ2V7UGFnZVRleHR9ICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnUGFnZScpOwogICAgJFBhZ2V7UGFnZUNvdW50fSAgICA9IDE7CgogICAgIyBjcmVhdGUgbmV3IFBERiBkb2N1bWVudAogICAgJFBERk9iamVjdC0+RG9jdW1lbnROZXcoCiAgICAgICAgVGl0bGUgID0+ICRDb25maWdPYmplY3QtPkdldCgnUHJvZHVjdCcpIC4gJzogJyAuICRTTEF7TmFtZX0sCiAgICAgICAgRW5jb2RlID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICApOwoKICAgICMgY3JlYXRlIGZpcnN0IFBERiBwYWdlCiAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICVQYWdlLAogICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICApOwogICAgJFBhZ2V7UGFnZUNvdW50fSsrOwoKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTYsCiAgICApOwoKICAgICMgb3V0cHV0IHRpdGxlCiAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgIFRleHQgICAgID0+ICRTTEF7TmFtZX0sCiAgICAgICAgRm9udFNpemUgPT4gMTMsCiAgICApOwoKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTYsCiAgICApOwoKICAgICMgb3V0cHV0ICJwcmludGVkIGJ5IgogICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICBUZXh0ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgncHJpbnRlZCBieScpIC4gJyAnCiAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRnVsbG5hbWV9IC4gJyAnCiAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e1RpbWV9LAogICAgICAgIEZvbnRTaXplID0+IDksCiAgICApOwoKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE0LAogICAgKTsKCiAgICAjIG91dHB1dCBnZW5lcmFsIGluZm9zCiAgICAkU2VsZi0+X1BERk91dHB1dEdlbmVyYWxJbmZvcygKICAgICAgICBQYWdlID0+IFwlUGFnZSwKICAgICAgICBTTEEgID0+IFwlU0xBLAogICAgKTsKCiAgICAjIG91dHB1dCBkZXRhaWxlZCBpbmZvcwogICAgJFNlbGYtPl9QREZPdXRwdXREZXRhaWxlZEluZm9zKAogICAgICAgIFBhZ2UgPT4gXCVQYWdlLAogICAgICAgIFNMQSAgPT4gXCVTTEEsCiAgICApOwoKICAgICMgZ2V0IGRhdGV0aW1lIG9iamVjdAogICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CgogICAgIyBjcmVhdGUgZmlsZSBuYW1lCiAgICBteSAkRmlsZW5hbWUgICAgICAgID0gInNsYV8kU0xBe05hbWV9XyIgLiAkRGF0ZVRpbWVPYmplY3QtPkZvcm1hdCggRm9ybWF0ID0+ICIlWS0lbS0lZF8lSDolTSIgKSAuICcucGRmJzsKICAgIG15ICRDbGVhbmVkRmlsZW5hbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5GaWxlbmFtZUNsZWFuVXAoCiAgICAgICAgRmlsZW5hbWUgPT4gJEZpbGVuYW1lLAogICAgICAgIFR5cGUgICAgID0+ICdBdHRhY2htZW50JywKICAgICk7CgogICAgIyByZXR1cm4gdGhlIFBERiBkb2N1bWVudAogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgRmlsZW5hbWUgICAgPT4gJENsZWFuZWRGaWxlbmFtZSwKICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vcGRmJywKICAgICAgICBDb250ZW50ICAgICA9PiAkUERGT2JqZWN0LT5Eb2N1bWVudE91dHB1dCgpLAogICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgKTsKfQoKc3ViIF9QREZPdXRwdXRHZW5lcmFsSW5mb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBTTEEpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY3JlYXRlIGxlZnQgdGFibGUKICAgIG15ICRUYWJsZUxlZnQgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1NMQScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U0xBfS0+e05hbWV9LAogICAgICAgIH0sCiAgICBdOwoKICAgICMgY3JlYXRlIHJpZ2h0IHRhYmxlCiAgICBteSAkVGFibGVSaWdodCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3JlYXRlZCcpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAnWyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gXCV7ICRQYXJhbXtTTEF9IH0sCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3JlYXRlZCBieScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U0xBfS0+e0NoYW5nZUJ5TmFtZX0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTGFzdCBjaGFuZ2VkJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXScsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiBcJXsgJFBhcmFte1NMQX0gfSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdMYXN0IGNoYW5nZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NMQX0tPntDaGFuZ2VCeU5hbWV9LAogICAgICAgIH0sCiAgICBdOwoKICAgIG15ICRSb3dzID0gQHskVGFibGVMZWZ0fTsKICAgIGlmICggQHskVGFibGVSaWdodH0gPiAkUm93cyApIHsKICAgICAgICAkUm93cyA9IEB7JFRhYmxlUmlnaHR9OwogICAgfQoKICAgIG15ICVUYWJsZVBhcmFtOwogICAgZm9yIG15ICRSb3cgKCAxIC4uICRSb3dzICkgewogICAgICAgICRSb3ctLTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gICAgICAgICA9ICRUYWJsZUxlZnQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzFde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntWYWx1ZX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzJde0NvbnRlbnR9ICAgICAgICAgPSAnICc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzJde0JhY2tncm91bmRDb2xvcn0gPSAnI0ZGRkZGRic7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bM117Rm9udH0gICAgICAgICAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bNF17Q29udGVudH0gICAgICAgICA9ICRUYWJsZVJpZ2h0LT5bJFJvd10tPntWYWx1ZX07CiAgICB9CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA1MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDIwMC41OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMl17V2lkdGh9ID0gNDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzNde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bNF17V2lkdGh9ID0gMTcwLjU7CiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICAgPSAnQ3V0JzsKICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yRXZlbn0gID0gJyNEREREREQnOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgICAgICAgPSAzOwoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9IC4uICRQYXJhbXtQYWdlfS0+e01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXRwdXREZXRhaWxlZEluZm9zIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFBhZ2UgU0xBKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgUERGIG9iamVjdAogICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE1LAogICAgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgIFRleHQgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU0xBJyksCiAgICAgICAgSGVpZ2h0ICAgPT4gNywKICAgICAgICBUeXBlICAgICA9PiAnQ3V0JywKICAgICAgICBGb250ICAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZEl0YWxpYycsCiAgICAgICAgRm9udFNpemUgPT4gNywKICAgICAgICBDb2xvciAgICA9PiAnIzY2NjY2NicsCiAgICApOwoKICAgICMgc2V0IG5ldyBwb3NpdGlvbgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNCwKICAgICk7CgogICAgIyBjcmVhdGUgdGFibGUKICAgIG15ICRUYWJsZSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU0xBJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtTTEF9LT57TmFtZX0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVHlwZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQYXJhbXtTTEF9LT57VHlwZX0gKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDYWxlbmRhcicpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQYXJhbXtTTEF9LT57Q2FsZW5kYXJOYW1lfSApLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZpcnN0IFJlc3BvbnNlIFRpbWUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJFBhcmFte1NMQX0tPntGaXJzdFJlc3BvbnNlVGltZX0gKQogICAgICAgICAgICAgICAgLiAnICcKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdtaW51dGVzJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVXBkYXRlIFRpbWUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkUGFyYW17U0xBfS0+e1VwZGF0ZVRpbWV9ICkgLiAnICcKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdtaW51dGVzJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU29sdXRpb24gVGltZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRQYXJhbXtTTEF9LT57U29sdXRpb25UaW1lfSApCiAgICAgICAgICAgICAgICAuICcgJwogICAgICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ21pbnV0ZXMnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJykKICAgICAgICAgICAgICAgIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAkUGFyYW17U0xBfS0+e01pblRpbWVCZXR3ZWVuSW5jaWRlbnRzfSwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC4gJyAnCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnbWludXRlcycpLAogICAgICAgIH0sCiAgICBdOwogICAgbXkgJVRhYmxlUGFyYW07CiAgICBteSAkUm93cyA9IEB7JFRhYmxlfTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ID0gJFRhYmxlLT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMV17Q29udGVudH0gPSAkVGFibGUtPlskUm93XS0+e1ZhbHVlfTsKICAgIH0KICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDEyMDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDM5MTsKICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgICAgICA9IDY7CiAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3J9ICAgICAgPSAnI0RERERERCc7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nfSAgICAgICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICAgICAgID0gMzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgIFBBR0U6CiAgICBmb3IgKCAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9IC4uICRQYXJhbXtQYWdlfS0+e01heFBhZ2VzfSApIHsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKMTsK</File>
        <File Location="Kernel/Modules/AgentITSMSLAZoom.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNU0xBWm9vbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJFNMQUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gIlNMQUlEIiApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRTTEFJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBTTEFJRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgc2xhCiAgICBteSAlU0xBID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFHZXQoCiAgICAgICAgU0xBSUQgID0+ICRTTEFJRCwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIGlmICggISRTTEF7U0xBSUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdTTEFJRCAlcyBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFNMQUlEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGNhbGVuZGFyIG5hbWUKICAgIGlmICggJFNMQXtDYWxlbmRhcn0gKSB7CiAgICAgICAgJFNMQXtDYWxlbmRhck5hbWV9ID0gIkNhbGVuZGFyICRTTEF7Q2FsZW5kYXJ9IC0gIgogICAgICAgICAgICAuICRDb25maWdPYmplY3QtPkdldCggIlRpbWVab25lOjpDYWxlbmRhciIgLiAkU0xBe0NhbGVuZGFyfSAuICJOYW1lIiApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNMQXtDYWxlbmRhck5hbWV9ID0gVHJhbnNsYXRhYmxlKCdDYWxlbmRhciBEZWZhdWx0Jyk7CiAgICB9CgogICAgIyBydW4gY29uZmlnIGl0ZW0gbWVudSBtb2R1bGVzCiAgICBpZiAoIHJlZiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01TTEE6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgZXEgJ0hBU0gnICkgewogICAgICAgIG15ICVNZW51cyAgID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNU0xBOjpGcm9udGVuZDo6TWVudU1vZHVsZScpIH07CiAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgIGZvciBteSAkTWVudSAoIHNvcnQga2V5cyAlTWVudXMgKSB7CgogICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSggJE1lbnVzeyRNZW51fS0+e01vZHVsZX0gKSApIHsKICAgICAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTWVudXN7JE1lbnV9LT57TW9kdWxlfS0+bmV3KAogICAgICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgICAgIFNMQUlEID0+ICRTZWxmLT57U0xBSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCBjbGFzc2VzCiAgICAgICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9ICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gZXEgJ1BvcFVwJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e01lbnVDbGFzc30gPSAnQXNQb3B1cCc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJE1lbnVzeyRNZW51fS0+e1RhcmdldH0gZXEgJ0JhY2snICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnV9LT57TWVudUNsYXNzfSA9ICdIaXN0b3J5QmFjayc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcnVuIG1vZHVsZQogICAgICAgICAgICAgICAgJENvdW50ZXIgPSAkT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIFNMQSAgICAgPT4gXCVTTEEsCiAgICAgICAgICAgICAgICAgICAgQ291bnRlciA9PiAkQ291bnRlciwKICAgICAgICAgICAgICAgICAgICBDb25maWcgID0+ICRNZW51c3skTWVudX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRTTEF7U2VydmljZUlEc30gJiYgcmVmICRTTEF7U2VydmljZUlEc30gZXEgJ0FSUkFZJyAmJiBAeyAkU0xBe1NlcnZpY2VJRHN9IH0gKSB7CgogICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTZXJ2aWNlJywKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBzZXJ2aWNlIGxpc3QKICAgICAgICBteSAlU2VydmljZUxpc3Q7CiAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBAeyAkU0xBe1NlcnZpY2VJRHN9IH0gKSB7CgogICAgICAgICAgICAjIGdldCBzZXJ2aWNlIGRhdGEKICAgICAgICAgICAgbXkgJVNlcnZpY2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VydmljZXtDdXJJbmNpU3RhdGVUeXBlfSB8fD0gJ3Vua25vd24nOwoKICAgICAgICAgICAgIyBhZGQgc2VydmljZSB0byBoYXNoCiAgICAgICAgICAgICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfSA9IFwlU2VydmljZTsKICAgICAgICB9CgogICAgICAgICMgc2V0IGluY2lkZW50IHNpZ25hbAogICAgICAgIG15ICVJbmNpU2lnbmFscyA9ICgKICAgICAgICAgICAgVHJhbnNsYXRhYmxlKCdvcGVyYXRpb25hbCcpID0+ICdncmVlbmxlZCcsCiAgICAgICAgICAgIFRyYW5zbGF0YWJsZSgnd2FybmluZycpICAgICA9PiAneWVsbG93bGVkJywKICAgICAgICAgICAgVHJhbnNsYXRhYmxlKCdpbmNpZGVudCcpICAgID0+ICdyZWRsZWQnLAogICAgICAgICAgICBUcmFuc2xhdGFibGUoJ3Vua25vd24nKSAgICAgPT4gJ2dyYXlsZWQnLAogICAgICAgICk7CgogICAgICAgIG15ICRDc3NDbGFzcyA9ICcnOwogICAgICAgIGZvciBteSAkU2VydmljZUlEICgKICAgICAgICAgICAgc29ydCB7ICRTZXJ2aWNlTGlzdHskYX0tPntOYW1lfSBjbXAgJFNlcnZpY2VMaXN0eyRifS0+e05hbWV9IH0KICAgICAgICAgICAga2V5cyAlU2VydmljZUxpc3QKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgc2V0IG91dHB1dCBvYmplY3QKICAgICAgICAgICAgJENzc0NsYXNzID0gJENzc0NsYXNzIGVxICdzZWFyY2hwYXNzaXZlJyA/ICdzZWFyY2hhY3RpdmUnIDogJ3NlYXJjaHBhc3NpdmUnOwoKICAgICAgICAgICAgIyBvdXRwdXQgcm93CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VydmljZVJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAleyAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gfSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU2lnbmFsID0+ICRJbmNpU2lnbmFsc3sgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9LT57Q3VySW5jaVN0YXRlVHlwZX0gfSwKICAgICAgICAgICAgICAgICAgICBDc3NDbGFzcyAgICAgID0+ICRDc3NDbGFzcywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBnZXQgY3JlYXRlIHVzZXIgZGF0YQogICAgJFNMQXtDcmVhdGVCeU5hbWV9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU0xBe0NyZWF0ZUJ5fSwKICAgICk7CgogICAgIyBnZXQgY2hhbmdlIHVzZXIgZGF0YQogICAgJFNMQXtDaGFuZ2VCeU5hbWV9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU0xBe0NoYW5nZUJ5fSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01TTEFab29tJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICVTTEEsCiAgICAgICAgfSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=</File>
        <File Location="Kernel/Modules/CustomerTicketMessage.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA1ODFlMzZmYjNhZmZjMmEzODdkZDcwODI0ZTMwOWY0NTE2MzU0NWZlIC0gS2VybmVsL01vZHVsZXMvQ3VzdG9tZXJUaWNrZXRNZXNzYWdlLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpDdXN0b21lclRpY2tldE1lc3NhZ2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBLZXJuZWw6Okxhbmd1YWdlICAgICAgICAgICAgICBxdyhUcmFuc2xhdGFibGUpOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGZyb250ZW5kIHNwZWNpZmljIGNvbmZpZwogICAgbXkgJENvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiVGlja2V0OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgIG15ICRCYWNrZW5kT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgbXkgJER5bmFtaWNGaWVsZExpc3QgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWyAnVGlja2V0JywgJ0FydGljbGUnIF0sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgIG15ICREZWZpbml0aW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6TWFzaycpLT5EZWZpbml0aW9uR2V0KAogICAgICAgIE1hc2sgPT4gJFNlbGYtPntBY3Rpb259LAogICAgKSB8fCB7fTsKCiAgICAkU2VsZi0+e01hc2tEZWZpbml0aW9ufSA9ICREZWZpbml0aW9uLT57TWFza307CiAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZH0gICA9IHt9OwoKICAgICMgYWxpZ24gc3lzY29uZmlnIGFuZCB0aWNrZXQgbWFzayBkYXRhIEkKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkICggQHsgJER5bmFtaWNGaWVsZExpc3QgLy8gW10gfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZCk7CgogICAgICAgIG15ICRJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZSA9ICRCYWNrZW5kT2JqZWN0LT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGQsCiAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNDdXN0b21lckludGVyZmFjZUNhcGFibGUnLAogICAgICAgICk7CgogICAgICAgICMgcmVkdWNlIHRoZSBkeW5hbWljIGZpZWxkcyB0byBvbmx5IHRoZSBvbmVzIHRoYXQgYXJlIGRlc2lnbmVkIGZvciBjdXN0b21lciBpbnRlcmZhY2UKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlOwoKICAgICAgICBpZiAoIGV4aXN0cyAkRGVmaW5pdGlvbi0+e0R5bmFtaWNGaWVsZHN9eyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSApIHsKICAgICAgICAgICAgbXkgJFBhcmFtZXRlcnMgPSBkZWxldGUgJERlZmluaXRpb24tPntEeW5hbWljRmllbGRzfXsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gLy8ge307CgogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIGtleXMgJFBhcmFtZXRlcnMtPiUqICkgewogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZC0+eyRBdHRyaWJ1dGV9ID0gJFBhcmFtZXRlcnMtPnskQXR0cmlidXRlfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHVzaCAkU2VsZi0+e01hc2tEZWZpbml0aW9ufS0+QCosIHsKICAgICAgICAgICAgICAgIERGICAgICAgICA9PiAkRHluYW1pY0ZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgICAgICBNYW5kYXRvcnkgPT4gJENvbmZpZy0+e0R5bmFtaWNGaWVsZH17ICREeW5hbWljRmllbGQtPntOYW1lfSB9ID09IDIgPyAxIDogMCwKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGlmICggJENvbmZpZy0+e0R5bmFtaWNGaWVsZH17ICREeW5hbWljRmllbGQtPntOYW1lfSB9ID09IDIgKSB7CiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkLT57TWFuZGF0b3J5fSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRTZWxmLT57RHluYW1pY0ZpZWxkfXsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkOwogICAgfQoKICAgICMgYWxpZ24gc3lzY29uZmlnIGFuZCB0aWNrZXQgbWFzayBkYXRhIElJCiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZE5hbWUgKCBrZXlzICREZWZpbml0aW9uLT57RHluYW1pY0ZpZWxkc30tPiUqICkgewogICAgICAgICRTZWxmLT57RHluYW1pY0ZpZWxkfXskRHluYW1pY0ZpZWxkTmFtZX0gPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJER5bmFtaWNGaWVsZE5hbWUsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFBhcmFtZXRlcnMgPSAkRGVmaW5pdGlvbi0+e0R5bmFtaWNGaWVsZHN9eyREeW5hbWljRmllbGROYW1lfSAvLyB7fTsKCiAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBrZXlzICRQYXJhbWV0ZXJzLT4lKiApIHsKICAgICAgICAgICAgJFNlbGYtPntEeW5hbWljRmllbGR9eyREeW5hbWljRmllbGROYW1lfXskQXR0cmlidXRlfSA9ICRQYXJhbWV0ZXJzLT57JEF0dHJpYnV0ZX07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGZvcm0gaWQKICAgICRTZWxmLT57Rm9ybUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OkZvcm1DYWNoZScpLT5QcmVwYXJlRm9ybUlEKAogICAgICAgIFBhcmFtT2JqZWN0ICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyksCiAgICAgICAgTGF5b3V0T2JqZWN0ID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKSwKICAgICk7CgogICAgIyBtZXRob2RzIHdoaWNoIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcG9zc2libGUgdmFsdWVzIG9mIHRoZSBzdGFuZGFyZCBmaWVsZHMKICAgICRTZWxmLT57RmllbGRNZXRob2RzfSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEZpZWxkSUQgPT4gJ0Rlc3QnLAogICAgICAgICAgICBNZXRob2QgID0+IFwmX0dldFRvcwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBGaWVsZElEID0+ICdQcmlvcml0eUlEJywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRQcmlvcml0aWVzCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEZpZWxkSUQgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgICAgIE1ldGhvZCAgPT4gXCZfR2V0U2VydmljZXMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnU0xBSUQnLAogICAgICAgICAgICBNZXRob2QgID0+IFwmX0dldFNMQXMKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRmllbGRJRCA9PiAnVHlwZUlEJywKICAgICAgICAgICAgTWV0aG9kICA9PiBcJl9HZXRUeXBlcwogICAgICAgIH0sCiAgICBdOwoKICAgICMgZGVwZW5kZW5jaWVzIG9mIHN0YW5kYXJkIGZpZWxkcyB3aGljaCBhcmUgbm90IGRlZmluZWQgdmlhIEFDTHMKICAgICRTZWxmLT57SW50ZXJuYWxEZXBlbmRhbmN5fSA9IHsKICAgICAgICBTZXJ2aWNlSUQgPT4gewogICAgICAgICAgICBTTEFJRCA9PiAxLAogICAgICAgIH0sCiAgICB9OwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgZm9yIG15ICRLZXkgKHF3KCBTdWJqZWN0IEJvZHkgUHJpb3JpdHlJRCBUeXBlSUQgU2VydmljZUlEIFNMQUlEIERlc3QgRnJvbUNoYXRJRCkpIHsKICAgICAgICAkR2V0UGFyYW17JEtleX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkS2V5ICk7CiAgICB9CgogICAgIyBnZXQgRHluYW1pYyBmaWVsZHMgZnJvbSBQYXJhbU9iamVjdAogICAgbXkgJUR5bmFtaWNGaWVsZFZhbHVlczsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkQmFja2VuZE9iamVjdCAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CiAgICBteSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpGaWVsZFJlc3RyaWN0aW9ucycpOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIHZhbHVlcyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBleHRyYWN0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZyb20gdGhlIHdlYiByZXF1ZXN0CiAgICAgICAgJER5bmFtaWNGaWVsZFZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPQogICAgICAgICAgICAkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVHZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgKTsKICAgIH0KCiAgICAjIGNvbnZlcnQgZHluYW1pYyBmaWVsZCB2YWx1ZXMgaW50byBhIHN0cnVjdHVyZSBmb3IgQUNMcwogICAgbXkgJUR5bmFtaWNGaWVsZEFDTFBhcmFtZXRlcnM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIHNvcnQga2V5cyAlRHluYW1pY0ZpZWxkVmFsdWVzICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkVmFsdWVzeyREeW5hbWljRmllbGR9OwoKICAgICAgICAkRHluYW1pY0ZpZWxkQUNMUGFyYW1ldGVyc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZCB9ID0gJER5bmFtaWNGaWVsZFZhbHVlc3skRHluYW1pY0ZpZWxkfTsKICAgIH0KICAgICRHZXRQYXJhbXtEeW5hbWljRmllbGR9ID0gXCVEeW5hbWljRmllbGRBQ0xQYXJhbWV0ZXJzOwoKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkUXVldWVPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiMgUm90aGVyIE9TUyAvIElUU01Db3JlIC0gY2FsY3VsYXRlIFByaW9yaXR5IHZpYSBDSVAgbWF0cml4CiAgICBteSAkQ0lQQ2FsY3VsYXRlID0gJENvbmZpZy0+e1ByaW9yaXR5QnlDSVB9IC8vICRDb25maWdPYmplY3QtPkdldCgnSVRTTTo6RnJvbnRlbmQ6OkNJUEFsbG9jYXRpb25EZWZhdWx0Jyk7CiAgICBteSAkU2VydmljZU9iamVjdDsKICAgIG15ICRDSVBBbGxvY2F0ZU9iamVjdDsKICAgIGlmICggJENJUENhbGN1bGF0ZSApIHsKICAgICAgICAkU2VydmljZU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwogICAgICAgICRDSVBBbGxvY2F0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUnKTsKCiAgICAgICAgJFNlbGYtPntJbnRlcm5hbERlcGVuZGFuY3l9e1NlcnZpY2VJRH17UHJpb3JpdHlJRH0gICAgICAgICAgICAgICAgICAgID0gMTsKICAgICAgICAkU2VsZi0+e0ludGVybmFsRGVwZW5kYW5jeX17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9e1ByaW9yaXR5SUR9ICAgICAgPSAxOwogICAgICAgICRTZWxmLT57SW50ZXJuYWxEZXBlbmRhbmN5fXtEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fXtQcmlvcml0eUlEfSA9IDE7CiAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICBpZiAoICRHZXRQYXJhbXtGcm9tQ2hhdElEfSApIHsKICAgICAgICBpZiAoICEkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoYXRFbmdpbmU6OkFjdGl2ZScpICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdDaGF0IGlzIG5vdCBhY3RpdmUuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIGNoYXQgcGFydGljaXBhbnQKICAgICAgICBteSAlQ2hhdFBhcnRpY2lwYW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoYXQnKS0+Q2hhdFBhcnRpY2lwYW50Q2hlY2soCiAgICAgICAgICAgIENoYXRJRCAgICAgID0+ICRHZXRQYXJhbXtGcm9tQ2hhdElEfSwKICAgICAgICAgICAgQ2hhdHRlclR5cGUgPT4gJ0N1c3RvbWVyJywKICAgICAgICAgICAgQ2hhdHRlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISVDaGF0UGFydGljaXBhbnQgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIHBlcm1pc3Npb24uJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggISRTZWxmLT57U3ViYWN0aW9ufSApIHsKCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgbXkgJVNlcnZpY2VEYXRhOwogICAgICAgIGlmICggJEdldFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgIG15ICVTZXJ2aWNlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkR2V0UGFyYW17U2VydmljZUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBpZiB3ZSByZWFsbHkgc2hvdWxkIHVzZSBTZXJ2aWNlQ2F0YWxvZyBmdW5jdGlvbmFsaXR5CiAgICAgICAgICAgIGlmICggZXhpc3RzICRTZXJ2aWNle0Rlc3RRdWV1ZUlEfSApIHsKICAgICAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ID0gJEdldFBhcmFte1NlcnZpY2VJRH07CiAgICAgICAgICAgICAgICAkU2VydmljZURhdGF7VHlwZUlEfSAgICA9ICRHZXRQYXJhbXtUeXBlSUR9OwogICAgICAgICAgICB9CiAgICAgICAgfQojIEVPIFNlcnZpY2VDYXRhbG9nCgogICAgICAgICMgR2V0IGRlZmF1bHQgUXVldWUgSUQgaWYgbm9uZSBpcyBzZXQKICAgICAgICBteSAkUXVldWVEZWZhdWx0SUQ7CiAgICAgICAgaWYgKCAhJEdldFBhcmFte0Rlc3R9ICkgewogICAgICAgICAgICBteSAkUXVldWVEZWZhdWx0ID0gJENvbmZpZy0+eydRdWV1ZURlZmF1bHQnfSB8fCAnJzsKICAgICAgICAgICAgaWYgKCRRdWV1ZURlZmF1bHQpIHsKICAgICAgICAgICAgICAgICRRdWV1ZURlZmF1bHRJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVMb29rdXAoIFF1ZXVlID0+ICRRdWV1ZURlZmF1bHQgKTsKICAgICAgICAgICAgICAgIGlmICgkUXVldWVEZWZhdWx0SUQpIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17RGVzdH0gPSAkUXVldWVEZWZhdWx0SUQgLiAnfHwnIC4gJFF1ZXVlRGVmYXVsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRHZXRQYXJhbXtRdWV1ZUlEfSA9ICRRdWV1ZURlZmF1bHRJRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB3YXJuIGlmIHRoZXJlIGlzIG5vICh2YWxpZCkgZGVmYXVsdCBxdWV1ZSBhbmQgdGhlIGN1c3RvbWVyIGNhbid0IHNlbGVjdCBvbmUKICAgICAgICAgICAgZWxzaWYgKCAhJENvbmZpZy0+eydRdWV1ZSd9ICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQ2hlY2sgU3lzQ29uZmlnIHNldHRpbmcgZm9yICVzOjpRdWV1ZURlZmF1bHQuJywgJFNlbGYtPntBY3Rpb259ICksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXtEZXN0fSApIHsKICAgICAgICAgICAgbXkgKCAkUXVldWVJRFBhcmFtLCAkUXVldWVQYXJhbSApID0gc3BsaXQoIC9cfFx8LywgJEdldFBhcmFte0Rlc3R9ICk7CiAgICAgICAgICAgIG15ICRRdWV1ZUlETG9va3VwID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxvb2t1cCggUXVldWUgPT4gJFF1ZXVlUGFyYW0gKTsKICAgICAgICAgICAgaWYgKCAkUXVldWVJRExvb2t1cCAmJiAkUXVldWVJRExvb2t1cCBlcSAkUXVldWVJRFBhcmFtICkgewogICAgICAgICAgICAgICAgbXkgJEN1c3RvbWVyUGFuZWxPd25TZWxlY3Rpb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0N1c3RvbWVyUGFuZWxPd25TZWxlY3Rpb24nKTsKICAgICAgICAgICAgICAgIGlmICggJXsgJEN1c3RvbWVyUGFuZWxPd25TZWxlY3Rpb24gLy8ge30gfSApIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17RGVzdH0gPSAkUXVldWVJRFBhcmFtIC4gJ3x8JyAuICRDdXN0b21lclBhbmVsT3duU2VsZWN0aW9uLT57JFF1ZXVlUGFyYW19OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJFF1ZXVlSURMb29rdXA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRBdXRvc2VsZWN0ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBQ0w6OkF1dG9zZWxlY3QnKSB8fCB1bmRlZjsKCiAgICAgICAgIyBnYXRoZXIgZmllbGRzIHdoaWNoIGFyZSBzdXBwb3NlZCB0byBiZSBoaWRkZW4gd2hlbiBhdXRvc2VsZWN0ZWQKICAgICAgICBteSAkSGlkZUF1dG9zZWxlY3RlZEpTT047CiAgICAgICAgaWYgKCRBdXRvc2VsZWN0KSB7CiAgICAgICAgICAgIG15IEBIaWRlQXV0b3NlbGVjdGVkID0gZ3JlcCB7ICFyZWYoICRBdXRvc2VsZWN0LT57JF99ICkgJiYgJEF1dG9zZWxlY3QtPnskX30gPT0gMiB9IGtleXMgJXskQXV0b3NlbGVjdH07CiAgICAgICAgICAgIGlmICggJEF1dG9zZWxlY3QtPntEeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICAgICAgcHVzaCBASGlkZUF1dG9zZWxlY3RlZCwKICAgICAgICAgICAgICAgICAgICBtYXAgeyAiRHluYW1pY0ZpZWxkXyIgLiAkXyB9CiAgICAgICAgICAgICAgICAgICAgKCBncmVwIHsgJEF1dG9zZWxlY3QtPntEeW5hbWljRmllbGR9eyRffSA9PSAyIH0ga2V5cyAleyAkQXV0b3NlbGVjdC0+e0R5bmFtaWNGaWVsZH0gfSApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoQEhpZGVBdXRvc2VsZWN0ZWQpIHsKICAgICAgICAgICAgICAgIG15ICRKU09OT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKTsKICAgICAgICAgICAgICAgICRIaWRlQXV0b3NlbGVjdGVkSlNPTiA9ICRKU09OT2JqZWN0LT5FbmNvZGUoCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiBcQEhpZGVBdXRvc2VsZWN0ZWQsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHRyYWNrIGNoYW5naW5nIHN0YW5kYXJkIGZpZWxkcwogICAgICAgIG15ICRBQ0xQcmVzZWxlY3Rpb247CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldEFDTDo6QUNMUHJlc2VsZWN0aW9uJykgKSB7CgogICAgICAgICAgICAjIGdldCBjYWNoZWQgcHJlc2VsZWN0aW9uIHJ1bGVzCiAgICAgICAgICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwogICAgICAgICAgICAkQUNMUHJlc2VsZWN0aW9uID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgICAgICBUeXBlID0+ICdUaWNrZXRBQ0wnLAogICAgICAgICAgICAgICAgS2V5ICA9PiAnUHJlc2VsZWN0aW9uJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJEFDTFByZXNlbGVjdGlvbiApIHsKICAgICAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24gPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPlNldEFDTFByZXNlbGVjdGlvbkNhY2hlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICVDb252ZXJnZW5jZSA9ICgKICAgICAgICAgICAgU3RkRmllbGRzID0+IDAsCiAgICAgICAgICAgIEZpZWxkcyAgICA9PiAwLAogICAgICAgICk7CiAgICAgICAgbXkgJUNoYW5nZWRFbGVtZW50czsKICAgICAgICBteSAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydDsKICAgICAgICBteSAlQ2hhbmdlZFN0ZEZpZWxkczsKCiMgUm90aGVyIE9TUyAvIElUU01Db3JlIC0gY2FsY3VsYXRlIFByaW9yaXR5IHZpYSBDSVAgbWF0cml4CiAgICAgICAgaWYgKCAkQ0lQQ2FsY3VsYXRlICYmICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fQogICAgICAgICAgICAmJiAoICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9IHx8ICRHZXRQYXJhbXtTZXJ2aWNlSUR9ICkgKSB7CgogICAgICAgICAgICAjIGlmIHdlIGhhdmUgYW4gaW5pdGlhbCBjcml0aWNhbGl0eSBhbmQgaW1wYWN0LCB0cmlnZ2VyIHByaW9yaXR5IGNhbGN1bGF0aW9uCiAgICAgICAgICAgICRDaGFuZ2VkRWxlbWVudHN7RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9ID0gMTsKICAgICAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICAgICAgbXkgJExvb3BQcm90ZWN0aW9uID0gMTAwOwogICAgICAgIG15ICVTdGRGaWVsZFZhbHVlczsKICAgICAgICBteSAlRHluRmllbGRTdGF0ZXMgPSAoCiAgICAgICAgICAgIFZpc2liaWxpdHkgPT4ge30sCiAgICAgICAgICAgIEZpZWxkcyAgICAgPT4ge30sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJEluaXRpYWxSdW4gPSAxOwoKICAgICAgICB1bnRpbCAoICRDb252ZXJnZW5jZXtGaWVsZHN9ICkgewoKICAgICAgICAgICAgIyBkZXRlcm1pbmUgc3RhbmRhcmQgZmllbGQgaW5wdXQKICAgICAgICAgICAgdW50aWwgKCAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSApIHsKCiAgICAgICAgICAgICAgICBteSAlTmV3Q2hhbmdlZEVsZW1lbnRzOwoKICAgICAgICAgICAgICAgICMgd2hpY2ggc3RhbmRhcmQgZmllbGRzIHRvIGNoZWNrIC0gRmllbGRJRCA9PiBHZXRQYXJhbVZhbHVlIChuZWNlc3NhcnkgZm9yIERlc3QpCiAgICAgICAgICAgICAgICBteSAlQ2hlY2sgPSAoCiAgICAgICAgICAgICAgICAgICAgRGVzdCAgICAgICA9PiAnUXVldWVJRCcsCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHlJRCA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEICA9PiAnU2VydmljZUlEJywKICAgICAgICAgICAgICAgICAgICBTTEFJRCAgICAgID0+ICdTTEFJRCcsCiAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgICA9PiAnVHlwZUlEJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICRBQ0xQcmVzZWxlY3Rpb24gJiYgISRJbml0aWFsUnVuICkgewogICAgICAgICAgICAgICAgICAgIEZJRUxEOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRmllbGRJRCAoIHNvcnQga2V5cyAlQ2hlY2sgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBQ0xQcmVzZWxlY3Rpb24tPntGaWVsZHN9eyRGaWVsZElEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRGaWVsZElEIG5vdCBkZWZpbmVkIGluIFRpY2tldEFDTCBwcmVzZWxlY3Rpb24gcnVsZXMhIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+eyRGaWVsZElEfSAmJiAkQ2hhbmdlZEVsZW1lbnRzeyRGaWVsZElEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRFbGVtZW50ICggc29ydCBrZXlzICVDaGFuZ2VkRWxlbWVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFDTFByZXNlbGVjdGlvbi0+e1J1bGVzfXtUaWNrZXR9eyRFbGVtZW50fXskRmllbGRJRH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkU2VsZi0+e0ludGVybmFsRGVwZW5kYW5jeX17JEVsZW1lbnR9eyRGaWVsZElEfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEFDTFByZXNlbGVjdGlvbi0+e0ZpZWxkc317JEVsZW1lbnR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEVsZW1lbnQgbm90IGRlZmluZWQgaW4gVGlja2V0QUNMIHByZXNlbGVjdGlvbiBydWxlcyEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGRlbGV0ZSB1bmFmZmVjdGVkIGZpZWxkcwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJENoZWNreyRGaWVsZElEfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBmb3IgZWFjaCBzdGFuZGFyZCBmaWVsZCB3aGljaCBoYXMgdG8gYmUgY2hlY2tlZCwgcnVuIHRoZSBkZWZpbmVkIG1ldGhvZAogICAgICAgICAgICAgICAgTUVUSE9EOgogICAgICAgICAgICAgICAgZm9yIG15ICRGaWVsZCAoIEB7ICRTZWxmLT57RmllbGRNZXRob2RzfSB9ICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgTUVUSE9EIGlmICEkQ2hlY2t7ICRGaWVsZC0+e0ZpZWxkSUR9IH07CgogICAgICAgICAgICAgICAgICAgICMgdXNlICRDaGVja3sgJEZpZWxkLT57RmllbGRJRH0gfSBmb3IgRGVzdD0+UXVldWVJRAogICAgICAgICAgICAgICAgICAgICRTdGRGaWVsZFZhbHVlc3sgJENoZWNreyAkRmllbGQtPntGaWVsZElEfSB9IH0gPSAkRmllbGQtPntNZXRob2R9LT4oCiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICAgPT4gJEdldFBhcmFte1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlcyAgICAgICA9PiAkU3RkRmllbGRWYWx1ZXN7U2VydmljZUlEfSB8fCB1bmRlZiwgICAgIyBuZWVkZWQgZm9yIFNMQUlECiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBzcGVjaWFsIHN0dWZmIGZvciBRdWV1ZUlEL0Rlc3Q6IERlc3QgaXMgIlF1ZXVlSUR8fFF1ZXVlTmFtZSIgPT4gIlF1ZXVlTmFtZSI7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkRmllbGQtPntGaWVsZElEfSBlcSAnRGVzdCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFRPczoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRRdWV1ZUlEICggc29ydCBrZXlzICV7ICRTdGRGaWVsZFZhbHVlc3tRdWV1ZUlEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBUT3MgaWYgKCAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH17JFF1ZXVlSUR9IGVxICctJyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFN0ZEZpZWxkVmFsdWVze0Rlc3R9eyIkUXVldWVJRHx8JFN0ZEZpZWxkVmFsdWVze1F1ZXVlSUR9eyAkUXVldWVJRCB9In0gPSAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH17JFF1ZXVlSUR9OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGN1cnJlbnQgc2VsZWN0aW9uIG9mIFF1ZXVlSUQgKERlc3Qgd2lsbCBiZSBkb25lIHRvZ2V0aGVyIHdpdGggdGhlIG90aGVyIGZpZWxkcykKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17UXVldWVJRH0gJiYgISRTdGRGaWVsZFZhbHVlc3tEZXN0fXsgJEdldFBhcmFte0Rlc3R9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBhdXRvc2VsZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtRdWV1ZUlEfSAmJiAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+e0Rlc3R9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5BdXRvc2VsZWN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzID0+ICRTdGRGaWVsZFZhbHVlc3tRdWV1ZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgojIFJvdGhlciBPU1MgLyBJVFNNQ29yZSAtIGNhbGN1bGF0ZSBQcmlvcml0eSB2aWEgQ0lQIG1hdHJpeAogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEZpZWxkLT57RmllbGRJRH0gZXEgJ1ByaW9yaXR5SUQnICYmICRDSVBDYWxjdWxhdGUgJiYgJEdldFBhcmFte0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgdGhlIGNyaXRpY2FsaXR5IGVpdGhlciBmcm9tIHRoZSBtYW51YWxseSBzZXQgZHluYW1pYyBmaWVsZCwgb3IgdGhlIHNlcnZpY2UKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJENyaXRpY2FsaXR5ID0gJEdldFBhcmFte0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENyaXRpY2FsaXR5ICYmICRHZXRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJVNlcnZpY2UgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJEdldFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDcml0aWNhbGl0eSA9ICRTZXJ2aWNle0NyaXRpY2FsaXR5fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ3JpdGljYWxpdHkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZWNhbGN1bGF0ZSB0aGUgcHJpb3JpdHkgaWYgYW55IG9mIHRoZSBpbXBhY3RpbmcgZWxlbWVudHMgY2hhbmdlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ2hhbmdlZEVsZW1lbnRze0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSB8fCAkQ2hhbmdlZEVsZW1lbnRze1NlcnZpY2VJRH0gfHwgJENoYW5nZWRFbGVtZW50c3tEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+UHJpb3JpdHlBbGxvY2F0aW9uR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkQ3JpdGljYWxpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRTdGRGaWVsZFZhbHVlc3tQcmlvcml0eUlEfXsgJFByaW9yaXR5SUQgfSAmJiAkUHJpb3JpdHlJRCBuZSAkR2V0UGFyYW17UHJpb3JpdHlJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtQcmlvcml0eUlEfSAgICAgICAgICAgPSAkUHJpb3JpdHlJRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ld0NoYW5nZWRFbGVtZW50c3tQcmlvcml0eUlEfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDaGFuZ2VkU3RkRmllbGRze1ByaW9yaXR5SUR9ICAgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIHdlIGVuZm9yY2UgQ0lQQWxsb2NhdGlvbiBpbiBhbnkgY2FzZSBkZWxldGUgYWxsIG90aGVyIHByaW9yaXR5IG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFte1ByaW9yaXR5SUR9ICYmICRDSVBDYWxjdWxhdGUgPT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU3RkRmllbGRWYWx1ZXN7UHJpb3JpdHlJRH0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtQcmlvcml0eUlEfSA9PiAkU3RkRmllbGRWYWx1ZXN7UHJpb3JpdHlJRH17ICRHZXRQYXJhbXtQcmlvcml0eUlEfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB3aGV0aGVyIGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWUgaXMgc3RpbGwgdmFsaWQgZm9yIHRoZSBmaWVsZAogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9CiAgICAgICAgICAgICAgICAgICAgICAgICYmICEkU3RkRmllbGRWYWx1ZXN7ICRGaWVsZC0+e0ZpZWxkSUR9IH17ICRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSB9CiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbm90IGVtcHR5IHRoZSBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gICAgICAgICAgID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICROZXdDaGFuZ2VkRWxlbWVudHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlZFN0ZEZpZWxkc3sgJEZpZWxkLT57RmllbGRJRH0gfSAgID0gMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgYXV0b3NlbGVjdAogICAgICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSAmJiAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+eyAkRmllbGQtPntGaWVsZElEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPkF1dG9zZWxlY3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiAkU3RkRmllbGRWYWx1ZXN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ld0NoYW5nZWRFbGVtZW50c3sgJEZpZWxkLT57RmllbGRJRH0gfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlZFN0ZEZpZWxkc3sgJEZpZWxkLT57RmllbGRJRH0gfSAgID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICElTmV3Q2hhbmdlZEVsZW1lbnRzICkgewogICAgICAgICAgICAgICAgICAgICRDb252ZXJnZW5jZXtTdGRGaWVsZHN9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHMgPSAlTmV3Q2hhbmdlZEVsZW1lbnRzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0ID0gKAogICAgICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0LAogICAgICAgICAgICAgICAgICAgICVOZXdDaGFuZ2VkRWxlbWVudHMsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICggJExvb3BQcm90ZWN0aW9uLS0gPCAxICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiUmFuIGludG8gdW5yZXNvbHZhYmxlIGxvb3AhIiwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIFRPRE86IGlzIHJldHVybmluZyBhbiBlbXB0eSBsaXN0IHJlYXNvbmFibGU/CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50cyAgICAgICAgPSAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydDsKICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50c0RGU3RhcnQgPSAoKTsKCiAgICAgICAgICAgICMgY2hlY2sgZHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgbXkgJUN1ckZpZWxkU3RhdGVzOwogICAgICAgICAgICBpZiAoICVDaGFuZ2VkRWxlbWVudHMgfHwgJEluaXRpYWxSdW4gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgdmFsdWVzIGFuZCB2aXNpYmlsaXR5IG9mIGR5bmFtaWMgZmllbGRzCiAgICAgICAgICAgICAgICAlQ3VyRmllbGRTdGF0ZXMgPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPkdldEZpZWxkU3RhdGVzKAogICAgICAgICAgICAgICAgICAgIFRpY2tldE9iamVjdCAgICAgICAgICAgICAgPT4gJFRpY2tldE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzICAgICAgICAgICAgID0+ICRTZWxmLT57RHluYW1pY0ZpZWxkfSwKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0+ICRCYWNrZW5kT2JqZWN0LAogICAgICAgICAgICAgICAgICAgIENoYW5nZWRFbGVtZW50cyAgICAgICAgICAgPT4gXCVDaGFuZ2VkRWxlbWVudHMsICAgICAgICMgb3B0aW9uYWwgdG8gcmVkdWNlIEFDTCBldmFsdWF0aW9uCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIEF1dG9zZWxlY3QgICAgICA9PiAkQXV0b3NlbGVjdCwKICAgICAgICAgICAgICAgICAgICBBQ0xQcmVzZWxlY3Rpb24gPT4gJEFDTFByZXNlbGVjdGlvbiwKICAgICAgICAgICAgICAgICAgICBMb29wUHJvdGVjdGlvbiAgPT4gXCRMb29wUHJvdGVjdGlvbiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjb21iaW5lIEZpZWxkU3RhdGVzCiAgICAgICAgICAgICAgICAkRHluRmllbGRTdGF0ZXN7RmllbGRzfSA9IHsKICAgICAgICAgICAgICAgICAgICAleyAkRHluRmllbGRTdGF0ZXN7RmllbGRzfSB9LAogICAgICAgICAgICAgICAgICAgICV7ICRDdXJGaWVsZFN0YXRlc3tGaWVsZHN9IH0sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgJER5bkZpZWxkU3RhdGVze1Zpc2liaWxpdHl9ID0gewogICAgICAgICAgICAgICAgICAgICV7ICREeW5GaWVsZFN0YXRlc3tWaXNpYmlsaXR5fSB9LAogICAgICAgICAgICAgICAgICAgICV7ICRDdXJGaWVsZFN0YXRlc3tWaXNpYmlsaXR5fSB9LAogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAjIHN0b3JlIG5ldyB2YWx1ZXMKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtEeW5hbWljRmllbGR9ID0gewogICAgICAgICAgICAgICAgICAgICV7ICRHZXRQYXJhbXtEeW5hbWljRmllbGR9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze05ld1ZhbHVlc30gfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWYgZHluYW1pYyBmaWVsZHMgY2hhbmdlZCwgY2hlY2sgc3RhbmRhcmQgZmllbGRzIGFnYWluCiAgICAgICAgICAgIGlmICggJUN1ckZpZWxkU3RhdGVzICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQ3VyRmllbGRTdGF0ZXN7TmV3VmFsdWVzfSApICkgewogICAgICAgICAgICAgICAgJENvbnZlcmdlbmNle1N0ZEZpZWxkc30gPSAwOwogICAgICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50cyA9IG1hcCB7ICRfID0+IDEgfSBrZXlzICV7ICRDdXJGaWVsZFN0YXRlc3tOZXdWYWx1ZXN9IH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkQ29udmVyZ2VuY2V7RmllbGRzfSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRJbml0aWFsUnVuID0gMDsKICAgICAgICB9CgogICAgICAgIG15ICVEeW5hbWljRmllbGRQb3NzaWJsZVZhbHVlcyA9IG1hcCB7CiAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRfID0+IGRlZmluZWQgJER5bkZpZWxkU3RhdGVze0ZpZWxkc317JF99CiAgICAgICAgICAgICAgICA/ICREeW5GaWVsZFN0YXRlc3tGaWVsZHN9eyRffXtQb3NzaWJsZVZhbHVlc30KICAgICAgICAgICAgICAgIDogdW5kZWYKICAgICAgICB9ICgga2V5cyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqICk7CgogICAgICAgIG15ICRBQ0xSZXN1bHRTdGQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBBY3Rpb24gICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgID0+ICdGb3JtU3RkJywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJy0nLAogICAgICAgICAgICBEYXRhICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBBcnRpY2xlID0+ICdBcnRpY2xlJywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSAlVmlzaWJpbGl0eVN0ZDsKCiAgICAgICAgaWYgKCRBQ0xSZXN1bHRTdGQpIHsKICAgICAgICAgICAgbXkgJUFjbERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CiAgICAgICAgICAgIGZvciBteSAkRmllbGQgKCBzb3J0IGtleXMgJUFjbERhdGEgKSB7CiAgICAgICAgICAgICAgICAkVmlzaWJpbGl0eVN0ZHskRmllbGR9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRWaXNpYmlsaXR5U3Rke0FydGljbGV9ID0gMTsKICAgICAgICB9CgogICAgICAgICMgcHJpbnQgZm9ybSAuLi4KICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJIZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBUb1NlbGVjdGVkICAgICAgID0+ICRHZXRQYXJhbXtEZXN0fSwKICAgICAgICAgICAgRnJvbUNoYXRJRCAgICAgICA9PiAkR2V0UGFyYW17RnJvbUNoYXRJRH0gfHwgJycsCiAgICAgICAgICAgIEhpZGVBdXRvc2VsZWN0ZWQgPT4gJEhpZGVBdXRvc2VsZWN0ZWRKU09OLAogICAgICAgICAgICBWaXNpYmlsaXR5ICAgICAgID0+ICREeW5GaWVsZFN0YXRlc3tWaXNpYmlsaXR5fSwKICAgICAgICAgICAgVmlzaWJpbGl0eVN0ZCAgICA9PiBcJVZpc2liaWxpdHlTdGQsCiAgICAgICAgICAgIERGUG9zc2libGVWYWx1ZXMgPT4gXCVEeW5hbWljRmllbGRQb3NzaWJsZVZhbHVlcywKIyBSb3RoZXIgT1NTIC8gU2VydmljZUNhdGFsb2cKICAgICAgICAgICAgU2VydmljZURhdGEgICAgICA9PiBcJVNlcnZpY2VEYXRhLAojIEVPIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyTmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJGb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3RvcmVOZXcnICkgewoKICAgICAgICBteSAkQXJ0aWNsZU9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CiAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JDaGFubmVsKCBDaGFubmVsTmFtZSA9PiAnSW50ZXJuYWwnICk7CgogICAgICAgIG15ICROZXh0U2NyZWVuID0gJENvbmZpZy0+e05leHRTY3JlZW5BZnRlck5ld1RpY2tldH07CiAgICAgICAgbXkgJUVycm9yOwoKICAgICAgICAjIGdldCBkZXN0aW5hdGlvbiBxdWV1ZQogICAgICAgIG15ICREZXN0ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Rlc3QnICkgfHwgJyc7CiAgICAgICAgbXkgKCAkTmV3UXVldWVJRCwgJFRvICkgPSBzcGxpdCggL1x8XHwvLCAkRGVzdCApOwogICAgICAgIGlmICggISRUbyApIHsKICAgICAgICAgICAgJE5ld1F1ZXVlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTmV3UXVldWVJRCcgKSB8fCAnJzsKICAgICAgICAgICAgJFRvICAgICAgICAgPSAnU3lzdGVtJzsKICAgICAgICB9CgogICAgICAgICMgZmFsbGJhY2ssIGlmIG5vIGRlc3RpbmF0aW9uIGlzIGdpdmVuCiAgICAgICAgaWYgKCAhJE5ld1F1ZXVlSUQgKSB7CiAgICAgICAgICAgIG15ICRRdWV1ZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdRdWV1ZScgKQogICAgICAgICAgICAgICAgfHwgJENvbmZpZy0+eydRdWV1ZURlZmF1bHQnfQogICAgICAgICAgICAgICAgfHwgJyc7CiAgICAgICAgICAgIGlmICgkUXVldWUpIHsKICAgICAgICAgICAgICAgIG15ICRRdWV1ZUlEID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxvb2t1cCggUXVldWUgPT4gJFF1ZXVlICk7CiAgICAgICAgICAgICAgICAkTmV3UXVldWVJRCA9ICRRdWV1ZUlEOwogICAgICAgICAgICAgICAgJFRvICAgICAgICAgPSAkUXVldWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRHZXRQYXJhbXtOZXdRdWV1ZUlEfSA9ICROZXdRdWV1ZUlEOwoKICAgICAgICAjIHVzZSBkZWZhdWx0IGlmIHRpY2tldCB0eXBlIGlzIG5vdCBhdmFpbGFibGUgaW4gc2NyZWVuIGJ1dCBhY3RpdmF0ZWQgb24gc3lzdGVtCiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6VHlwZScpICYmICEkQ29uZmlnLT57J1RpY2tldFR5cGUnfSApIHsKICAgICAgICAgICAgbXkgJVR5cGVMaXN0ID0gcmV2ZXJzZSAkVGlja2V0T2JqZWN0LT5UaWNrZXRUeXBlTGlzdCgKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJEdldFBhcmFte1R5cGVJRH0gPSAkVHlwZUxpc3R7ICRDb25maWctPnsnVGlja2V0VHlwZURlZmF1bHQnfSB9OwogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17VHlwZUlEfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NoZWNrIFN5c0NvbmZpZyBzZXR0aW5nIGZvciAlczo6VGlja2V0VHlwZURlZmF1bHQuJywgJFNlbGYtPntBY3Rpb259ICksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJFVwbG9hZENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGUnKTsKCiAgICAgICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIG1ldGEgZGF0YQogICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICk7CgojIFJvdGhlciBPU1MgLyBJVFNNQ29yZSAtIGNhbGN1bGF0ZSBQcmlvcml0eSB2aWEgQ0lQIG1hdHJpeAogICAgICAgIGlmICggJENJUENhbGN1bGF0ZSAmJiAkQ0lQQ2FsY3VsYXRlID09IDIgJiYgJEdldFBhcmFte0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9ICYmICRDb25maWctPntQcmlvcml0eX0gKSB7CgogICAgICAgICAgICAjIGdldCB0aGUgY3JpdGljYWxpdHkgZWl0aGVyIGZyb20gdGhlIG1hbnVhbGx5IHNldCBkeW5hbWljIGZpZWxkLCBvciB0aGUgc2VydmljZQogICAgICAgICAgICBteSAkQ3JpdGljYWxpdHkgPSAkR2V0UGFyYW17RHluYW1pY0ZpZWxkX0lUU01Dcml0aWNhbGl0eX07CgogICAgICAgICAgICBpZiAoICEkQ3JpdGljYWxpdHkgJiYgJEdldFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICAgICBteSAlU2VydmljZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkR2V0UGFyYW17U2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJENyaXRpY2FsaXR5ID0gJFNlcnZpY2V7Q3JpdGljYWxpdHl9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRDcml0aWNhbGl0eSApIHsKICAgICAgICAgICAgICAgIG15ICRQcmlvcml0eUlEID0gJENJUEFsbG9jYXRlT2JqZWN0LT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJENyaXRpY2FsaXR5LAogICAgICAgICAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAkUHJpb3JpdHlJRCBuZSAkR2V0UGFyYW17UHJpb3JpdHlJRH0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuOyB3ZSBqdXN0IGVuZm9yY2UgdGhlIHByaW8gYW5kIHdyaXRlIGFuIGVycm9yIHRvIHRoZSBsb2cgZmlsZSBoZXJlCiAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJHb3QgUHJpb3JpdHlJRCAnJEdldFBhcmFte1ByaW9yaXR5SUR9JywgYnV0IENJUCBlbmZvcmNlcyAnJFByaW9yaXR5SUQnIC0gb3ZlcnJpZGluZyB0aGUgZnJvbnRlbmQgdmFsdWUuIiwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UHJpb3JpdHlJRH0gPSAkUHJpb3JpdHlJRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KIyBFTyBJVFNNQ29yZQoKICAgICAgICAjIHNraXAgdmFsaWRhdGlvbiBvZiBoaWRkZW4gZmllbGRzCiAgICAgICAgbXkgJVZpc2liaWxpdHk7CgogICAgICAgICMgdHJhbnNmb3JtIGR5bmFtaWMgZmllbGQgZGF0YSBpbnRvIERGTmFtZSA9PiBERk5hbWUgcGFpcgogICAgICAgIG15ICVEeW5hbWljRmllbGRBY2wgPSBtYXAgeyAkXyA9PiAkXyB9IGtleXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKjsKCiAgICAgICAgIyBjYWxsIHRpY2tldCBBQ0xzIGZvciBEeW5hbWljRmllbGRzIHRvIGNoZWNrIGZpZWxkIHZpc2liaWxpdHkKICAgICAgICBteSAkQUNMUmVzdWx0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICAgPT4gJ0Zvcm0nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlICA9PiAnLScsCiAgICAgICAgICAgIERhdGEgICAgICAgICAgID0+IFwlRHluYW1pY0ZpZWxkQWNsLAogICAgICAgICk7CiAgICAgICAgaWYgKCRBQ0xSZXN1bHQpIHsKICAgICAgICAgICAgJVZpc2liaWxpdHkgPSBtYXAgeyAnRHluYW1pY0ZpZWxkXycgLiAkXyA9PiAwIH0ga2V5cyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqOwogICAgICAgICAgICBteSAlQWNsRGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKTsKICAgICAgICAgICAgZm9yIG15ICRGaWVsZCAoIHNvcnQga2V5cyAlQWNsRGF0YSApIHsKICAgICAgICAgICAgICAgICRWaXNpYmlsaXR5eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQgfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICVWaXNpYmlsaXR5ID0gbWFwIHsgJ0R5bmFtaWNGaWVsZF8nIC4gJF8gPT4gMSB9IGtleXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKjsKICAgICAgICB9CgogICAgICAgICMgcmVtZW1iZXIgZHluYW1pYyBmaWVsZCB2YWxpZGF0aW9uIHJlc3VsdHMgaWYgZXJyb25lb3VzCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZFZhbGlkYXRpb25SZXN1bHQ7CiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZFBvc3NpYmxlVmFsdWVzOwoKICAgICAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIHZhbHVlcyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICBteSAkUG9zc2libGVWYWx1ZXNGaWx0ZXI7CgogICAgICAgICAgICBteSAkSXNBQ0xSZWR1Y2libGUgPSAkQmFja2VuZE9iamVjdC0+SGFzQmVoYXZpb3IoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNBQ0xSZWR1Y2libGUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRJc0FDTFJlZHVjaWJsZSkgewoKICAgICAgICAgICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgICAgICAgICBteSAkUG9zc2libGVWYWx1ZXMgPSAkQmFja2VuZE9iamVjdC0+UG9zc2libGVWYWx1ZXNHZXQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgZmllbGQgaGFzIFBvc3NpYmxlVmFsdWVzIHByb3BlcnR5IGluIGl0cyBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCRQb3NzaWJsZVZhbHVlcykgKSB7CgogICAgICAgICAgICAgICAgICAgICMgY29udmVydCBwb3NzaWJsZSB2YWx1ZXMga2V5ID0+IHZhbHVlIHRvIGtleSA9PiBrZXkgZm9yIEFDTHMgdXNpbmcgYSBIYXNoIHNsaWNlCiAgICAgICAgICAgICAgICAgICAgbXkgJUFjbERhdGEgPSAleyRQb3NzaWJsZVZhbHVlc307CiAgICAgICAgICAgICAgICAgICAgQEFjbERhdGF7IGtleXMgJUFjbERhdGEgfSA9IGtleXMgJUFjbERhdGE7CgogICAgICAgICAgICAgICAgICAgICMgc2V0IHBvc3NpYmxlIHZhbHVlcyBmaWx0ZXIgZnJvbSBBQ0xzCiAgICAgICAgICAgICAgICAgICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5UeXBlICAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgICA9PiBcJUFjbERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGlmICgkQUNMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVGaWx0ZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgRmlsZXIga2V5ID0+IGtleSBiYWNrIHRvIGtleSA9PiB2YWx1ZSB1c2luZyBtYXAKICAgICAgICAgICAgICAgICAgICAgICAgJXskUG9zc2libGVWYWx1ZXNGaWx0ZXJ9ID0gbWFwIHsgJF8gPT4gJFBvc3NpYmxlVmFsdWVzLT57JF99IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgJUZpbHRlcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICREeW5hbWljRmllbGRQb3NzaWJsZVZhbHVlc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkUG9zc2libGVWYWx1ZXNGaWx0ZXI7CgogICAgICAgICAgICAjIGRvIG5vdCB2YWxpZGF0ZSBvbiBpbnNpc2libGUgZmllbGRzCiAgICAgICAgICAgIGlmICggJFZpc2liaWxpdHl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICkgewoKICAgICAgICAgICAgICAgIG15ICRWYWxpZGF0aW9uUmVzdWx0ID0gJEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFZhbHVlVmFsaWRhdGUoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlc0ZpbHRlciA9PiAkUG9zc2libGVWYWx1ZXNGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAoKICAgICAgICAgICAgICAgICAgICAjIE1hbmRhdG9yeSBpcyBhZGRlZCB0byB0aGUgY29uZmlncyBieSAkU2VsZi0+bmV3CiAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5ID0+ICREeW5hbWljRmllbGRDb25maWctPntNYW5kYXRvcnl9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkVmFsaWRhdGlvblJlc3VsdCkgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVySGVhZGVyKAogICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ0Vycm9yJyksCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NvdWxkIG5vdCBwZXJmb3JtIHZhbGlkYXRpb24gb24gZmllbGQgJXMhJywgJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfSApLAogICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRm9vdGVyKCk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcHJvcGFnYXRlIHZhbGlkYXRpb24gZXJyb3IgdG8gdGhlIEVycm9yIHZhcmlhYmxlIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSBmcm9udGVuZAogICAgICAgICAgICAgICAgaWYgKCAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICAgICAgICAgICAgICAgICAgICAgICAgPSAnIFNlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkVmFsaWRhdGlvblJlc3VsdHsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkVmFsaWRhdGlvblJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyByZXdyYXAgYm9keSBpZiBubyByaWNoIHRleHQgaXMgdXNlZAogICAgICAgIGlmICggJEdldFBhcmFte0JvZHl9ICYmICEkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgJEdldFBhcmFte0JvZHl9ID0gJExheW91dE9iamVjdC0+V3JhcFBsYWluVGV4dCgKICAgICAgICAgICAgICAgIE1heENoYXJhY3RlcnMgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUnKSwKICAgICAgICAgICAgICAgIFBsYWluVGV4dCAgICAgPT4gJEdldFBhcmFte0JvZHl9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBpZiB0aGVyZSBpcyBGcm9tQ2hhdElELCBnZXQgcmVsYXRlZCBtZXNzYWdlcyBhbmQgcHJlcGVuZCB0aGVtIHRvIGJvZHkKICAgICAgICBpZiAoICRHZXRQYXJhbXtGcm9tQ2hhdElEfSApIHsKICAgICAgICAgICAgbXkgQENoYXRNZXNzYWdlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGF0JyktPkNoYXRNZXNzYWdlTGlzdCgKICAgICAgICAgICAgICAgIENoYXRJRCA9PiAkR2V0UGFyYW17RnJvbUNoYXRJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBmb3IgbXkgJE1lc3NhZ2UgKEBDaGF0TWVzc2FnZXMpIHsKICAgICAgICAgICAgICAgICRNZXNzYWdlLT57TWVzc2FnZVRleHR9ID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCgKICAgICAgICAgICAgICAgICAgICBUZXh0ICAgICAgICA9PiAkTWVzc2FnZS0+e01lc3NhZ2VUZXh0fSwKICAgICAgICAgICAgICAgICAgICBMaW5rRmVhdHVyZSA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBxdWV1ZQogICAgICAgIGlmICggISROZXdRdWV1ZUlEICkgewogICAgICAgICAgICAkRXJyb3J7UXVldWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIHByZXZlbnQgdGFtcGVyIHdpdGggKFF1ZXVlL0Rlc3QpLCBzZWUgYnVnIzk0MDgKICAgICAgICBpZiAoJE5ld1F1ZXVlSUQpIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBvcmlnaW5hbCBsaXN0IG9mIHF1ZXVlcyB0byBkaXNwbGF5CiAgICAgICAgICAgIG15ICRUb3MgPSAkU2VsZi0+X0dldFRvcygKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgPT4gJE5ld1F1ZXVlSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIGlmIGN1cnJlbnQgc2VsZWN0ZWQgUXVldWVJRCBleGlzdHMgaW4gdGhlIGxpc3Qgb2YgcXVldWVzLFwKICAgICAgICAgICAgIyBvdGhlcndpc2UgcmlzZSBhbiBlcnJvcgogICAgICAgICAgICBpZiAoICEkVG9zLT57JE5ld1F1ZXVlSUR9ICkgewoKICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgcXVldWUgaXMgYWNjZXNzaWJsZSBieSBjdXN0b21lciB1c2VyIChzZWUgYnVnIzE0ODg2KS4KICAgICAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldE1lc3NhZ2UnKS0+e1F1ZXVlfSA9PSAwICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcntRdWV1ZURpc2FibGVkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7UXVldWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2V0IHRoZSBjb3JyZWN0IHF1ZXVlIG5hbWUgaW4gJFRvIGlmIGl0IHdhcyBhbHRlcmVkCiAgICAgICAgICAgIGlmICggJFRvIG5lICRUb3MtPnskTmV3UXVldWVJRH0gKSB7CiAgICAgICAgICAgICAgICAkVG8gPSAkVG9zLT57JE5ld1F1ZXVlSUR9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkQUNMUmVzdWx0U3RkID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgICA9PiAnRm9ybVN0ZCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgID0+ICctJywKICAgICAgICAgICAgRGF0YSAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgQXJ0aWNsZSA9PiAnQXJ0aWNsZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJVZpc2liaWxpdHlTdGQ7CgogICAgICAgIGlmICgkQUNMUmVzdWx0U3RkKSB7CiAgICAgICAgICAgIG15ICVBY2xEYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpOwogICAgICAgICAgICBmb3IgbXkgJEZpZWxkICggc29ydCBrZXlzICVBY2xEYXRhICkgewogICAgICAgICAgICAgICAgJFZpc2liaWxpdHlTdGR7JEZpZWxkfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgICAkVmlzaWJpbGl0eVN0ZHtBcnRpY2xlfSA9IDE7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRWaXNpYmlsaXR5U3Rke0FydGljbGV9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBzdWJqZWN0CiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtTdWJqZWN0fSApIHsKICAgICAgICAgICAgICAgICRFcnJvcntTdWJqZWN0SW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGJvZHkKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte0JvZHl9ICkgewogICAgICAgICAgICAgICAgJEVycm9ye0JvZHlJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgbWFuZGF0b3J5IHNlcnZpY2UKICAgICAgICBpZiAoCiAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlJykKICAgICAgICAgICAgJiYgJENvbmZpZy0+e1NlcnZpY2V9CiAgICAgICAgICAgICYmICRDb25maWctPntTZXJ2aWNlTWFuZGF0b3J5fQogICAgICAgICAgICAmJiAhJEdldFBhcmFte1NlcnZpY2VJRH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEVycm9yeydTZXJ2aWNlSURJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBtYW5kYXRvcnkgc2xhCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpCiAgICAgICAgICAgICYmICRDb25maWctPntTTEF9CiAgICAgICAgICAgICYmICRDb25maWctPntTTEFNYW5kYXRvcnl9CiAgICAgICAgICAgICYmICEkR2V0UGFyYW17U0xBSUR9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRFcnJvcnsnU0xBSURJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayB0eXBlCiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6VHlwZScpICYmICEkR2V0UGFyYW17VHlwZUlEfSApIHsKICAgICAgICAgICAgJEVycm9ye1R5cGVJREludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIGlmICglRXJyb3IpIHsKCiAgICAgICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVySGVhZGVyKCk7CgogICAgICAgICAgICBpZiAoICRFcnJvcntRdWV1ZURpc2FibGVkfSApIHsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgSW5mbyAgICAgPT4gVHJhbnNsYXRhYmxlKCJZb3UgZG9uJ3QgaGF2ZSBzdWZmaWNpZW50IHBlcm1pc3Npb25zIGZvciB0aWNrZXQgY3JlYXRpb24gaW4gZGVmYXVsdCBxdWV1ZS4iKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9NYXNrTmV3KAogICAgICAgICAgICAgICAgQXR0YWNobWVudHMgPT4gXEBBdHRhY2htZW50cywKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIFRvU2VsZWN0ZWQgICAgICAgPT4gJERlc3QsCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgICAgID0+ICROZXdRdWV1ZUlELAogICAgICAgICAgICAgICAgRXJyb3JzICAgICAgICAgICA9PiBcJUVycm9yLAogICAgICAgICAgICAgICAgVmlzaWJpbGl0eSAgICAgICA9PiBcJVZpc2liaWxpdHksCiAgICAgICAgICAgICAgICBWaXNpYmlsaXR5U3RkICAgID0+IFwlVmlzaWJpbGl0eVN0ZCwKICAgICAgICAgICAgICAgIERGUG9zc2libGVWYWx1ZXMgPT4gXCVEeW5hbWljRmllbGRQb3NzaWJsZVZhbHVlcywKICAgICAgICAgICAgICAgIERGRXJyb3JzICAgICAgICAgPT4gXCVEeW5hbWljRmllbGRWYWxpZGF0aW9uUmVzdWx0LAogICAgICAgICAgICApOwogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyTmF2aWdhdGlvbkJhcigpOwogICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCBUeXBlID0+ICdDdXN0b21lcicgKTsKCiAgICAgICAgIyBpZiBjdXN0b21lciBpcyBub3QgYWxsb3dlZCB0byBzZXQgcHJpb3JpdHksIHNldCBpdCB0byBkZWZhdWx0CiAgICAgICAgaWYgKCAhJENvbmZpZy0+e1ByaW9yaXR5fSApIHsKICAgICAgICAgICAgJEdldFBhcmFte1ByaW9yaXR5SUR9ID0gJyc7CiAgICAgICAgICAgICRHZXRQYXJhbXtQcmlvcml0eX0gICA9ICRDb25maWctPntQcmlvcml0eURlZmF1bHR9OwogICAgICAgIH0KCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nIE1vdmUgdGlja2V0IGluIHF1ZXVlIGJhc2VkIG9uIHNlcnZpY2UgaW5mb3JtYXRpb24KICAgICAgICBpZiAoICRHZXRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICAgICBteSAlU2VydmljZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICRTZXJ2aWNlRGF0YXtEZXN0UXVldWVJRH0gKSB7CiAgICAgICAgICAgICAgICAkTmV3UXVldWVJRCA9ICRTZXJ2aWNlRGF0YXtEZXN0UXVldWVJRH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgRU8gU2VydmljZUNhdGFsb2cKCiAgICAgICAgIyBjcmVhdGUgbmV3IHRpY2tldCwgZG8gZGIgaW5zZXJ0CiAgICAgICAgbXkgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJE5ld1F1ZXVlSUQsCiAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkR2V0UGFyYW17VHlwZUlEfSwKICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJEdldFBhcmFte1NMQUlEfSwKICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICRHZXRQYXJhbXtTdWJqZWN0fSwKICAgICAgICAgICAgUHJpb3JpdHlJRCAgID0+ICRHZXRQYXJhbXtQcmlvcml0eUlEfSwKICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICRHZXRQYXJhbXtQcmlvcml0eX0sCiAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICRDb25maWctPntTdGF0ZURlZmF1bHR9LAogICAgICAgICAgICBDdXN0b21lcklEICAgPT4gJFNlbGYtPntVc2VyQ3VzdG9tZXJJRH0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgIE93bmVySUQgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAogICAgICAgICk7CgogICAgICAgICMgc2V0IHRpY2tldCBkeW5hbWljIGZpZWxkcwogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggdmFsdWVzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9IG5lICdUaWNrZXQnOwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJFZpc2liaWxpdHl7IkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0ifTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e1JlYWRvbmx5fTsKCiAgICAgICAgICAgICMgc2V0IHRoZSB2YWx1ZQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgaWYgbm8gYXJ0aWNsZSBoYXMgdG8gYmUgY3JlYXRlZCBjbGVhbiB1cCBhbmQgcmV0dXJuCiAgICAgICAgaWYgKCAhJFZpc2liaWxpdHlTdGR7QXJ0aWNsZX0gKSB7CgogICAgICAgICAgICAjIHJlbW92ZSBhbGwgZm9ybSBkYXRhCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OkZvcm1DYWNoZScpLT5Gb3JtSURSZW1vdmUoIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0gKTsKCiAgICAgICAgICAgICMgZGVsZXRlIGhpZGRlbiBmaWVsZHMgY2FjaGUKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0hpZGRlbkZpZWxkcycsCiAgICAgICAgICAgICAgICBLZXkgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVkaXJlY3QKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kTmV4dFNjcmVlbjtUaWNrZXRJRD0kVGlja2V0SUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJE1pbWVUeXBlID0gJ3RleHQvcGxhaW4nOwogICAgICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgICRNaW1lVHlwZSA9ICd0ZXh0L2h0bWwnOwoKICAgICAgICAgICAgIyB2ZXJpZnkgaHRtbCBkb2N1bWVudAogICAgICAgICAgICAkR2V0UGFyYW17Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5SaWNoVGV4dERvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEdldFBhcmFte0JvZHl9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJFBsYWluQm9keSA9ICRHZXRQYXJhbXtCb2R5fTsKCiAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgJFBsYWluQm9keSA9ICRMYXlvdXRPYmplY3QtPlJpY2hUZXh0MkFzY2lpKCBTdHJpbmcgPT4gJEdldFBhcmFte0JvZHl9ICk7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBhcnRpY2xlCiAgICAgICAgbXkgJEZ1bGxOYW1lID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5DdXN0b21lck5hbWUoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgKTsKICAgICAgICBteSAkRnJvbSAgICAgID0gIlwiJEZ1bGxOYW1lXCIgPCRTZWxmLT57VXNlckVtYWlsfT4iOwogICAgICAgIG15ICRBcnRpY2xlSUQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJENvbmZpZy0+e1NlbmRlclR5cGV9LAogICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICA9PiAkRnJvbSwKICAgICAgICAgICAgVG8gICAgICAgICAgICAgICAgICAgPT4gJFRvLAogICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17U3ViamVjdH0sCiAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICRHZXRQYXJhbXtCb2R5fSwKICAgICAgICAgICAgTWltZVR5cGUgICAgICAgICAgICAgPT4gJE1pbWVUeXBlLAogICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57VXNlckNoYXJzZXR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJENvbmZpZy0+e0hpc3RvcnlUeXBlfSwKICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgPT4gJENvbmZpZy0+e0hpc3RvcnlDb21tZW50fSB8fCAnJSUnLAogICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICA9PiAoICRDb25maWdPYmplY3QtPkdldCgnQXV0b1Jlc3BvbnNlRm9yV2ViVGlja2V0cycpICkKICAgICAgICAgICAgPyAnYXV0byByZXBseScKICAgICAgICAgICAgOiAnJywKICAgICAgICAgICAgT3JpZ0hlYWRlciA9PiB7CiAgICAgICAgICAgICAgICBGcm9tICAgID0+ICRGcm9tLAogICAgICAgICAgICAgICAgVG8gICAgICA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICRHZXRQYXJhbXtTdWJqZWN0fSwKICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJFBsYWluQm9keSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUXVldWUgPT4gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxvb2t1cCggUXVldWVJRCA9PiAkTmV3UXVldWVJRCApLAogICAgICAgICk7CgogICAgICAgIGlmICggISRBcnRpY2xlSUQgKSB7CiAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckhlYWRlcigKICAgICAgICAgICAgICAgIFRpdGxlID0+IFRyYW5zbGF0YWJsZSgnRXJyb3InKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckVycm9yKCk7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJGb290ZXIoKTsKCiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgYXJ0aWNsZSBkeW5hbWljIGZpZWxkcwogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggdmFsdWVzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9IG5lICdBcnRpY2xlJzsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISRWaXNpYmlsaXR5eyJEeW5hbWljRmllbGRfJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9In07CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICREeW5hbWljRmllbGRDb25maWctPntSZWFkb25seX07CgogICAgICAgICAgICAjIHNldCB0aGUgdmFsdWUKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBQZXJtaXNzaW9ucyBjaGVjayB3ZXJlIGRvbmUgZWFybGllcgogICAgICAgIGlmICggJEdldFBhcmFte0Zyb21DaGF0SUR9ICkgewogICAgICAgICAgICBteSAkQ2hhdE9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoYXQnKTsKICAgICAgICAgICAgbXkgQENoYXRNZXNzYWdlTGlzdCA9ICRDaGF0T2JqZWN0LT5DaGF0TWVzc2FnZUxpc3QoCiAgICAgICAgICAgICAgICBDaGF0SUQgPT4gJEdldFBhcmFte0Zyb21DaGF0SUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkQ2hhdEFydGljbGVJRDsKCiAgICAgICAgICAgIGlmIChAQ2hhdE1lc3NhZ2VMaXN0KSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJE1lc3NhZ2UgKEBDaGF0TWVzc2FnZUxpc3QpIHsKICAgICAgICAgICAgICAgICAgICAkTWVzc2FnZS0+e01lc3NhZ2VUZXh0fSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgID0+ICRNZXNzYWdlLT57TWVzc2FnZVRleHR9LAogICAgICAgICAgICAgICAgICAgICAgICBMaW5rRmVhdHVyZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJEFydGljbGVDaGF0QmFja2VuZCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQ2hhbm5lbCggQ2hhbm5lbE5hbWUgPT4gJ0NoYXQnICk7CgogICAgICAgICAgICAgICAgJENoYXRBcnRpY2xlSUQgPSAkQXJ0aWNsZUNoYXRCYWNrZW5kLT5BcnRpY2xlQ3JlYXRlKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICBTZW5kZXJUeXBlICAgICAgICAgICA9PiAkQ29uZmlnLT57U2VuZGVyVHlwZX0sCiAgICAgICAgICAgICAgICAgICAgQ2hhdE1lc3NhZ2VMaXN0ICAgICAgPT4gXEBDaGF0TWVzc2FnZUxpc3QsCiAgICAgICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICA9PiAkQ29uZmlnLT57SGlzdG9yeVR5cGV9LAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICRDb25maWctPntIaXN0b3J5Q29tbWVudH0gfHwgJyUlJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRDaGF0QXJ0aWNsZUlEKSB7CiAgICAgICAgICAgICAgICAkQ2hhdE9iamVjdC0+Q2hhdERlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBDaGF0SUQgPT4gJEdldFBhcmFte0Zyb21DaGF0SUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgcHJlIGxvYWRlZCBhdHRhY2htZW50CiAgICAgICAgbXkgQEF0dGFjaG1lbnREYXRhID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc0RhdGEoCiAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc3VibWl0dGVkIGF0dGFjaG1lbnQKICAgICAgICBteSAlVXBsb2FkU3R1ZmYgPSAkUGFyYW1PYmplY3QtPkdldFVwbG9hZEFsbCgKICAgICAgICAgICAgUGFyYW0gPT4gJ2ZpbGVfdXBsb2FkJywKICAgICAgICApOwogICAgICAgIGlmICglVXBsb2FkU3R1ZmYpIHsKICAgICAgICAgICAgcHVzaCBAQXR0YWNobWVudERhdGEsIFwlVXBsb2FkU3R1ZmY7CiAgICAgICAgfQoKICAgICAgICAjIHdyaXRlIGF0dGFjaG1lbnRzCiAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50RGF0YSkgewoKICAgICAgICAgICAgIyBza2lwLCBkZWxldGVkIG5vdCB1c2VkIGlubGluZSBpbWFnZXMKICAgICAgICAgICAgbXkgJENvbnRlbnRJRCA9ICRBdHRhY2htZW50LT57Q29udGVudElEfTsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvbnRlbnRJRAogICAgICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRUeXBlfSA9fiAvaW1hZ2UvaSApCiAgICAgICAgICAgICAgICAmJiAoICRBdHRhY2htZW50LT57RGlzcG9zaXRpb259IGVxICdpbmxpbmUnICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJENvbnRlbnRJREhUTUxRdW90ZSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICAgICAgVGV4dCA9PiAkQ29udGVudElELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHdvcmthcm91bmQgZm9yIGxpbmsgZW5jb2RlIG9mIHJpY2ggdGV4dCBlZGl0b3IsIHNlZSBidWcjNTA1MwogICAgICAgICAgICAgICAgbXkgJENvbnRlbnRJRExpbmtFbmNvZGUgPSAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRDb250ZW50SUQpOwogICAgICAgICAgICAgICAgJEdldFBhcmFte0JvZHl9ID1+IHMvKENvbnRlbnRJRD0pJENvbnRlbnRJRExpbmtFbmNvZGUvJDEkQ29udGVudElEL2c7CgogICAgICAgICAgICAgICAgIyBpZ25vcmUgYXR0YWNobWVudCBpZiBub3QgbGlua2VkIGluIGJvZHkKICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAkR2V0UGFyYW17Qm9keX0gIX4gLyhcUSRDb250ZW50SURIVE1MUXVvdGVcRXxcUSRDb250ZW50SURcRSkvaTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB3cml0ZSBleGlzdGluZyBmaWxlIHRvIGJhY2tlbmQKICAgICAgICAgICAgJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlV3JpdGVBdHRhY2htZW50KAogICAgICAgICAgICAgICAgJXskQXR0YWNobWVudH0sCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcmVtb3ZlIHByZSBzdWJtaXR0ZWQgYXR0YWNobWVudHMKICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JRFJlbW92ZSggRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSApOwoKICAgICAgICAjIGRlbGV0ZSBoaWRkZW4gZmllbGRzIGNhY2hlCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAnSGlkZGVuRmllbGRzJywKICAgICAgICAgICAgS2V5ICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZWRpcmVjdAogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kTmV4dFNjcmVlbjtUaWNrZXRJRD0kVGlja2V0SUQiLAogICAgICAgICk7CiAgICB9CgogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FKQVhVcGRhdGUnICkgewoKICAgICAgICBpZiAoICRDb25maWctPnsnUXVldWUnfSApIHsKICAgICAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJyc7CiAgICAgICAgICAgIGlmICggJEdldFBhcmFte0Rlc3R9ID1+IC9eKFxkezEsMTAwfSlcfFx8Lis/JC8gKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAkMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB1c2UgUXVldWVEZWZhdWx0IGFzIGZhbGxiYWNrIGlmIFF1ZXVlIHNlbGVjdGlvbiBpcyBkaXNhYmxlZAogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkUXVldWVEZWZhdWx0ID0gJENvbmZpZy0+eydRdWV1ZURlZmF1bHQnfSB8fCAnJzsKICAgICAgICAgICAgaWYgKCRRdWV1ZURlZmF1bHQpIHsKICAgICAgICAgICAgICAgIG15ICRRdWV1ZURlZmF1bHRJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVMb29rdXAoIFF1ZXVlID0+ICRRdWV1ZURlZmF1bHQgKTsKICAgICAgICAgICAgICAgIGlmICgkUXVldWVEZWZhdWx0SUQpIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17RGVzdH0gPSAkUXVldWVEZWZhdWx0SUQgLiAnfHwnIC4gJFF1ZXVlRGVmYXVsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRHZXRQYXJhbXtRdWV1ZUlEfSA9ICRRdWV1ZURlZmF1bHRJRDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJEN1c3RvbWVyVXNlciAgID0gJFNlbGYtPntVc2VySUR9OwogICAgICAgIG15ICRFbGVtZW50Q2hhbmdlZCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdFbGVtZW50Q2hhbmdlZCcgKSB8fCAnJzsKCiAgICAgICAgIyBnZXQgbGlzdCB0eXBlCiAgICAgICAgbXkgJFRyZWVWaWV3ID0gMDsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKSBlcSAndHJlZScgKSB7CiAgICAgICAgICAgICRUcmVlVmlldyA9IDE7CiAgICAgICAgfQoKICAgICAgICBteSAkQXV0b3NlbGVjdCA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QUNMOjpBdXRvc2VsZWN0JykgfHwgdW5kZWY7CgogICAgICAgICMgdHJhY2sgY2hhbmdpbmcgc3RhbmRhcmQgZmllbGRzCiAgICAgICAgbXkgJEFDTFByZXNlbGVjdGlvbjsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QUNMOjpBQ0xQcmVzZWxlY3Rpb24nKSApIHsKCiAgICAgICAgICAgICMgZ2V0IGNhY2hlZCBwcmVzZWxlY3Rpb24gcnVsZXMKICAgICAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICAgICAgICAgICRBQ0xQcmVzZWxlY3Rpb24gPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RpY2tldEFDTCcsCiAgICAgICAgICAgICAgICBLZXkgID0+ICdQcmVzZWxlY3Rpb24nLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uICkgewogICAgICAgICAgICAgICAgJEFDTFByZXNlbGVjdGlvbiA9ICRGaWVsZFJlc3RyaWN0aW9uc09iamVjdC0+U2V0QUNMUHJlc2VsZWN0aW9uQ2FjaGUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJUNvbnZlcmdlbmNlID0gKAogICAgICAgICAgICBTdGRGaWVsZHMgPT4gMCwKICAgICAgICAgICAgRmllbGRzICAgID0+IDAsCiAgICAgICAgKTsKICAgICAgICBteSAlQ2hhbmdlZEVsZW1lbnRzID0gJEVsZW1lbnRDaGFuZ2VkID8gKCAkRWxlbWVudENoYW5nZWQgPT4gMSApIDogKCk7CiAgICAgICAgaWYgKCAkQ2hhbmdlZEVsZW1lbnRze1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICRDaGFuZ2VkRWxlbWVudHN7Q3VzdG9tZXJVc2VySUR9ID0gMTsKICAgICAgICAgICAgJENoYW5nZWRFbGVtZW50c3tDdXN0b21lcklEfSAgICAgPSAxOwoKICAgICAgICAgICAgJEdldFBhcmFte0N1c3RvbWVyVXNlcklEfSA9ICRTZWxmLT57VXNlcklEfTsKICAgICAgICAgICAgJEdldFBhcmFte0N1c3RvbWVySUR9ICAgICA9ICRTZWxmLT57VXNlckN1c3RvbWVySUR9OwogICAgICAgIH0KICAgICAgICBteSAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydCA9ICVDaGFuZ2VkRWxlbWVudHM7CiAgICAgICAgbXkgJUNoYW5nZWRTdGRGaWVsZHMgICAgICAgPSAkRWxlbWVudENoYW5nZWQgJiYgJEVsZW1lbnRDaGFuZ2VkICF+IC9eRHluYW1pY0ZpZWxkXy8gPyAlQ2hhbmdlZEVsZW1lbnRzIDogKCk7CgogICAgICAgIG15ICRMb29wUHJvdGVjdGlvbiA9IDEwMDsKICAgICAgICBteSAlU3RkRmllbGRWYWx1ZXM7CiAgICAgICAgbXkgJUR5bkZpZWxkU3RhdGVzID0gKAogICAgICAgICAgICBWaXNpYmlsaXR5ID0+IHt9LAogICAgICAgICAgICBGaWVsZHMgICAgID0+IHt9LAogICAgICAgICAgICBTZXRzICAgICAgID0+IHt9LAogICAgICAgICk7CgogICAgICAgIHVudGlsICggJENvbnZlcmdlbmNle0ZpZWxkc30gKSB7CgogICAgICAgICAgICAjIGRldGVybWluZSBzdGFuZGFyZCBmaWVsZCBpbnB1dAogICAgICAgICAgICB1bnRpbCAoICRDb252ZXJnZW5jZXtTdGRGaWVsZHN9ICkgewoKICAgICAgICAgICAgICAgIG15ICVOZXdDaGFuZ2VkRWxlbWVudHM7CgogICAgICAgICAgICAgICAgIyB3aGljaCBzdGFuZGFyZCBmaWVsZHMgdG8gY2hlY2sgLSBGaWVsZElEID0+IEdldFBhcmFtVmFsdWUgKG5lY2Vzc2FyeSBmb3IgRGVzdCkKICAgICAgICAgICAgICAgIG15ICVDaGVjayA9ICgKICAgICAgICAgICAgICAgICAgICBEZXN0ICAgICAgID0+ICdRdWV1ZUlEJywKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eUlEID0+ICdQcmlvcml0eUlEJywKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgID0+ICdTZXJ2aWNlSUQnLAogICAgICAgICAgICAgICAgICAgIFNMQUlEICAgICAgPT4gJ1NMQUlEJywKICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICAgID0+ICdUeXBlSUQnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgkQUNMUHJlc2VsZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgRklFTEQ6CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRGaWVsZElEICggc29ydCBrZXlzICVDaGVjayApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEFDTFByZXNlbGVjdGlvbi0+e0ZpZWxkc317JEZpZWxkSUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEZpZWxkSUQgbm90IGRlZmluZWQgaW4gVGlja2V0QUNMIHByZXNlbGVjdGlvbiBydWxlcyEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRBdXRvc2VsZWN0ICYmICRBdXRvc2VsZWN0LT57JEZpZWxkSUR9ICYmICRDaGFuZ2VkRWxlbWVudHN7JEZpZWxkSUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEVsZW1lbnQgKCBzb3J0IGtleXMgJUNoYW5nZWRFbGVtZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQUNMUHJlc2VsZWN0aW9uLT57UnVsZXN9e1RpY2tldH17JEVsZW1lbnR9eyRGaWVsZElEfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRTZWxmLT57SW50ZXJuYWxEZXBlbmRhbmN5fXskRWxlbWVudH17JEZpZWxkSUR9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uLT57RmllbGRzfXskRWxlbWVudH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkRWxlbWVudCBub3QgZGVmaW5lZCBpbiBUaWNrZXRBQ0wgcHJlc2VsZWN0aW9uIHJ1bGVzISIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsZXRlIHVuYWZmZWN0ZWQgZmllbGRzCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkQ2hlY2t7JEZpZWxkSUR9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGZvciBlYWNoIHN0YW5kYXJkIGZpZWxkIHdoaWNoIGhhcyB0byBiZSBjaGVja2VkLCBydW4gdGhlIGRlZmluZWQgbWV0aG9kCiAgICAgICAgICAgICAgICBNRVRIT0Q6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEZpZWxkICggQHsgJFNlbGYtPntGaWVsZE1ldGhvZHN9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBNRVRIT0QgaWYgISRDaGVja3sgJEZpZWxkLT57RmllbGRJRH0gfTsKCiAgICAgICAgICAgICAgICAgICAgIyB1c2UgJENoZWNreyAkRmllbGQtPntGaWVsZElEfSB9IGZvciBEZXN0PT5RdWV1ZUlECiAgICAgICAgICAgICAgICAgICAgJFN0ZEZpZWxkVmFsdWVzeyAkQ2hlY2t7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gfSA9ICRGaWVsZC0+e01ldGhvZH0tPigKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlciB8fCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICAgPT4gJEdldFBhcmFte1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlcyAgICAgICA9PiAkU3RkRmllbGRWYWx1ZXN7U2VydmljZUlEfSB8fCB1bmRlZiwgICAgIyBuZWVkZWQgZm9yIFNMQUlECiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBzcGVjaWFsIHN0dWZmIGZvciBRdWV1ZUlEL0Rlc3Q6IERlc3QgaXMgIlF1ZXVlSUR8fFF1ZXVlTmFtZSIgPT4gIlF1ZXVlTmFtZSI7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkRmllbGQtPntGaWVsZElEfSBlcSAnRGVzdCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFRPczoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRRdWV1ZUlEICggc29ydCBrZXlzICV7ICRTdGRGaWVsZFZhbHVlc3tRdWV1ZUlEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBUT3MgaWYgKCAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH17JFF1ZXVlSUR9IGVxICctJyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFN0ZEZpZWxkVmFsdWVze0Rlc3R9eyIkUXVldWVJRHx8JFN0ZEZpZWxkVmFsdWVze1F1ZXVlSUR9eyAkUXVldWVJRCB9In0gPSAkU3RkRmllbGRWYWx1ZXN7UXVldWVJRH17JFF1ZXVlSUR9OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGN1cnJlbnQgc2VsZWN0aW9uIG9mIFF1ZXVlSUQgKERlc3Qgd2lsbCBiZSBkb25lIHRvZ2V0aGVyIHdpdGggdGhlIG90aGVyIGZpZWxkcykKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17UXVldWVJRH0gJiYgISRTdGRGaWVsZFZhbHVlc3tEZXN0fXsgJEdldFBhcmFte0Rlc3R9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UXVldWVJRH0gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBhdXRvc2VsZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtRdWV1ZUlEfSAmJiAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+e0Rlc3R9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5BdXRvc2VsZWN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzID0+ICRTdGRGaWVsZFZhbHVlc3tRdWV1ZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgojIFJvdGhlciBPU1MgLyBJVFNNQ29yZSAtIGNhbGN1bGF0ZSBQcmlvcml0eSB2aWEgQ0lQIG1hdHJpeAogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEZpZWxkLT57RmllbGRJRH0gZXEgJ1ByaW9yaXR5SUQnICYmICRDSVBDYWxjdWxhdGUgJiYgJEdldFBhcmFte0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgdGhlIGNyaXRpY2FsaXR5IGVpdGhlciBmcm9tIHRoZSBtYW51YWxseSBzZXQgZHluYW1pYyBmaWVsZCwgb3IgdGhlIHNlcnZpY2UKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJENyaXRpY2FsaXR5ID0gJEdldFBhcmFte0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENyaXRpY2FsaXR5ICYmICRHZXRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJVNlcnZpY2UgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJEdldFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDcml0aWNhbGl0eSA9ICRTZXJ2aWNle0NyaXRpY2FsaXR5fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ3JpdGljYWxpdHkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZWNhbGN1bGF0ZSB0aGUgcHJpb3JpdHkgaWYgYW55IG9mIHRoZSBpbXBhY3RpbmcgZWxlbWVudHMgY2hhbmdlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ2hhbmdlZEVsZW1lbnRze0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSB8fCAkQ2hhbmdlZEVsZW1lbnRze1NlcnZpY2VJRH0gfHwgJENoYW5nZWRFbGVtZW50c3tEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+UHJpb3JpdHlBbGxvY2F0aW9uR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkQ3JpdGljYWxpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRHZXRQYXJhbXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRTdGRGaWVsZFZhbHVlc3tQcmlvcml0eUlEfXsgJFByaW9yaXR5SUQgfSAmJiAkUHJpb3JpdHlJRCBuZSAkR2V0UGFyYW17UHJpb3JpdHlJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtQcmlvcml0eUlEfSAgICAgICAgICAgPSAkUHJpb3JpdHlJRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ld0NoYW5nZWRFbGVtZW50c3tQcmlvcml0eUlEfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDaGFuZ2VkU3RkRmllbGRze1ByaW9yaXR5SUR9ICAgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIHdlIGVuZm9yY2UgQ0lQQWxsb2NhdGlvbiBpbiBhbnkgY2FzZSBkZWxldGUgYWxsIG90aGVyIHByaW9yaXR5IG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFte1ByaW9yaXR5SUR9ICYmICRDSVBDYWxjdWxhdGUgPT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU3RkRmllbGRWYWx1ZXN7UHJpb3JpdHlJRH0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtQcmlvcml0eUlEfSA9PiAkU3RkRmllbGRWYWx1ZXN7UHJpb3JpdHlJRH17ICRHZXRQYXJhbXtQcmlvcml0eUlEfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB3aGV0aGVyIGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWUgaXMgc3RpbGwgdmFsaWQgZm9yIHRoZSBmaWVsZAogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9CiAgICAgICAgICAgICAgICAgICAgICAgICYmICEkU3RkRmllbGRWYWx1ZXN7ICRGaWVsZC0+e0ZpZWxkSUR9IH17ICRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSB9CiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbm90IGVtcHR5IHRoZSBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gICAgICAgICAgID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICROZXdDaGFuZ2VkRWxlbWVudHN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlZFN0ZEZpZWxkc3sgJEZpZWxkLT57RmllbGRJRH0gfSAgID0gMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgYXV0b3NlbGVjdAogICAgICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXsgJEZpZWxkLT57RmllbGRJRH0gfSAmJiAkQXV0b3NlbGVjdCAmJiAkQXV0b3NlbGVjdC0+eyAkRmllbGQtPntGaWVsZElEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRGaWVsZC0+e0ZpZWxkSUR9IH0gPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPkF1dG9zZWxlY3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiAkU3RkRmllbGRWYWx1ZXN7ICRGaWVsZC0+e0ZpZWxkSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFteyAkRmllbGQtPntGaWVsZElEfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ld0NoYW5nZWRFbGVtZW50c3sgJEZpZWxkLT57RmllbGRJRH0gfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlZFN0ZEZpZWxkc3sgJEZpZWxkLT57RmllbGRJRH0gfSAgID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICElTmV3Q2hhbmdlZEVsZW1lbnRzICkgewogICAgICAgICAgICAgICAgICAgICRDb252ZXJnZW5jZXtTdGRGaWVsZHN9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHMgPSAlTmV3Q2hhbmdlZEVsZW1lbnRzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0ID0gKAogICAgICAgICAgICAgICAgICAgICVDaGFuZ2VkRWxlbWVudHNERlN0YXJ0LAogICAgICAgICAgICAgICAgICAgICVOZXdDaGFuZ2VkRWxlbWVudHMsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICggJExvb3BQcm90ZWN0aW9uLS0gPCAxICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiUmFuIGludG8gdW5yZXNvbHZhYmxlIGxvb3AhIiwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIFRPRE86IGlzIHJldHVybmluZyBhbiBlbXB0eSBsaXN0IHJlYXNvbmFibGU/CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50cyAgICAgICAgPSAlQ2hhbmdlZEVsZW1lbnRzREZTdGFydDsKICAgICAgICAgICAgJUNoYW5nZWRFbGVtZW50c0RGU3RhcnQgPSAoKTsKCiAgICAgICAgICAgICMgY2hlY2sgZHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgbXkgJUN1ckZpZWxkU3RhdGVzOwogICAgICAgICAgICBpZiAoJUNoYW5nZWRFbGVtZW50cykgewoKICAgICAgICAgICAgICAgICMgZ2V0IHZhbHVlcyBhbmQgdmlzaWJpbGl0eSBvZiBkeW5hbWljIGZpZWxkcwogICAgICAgICAgICAgICAgJUN1ckZpZWxkU3RhdGVzID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5HZXRGaWVsZFN0YXRlcygKICAgICAgICAgICAgICAgICAgICBUaWNrZXRPYmplY3QgICAgICAgICAgICAgID0+ICRUaWNrZXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyAgICAgICAgICAgICA9PiAkU2VsZi0+e0R5bmFtaWNGaWVsZH0sCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9PiAkQmFja2VuZE9iamVjdCwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkRWxlbWVudHMgICAgICAgICAgID0+IFwlQ2hhbmdlZEVsZW1lbnRzLCAgICAgICAjIG9wdGlvbmFsIHRvIHJlZHVjZSBBQ0wgZXZhbHVhdGlvbgogICAgICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBBdXRvc2VsZWN0ICAgICAgPT4gJEF1dG9zZWxlY3QsCiAgICAgICAgICAgICAgICAgICAgQUNMUHJlc2VsZWN0aW9uID0+ICRBQ0xQcmVzZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgTG9vcFByb3RlY3Rpb24gID0+IFwkTG9vcFByb3RlY3Rpb24sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY29tYmluZSBGaWVsZFN0YXRlcwogICAgICAgICAgICAgICAgJER5bkZpZWxkU3RhdGVze0ZpZWxkc30gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJER5bkZpZWxkU3RhdGVze0ZpZWxkc30gfSwKICAgICAgICAgICAgICAgICAgICAleyAkQ3VyRmllbGRTdGF0ZXN7RmllbGRzfSB9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICREeW5GaWVsZFN0YXRlc3tWaXNpYmlsaXR5fSA9IHsKICAgICAgICAgICAgICAgICAgICAleyAkRHluRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0gfSwKICAgICAgICAgICAgICAgICAgICAleyAkQ3VyRmllbGRTdGF0ZXN7VmlzaWJpbGl0eX0gfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAkRHluRmllbGRTdGF0ZXN7U2V0c30gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJER5bkZpZWxkU3RhdGVze1NldHN9IH0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEN1ckZpZWxkU3RhdGVze1NldHN9IH0sCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICMgc3RvcmUgbmV3IHZhbHVlcwogICAgICAgICAgICAgICAgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gPSB7CiAgICAgICAgICAgICAgICAgICAgJXsgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gfSwKICAgICAgICAgICAgICAgICAgICAleyAkQ3VyRmllbGRTdGF0ZXN7TmV3VmFsdWVzfSB9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBkeW5hbWljIGZpZWxkcyBjaGFuZ2VkLCBjaGVjayBzdGFuZGFyZCBmaWVsZHMgYWdhaW4KICAgICAgICAgICAgaWYgKCAlQ3VyRmllbGRTdGF0ZXMgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRDdXJGaWVsZFN0YXRlc3tOZXdWYWx1ZXN9ICkgKSB7CiAgICAgICAgICAgICAgICAkQ29udmVyZ2VuY2V7U3RkRmllbGRzfSA9IDA7CiAgICAgICAgICAgICAgICAlQ2hhbmdlZEVsZW1lbnRzID0gbWFwIHsgJF8gPT4gMSB9IGtleXMgJXsgJEN1ckZpZWxkU3RhdGVze05ld1ZhbHVlc30gfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRDb252ZXJnZW5jZXtGaWVsZHN9ID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIER5bmFtaWMgRmllbGRzIFBvc3NpYmxlIFZhbHVlcyB2aWEgQUpBWAogICAgICAgIG15IEBEeW5hbWljRmllbGRBSkFYID0gJEJhY2tlbmRPYmplY3QtPkJ1aWxkQUpBWFJldHVybigKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlncyA9PiAkU2VsZi0+e0R5bmFtaWNGaWVsZH0sCiAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgRHluRmllbGRTdGF0ZXMgICAgICA9PiBcJUR5bkZpZWxkU3RhdGVzLAogICAgICAgICk7CgogICAgICAgIG15ICRBQ0xSZXN1bHRTdGQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBBY3Rpb24gICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgID0+ICdGb3JtU3RkJywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJy0nLAogICAgICAgICAgICBEYXRhICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBBcnRpY2xlID0+ICdBcnRpY2xlJywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSAlVmlzaWJpbGl0eVN0ZCA9ICgKICAgICAgICAgICAgQXJ0aWNsZSA9PiAwLAogICAgICAgICk7CgogICAgICAgIGlmICgkQUNMUmVzdWx0U3RkKSB7CiAgICAgICAgICAgIG15ICVBY2xEYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpOwogICAgICAgICAgICBmb3IgbXkgJEZpZWxkICggc29ydCBrZXlzICVBY2xEYXRhICkgewogICAgICAgICAgICAgICAgJFZpc2liaWxpdHlTdGR7JEZpZWxkfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgICAkVmlzaWJpbGl0eVN0ZHtBcnRpY2xlfSA9IDE7CiAgICAgICAgfQoKICAgICAgICBwdXNoIEBEeW5hbWljRmllbGRBSkFYLCB7CiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3RyaWN0aW9uc19WaXNpYmlsaXR5X1N0ZCcsCiAgICAgICAgICAgIERhdGEgPT4gXCVWaXNpYmlsaXR5U3RkLAogICAgICAgIH07CgogICAgICAgICMgYnVpbGQgQUpBWCByZXR1cm4gZm9yIHRoZSBzdGFuZGFyZCBmaWVsZHMKICAgICAgICBteSBAU3RkRmllbGRBSkFYOwogICAgICAgIG15ICVBdHRyaWJ1dGVzID0gKAogICAgICAgICAgICBEZXN0ID0+IHsKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFRyZWVWaWV3ICAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcmlvcml0eUlEID0+IHsKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiB7CiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgICAgICBUcmVlVmlldyAgICAgPT4gJFRyZWVWaWV3LAogICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU0xBSUQgPT4gewogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFR5cGVJRCA9PiB7CiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgfQogICAgICAgICk7CiAgICAgICAgZGVsZXRlICRTdGRGaWVsZFZhbHVlc3tRdWV1ZUlEfTsKICAgICAgICBmb3IgbXkgJEZpZWxkICggc29ydCBrZXlzICVTdGRGaWVsZFZhbHVlcyApIHsKICAgICAgICAgICAgcHVzaCBAU3RkRmllbGRBSkFYLCB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICRGaWVsZCwKICAgICAgICAgICAgICAgIERhdGEgICAgICAgPT4gJFN0ZEZpZWxkVmFsdWVzeyRGaWVsZH0sCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXskRmllbGR9LAogICAgICAgICAgICAgICAgJXsgJEF0dHJpYnV0ZXN7JEZpZWxkfSB9LAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBteSAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uSlNPTigKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgQFN0ZEZpZWxkQUpBWCwKICAgICAgICAgICAgICAgIEBEeW5hbWljRmllbGRBSkFYLAogICAgICAgICAgICBdLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gU3ViYWN0aW9uIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KfQoKc3ViIF9HZXRQcmlvcml0aWVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB1c2UgZGVmYXVsdCBRdWV1ZSBpZiBub25lIGlzIHByb3ZpZGVkCiAgICAkUGFyYW17UXVldWVJRH0gPSAkUGFyYW17UXVldWVJRH0gfHwgMTsKCiAgICAjIGdldCBwcmlvcml0eQogICAgbXkgJVByaW9yaXRpZXM7CiAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSB8fCAkUGFyYW17VGlja2V0SUR9ICkgewogICAgICAgICVQcmlvcml0aWVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRQcmlvcml0eUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gXCVQcmlvcml0aWVzOwp9CgpzdWIgX0dldFR5cGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB1c2UgZGVmYXVsdCBRdWV1ZSBpZiBub25lIGlzIHByb3ZpZGVkCiAgICAkUGFyYW17UXVldWVJRH0gPSAkUGFyYW17UXVldWVJRH0gfHwgMTsKCiAgICAjIGdldCB0eXBlCiAgICBteSAlVHlwZTsKICAgIGlmICggJFBhcmFte1F1ZXVlSUR9IHx8ICRQYXJhbXtUaWNrZXRJRH0gKSB7CiAgICAgICAgJVR5cGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldFR5cGVMaXN0KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gXCVUeXBlOwp9CgpzdWIgX0dldFNlcnZpY2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB1c2UgZGVmYXVsdCBRdWV1ZSBpZiBub25lIGlzIHByb3ZpZGVkCiAgICAkUGFyYW17UXVldWVJRH0gPSAkUGFyYW17UXVldWVJRH0gfHwgMTsKCiAgICAjIGdldCBzZXJ2aWNlCiAgICBteSAlU2VydmljZTsKCiAgICAjIGNoZWNrIG5lZWRlZAogICAgcmV0dXJuIFwlU2VydmljZSBpZiAhJFBhcmFte1F1ZXVlSUR9ICYmICEkUGFyYW17VGlja2V0SUR9OwoKICAgICMgZ2V0IG9wdGlvbnMgZm9yIGRlZmF1bHQgc2VydmljZXMgZm9yIHVua25vd24gY3VzdG9tZXJzCiAgICBteSAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1RpY2tldDo6U2VydmljZTo6RGVmYXVsdDo6VW5rbm93bkN1c3RvbWVyJyk7CgogICAgIyBnZXQgc2VydmljZSBsaXN0CiAgICBpZiAoICRQYXJhbXtDdXN0b21lclVzZXJJRH0gfHwgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyICkgewogICAgICAgICVTZXJ2aWNlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTZXJ2aWNlTGlzdCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBBY3Rpb24gICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQogICAgcmV0dXJuIFwlU2VydmljZTsKfQoKc3ViIF9HZXRTTEFzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB1c2UgZGVmYXVsdCBRdWV1ZSBpZiBub25lIGlzIHByb3ZpZGVkCiAgICAkUGFyYW17UXVldWVJRH0gPSAkUGFyYW17UXVldWVJRH0gfHwgMTsKCiAgICAjIGdldCBzZXJ2aWNlcyBpZiB0aGV5IHdlcmUgbm90IGRldGVybWluZWQgaW4gYW4gQUpBWCBjYWxsCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtTZXJ2aWNlc30gKSB7CiAgICAgICAgJFBhcmFte1NlcnZpY2VzfSA9ICRTZWxmLT5fR2V0U2VydmljZXMoJVBhcmFtKTsKICAgIH0KCiAgICAjIGdldCBzbGEKICAgIG15ICVTTEE7CiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICYmICRQYXJhbXtTZXJ2aWNlc30gJiYgJXsgJFBhcmFte1NlcnZpY2VzfSB9ICkgewogICAgICAgIGlmICggJFBhcmFte1NlcnZpY2VzfS0+eyAkUGFyYW17U2VydmljZUlEfSB9ICkgewogICAgICAgICAgICAlU0xBID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTTEFMaXN0KAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBcJVNMQTsKfQoKc3ViIF9HZXRUb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG93biBzZWxlY3Rpb24KICAgIG15ICVOZXdUb3MgPSAoICcnLCAnLScgKTsKICAgIG15ICRNb2R1bGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0N1c3RvbWVyUGFuZWw6Ok5ld1RpY2tldFF1ZXVlU2VsZWN0aW9uTW9kdWxlJykKICAgICAgICB8fCAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkN1c3RvbWVyTmV3VGlja2V0OjpRdWV1ZVNlbGVjdGlvbkdlbmVyaWMnOwogICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCRNb2R1bGUpICkgewogICAgICAgIG15ICRPYmplY3QgPSAkTW9kdWxlLT5uZXcoCiAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICBTeXN0ZW1BZGRyZXNzID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXN0ZW1BZGRyZXNzJyksCiAgICAgICAgICAgIERlYnVnICAgICAgICAgPT4gJFNlbGYtPntEZWJ1Z30sCiAgICAgICAgKTsKCiAgICAgICAgIyBsb2cgbG9hZGVkIG1vZHVsZQogICAgICAgIGlmICggJFNlbGYtPntEZWJ1Z30gJiYgJFNlbGYtPntEZWJ1Z30gPiAxICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTW9kdWxlOiAkTW9kdWxlIGxvYWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAlTmV3VG9zID0gKAogICAgICAgICAgICAkT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICBFbnYgICAgICAgPT4gJFNlbGYsCiAgICAgICAgICAgICAgICBBQ0xQYXJhbXMgPT4gXCVQYXJhbQogICAgICAgICAgICApLAogICAgICAgICAgICAoICcnLCA9PiAnLScgKQogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLT5GYXRhbERpZSgKICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IGxvYWQgJE1vZHVsZSEiLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIFwlTmV3VG9zOwp9CgpzdWIgX01hc2tOZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkUGFyYW17Rm9ybUlEfSA9ICRTZWxmLT57Rm9ybUlEfTsKICAgICRQYXJhbXtFcnJvcnN9LT57UXVldWVJbnZhbGlkfSA9ICRQYXJhbXtFcnJvcnN9LT57UXVldWVJbnZhbGlkfSB8fCAnJzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBsaXN0IHR5cGUKICAgIG15ICRUcmVlVmlldyA9IDA7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKSBlcSAndHJlZScgKSB7CiAgICAgICAgJFRyZWVWaWV3ID0gMTsKICAgIH0KCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJENvbmZpZyAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgaWYgKCAkQ29uZmlnLT57UXVldWV9ICkgewoKICAgICAgICAjIGNoZWNrIG93biBzZWxlY3Rpb24KICAgICAgICBteSAlTmV3VG9zID0gKCAnJywgJy0nICk7CiAgICAgICAgbXkgJE1vZHVsZSA9ICRDb25maWdPYmplY3QtPkdldCgnQ3VzdG9tZXJQYW5lbDo6TmV3VGlja2V0UXVldWVTZWxlY3Rpb25Nb2R1bGUnKQogICAgICAgICAgICB8fCAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkN1c3RvbWVyTmV3VGlja2V0OjpRdWV1ZVNlbGVjdGlvbkdlbmVyaWMnOwogICAgICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgU3lzdGVtQWRkcmVzcyA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcycpLAogICAgICAgICAgICAgICAgRGVidWcgICAgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgbG9nIGxvYWRlZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0RlYnVnfSAmJiAkU2VsZi0+e0RlYnVnfSA+IDEgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJNb2R1bGU6ICRNb2R1bGUgbG9hZGVkISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICVOZXdUb3MgPSAoCiAgICAgICAgICAgICAgICAkT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICAgICAgRW52ICAgICAgID0+ICRTZWxmLAogICAgICAgICAgICAgICAgICAgIEFDTFBhcmFtcyA9PiBcJVBhcmFtCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgKCAnJywgPT4gJy0nICkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCk7CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIHRvIHN0cmluZwogICAgICAgIGlmICglTmV3VG9zKSB7CiAgICAgICAgICAgIGZvciAoIHNvcnQga2V5cyAlTmV3VG9zICkgewogICAgICAgICAgICAgICAgJE5ld1Rvc3siJF98fCROZXdUb3N7JF99In0gPSAkTmV3VG9zeyRffTsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkTmV3VG9zeyRffTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJFBhcmFte1RvU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5BZ2VudFF1ZXVlTGlzdE9wdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJU5ld1RvcywKICAgICAgICAgICAgTXVsdGlwbGUgICA9PiAwLAogICAgICAgICAgICBTaXplICAgICAgID0+IDAsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0Rlc3QnLAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICJWYWxpZGF0ZV9SZXF1aXJlZCBNb2Rlcm5pemUgRm9ybVVwZGF0ZSAiIC4gJFBhcmFte0Vycm9yc30tPntRdWV1ZUludmFsaWR9LAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtUb1NlbGVjdGVkfSB8fCAkUGFyYW17UXVldWVJRH0sCiAgICAgICAgICAgIFRyZWVWaWV3ICAgPT4gJFRyZWVWaWV3LAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdRdWV1ZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgUXVldWVJbnZhbGlkID0+ICRQYXJhbXtFcnJvcnN9LT57UXVldWVJbnZhbGlkfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgIH0KCiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICMgZ2V0IHByaW9yaXR5CiAgICBpZiAoICRDb25maWctPntQcmlvcml0eX0gKSB7CiAgICAgICAgbXkgJVByaW9yaXRpZXMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQcmlvcml0eUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBBY3Rpb24gICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgKTsKCiAgICAgICAgIyBidWlsZCBwcmlvcml0eSBzdHJpbmcKICAgICAgICBteSAlUHJpb3JpdHlTZWxlY3RlZDsKICAgICAgICBpZiAoICRQYXJhbXtQcmlvcml0eUlEfSApIHsKICAgICAgICAgICAgJFByaW9yaXR5U2VsZWN0ZWR7U2VsZWN0ZWRJRH0gPSAkUGFyYW17UHJpb3JpdHlJRH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUHJpb3JpdHlTZWxlY3RlZHtTZWxlY3RlZFZhbHVlfSA9ICRDb25maWctPntQcmlvcml0eURlZmF1bHR9IHx8ICczIG5vcm1hbCc7CiAgICAgICAgfQogICAgICAgICRQYXJhbXtQcmlvcml0eVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgID0+IFwlUHJpb3JpdGllcywKICAgICAgICAgICAgTmFtZSAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgICAgICBDbGFzcyA9PiAnTW9kZXJuaXplIEZvcm1VcGRhdGUnLAogICAgICAgICAgICAlUHJpb3JpdHlTZWxlY3RlZCwKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgdHlwZXMKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlR5cGUnKSAmJiAkQ29uZmlnLT57J1RpY2tldFR5cGUnfSApIHsKICAgICAgICBteSAlVHlwZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFR5cGVMaXN0KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggJENvbmZpZy0+eydUaWNrZXRUeXBlRGVmYXVsdCd9ICYmICEkUGFyYW17VHlwZUlEfSApIHsKICAgICAgICAgICAgbXkgJVJldmVyc2VUeXBlID0gcmV2ZXJzZSAlVHlwZTsKICAgICAgICAgICAgJFBhcmFte1R5cGVJRH0gPSAkUmV2ZXJzZVR5cGV7ICRDb25maWctPnsnVGlja2V0VHlwZURlZmF1bHQnfSB9OwogICAgICAgIH0KCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgZWxzaWYgKCAkUGFyYW17U2VydmljZURhdGF9e1R5cGVJRH0gJiYgJFBhcmFte1R5cGVJRH0gJiYgJFR5cGV7ICRQYXJhbXtUeXBlSUR9IH0KICAgICAgICAgICAgJiYgKCAkUGFyYW17VHlwZUlEfSBlcSAkUGFyYW17U2VydmljZURhdGF9e1R5cGVJRH0gKSApIHsKCiAgICAgICAgICAgICVUeXBlID0gKAogICAgICAgICAgICAgICAgJFBhcmFte1R5cGVJRH0gPT4gJFR5cGV7ICRQYXJhbXtUeXBlSUR9IH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQojIEVPIFNlcnZpY2VDYXRhbG9nCgogICAgICAgICRQYXJhbXtUeXBlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlVHlwZSwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdUeXBlSUQnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1R5cGVJRH0sCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBTb3J0ICAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAiVmFsaWRhdGVfUmVxdWlyZWQgTW9kZXJuaXplIEZvcm1VcGRhdGUgIiAuICggJFBhcmFte0Vycm9yc30tPntUeXBlSURJbnZhbGlkfSB8fCAnJyApLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldFR5cGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIFR5cGVJREludmFsaWQgPT4gJFBhcmFte0Vycm9yc30tPntUeXBlSURJbnZhbGlkfSwKICAgICAgICAgICAgfQogICAgICAgICk7CiAgICB9CgogICAgIyBzZXJ2aWNlcwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpICYmICRDb25maWctPntTZXJ2aWNlfSApIHsKCiAgICAgICAgIyB1c2UgZWl0aGVyIHRoZSByZWFsIFF1ZXVlSUQsIG9yIHRoZSBUaWNrZXRJRCwgb3IgMSBhcyBRdWV1ZUlECiAgICAgICAgbXkgJFRtcFF1ZXVlSUQgPSAkUGFyYW17UXVldWVJRH0gPyAkUGFyYW17UXVldWVJRH0gOgogICAgICAgICAgICAkUGFyYW17VGlja2V0SUR9ID8gdW5kZWYgOiAxOwoKICAgICAgICBteSAlU2VydmljZXMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZXJ2aWNlTGlzdCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBRdWV1ZUlEICAgICAgICA9PiAkVG1wUXVldWVJRCwKICAgICAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiMgUm90aGVyIE9TUyAvIFNlcnZpY2VDYXRhbG9nCiAgICAgICAgaWYgKCAkUGFyYW17U2VydmljZURhdGF9e1NlcnZpY2VJRH0gJiYgJFBhcmFte1NlcnZpY2VJRH0gJiYgJFNlcnZpY2VzeyAkUGFyYW17U2VydmljZUlEfSB9CiAgICAgICAgICAgICYmICggJFBhcmFte1NlcnZpY2VJRH0gZXEgJFBhcmFte1NlcnZpY2VEYXRhfXtTZXJ2aWNlSUR9ICkgKSB7CgogICAgICAgICAgICAlU2VydmljZXMgPSAoCiAgICAgICAgICAgICAgICAkUGFyYW17U2VydmljZUlEfSA9PiAkU2VydmljZXN7ICRQYXJhbXtTZXJ2aWNlSUR9IH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQojIEVPIFNlcnZpY2VDYXRhbG9nCgogICAgICAgICRQYXJhbXtTZXJ2aWNlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVNlcnZpY2VzLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdTZXJ2aWNlSUQnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUgRm9ybVVwZGF0ZSAnCiAgICAgICAgICAgICAgICAuICggJENvbmZpZy0+e1NlcnZpY2VNYW5kYXRvcnl9ID8gJ1ZhbGlkYXRlX1JlcXVpcmVkICcgOiAnJyApCiAgICAgICAgICAgICAgICAuICggJFBhcmFte0Vycm9yc30tPntTZXJ2aWNlSURJbnZhbGlkfSB8fCAnJyApLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJlZVZpZXcgICAgID0+ICRUcmVlVmlldywKICAgICAgICAgICAgU29ydCAgICAgICAgID0+ICdUcmVlVmlldycsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAyMDAsCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0U2VydmljZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgU2VydmljZU1hbmRhdG9yeSA9PiAkQ29uZmlnLT57U2VydmljZU1hbmRhdG9yeX0gfHwgMCwKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIHJlc2V0IHByZXZpb3VzIFNlcnZpY2VJRCB0byByZXNldCBTTEEtTGlzdCBpZiBubyBzZXJ2aWNlIGlzIHNlbGVjdGVkCiAgICAgICAgaWYgKCAhJFNlcnZpY2VzeyAkUGFyYW17U2VydmljZUlEfSB8fCAnJyB9ICkgewogICAgICAgICAgICAkUGFyYW17U2VydmljZUlEfSA9ICcnOwogICAgICAgIH0KICAgICAgICBteSAlU0xBOwogICAgICAgIGlmICggJENvbmZpZy0+e1NMQX0gKSB7CiAgICAgICAgICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICAgICAlU0xBID0gJFRpY2tldE9iamVjdC0+VGlja2V0U0xBTGlzdCgKICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEID0+IDEsICAgICMgdXNlIGRlZmF1bHQgUXVldWVJRCBpZiBub25lIGlzIHByb3ZpZGVkIGluICVQYXJhbQogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFBhcmFte1NMQVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhICAgICAgID0+IFwlU0xBLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnU0xBSUQnLAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17U0xBSUR9LAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIEZvcm1VcGRhdGUgJwogICAgICAgICAgICAgICAgICAgIC4gKCAkQ29uZmlnLT57U0xBTWFuZGF0b3J5fSA/ICdWYWxpZGF0ZV9SZXF1aXJlZCAnIDogJycgKQogICAgICAgICAgICAgICAgICAgIC4gKCAkUGFyYW17RXJyb3JzfS0+e1NMQUludmFsaWR9IHx8ICcnICksCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFNvcnQgICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMjAwLAogICAgICAgICAgICApOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldFNMQScsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBTTEFNYW5kYXRvcnkgPT4gJENvbmZpZy0+e1NMQU1hbmRhdG9yeX0gfHwgMCwKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgcHJlcGFyZSBlcnJvcnMKICAgIGlmICggJFBhcmFte0Vycm9yc30gKSB7CiAgICAgICAgZm9yICggc29ydCBrZXlzICV7ICRQYXJhbXtFcnJvcnN9IH0gKSB7CiAgICAgICAgICAgICRQYXJhbXskX30gPSAkUGFyYW17RXJyb3JzfS0+eyRffTsKICAgICAgICB9CiAgICB9CgogICAgIyByZW5kZXIgZHluYW1pYyBmaWVsZHMKICAgICRQYXJhbXtEeW5hbWljRmllbGRIVE1MfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpEeW5hbWljRmllbGQ6Ok1hc2snKS0+RWRpdFNlY3Rpb25SZW5kZXIoCiAgICAgICAgQ29udGVudCAgICAgICAgICAgICAgPT4gJFNlbGYtPntNYXNrRGVmaW5pdGlvbn0sCiAgICAgICAgRHluYW1pY0ZpZWxkcyAgICAgICAgPT4gJFNlbGYtPntEeW5hbWljRmllbGR9LAogICAgICAgIExheW91dE9iamVjdCAgICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLAogICAgICAgIER5bmFtaWNGaWVsZFZhbHVlcyAgID0+ICRQYXJhbXtEeW5hbWljRmllbGR9LAogICAgICAgIFBvc3NpYmxlVmFsdWVzRmlsdGVyID0+ICRQYXJhbXtERlBvc3NpYmxlVmFsdWVzfSwKICAgICAgICBFcnJvcnMgICAgICAgICAgICAgICA9PiAkUGFyYW17REZFcnJvcnN9LAogICAgICAgIFZpc2liaWxpdHkgICAgICAgICAgID0+ICRQYXJhbXtWaXNpYmlsaXR5fSwKICAgICAgICBDdXN0b21lckludGVyZmFjZSAgICA9PiAxLAogICAgICAgIE9iamVjdCAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgQ3VzdG9tZXJJRCAgICAgPT4gJFNlbGYtPntVc2VyQ3VzdG9tZXJJRH0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgJFBhcmFte0R5bmFtaWNGaWVsZH0tPiUqLAogICAgICAgIH0sCiAgICApOwoKICAgIGlmICggISRQYXJhbXtWaXNpYmlsaXR5U3RkfXtBcnRpY2xlfSApIHsKICAgICAgICAkUGFyYW17U3ViamVjdFZhbGlkYXRlfSAgICAgICAgPSAnVmFsaWRhdGVfUmVxdWlyZWRfSWZWaXNpYmxlJzsKICAgICAgICAkUGFyYW17Qm9keVZhbGlkYXRlfSAgICAgICAgICAgPSAnVmFsaWRhdGVfUmVxdWlyZWRfSWZWaXNpYmxlJzsKICAgICAgICAkUGFyYW17U3ViamVjdEhpZGRlbkNsYXNzfSAgICAgPSAnIG9vb0FDTEhpZGRlbic7CiAgICAgICAgJFBhcmFte0JvZHlIaWRkZW5DbGFzc30gICAgICAgID0gJyBvb29BQ0xIaWRkZW4nOwogICAgICAgICRQYXJhbXtBdHRhY2htZW50c0hpZGRlbkNsYXNzfSA9ICcgb29vQUNMSGlkZGVuJzsKICAgIH0KCiAgICBlbHNlIHsKICAgICAgICAkUGFyYW17U3ViamVjdFZhbGlkYXRlfSA9ICdWYWxpZGF0ZV9SZXF1aXJlZF9JZlZpc2libGUnOwogICAgICAgICRQYXJhbXtCb2R5VmFsaWRhdGV9ICAgID0gJ1ZhbGlkYXRlX1JlcXVpcmVkX0lmVmlzaWJsZSc7CiAgICB9CgogICAgIyBzaG93IGF0dGFjaG1lbnRzCiAgICBBVFRBQ0hNRU5UOgogICAgZm9yIG15ICRBdHRhY2htZW50ICggQHsgJFBhcmFte0F0dGFjaG1lbnRzfSB9ICkgewogICAgICAgIGlmICgKICAgICAgICAgICAgJEF0dGFjaG1lbnQtPntDb250ZW50SUR9CiAgICAgICAgICAgICYmICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9CiAgICAgICAgICAgICYmICggJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX0gPX4gL2ltYWdlL2kgKQogICAgICAgICAgICAmJiAoICRBdHRhY2htZW50LT57RGlzcG9zaXRpb259IGVxICdpbmxpbmUnICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UOwogICAgICAgIH0KCiAgICAgICAgcHVzaCBAeyAkUGFyYW17QXR0YWNobWVudExpc3R9IH0sICRBdHRhY2htZW50OwogICAgfQoKICAgICMgYWRkIHJpY2ggdGV4dCBlZGl0b3IKICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CgogICAgICAgICMgdXNlIGhlaWdodC93aWR0aCBkZWZpbmVkIGZvciB0aGlzIHNjcmVlbgogICAgICAgICRQYXJhbXtSaWNoVGV4dEhlaWdodH0gPSAkQ29uZmlnLT57UmljaFRleHRIZWlnaHR9IHx8IDA7CiAgICAgICAgJFBhcmFte1JpY2hUZXh0V2lkdGh9ICA9ICRDb25maWctPntSaWNoVGV4dFdpZHRofSAgfHwgMDsKCiAgICAgICAgIyBzZXQgdXAgY3VzdG9tZXIgcmljaCB0ZXh0IGVkaXRvcgogICAgICAgICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyU2V0UmljaFRleHRQYXJhbWV0ZXJzKAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIFBlcm1pc3Npb25zIGhhdmUgYmVlbiBjaGVja2VkIGJlZm9yZSBpbiBSdW4oKQogICAgaWYgKCAkUGFyYW17RnJvbUNoYXRJRH0gKSB7CiAgICAgICAgbXkgQENoYXRNZXNzYWdlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGF0JyktPkNoYXRNZXNzYWdlTGlzdCgKICAgICAgICAgICAgQ2hhdElEID0+ICRQYXJhbXtGcm9tQ2hhdElEfSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJE1lc3NhZ2UgKEBDaGF0TWVzc2FnZXMpIHsKICAgICAgICAgICAgJE1lc3NhZ2UtPntNZXNzYWdlVGV4dH0gPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICAgICAgVGV4dCAgICAgICAgPT4gJE1lc3NhZ2UtPntNZXNzYWdlVGV4dH0sCiAgICAgICAgICAgICAgICBMaW5rRmVhdHVyZSA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0NoYXRBcnRpY2xlUHJldmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQ2hhdE1lc3NhZ2VzID0+IFxAQ2hhdE1lc3NhZ2VzLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17SGlkZUF1dG9zZWxlY3RlZH0gKSB7CgogICAgICAgICMgYWRkIEF1dG9zZWxlY3QgSlMKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU09uRG9jdW1lbnRDb21wbGV0ZSgKICAgICAgICAgICAgQ29kZSA9PiAiQ29yZS5Gb3JtLkluaXRIaWRlQXV0b3NlbGVjdGVkKHsgRmllbGRJRHM6ICRQYXJhbXtIaWRlQXV0b3NlbGVjdGVkfSB9KTsiLAogICAgICAgICk7CiAgICB9CgogICAgIyBleHBsYW5hdG9yeSBtZXNzYWdlIGFib3V0IGFzdGVyaXNrCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QXN0ZXJpc2tFeHBsYW5hdGlvbicpICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBc3Rlcmlza0V4cGxhbmF0aW9uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG91dHB1dCBiYWNrCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQ3VzdG9tZXJUaWNrZXRNZXNzYWdlJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Modules/CustomerTicketProcess.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmNGEyZmMxMTI4MGY4ODhkNTE2Y2MzMjM4NjBlMzJiZmM0YmMzZjllIC0gS2VybmVsL01vZHVsZXMvQ3VzdG9tZXJUaWNrZXRQcm9jZXNzLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpDdXN0b21lclRpY2tldFByb2Nlc3M7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpEQk9iamVjdCkKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MgJFNlbGYsICRUeXBlOwoKICAgICMgZ2xvYmFsIGNvbmZpZyBoYXNoIGZvciBpZCBkaXNzb2x1dGlvbgogICAgJFNlbGYtPntOYW1lVG9JRH0gPSB7CiAgICAgICAgVGl0bGUgICAgICAgICAgPT4gJ1RpdGxlJywKICAgICAgICBTdGF0ZSAgICAgICAgICA9PiAnU3RhdGVJRCcsCiAgICAgICAgU3RhdGVJRCAgICAgICAgPT4gJ1N0YXRlSUQnLAogICAgICAgIFByaW9yaXR5ICAgICAgID0+ICdQcmlvcml0eUlEJywKICAgICAgICBQcmlvcml0eUlEICAgICA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgTG9jayAgICAgICAgICAgPT4gJ0xvY2tJRCcsCiAgICAgICAgTG9ja0lEICAgICAgICAgPT4gJ0xvY2tJRCcsCiAgICAgICAgUXVldWUgICAgICAgICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgIFF1ZXVlSUQgICAgICAgID0+ICdRdWV1ZUlEJywKICAgICAgICBDdXN0b21lciAgICAgICA9PiAnQ3VzdG9tZXJJRCcsCiAgICAgICAgQ3VzdG9tZXJJRCAgICAgPT4gJ0N1c3RvbWVySUQnLAogICAgICAgIEN1c3RvbWVyTm8gICAgID0+ICdDdXN0b21lcklEJywKICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAnQ3VzdG9tZXJVc2VySUQnLAogICAgICAgIFR5cGUgICAgICAgICAgID0+ICdUeXBlSUQnLAogICAgICAgIFR5cGVJRCAgICAgICAgID0+ICdUeXBlSUQnLAogICAgICAgIFNMQSAgICAgICAgICAgID0+ICdTTEFJRCcsCiAgICAgICAgU0xBSUQgICAgICAgICAgPT4gJ1NMQUlEJywKICAgICAgICBTZXJ2aWNlICAgICAgICA9PiAnU2VydmljZUlEJywKICAgICAgICBTZXJ2aWNlSUQgICAgICA9PiAnU2VydmljZUlEJywKICAgICAgICBBcnRpY2xlICAgICAgICA9PiAnQXJ0aWNsZScsCiAgICB9OwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgIG15ICRUaWNrZXRJRCAgICAgICAgICAgICAgID0gJFNlbGYtPntUaWNrZXRJRH0gICAgICAgICAgICAgIHx8ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaWNrZXRJRCcgKTsKICAgIG15ICRBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0gJFBhcmFte0FjdGl2aXR5RGlhbG9nRW50aXR5SUR9IHx8ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdBY3Rpdml0eURpYWxvZ0VudGl0eUlEJyApOwogICAgbXkgJFByb2Nlc3NFbnRpdHlJRCAgICAgICAgPSAkUGFyYW17UHJvY2Vzc0VudGl0eUlEfSAgICAgICAgfHwgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Byb2Nlc3NFbnRpdHlJRCcgKTsKCiAgICBpZiAoICEkVGlja2V0SUQgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFRpY2tldElEJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoICEkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCcsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCAhJFByb2Nlc3NFbnRpdHlJRCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUHJvY2Vzc0VudGl0eUlEJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBleHRlbmQgdXNlZCBpZHMgaW4gaHRtbCB0byBlbmFibGUgbXVsdGlwbGUgZGlhbG9ncyBwZXIgcGFnZQogICAgJFNlbGYtPntJRFN1ZmZpeH0gPSAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA/ICRBY3Rpdml0eURpYWxvZ0VudGl0eUlEID1+IHMvXkFjdGl2aXR5RGlhbG9nLS9fL3IgOiAnJzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHNvbWUgZmllbGRzIHNob3VsZCBiZSBza2lwcGVkIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlCiAgICBteSAkU2tpcEZpZWxkcyA9IFsgJ093bmVyJywgJ1Jlc3BvbnNpYmxlJywgJ0xvY2snLCAnUGVuZGluZ1RpbWUnLCAnQ3VzdG9tZXJJRCcgXTsKCiAgICAjIGluY2x1ZGUgZXh0cmEgZmllbGRzIHNob3VsZCBiZSBza2lwcGVkIGZvciBmb2xsb3cgdXBzCiAgICBmb3IgbXkgJEl0ZW0gKHF3KFNlcnZpY2UgU0xBIFF1ZXVlKSkgewogICAgICAgIHB1c2ggQHskU2tpcEZpZWxkc30sICRJdGVtOwogICAgfQoKICAgICMgbGlzdCBBY3RpdmUgcHJvY2Vzc2VzLCBmZXRjaCBhbHNvIEZhZGVBd2F5IHByb2Nlc3NlcyB0byBjb250aW51ZSB3b3JraW5nIHdpdGggZXhpc3RpbmcgdGlja2V0cwogICAgbXkgQFByb2Nlc3NTdGF0ZXMgPSAoICdBY3RpdmUnLCAnRmFkZUF3YXknICk7CgogICAgIyBnZXQgcHJvY2VzcyBvYmplY3QKICAgIG15ICRQcm9jZXNzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzJyk7CgogICAgIyBnZXQgYWxsIGZvbGxvdyB1cCBwcm9jZXNzZXMKICAgIG15ICRGb2xsb3d1cFByb2Nlc3NMaXN0ID0gJFByb2Nlc3NPYmplY3QtPlByb2Nlc3NMaXN0KAogICAgICAgIFByb2Nlc3NTdGF0ZSA9PiBcQFByb2Nlc3NTdGF0ZXMsCiAgICAgICAgSW50ZXJmYWNlICAgID0+ICdhbGwnLAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkRm9sbG93dXBQcm9jZXNzTGlzdCkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdObyBmb2xsb3cgdXAgcHJvY2VzcyBjb25maWd1cmVkIScsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgd2UgbmVlZCBhIHN1YmFjdGlvbiBhcyBvZiBPVE9CTyAxMC4xCiAgICBpZiAoICEkU2VsZi0+e1N1YmFjdGlvbn0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFN1YmFjdGlvbiEnLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBmb3JtIGlkCiAgICAkU2VsZi0+e0Zvcm1JRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpGb3JtQ2FjaGUnKS0+UHJlcGFyZUZvcm1JRCgKICAgICAgICBQYXJhbU9iamVjdCAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgIExheW91dE9iamVjdCA9PiAkTGF5b3V0T2JqZWN0LAogICAgKTsKCiAgICAjIGlmIGludmFsaWQgcHJvY2VzcyBpcyBkZXRlY3RlZCBvbiBhIEFjdGl2aXR5RGlsb2cgcG9wdXAgc2NyZWVuIHNob3cgYW4gZXJyb3IgbWVzc2FnZQogICAgaWYgKAogICAgICAgICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGlzcGxheUFjdGl2aXR5RGlhbG9nJwogICAgICAgICYmICEkRm9sbG93dXBQcm9jZXNzTGlzdC0+eyRQcm9jZXNzRW50aXR5SUR9CiAgICAgICAgKQogICAgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiUHJvY2VzcyAkUHJvY2Vzc0VudGl0eUlEIGlzIGludmFsaWQhIiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBHZXQgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzCiAgICAjIGNvbGxlY3RzIGEgbWl4dHVyZSBvZiBwcmVzZW50IHZhbHVlcyBib3R0b20gdG8gdG9wOgogICAgIyBTeXNDb25maWcgRGVmYXVsdFZhbHVlcywgQWN0aXZpdHlEaWFsb2cgRGVmYXVsdFZhbHVlcywgVGlja2V0VmFsdWVzLCBTdWJtaXR0ZWRWYWx1ZXMKICAgICMgaW5jbHVkaW5nIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgYW5kIFByb2Nlc3NFbnRpdHlJRAogICAgIyBpcyB1c2VkIGZvcjoKICAgICMgLSBQYXJhbWV0ZXIgY2hlY2tpbmcgYmVmb3JlIHN0b3JpbmcKICAgICMgLSB3aWxsIGJlIHVzZWQgZm9yIEFDTCBjaGVja2luZyBsYXRlciBvbgogICAgbXkgJEdldFBhcmFtID0gJFNlbGYtPl9HZXRQYXJhbSgKICAgICAgICBQcm9jZXNzRW50aXR5SUQgICAgICAgID0+ICRQcm9jZXNzRW50aXR5SUQsCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9PiAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCwKICAgICk7CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1N0b3JlQWN0aXZpdHlEaWFsb2cnICYmICRQcm9jZXNzRW50aXR5SUQgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjayggVHlwZSA9PiAnQ3VzdG9tZXInICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+X1N0b3JlQWN0aXZpdHlEaWFsb2coCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgUHJvY2Vzc05hbWUgICAgID0+ICRGb2xsb3d1cFByb2Nlc3NMaXN0LT57JFByb2Nlc3NFbnRpdHlJRH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAkUHJvY2Vzc0VudGl0eUlELAogICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgPT4gJEdldFBhcmFtLAogICAgICAgICk7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGlzcGxheUFjdGl2aXR5RGlhbG9nJyAmJiAkUHJvY2Vzc0VudGl0eUlEICkgewoKICAgICAgICAjIEdldCB2YWx1ZXMgZm9yIFRpY2tldCBmaWVsZHMgYW5kIHVzZSBkZWZhdWx0IHZhbHVlIGZvciBBcnRpY2xlIGZpZWxkcywgaWYgZ2l2ZW4gKHRoaXMKICAgICAgICAjIHNjcmVlbiBnZW5lcmF0ZXMgYSBuZXcgYXJ0aWNsZSwgdGhlbiBhcnRpY2xlIGZpZWxkcyB3aWxsIGJlIGFsd2F5cyBkZWZhdWx0IHZhbHVlIG9yCiAgICAgICAgIyBlbXB0eSBhdCB0aGUgYmVnaW5uaW5nKS4KICAgICAgICBteSAlVGlja2V0OwogICAgICAgIGlmICgkVGlja2V0SUQpIHsKICAgICAgICAgICAgJVRpY2tldCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggdmFsdWVzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgICMgc3RyaXAgZHluYW1pYyBmaWVsZCBuYW1lIGZyb20gcHJvY2VzcyBzdWZmaXgKICAgICAgICAgICAgaWYgKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gPX4gLyg/PERGTmFtZT5bQS1aYS16MC05LV0rKV8vICkgewogICAgICAgICAgICAgICAgbXkgJERGTmFtZSA9ICQre0RGTmFtZX07CgogICAgICAgICAgICAgICAgaWYgKCAoICREeW5hbWljRmllbGRDb25maWctPntPYmplY3RUeXBlfSBlcSAnVGlja2V0JyApICYmICRUaWNrZXRJRCApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBWYWx1ZSBpcyBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlIGZyb20gVGlja2V0LgogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbS0+e0R5bmFtaWNGaWVsZH17ICdEeW5hbWljRmllbGRfJyAuICRERk5hbWUgfSA9ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICRERk5hbWUgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRTZWxmLT5fT3V0cHV0QWN0aXZpdHlEaWFsb2coCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICRQcm9jZXNzRW50aXR5SUQsCiAgICAgICAgICAgIEdldFBhcmFtICAgICAgICA9PiAkR2V0UGFyYW0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBSkFYVXBkYXRlJyApIHsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5fUmVuZGVyQWpheCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFByb2Nlc3NFbnRpdHlJRCwKICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgID0+ICRHZXRQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgTWVzc2FnZSAgPT4gJ1N1YmFjdGlvbiBpcyBpbnZhbGlkJywKICAgICk7CgogICAgcmV0dXJuOwp9CgpzdWIgX1JlbmRlckFqYXggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgRmF0YWxFcnJvciBpcyBzYWZlIGJlY2F1c2UgYSBKU09OIHN0cnVjdHVyZSBpcyBleHBlY3RpbmcsIHRoZW4gaXQgd2lsbCByZXN1bHQgaW50byBhCiAgICAjIGNvbW11bmljYXRpb25zIGVycm9yCgogICAgZm9yIG15ICROZWVkZWQgKHF3KFByb2Nlc3NFbnRpdHlJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJE5lZWRlZCwgJ19SZW5kZXJBamF4JyApLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIG15ICRBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0gJFBhcmFte0dldFBhcmFtfXtBY3Rpdml0eURpYWxvZ0VudGl0eUlEfTsKICAgIGlmICggISRBY3Rpdml0eURpYWxvZ0VudGl0eUlEICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAnQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCcsICdfUmVuZGVyQWpheCcgKSwKICAgICAgICApOwogICAgfQogICAgbXkgJEFjdGl2aXR5RGlhbG9nID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eURpYWxvZycpLT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0+ICRBY3Rpdml0eURpYWxvZ0VudGl0eUlELAogICAgICAgIEludGVyZmFjZSAgICAgICAgICAgICAgPT4gJ0N1c3RvbWVySW50ZXJmYWNlJywKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJEFjdGl2aXR5RGlhbG9nKSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnTm8gQWN0aXZpdHlEaWFsb2cgY29uZmlndXJlZCBmb3IgJXMgaW4gX1JlbmRlckFqYXghJywgJEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGxpc3QgdHlwZQogICAgbXkgJFRyZWVWaWV3ID0gMDsKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpIGVxICd0cmVlJyApIHsKICAgICAgICAkVHJlZVZpZXcgPSAxOwogICAgfQoKICAgIG15ICVGaWVsZHNQcm9jZXNzZWQ7CiAgICBteSBASlNPTkNvbGxlY3RvcjsKICAgIG15ICRTZXJ2aWNlczsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIHNvbWUgZmllbGRzIHNob3VsZCBiZSBza2lwcGVkIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlCiAgICBteSAkU2tpcEZpZWxkcyA9IFsgJ093bmVyJywgJ1Jlc3BvbnNpYmxlJywgJ0xvY2snLCAnUGVuZGluZ1RpbWUnLCAnQ3VzdG9tZXJJRCcgXTsKCiAgICAjIEdldCB0aGUgYWN0aXZpdHkgZGlhbG9nJ3MgU3VibWl0IFBhcmFtJ3Mgb3IgQ29uZmlnIFBhcmFtcwogICAgRElBTE9HRklFTEQ6CiAgICBmb3IgbXkgJEN1cnJlbnRGaWVsZCAoIEB7ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkT3JkZXJ9IH0gKSB7CgogICAgICAgICMgc29tZSBmaWVsZHMgc2hvdWxkIGJlIHNraXBwZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UKICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICggZ3JlcCB7ICRfIGVxICRDdXJyZW50RmllbGQgfSBAeyRTa2lwRmllbGRzfSApOwoKICAgICAgICAjIFNraXAgaWYgd2UncmUgd29ya2luZyBvbiBhIGZpZWxkIHRoYXQgd2FzIGFscmVhZHkgZG9uZSB3aXRoIG9yIHdpdGhvdXQgSUQKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9CiAgICAgICAgICAgICYmICRGaWVsZHNQcm9jZXNzZWR7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRDsKICAgICAgICB9CgogICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJEN1cnJlbnRGaWVsZCA9fiBte15EeW5hbWljRmllbGRfKC4qKX14bXM7CgogICAgICAgIGlmICggJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gZXEgJ1F1ZXVlSUQnICkgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRGaWVsZHNQcm9jZXNzZWR7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH07CgogICAgICAgICAgICBteSAkRGF0YSA9ICRTZWxmLT5fR2V0UXVldWVzKAogICAgICAgICAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgUXVldWUgdG8gdGhlIEpTT05Db2xsZWN0b3IKICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIEBKU09OQ29sbGVjdG9yLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSAuICRTZWxmLT57SURTdWZmaXh9LAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkRGF0YSwKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte0dldFBhcmFtfXsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSwKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBUcmVlVmlldyAgICAgPT4gJFRyZWVWaWV3LAogICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkRmllbGRzUHJvY2Vzc2VkeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CgogICAgICAgIGVsc2lmICggJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gZXEgJ1N0YXRlSUQnICkgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRGaWVsZHNQcm9jZXNzZWR7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH07CgogICAgICAgICAgICBteSAkRGF0YSA9ICRTZWxmLT5fR2V0U3RhdGVzKAogICAgICAgICAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgU3RhdGUgdG8gdGhlIEpTT05Db2xsZWN0b3IKICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIEBKU09OQ29sbGVjdG9yLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdTdGF0ZUlEJyAuICRTZWxmLT57SURTdWZmaXh9LAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+ICREYXRhLAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtHZXRQYXJhbX17ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0sCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgICAgICBNYXggICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkRmllbGRzUHJvY2Vzc2VkeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnUHJpb3JpdHlJRCcgKSB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJEZpZWxkc1Byb2Nlc3NlZHsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICREYXRhID0gJFNlbGYtPl9HZXRQcmlvcml0aWVzKAogICAgICAgICAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgICAgICAgICApOwoKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUgLSBjYWxjdWxhdGUgUHJpb3JpdHkgdmlhIENJUCBtYXRyaXgKICAgICAgICAgICAgIyBub3RlOiBJbXBsZW1lbnRpbmcgdGhpcyBoZXJlIHdpbGwgbGVhZCB0byBhIHdyb25nIHJlc3VsdCBpZiBlLmcuIGFuIHVwZGF0ZSBvZiB0aGUgaW1wYWN0IGRmIGxlYWRzCiAgICAgICAgICAgICMgdG8gdGhlIHNlcnZpY2VzIGJlaW5nIGVtcHRpZWQuIFRoaXMgaXMgYWNjZXB0ZWQsIGFzIG5vIHN5c3RlbSBpcyBwcm9iYWJseSBldmVyIGNvbmZpZ3VyZWQgdGhpcyB3YXkuCiAgICAgICAgICAgICMgQ3VycmVudGx5IEFnZW50VGlja2V0UHJvY2VzcyBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGNvbnZlcmdlbmNlIGxvb3Agb2Ygb3RoZXIgbWFza3MgYW5kICJsYWdzIiBhbGwKICAgICAgICAgICAgIyBmaWVsZHMuIENoYW5naW5nIHRoYXQgd2lsbCBpbXBsaWNpdGVseSBzb2x2ZSB0aGUgYWJvdmUsIHRvby4KICAgICAgICAgICAgbXkgJENvbmZpZyAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259IikgLy8ge307CiAgICAgICAgICAgIG15ICRDSVBDYWxjdWxhdGUgPSAkQ29uZmlnLT57UHJpb3JpdHlCeUNJUH0gLy8gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNOjpGcm9udGVuZDo6Q0lQQWxsb2NhdGlvbkRlZmF1bHQnKTsKCiAgICAgICAgICAgIGlmICggJENJUENhbGN1bGF0ZSAmJiAkUGFyYW17R2V0UGFyYW19e0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9ICkgewogICAgICAgICAgICAgICAgIyBnZXQgdGhlIGNyaXRpY2FsaXR5IGVpdGhlciBmcm9tIHRoZSBtYW51YWxseSBzZXQgZHluYW1pYyBmaWVsZCwgb3IgdGhlIHNlcnZpY2UKICAgICAgICAgICAgICAgIG15ICRDcml0aWNhbGl0eSA9ICRQYXJhbXtHZXRQYXJhbX17RHluYW1pY0ZpZWxkX0lUU01Dcml0aWNhbGl0eX07CgogICAgICAgICAgICAgICAgaWYgKCAhJENyaXRpY2FsaXR5ICYmICRQYXJhbXtHZXRQYXJhbX17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICBteSAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkUGFyYW17R2V0UGFyYW19e1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICRDcml0aWNhbGl0eSA9ICRTZXJ2aWNle0NyaXRpY2FsaXR5fTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICRDcml0aWNhbGl0eSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkQ2hhbmdlZCA9ICRQYXJhbXtHZXRQYXJhbX17RWxlbWVudENoYW5nZWR9OwoKICAgICAgICAgICAgICAgICAgICBpZiAoICRDaGFuZ2VkIGVxICdEeW5hbWljRmllbGRfSVRTTUltcGFjdCcgfHwgJENoYW5nZWQgZXEgJ0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHknIHx8ICRDaGFuZ2VkIGVxICdTZXJ2aWNlSUQnICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUnKS0+UHJpb3JpdHlBbGxvY2F0aW9uR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJENyaXRpY2FsaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wYWN0ICAgICAgPT4gJFBhcmFte0dldFBhcmFtfXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtHZXRQYXJhbX17UHJpb3JpdHlJRH0gPSAkUHJpb3JpdHlJRDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgaWYgd2UgZW5mb3JjZSBDSVBBbGxvY2F0aW9uIGluIGFueSBjYXNlIGRlbGV0ZSBhbGwgb3RoZXIgcHJpb3JpdHkgb3B0aW9ucwogICAgICAgICAgICAgICAgICAgIGlmICggJFBhcmFte0dldFBhcmFtfXtQcmlvcml0eUlEfSAmJiAkQ0lQQ2FsY3VsYXRlID09IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRhID0geyAkUGFyYW17R2V0UGFyYW19e1ByaW9yaXR5SUR9ID0+ICREYXRhLT57ICRQYXJhbXtHZXRQYXJhbX17UHJpb3JpdHlJRH0gfSB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQojIEVPIElUU01Db3JlCgogICAgICAgICAgICAjIGFkZCBQcmlvcml0eSB0byB0aGUgSlNPTkNvbGxlY3RvcgogICAgICAgICAgICBwdXNoKAogICAgICAgICAgICAgICAgQEpTT05Db2xsZWN0b3IsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gLiAkU2VsZi0+e0lEU3VmZml4fSwKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiAkRGF0YSwKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17R2V0UGFyYW19eyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9LAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTWF4ICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJEZpZWxkc1Byb2Nlc3NlZHsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gZXEgJ1NlcnZpY2VJRCcgKSB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJEZpZWxkc1Byb2Nlc3NlZHsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICREYXRhID0gJFNlbGYtPl9HZXRTZXJ2aWNlcygKICAgICAgICAgICAgICAgICV7ICRQYXJhbXtHZXRQYXJhbX0gfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlcnZpY2VzID0gJERhdGE7CgogICAgICAgICAgICAjIGFkZCBTZXJ2aWNlIHRvIHRoZSBKU09OQ29sbGVjdG9yIChVc2UgU2VydmljZUlEIGZyb20gd2ViIHJlcXVlc3QpCiAgICAgICAgICAgIHB1c2goCiAgICAgICAgICAgICAgICBASlNPTkNvbGxlY3RvciwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gLiAkU2VsZi0+e0lEU3VmZml4fSwKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJERhdGEsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZXJ2aWNlSUQnICkgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+ICRUcmVlVmlldywKICAgICAgICAgICAgICAgICAgICBUcmVlVmlldyAgICAgPT4gJFRyZWVWaWV3LAogICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkRmllbGRzUHJvY2Vzc2VkeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnU0xBSUQnICkgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRGaWVsZHNQcm9jZXNzZWR7ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH07CgogICAgICAgICAgICAjIGlmIFNMQSBpcyByZW5kZXIgYmVmb3JlIHNlcnZpY2UgKGJ5IGl0IG9yZGVyIGluIHRoZSBmaWVsZHMpIGl0IG5lZWRzIHRvIGNyZWF0ZQogICAgICAgICAgICAjIHRoZSBzZXJ2aWNlIGxpc3QKICAgICAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJFNlcnZpY2VzKSApIHsKICAgICAgICAgICAgICAgICRTZXJ2aWNlcyA9ICRTZWxmLT5fR2V0U2VydmljZXMoCiAgICAgICAgICAgICAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJERhdGEgPSAkU2VsZi0+X0dldFNMQXMoCiAgICAgICAgICAgICAgICAleyAkUGFyYW17R2V0UGFyYW19IH0sCiAgICAgICAgICAgICAgICBTZXJ2aWNlcyAgPT4gJFNlcnZpY2VzLAogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZXJ2aWNlSUQnICkgfHwgJycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCBTTEEgdG8gdGhlIEpTT05Db2xsZWN0b3IgKFVzZSBTZWxlY3RlZElEIGZyb20gd2ViIHJlcXVlc3QpCiAgICAgICAgICAgIHB1c2goCiAgICAgICAgICAgICAgICBASlNPTkNvbGxlY3RvciwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gLiAkU2VsZi0+e0lEU3VmZml4fSwKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJERhdGEsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTTEFJRCcgKSB8fCAnJywKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJEZpZWxkc1Byb2Nlc3NlZHsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gZXEgJ1R5cGVJRCcgKSB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJEZpZWxkc1Byb2Nlc3NlZHsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICREYXRhID0gJFNlbGYtPl9HZXRUeXBlcygKICAgICAgICAgICAgICAgICV7ICRQYXJhbXtHZXRQYXJhbX0gfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgQWRkIFR5cGUgdG8gdGhlIEpTT05Db2xsZWN0b3IgKFVzZSBTZWxlY3RlZElEIGZyb20gd2ViIHJlcXVlc3QpLgogICAgICAgICAgICBwdXNoKAogICAgICAgICAgICAgICAgQEpTT05Db2xsZWN0b3IsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IC4gJFNlbGYtPntJRFN1ZmZpeH0sCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICREYXRhLAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVHlwZUlEJyApIHx8ICcnLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkRmllbGRzUHJvY2Vzc2VkeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CiAgICBteSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkZpZWxkUmVzdHJpY3Rpb25zJyk7CgogICAgIyByZXRyaWV2ZSBmaWVsZCByZXN0cmljdGlvbnMgZm9yIGR5bmFtaWMgZmllbGRzCiAgICBteSAkQUNMUHJlc2VsZWN0aW9uOwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldEFDTDo6QUNMUHJlc2VsZWN0aW9uJykgKSB7CgogICAgICAgICMgZ2V0IGNhY2hlZCBwcmVzZWxlY3Rpb24gcnVsZXMKICAgICAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKICAgICAgICAkQUNMUHJlc2VsZWN0aW9uID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJ1RpY2tldEFDTCcsCiAgICAgICAgICAgIEtleSAgPT4gJ1ByZXNlbGVjdGlvbicsCiAgICAgICAgKTsKICAgICAgICBpZiAoICEkQUNMUHJlc2VsZWN0aW9uICkgewogICAgICAgICAgICAkQUNMUHJlc2VsZWN0aW9uID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5TZXRBQ0xQcmVzZWxlY3Rpb25DYWNoZSgpOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkQXV0b3NlbGVjdCAgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBQ0w6OkF1dG9zZWxlY3QnKSB8fCB1bmRlZjsKICAgIG15ICRMb29wUHJvdGVjdGlvbiAgPSAxMDA7CiAgICBteSAlQ2hhbmdlZEVsZW1lbnRzID0gJFBhcmFte0dldFBhcmFtfXtFbGVtZW50Q2hhbmdlZH0gPyAoICRQYXJhbXtHZXRQYXJhbX17RWxlbWVudENoYW5nZWR9ID0+IDEgKSA6ICgpOwoKICAgICMgYnVpbGQgaGFzaCBvZiBmaWVsZCBjb25maWdzIHdpdGhvdXQgc3VmZml4IGF0dGFjaGVkIHRvIG5hbWUKICAgIG15ICVGaWVsZENvbmZpZ3NQbGFpbiA9IG1hcCB7ICggJF8gPT4geyAkU2VsZi0+e0R5bmFtaWNGaWVsZH17JF99LT4lKiwgTmFtZSA9PiAkXyB9ICkgfSBrZXlzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSo7CgogICAgIyBnZXQgdmFsdWVzIGFuZCB2aXNpYmlsaXR5IG9mIGR5bmFtaWMgZmllbGRzCiAgICBteSAlRHluRmllbGRTdGF0ZXMgPSAkRmllbGRSZXN0cmljdGlvbnNPYmplY3QtPkdldEZpZWxkU3RhdGVzKAogICAgICAgIFRpY2tldE9iamVjdCAgICAgICAgICAgICAgPT4gJFRpY2tldE9iamVjdCwKICAgICAgICBEeW5hbWljRmllbGRzICAgICAgICAgICAgID0+IFwlRmllbGRDb25maWdzUGxhaW4sCiAgICAgICAgRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyksCiAgICAgICAgQWN0aW9uICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgQ2hhbmdlZEVsZW1lbnRzICAgICAgICAgICA9PiBcJUNoYW5nZWRFbGVtZW50cywKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX17VGlja2V0SUR9LAogICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgIEN1c3RvbWVyVXNlciAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIEdldFBhcmFtICAgICAgICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfSwKICAgICAgICBBdXRvc2VsZWN0ICAgICAgICAgICAgICAgID0+ICRBdXRvc2VsZWN0LAogICAgICAgIEFDTFByZXNlbGVjdGlvbiAgICAgICAgICAgPT4gJEFDTFByZXNlbGVjdGlvbiAvLyAnJywKICAgICAgICBMb29wUHJvdGVjdGlvbiAgICAgICAgICAgID0+IFwkTG9vcFByb3RlY3Rpb24sCiAgICApOwoKICAgICMgc2V0IG5ldyB2YWx1ZXMKICAgIG15ICRERlBhcmFtID0gewogICAgICAgICV7ICRQYXJhbXtHZXRQYXJhbX17RHluYW1pY0ZpZWxkfSAvLyB7fSB9LAogICAgICAgICREeW5GaWVsZFN0YXRlc3tOZXdWYWx1ZXN9LT4lKiwKICAgIH07CgogICAgbXkgQER5bmFtaWNGaWVsZEFKQVggPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+QnVpbGRBSkFYUmV0dXJuKAogICAgICAgIER5bmFtaWNGaWVsZENvbmZpZ3MgPT4gJFNlbGYtPntEeW5hbWljRmllbGR9LAogICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gewogICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19LT4lKiwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+ICRERlBhcmFtLAogICAgICAgIH0sCiAgICAgICAgRHluRmllbGRTdGF0ZXMgPT4gXCVEeW5GaWVsZFN0YXRlcywKICAgICAgICBJRFN1ZmZpeCAgICAgICA9PiAkU2VsZi0+e0lEU3VmZml4fSwKICAgICk7CgogICAgcHVzaCBASlNPTkNvbGxlY3RvciwgQER5bmFtaWNGaWVsZEFKQVg7CgogICAgbXkgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbkpTT04oIFtASlNPTkNvbGxlY3Rvcl0gKTsKCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICk7Cn0KCiMgPWl0ZW0gX0dldFBhcmFtKCkKIwojIHJldHVybnMgdGhlIGN1cnJlbnQgZGF0YSBzdGF0ZSBvZiB0aGUgc3VibWl0dGVkIGluZm9ybWF0aW9uCiMKIyBUaGlzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZGF0YSBmb3IgdGhlIGRpZmZlcmVudCBjYWxsZXJzOgojCiMgICAgIEluaXRpYWwgY2FsbCB3aXRoIHNlbGVjdGVkIFByb2Nlc3M6CiMgICAgICAgICBQcm9jZXNzRW50aXR5SUQKIyAgICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQKIyAgICAgICAgIERlZmF1bHRWYWx1ZXMgZm9yIHRoZSBjb25maWd1cmVkIEZpZWxkcyBpbiB0aGF0IEFjdGl2aXR5RGlhbG9nCiMgICAgICAgICBEZWZhdWx0VmFsdWVzIGZvciB0aGUgNCByZXF1aXJlZCBGaWVsZHMgUXVldWUgU3RhdGUgTG9jayBQcmlvcml0eQojCiMgICAgIEZpcnN0IFN0b3JlIGNhbGwgc3VibWl0dGluZyBhbiBBY3Rpdml0eSBEaWFsb2c6CiMgICAgICAgICBQcm9jZXNzRW50aXR5SUQKIyAgICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQKIyAgICAgICAgIFN1Ym1pdHRlZFZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgQWN0aXZpdHlEaWFsb2cKIyAgICAgICAgIEFjdGl2aXR5RGlhbG9nIERlZmF1bHRWYWx1ZXMgZm9yIGludmlzaWJsZSBmaWVsZHMgb2YgdGhhdCBBY3Rpdml0eURpYWxvZwojICAgICAgICAgRGVmYXVsdFZhbHVlcyBmb3IgdGhlIDQgcmVxdWlyZWQgRmllbGRzIFF1ZXVlIFN0YXRlIExvY2sgUHJpb3JpdHkKIyAgICAgICAgICAgICBpZiBub3QgY29uZmlndXJlZCBpbiB0aGUgQWN0aXZpdHlEaWFsb2cKIwojICAgICBBY3Rpdml0eURpYWxvZyBmaWxsb3V0IHJlcXVlc3Qgb24gZXhpc3RpbmcgVGlja2V0OgojICAgICAgICAgUHJvY2Vzc0VudGl0eUlECiMgICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlECiMgICAgICAgICBUaWNrZXRWYWx1ZXMKIwojICAgICBBY3Rpdml0eURpYWxvZyBzdG9yZSByZXF1ZXN0IG9yIEFqYXhVcGRhdGUgcmVxdWVzdCBvbiBleGlzdGluZyBUaWNrZXRzOgojICAgICAgICAgUHJvY2Vzc0VudGl0eUlECiMgICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlECiMgICAgICAgICBUaWNrZXRWYWx1ZXMgZm9yIGFsbCBub3QtU3VibWl0dGVkIFZhbHVlcwojICAgICAgICAgU3VibWl0dGVkIFZhbHVlcwojCiMgICAgIG15ICRHZXRQYXJhbSA9IF9HZXRQYXJhbSgKIyAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAkUHJvY2Vzc0VudGl0eUlELAojICAgICApOwojCiMgPWN1dAoKc3ViIF9HZXRQYXJhbSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldElEIFByb2Nlc3NFbnRpdHlJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJE5lZWRlZCwgJ19HZXRQYXJhbScgKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgbXkgJUdldFBhcmFtOwogICAgbXkgJVRpY2tldDsKICAgIG15ICRQcm9jZXNzRW50aXR5SUQgICAgICAgID0gJFBhcmFte1Byb2Nlc3NFbnRpdHlJRH07CiAgICBteSAkVGlja2V0SUQgICAgICAgICAgICAgICA9ICRQYXJhbXtUaWNrZXRJRH0gICAgICAgICAgICAgICB8fCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0SUQnICk7CiAgICBteSAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0VudGl0eUlEfSB8fCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKAogICAgICAgIFBhcmFtID0+ICdBY3Rpdml0eURpYWxvZ0VudGl0eUlEJywKICAgICk7CiAgICBteSAkQWN0aXZpdHlFbnRpdHlJRDsKICAgIG15ICVWYWx1ZXNHb3R0ZW47CiAgICBteSAkVmFsdWU7CgogICAgbXkgJEFjdGl2aXR5RGlhbG9nID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eURpYWxvZycpLT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0+ICRBY3Rpdml0eURpYWxvZ0VudGl0eUlELAogICAgICAgIEludGVyZmFjZSAgICAgICAgICAgICAgPT4gJ0N1c3RvbWVySW50ZXJmYWNlJywKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJEFjdGl2aXR5RGlhbG9nKSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJFcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb3VsZG5cJ3QgZ2V0IEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgIiVzIiEnLCAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAlVGlja2V0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICApOwoKICAgICVHZXRQYXJhbSA9ICVUaWNrZXQ7CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVHZXRQYXJhbSApICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb3VsZG5cJ3QgZ2V0IFRpY2tldCBmb3IgVGlja2V0SUQ6ICVzIGluIF9HZXRQYXJhbSEnLCAkVGlja2V0SUQgKSwKICAgICAgICApOwogICAgfQoKICAgICRBY3Rpdml0eUVudGl0eUlEID0gJFRpY2tldHsKICAgICAgICAnRHluYW1pY0ZpZWxkXycKICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoIlByb2Nlc3M6OkR5bmFtaWNGaWVsZFByb2Nlc3NNYW5hZ2VtZW50QWN0aXZpdHlJRCIpCiAgICB9OwogICAgaWYgKCAhJEFjdGl2aXR5RW50aXR5SUQgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUoJ0NvdWxkblwndCBkZXRlcm1pbmUgQWN0aXZpdHlFbnRpdHlJRC4gRHluYW1pY0ZpZWxkIG9yIENvbmZpZyBpc25cJ3Qgc2V0IHByb3Blcmx5IScpLAogICAgICAgICk7CiAgICB9CgogICAgJEdldFBhcmFte0FjdGl2aXR5RGlhbG9nRW50aXR5SUR9ID0gJEFjdGl2aXR5RGlhbG9nRW50aXR5SUQ7CiAgICAkR2V0UGFyYW17QWN0aXZpdHlFbnRpdHlJRH0gICAgICAgPSAkQWN0aXZpdHlFbnRpdHlJRDsKICAgICRHZXRQYXJhbXtQcm9jZXNzRW50aXR5SUR9ICAgICAgICA9ICRQcm9jZXNzRW50aXR5SUQ7CgogICAgIyBzb21lIGZpZWxkcyBzaG91bGQgYmUgc2tpcHBlZCBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZQogICAgbXkgJFNraXBGaWVsZHMgPSBbICdPd25lcicsICdSZXNwb25zaWJsZScsICdMb2NrJywgJ1BlbmRpbmdUaW1lJywgJ0N1c3RvbWVySUQnIF07CgogICAgIyBHZXQgdGhlIGFjdGl2aXR5ZGlhbG9ncydzIFN1Ym1pdCBQYXJhbSdzIG9yIENvbmZpZyBQYXJhbXMKICAgIERJQUxPR0ZJRUxEOgogICAgZm9yIG15ICRDdXJyZW50RmllbGQgKCBAeyAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZE9yZGVyfSB9ICkgewoKICAgICAgICAjIHNvbWUgZmllbGRzIHNob3VsZCBiZSBza2lwcGVkIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlCiAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAoIGdyZXAgeyAkXyBlcSAkQ3VycmVudEZpZWxkIH0gQHskU2tpcEZpZWxkc30gKTsKCiAgICAgICAgIyBTa2lwIGlmIHdlJ3JlIHdvcmtpbmcgb24gYSBmaWVsZCB0aGF0IHdhcyBhbHJlYWR5IGRvbmUgd2l0aCBvciB3aXRob3V0IElECiAgICAgICAgaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSAmJiAkVmFsdWVzR290dGVueyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ICkKICAgICAgICB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQ7CiAgICAgICAgfQoKICAgICAgICAjIGhhbmRsZSBkeW5hbWljIGZpZWxkcyBzZXBhcmF0ZWx5CiAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkQ3VycmVudEZpZWxkID1+IG17XkR5bmFtaWNGaWVsZF8oLiopfXhtczsKCiAgICAgICAgIyBnZXQgYXJ0aWNsZSBmaWVsZHMKICAgICAgICBpZiAoICRDdXJyZW50RmllbGQgZXEgJ0FydGljbGUnICkgewoKICAgICAgICAgICAgJEdldFBhcmFte1N1YmplY3R9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmplY3QnICk7CiAgICAgICAgICAgICRHZXRQYXJhbXtCb2R5fSAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdCb2R5JyApOwoKICAgICAgICAgICAgJFZhbHVlc0dvdHRlbntBcnRpY2xlfSA9IDEgaWYgKCAkR2V0UGFyYW17U3ViamVjdH0gJiYgJEdldFBhcmFte0JvZHl9ICk7CiAgICAgICAgfQoKICAgICAgICAjIE5vbiBEeW5hbWljRmllbGRzCiAgICAgICAgIyAxLiB0cnkgdG8gZ2V0IHRoZSByZXF1aXJlZCBwYXJhbQogICAgICAgIG15ICRWYWx1ZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9ICk7CgogICAgICAgIGlmICgkVmFsdWUpIHsKCiAgICAgICAgICAgICMgaWYgd2UgaGF2ZSBhbiBJRCBmaWVsZCBtYWtlIHN1cmUgdGhlIHZhbHVlIHdpdGhvdXQgSUQgd29uJ3QgYmUgaW4gdGhlCiAgICAgICAgICAgICMgJUdldFBhcmFtIEhhc2ggYW55IG1vcmUKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSA9fiBteyguKilJRCR9eG1zICkgewogICAgICAgICAgICAgICAgJEdldFBhcmFteyQxfSA9IHVuZGVmOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRHZXRQYXJhbXsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSAgICAgPSAkVmFsdWU7CiAgICAgICAgICAgICRWYWx1ZXNHb3R0ZW57ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEOwogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBnb3QgdGlja2V0IHBhcmFtcywgdGhlIEdldFBhcmFtIEhhc2ggd2FzIGFscmVhZHkgZmlsbGVkIGJlZm9yZSB0aGUgbG9vcAogICAgICAgICMgYW5kIHdlIGNhbiBuZXh0IG91dAogICAgICAgIGlmICggJEdldFBhcmFteyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ICkgewogICAgICAgICAgICAkVmFsdWVzR290dGVueyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRDsKICAgICAgICB9CgogICAgICAgICMgaWYgbm8gU3VibWl0dGVkIG5vciBUaWNrZXQgUGFyYW0gZ2V0IEFjdGl2aXR5RGlhbG9nIENvbmZpZydzIFBhcmFtCiAgICAgICAgJFZhbHVlID0gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZWZhdWx0VmFsdWV9OwoKICAgICAgICBpZiAoJFZhbHVlKSB7CiAgICAgICAgICAgICRWYWx1ZXNHb3R0ZW57ICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgICAgICAkR2V0UGFyYW17JEN1cnJlbnRGaWVsZH0gPSAkVmFsdWU7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQ7CiAgICAgICAgfQogICAgfQoKICAgIFJFUVVJUkVERklFTERMT09QOgogICAgZm9yIG15ICRDdXJyZW50RmllbGQgKHF3KFF1ZXVlIFN0YXRlIExvY2sgUHJpb3JpdHkpKSB7CiAgICAgICAgJFZhbHVlID0gdW5kZWY7CiAgICAgICAgaWYgKCAhJFZhbHVlc0dvdHRlbnsgJFNlbGYtPntOYW1lVG9JRH17JEN1cnJlbnRGaWVsZH0gfSApIHsKICAgICAgICAgICAgJFZhbHVlID0gJENvbmZpZ09iamVjdC0+R2V0KCJQcm9jZXNzOjpEZWZhdWx0JEN1cnJlbnRGaWVsZCIpOwogICAgICAgICAgICBpZiAoICEkVmFsdWUgKSB7CgogICAgICAgICAgICAgICAgbXkgJE1lc3NhZ2UgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQcm9jZXNzOjpEZWZhdWx0JXMgQ29uZmlnIFZhbHVlIG1pc3NpbmchJywgJEN1cnJlbnRGaWVsZCApOwoKICAgICAgICAgICAgICAgICMgZG9lcyBub3Qgc2hvdyBoZWFkZXIgYW5kIGZvb3RlciBhZ2FpbgogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJEdldFBhcmFteyRDdXJyZW50RmllbGR9ID0gJFZhbHVlOwogICAgICAgICAgICAkVmFsdWVzR290dGVueyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgYWxzbyB0aGUgSURzIGZvciB0aGUgUmVxdWlyZWQgZmlsZXMgKGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50KQogICAgaWYgKCAkR2V0UGFyYW17UXVldWV9ICYmICEkR2V0UGFyYW17UXVldWVJRH0gKSB7CiAgICAgICAgJEdldFBhcmFte1F1ZXVlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlTG9va3VwKCBRdWV1ZSA9PiAkR2V0UGFyYW17UXVldWV9ICk7CiAgICB9CiAgICBpZiAoICRHZXRQYXJhbXtTdGF0ZX0gJiYgISRHZXRQYXJhbXtTdGF0ZUlEfSApIHsKICAgICAgICAkR2V0UGFyYW17U3RhdGVJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKS0+U3RhdGVMb29rdXAoIFN0YXRlID0+ICRHZXRQYXJhbXtTdGF0ZX0gKTsKICAgIH0KICAgIGlmICggJEdldFBhcmFte0xvY2t9ICYmICEkR2V0UGFyYW17TG9ja0lEfSApIHsKICAgICAgICAkR2V0UGFyYW17TG9ja0lEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2NrJyktPkxvY2tMb29rdXAoIExvY2sgPT4gJEdldFBhcmFte0xvY2t9ICk7CiAgICB9CiAgICBpZiAoICRHZXRQYXJhbXtQcmlvcml0eX0gJiYgISRHZXRQYXJhbXtQcmlvcml0eUlEfSApIHsKICAgICAgICAkR2V0UGFyYW17UHJpb3JpdHlJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKS0+UHJpb3JpdHlMb29rdXAoCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICRHZXRQYXJhbXtQcmlvcml0eX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFuZCBhbG1vc3QgZmluYWxseSB3ZSdsbCBoYXZlIHRoZSBzcGVjaWFsIHBhcmFtZXRlcnM6CiAgICAkR2V0UGFyYW17UmVzcG9uc2libGVBbGx9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Jlc3BvbnNpYmxlQWxsJyApOwogICAgJEdldFBhcmFte093bmVyQWxsfSAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPd25lckFsbCcgKTsKICAgICRHZXRQYXJhbXtFbGVtZW50Q2hhbmdlZH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRWxlbWVudENoYW5nZWQnICkgfHwgJyc7CgogICAgIyBjdXQgc3VmZml4IGZyb20gbmFtZSBvZiBjaGFuZ2VkIGVsZW1lbnQKICAgIGlmICggJEdldFBhcmFte0VsZW1lbnRDaGFuZ2VkfSA9fiAvXig/PERGQ2hhbmdlZD5EeW5hbWljRmllbGRfW0EtWmEtejAtOVwtXSspJFNlbGYtPntJRFN1ZmZpeH0kLyApIHsKICAgICAgICAkR2V0UGFyYW17RWxlbWVudENoYW5nZWR9ID0gJCt7REZDaGFuZ2VkfTsKICAgIH0KCiAgICAjIGhhbmRsZSBkeW5hbWljIGZpZWxkcwogICAgJFNlbGYtPntEeW5hbWljRmllbGR9ID0ge307CgogICAgIyBQYXJzZSBkZWZpbml0aW9uIGlmIHByZXNlbnQKICAgIGlmICggJEFjdGl2aXR5RGlhbG9nLT57SW5wdXRGaWVsZERlZmluaXRpb259ICkgewogICAgICAgIG15ICRJbnB1dEZpZWxkRGVmaW5pdGlvbiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpZQU1MJyktPkxvYWQoCiAgICAgICAgICAgIERhdGEgPT4gJEFjdGl2aXR5RGlhbG9nLT57SW5wdXRGaWVsZERlZmluaXRpb259LAogICAgICAgICk7CgogICAgICAgIG15ICREeW5hbWljRmllbGRzID0gJFNlbGYtPl9HZXRJbnB1dERlZmluaXRpb25EeW5hbWljRmllbGRzKAogICAgICAgICAgICBJbnB1dEZpZWxkRGVmaW5pdGlvbiA9PiAkSW5wdXRGaWVsZERlZmluaXRpb24sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPntEeW5hbWljRmllbGR9ID0gJER5bmFtaWNGaWVsZHMgLy8ge307CiAgICB9CgogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfSApICkgewogICAgICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CgogICAgICAgIERGTkFNRToKICAgICAgICBmb3IgbXkgJERGTmFtZSAoIG1hcCB7L15EeW5hbWljRmllbGRfKC4rKSQvfSBrZXlzICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc30tPiUqICkgewogICAgICAgICAgICBuZXh0IERGTkFNRSBpZiAkU2VsZi0+e0R5bmFtaWNGaWVsZH17JERGTmFtZX07CgogICAgICAgICAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZH17JERGTmFtZX0gPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgICAgICBOYW1lID0+ICRERk5hbWUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkTmFtZSAoIGtleXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKiApIHsKCiAgICAgICAgIyBvdmVyd3JpdGUgZHluYW1pYyBmaWVsZCBjb25maWcgZGVmYXVsdCB2YWx1ZSB3aXRoIGFjdGl2aXR5IGRpYWxvZyBkZWZhdWx0IHZhbHVlLCBpZiBwcmVzZW50CiAgICAgICAgaWYgKAogICAgICAgICAgICAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyJEeW5hbWljRmllbGRfJER5bmFtaWNGaWVsZE5hbWUifQogICAgICAgICAgICAmJiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyJEeW5hbWljRmllbGRfJER5bmFtaWNGaWVsZE5hbWUifXtEZWZhdWx0VmFsdWV9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRTZWxmLT57RHluYW1pY0ZpZWxkfXskRHluYW1pY0ZpZWxkTmFtZX17Q29uZmlnfXtEZWZhdWx0VmFsdWV9ID0gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXsiRHluYW1pY0ZpZWxkXyREeW5hbWljRmllbGROYW1lIn17RGVmYXVsdFZhbHVlfTsKICAgICAgICB9CgogICAgICAgICMgR2V0IHRoZSBDb25maWcgb2YgdGhlIGN1cnJlbnQgRHluYW1pY0ZpZWxkCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICRTZWxmLT57RHluYW1pY0ZpZWxkfXskRHluYW1pY0ZpZWxkTmFtZX07CgogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpICkgewogICAgICAgICAgICBteSAkTWVzc2FnZSA9CiAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkQ29uZmlnIG1pc3NpbmcgZm9yIGZpZWxkOiAkRHluYW1pY0ZpZWxkTmFtZSwgb3IgaXMgbm90IGEgVGlja2V0IER5bmFtaWMgRmllbGQhIjsKCiAgICAgICAgICAgICMgbG9nIGVycm9yIGJ1dCBkb2VzIG5vdCBzdG9wIHRoZSBleGVjdXRpb24gYXMgaXQgY291bGQgYmUgYW4gb2xkIEFydGljbGUKICAgICAgICAgICAgIyBEeW5hbWljRmllbGQsIHNlZSBidWcjMTE2NjYKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJE1lc3NhZ2UsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRDsKICAgICAgICB9CgogICAgICAgICMgaW5jbHVkZSBwcm9jZXNzIGlkIHN1ZmZpeCBpbnRvIGR5bmFtaWMgZmllbGQgY29uZmlncwogICAgICAgICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuPSAkU2VsZi0+e0lEU3VmZml4fTsKICAgICAgICAkRHluYW1pY0ZpZWxkQ29uZmlnLT57UHJvY2Vzc1N1ZmZpeH0gPSAkU2VsZi0+e0lEU3VmZml4fTsKCiAgICAgICAgIyBHZXQgRHluYW1pY0ZpZWxkIFZhbHVlcwogICAgICAgICRHZXRQYXJhbXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgfSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZUdldCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICk7CgogICAgICAgICMgQUNMQ29tcGF0CiAgICAgICAgJEdldFBhcmFte0R5bmFtaWNGaWVsZH17ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH0gPSAkR2V0UGFyYW17ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH07CiAgICB9CgogICAgcmV0dXJuIFwlR2V0UGFyYW07Cn0KCnN1YiBfT3V0cHV0QWN0aXZpdHlEaWFsb2cgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgIG15ICRUaWNrZXRJRCAgICAgICAgICAgICAgID0gJFBhcmFte0dldFBhcmFtfXtUaWNrZXRJRH07CiAgICBteSAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9ICRQYXJhbXtHZXRQYXJhbX17QWN0aXZpdHlEaWFsb2dFbnRpdHlJRH07CgogICAgIyBnZXQgbmVjZXNzYXJ5IG9iamVjdHMKICAgICMgQ3VzdG9tZXJUaWNrZXRQcm9jZXNzIGdldHMgb25seSBjYWxsZWQgYnkgQ3VzdG9tZXJUaWNrZXRab29tIGFuZCByZXR1cm5zIGl0cyBIVE1MIHRvIHRoZXJlCiAgICAjIGZvciBIVE1MIGdlbmVyYXRpb24gYSBzZXBhcmF0ZSBMYXlvdXRPYmplY3QgaXMgY3JlYXRlZDsgYWxsIEpTLXN0dWZmIGhhcyB0byBiZSBkb25lIHdpdGggdGhlIG9uZSBvZiBDdXN0b21lclRpY2tldFpvb20gKGUuZy4gaW4gZHluYW1pYyBmaWVsZHMpCiAgICBteSAkTGF5b3V0T2JqZWN0Wm9vbSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFRpY2tldE9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBDaGVjayBuZWVkZWQgcGFyYW1ldGVyczoKICAgICMgUHJvY2Vzc0VudGl0eUlEIG9ubHkKICAgICMgVGlja2V0SUQgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRAogICAgaWYgKCAhJFBhcmFte1Byb2Nlc3NFbnRpdHlJRH0gfHwgKCAhJFRpY2tldElEICYmICEkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCApICkgewogICAgICAgIG15ICRNZXNzYWdlID0gVHJhbnNsYXRhYmxlKCdHb3Qgbm8gUHJvY2Vzc0VudGl0eUlEIG9yIFRpY2tldElEIGFuZCBBY3Rpdml0eURpYWxvZ0VudGl0eUlEIScpOwoKICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTWVzc2FnZSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRBY3Rpdml0eUFjdGl2aXR5RGlhbG9nOwogICAgbXkgJVRpY2tldDsKICAgIG15ICVFcnJvciAgICAgICAgID0gKCk7CiAgICBteSAlRXJyb3JNZXNzYWdlcyA9ICgpOwoKICAgICMgSWYgd2UgaGFkIEVycm9ycywgd2UgZ290IGFuIEVycm9yaGFzaAogICAgJUVycm9yICAgICAgICAgPSAleyAkUGFyYW17RXJyb3J9IH0gICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3J9ICkgKTsKICAgICVFcnJvck1lc3NhZ2VzID0gJXsgJFBhcmFte0Vycm9yTWVzc2FnZXN9IH0gaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0Vycm9yTWVzc2FnZXN9ICkgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJEFjdGl2aXR5T2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eScpOwogICAgbXkgJEFjdGl2aXR5RGlhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eURpYWxvZycpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIG5vIEFKQVggdXBkYXRlIGluIHRoaXMgcGFydAogICAgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0ICkgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NhblwndCBnZXQgVGlja2V0ICIlcyIhJywgJFBhcmFte1RpY2tldElEfSApLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZFByb2Nlc3NJRCA9ICdEeW5hbWljRmllbGRfJwogICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9jZXNzOjpEeW5hbWljRmllbGRQcm9jZXNzTWFuYWdlbWVudFByb2Nlc3NJRCcpOwogICAgbXkgJER5bmFtaWNGaWVsZEFjdGl2aXR5SUQgPSAnRHluYW1pY0ZpZWxkXycKICAgICAgICAuICRDb25maWdPYmplY3QtPkdldCgnUHJvY2Vzczo6RHluYW1pY0ZpZWxkUHJvY2Vzc01hbmFnZW1lbnRBY3Rpdml0eUlEJyk7CgogICAgaWYgKCAhJFRpY2tldHskRHluYW1pY0ZpZWxkUHJvY2Vzc0lEfSB8fCAhJFRpY2tldHskRHluYW1pY0ZpZWxkQWN0aXZpdHlJRH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDYW5cJ3QgZ2V0IFByb2Nlc3NFbnRpdHlJRCBvciBBY3Rpdml0eUVudGl0eUlEIGZvciBUaWNrZXQgIiVzIiEnLCAkUGFyYW17VGlja2V0SUR9ICksCiAgICAgICAgKTsKICAgIH0KCiAgICAkQWN0aXZpdHlBY3Rpdml0eURpYWxvZyA9IHsKICAgICAgICBBY3Rpdml0eSAgICAgICA9PiAkVGlja2V0eyREeW5hbWljRmllbGRBY3Rpdml0eUlEfSwKICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCwKICAgIH07CgogICAgbXkgJEFjdGl2aXR5ID0gJEFjdGl2aXR5T2JqZWN0LT5BY3Rpdml0eUdldCgKICAgICAgICBJbnRlcmZhY2UgICAgICAgID0+ICdDdXN0b21lckludGVyZmFjZScsCiAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAkQWN0aXZpdHlBY3Rpdml0eURpYWxvZy0+e0FjdGl2aXR5fQogICAgKTsKICAgIGlmICggISRBY3Rpdml0eSApIHsKICAgICAgICBteSAkTWVzc2FnZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgJ0NhblwndCBnZXQgQWN0aXZpdHkgY29uZmlndXJhdGlvbiBmb3IgQWN0aXZpdHlFbnRpdHlJRCAiJXMiIScsCiAgICAgICAgICAgICRBY3Rpdml0eUFjdGl2aXR5RGlhbG9nLT57QWN0aXZpdHl9LAogICAgICAgICk7CgogICAgICAgICMgZG9lcyBub3Qgc2hvdyBoZWFkZXIgYW5kIGZvb3RlciBhZ2FpbgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICRNZXNzYWdlLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJEFjdGl2aXR5RGlhbG9nID0gJEFjdGl2aXR5RGlhbG9nT2JqZWN0LT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0+ICRBY3Rpdml0eUFjdGl2aXR5RGlhbG9nLT57QWN0aXZpdHlEaWFsb2d9LAogICAgICAgIEludGVyZmFjZSAgICAgICAgICAgICAgPT4gJ0N1c3RvbWVySW50ZXJmYWNlJywKICAgICk7CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkQWN0aXZpdHlEaWFsb2cpICkgewogICAgICAgIG15ICRNZXNzYWdlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAnQ2FuXCd0IGdldCBBY3Rpdml0eURpYWxvZyBjb25maWd1cmF0aW9uIGZvciBBY3Rpdml0eURpYWxvZ0VudGl0eUlEICIlcyIhJywKICAgICAgICAgICAgJEFjdGl2aXR5QWN0aXZpdHlEaWFsb2ctPntBY3Rpdml0eURpYWxvZ30sCiAgICAgICAgKTsKCiAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJE1lc3NhZ2UsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdyZXAgb3V0IE92ZXJ3cml0ZXMgaWYgZGVmaW5lZCBvbiB0aGUgQWN0aXZpdHkKICAgIG15IEBPdmVyd3JpdGVBY3Rpdml0eURpYWxvZ051bWJlciA9IGdyZXAgewogICAgICAgIHJlZiAkQWN0aXZpdHktPntBY3Rpdml0eURpYWxvZ317JF99IGVxICdIQVNIJwogICAgICAgICAgICAmJiAkQWN0aXZpdHktPntBY3Rpdml0eURpYWxvZ317JF99e0FjdGl2aXR5RGlhbG9nRW50aXR5SUR9CiAgICAgICAgICAgICYmICRBY3Rpdml0eS0+e0FjdGl2aXR5RGlhbG9nfXskX317QWN0aXZpdHlEaWFsb2dFbnRpdHlJRH0gZXEKICAgICAgICAgICAgJEFjdGl2aXR5QWN0aXZpdHlEaWFsb2ctPntBY3Rpdml0eURpYWxvZ30KICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBY3Rpdml0eS0+e0FjdGl2aXR5RGlhbG9nfXskX317T3ZlcndyaXRlfSApCiAgICB9IGtleXMgJXsgJEFjdGl2aXR5LT57QWN0aXZpdHlEaWFsb2d9IH07CgogICAgIyBsZXQgdGhlIE92ZXJ3cml0ZXMgT3ZlcndyaXRlIHRoZSBBY3Rpdml0eURpYWxvZydzIEhhc2ggdmFsdWVzCiAgICBpZiAoICRPdmVyd3JpdGVBY3Rpdml0eURpYWxvZ051bWJlclswXSApIHsKICAgICAgICAleyRBY3Rpdml0eURpYWxvZ30gPSAoCiAgICAgICAgICAgICV7JEFjdGl2aXR5RGlhbG9nfSwKICAgICAgICAgICAgJXsgJEFjdGl2aXR5LT57QWN0aXZpdHlEaWFsb2d9eyAkT3ZlcndyaXRlQWN0aXZpdHlEaWFsb2dOdW1iZXJbMF0gfXtPdmVyd3JpdGV9IH0KICAgICAgICApOwogICAgfQoKICAgICMgQWRkIFBhZ2VIZWFkZXIsIE5hdmJhciwgRm9ybWhlYWRlciAoUHJvY2Vzcy9BY3Rpdml0eURpYWxvZ0hlYWRlcikKICAgIG15ICRPdXRwdXQ7CiAgICBteSAkTWFpbkJveENsYXNzOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0hlYWRlcicsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIE5hbWUgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJEFjdGl2aXR5RGlhbG9nLT57TmFtZX0gKQogICAgICAgICAgICAgICAgfHwgJycsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBzaG93IGRlc2NyaXB0aW9ucwogICAgaWYgKCAkQWN0aXZpdHlEaWFsb2ctPntEZXNjcmlwdGlvblNob3J0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRGVzY3JpcHRpb25TaG9ydCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydAogICAgICAgICAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJEFjdGl2aXR5RGlhbG9nLT57RGVzY3JpcHRpb25TaG9ydH0sCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgaWYgKCAkQWN0aXZpdHlEaWFsb2ctPntEZXNjcmlwdGlvbkxvbmd9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEZXNjcmlwdGlvbkxvbmcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZwogICAgICAgICAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJEFjdGl2aXR5RGlhbG9nLT57RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CiAgICBpZiAoICRQYXJhbXtSZW5kZXJMb2NrZWR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQcm9wZXJ0aWVzTG9jaycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQ2FuY2VsTGluaycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGV4cGxhbmF0b3J5IG1lc3NhZ2UgYWJvdXQgYXN0ZXJpc2sKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBc3Rlcmlza0V4cGxhbmF0aW9uJykgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FzdGVyaXNrRXhwbGFuYXRpb24nLAogICAgICAgICk7CiAgICB9CgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQcm9jZXNzTWFuYWdlbWVudC9DdXN0b21lckFjdGl2aXR5RGlhbG9nSGVhZGVyJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBGb3JtTmFtZSAgICAgICAgICAgICAgID0+ICdBY3Rpdml0eURpYWxvZ0RpYWxvZycgLiAkQWN0aXZpdHlBY3Rpdml0eURpYWxvZy0+e0FjdGl2aXR5RGlhbG9nfSwKICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgIFN1YmFjdGlvbiAgICAgICAgICAgICAgPT4gJ1N0b3JlQWN0aXZpdHlEaWFsb2cnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgID0+ICRUaWNrZXR7VGlja2V0SUR9IHx8ICcnLAogICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0+ICRBY3Rpdml0eUFjdGl2aXR5RGlhbG9nLT57QWN0aXZpdHlEaWFsb2d9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgICAgICAgID0+ICRQYXJhbXtQcm9jZXNzRW50aXR5SUR9CiAgICAgICAgICAgICAgICB8fCAkVGlja2V0ewogICAgICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJwogICAgICAgICAgICAgICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KAogICAgICAgICAgICAgICAgICAgICAgICAnUHJvY2Vzczo6RHluYW1pY0ZpZWxkUHJvY2Vzc01hbmFnZW1lbnRQcm9jZXNzSUQnCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWFpbkJveENsYXNzID0+ICRNYWluQm94Q2xhc3MgfHwgJycsCiAgICAgICAgfSwKICAgICk7CgogICAgbXkgJVJlbmRlcmVkRmllbGRzID0gKCk7CgogICAgbXkgJElucHV0RGVmaW5pdGlvblJlbmRlcmVkID0gMDsKICAgIG15ICVERlBvc3NpYmxlVmFsdWVzICAgICAgICA9ICV7ICRQYXJhbXtERlBvc3NpYmxlVmFsdWVzfSAvLyB7fSB9OwogICAgbXkgJVZpc2liaWxpdHkgICAgICAgICAgICAgID0gJXsgJFBhcmFte1Zpc2liaWxpdHl9ICAgICAgIC8vIHt9IH07CgogICAgIyBpZiB3ZSBhcmUgcmVuZGVyaW5nIGEgbmV3IG1hc2sgYW5kIGFyZSBub3QgcmVyZW5kZXJpbmcgd2l0aCBlcnJvcnMgZ2V0IHRpY2tldCBhbmQgZGVmYXVsdCBkeW5hbWljIGZpZWxkIHZhbHVlcwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gbmUgJ1N0b3JlQWN0aXZpdHlEaWFsb2cnICkgewoKICAgICAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKICAgICAgICBteSAkTmV3VGlja2V0OwoKICAgICAgICAjIHdlIGFyZSB1cGRhdGluZyBhbiBleGlzdGluZyB0aWNrZXQKICAgICAgICBpZiAoJVRpY2tldCkgewoKICAgICAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgICAgICBmb3IgbXkgJE5hbWUgKCBrZXlzICRTZWxmLT57RHluYW1pY0ZpZWxkfS0+JSogKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19eyAnRHluYW1pY0ZpZWxkXycgLiAkTmFtZSB9ID0gJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJE5hbWUgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICROZXdUaWNrZXQgPSAxOwogICAgICAgIH0KCiAgICAgICAgIyByZXRyaWV2ZSBmaWVsZCByZXN0cmljdGlvbnMgZm9yIGR5bmFtaWMgZmllbGRzCiAgICAgICAgbXkgJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6RmllbGRSZXN0cmljdGlvbnMnKTsKICAgICAgICBteSAkQUNMUHJlc2VsZWN0aW9uOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBQ0w6OkFDTFByZXNlbGVjdGlvbicpICkgewoKICAgICAgICAgICAgIyBnZXQgY2FjaGVkIHByZXNlbGVjdGlvbiBydWxlcwogICAgICAgICAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKICAgICAgICAgICAgJEFDTFByZXNlbGVjdGlvbiA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgICAgICAgICAgVHlwZSA9PiAnVGlja2V0QUNMJywKICAgICAgICAgICAgICAgIEtleSAgPT4gJ1ByZXNlbGVjdGlvbicsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggISRBQ0xQcmVzZWxlY3Rpb24gKSB7CiAgICAgICAgICAgICAgICAkQUNMUHJlc2VsZWN0aW9uID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5TZXRBQ0xQcmVzZWxlY3Rpb25DYWNoZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkQXV0b3NlbGVjdCAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldEFDTDo6QXV0b3NlbGVjdCcpIHx8IHVuZGVmOwogICAgICAgIG15ICRMb29wUHJvdGVjdGlvbiA9IDEwMDsKCiAgICAgICAgIyBidWlsZCBoYXNoIG9mIGZpZWxkIGNvbmZpZ3Mgd2l0aG91dCBzdWZmaXggYXR0YWNoZWQgdG8gbmFtZQogICAgICAgIG15ICVGaWVsZENvbmZpZ3NQbGFpbiA9IG1hcCB7ICRfID0+IHsgJFNlbGYtPntEeW5hbWljRmllbGR9eyRffS0+JSosIE5hbWUgPT4gJF8gfSB9IGtleXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKjsKCiAgICAgICAgIyBnZXQgdmFsdWVzIGFuZCB2aXNpYmlsaXR5IG9mIGR5bmFtaWMgZmllbGRzCiAgICAgICAgbXkgJUR5bkZpZWxkU3RhdGVzID0gJEZpZWxkUmVzdHJpY3Rpb25zT2JqZWN0LT5HZXRGaWVsZFN0YXRlcygKICAgICAgICAgICAgVGlja2V0T2JqZWN0ICAgICAgICAgICAgICA9PiAkVGlja2V0T2JqZWN0LAogICAgICAgICAgICBEeW5hbWljRmllbGRzICAgICAgICAgICAgID0+IFwlRmllbGRDb25maWdzUGxhaW4sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPT4gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QsCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBDaGFuZ2VkRWxlbWVudHMgICAgICAgICAgID0+IHt9LAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX0sCiAgICAgICAgICAgIEF1dG9zZWxlY3QgICAgICAgICAgICAgICAgPT4gJEF1dG9zZWxlY3QsCiAgICAgICAgICAgIEFDTFByZXNlbGVjdGlvbiAgICAgICAgICAgPT4gJEFDTFByZXNlbGVjdGlvbiAvLyAnJywKICAgICAgICAgICAgTG9vcFByb3RlY3Rpb24gICAgICAgICAgICA9PiBcJExvb3BQcm90ZWN0aW9uLAogICAgICAgICk7CgogICAgICAgICVERlBvc3NpYmxlVmFsdWVzID0gbWFwIHsgJ0R5bmFtaWNGaWVsZF8nIC4gJF8gPT4gJER5bkZpZWxkU3RhdGVze0ZpZWxkc317JF99e1Bvc3NpYmxlVmFsdWVzfSB9IGtleXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKjsKICAgICAgICAlVmlzaWJpbGl0eSAgICAgICA9ICREeW5GaWVsZFN0YXRlc3tWaXNpYmlsaXR5fS0+JSo7CiAgICB9CgogICAgIyBQYXJzZSBkZWZpbml0aW9uIGlmIHByZXNlbnQKICAgIG15ICRJbnB1dEZpZWxkRGVmaW5pdGlvbiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpZQU1MJyktPkxvYWQoCiAgICAgICAgRGF0YSA9PiAkQWN0aXZpdHlEaWFsb2ctPntJbnB1dEZpZWxkRGVmaW5pdGlvbn0sCiAgICApOwogICAgbXkgJURlZmluZWRGaWVsZHNMaXN0OwogICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoJElucHV0RmllbGREZWZpbml0aW9uKSApIHsKICAgICAgICBmb3IgbXkgJFJvdyAoICRJbnB1dEZpZWxkRGVmaW5pdGlvbi0+QCogKSB7CiAgICAgICAgICAgIGlmICggJFJvdy0+e0RGfSApIHsKICAgICAgICAgICAgICAgICREZWZpbmVkRmllbGRzTGlzdHsgJ0R5bmFtaWNGaWVsZF8nIC4gJFJvdy0+e0RGfSB9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRSb3ctPntHcmlkfSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkR3JpZFJvdyAoICRSb3ctPntHcmlkfXtSb3dzfS0+QCogKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRGaWVsZCAoIGdyZXAgeyAkXy0+e0RGfSB9ICRHcmlkUm93LT5AKiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJERlZmluZWRGaWVsZHNMaXN0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQtPntERn0gfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgc29tZSBmaWVsZHMgc2hvdWxkIGJlIHNraXBwZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UKICAgIG15ICRTa2lwRmllbGRzID0gWyAnT3duZXInLCAnUmVzcG9uc2libGUnLCAnTG9jaycsICdQZW5kaW5nVGltZScsICdDdXN0b21lcklEJyBdOwoKICAgIG15ICVEeW5hbWljRmllbGRWYWx1ZXMgPSBtYXAgeyAoICdEeW5hbWljRmllbGRfJyAuICRfID0+ICRQYXJhbXtHZXRQYXJhbX0tPnsgJ0R5bmFtaWNGaWVsZF8nIC4gJF8gfSApIH0ga2V5cyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqOwoKICAgICMgTG9vcCB0aHJvdWdoIEFjdGl2aXR5RGlhbG9nRmllbGRzIGFuZCByZW5kZXIgdGhlaXIgb3V0cHV0CiAgICBESUFMT0dGSUVMRDoKICAgIGZvciBteSAkQ3VycmVudEZpZWxkICggQHsgJEFjdGl2aXR5RGlhbG9nLT57RmllbGRPcmRlcn0gfSApIHsKCiAgICAgICAgIyBzb21lIGZpZWxkcyBzaG91bGQgYmUgc2tpcHBlZCBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZQogICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgKCBncmVwIHsgJF8gZXEgJEN1cnJlbnRGaWVsZCB9IEB7JFNraXBGaWVsZHN9ICk7CgogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9ICkgKSB7CiAgICAgICAgICAgIG15ICRNZXNzYWdlID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ0NhblwndCBnZXQgZGF0YSBmb3IgRmllbGQgIiVzIiBvZiBBY3Rpdml0eURpYWxvZyAiJXMiIScsCiAgICAgICAgICAgICAgICAkQ3VycmVudEZpZWxkLCAkQWN0aXZpdHlBY3Rpdml0eURpYWxvZy0+e0FjdGl2aXR5RGlhbG9nfQogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckVycm9yKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJFJlbmRlcmVkRmllbGRzeyRDdXJyZW50RmllbGR9OwoKICAgICAgICBteSAlRmllbGREYXRhID0gJXsgJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAjIFdlIHJlbmRlciBqdXN0IHZpc2libGUgQWN0aXZpdHlEaWFsb2dGaWVsZHMKICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICEkRmllbGREYXRhe0Rpc3BsYXl9OwoKICAgICAgICAjIEhhbmRsZSBtdWx0aWNvbHVtbiBmaWVsZCByZW5kZXJpbmcKICAgICAgICBpZiAoICREZWZpbmVkRmllbGRzTGlzdHskQ3VycmVudEZpZWxkfSApIHsKICAgICAgICAgICAgJFJlbmRlcmVkRmllbGRzeyRDdXJyZW50RmllbGR9ID0gMTsKCiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJElucHV0RGVmaW5pdGlvblJlbmRlcmVkOwoKICAgICAgICAgICAgJE91dHB1dCAuPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RHluYW1pY0ZpZWxkOjpNYXNrJyktPkVkaXRTZWN0aW9uUmVuZGVyKAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICAgICAgPT4gJElucHV0RmllbGREZWZpbml0aW9uLAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyAgICAgICAgPT4gJFNlbGYtPntEeW5hbWljRmllbGR9LAogICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICAgPT4gJExheW91dE9iamVjdFpvb20sCiAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyksCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRWYWx1ZXMgICA9PiBcJUR5bmFtaWNGaWVsZFZhbHVlcywKICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzRmlsdGVyID0+IFwlREZQb3NzaWJsZVZhbHVlcywKICAgICAgICAgICAgICAgIEVycm9ycyAgICAgICAgICAgICAgID0+ICRQYXJhbXtERkVycm9yc30sCiAgICAgICAgICAgICAgICBWaXNpYmlsaXR5ICAgICAgICAgICA9PiBcJVZpc2liaWxpdHksCiAgICAgICAgICAgICAgICBDdXN0b21lckludGVyZmFjZSAgICA9PiAxLAogICAgICAgICAgICAgICAgT2JqZWN0ICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgICAgID0+ICRTZWxmLT57VXNlckN1c3RvbWVySUR9LAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAlRHluYW1pY0ZpZWxkVmFsdWVzLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJElucHV0RGVmaW5pdGlvblJlbmRlcmVkID0gMTsKCiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQ7CiAgICAgICAgfQoKICAgICAgICAjIHJlbmRlciBEeW5hbWljRmllbGRzCiAgICAgICAgaWYgKCAkQ3VycmVudEZpZWxkID1+IG17XkR5bmFtaWNGaWVsZF8oLiopfXhtcyApIHsKICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZE5hbWUgPSAkMTsKICAgICAgICAgICAgbXkgJFJlc3BvbnNlICAgICAgICAgPSAkU2VsZi0+X1JlbmRlckR5bmFtaWNGaWVsZCgKICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRmllbGQgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfSwKICAgICAgICAgICAgICAgIEZpZWxkTmFtZSAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZE5hbWUsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX17ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH0sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25TaG9ydH0sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgICAgPT4gXCVUaWNrZXQgICAgICAgIHx8IHt9LAogICAgICAgICAgICAgICAgRXJyb3IgICAgICAgICAgICAgICA9PiBcJUVycm9yICAgICAgICAgfHwge30sCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2VzICAgICAgID0+IFwlRXJyb3JNZXNzYWdlcyB8fCB7fSwKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgICAgICA9PiAkREZQb3NzaWJsZVZhbHVlc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgfSwKICAgICAgICAgICAgICAgIFZpc2liaWxpdHkgICAgICAgICAgPT4gJFZpc2liaWxpdHl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH0gLy8gMCwKICAgICAgICAgICAgICAgIFZpc2liaWxpdGllcyAgICAgICAgPT4gXCVWaXNpYmlsaXR5LAogICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgT2JqZWN0ICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCAgICAgPT4gJFNlbGYtPntVc2VyQ3VzdG9tZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICVEeW5hbWljRmllbGRWYWx1ZXMsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFJlc3BvbnNlLT57U3VjY2Vzc30gKSB7CgogICAgICAgICAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE91dHB1dCAuPSAkUmVzcG9uc2UtPntIVE1MfTsKCiAgICAgICAgICAgICRSZW5kZXJlZEZpZWxkc3skQ3VycmVudEZpZWxkfSA9IDE7CgogICAgICAgIH0KCiAgICAgICAgIyByZW5kZXIgU3RhdGUKICAgICAgICBlbHNpZiAoICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gZXEgJ1N0YXRlSUQnICkKICAgICAgICB7CgogICAgICAgICAgICAjIFdlIGRvbid0IHJlbmRlciBGaWVsZHMgdHdpY2UsCiAgICAgICAgICAgICMgaWYgdGhlcmUgd2FzIGFscmVhZHkgYSBDb25maWcgd2l0aG91dCBJRCwgc2tpcCB0aGlzIGZpZWxkCiAgICAgICAgICAgICMgbmV4dCBESUFMT0dGSUVMRCBpZiAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICRSZXNwb25zZSA9ICRTZWxmLT5fUmVuZGVyU3RhdGUoCiAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0ZpZWxkID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH0sCiAgICAgICAgICAgICAgICBGaWVsZE5hbWUgICAgICAgICAgID0+ICRDdXJyZW50RmllbGQsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25TaG9ydH0sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgICAgID0+ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc317JEN1cnJlbnRGaWVsZH17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgICAgPT4gXCVUaWNrZXQgfHwge30sCiAgICAgICAgICAgICAgICBFcnJvciAgICAgICAgICAgICAgID0+IFwlRXJyb3IgIHx8IHt9LAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICBHZXRQYXJhbSAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX0sCiAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkUmVzcG9uc2UtPntTdWNjZXNzfSApIHsKCiAgICAgICAgICAgICAgICAjIGRvZXMgbm90IHNob3cgaGVhZGVyIGFuZCBmb290ZXIgYWdhaW4KICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJFJlc3BvbnNlLT57TWVzc2FnZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkT3V0cHV0IC49ICRSZXNwb25zZS0+e0hUTUx9OwoKICAgICAgICAgICAgJFJlbmRlcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfS0+eyRDdXJyZW50RmllbGR9IH0gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyByZW5kZXIgUXVldWUKICAgICAgICBlbHNpZiAoICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gZXEgJ1F1ZXVlSUQnICkKICAgICAgICB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJFJlbmRlcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfS0+eyRDdXJyZW50RmllbGR9IH07CgogICAgICAgICAgICBteSAkUmVzcG9uc2UgPSAkU2VsZi0+X1JlbmRlclF1ZXVlKAogICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dGaWVsZCA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9LAogICAgICAgICAgICAgICAgRmllbGROYW1lICAgICAgICAgICA9PiAkQ3VycmVudEZpZWxkLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCAgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICAgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgICAgICBUaWNrZXQgICAgICAgICAgICAgID0+IFwlVGlja2V0IHx8IHt9LAogICAgICAgICAgICAgICAgRXJyb3IgICAgICAgICAgICAgICA9PiBcJUVycm9yICB8fCB7fSwKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19LAogICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFJlc3BvbnNlLT57U3VjY2Vzc30gKSB7CgogICAgICAgICAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE91dHB1dCAuPSAkUmVzcG9uc2UtPntIVE1MfTsKCiAgICAgICAgICAgICRSZW5kZXJlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH0tPnskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CgogICAgICAgICMgcmVuZGVyIFByaW9yaXR5CiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfS0+eyRDdXJyZW50RmllbGR9IGVxICdQcmlvcml0eUlEJyApCiAgICAgICAgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRSZW5kZXJlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH0tPnskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgbXkgJFJlc3BvbnNlID0gJFNlbGYtPl9SZW5kZXJQcmlvcml0eSgKICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRmllbGQgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfSwKICAgICAgICAgICAgICAgIEZpZWxkTmFtZSAgICAgICAgICAgPT4gJEN1cnJlbnRGaWVsZCwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgICA9PiBcJVRpY2tldCB8fCB7fSwKICAgICAgICAgICAgICAgIEVycm9yICAgICAgICAgICAgICAgPT4gXCVFcnJvciAgfHwge30sCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfSwKICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRSZXNwb25zZS0+e1N1Y2Nlc3N9ICkgewoKICAgICAgICAgICAgICAgICMgZG9lcyBub3Qgc2hvdyBoZWFkZXIgYW5kIGZvb3RlciBhZ2FpbgogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFJlc3BvbnNlLT57SFRNTH07CgogICAgICAgICAgICAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIHJlbmRlciBTZXJ2aWNlCiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfS0+eyRDdXJyZW50RmllbGR9IGVxICdTZXJ2aWNlSUQnICkgewogICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICRSZW5kZXJlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH0tPnskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgbXkgJFJlc3BvbnNlID0gJFNlbGYtPl9SZW5kZXJTZXJ2aWNlKAogICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dGaWVsZCA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9LAogICAgICAgICAgICAgICAgRmllbGROYW1lICAgICAgICAgICA9PiAkQ3VycmVudEZpZWxkLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCAgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICAgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgICAgICBUaWNrZXQgICAgICAgICAgICAgID0+IFwlVGlja2V0IHx8IHt9LAogICAgICAgICAgICAgICAgRXJyb3IgICAgICAgICAgICAgICA9PiBcJUVycm9yICB8fCB7fSwKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19LAogICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFJlc3BvbnNlLT57U3VjY2Vzc30gKSB7CgogICAgICAgICAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE91dHB1dCAuPSAkUmVzcG9uc2UtPntIVE1MfTsKCiAgICAgICAgICAgICRSZW5kZXJlZEZpZWxkc3skQ3VycmVudEZpZWxkfSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIHJlbmRlciBTTEEKICAgICAgICBlbHNpZiAoICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gZXEgJ1NMQUlEJyApIHsKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICRSZXNwb25zZSA9ICRTZWxmLT5fUmVuZGVyU0xBKAogICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dGaWVsZCA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9LAogICAgICAgICAgICAgICAgRmllbGROYW1lICAgICAgICAgICA9PiAkQ3VycmVudEZpZWxkLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCAgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICAgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgICAgICBUaWNrZXQgICAgICAgICAgICAgID0+IFwlVGlja2V0IHx8IHt9LAogICAgICAgICAgICAgICAgRXJyb3IgICAgICAgICAgICAgICA9PiBcJUVycm9yICB8fCB7fSwKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19LAogICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFJlc3BvbnNlLT57U3VjY2Vzc30gKSB7CgogICAgICAgICAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE91dHB1dCAuPSAkUmVzcG9uc2UtPntIVE1MfTsKCiAgICAgICAgICAgICRSZW5kZXJlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH0tPnskQ3VycmVudEZpZWxkfSB9ID0gMTsKICAgICAgICB9CgogICAgICAgICMgcmVuZGVyIFRpdGxlCiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfS0+eyRDdXJyZW50RmllbGR9IGVxICdUaXRsZScgKSB7CiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJFJlbmRlcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfS0+eyRDdXJyZW50RmllbGR9IH07CgogICAgICAgICAgICBteSAkUmVzcG9uc2UgPSAkU2VsZi0+X1JlbmRlclRpdGxlKAogICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dGaWVsZCA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9LAogICAgICAgICAgICAgICAgRmllbGROYW1lICAgICAgICAgICA9PiAkQ3VycmVudEZpZWxkLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCAgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nICAgICA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9eyRDdXJyZW50RmllbGR9e0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgICAgICBUaWNrZXQgICAgICAgICAgICAgID0+IFwlVGlja2V0IHx8IHt9LAogICAgICAgICAgICAgICAgRXJyb3IgICAgICAgICAgICAgICA9PiBcJUVycm9yICB8fCB7fSwKICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgR2V0UGFyYW0gICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19LAogICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFJlc3BvbnNlLT57U3VjY2Vzc30gKSB7CgogICAgICAgICAgICAgICAgIyBkb2VzIG5vdCBzaG93IGhlYWRlciBhbmQgZm9vdGVyIGFnYWluCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRSZXNwb25zZS0+e01lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJE91dHB1dCAuPSAkUmVzcG9uc2UtPntIVE1MfTsKCiAgICAgICAgICAgICRSZW5kZXJlZEZpZWxkc3skQ3VycmVudEZpZWxkfSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIHJlbmRlciBBcnRpY2xlCiAgICAgICAgZWxzaWYgKCAkU2VsZi0+e05hbWVUb0lEfS0+eyRDdXJyZW50RmllbGR9IGVxICdBcnRpY2xlJyApIHsKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICRSZXNwb25zZSA9ICRTZWxmLT5fUmVuZGVyQXJ0aWNsZSgKICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRmllbGQgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfSwKICAgICAgICAgICAgICAgIEZpZWxkTmFtZSAgICAgICAgICAgPT4gJEN1cnJlbnRGaWVsZCwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgICA9PiBcJVRpY2tldCB8fCB7fSwKICAgICAgICAgICAgICAgIEVycm9yICAgICAgICAgICAgICAgPT4gXCVFcnJvciAgfHwge30sCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfSwKICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRSZXNwb25zZS0+e1N1Y2Nlc3N9ICkgewoKICAgICAgICAgICAgICAgICMgZG9lcyBub3Qgc2hvdyBoZWFkZXIgYW5kIGZvb3RlciBhZ2FpbgogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFJlc3BvbnNlLT57SFRNTH07CgogICAgICAgICAgICAkUmVuZGVyZWRGaWVsZHN7JEN1cnJlbnRGaWVsZH0gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyByZW5kZXIgVHlwZQogICAgICAgIGVsc2lmICggJFNlbGYtPntOYW1lVG9JRH0tPnskQ3VycmVudEZpZWxkfSBlcSAnVHlwZUlEJyApIHsKCiAgICAgICAgICAgICMgV2UgZG9uJ3QgcmVuZGVyIEZpZWxkcyB0d2ljZSwKICAgICAgICAgICAgIyBpZiB0aGVyZSB3YXMgYWxyZWFkeSBhIENvbmZpZyB3aXRob3V0IElELCBza2lwIHRoaXMgZmllbGQKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfTsKCiAgICAgICAgICAgIG15ICRSZXNwb25zZSA9ICRTZWxmLT5fUmVuZGVyVHlwZSgKICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRmllbGQgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfSwKICAgICAgICAgICAgICAgIEZpZWxkTmFtZSAgICAgICAgICAgPT4gJEN1cnJlbnRGaWVsZCwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgICAgPT4gJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXskQ3VycmVudEZpZWxkfXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgICA9PiBcJVRpY2tldCB8fCB7fSwKICAgICAgICAgICAgICAgIEVycm9yICAgICAgICAgICAgICAgPT4gXCVFcnJvciAgfHwge30sCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfSwKICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRSZXNwb25zZS0+e1N1Y2Nlc3N9ICkgewoKICAgICAgICAgICAgICAgICMgZG9lcyBub3Qgc2hvdyBoZWFkZXIgYW5kIGZvb3RlciBhZ2FpbgogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkUmVzcG9uc2UtPntNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFJlc3BvbnNlLT57SFRNTH07CgogICAgICAgICAgICAkUmVuZGVyZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IHN1Ym1pdCBidXR0b24gZGF0YQogICAgbXkgJEJ1dHRvblRleHQgID0gJ1N1Ym1pdCc7CiAgICBteSAkQnV0dG9uVGl0bGUgPSAnU2F2ZSc7CiAgICBteSAkQnV0dG9uSUQgICAgPSAnU3VibWl0JyAuICRBY3Rpdml0eUFjdGl2aXR5RGlhbG9nLT57QWN0aXZpdHlEaWFsb2d9OwogICAgaWYgKCAkQWN0aXZpdHlEaWFsb2ctPntTdWJtaXRCdXR0b25UZXh0fSApIHsKICAgICAgICAkQnV0dG9uVGV4dCAgPSAkQWN0aXZpdHlEaWFsb2ctPntTdWJtaXRCdXR0b25UZXh0fTsKICAgICAgICAkQnV0dG9uVGl0bGUgPSAkQWN0aXZpdHlEaWFsb2ctPntTdWJtaXRCdXR0b25UZXh0fTsKICAgIH0KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdGb290ZXInLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBCdXR0b25UZXh0ICA9PiAkQnV0dG9uVGV4dCwKICAgICAgICAgICAgQnV0dG9uVGl0bGUgPT4gJEJ1dHRvblRpdGxlLAogICAgICAgICAgICBCdXR0b25JRCAgICA9PiAkQnV0dG9uSUQKICAgICAgICB9LAogICAgKTsKCiAgICBpZiAoICRBY3Rpdml0eURpYWxvZy0+e1N1Ym1pdEFkdmljZVRleHR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTdWJtaXRBZHZpY2VUZXh0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBBZHZpY2VUZXh0ID0+ICRBY3Rpdml0eURpYWxvZy0+e1N1Ym1pdEFkdmljZVRleHR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBBZGQgdGhlIEZvcm1Gb290ZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnUHJvY2Vzc01hbmFnZW1lbnQvQ3VzdG9tZXJBY3Rpdml0eURpYWxvZ0Zvb3RlcicsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHt9LAogICAgKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9SZW5kZXJEeW5hbWljRmllbGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJExheW91dE9iamVjdCAgICAgICAgICAgICAgPSAkUGFyYW17TGF5b3V0T2JqZWN0fTsKICAgIG15ICRMYXlvdXRPYmplY3Rab29tICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZvcm1JRCBGaWVsZE5hbWUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAkTmVlZGVkLCAnX1JlbmRlckR5bmFtaWNGaWVsZCcgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICRTZWxmLT57RHluYW1pY0ZpZWxkfXsgJFBhcmFte0ZpZWxkTmFtZX0gfTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKSApIHsKCiAgICAgICAgbXkgJE1lc3NhZ2UgPSAiRHluYW1pY0ZpZWxkQ29uZmlnIG1pc3NpbmcgZm9yIGZpZWxkOiAkUGFyYW17RmllbGROYW1lfSwgb3IgaXMgbm90IGEgVGlja2V0IER5bmFtaWMgRmllbGQhIjsKCiAgICAgICAgIyBsb2cgZXJyb3IgYnV0IGRvZXMgbm90IHN0b3AgdGhlIGV4ZWN1dGlvbiBhcyBpdCBjb3VsZCBiZSBhbiBvbGQgQXJ0aWNsZQogICAgICAgICMgRHluYW1pY0ZpZWxkLCBzZWUgYnVnIzExNjY2CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICRNZXNzYWdlLAogICAgICAgICk7CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICAgICAgSFRNTCAgICA9PiAnJywKICAgICAgICB9OwogICAgfQoKICAgIG15ICRTZXJ2ZXJFcnJvcjsKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvcn0gKSApIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgIGRlZmluZWQgJFBhcmFte0Vycm9yfS0+eyAkUGFyYW17RmllbGROYW1lfSB9CiAgICAgICAgICAgICYmICRQYXJhbXtFcnJvcn0tPnsgJFBhcmFte0ZpZWxkTmFtZX0gfSBuZSAnJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkU2VydmVyRXJyb3IgPSAxOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRXJyb3JNZXNzYWdlID0gJyc7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3JNZXNzYWdlc30gKSApIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgIGRlZmluZWQgJFBhcmFte0Vycm9yTWVzc2FnZXN9LT57ICRQYXJhbXtGaWVsZE5hbWV9IH0KICAgICAgICAgICAgJiYgJFBhcmFte0Vycm9yTWVzc2FnZXN9LT57ICRQYXJhbXtGaWVsZE5hbWV9IH0gbmUgJycKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSA9ICRQYXJhbXtFcnJvck1lc3NhZ2VzfS0+eyAkUGFyYW17RmllbGROYW1lfSB9OwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRHluYW1pY0ZpZWxkSFRNTCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRSZW5kZXIoCiAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICBQb3NzaWJsZVZhbHVlc0ZpbHRlciA9PiAkUGFyYW17UG9zc2libGVWYWx1ZXN9LAogICAgICAgIFZhbHVlICAgICAgICAgICAgICAgID0+ICRQYXJhbXtWYWx1ZX0sCiAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICAgPT4gJExheW91dE9iamVjdFpvb20sCiAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLAogICAgICAgIEFKQVhVcGRhdGUgICAgICAgICAgID0+IDEsCiAgICAgICAgTWFuZGF0b3J5ICAgICAgICAgICAgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGlzcGxheX0gPT0gMiwKICAgICAgICBBQ0xIaWRkZW4gICAgICAgICAgICA9PiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0Rpc3BsYXl9ID09IDIgJiYgISRQYXJhbXtWaXNpYmlsaXR5fSApLAogICAgICAgIFNlcnZlckVycm9yICAgICAgICAgID0+ICRTZXJ2ZXJFcnJvciwKICAgICAgICBFcnJvck1lc3NhZ2UgICAgICAgICA9PiAkRXJyb3JNZXNzYWdlLAogICAgICAgIEN1c3RvbWVySW50ZXJmYWNlICAgID0+IDEsCiAgICAgICAgT2JqZWN0ICAgICAgICAgICAgICAgPT4gJFBhcmFte09iamVjdH0sCiAgICAgICAgVmlzaWJpbGl0eSAgICAgICAgICAgPT4gJFBhcmFte1Zpc2liaWxpdGllc30sCiAgICApOwoKICAgIG15ICRGaWVsZENsYXNzZXMgPSAnRmllbGQnIC4gKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57RmllbGRUeXBlfSBlcSAnUmljaFRleHQnID8gJyBSaWNoVGV4dEZpZWxkJyA6ICcnICk7CgogICAgbXkgJURhdGEgPSAoCiAgICAgICAgTmFtZSAgICAgICAgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICBMYWJlbCAgICAgICAgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntMYWJlbH0sCiAgICAgICAgSGlkZGVuQ2xhc3MgID0+ICEkUGFyYW17VmlzaWJpbGl0eX0gPyAnIG9vb0FDTEhpZGRlbicgOiAnJywKICAgICAgICBGaWVsZENsYXNzZXMgPT4gJEZpZWxkQ2xhc3NlcywKICAgICk7CgogICAgIyBoYW5kbGUgbXVsdGl2YWx1ZSBmaWVsZAogICAgaWYgKCAkRHluYW1pY0ZpZWxkSFRNTC0+e011bHRpVmFsdWV9ICkgewoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUm93X0R5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGVtcGxhdGVDb2x1bW5zID0+ICcxZnInLAogICAgICAgICAgICAgICAgUm93Q2xhc3NlcyAgICAgID0+ICcgTXVsdGlWYWx1ZScsCiAgICAgICAgICAgICAgICBIaWRkZW5DbGFzcyAgICAgPT4gISRQYXJhbXtWaXNpYmlsaXR5fSA/ICcgb29vQUNMSGlkZGVuJyA6ICcnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIG9uZSBibG9jayBmb3IgZWFjaCBtdWx0aXZhbHVlIGl0ZW0KICAgICAgICBmb3IgbXkgJE11bHRpVmFsdWVJbmRleCAoIDAgLi4gJCN7ICREeW5hbWljRmllbGRIVE1MLT57TXVsdGlWYWx1ZX0gfSApIHsKCiAgICAgICAgICAgICREYXRhe0NvbnRlbnR9ID0gJER5bmFtaWNGaWVsZEhUTUwtPntNdWx0aVZhbHVlfVskTXVsdGlWYWx1ZUluZGV4XTsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0xheW91dEJsb2NrfSB8fCAncnc6RHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgIE11bHRpVmFsdWUgPT4gMSwKCiAgICAgICAgICAgICAgICAgICAgIyBUT0RPIGFzayBhYm91dCB0aGlzCiAgICAgICAgICAgICAgICAgICAgIyBSb3dSZWFkT25seSAgID0+ICREeW5hbWljRmllbGRDb25maWctPntSZWFkb25seX0sCiAgICAgICAgICAgICAgICAgICAgQ29sdW1uQ2xhc3NlcyA9PiAnIE11bHRpVmFsdWVfJyAuICRNdWx0aVZhbHVlSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgQ29sdW1uU3R5bGUgICA9PiAnZ3JpZC1jb2x1bW46IDEgLyBzcGFuIDEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVuZGVyIHNob3J0IGRlc2NyaXB0aW9uIG9uY2UgZm9yIGZpcnN0IGVsZW1lbnQKICAgICAgICAgICAgaWYgKCAhJE11bHRpVmFsdWVJbmRleCApIHsKICAgICAgICAgICAgICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30gKSB7CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ3J3OkR5bmFtaWNGaWVsZDpEZXNjcmlwdGlvbkxvbmcnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyA9PiAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlbmRlciBsb25nIGRlc2NyaXB0aW9uIG9uY2UgZm9yIGxhc3QgZWxlbWVudAogICAgICAgICAgICBpZiAoICRNdWx0aVZhbHVlSW5kZXggPT0gJCN7ICREeW5hbWljRmllbGRIVE1MLT57TXVsdGlWYWx1ZX0gfSApIHsKICAgICAgICAgICAgICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0xheW91dEJsb2NrfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJ3J3OkR5bmFtaWNGaWVsZDpEZXNjcmlwdGlvblNob3J0JywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkTXVsdGlWYWx1ZVRlbXBsYXRlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e011bHRpVmFsdWVUZW1wbGF0ZX0sCiAgICAgICAgICAgICAgICBMYWJlbCAgICAgICA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgIENvbHVtblN0eWxlID0+ICdncmlkLWNvbHVtbjogMSAvIHNwYW4gMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZW5kZXIgc2hvcnQgZGVzY3JpcHRpb24gb25jZSBmb3IgZmlyc3QgZWxlbWVudAogICAgICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAncnc6RHluYW1pY0ZpZWxkOkRlc2NyaXB0aW9uTG9uZ1RlbXBsYXRlJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyA9PiAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgJERhdGF7Q29udGVudH0gPSAkRHluYW1pY0ZpZWxkSFRNTC0+e0ZpZWxkfTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57TGF5b3V0QmxvY2t9IHx8ICdydzpEeW5hbWljRmllbGQnLAogICAgICAgICAgICBEYXRhID0+IFwlRGF0YSwKICAgICAgICApOwoKICAgICAgICBpZiAoICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0xheW91dEJsb2NrfQogICAgICAgICAgICAgICAgICAgIHx8ICdydzpEeW5hbWljRmllbGQ6RGVzY3JpcHRpb25TaG9ydCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRQYXJhbXtEZXNjcmlwdGlvbkxvbmd9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ3J3OkR5bmFtaWNGaWVsZDpEZXNjcmlwdGlvbkxvbmcnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nID0+ICRQYXJhbXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFRlbXBsYXRlRmlsZSA9ICdQcm9jZXNzTWFuYWdlbWVudC8nIC4gKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfXtNdWx0aVZhbHVlfSA/ICdDdXN0b21lclJvd0R5bmFtaWNGaWVsZCcgOiAnQ3VzdG9tZXJEeW5hbWljRmllbGQnICk7CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgSFRNTCAgICA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoIFRlbXBsYXRlRmlsZSA9PiAkVGVtcGxhdGVGaWxlICksCiAgICB9Owp9CgpzdWIgX1JlbmRlclRpdGxlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRQYXJhbXtMYXlvdXRPYmplY3R9OwoKICAgIGZvciBteSAkTmVlZGVkIChxdyhGb3JtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAkTmVlZGVkLCAnX1JlbmRlclRpdGxlJyApLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0gKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJ0FjdGl2aXR5RGlhbG9nRmllbGQnLCAnX1JlbmRlclRpdGxlJyApLAogICAgICAgIH07CiAgICB9CgogICAgbXkgJURhdGEgPSAoCiAgICAgICAgTGFiZWwgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlRpdGxlIiksCiAgICAgICAgRmllbGRJRCAgICAgICAgICA9PiAnVGl0bGUnLAogICAgICAgIEZvcm1JRCAgICAgICAgICAgPT4gJFBhcmFte0Zvcm1JRH0sCiAgICAgICAgVmFsdWUgICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19e1RpdGxlfSwKICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdUaXRsZScsCiAgICAgICAgTWFuZGF0b3J5Q2xhc3MgICA9PiAnJywKICAgICAgICBWYWxpZGF0ZVJlcXVpcmVkID0+ICcnLAogICAgICAgIElEU3VmZml4ICAgICAgICAgPT4gJFNlbGYtPntJRFN1ZmZpeH0gfHwgJycsCiAgICApOwoKICAgICMgSWYgZmllbGQgaXMgcmVxdWlyZWQgcHV0IGluIHRoZSBuZWNlc3NhcnkgdmFyaWFibGVzIGZvcgogICAgIyBWYWxpZGF0ZVJlcXVpcmVkIGNsYXNzIGlucHV0IGZpZWxkLCBNYW5kYXRvcnkgY2xhc3MgZm9yIHRoZSBsYWJlbAogICAgaWYgKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEaXNwbGF5fSAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEaXNwbGF5fSA9PSAyICkgewogICAgICAgICREYXRhe1ZhbGlkYXRlUmVxdWlyZWR9ID0gJ1ZhbGlkYXRlX1JlcXVpcmVkJzsKICAgICAgICAkRGF0YXtNYW5kYXRvcnlDbGFzc30gICA9ICdNYW5kYXRvcnknOwogICAgfQoKICAgICMgb3V0cHV0IHNlcnZlciBlcnJvcnMKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvcn0gKSAmJiAkUGFyYW17RXJyb3J9LT57J1RpdGxlJ30gKSB7CiAgICAgICAgJERhdGF7U2VydmVyRXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgIH0KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0xheW91dEJsb2NrfSB8fCAncnc6VGl0bGUnLAogICAgICAgIERhdGEgPT4gXCVEYXRhLAogICAgKTsKCiAgICAjIHNldCBtYW5kYXRvcnkgbGFiZWwgbWFya2VyCiAgICBpZiAoICREYXRhe01hbmRhdG9yeUNsYXNzfSAmJiAkRGF0YXtNYW5kYXRvcnlDbGFzc30gbmUgJycgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhYmVsU3BhbicsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntMYXlvdXRCbG9ja30gfHwgJ3J3OlRpdGxlOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntMYXlvdXRCbG9ja30gfHwgJ3J3OlRpdGxlOkRlc2NyaXB0aW9uTG9uZycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nID0+ICRQYXJhbXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgSFRNTCAgICA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoIFRlbXBsYXRlRmlsZSA9PiAnUHJvY2Vzc01hbmFnZW1lbnQvQ3VzdG9tZXJUaXRsZScgKSwKICAgIH07Cgp9CgpzdWIgX1JlbmRlckFydGljbGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0cwogICAgbXkgJExheW91dE9iamVjdCAgICAgPSAkUGFyYW17TGF5b3V0T2JqZWN0fTsKICAgIG15ICRMYXlvdXRPYmplY3Rab29tID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIGZvciBteSAkTmVlZGVkIChxdyhGb3JtSUQgVGlja2V0KSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJE5lZWRlZCwgJ19SZW5kZXJBcnRpY2xlJyApLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0gKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJ0FjdGl2aXR5RGlhbG9nRmllbGQnLCAnX1JlbmRlckFydGljbGUnICksCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICBteSBAQXR0YWNobWVudHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZScpLT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICk7CgogICAgIyBzaG93IGF0dGFjaG1lbnRzCiAgICBBVFRBQ0hNRU5UOgogICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudHMpIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgICRBdHRhY2htZW50LT57Q29udGVudElEfQogICAgICAgICAgICAmJiAkTGF5b3V0T2JqZWN0Wm9vbS0+e0Jyb3dzZXJSaWNoVGV4dH0KICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRUeXBlfSA9fiAvaW1hZ2UvaSApCiAgICAgICAgICAgICYmICggJEF0dGFjaG1lbnQtPntEaXNwb3NpdGlvbn0gZXEgJ2lubGluZScgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQ7CiAgICAgICAgfQoKICAgICAgICBwdXNoIEB7ICRQYXJhbXtBdHRhY2htZW50TGlzdH0gfSwgJEF0dGFjaG1lbnQ7CiAgICB9CgogICAgbXkgJURhdGEgPSAoCiAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnQXJ0aWNsZScsCiAgICAgICAgTWFuZGF0b3J5Q2xhc3MgICA9PiAnJywKICAgICAgICBWYWxpZGF0ZVJlcXVpcmVkID0+ICcnLAogICAgICAgIFN1YmplY3QgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfXtTdWJqZWN0fSwKICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX17Qm9keX0sCiAgICAgICAgTGFiZWxTdWJqZWN0ICAgICA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntDb25maWd9LT57TGFiZWxTdWJqZWN0fQogICAgICAgICAgICB8fCAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlN1YmplY3QiKSwKICAgICAgICBMYWJlbEJvZHkgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57Q29uZmlnfS0+e0xhYmVsQm9keX0KICAgICAgICAgICAgfHwgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJUZXh0IiksCiAgICAgICAgQXR0YWNobWVudExpc3QgPT4gJFBhcmFte0F0dGFjaG1lbnRMaXN0fSwKICAgICAgICBJRFN1ZmZpeCAgICAgICA9PiAkU2VsZi0+e0lEU3VmZml4fSB8fCAnJywKICAgICk7CgogICAgIyBJZiBmaWVsZCBpcyByZXF1aXJlZCBwdXQgaW4gdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZXMgZm9yCiAgICAjIFZhbGlkYXRlUmVxdWlyZWQgY2xhc3MgaW5wdXQgZmllbGQsIE1hbmRhdG9yeSBjbGFzcyBmb3IgdGhlIGxhYmVsCiAgICBpZiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0Rpc3BsYXl9ICYmICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0Rpc3BsYXl9ID09IDIgKSB7CiAgICAgICAgJERhdGF7VmFsaWRhdGVSZXF1aXJlZH0gPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgICREYXRhe01hbmRhdG9yeUNsYXNzfSAgID0gJ01hbmRhdG9yeSc7CiAgICB9CgogICAgIyBvdXRwdXQgc2VydmVyIGVycm9ycwogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0Vycm9yfSApICYmICRQYXJhbXtFcnJvcn0tPnsnQXJ0aWNsZVN1YmplY3QnfSApIHsKICAgICAgICAkRGF0YXtTdWJqZWN0U2VydmVyRXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgIH0KICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtFcnJvcn0gKSAmJiAkUGFyYW17RXJyb3J9LT57J0FydGljbGVCb2R5J30gKSB7CiAgICAgICAgJERhdGF7Qm9keVNlcnZlckVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntMYXlvdXRCbG9ja30gfHwgJ3J3OkFydGljbGUnLAogICAgICAgIERhdGEgPT4gXCVEYXRhLAogICAgKTsKCiAgICAjIHNldCBtYW5kYXRvcnkgbGFiZWwgbWFya2VyCiAgICBpZiAoICREYXRhe01hbmRhdG9yeUNsYXNzfSAmJiAkRGF0YXtNYW5kYXRvcnlDbGFzc30gbmUgJycgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhYmVsU3BhblN1YmplY3QnLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhYmVsU3BhbkJvZHknLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9CgogICAgIyBhZGQgcmljaCB0ZXh0IGVkaXRvcgogICAgaWYgKCAkTGF5b3V0T2JqZWN0Wm9vbS0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CgogICAgICAgICMgdXNlIGhlaWdodC93aWR0aCBkZWZpbmVkIGZvciB0aGlzIHNjcmVlbgogICAgICAgICRQYXJhbXtSaWNoVGV4dEhlaWdodH0gPSAkU2VsZi0+e0NvbmZpZ30tPntSaWNoVGV4dEhlaWdodH0gfHwgMDsKICAgICAgICAkUGFyYW17UmljaFRleHRXaWR0aH0gID0gJFNlbGYtPntDb25maWd9LT57UmljaFRleHRXaWR0aH0gIHx8IDA7CgogICAgICAgICMgc2V0IHVwIGN1c3RvbWVyIHJpY2ggdGV4dCBlZGl0b3IKICAgICAgICAkTGF5b3V0T2JqZWN0Wm9vbS0+Q3VzdG9tZXJTZXRSaWNoVGV4dFBhcmFtZXRlcnMoCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdydzpBcnRpY2xlOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6QXJ0aWNsZTpEZXNjcmlwdGlvbkxvbmcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyA9PiAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIEhUTUwgICAgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KCBUZW1wbGF0ZUZpbGUgPT4gJ1Byb2Nlc3NNYW5hZ2VtZW50L0N1c3RvbWVyQXJ0aWNsZScgKSwKICAgIH07Cn0KCnN1YiBfUmVuZGVyU0xBIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRQYXJhbXtMYXlvdXRPYmplY3R9OwoKICAgIGZvciBteSAkTmVlZGVkIChxdyhGb3JtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAkTmVlZGVkLCAnX1JlbmRlclNMQScgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICdBY3Rpdml0eURpYWxvZ0ZpZWxkJywgJ19SZW5kZXJTTEEnICksCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkU2VydmljZXMgPSAkU2VsZi0+X0dldFNlcnZpY2VzKAogICAgICAgICV7ICRQYXJhbXtHZXRQYXJhbX0gfSwKICAgICk7CgogICAgbXkgJFNMQXMgPSAkU2VsZi0+X0dldFNMQXMoCiAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgICAgIFNlcnZpY2VzID0+ICRTZXJ2aWNlcywKICAgICk7CgogICAgbXkgJURhdGEgPSAoCiAgICAgICAgTGFiZWwgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlNMQSIpLAogICAgICAgIEZpZWxkSUQgICAgICAgICAgPT4gJ1NMQUlEJywKICAgICAgICBGb3JtSUQgICAgICAgICAgID0+ICRQYXJhbXtGb3JtSUR9LAogICAgICAgIE1hbmRhdG9yeUNsYXNzICAgPT4gJycsCiAgICAgICAgVmFsaWRhdGVSZXF1aXJlZCA9PiAnJywKICAgICAgICBJRFN1ZmZpeCAgICAgICAgID0+ICRTZWxmLT57SURTdWZmaXh9LAogICAgKTsKCiAgICAjIElmIGZpZWxkIGlzIHJlcXVpcmVkIHB1dCBpbiB0aGUgbmVjZXNzYXJ5IHZhcmlhYmxlcyBmb3IKICAgICMgVmFsaWRhdGVSZXF1aXJlZCBjbGFzcyBpbnB1dCBmaWVsZCwgTWFuZGF0b3J5IGNsYXNzIGZvciB0aGUgbGFiZWwKICAgIGlmICggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGlzcGxheX0gJiYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGlzcGxheX0gPT0gMiApIHsKICAgICAgICAkRGF0YXtWYWxpZGF0ZVJlcXVpcmVkfSA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICAgICAgJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICAgPSAnTWFuZGF0b3J5JzsKICAgIH0KCiAgICBteSAkU2VsZWN0ZWRWYWx1ZTsKCiAgICAjIGdldCBTTEEgb2JqZWN0CiAgICBteSAkU0xBT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwoKICAgIG15ICRTTEFJRFBhcmFtID0gJFBhcmFte0dldFBhcmFtfXtTTEFJRH07CiAgICBpZiAoJFNMQUlEUGFyYW0pIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCggU0xBSUQgPT4gJFNMQUlEUGFyYW0gKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtGaWVsZE5hbWV9IGVxICdTTEEnICkgewoKICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKCiAgICAgICAgICAgICMgRmV0Y2ggRGVmYXVsdFZhbHVlIGZyb20gQ29uZmlnCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIGRlZmluZWQgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfQogICAgICAgICAgICAgICAgJiYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfSBuZSAnJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkU2VsZWN0ZWRWYWx1ZSkgewogICAgICAgICAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEZWZhdWx0VmFsdWV9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgaWYgKCAhJFNlbGVjdGVkVmFsdWUgKSB7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIGRlZmluZWQgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfQogICAgICAgICAgICAgICAgJiYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfSBuZSAnJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgVGlja2V0VmFsdWUKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtUaWNrZXR9ICkgJiYgISRTZWxlY3RlZFZhbHVlICkgewogICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte1RpY2tldH0tPntTTEF9OwogICAgfQoKICAgICMgc2V0IHNlcnZlciBlcnJvcnMKICAgIG15ICRTZXJ2ZXJFcnJvciA9ICcnOwogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0Vycm9yfSApICYmICRQYXJhbXtFcnJvcn0tPnsnU0xBSUQnfSApIHsKICAgICAgICAkU2VydmVyRXJyb3IgPSAnU2VydmVyRXJyb3InOwogICAgfQoKICAgICMgYnVpbGQgU0xBIHN0cmluZwogICAgJERhdGF7Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgID0+ICRTTEFzLAogICAgICAgIE5hbWUgICAgICAgICAgPT4gJ1NMQUlEJywKICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICRTZWxlY3RlZFZhbHVlLAogICAgICAgIFBvc3NpYmxlTm9uZSAgPT4gMSwKICAgICAgICBTb3J0ICAgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgVHJhbnNsYXRpb24gICA9PiAxLAogICAgICAgIENsYXNzICAgICAgICAgPT4gIk1vZGVybml6ZSBGb3JtVXBkYXRlICRTZXJ2ZXJFcnJvciIsCiAgICAgICAgTWF4ICAgICAgICAgICA9PiAyMDAsCiAgICApOwoKICAgICMgZXh0ZW5kIElEcyB0byBlbmFibGUgc2ltdWx0YW5lb3VzIGFjdGl2aXRpZXMKICAgICREYXRhe0NvbnRlbnR9ID1+IHMvaWQ9IihbXHdcc19dKykiL2lkPSIkMSRTZWxmLT57SURTdWZmaXh9Ii87CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntMYXlvdXRCbG9ja30gfHwgJ3J3OlNMQScsCiAgICAgICAgRGF0YSA9PiBcJURhdGEsCiAgICApOwoKICAgICMgc2V0IG1hbmRhdG9yeSBsYWJlbCBtYXJrZXIKICAgIGlmICggJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICYmICREYXRhe01hbmRhdG9yeUNsYXNzfSBuZSAnJyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGFiZWxTcGFuJywKICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0xheW91dEJsb2NrfSB8fCAncnc6U0xBOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6U0xBOkRlc2NyaXB0aW9uTG9uZycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nID0+ICRQYXJhbXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgSFRNTCAgICA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoIFRlbXBsYXRlRmlsZSA9PiAnUHJvY2Vzc01hbmFnZW1lbnQvQ3VzdG9tZXJTTEEnICksCiAgICB9Owp9CgpzdWIgX1JlbmRlclNlcnZpY2UgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJFBhcmFte0xheW91dE9iamVjdH07CgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZvcm1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICROZWVkZWQsICdfUmVuZGVyU2VydmljZScgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICdBY3Rpdml0eURpYWxvZ0ZpZWxkJywgJ19SZW5kZXJTZXJ2aWNlJyApLAogICAgICAgIH07CiAgICB9CgogICAgbXkgJFNlcnZpY2VzID0gJFNlbGYtPl9HZXRTZXJ2aWNlcygKICAgICAgICAleyAkUGFyYW17R2V0UGFyYW19IH0sCiAgICApOwoKICAgIG15ICVEYXRhID0gKAogICAgICAgIExhYmVsICAgICAgICAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJTZXJ2aWNlIiksCiAgICAgICAgRmllbGRJRCAgICAgICAgICA9PiAnU2VydmljZUlEJywKICAgICAgICBGb3JtSUQgICAgICAgICAgID0+ICRQYXJhbXtGb3JtSUR9LAogICAgICAgIE1hbmRhdG9yeUNsYXNzICAgPT4gJycsCiAgICAgICAgVmFsaWRhdGVSZXF1aXJlZCA9PiAnJywKICAgICAgICBJRFN1ZmZpeCAgICAgICAgID0+ICRTZWxmLT57SURTdWZmaXh9LAogICAgKTsKCiAgICAjIElmIGZpZWxkIGlzIHJlcXVpcmVkIHB1dCBpbiB0aGUgbmVjZXNzYXJ5IHZhcmlhYmxlcyBmb3IKICAgICMgVmFsaWRhdGVSZXF1aXJlZCBjbGFzcyBpbnB1dCBmaWVsZCwgTWFuZGF0b3J5IGNsYXNzIGZvciB0aGUgbGFiZWwKICAgIGlmICggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGlzcGxheX0gJiYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGlzcGxheX0gPT0gMiApIHsKICAgICAgICAkRGF0YXtWYWxpZGF0ZVJlcXVpcmVkfSA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICAgICAgJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICAgPSAnTWFuZGF0b3J5JzsKICAgIH0KCiAgICBteSAkU2VsZWN0ZWRWYWx1ZTsKCiAgICAjIGdldCBzZXJ2aWNlIG9iamVjdAogICAgbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKICAgIG15ICRTZXJ2aWNlSURQYXJhbSA9ICRQYXJhbXtHZXRQYXJhbX17U2VydmljZUlEfTsKICAgIGlmICgkU2VydmljZUlEUGFyYW0pIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRFBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RmllbGROYW1lfSBlcSAnU2VydmljZScgKSB7CgogICAgICAgIGlmICggISRTZWxlY3RlZFZhbHVlICkgewoKICAgICAgICAgICAgIyBGZXRjaCBEZWZhdWx0VmFsdWUgZnJvbSBDb25maWcKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEZWZhdWx0VmFsdWV9CiAgICAgICAgICAgICAgICAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEZWZhdWx0VmFsdWV9IG5lICcnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEZWZhdWx0VmFsdWV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJFNlbGVjdGVkVmFsdWUpIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICggISRTZWxlY3RlZFZhbHVlICkgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBkZWZpbmVkICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0RlZmF1bHRWYWx1ZX0KICAgICAgICAgICAgICAgICYmICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0RlZmF1bHRWYWx1ZX0gbmUgJycKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0RlZmF1bHRWYWx1ZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgR2V0IFRpY2tldFZhbHVlCiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17VGlja2V0fSApICYmICEkU2VsZWN0ZWRWYWx1ZSApIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRQYXJhbXtUaWNrZXR9LT57U2VydmljZX07CiAgICB9CgogICAgIyBzZXQgc2VydmVyIGVycm9ycwogICAgbXkgJFNlcnZlckVycm9yID0gJyc7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3J9ICkgJiYgJFBhcmFte0Vycm9yfS0+eydTZXJ2aWNlSUQnfSApIHsKICAgICAgICAkU2VydmVyRXJyb3IgPSAnU2VydmVyRXJyb3InOwogICAgfQoKICAgICMgZ2V0IGxpc3QgdHlwZQogICAgbXkgJFRyZWVWaWV3ID0gMDsKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpIGVxICd0cmVlJyApIHsKICAgICAgICAkVHJlZVZpZXcgPSAxOwogICAgfQoKICAgICMgYnVpbGQgU2VydmljZSBzdHJpbmcKICAgICREYXRhe0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgICA9PiAkU2VydmljZXMsCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnU2VydmljZUlEJywKICAgICAgICBDbGFzcyAgICAgICAgID0+ICJNb2Rlcm5pemUgRm9ybVVwZGF0ZSAkU2VydmVyRXJyb3IiLAogICAgICAgIFNlbGVjdGVkVmFsdWUgPT4gJFNlbGVjdGVkVmFsdWUsCiAgICAgICAgUG9zc2libGVOb25lICA9PiAxLAogICAgICAgIFRyZWVWaWV3ICAgICAgPT4gJFRyZWVWaWV3LAogICAgICAgIFNvcnQgICAgICAgICAgPT4gJ1RyZWVWaWV3JywKICAgICAgICBUcmFuc2xhdGlvbiAgID0+ICRUcmVlVmlldywKICAgICAgICBNYXggICAgICAgICAgID0+IDIwMCwKICAgICk7CgogICAgIyBleHRlbmQgSURzIHRvIGVuYWJsZSBzaW11bHRhbmVvdXMgYWN0aXZpdGllcwogICAgJERhdGF7Q29udGVudH0gPX4gcy9pZD0iKFtcd1xzX10rKSIvaWQ9IiQxJFNlbGYtPntJRFN1ZmZpeH0iLzsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0xheW91dEJsb2NrfSB8fCAncnc6U2VydmljZScsCiAgICAgICAgRGF0YSA9PiBcJURhdGEsCiAgICApOwoKICAgICMgc2V0IG1hbmRhdG9yeSBsYWJlbCBtYXJrZXIKICAgIGlmICggJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICYmICREYXRhe01hbmRhdG9yeUNsYXNzfSBuZSAnJyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGFiZWxTcGFuJywKICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0xheW91dEJsb2NrfSB8fCAncnc6U2VydmljZTpEZXNjcmlwdGlvblNob3J0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ3J3OlNlcnZpY2U6RGVzY3JpcHRpb25Mb25nJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgPT4gJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBIVE1MICAgID0+ICRMYXlvdXRPYmplY3QtPk91dHB1dCggVGVtcGxhdGVGaWxlID0+ICdQcm9jZXNzTWFuYWdlbWVudC9DdXN0b21lclNlcnZpY2UnICksCiAgICB9OwoKfQoKc3ViIF9SZW5kZXJQcmlvcml0eSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkUGFyYW17TGF5b3V0T2JqZWN0fTsKCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRm9ybUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJE5lZWRlZCwgJ19SZW5kZXJQcmlvcml0eScgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICdBY3Rpdml0eURpYWxvZ0ZpZWxkJywgJ19SZW5kZXJQcmlvcml0eScgKSwKICAgICAgICB9OwogICAgfQoKICAgIG15ICRQcmlvcml0aWVzID0gJFNlbGYtPl9HZXRQcmlvcml0aWVzKAogICAgICAgICV7ICRQYXJhbXtHZXRQYXJhbX0gfSwKICAgICk7CgogICAgbXkgJURhdGEgPSAoCiAgICAgICAgTGFiZWwgICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlByaW9yaXR5IiksCiAgICAgICAgRmllbGRJRCAgICAgICAgICA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgRm9ybUlEICAgICAgICAgICA9PiAkUGFyYW17Rm9ybUlEfSwKICAgICAgICBNYW5kYXRvcnlDbGFzcyAgID0+ICcnLAogICAgICAgIFZhbGlkYXRlUmVxdWlyZWQgPT4gJycsCiAgICAgICAgSURTdWZmaXggICAgICAgICA9PiAkU2VsZi0+e0lEU3VmZml4fSwKICAgICk7CgogICAgIyBJZiBmaWVsZCBpcyByZXF1aXJlZCBwdXQgaW4gdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZXMgZm9yCiAgICAjIFZhbGlkYXRlUmVxdWlyZWQgY2xhc3MgaW5wdXQgZmllbGQsIE1hbmRhdG9yeSBjbGFzcyBmb3IgdGhlIGxhYmVsCiAgICBpZiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0Rpc3BsYXl9ICYmICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0Rpc3BsYXl9ID09IDIgKSB7CiAgICAgICAgJERhdGF7VmFsaWRhdGVSZXF1aXJlZH0gPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgICREYXRhe01hbmRhdG9yeUNsYXNzfSAgID0gJ01hbmRhdG9yeSc7CiAgICB9CgogICAgbXkgJFNlbGVjdGVkVmFsdWU7CgogICAgIyBnZXQgcHJpb3JpdHkgb2JqZWN0CiAgICBteSAkUHJpb3JpdHlPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKTsKCiAgICBteSAkUHJpb3JpdHlJRFBhcmFtID0gJFBhcmFte0dldFBhcmFtfXtQcmlvcml0eUlEfTsKICAgIGlmICgkUHJpb3JpdHlJRFBhcmFtKSB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUHJpb3JpdHlPYmplY3QtPlByaW9yaXR5TG9va3VwKAogICAgICAgICAgICBQcmlvcml0eUlEID0+ICRQcmlvcml0eUlEUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiMgUm90aGVyIE9TUyAvIElUU01Db3JlIC0gY2FsY3VsYXRlIFByaW9yaXR5IHZpYSBDSVAgbWF0cml4CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRDb25maWcgICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpIC8vIHt9OwogICAgbXkgJENJUENhbGN1bGF0ZSA9ICRDb25maWctPntQcmlvcml0eUJ5Q0lQfSAvLyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU006OkZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdCcpOwoKICAgIGlmICggJENJUENhbGN1bGF0ZSAmJiAkUGFyYW17R2V0UGFyYW19e0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9ICkgewogICAgICAgICMgZ2V0IHRoZSBjcml0aWNhbGl0eSBlaXRoZXIgZnJvbSB0aGUgbWFudWFsbHkgc2V0IGR5bmFtaWMgZmllbGQsIG9yIHRoZSBzZXJ2aWNlCiAgICAgICAgbXkgJENyaXRpY2FsaXR5ID0gJFBhcmFte0dldFBhcmFtfXtEeW5hbWljRmllbGRfSVRTTUNyaXRpY2FsaXR5fTsKCiAgICAgICAgaWYgKCAhJENyaXRpY2FsaXR5ICYmICRQYXJhbXtHZXRQYXJhbX17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgbXkgJVNlcnZpY2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbXtHZXRQYXJhbX17U2VydmljZUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJENyaXRpY2FsaXR5ID0gJFNlcnZpY2V7Q3JpdGljYWxpdHl9OwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkQ3JpdGljYWxpdHkgKSB7CiAgICAgICAgICAgIG15ICRQcmlvcml0eUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpLT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkQ3JpdGljYWxpdHksCiAgICAgICAgICAgICAgICBJbXBhY3QgICAgICA9PiAkUGFyYW17R2V0UGFyYW19e0R5bmFtaWNGaWVsZH17RHluYW1pY0ZpZWxkX0lUU01JbXBhY3R9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUHJpb3JpdHlPYmplY3QtPlByaW9yaXR5TG9va3VwKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGlmIHdlIGVuZm9yY2UgQ0lQQWxsb2NhdGlvbiBpbiBhbnkgY2FzZSBkZWxldGUgYWxsIG90aGVyIHByaW9yaXR5IG9wdGlvbnMKICAgICAgICAgICAgaWYgKCAkUHJpb3JpdHlJRCAmJiAkQ0lQQ2FsY3VsYXRlID09IDIgKSB7CiAgICAgICAgICAgICAgICAkUHJpb3JpdGllcyA9IHsgJFByaW9yaXR5SUQgPT4gJFNlbGVjdGVkVmFsdWUgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KIyBFTyBJVFNNQ29yZQoKICAgIGlmICggJFBhcmFte0ZpZWxkTmFtZX0gZXEgJ1ByaW9yaXR5JyApIHsKCiAgICAgICAgaWYgKCAhJFNlbGVjdGVkVmFsdWUgKSB7CgogICAgICAgICAgICAjIEZldGNoIERlZmF1bHRWYWx1ZSBmcm9tIENvbmZpZwogICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlMb29rdXAoCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEZWZhdWx0VmFsdWV9IHx8ICcnLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoJFNlbGVjdGVkVmFsdWUpIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICggISRTZWxlY3RlZFZhbHVlICkgewogICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlMb29rdXAoCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0RlZmF1bHRWYWx1ZX0gfHwgJycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgR2V0IFRpY2tldFZhbHVlCiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17VGlja2V0fSApICYmICEkU2VsZWN0ZWRWYWx1ZSApIHsKICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRQYXJhbXtUaWNrZXR9LT57UHJpb3JpdHl9OwogICAgfQoKICAgICMgc2V0IHNlcnZlciBlcnJvcnMKICAgIG15ICRTZXJ2ZXJFcnJvciA9ICcnOwogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0Vycm9yfSApICYmICRQYXJhbXtFcnJvcn0tPnsnUHJpb3JpdHlJRCd9ICkgewogICAgICAgICRTZXJ2ZXJFcnJvciA9ICdTZXJ2ZXJFcnJvcic7CiAgICB9CgogICAgIyBidWlsZCBuZXh0IFByaW9yaXRpZXMgc3RyaW5nCiAgICAkRGF0YXtDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgPT4gJFByaW9yaXRpZXMsCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgVHJhbnNsYXRpb24gICA9PiAxLAogICAgICAgIFNlbGVjdGVkVmFsdWUgPT4gJFNlbGVjdGVkVmFsdWUsCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAiTW9kZXJuaXplIEZvcm1VcGRhdGUgJFNlcnZlckVycm9yIiwKICAgICk7CgogICAgIyBleHRlbmQgSURzIHRvIGVuYWJsZSBzaW11bHRhbmVvdXMgYWN0aXZpdGllcwogICAgJERhdGF7Q29udGVudH0gPX4gcy9pZD0iKFtcd1xzX10rKSIvaWQ9IiQxJFNlbGYtPntJRFN1ZmZpeH0iLzsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0xheW91dEJsb2NrfSB8fCAncnc6UHJpb3JpdHknLAogICAgICAgIERhdGEgPT4gXCVEYXRhLAogICAgKTsKCiAgICAjIHNldCBtYW5kYXRvcnkgbGFiZWwgbWFya2VyCiAgICBpZiAoICREYXRhe01hbmRhdG9yeUNsYXNzfSAmJiAkRGF0YXtNYW5kYXRvcnlDbGFzc30gbmUgJycgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhYmVsU3BhbicsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntMYXlvdXRCbG9ja30gfHwgJ3J3OlByaW9yaXR5OkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6UHJpb3JpdHk6RGVzY3JpcHRpb25Mb25nJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgPT4gJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBIVE1MICAgID0+ICRMYXlvdXRPYmplY3QtPk91dHB1dCggVGVtcGxhdGVGaWxlID0+ICdQcm9jZXNzTWFuYWdlbWVudC9DdXN0b21lclByaW9yaXR5JyApLAogICAgfTsKfQoKc3ViIF9SZW5kZXJRdWV1ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkUGFyYW17TGF5b3V0T2JqZWN0fTsKCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRm9ybUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnUGFyYW1ldGVyICVzIGlzIG1pc3NpbmcgaW4gJXMuJywgJE5lZWRlZCwgJ19SZW5kZXJRdWV1ZScgKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9ICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICdBY3Rpdml0eURpYWxvZ0ZpZWxkJywgJ19SZW5kZXJRdWV1ZScgKSwKICAgICAgICB9OwogICAgfQoKICAgIG15ICRRdWV1ZXMgPSAkU2VsZi0+X0dldFF1ZXVlcygKICAgICAgICAleyAkUGFyYW17R2V0UGFyYW19IH0sCiAgICApOwoKICAgIG15ICVEYXRhID0gKAogICAgICAgIExhYmVsICAgICAgICAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJUbyBxdWV1ZSIpLAogICAgICAgIEZpZWxkSUQgICAgICAgICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgIEZvcm1JRCAgICAgICAgICAgPT4gJFBhcmFte0Zvcm1JRH0sCiAgICAgICAgTWFuZGF0b3J5Q2xhc3MgICA9PiAnJywKICAgICAgICBWYWxpZGF0ZVJlcXVpcmVkID0+ICcnLAogICAgICAgIElEU3VmZml4ICAgICAgICAgPT4gJFNlbGYtPntJRFN1ZmZpeH0sCiAgICApOwoKICAgICMgSWYgZmllbGQgaXMgcmVxdWlyZWQgcHV0IGluIHRoZSBuZWNlc3NhcnkgdmFyaWFibGVzIGZvcgogICAgIyBWYWxpZGF0ZVJlcXVpcmVkIGNsYXNzIGlucHV0IGZpZWxkLCBNYW5kYXRvcnkgY2xhc3MgZm9yIHRoZSBsYWJlbAogICAgaWYgKCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEaXNwbGF5fSAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEaXNwbGF5fSA9PSAyICkgewogICAgICAgICREYXRhe1ZhbGlkYXRlUmVxdWlyZWR9ID0gJ1ZhbGlkYXRlX1JlcXVpcmVkJzsKICAgICAgICAkRGF0YXtNYW5kYXRvcnlDbGFzc30gICA9ICdNYW5kYXRvcnknOwogICAgfQogICAgbXkgJFNlbGVjdGVkVmFsdWU7CgogICAgIyBnZXQgcXVldWUgb2JqZWN0CiAgICBteSAkUXVldWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKCiAgICAjIGlmIHdlIGdvdCBRdWV1ZUlEIGFzIFBhcmFtIGZyb20gdGhlIEdVSQogICAgbXkgJFF1ZXVlSURQYXJhbSA9ICRQYXJhbXtHZXRQYXJhbX17UXVldWVJRH07CiAgICBpZiAoJFF1ZXVlSURQYXJhbSkgewogICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxvb2t1cCgKICAgICAgICAgICAgUXVldWVJRCA9PiAkUXVldWVJRFBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RmllbGROYW1lfSBlcSAnUXVldWUnICkgewoKICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKCiAgICAgICAgICAgICMgRmV0Y2ggRGVmYXVsdFZhbHVlIGZyb20gQ29uZmlnCiAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxvb2t1cCgKICAgICAgICAgICAgICAgIFF1ZXVlID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0RlZmF1bHRWYWx1ZX0gfHwgJycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkU2VsZWN0ZWRWYWx1ZSkgewogICAgICAgICAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEZWZhdWx0VmFsdWV9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgaWYgKCAhJFNlbGVjdGVkVmFsdWUgKSB7CiAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUxvb2t1cCgKICAgICAgICAgICAgICAgIFF1ZXVlSUQgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfSB8fCAnJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgVGlja2V0VmFsdWUKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtUaWNrZXR9ICkgJiYgISRTZWxlY3RlZFZhbHVlICkgewogICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte1RpY2tldH0tPntRdWV1ZX07CiAgICB9CgogICAgIyBzZXQgc2VydmVyIGVycm9ycwogICAgbXkgJFNlcnZlckVycm9yID0gJyc7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3J9ICkgJiYgJFBhcmFte0Vycm9yfS0+eydRdWV1ZUlEJ30gKSB7CiAgICAgICAgJFNlcnZlckVycm9yID0gJ1NlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIGdldCBsaXN0IHR5cGUKICAgIG15ICRUcmVlVmlldyA9IDA7CiAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKSBlcSAndHJlZScgKSB7CiAgICAgICAgJFRyZWVWaWV3ID0gMTsKICAgIH0KCiAgICAjIGJ1aWxkIG5leHQgcXVldWVzIHN0cmluZwogICAgJERhdGF7Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgID0+ICRRdWV1ZXMsCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnUXVldWVJRCcsCiAgICAgICAgVHJhbnNsYXRpb24gICA9PiAkVHJlZVZpZXcsCiAgICAgICAgU2VsZWN0ZWRWYWx1ZSA9PiAkU2VsZWN0ZWRWYWx1ZSwKICAgICAgICBDbGFzcyAgICAgICAgID0+ICJNb2Rlcm5pemUgRm9ybVVwZGF0ZSAkU2VydmVyRXJyb3IiLAogICAgICAgIFRyZWVWaWV3ICAgICAgPT4gJFRyZWVWaWV3LAogICAgICAgIFNvcnQgICAgICAgICAgPT4gJ1RyZWVWaWV3JywKICAgICAgICBQb3NzaWJsZU5vbmUgID0+IDEsCiAgICApOwoKICAgICMgZXh0ZW5kIElEcyB0byBlbmFibGUgc2ltdWx0YW5lb3VzIGFjdGl2aXRpZXMKICAgICREYXRhe0NvbnRlbnR9ID1+IHMvaWQ9IihbXHdcc19dKykiL2lkPSIkMSRTZWxmLT57SURTdWZmaXh9Ii87CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntMYXlvdXRCbG9ja30gfHwgJ3J3OlF1ZXVlJywKICAgICAgICBEYXRhID0+IFwlRGF0YSwKICAgICk7CgogICAgIyBzZXQgbWFuZGF0b3J5IGxhYmVsIG1hcmtlcgogICAgaWYgKCAkRGF0YXtNYW5kYXRvcnlDbGFzc30gJiYgJERhdGF7TWFuZGF0b3J5Q2xhc3N9IG5lICcnICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMYWJlbFNwYW4nLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25TaG9ydH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57TGF5b3V0QmxvY2t9IHx8ICdydzpRdWV1ZTpEZXNjcmlwdGlvblNob3J0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ3J3OlF1ZXVlOkRlc2NyaXB0aW9uTG9uZycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25Mb25nID0+ICRQYXJhbXtEZXNjcmlwdGlvbkxvbmd9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgSFRNTCAgICA9PiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoIFRlbXBsYXRlRmlsZSA9PiAnUHJvY2Vzc01hbmFnZW1lbnQvQ3VzdG9tZXJRdWV1ZScgKSwKICAgIH07Cn0KCnN1YiBfUmVuZGVyU3RhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJFBhcmFte0xheW91dE9iamVjdH07CgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZvcm1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzID0+IDAsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1BhcmFtZXRlciAlcyBpcyBtaXNzaW5nIGluICVzLicsICROZWVkZWQsICdfUmVuZGVyU3RhdGUnICksCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfSApICkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAnQWN0aXZpdHlEaWFsb2dGaWVsZCcsICdfUmVuZGVyU3RhdGUnICksCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkU3RhdGVzID0gJFNlbGYtPl9HZXRTdGF0ZXMoICV7ICRQYXJhbXtUaWNrZXR9IH0gKTsKCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBMYWJlbCAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgiTmV4dCB0aWNrZXQgc3RhdGUiKSwKICAgICAgICBGaWVsZElEICAgICAgICAgID0+ICdTdGF0ZUlEJywKICAgICAgICBGb3JtSUQgICAgICAgICAgID0+ICRQYXJhbXtGb3JtSUR9LAogICAgICAgIE1hbmRhdG9yeUNsYXNzICAgPT4gJycsCiAgICAgICAgVmFsaWRhdGVSZXF1aXJlZCA9PiAnJywKICAgICAgICBJRFN1ZmZpeCAgICAgICAgID0+ICRTZWxmLT57SURTdWZmaXh9LAogICAgKTsKCiAgICAjIElmIGZpZWxkIGlzIHJlcXVpcmVkIHB1dCBpbiB0aGUgbmVjZXNzYXJ5IHZhcmlhYmxlcyBmb3IKICAgICMgVmFsaWRhdGVSZXF1aXJlZCBjbGFzcyBpbnB1dCBmaWVsZCwgTWFuZGF0b3J5IGNsYXNzIGZvciB0aGUgbGFiZWwKICAgIGlmICggJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGlzcGxheX0gJiYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGlzcGxheX0gPT0gMiApIHsKICAgICAgICAkRGF0YXtWYWxpZGF0ZVJlcXVpcmVkfSA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICAgICAgJERhdGF7TWFuZGF0b3J5Q2xhc3N9ICAgPSAnTWFuZGF0b3J5JzsKICAgIH0KICAgIG15ICRTZWxlY3RlZFZhbHVlOwoKICAgICMgZ2V0IHN0YXRlIG9iamVjdAogICAgbXkgJFN0YXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRlJyk7CgogICAgbXkgJFN0YXRlSURQYXJhbSA9ICRQYXJhbXtHZXRQYXJhbX17U3RhdGVJRH07CiAgICBpZiAoJFN0YXRlSURQYXJhbSkgewogICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUxvb2t1cCggU3RhdGVJRCA9PiAkU3RhdGVJRFBhcmFtICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RmllbGROYW1lfSBlcSAnU3RhdGUnICkgewoKICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKCiAgICAgICAgICAgICMgRmV0Y2ggRGVmYXVsdFZhbHVlIGZyb20gQ29uZmlnCiAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUxvb2t1cCgKICAgICAgICAgICAgICAgIFN0YXRlID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0RlZmF1bHRWYWx1ZX0gfHwgJycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkU2VsZWN0ZWRWYWx1ZSkgewogICAgICAgICAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEZWZhdWx0VmFsdWV9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgaWYgKCAhJFNlbGVjdGVkVmFsdWUgKSB7CiAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUxvb2t1cCgKICAgICAgICAgICAgICAgIFN0YXRlSUQgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfSB8fCAnJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgVGlja2V0VmFsdWUKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtUaWNrZXR9ICkgJiYgISRTZWxlY3RlZFZhbHVlICkgewogICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFBhcmFte1RpY2tldH0tPntTdGF0ZX07CiAgICB9CgogICAgIyBzZXQgc2VydmVyIGVycm9ycwogICAgbXkgJFNlcnZlckVycm9yID0gJyc7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RXJyb3J9ICkgJiYgJFBhcmFte0Vycm9yfS0+eydTdGF0ZUlEJ30gKSB7CiAgICAgICAgJFNlcnZlckVycm9yID0gJ1NlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIGJ1aWxkIG5leHQgc3RhdGVzIHN0cmluZwogICAgJERhdGF7Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgID0+ICRTdGF0ZXMsCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnU3RhdGVJRCcsCiAgICAgICAgVHJhbnNsYXRpb24gICA9PiAxLAogICAgICAgIFNlbGVjdGVkVmFsdWUgPT4gJFNlbGVjdGVkVmFsdWUsCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAiTW9kZXJuaXplIEZvcm1VcGRhdGUgJFNlcnZlckVycm9yIiwKICAgICk7CgogICAgIyBleHRlbmQgSURzIHRvIGVuYWJsZSBzaW11bHRhbmVvdXMgYWN0aXZpdGllcwogICAgJERhdGF7Q29udGVudH0gPX4gcy9pZD0iKFtcd1xzX10rKSIvaWQ9IiQxJFNlbGYtPntJRFN1ZmZpeH0iLzsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0xheW91dEJsb2NrfSB8fCAncnc6U3RhdGUnLAogICAgICAgIERhdGEgPT4gXCVEYXRhLAogICAgKTsKCiAgICAjIHNldCBtYW5kYXRvcnkgbGFiZWwgbWFya2VyCiAgICBpZiAoICREYXRhe01hbmRhdG9yeUNsYXNzfSAmJiAkRGF0YXtNYW5kYXRvcnlDbGFzc30gbmUgJycgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xhYmVsU3BhbicsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEZXNjcmlwdGlvblNob3J0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntMYXlvdXRCbG9ja30gfHwgJ3J3OlN0YXRlOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6U3RhdGU6RGVzY3JpcHRpb25Mb25nJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgPT4gJFBhcmFte0Rlc2NyaXB0aW9uTG9uZ30sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBIVE1MICAgID0+ICRMYXlvdXRPYmplY3QtPk91dHB1dCggVGVtcGxhdGVGaWxlID0+ICdQcm9jZXNzTWFuYWdlbWVudC9DdXN0b21lclN0YXRlJyApLAogICAgfTsKfQoKc3ViIF9SZW5kZXJUeXBlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRQYXJhbXtMYXlvdXRPYmplY3R9OwoKICAgIGZvciBteSAkTmVlZGVkIChxdyhGb3JtSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAkTmVlZGVkLCAnX1JlbmRlclR5cGUnICksCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfSApICkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdQYXJhbWV0ZXIgJXMgaXMgbWlzc2luZyBpbiAlcy4nLCAnQWN0aXZpdHlEaWFsb2dGaWVsZCcsICdfUmVuZGVyVHlwZScgKSwKICAgICAgICB9OwogICAgfQoKICAgIG15ICRUeXBlcyA9ICRTZWxmLT5fR2V0VHlwZXMoCiAgICAgICAgJXsgJFBhcmFte0dldFBhcmFtfSB9LAogICAgKTsKCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBMYWJlbCAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgiVHlwZSIpLAogICAgICAgIEZpZWxkSUQgICAgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgRm9ybUlEICAgICAgICAgICA9PiAkUGFyYW17Rm9ybUlEfSwKICAgICAgICBNYW5kYXRvcnlDbGFzcyAgID0+ICcnLAogICAgICAgIFZhbGlkYXRlUmVxdWlyZWQgPT4gJycsCiAgICAgICAgSURTdWZmaXggICAgICAgICA9PiAkU2VsZi0+e0lEU3VmZml4fSwKICAgICk7CgogICAgIyBJZiBmaWVsZCBpcyByZXF1aXJlZCBwdXQgaW4gdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZXMgZm9yCiAgICAjIFZhbGlkYXRlUmVxdWlyZWQgY2xhc3MgaW5wdXQgZmllbGQsIE1hbmRhdG9yeSBjbGFzcyBmb3IgdGhlIGxhYmVsCiAgICBpZiAoICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0Rpc3BsYXl9ICYmICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0Rpc3BsYXl9ID09IDIgKSB7CiAgICAgICAgJERhdGF7VmFsaWRhdGVSZXF1aXJlZH0gPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgICREYXRhe01hbmRhdG9yeUNsYXNzfSAgID0gJ01hbmRhdG9yeSc7CiAgICB9CgogICAgbXkgJFNlbGVjdGVkVmFsdWU7CgogICAgIyBnZXQgdHlwZSBvYmplY3QKICAgIG15ICRUeXBlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKCiAgICBteSAkVHlwZUlEUGFyYW0gPSAkUGFyYW17R2V0UGFyYW19e1R5cGVJRH07CiAgICBpZiAoJFR5cGVJRFBhcmFtKSB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkVHlwZU9iamVjdC0+VHlwZUxvb2t1cCgKICAgICAgICAgICAgVHlwZUlEID0+ICRUeXBlSURQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0ZpZWxkTmFtZX0gZXEgJ1R5cGUnICkgewoKICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKCiAgICAgICAgICAgICMgRmV0Y2ggRGVmYXVsdFZhbHVlIGZyb20gQ29uZmlnCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIGRlZmluZWQgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfQogICAgICAgICAgICAgICAgJiYgJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfSBuZSAnJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRUeXBlT2JqZWN0LT5UeXBlTG9va3VwKAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57RGVmYXVsdFZhbHVlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRTZWxlY3RlZFZhbHVlKSB7CiAgICAgICAgICAgICAgICAkU2VsZWN0ZWRWYWx1ZSA9ICRQYXJhbXtBY3Rpdml0eURpYWxvZ0ZpZWxkfS0+e0RlZmF1bHRWYWx1ZX07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiAoICEkU2VsZWN0ZWRWYWx1ZSApIHsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEZWZhdWx0VmFsdWV9CiAgICAgICAgICAgICAgICAmJiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEZWZhdWx0VmFsdWV9IG5lICcnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRTZWxlY3RlZFZhbHVlID0gJFR5cGVPYmplY3QtPlR5cGVMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAkUGFyYW17QWN0aXZpdHlEaWFsb2dGaWVsZH0tPntEZWZhdWx0VmFsdWV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIEdldCBUaWNrZXRWYWx1ZQogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte1RpY2tldH0gKSAmJiAhJFNlbGVjdGVkVmFsdWUgKSB7CiAgICAgICAgJFNlbGVjdGVkVmFsdWUgPSAkUGFyYW17VGlja2V0fS0+e1R5cGV9OwogICAgfQoKICAgICMgc2V0IHNlcnZlciBlcnJvcnMKICAgIG15ICRTZXJ2ZXJFcnJvciA9ICcnOwogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0Vycm9yfSApICYmICRQYXJhbXtFcnJvcn0tPnsnVHlwZUlEJ30gKSB7CiAgICAgICAgJFNlcnZlckVycm9yID0gJ1NlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIGJ1aWxkIFNlcnZpY2Ugc3RyaW5nCiAgICAkRGF0YXtDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgPT4gJFR5cGVzLAogICAgICAgIE5hbWUgICAgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAiTW9kZXJuaXplIEZvcm1VcGRhdGUgJFNlcnZlckVycm9yIiwKICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICRTZWxlY3RlZFZhbHVlLAogICAgICAgIFBvc3NpYmxlTm9uZSAgPT4gMSwKICAgICAgICBTb3J0ICAgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgVHJhbnNsYXRpb24gICA9PiAxLAogICAgICAgIE1heCAgICAgICAgICAgPT4gMjAwLAogICAgKTsKCiAgICAjIGV4dGVuZCBJRHMgdG8gZW5hYmxlIHNpbXVsdGFuZW91cyBhY3Rpdml0aWVzCiAgICAkRGF0YXtDb250ZW50fSA9fiBzL2lkPSIoW1x3XHNfXSspIi9pZD0iJDEkU2VsZi0+e0lEU3VmZml4fSIvOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57TGF5b3V0QmxvY2t9IHx8ICdydzpUeXBlJywKICAgICAgICBEYXRhID0+IFwlRGF0YSwKICAgICk7CgogICAgIyBzZXQgbWFuZGF0b3J5IGxhYmVsIG1hcmtlcgogICAgaWYgKCAkRGF0YXtNYW5kYXRvcnlDbGFzc30gJiYgJERhdGF7TWFuZGF0b3J5Q2xhc3N9IG5lICcnICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMYWJlbFNwYW4nLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25TaG9ydH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFte0FjdGl2aXR5RGlhbG9nRmllbGR9LT57TGF5b3V0QmxvY2t9IHx8ICdydzpUeXBlOkRlc2NyaXB0aW9uU2hvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9uU2hvcnR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAncnc6VHlwZTpEZXNjcmlwdGlvbkxvbmcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyA9PiAkUGFyYW17RGVzY3JpcHRpb25Mb25nfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIEhUTUwgICAgPT4gJExheW91dE9iamVjdC0+T3V0cHV0KCBUZW1wbGF0ZUZpbGUgPT4gJ1Byb2Nlc3NNYW5hZ2VtZW50L0N1c3RvbWVyVHlwZScgKSwKICAgIH07Cn0KCnN1YiBfU3RvcmVBY3Rpdml0eURpYWxvZyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRUaWNrZXRJRCA9ICRQYXJhbXtHZXRQYXJhbX0tPntUaWNrZXRJRH07CiAgICBteSAlVGlja2V0OwogICAgbXkgJFByb2Nlc3NFbnRpdHlJRDsKICAgIG15ICRBY3Rpdml0eUVudGl0eUlEOwogICAgbXkgJUVycm9yOwogICAgbXkgJUVycm9yTWVzc2FnZXM7CgogICAgbXkgJVRpY2tldFBhcmFtOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgbXkgJEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgPSAkUGFyYW17R2V0UGFyYW19LT57QWN0aXZpdHlEaWFsb2dFbnRpdHlJRH07CiAgICBpZiAoICEkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdBY3Rpdml0eURpYWxvZ0VudGl0eUlEIG1pc3NpbmchJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBhY3Rpdml0eSBkaWFsb2cgb2JqZWN0CiAgICBteSAkQWN0aXZpdHlEaWFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OkFjdGl2aXR5RGlhbG9nJyk7CiAgICBteSAkQWN0aXZpdHlEaWFsb2cgICAgICAgPSAkQWN0aXZpdHlEaWFsb2dPYmplY3QtPkFjdGl2aXR5RGlhbG9nR2V0KAogICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQgPT4gJEFjdGl2aXR5RGlhbG9nRW50aXR5SUQsCiAgICAgICAgSW50ZXJmYWNlICAgICAgICAgICAgICA9PiAnQ3VzdG9tZXJJbnRlcmZhY2UnLAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkQWN0aXZpdHlEaWFsb2cpICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb3VsZG5cJ3QgZ2V0IENvbmZpZyBmb3IgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCAiJXMiIScsICRBY3Rpdml0eURpYWxvZ0VudGl0eUlEICksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCB1cGxvYWQgY2FjaGUgb2JqZWN0CiAgICBteSAkVXBsb2FkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZScpOwoKICAgICMgc29tZSBmaWVsZHMgc2hvdWxkIGJlIHNraXBwZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UKICAgIG15ICRTa2lwRmllbGRzID0gWyAnT3duZXInLCAnUmVzcG9uc2libGUnLCAnTG9jaycsICdQZW5kaW5nVGltZScsICdDdXN0b21lcklEJyBdOwoKICAgICMgY2hlY2sgZWFjaCBGaWVsZCBvZiBhbiBBY3Rpdml0eSBEaWFsb2cgYW5kIGZpbGwgdGhlIGVycm9yIGhhc2ggaWYgc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcKICAgIG15ICVDaGVja2VkRmllbGRzOwogICAgRElBTE9HRklFTEQ6CiAgICBmb3IgbXkgJEN1cnJlbnRGaWVsZCAoIEB7ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkT3JkZXJ9IH0gKSB7CgogICAgICAgICMgc29tZSBmaWVsZHMgc2hvdWxkIGJlIHNraXBwZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UKICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICggZ3JlcCB7ICRfIGVxICRDdXJyZW50RmllbGQgfSBAeyRTa2lwRmllbGRzfSApOwoKICAgICAgICAjIGhhbmRsZSBkeW5hbWljIGZpZWxkcyBzZXBhcmF0ZWx5CiAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkQ3VycmVudEZpZWxkID1+IG17XkR5bmFtaWNGaWVsZF8oLiopfXhtczsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e05hbWVUb0lEfS0+eyRDdXJyZW50RmllbGR9IGVxICdDdXN0b21lcklEJwogICAgICAgICAgICB8fCAkU2VsZi0+e05hbWVUb0lEfS0+eyRDdXJyZW50RmllbGR9IGVxICdDdXN0b21lclVzZXJJRCcKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgIG5leHQgRElBTE9HRklFTEQgaWYgJENoZWNrZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9LT57J0N1c3RvbWVySUQnfSB9OwoKICAgICAgICAgICAgbXkgJEN1c3RvbWVySUQgPSAkUGFyYW17R2V0UGFyYW19LT57Q3VzdG9tZXJJRH0gfHwgJFNlbGYtPntVc2VyQ3VzdG9tZXJJRH07CiAgICAgICAgICAgIGlmICggISRDdXN0b21lcklEICkgewogICAgICAgICAgICAgICAgJEVycm9yeydDdXN0b21lcklEJ30gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRUaWNrZXRQYXJhbXtDdXN0b21lcklEfSA9ICRDdXN0b21lcklEOwoKICAgICAgICAgICAgIyBVbmZvcnR1bmF0ZWx5IFRpY2tldENyZWF0ZSBuZWVkcyAnQ3VzdG9tZXJVc2VyJyBhcyBwYXJhbSBpbnN0ZWFkIG9mICdDdXN0b21lclVzZXJJRCcKICAgICAgICAgICAgbXkgJEN1c3RvbWVyVXNlcklEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlbGVjdGVkQ3VzdG9tZXJVc2VyJyApCiAgICAgICAgICAgICAgICB8fCAkU2VsZi0+e1VzZXJJRH07CiAgICAgICAgICAgIGlmICggISRDdXN0b21lclVzZXJJRCApIHsKICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZWxlY3RlZFVzZXJJRCcgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICEkQ3VzdG9tZXJVc2VySUQgKSB7CiAgICAgICAgICAgICAgICAkRXJyb3J7J0N1c3RvbWVyVXNlcklEJ30gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFRpY2tldFBhcmFte0N1c3RvbWVyVXNlcn0gPSAkQ3VzdG9tZXJVc2VySUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJENoZWNrZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9LT57J0N1c3RvbWVySUQnfSB9ICAgICA9IDE7CiAgICAgICAgICAgICRDaGVja2VkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfS0+eydDdXN0b21lclVzZXJJRCd9IH0gPSAxOwoKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIHNraXAgaWYgd2UndmUgYWxyZWFkeSBjaGVja2VkIElEIG9yIE5hbWUKICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkQ2hlY2tlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH0tPnskQ3VycmVudEZpZWxkfSB9OwoKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUgLSBjYWxjdWxhdGUgUHJpb3JpdHkgdmlhIENJUCBtYXRyaXgKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSBlcSAnUHJpb3JpdHlJRCcgKSB7CiAgICAgICAgICAgICAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgICAgICAgICAgICAgIG15ICRDb25maWcgICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpIC8vIHt9OwogICAgICAgICAgICAgICAgbXkgJENJUENhbGN1bGF0ZSA9ICRDb25maWctPntQcmlvcml0eUJ5Q0lQfSAvLyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU006OkZyb250ZW5kOjpDSVBBbGxvY2F0aW9uRGVmYXVsdCcpOwoKICAgICAgICAgICAgICAgIGlmICggJENJUENhbGN1bGF0ZSAmJiAkQ0lQQ2FsY3VsYXRlID09IDIgJiYgJFBhcmFte0dldFBhcmFtfXtEeW5hbWljRmllbGR9e0R5bmFtaWNGaWVsZF9JVFNNSW1wYWN0fSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgdGhlIGNyaXRpY2FsaXR5IGVpdGhlciBmcm9tIHRoZSBtYW51YWxseSBzZXQgZHluYW1pYyBmaWVsZCwgb3IgdGhlIHNlcnZpY2UKICAgICAgICAgICAgICAgICAgICBteSAkQ3JpdGljYWxpdHkgPSAkUGFyYW17R2V0UGFyYW19e0R5bmFtaWNGaWVsZF9JVFNNQ3JpdGljYWxpdHl9OwoKICAgICAgICAgICAgICAgICAgICBpZiAoICEkQ3JpdGljYWxpdHkgJiYgJFBhcmFte0dldFBhcmFtfXtTZXJ2aWNlSUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte0dldFBhcmFtfXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAkQ3JpdGljYWxpdHkgPSAkU2VydmljZXtDcml0aWNhbGl0eX07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoICRDcml0aWNhbGl0eSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlJyktPlByaW9yaXR5QWxsb2NhdGlvbkdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICRDcml0aWNhbGl0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRQYXJhbXtHZXRQYXJhbX17RHluYW1pY0ZpZWxkfXtEeW5hbWljRmllbGRfSVRTTUltcGFjdH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRQcmlvcml0eUlEIG5lICRQYXJhbXtHZXRQYXJhbX17UHJpb3JpdHlJRH0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW47IHdlIGp1c3QgZW5mb3JjZSB0aGUgcHJpbyBhbmQgd3JpdGUgYW4gZXJyb3IgdG8gdGhlIGxvZyBmaWxlIGhlcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkdvdCBQcmlvcml0eUlEICckUGFyYW17R2V0UGFyYW19e1ByaW9yaXR5SUR9JywgYnV0IENJUCBlbmZvcmNlcyAnJFByaW9yaXR5SUQnIC0gb3ZlcnJpZGluZyB0aGUgZnJvbnRlbmQgdmFsdWUuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBhcmFte0dldFBhcmFtfXtQcmlvcml0eUlEfSA9ICRQcmlvcml0eUlEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICAgICAgICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+X0NoZWNrRmllbGQoCiAgICAgICAgICAgICAgICBGaWVsZCA9PiAkU2VsZi0+e05hbWVUb0lEfS0+eyRDdXJyZW50RmllbGR9LAogICAgICAgICAgICAgICAgJXsgJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfS0+eyRDdXJyZW50RmllbGR9IH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkUmVzdWx0ICkgewoKICAgICAgICAgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciBBcnRpY2xlIChTdWJqZWN0ICYgQm9keSkKICAgICAgICAgICAgICAgIGlmICggJEN1cnJlbnRGaWVsZCBlcSAnQXJ0aWNsZScgKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRBcnRpY2xlUGFydCAocXcoU3ViamVjdCBCb2R5KSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkUGFyYW17R2V0UGFyYW19LT57JEFydGljbGVQYXJ0fSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNldCBlcnJvciBmb3IgZWFjaCBwYXJ0IChpZiBhbnkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3J7ICdBcnRpY2xlJyAuICRBcnRpY2xlUGFydCB9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFsbCBvdGhlciBmaWVsZHMKICAgICAgICAgICAgICAgIGVsc2lmICggJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfS0+eyRDdXJyZW50RmllbGR9LT57RGlzcGxheX0gPT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkVGlja2V0UGFyYW17ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfSA9ICRSZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJENoZWNrZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgYmFja2VuZCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICMgc2tpcCB2YWxpZGF0aW9uIG9mIGhpZGRlbiBmaWVsZHMKICAgIG15ICVWaXNpYmlsaXR5OwoKICAgICMgdHJhbnNmb3JtIGR5bmFtaWMgZmllbGQgZGF0YSBpbnRvIERGTmFtZSA9PiBERk5hbWUgcGFpcgogICAgbXkgJUR5bmFtaWNGaWVsZEFjbCA9IG1hcCB7ICRfID0+ICRfIH0ga2V5cyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqOwoKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBjYWxsIHRpY2tldCBBQ0xzIGZvciBEeW5hbWljRmllbGRzIHRvIGNoZWNrIGZpZWxkIHZpc2liaWxpdHkKICAgIG15ICRBQ0xSZXN1bHQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgJFBhcmFte0dldFBhcmFtfS0+JSosCiAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFJldHVyblR5cGUgICAgID0+ICdGb3JtJywKICAgICAgICBSZXR1cm5TdWJUeXBlICA9PiAnLScsCiAgICAgICAgRGF0YSAgICAgICAgICAgPT4gXCVEeW5hbWljRmllbGRBY2wsCiAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIGlmICgkQUNMUmVzdWx0KSB7CiAgICAgICAgJVZpc2liaWxpdHkgPSBtYXAgeyAnRHluYW1pY0ZpZWxkXycgLiAkXyA9PiAwIH0ga2V5cyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqOwogICAgICAgIG15ICVBY2xEYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpOwogICAgICAgIGZvciBteSAkRmllbGQgKCBzb3J0IGtleXMgJUFjbERhdGEgKSB7CiAgICAgICAgICAgICRWaXNpYmlsaXR5eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQgfSA9IDE7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgJVZpc2liaWxpdHkgPSBtYXAgeyAnRHluYW1pY0ZpZWxkXycgLiAkXyA9PiAxIH0ga2V5cyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0tPiUqOwogICAgfQoKICAgIG15ICVEeW5hbWljRmllbGRWYWxpZGF0aW9uUmVzdWx0OwogICAgbXkgJUR5bmFtaWNGaWVsZFBvc3NpYmxlVmFsdWVzOwoKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkTmFtZSAoIGtleXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKiApIHsKCiAgICAgICAgIyBHZXQgdGhlIENvbmZpZyBvZiB0aGUgY3VycmVudCBEeW5hbWljRmllbGQgKHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBncmVwIHJlc3VsdCBhcnJheSkKICAgICAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnID0gJFNlbGYtPntEeW5hbWljRmllbGR9eyREeW5hbWljRmllbGROYW1lfTsKCiAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZykgKSB7CgogICAgICAgICAgICBteSAkTWVzc2FnZSA9ICJEeW5hbWljRmllbGRDb25maWcgbWlzc2luZyBmb3IgZmllbGQ6ICRQYXJhbXtGaWVsZE5hbWV9LCBvciBpcyBub3QgYSBUaWNrZXQgRHluYW1pYyBGaWVsZCEiOwoKICAgICAgICAgICAgIyBsb2cgZXJyb3IgYnV0IGRvZXMgbm90IHN0b3AgdGhlIGV4ZWN1dGlvbiBhcyBpdCBjb3VsZCBiZSBhbiBvbGQgQXJ0aWNsZQogICAgICAgICAgICAjIER5bmFtaWNGaWVsZCwgc2VlIGJ1ZyMxMTY2NgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEOwogICAgICAgIH0KCiAgICAgICAgIyBXaWxsIGJlIGV4dGVuZGVkIGxhdGVyIG9uIGZvciBBQ0wgQ2hlY2tpbmc6CiAgICAgICAgbXkgJFBvc3NpYmxlVmFsdWVzRmlsdGVyOwoKICAgICAgICBteSAkSXNBQ0xSZWR1Y2libGUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+SGFzQmVoYXZpb3IoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzQUNMUmVkdWNpYmxlJywKICAgICAgICApOwoKICAgICAgICBpZiAoJElzQUNMUmVkdWNpYmxlKSB7CgogICAgICAgICAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgICAgICAgICBteSAkUG9zc2libGVWYWx1ZXMgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+UG9zc2libGVWYWx1ZXNHZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgZmllbGQgaGFzIFBvc3NpYmxlVmFsdWVzIHByb3BlcnR5IGluIGl0cyBjb25maWd1cmF0aW9uCiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJFBvc3NpYmxlVmFsdWVzKSApIHsKCiAgICAgICAgICAgICAgICAjIGNvbnZlcnQgcG9zc2libGUgdmFsdWVzIGtleSA9PiB2YWx1ZSB0byBrZXkgPT4ga2V5IGZvciBBQ0xzIHVzaW5nIGEgSGFzaCBzbGljZQogICAgICAgICAgICAgICAgbXkgJUFjbERhdGEgPSAleyRQb3NzaWJsZVZhbHVlc307CiAgICAgICAgICAgICAgICBAQWNsRGF0YXsga2V5cyAlQWNsRGF0YSB9ID0ga2V5cyAlQWNsRGF0YTsKCiAgICAgICAgICAgICAgICAjIHNldCBwb3NzaWJsZSB2YWx1ZXMgZmlsdGVyIGZyb20gQUNMcwogICAgICAgICAgICAgICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICAgICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19LT4lKiwKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgUmV0dXJuVHlwZSAgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgICAgPT4gXCVBY2xEYXRhLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoJEFDTCkgewogICAgICAgICAgICAgICAgICAgIG15ICVGaWx0ZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CgogICAgICAgICAgICAgICAgICAgICMgY29udmVydCBGaWxlciBrZXkgPT4ga2V5IGJhY2sgdG8ga2V5ID0+IHZhbHVlIHVzaW5nIG1hcAogICAgICAgICAgICAgICAgICAgICV7JFBvc3NpYmxlVmFsdWVzRmlsdGVyfSA9IG1hcCB7ICRfID0+ICRQb3NzaWJsZVZhbHVlcy0+eyRffSB9CiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgJUZpbHRlcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRQb3NzaWJsZVZhbHVlc0ZpbHRlciA9ICRQb3NzaWJsZVZhbHVlczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJER5bmFtaWNGaWVsZFBvc3NpYmxlVmFsdWVzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9ID0gJFBvc3NpYmxlVmFsdWVzRmlsdGVyOwoKICAgICAgICAjIGlmIHdlIGhhdmUgYW4gaW52aXNpYmxlIGZpZWxkLCB1c2UgY29uZmlnJ3MgZGVmYXVsdCB2YWx1ZQogICAgICAgIGlmICggJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfS0+eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9ICYmICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkc30tPnsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgfS0+e0Rpc3BsYXl9ID09IDAgKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9LT57ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH0tPntEZWZhdWx0VmFsdWV9CiAgICAgICAgICAgICAgICAmJiBsZW5ndGggJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfS0+eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9LT57RGVmYXVsdFZhbHVlfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkVGlja2V0UGFyYW17ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH0gPSAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9LT57ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH0tPntEZWZhdWx0VmFsdWV9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFRpY2tldFBhcmFteyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9ID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2tpcCBmaWVsZHMgd2hpY2ggYXJlIGhpZGRlbiBieSBBQ0xzCiAgICAgICAgZWxzaWYgKCAhJFZpc2liaWxpdHl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEOwogICAgICAgIH0KCiAgICAgICAgIyBvbmx5IHZhbGlkYXRlIHZpc2libGUgZmllbGRzCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15ICRNYW5kYXRvcnkgPSAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9LT57ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH0KICAgICAgICAgICAgICAgID8gKCAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9LT57ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH0tPntEaXNwbGF5fSA9PSAyICkKICAgICAgICAgICAgICAgIDogJER5bmFtaWNGaWVsZENvbmZpZy0+e01hbmRhdG9yeX07CgogICAgICAgICAgICAjIENoZWNrIER5bmFtaWNGaWVsZCBWYWx1ZXMKICAgICAgICAgICAgbXkgJFZhbGlkYXRpb25SZXN1bHQgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVWYWxpZGF0ZSgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlc0ZpbHRlciA9PiAkUG9zc2libGVWYWx1ZXNGaWx0ZXIsCiAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgICAgICBNYW5kYXRvcnkgICAgICAgICAgICA9PiAkTWFuZGF0b3J5LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJFZhbGlkYXRpb25SZXN1bHQpICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBwZXJmb3JtIHZhbGlkYXRpb24gb24gZmllbGQgJXMhJywgJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gICAgICAgICAgICAgICAgICAgICAgICA9IDE7CiAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gICAgICAgICAgICAgICAgPSAkVmFsaWRhdGlvblJlc3VsdC0+e0Vycm9yTWVzc2FnZX07CiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkVmFsaWRhdGlvblJlc3VsdHsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkVmFsaWRhdGlvblJlc3VsdDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFRpY2tldFBhcmFteyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9ID0KICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZUdldCgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15IEBOb3RpZnk7CgogICAgIyBHZXQgVGlja2V0IHRvIGNoZWNrIFRpY2tldElEIHdhcyB2YWxpZAogICAgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0ICkgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NvdWxkIG5vdCBzdG9yZSBBY3Rpdml0eURpYWxvZywgaW52YWxpZCBUaWNrZXRJRDogJXMhJywgJFRpY2tldElEICksCiAgICAgICAgKTsKICAgIH0KCiAgICAkQWN0aXZpdHlFbnRpdHlJRCA9ICRUaWNrZXR7CiAgICAgICAgJ0R5bmFtaWNGaWVsZF8nCiAgICAgICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9jZXNzOjpEeW5hbWljRmllbGRQcm9jZXNzTWFuYWdlbWVudEFjdGl2aXR5SUQnKQogICAgfTsKICAgIGlmICggISRBY3Rpdml0eUVudGl0eUlEICkKICAgIHsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5fU2hvd0RpYWxvZ0Vycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICdNaXNzaW5nIEFjdGl2aXR5RW50aXR5SUQgaW4gVGlja2V0ICVzIScsCiAgICAgICAgICAgICAgICAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBNYWtlIHN1cmUgdGhlIGFjdGl2aXR5IGRpYWxvZyB0byBzYXZlIGlzIHN0aWxsIHRoZSBjb3JyZWN0IGFjdGl2aXR5CiAgICBteSAkQWN0aXZpdHkgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OkFjdGl2aXR5JyktPkFjdGl2aXR5R2V0KAogICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJEFjdGl2aXR5RW50aXR5SUQsCiAgICAgICAgSW50ZXJmYWNlICAgICAgICA9PiBbJ0N1c3RvbWVySW50ZXJmYWNlJ10sCiAgICApOwogICAgbXkgJUFjdGl2aXR5RGlhbG9ncyA9IHJldmVyc2UgJXsgJEFjdGl2aXR5LT57QWN0aXZpdHlEaWFsb2d9IC8vIHt9IH07CiAgICBpZiAoICEkQWN0aXZpdHlEaWFsb2dzeyRBY3Rpdml0eURpYWxvZ0VudGl0eUlEfSApIHsKICAgICAgICBteSAkVGlja2V0SG9vayAgICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6SG9vaycpOwogICAgICAgIG15ICRUaWNrZXRIb29rRGl2aWRlciA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rRGl2aWRlcicpOwoKICAgICAgICAkRXJyb3J7V3JvbmdBY3Rpdml0eX0gPSAxOwogICAgICAgIHB1c2ggQE5vdGlmeSwgewogICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InLAogICAgICAgICAgICBEYXRhICAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnVGhpcyBzdGVwIGRvZXMgbm90IGJlbG9uZyBhbnltb3JlIHRvIHRoZSBjdXJyZW50IGFjdGl2aXR5IGluIHByb2Nlc3MgZm9yIHRpY2tldCBcJyVzJXMlc1wnISBBbm90aGVyIHVzZXIgY2hhbmdlZCB0aGlzIHRpY2tldCBpbiB0aGUgbWVhbnRpbWUuIFBsZWFzZSBjbG9zZSB0aGlzIHdpbmRvdyBhbmQgcmVsb2FkIHRoZSB0aWNrZXQuJywKICAgICAgICAgICAgICAgICRUaWNrZXRIb29rLAogICAgICAgICAgICAgICAgJFRpY2tldEhvb2tEaXZpZGVyLAogICAgICAgICAgICAgICAgJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICApLAogICAgICAgIH07CiAgICB9CgogICAgJFByb2Nlc3NFbnRpdHlJRCA9ICRUaWNrZXR7CiAgICAgICAgJ0R5bmFtaWNGaWVsZF8nCiAgICAgICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9jZXNzOjpEeW5hbWljRmllbGRQcm9jZXNzTWFuYWdlbWVudFByb2Nlc3NJRCcpCiAgICB9OwoKICAgIGlmICggISRQcm9jZXNzRW50aXR5SUQgKQogICAgewogICAgICAgIHJldHVybiAkU2VsZi0+X1Nob3dEaWFsb2dFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnTWlzc2luZyBQcm9jZXNzRW50aXR5SUQgaW4gVGlja2V0ICVzIScsCiAgICAgICAgICAgICAgICAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBpZiB3ZSBnb3QgZXJyb3JzIGdvIGJhY2sgdG8gZGlzcGxheWluZyB0aGUgQWN0aXZpdHlEaWFsb2cKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoIFwlRXJyb3IgKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPl9PdXRwdXRBY3Rpdml0eURpYWxvZygKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICAgICAgICA9PiAkUHJvY2Vzc0VudGl0eUlELAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgID0+ICRUaWNrZXRJRCB8fCB1bmRlZiwKICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9PiAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCwKICAgICAgICAgICAgRXJyb3IgICAgICAgICAgICAgICAgICA9PiBcJUVycm9yLAogICAgICAgICAgICBFcnJvck1lc3NhZ2VzICAgICAgICAgID0+IFwlRXJyb3JNZXNzYWdlcywKICAgICAgICAgICAgVmlzaWJpbGl0eSAgICAgICAgICAgICA9PiBcJVZpc2liaWxpdHksCiAgICAgICAgICAgIERGRXJyb3JzICAgICAgICAgICAgICAgPT4gXCVEeW5hbWljRmllbGRWYWxpZGF0aW9uUmVzdWx0LAogICAgICAgICAgICBERlBvc3NpYmxlVmFsdWVzICAgICAgID0+IFwlRHluYW1pY0ZpZWxkUG9zc2libGVWYWx1ZXMsCiAgICAgICAgICAgIEdldFBhcmFtICAgICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfSwKICAgICAgICAgICAgTm90aWZ5ICAgICAgICAgICAgICAgICA9PiBcQE5vdGlmeSwKICAgICAgICApOwogICAgfQoKICAgICMgQ2hlY2sgaWYgd2UgZGVhbCB3aXRoIGEgVGlja2V0IFVwZGF0ZQogICAgbXkgJFVwZGF0ZVRpY2tldElEID0gJFBhcmFte0dldFBhcmFtfS0+e1RpY2tldElEfTsKCiAgICAjIFdlIHNhdmUgb25seSBvbmNlLCBubyBtYXR0ZXIgaWYgb25lIG9yIG1vcmUgY29uZmlndXJhdGlvbnMgYXJlIHNldCBmb3IgdGhlIHNhbWUgcGFyYW0KICAgIG15ICVTdG9yZWRGaWVsZHM7CgogICAgIyBTYXZlIGxvb3AgZm9yIHN0b3JpbmcgVGlja2V0IFZhbHVlcyB0aGF0IHdlcmUgbm90IHJlcXVpcmVkIG9uIHRoZSBpbml0aWFsIFRpY2tldENyZWF0ZQogICAgRElBTE9HRklFTEQ6CiAgICBmb3IgbXkgJEN1cnJlbnRGaWVsZCAoIEB7ICRBY3Rpdml0eURpYWxvZy0+e0ZpZWxkT3JkZXJ9IH0gKSB7CgogICAgICAgICMgc29tZSBmaWVsZHMgc2hvdWxkIGJlIHNraXBwZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UKICAgICAgICBuZXh0IERJQUxPR0ZJRUxEIGlmICggZ3JlcCB7ICRfIGVxICRDdXJyZW50RmllbGQgfSBAeyRTa2lwRmllbGRzfSApOwoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfS0+eyRDdXJyZW50RmllbGR9ICkgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICdDYW5cJ3QgZ2V0IGRhdGEgZm9yIEZpZWxkICIlcyIgb2YgQWN0aXZpdHlEaWFsb2cgIiVzIiEnLAogICAgICAgICAgICAgICAgICAgICRDdXJyZW50RmllbGQsCiAgICAgICAgICAgICAgICAgICAgJEFjdGl2aXR5RGlhbG9nRW50aXR5SUQsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkQ3VycmVudEZpZWxkID1+IG17XkR5bmFtaWNGaWVsZF8oLiopfXhtczsKCiAgICAgICAgaWYgKCAkQ3VycmVudEZpZWxkIGVxICdBcnRpY2xlJyAmJiAkVXBkYXRlVGlja2V0SUQgKSB7CgogICAgICAgICAgICBteSAkVGlja2V0SUQgPSAkVXBkYXRlVGlja2V0SUQ7CgogICAgICAgICAgICBpZiAoICRQYXJhbXtHZXRQYXJhbX0tPntTdWJqZWN0fSAmJiAkUGFyYW17R2V0UGFyYW19LT57Qm9keX0gKSB7CgogICAgICAgICAgICAgICAgIyBhZGQgbm90ZQogICAgICAgICAgICAgICAgbXkgJEFydGljbGVJRCA9ICcnOwogICAgICAgICAgICAgICAgbXkgJE1pbWVUeXBlICA9ICd0ZXh0L3BsYWluJzsKICAgICAgICAgICAgICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJE1pbWVUeXBlID0gJ3RleHQvaHRtbCc7CgogICAgICAgICAgICAgICAgICAgICMgdmVyaWZ5IGh0bWwgZG9jdW1lbnQKICAgICAgICAgICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19LT57Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5SaWNoVGV4dERvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17R2V0UGFyYW19LT57Qm9keX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkQ29tbXVuaWNhdGlvbkNoYW5uZWwgPSAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9LT57QXJ0aWNsZX0tPntDb25maWd9LT57Q29tbXVuaWNhdGlvbkNoYW5uZWx9CiAgICAgICAgICAgICAgICAgICAgLy8gJ0ludGVybmFsJzsKCiAgICAgICAgICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkJhY2tlbmRGb3JDaGFubmVsKAogICAgICAgICAgICAgICAgICAgIENoYW5uZWxOYW1lID0+ICRDb21tdW5pY2F0aW9uQ2hhbm5lbCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBDaGFuZ2UgaGlzdG9yeSB0eXBlIGFuZCBjb21tZW50IGFjY29yZGluZ2x5IHRvIHRoZSBwcm9jZXNzIGFydGljbGUuCiAgICAgICAgICAgICAgICAjIEluaXRpYWwgaW50ZXJuYWwgc2hvdWxkIGJlIGEgd2ViIHJlcXVlc3QsIHdoaWxlIGZvbGxvdy11cHMgc2hvdWxkIGJlIG5vdGVzCiAgICAgICAgICAgICAgICBteSAkSGlzdG9yeVR5cGUgICAgPSAnV2ViUmVxdWVzdEN1c3RvbWVyJzsKICAgICAgICAgICAgICAgIG15ICRIaXN0b3J5Q29tbWVudCA9ICclJSc7CiAgICAgICAgICAgICAgICBpZiAoICRDb21tdW5pY2F0aW9uQ2hhbm5lbCBlcSAnUGhvbmUnICkgewogICAgICAgICAgICAgICAgICAgICRIaXN0b3J5VHlwZSA9ICdQaG9uZUNhbGxDdXN0b21lcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoJFVwZGF0ZVRpY2tldElEKSB7CiAgICAgICAgICAgICAgICAgICAgJEhpc3RvcnlUeXBlID0gJ0ZvbGxvd1VwJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkRnJvbSA9ICIkU2VsZi0+e1VzZXJGdWxsbmFtZX0gPCRTZWxmLT57VXNlckVtYWlsfT4iOwogICAgICAgICAgICAgICAgJEFydGljbGVJRCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2N1c3RvbWVyJywKICAgICAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAkQWN0aXZpdHlEaWFsb2ctPntGaWVsZHN9LT57QXJ0aWNsZX0tPntDb25maWd9LT57SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9IC8vIDAsCiAgICAgICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJEZyb20sCiAgICAgICAgICAgICAgICAgICAgTWltZVR5cGUgICAgICAgICAgICAgPT4gJE1pbWVUeXBlLAogICAgICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJEhpc3RvcnlUeXBlLAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICRIaXN0b3J5Q29tbWVudCwKICAgICAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAkUGFyYW17R2V0UGFyYW19LT57Qm9keX0sCiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJFBhcmFte0dldFBhcmFtfS0+e1N1YmplY3R9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggISRBcnRpY2xlSUQgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRXJyb3JTY3JlZW4oKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGdldCBwcmUgbG9hZGVkIGF0dGFjaG1lbnQKICAgICAgICAgICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNEYXRhKAogICAgICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgZ2V0IHN1Ym1pdCBhdHRhY2htZW50CiAgICAgICAgICAgICAgICBteSAlVXBsb2FkU3R1ZmYgPSAkUGFyYW1PYmplY3QtPkdldFVwbG9hZEFsbCgKICAgICAgICAgICAgICAgICAgICBQYXJhbSA9PiAnRmlsZVVwbG9hZCcsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCVVcGxvYWRTdHVmZikgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQEF0dGFjaG1lbnRzLCBcJVVwbG9hZFN0dWZmOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgd3JpdGUgYXR0YWNobWVudHMKICAgICAgICAgICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50cykgewoKICAgICAgICAgICAgICAgICAgICAjIHNraXAsIGRlbGV0ZWQgbm90IHVzZWQgaW5saW5lIGltYWdlcwogICAgICAgICAgICAgICAgICAgIG15ICRDb250ZW50SUQgPSAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH07CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkQ29udGVudElECiAgICAgICAgICAgICAgICAgICAgICAgICYmICggJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX0gPX4gL2ltYWdlL2kgKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAoICRBdHRhY2htZW50LT57RGlzcG9zaXRpb259IGVxICdpbmxpbmUnICkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJENvbnRlbnRJREhUTUxRdW90ZSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0ID0+ICRDb250ZW50SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHdvcmthcm91bmQgZm9yIGxpbmsgZW5jb2RlIG9mIHJpY2ggdGV4dCBlZGl0b3IsIHNlZSBidWcjNTA1MwogICAgICAgICAgICAgICAgICAgICAgICBteSAkQ29udGVudElETGlua0VuY29kZSA9ICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJENvbnRlbnRJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtHZXRQYXJhbX0tPntCb2R5fSA9fiBzLyhDb250ZW50SUQ9KSRDb250ZW50SURMaW5rRW5jb2RlLyQxJENvbnRlbnRJRC9nOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBpZ25vcmUgYXR0YWNobWVudCBpZiBub3QgbGlua2VkIGluIGJvZHkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17R2V0UGFyYW19LT57Qm9keX0gIX4gLyhcUSRDb250ZW50SURIVE1MUXVvdGVcRXxcUSRDb250ZW50SURcRSkvaSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyB3cml0ZSBleGlzdGluZyBmaWxlIHRvIGJhY2tlbmQKICAgICAgICAgICAgICAgICAgICAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVXcml0ZUF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEF0dGFjaG1lbnR9LAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnQ3VzdG9tZXJQYW5lbFVzZXJJRCcpLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyByZW1vdmUgYWxsIGZvcm0gZGF0YQogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6Rm9ybUNhY2hlJyktPkZvcm1JRFJlbW92ZSggRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIElmIHdlIGhhdmUgdG8gVXBkYXRlIGEgdGlja2V0LCB1cGRhdGUgdGhlIHRyYW5zbWl0dGVkIHZhbHVlcwogICAgICAgIGVsc2lmICgkVXBkYXRlVGlja2V0SUQpIHsKCiAgICAgICAgICAgIG15ICRTdWNjZXNzOwogICAgICAgICAgICBpZiAoICRTZWxmLT57TmFtZVRvSUR9eyRDdXJyZW50RmllbGR9IGVxICdUaXRsZScgKSB7CgogICAgICAgICAgICAgICAgIyBpZiB0aGVyZSBpcyBubyB0aXRsZSwgbm90aGluZyBpcyBuZWVkZWQgdG8gYmUgZG9uZQogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICFkZWZpbmVkICRUaWNrZXRQYXJhbXsnVGl0bGUnfQogICAgICAgICAgICAgICAgICAgIHx8ICggZGVmaW5lZCAkVGlja2V0UGFyYW17J1RpdGxlJ30gJiYgJFRpY2tldFBhcmFteydUaXRsZSd9IGVxICcnICkKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJFN1Y2Nlc3MgPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlIHNldCB0aGUgdGlja2V0IHRpdGxlCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFRpdGxlVXBkYXRlKAogICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAkVGlja2V0UGFyYW17J1RpdGxlJ30sCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntOYW1lVG9JRH0tPnskQ3VycmVudEZpZWxkfSBlcSAnQ3VzdG9tZXJJRCcKICAgICAgICAgICAgICAgICAgICB8fCAkU2VsZi0+e05hbWVUb0lEfS0+eyRDdXJyZW50RmllbGR9IGVxICdDdXN0b21lclVzZXJJRCcKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkU3RvcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgICAgIGlmICggJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfS0+eyRDdXJyZW50RmllbGR9e0Rpc3BsYXl9ID09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXcm9uZyBBY3Rpdml0eURpYWxvZyBGaWVsZCBjb25maWc6ICVzIGNhblwndCBiZSBEaXNwbGF5ID0+IDEgLyBTaG93IGZpZWxkIChQbGVhc2UgY2hhbmdlIGl0cyBjb25maWd1cmF0aW9uIHRvIGJlIERpc3BsYXkgPT4gMCAvIERvIG5vdCBzaG93IGZpZWxkIG9yIERpc3BsYXkgPT4gMiAvIFNob3cgZmllbGQgYXMgbWFuZGF0b3J5KSEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEN1cnJlbnRGaWVsZAogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBza2lwIFRpY2tldEN1c3RvbWVyU2V0KCkgaWYgdGhlcmUgaXMgbm8gY2hhbmdlIGluIHRoZSBjdXN0b21lcgogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRUaWNrZXR7Q3VzdG9tZXJJRH0gZXEgJFRpY2tldFBhcmFte0N1c3RvbWVySUR9CiAgICAgICAgICAgICAgICAgICAgJiYgJFRpY2tldHtDdXN0b21lclVzZXJJRH0gZXEgJFRpY2tldFBhcmFte0N1c3RvbWVyVXNlcn0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICMgSW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gY2FsbCBhbnkgYWRkaXRpb25hbCBzdG9yZXMKICAgICAgICAgICAgICAgICAgICAjIG9uIEN1c3RvbWVyLCBDdXN0b21lck5vLCBDdXN0b21lcklEIG9yIEN1c3RvbWVyVXNlcklECiAgICAgICAgICAgICAgICAgICAgIyBzbyBtYWtlIHN1cmUgYm90aCBmaWVsZHMgYXJlIHNldCB0byAiU3RvcmVkIiA7KQogICAgICAgICAgICAgICAgICAgICRTdG9yZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9LT57J0N1c3RvbWVySUQnfSB9ICAgICA9IDE7CiAgICAgICAgICAgICAgICAgICAgJFN0b3JlZEZpZWxkc3sgJFNlbGYtPntOYW1lVG9JRH0tPnsnQ3VzdG9tZXJVc2VySUQnfSB9ID0gMTsKICAgICAgICAgICAgICAgICAgICBuZXh0IERJQUxPR0ZJRUxEOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3VzdG9tZXJTZXQoCiAgICAgICAgICAgICAgICAgICAgTm8gPT4gJFRpY2tldFBhcmFte0N1c3RvbWVySUR9LAoKICAgICAgICAgICAgICAgICAgICAjIGhlcmUgdG9vOiB1bmZvcnR1bmF0ZWx5IFRpY2tldENyZWF0ZSB0YWtlcyBQYXJhbSAnQ3VzdG9tZXJVc2VyJwogICAgICAgICAgICAgICAgICAgICMgaW5zdGVhZCBvZiBDdXN0b21lclVzZXJJRCwgc28gb3VyIFRpY2tldFBhcmFtIGhhc2gKICAgICAgICAgICAgICAgICAgICAjIGhhcyB0aGUgQ3VzdG9tZXJVc2VyIEtleSBpbnN0ZWFkIG9mICdDdXN0b21lclVzZXJJRCcKICAgICAgICAgICAgICAgICAgICBVc2VyICAgICA9PiAkVGlja2V0UGFyYW17Q3VzdG9tZXJVc2VyfSwKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgSW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gY2FsbCBhbnkgYWRkaXRpb25hbCBzdG9yZXMKICAgICAgICAgICAgICAgICMgb24gQ3VzdG9tZXIsIEN1c3RvbWVyTm8sIEN1c3RvbWVySUQgb3IgQ3VzdG9tZXJVc2VySUQKICAgICAgICAgICAgICAgICMgc28gbWFrZSBzdXJlIGJvdGggZmllbGRzIGFyZSBzZXQgdG8gIlN0b3JlZCIgOykKICAgICAgICAgICAgICAgICRTdG9yZWRGaWVsZHN7ICRTZWxmLT57TmFtZVRvSUR9LT57J0N1c3RvbWVySUQnfSB9ICAgICA9IDE7CiAgICAgICAgICAgICAgICAkU3RvcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfS0+eydDdXN0b21lclVzZXJJRCd9IH0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbmV4dCBESUFMT0dGSUVMRCBpZiAkU3RvcmVkRmllbGRzeyAkU2VsZi0+e05hbWVUb0lEfXskQ3VycmVudEZpZWxkfSB9OwoKICAgICAgICAgICAgICAgIG15ICRUaWNrZXRGaWVsZFNldFN1YiA9ICRDdXJyZW50RmllbGQ7CiAgICAgICAgICAgICAgICAkVGlja2V0RmllbGRTZXRTdWIgPX4gc3tJRCR9e314bXM7CiAgICAgICAgICAgICAgICAkVGlja2V0RmllbGRTZXRTdWIgPSAnVGlja2V0JyAuICRUaWNrZXRGaWVsZFNldFN1YiAuICdTZXQnOwoKICAgICAgICAgICAgICAgIGlmICggJFRpY2tldE9iamVjdC0+Y2FuKCRUaWNrZXRGaWVsZFNldFN1YikgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRVcGRhdGVGaWVsZE5hbWU7CgogICAgICAgICAgICAgICAgICAgICRVcGRhdGVGaWVsZE5hbWUgPSAkU2VsZi0+e05hbWVUb0lEfS0+eyRDdXJyZW50RmllbGR9OwoKICAgICAgICAgICAgICAgICAgICAjIHRvIHN0b3JlIGlmIHRoZSBmaWVsZCBuZWVkcyB0byBiZSB1cGRhdGVkCiAgICAgICAgICAgICAgICAgICAgbXkgJEZpZWxkVXBkYXRlOwoKICAgICAgICAgICAgICAgICAgICAjIG9ubHkgU2VydmljZSBhbmQgU0xBIGZpZWxkcyBhY2NlcHRzIGVtcHR5IHZhbHVlcyBpZiB0aGUgaGFzaCBrZXkgaXMgbm90CiAgICAgICAgICAgICAgICAgICAgIyBkZWZpbmVkIHNldCBpdCB0byBlbXB0eSBzbyB0aGUgVGlja2V0KlNldCBmdW5jdGlvbiBjYWxsIHdpbGwgZ2V0IHRoZSBlbXB0eQogICAgICAgICAgICAgICAgICAgICMgdmFsdWUKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICggJFVwZGF0ZUZpZWxkTmFtZSBlcSAnU2VydmljZUlEJyB8fCAkVXBkYXRlRmllbGROYW1lIGVxICdTTEFJRCcgKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAhZGVmaW5lZCAkVGlja2V0UGFyYW17ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkVGlja2V0UGFyYW17ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfSA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAkRmllbGRVcGRhdGUgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyB1cGRhdGUgU2VydmljZSBhbiBTTEEgZmllbGRzIGlmIHRoZXkgaGF2ZSBhIGRlZmluZWQgdmFsdWUgKGV2ZW4gZW1wdHkpCiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkVXBkYXRlRmllbGROYW1lIGVxICdTZXJ2aWNlSUQnIHx8ICRVcGRhdGVGaWVsZE5hbWUgZXEgJ1NMQUlEJyApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkRmllbGRVcGRhdGUgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyB1cGRhdGUgYW55IG90aGVyIGZpZWxkIHRoYXQgaXRzIHZhbHVlIGlzIGRlZmluZWQgYW5kIG5vdCBlbXB0eQogICAgICAgICAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICAgICAgICAgJFVwZGF0ZUZpZWxkTmFtZSBuZSAnU2VydmljZUlEJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkVXBkYXRlRmllbGROYW1lIG5lICdTTEFJRCcKICAgICAgICAgICAgICAgICAgICAgICAgJiYgZGVmaW5lZCAkVGlja2V0UGFyYW17ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkVGlja2V0UGFyYW17ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfSBuZSAnJwogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkRmllbGRVcGRhdGUgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJFN1Y2Nlc3MgPSAxOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIGZpZWxkIG5lZWRzIHRvIGJlIHVwZGF0ZWQKICAgICAgICAgICAgICAgICAgICBpZiAoJEZpZWxkVXBkYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+JFRpY2tldEZpZWxkU2V0U3ViKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFVwZGF0ZUZpZWxkTmFtZSA9PiAkVGlja2V0UGFyYW17ICRTZWxmLT57TmFtZVRvSUR9LT57JEN1cnJlbnRGaWVsZH0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0N1c3RvbWVyUGFuZWxVc2VySUQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3Qgc2V0ICVzIGZvciBUaWNrZXQgd2l0aCBJRCAiJXMiIGluIEFjdGl2aXR5RGlhbG9nICIlcyIhJywKICAgICAgICAgICAgICAgICAgICAgICAgJEN1cnJlbnRGaWVsZCwgJFRpY2tldElELCAkQWN0aXZpdHlEaWFsb2dFbnRpdHlJRAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkTmFtZSAoIGtleXMgJFNlbGYtPntEeW5hbWljRmllbGR9LT4lKiApIHsKCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICRTZWxmLT57RHluYW1pY0ZpZWxkfXskRHluYW1pY0ZpZWxkTmFtZX07CiAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZykgKSB7CgogICAgICAgICAgICBteSAkTWVzc2FnZSA9ICJEeW5hbWljRmllbGRDb25maWcgbWlzc2luZyBmb3IgZmllbGQ6ICREeW5hbWljRmllbGROYW1lLCBvciBpcyBub3QgYSBUaWNrZXQgRHluYW1pYyBGaWVsZCEiOwoKICAgICAgICAgICAgIyBsb2cgZXJyb3IgYnV0IGRvZXMgbm90IHN0b3AgdGhlIGV4ZWN1dGlvbiBhcyBpdCBjb3VsZCBiZSBhbiBvbGQgQXJ0aWNsZQogICAgICAgICAgICAjIER5bmFtaWNGaWVsZCwgc2VlIGJ1ZyMxMTY2NgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEOwogICAgICAgIH0KCiAgICAgICAgIyBkb24ndCBzZXQgdmFsdWUgb2YgZHluYW1pYyBmaWVsZCBpZiBpdCBpcyBoaWRkZW4gdmlhIEFDTCAoYW5kIG5vdCB2aWEgYWN0aXZpdHkgZGlhbG9nIGRlZmluaXRpb24pCiAgICAgICAgaWYgKAogICAgICAgICAgICAhJFZpc2liaWxpdHl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lIH0KICAgICAgICAgICAgJiYgJEFjdGl2aXR5RGlhbG9nLT57RmllbGRzfXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgfXtEaXNwbGF5fSAhPSAwCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEOwogICAgICAgIH0KCiAgICAgICAgIyBzYW5pdGl6ZSBkeW5hbWljIGZpZWxkIG5hbWUgYmVmb3JlIHN0b3JpbmcgdmFsdWUKICAgICAgICAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gPX4gcy8kU2VsZi0+e0lEU3VmZml4fSQvLzsKCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFRpY2tldFBhcmFteyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9LAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdDdXN0b21lclBhbmVsVXNlcklEJyksCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3Qgc2V0IER5bmFtaWNGaWVsZCB2YWx1ZSBmb3IgJXMgb2YgVGlja2V0IHdpdGggSUQgIiVzIiBpbiBBY3Rpdml0eURpYWxvZyAiJXMiIScsCiAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICRBY3Rpdml0eURpYWxvZ0VudGl0eUlELAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgaGlkZGVuIGZpZWxkcyBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICBUeXBlID0+ICdIaWRkZW5GaWVsZHMnLAogICAgICAgIEtleSAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgKTsKCiAgICAjIFRyYW5zaXRpb25zIHdpbGwgYmUgaGFuZGxlZCBieSB0aWNrZXQgZXZlbnQgbW9kdWxlIChUaWNrZXRQcm9jZXNzVHJhbnNpdGlvbnMucG0pLgoKICAgIG15ICROZXh0U2NyZWVuID0gJFNlbGYtPntOZXh0U2NyZWVufSB8fCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0UHJvY2VzcycpLT57J05leHRTY3JlZW5BZnRlckZvbGxvd1VwJ307CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgT1AgPT4gIkFjdGlvbj0kTmV4dFNjcmVlbjtUaWNrZXRJRD0kVGlja2V0SUQiLAogICAgKTsKfQoKIyA9aXRlbSBfQ2hlY2tGaWVsZCgpCiMKIyBjaGVja3MgYWxsIHRoZSBwb3NzaWJsZSB0aWNrZXQgZmllbGRzIGFuZCByZXR1cm5zIHRoZSBJRCAoaWYgcG9zc2libGUpIHZhbHVlIG9mIHRoZSBmaWVsZCwgaWYgdmFsaWQKIyBhbmQgY2hlY2tzIGFyZSBzdWNjZXNzZnVsCiMKIyBpZiBEaXNwbGF5IHBhcmFtIGlzIHNldCB0byAwIG9yIG5vdCBnaXZlbiwgaXQgdXNlcyBBY3Rpdml0eURpYWxvZyBmaWVsZCBkZWZhdWx0IHZhbHVlIGZvciBhbGwgZmllbGRzCiMgb3IgZ2xvYmFsIGRlZmF1bHQgdmFsdWUgYXMgZmFsbGJhY2sgb25seSBmb3IgY2VydGFpbiBmaWVsZHMKIwojIGlmIERpc3BsYXkgcGFyYW0gaXMgc2V0IHRvIDEgb3IgMiBpdCB1c2VzIHRoZSB2YWx1ZSBmcm9tIHRoZSB3ZWIgcmVxdWVzdAojCiMgICAgIG15ICRQcmlvcml0eUlEID0gJEN1c3RvbWVyVGlja2V0UHJvY2Vzc09iamVjdC0+X0NoZWNrRmllbGQoCiMgICAgICAgICBGaWVsZCAgICAgICAgPT4gJ1ByaW9yaXR5SUQnLAojICAgICAgICAgRGlzcGxheSAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIDAgb3IgMSBvciAyCiMgICAgICAgICBEZWZhdWx0VmFsdWUgPT4gJzMgbm9ybWFsJywgICAgICAgICAgIyBBY3Rpdml0eURpYWxvZyBmaWVsZCBkZWZhdWx0IHZhbHVlIChpdCB1c2VzIGdsb2JhbAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgZGVmYXVsdCB2YWx1ZSBhcyBmYWxsIGJhY2sgZm9yIG1hbmRhdG9yeSBmaWVsZHMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgIChRdWV1ZSwgU2F0ZSwgTG9jayBhbmQgUHJpb3JpdHkpCiMgICAgICk7CiMKIyBSZXR1cm5zOgojICAgICAkUHJpb3JpdHlJRCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgUHJpb3JpdHlJRCBpcyBzZXQgdG8gMSBpbiB0aGUgd2ViIHJlcXVlc3QKIwojICAgICBteSAkUHJpb3JpdHlJRCA9ICRDdXN0b21lclRpY2tldFByb2Nlc3NPYmplY3QtPl9DaGVja0ZpZWxkKAojICAgICAgICAgRmllbGQgICAgICAgID0+ICdQcmlvcml0eUlEJywKIyAgICAgICAgIERpc3BsYXkgICAgICA9PiAwLAojICAgICAgICAgRGVmYXVsdFZhbHVlID0+ICczIG5vcm1hbCcsCiMgICAgICk7CiMKIyBSZXR1cm5zOgojICAgICAkUHJpb3JpdHlJRCA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIyBzaW5jZSBBY3Rpdml0eURpYWxvZyBkZWZhdWx0IHZhbHVlIGlzICczIG5vcm1hbCcgYW5kCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBmaWVsZCBpcyBoaWRkZW4KIwojID1jdXQKCnN1YiBfQ2hlY2tGaWVsZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRmllbGQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHJlbW92ZSB0aGUgSUQgYW5kIGNoZWNrIGlmIHRoZSBnaXZlbiBmaWVsZCBpcyByZXF1aXJlZCBmb3IgY3JlYXRpbmcgYSB0aWNrZXQKICAgIG15ICRGaWVsZFdpdGhvdXRJRCA9ICRQYXJhbXtGaWVsZH07CiAgICAkRmllbGRXaXRob3V0SUQgPX4gc3tJRCR9e314bXM7CiAgICBteSAkVGlja2V0UmVxdWlyZWRGaWVsZCA9IHNjYWxhciBncmVwIHsgJF8gZXEgJEZpZWxkV2l0aG91dElEIH0gcXcoUXVldWUgU3RhdGUgTG9jayBQcmlvcml0eSk7CgogICAgbXkgJFZhbHVlOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGlmIG5vIERpc3BsYXkgKG9yIERpc3BsYXkgPT0gMCkgaXMgY29tbWl0dGVkCiAgICBpZiAoICEkUGFyYW17RGlzcGxheX0gKSB7CgogICAgICAgICMgQ2hlY2sgaWYgYSBEZWZhdWx0VmFsdWUgaXMgZ2l2ZW4KICAgICAgICBpZiAoICRQYXJhbXtEZWZhdWx0VmFsdWV9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBpZiB0aGUgZ2l2ZW4gZmllbGQgcGFyYW0gaXMgdmFsaWQKICAgICAgICAgICAgJFZhbHVlID0gJFNlbGYtPl9Mb29rdXBWYWx1ZSgKICAgICAgICAgICAgICAgIEZpZWxkID0+ICRGaWVsZFdpdGhvdXRJRCwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbXtEZWZhdWx0VmFsdWV9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBpZiB3ZSBnb3QgYSByZXF1aXJlZCB0aWNrZXQgZmllbGQsIGNoZWNrIGlmIHdlIGdvdCBhIHZhbGlkIERlZmF1bHRWYWx1ZSBpbiB0aGUgU3lzQ29uZmlnCiAgICAgICAgaWYgKCAhJFZhbHVlICYmICRUaWNrZXRSZXF1aXJlZEZpZWxkICkgewogICAgICAgICAgICAkVmFsdWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIlByb2Nlc3M6OkRlZmF1bHQkRmllbGRXaXRob3V0SUQiKTsKCiAgICAgICAgICAgIGlmICggISRWYWx1ZSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0RlZmF1bHQgQ29uZmlnIGZvciBQcm9jZXNzOjpEZWZhdWx0JXMgbWlzc2luZyEnLCAkRmllbGRXaXRob3V0SUQgKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiB0aGUgZ2l2ZW4gZmllbGQgcGFyYW0gaXMgdmFsaWQKICAgICAgICAgICAgICAgICRWYWx1ZSA9ICRTZWxmLT5fTG9va3VwVmFsdWUoCiAgICAgICAgICAgICAgICAgICAgRmllbGQgPT4gJEZpZWxkV2l0aG91dElELAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkVmFsdWUgKSB7CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+Q3VzdG9tZXJGYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0RlZmF1bHQgQ29uZmlnIGZvciBQcm9jZXNzOjpEZWZhdWx0JXMgaW52YWxpZCEnLCAkRmllbGRXaXRob3V0SUQgKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUGFyYW17RGlzcGxheX0gPT0gMSApIHsKCiAgICAgICAgIyBEaXNwbGF5ID09IDEgaXMgbG9naWNhbGl0eSBub3QgcG9zc2libGUgZm9yIGEgdGlja2V0IHJlcXVpcmVkIGZpZWxkCiAgICAgICAgaWYgKCRUaWNrZXRSZXF1aXJlZEZpZWxkKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICdXcm9uZyBBY3Rpdml0eURpYWxvZyBGaWVsZCBjb25maWc6ICVzIGNhblwndCBiZSBEaXNwbGF5ID0+IDEgLyBTaG93IGZpZWxkIChQbGVhc2UgY2hhbmdlIGl0cyBjb25maWd1cmF0aW9uIHRvIGJlIERpc3BsYXkgPT4gMCAvIERvIG5vdCBzaG93IGZpZWxkIG9yIERpc3BsYXkgPT4gMiAvIFNob3cgZmllbGQgYXMgbWFuZGF0b3J5KSEnLAogICAgICAgICAgICAgICAgICAgICRQYXJhbXtGaWVsZH0sCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiB0aGUgZ2l2ZW4gZmllbGQgcGFyYW0gaXMgdmFsaWQKICAgICAgICBpZiAoICRQYXJhbXtGaWVsZH0gZXEgJ0FydGljbGUnICkgewoKICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGFydGljbGUgZmllbGRzIHdlIG5lZWQgdG8gZmFrZSBhIHZhbHVlCiAgICAgICAgICAgICRWYWx1ZSA9IDE7CgogICAgICAgICAgICBteSAoICRCb2R5LCAkU3ViamVjdCwgJEF0dGFjaG1lbnRFeGlzdHMgKSA9ICgKICAgICAgICAgICAgICAgICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdCb2R5JyApLAogICAgICAgICAgICAgICAgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmplY3QnICksCiAgICAgICAgICAgICAgICAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQXR0YWNobWVudEV4aXN0cycgKSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgSWYgYXR0YWNobWVudCBleGlzdHMgYW5kIGJvZHkgYW5kIHN1YmplY3Qgbm90LCBpdCBpcyBlcnJvciAoc2VlIGJ1ZyMxMzA4MSkuCiAgICAgICAgICAgIGlmICggJEF0dGFjaG1lbnRFeGlzdHMgJiYgKCAhJEJvZHkgJiYgISRTdWJqZWN0ICkgKSB7CiAgICAgICAgICAgICAgICAkVmFsdWUgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgJFZhbHVlID0gJFNlbGYtPl9Mb29rdXBWYWx1ZSgKICAgICAgICAgICAgICAgIEZpZWxkID0+ICRQYXJhbXtGaWVsZH0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW17RmllbGR9ICkgfHwgJycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUGFyYW17RGlzcGxheX0gPT0gMiApIHsKCiAgICAgICAgIyBjaGVjayBpZiB0aGUgZ2l2ZW4gZmllbGQgcGFyYW0gaXMgdmFsaWQKICAgICAgICBpZiAoICRQYXJhbXtGaWVsZH0gZXEgJ0FydGljbGUnICkgewoKICAgICAgICAgICAgbXkgKCAkQm9keSwgJFN1YmplY3QgKSA9ICgKICAgICAgICAgICAgICAgICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdCb2R5JyApLAogICAgICAgICAgICAgICAgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmplY3QnICkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRWYWx1ZSA9IDA7CiAgICAgICAgICAgIGlmICggJEJvZHkgJiYgJFN1YmplY3QgKSB7CiAgICAgICAgICAgICAgICAkVmFsdWUgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkVmFsdWUgPSAkU2VsZi0+X0xvb2t1cFZhbHVlKAogICAgICAgICAgICAgICAgRmllbGQgPT4gJFBhcmFte0ZpZWxkfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbXtGaWVsZH0gKSB8fCAnJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRWYWx1ZTsKfQoKIyA9aXRlbSBfTG9va3VwVmFsdWUoKQojCiMgcmV0dXJucyB0aGUgSUQgKGlmIHBvc3NpYmxlKSBvZiBuZWFybHkgYWxsIHRpY2tldCBmaWVsZHMgYW5kL29yIGNoZWNrcyBpZiBpdHMgdmFsaWQuCiMgQ2FuIGhhbmRsZSBJRHMgb3IgU3RyaW5ncy4KIyBDdXJyZW50bHkgd29ya2luZyB3aXRoOiBTdGF0ZSwgUXVldWUsIExvY2ssIFByaW9yaXR5IChwb3NzaWJsZSBtb3JlKS4KIwojICAgICBteSAkUHJpb3JpdHlJRCA9ICRDdXN0b21lclRpY2tldFByb2Nlc3NPYmplY3QtPl9Mb29rdXBWYWx1ZSgKIyAgICAgICAgIFByaW9yaXR5SUQgPT4gMSwKIyAgICAgKTsKIyAgICAgJFByaW9yaXR5SUQgPSAxOwojCiMgICAgIG15ICRTdGF0ZUlEID0gJEN1c3RvbWVyVGlja2V0UHJvY2Vzc09iamVjdC0+X0xvb2t1cFZhbHVlKAojICAgICAgICAgU3RhdGUgPT4gJ29wZW4nLAojICAgICApOwojICAgICAkU3RhdGVJRCA9IDM7CiMKIyAgICAgbXkgJFByaW9yaXR5SUQgPSAkQ3VzdG9tZXJUaWNrZXRQcm9jZXNzT2JqZWN0LT5fTG9va3VwVmFsdWUoCiMgICAgICAgICBQcmlvcml0eSA9PiAndW5rbm93bnByaW9yaXR5MTIzNCcsCiMgICAgICk7CiMgICAgICRQcmlvcml0eUlEID0gdW5kZWY7CiMKIyA9Y3V0CgpzdWIgX0xvb2t1cFZhbHVlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZpZWxkIFZhbHVlKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhJFBhcmFte0ZpZWxkfSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJGaWVsZCBzaG91bGQgbm90IGJlIGVtcHR5ISIKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGlmIHRoZXJlIGlzIG5vIHZhbHVlLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvCiAgICByZXR1cm4gaWYgISRQYXJhbXtWYWx1ZX07CgogICAgIyByZW1vdmUgdGhlIElEIGZvciBmdW5jdGlvbiBuYW1lIHB1cnBvc2UKICAgIG15ICRGaWVsZFdpdGhvdXRJRCA9ICRQYXJhbXtGaWVsZH07CiAgICAkRmllbGRXaXRob3V0SUQgPX4gc3tJRCR9e314bXM7CgogICAgbXkgJExvb2t1cEZpZWxkTmFtZTsKICAgIG15ICRPYmplY3ROYW1lOwogICAgbXkgJEZ1bmN0aW9uTmFtZTsKCiAgICAjIHNlcnZpY2UgYW5kIFNMQSBsb29rdXAgbmVlZHMgTmFtZSBhcyBwYXJhbWV0ZXIgKFdoaWxlIFNlcnZpY2VJRCBhbiBTTEFJRCB1c2VzIHN0YW5kYXJkKQogICAgaWYgKCBzY2FsYXIgZ3JlcCB7ICRQYXJhbXtGaWVsZH0gZXEgJF8gfSBxdyggU2VydmljZSBTTEEgKSApIHsKICAgICAgICAkTG9va3VwRmllbGROYW1lID0gJ05hbWUnOwogICAgICAgICRPYmplY3ROYW1lICAgICAgPSAkRmllbGRXaXRob3V0SUQ7CiAgICAgICAgJEZ1bmN0aW9uTmFtZSAgICA9ICRGaWVsZFdpdGhvdXRJRCAuICdMb29rdXAnOwogICAgfQoKICAgICMgb3RoZXIgZmllbGRzIGNhbiB1c2Ugc3RhbmRhcmQgcGFyYW1ldGVyIG5hbWVzIGFzIFByaW9yaXR5IG9yIFByaW9yaXR5SUQKICAgIGVsc2UgewogICAgICAgICRMb29rdXBGaWVsZE5hbWUgPSAkUGFyYW17RmllbGR9OwogICAgICAgICRPYmplY3ROYW1lICAgICAgPSAkRmllbGRXaXRob3V0SUQ7CiAgICAgICAgJEZ1bmN0aW9uTmFtZSAgICA9ICRGaWVsZFdpdGhvdXRJRCAuICdMb29rdXAnOwogICAgfQoKICAgICMgZ2V0IGFwcHJvcHJpYXRlIG9iamVjdCBvZiBmaWVsZAogICAgbXkgJEZpZWxkT2JqZWN0OwogICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAnS2VybmVsOjpTeXN0ZW06OicgLiAkT2JqZWN0TmFtZSwgU2lsZW50ID0+IDEgKSApIHsKICAgICAgICAkRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCAnS2VybmVsOjpTeXN0ZW06OicgLiAkT2JqZWN0TmFtZSApOwogICAgfQoKICAgIG15ICRWYWx1ZTsKCiAgICAjIGNoZWNrIGlmIHRoZSBiYWNrZW5kIG1vZHVsZSBoYXMgdGhlIG5lZWRlZCAqTG9va3VwIHN1YgogICAgaWYgKCAkRmllbGRPYmplY3QgJiYgJEZpZWxkT2JqZWN0LT5jYW4oJEZ1bmN0aW9uTmFtZSkgKSB7CgogICAgICAgICMgY2FsbCB0aGUgKkxvb2t1cCBzdWIgYW5kIGdldCB0aGUgdmFsdWUKICAgICAgICAkVmFsdWUgPSAkRmllbGRPYmplY3QtPiRGdW5jdGlvbk5hbWUoCiAgICAgICAgICAgICRMb29rdXBGaWVsZE5hbWUgPT4gJFBhcmFte1ZhbHVlfSwKICAgICAgICApOwogICAgfQoKICAgICMgaWYgd2UgZGlkbid0IGhhdmUgYW4gb2JqZWN0IGFuZCB0aGUgdmFsdWUgaGFzIG5vIHJlZiBhIHN0cmluZyBlLmcuIFRpdGxlIGFuZCBzbyBvbgogICAgIyByZXR1cm4gdHJ1ZQogICAgZWxzaWYgKCAkUGFyYW17RmllbGR9IGVxICRGaWVsZFdpdGhvdXRJRCAmJiAhcmVmICRQYXJhbXtWYWx1ZX0gKSB7CiAgICAgICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJFcnJvciB3aGlsZSBjaGVja2luZyB3aXRoICIgLiAkRmllbGRXaXRob3V0SUQgLiAiT2JqZWN0ISIKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gaWYgKCAhJFZhbHVlICk7CgogICAgIyByZXR1cm4gdGhlIGdpdmVuIElEIHZhbHVlIGlmIHRoZSAqTG9va3VwIHJlc3VsdCB3YXMgYSBzdHJpbmcKICAgIGlmICggJFBhcmFte0ZpZWxkfSBuZSAkRmllbGRXaXRob3V0SUQgKSB7CiAgICAgICAgcmV0dXJuICRQYXJhbXtWYWx1ZX07CiAgICB9CgogICAgIyByZXR1cm4gdGhlICpMb29rdXAgc3RyaW5nIHJldHVybiB2YWx1ZQogICAgcmV0dXJuICRWYWx1ZTsKfQoKc3ViIF9HZXRTTEFzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBpZiBubyBDdXN0b21lclVzZXJJRCBpcyBwcmVzZW50LCBjb25zaWRlciB0aGUgbG9nZ2VkIGluIGN1c3RvbWVyCiAgICBpZiAoICEkUGFyYW17Q3VzdG9tZXJVc2VySUR9ICkgewogICAgICAgICRQYXJhbXtDdXN0b21lclVzZXJJRH0gPSAkU2VsZi0+e1VzZXJJRH07CiAgICB9CgogICAgIyBnZXQgc2xhCiAgICBteSAlU0xBOwogICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSAmJiAkUGFyYW17U2VydmljZXN9ICYmICV7ICRQYXJhbXtTZXJ2aWNlc30gfSApIHsKICAgICAgICBpZiAoICRQYXJhbXtTZXJ2aWNlc30tPnsgJFBhcmFte1NlcnZpY2VJRH0gfSApIHsKICAgICAgICAgICAgJVNMQSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U0xBTGlzdCgKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIFwlU0xBOwp9CgpzdWIgX0dldFNlcnZpY2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgc2VydmljZQogICAgbXkgJVNlcnZpY2U7CgogICAgIyBjaGVjayBuZWVkZWQKICAgIHJldHVybiBcJVNlcnZpY2UgaWYgISRQYXJhbXtRdWV1ZUlEfSAmJiAhJFBhcmFte1RpY2tldElEfTsKCiAgICAjIGdldCBvcHRpb25zIGZvciBkZWZhdWx0IHNlcnZpY2VzIGZvciB1bmtub3duIGN1c3RvbWVycwogICAgbXkgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2U6OkRlZmF1bHQ6OlVua25vd25DdXN0b21lcicpOwoKICAgICMgaWYgbm8gQ3VzdG9tZXJVc2VySUQgaXMgcHJlc2VudCwgY29uc2lkZXIgdGhlIGxvZ2dlZCBpbiBjdXN0b21lcgogICAgaWYgKCAhJFBhcmFte0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAkUGFyYW17Q3VzdG9tZXJVc2VySUR9ID0gJFNlbGYtPntVc2VySUR9OwogICAgfQoKICAgICMgY2hlY2sgaWYgc3RpbGwgbm8gQ3VzdG9tZXJVc2VySUQgaXMgc2VsZWN0ZWQKICAgICMgaWYgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyID0gMCBsZWF2ZSBDdXN0b21lclVzZXJJRCBlbXB0eSwgaXQgd2lsbCBub3QgZ2V0IGFueSBzZXJ2aWNlcwogICAgIyBpZiAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgPSAxIHNldCBDdXN0b21lclVzZXJJRCB0byBnZXQgZGVmYXVsdCBzZXJ2aWNlcwogICAgaWYgKCAhJFBhcmFte0N1c3RvbWVyVXNlcklEfSAmJiAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgKSB7CiAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlcklEfSA9ICc8REVGQVVMVD4nOwogICAgfQoKICAgICMgZ2V0IHNlcnZpY2UgbGlzdAogICAgaWYgKCAkUGFyYW17Q3VzdG9tZXJVc2VySUR9ICkgewogICAgICAgICVTZXJ2aWNlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTZXJ2aWNlTGlzdCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gXCVTZXJ2aWNlOwp9CgpzdWIgX0dldFByaW9yaXRpZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlUHJpb3JpdGllczsKCiAgICAjIEluaXRpYWxseSB3ZSBoYXZlIGp1c3QgdGhlIGRlZmF1bHQgUXVldWUgUGFyYW1ldGVyCiAgICAjIHNvIG1ha2Ugc3VyZSB0byBnZXQgdGhlIElEIGluIHRoYXQgY2FzZQogICAgbXkgJFF1ZXVlSUQ7CiAgICBpZiAoICEkUGFyYW17UXVldWVJRH0gJiYgJFBhcmFte1F1ZXVlfSApIHsKICAgICAgICAkUXVldWVJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUxvb2t1cCggUXVldWUgPT4gJFBhcmFte1F1ZXVlfSApOwogICAgfQogICAgaWYgKCAkUGFyYW17UXVldWVJRH0gfHwgJFF1ZXVlSUQgfHwgJFBhcmFte1RpY2tldElEfSApIHsKICAgICAgICAlUHJpb3JpdGllcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0UHJpb3JpdHlMaXN0KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgfQogICAgcmV0dXJuIFwlUHJpb3JpdGllczsKfQoKc3ViIF9HZXRRdWV1ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGNoZWNrIG93biBzZWxlY3Rpb24KICAgIG15ICVOZXdRdWV1ZXM7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmV3UXVldWVPd25TZWxlY3Rpb24nKSApIHsKICAgICAgICAlTmV3UXVldWVzID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZXdRdWV1ZU93blNlbGVjdGlvbicpIH07CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBTZWxlY3Rpb25UeXBlIFF1ZXVlIG9yIFN5c3RlbUFkZHJlc3M/CiAgICAgICAgbXkgJVF1ZXVlczsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmV3UXVldWVTZWxlY3Rpb25UeXBlJykgZXEgJ1F1ZXVlJyApIHsKICAgICAgICAgICAgJVF1ZXVlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+TW92ZUxpc3QoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICA9PiAnY3JlYXRlJywKICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgID0+ICRTZWxmLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAlUXVldWVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c3RlbUFkZHJlc3MnKS0+U3lzdGVtQWRkcmVzc1F1ZXVlTGlzdCgpOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY3JlYXRlIHBlcm1pc3Npb24gcXVldWVzCiAgICAgICAgbXkgJVVzZXJHcm91cHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIFR5cGUgICA9PiAnY3JlYXRlJywKICAgICAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIHNlbGVjdGlvbiBzdHJpbmcKICAgICAgICBRVUVVRUlEOgogICAgICAgIGZvciBteSAkUXVldWVJRCAoIHNvcnQga2V5cyAlUXVldWVzICkgewogICAgICAgICAgICBteSAlUXVldWVEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlR2V0KCBJRCA9PiAkUXVldWVJRCApOwoKICAgICAgICAgICAgIyBwZXJtaXNzaW9uIGNoZWNrLCBjYW4gd2UgY3JlYXRlIG5ldyB0aWNrZXRzIGluIHF1ZXVlCiAgICAgICAgICAgIG5leHQgUVVFVUVJRCBpZiAhJFVzZXJHcm91cHN7ICRRdWV1ZURhdGF7R3JvdXBJRH0gfTsKCiAgICAgICAgICAgIG15ICRTdHJpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok5ld1F1ZXVlU2VsZWN0aW9uU3RyaW5nJykKICAgICAgICAgICAgICAgIHx8ICc8UmVhbG5hbWU+IDw8RW1haWw+PiAtIFF1ZXVlOiA8UXVldWU+JzsKICAgICAgICAgICAgJFN0cmluZyA9fiBzLzxRdWV1ZT4vJFF1ZXVlRGF0YXtOYW1lfS9nOwogICAgICAgICAgICAkU3RyaW5nID1+IHMvPFF1ZXVlQ29tbWVudD4vJFF1ZXVlRGF0YXtDb21tZW50fS9nOwoKICAgICAgICAgICAgIyByZW1vdmUgdHJhaWxpbmcgc3BhY2VzCiAgICAgICAgICAgICRTdHJpbmcgPX4gc3tccytcen17fSBpZiAhJFF1ZXVlRGF0YXtDb21tZW50fTsKCiAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZXdRdWV1ZVNlbGVjdGlvblR5cGUnKSBuZSAnUXVldWUnICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJVN5c3RlbUFkZHJlc3NEYXRhID0gJFNlbGYtPntTeXN0ZW1BZGRyZXNzfS0+U3lzdGVtQWRkcmVzc0dldCgKICAgICAgICAgICAgICAgICAgICBJRCA9PiAkUXVldWVzeyRRdWV1ZUlEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU3RyaW5nID1+IHMvPFJlYWxuYW1lPi8kU3lzdGVtQWRkcmVzc0RhdGF7UmVhbG5hbWV9L2c7CiAgICAgICAgICAgICAgICAkU3RyaW5nID1+IHMvPEVtYWlsPi8kU3lzdGVtQWRkcmVzc0RhdGF7TmFtZX0vZzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkTmV3UXVldWVzeyRRdWV1ZUlEfSA9ICRTdHJpbmc7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcJU5ld1F1ZXVlczsKfQoKc3ViIF9HZXRTdGF0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlU3RhdGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTdGF0ZUxpc3QoCiAgICAgICAgJVBhcmFtLAoKICAgICAgICAjIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IHByb2Nlc3MgdGlja2V0CiAgICAgICAgUXVldWVJRCAgPT4gJFBhcmFte1F1ZXVlSUR9ICB8fCAxLAogICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXRJRH0gfHwgJycsCgogICAgICAgICMgcmVtb3ZlIHR5cGUsIHNpbmNlIGlmIFRpY2tldDo6VHlwZSBpcyBhY3RpdmUgaW4gc3lzY29uZmlnLCB0aGUgVHlwZSBwYXJhbWV0ZXIgd2lsbAogICAgICAgICMgYmUgc2VudCBhbmQgdGhlIFRpY2tldFN0YXRlTGlzdCB3aWxsIHNlbmQgdGhlIHBhcmFtZXRlciBhcyBTdGF0ZSBUeXBlCiAgICAgICAgVHlwZSA9PiB1bmRlZiwKCiAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIFwlU3RhdGVzOwp9CgpzdWIgX0dldFR5cGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdHlwZQogICAgbXkgJVR5cGU7CiAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSB8fCAkUGFyYW17VGlja2V0SUR9ICkgewogICAgICAgICVUeXBlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRUeXBlTGlzdCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBBY3Rpb24gICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQogICAgcmV0dXJuIFwlVHlwZTsKfQoKc3ViIF9TaG93RGlhbG9nRXJyb3IgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckhlYWRlciggVHlwZSA9PiAnU21hbGwnICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRXJyb3IoJVBhcmFtKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJGb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCnN1YiBfR2V0SW5wdXREZWZpbml0aW9uRHluYW1pY0ZpZWxkcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICBteSAlRHluYW1pY0ZpZWxkOwoKICAgICMgVGhpcyBzdWJyb3V0aW5lIHRha2VzIGEgREZFbnRyeSBhbmQgdGhlIER5bmFtaWNGaWVsZE9iamVjdCBhcyBhcmd1bWVudHMKICAgICMgSXQgcmV0cmlldmVzIHRoZSBkeW5hbWljIGZpZWxkIGRlZmluaXRpb24gZm9yIHRoZSBnaXZlbiBERkVudHJ5CiAgICAjIElmIHRoZSBkZWZpbml0aW9uIGlzIG5vdCBhdmFpbGFibGUsIGl0IHJldHJpZXZlcyBpdCBmcm9tIHRoZSBEeW5hbWljRmllbGRPYmplY3QKICAgICMgUmV0dXJucyB0aGUgZHluYW1pYyBmaWVsZCBkZWZpbml0aW9uCiAgICBteSAkR2V0RHluYW1pY0ZpZWxkID0gc3ViIHsKCiAgICAgICAgbXkgKCRERkVudHJ5KSA9IEBfOwoKICAgICAgICBteSAkRHluYW1pY0ZpZWxkID0gJERGRW50cnktPntEZWZpbml0aW9ufSAvLyAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJERGRW50cnktPntERn0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICREeW5hbWljRmllbGQ7CiAgICB9OwoKICAgIElURU06CiAgICBmb3IgbXkgJEluY2x1ZGVJdGVtICggQHsgJFBhcmFte0lucHV0RmllbGREZWZpbml0aW9ufSB9ICkgewoKICAgICAgICBpZiAoICRJbmNsdWRlSXRlbS0+e0dyaWR9ICkgewoKICAgICAgICAgICAgZm9yIG15ICRSb3cgKCBAeyAkSW5jbHVkZUl0ZW0tPntHcmlkfXtSb3dzfSB9ICkgewoKICAgICAgICAgICAgICAgIERGRU5UUlk6CiAgICAgICAgICAgICAgICBmb3IgbXkgJERGRW50cnkgKCAkUm93LT5AKiApIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZCA9ICRHZXREeW5hbWljRmllbGQtPigkREZFbnRyeSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZC0+e01hbmRhdG9yeX0gICAgICA9ICRERkVudHJ5LT57TWFuZGF0b3J5fTsKICAgICAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZC0+e1JlYWRvbmx5fSAgICAgICA9ICRERkVudHJ5LT57UmVhZG9ubHl9OwogICAgICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkeyAkREZFbnRyeS0+e0RGfSB9ID0gJER5bmFtaWNGaWVsZDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJEeW5hbWljRmllbGRDb25maWcgbWlzc2luZyBmb3IgZmllbGQ6ICRERkVudHJ5LT57REZ9LCBvciBpcyBub3QgYSBUaWNrZXQgRHluYW1pYyBGaWVsZCEiLAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBERkVOVFJZOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRJbmNsdWRlSXRlbS0+e0RGfSApIHsKCiAgICAgICAgICAgIG15ICREeW5hbWljRmllbGQgPSAkR2V0RHluYW1pY0ZpZWxkLT4oJEluY2x1ZGVJdGVtKTsKICAgICAgICAgICAgaWYgKCREeW5hbWljRmllbGQpIHsKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGQtPntNYW5kYXRvcnl9ICAgICAgICAgID0gJEluY2x1ZGVJdGVtLT57TWFuZGF0b3J5fTsKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGQtPntSZWFkb25seX0gICAgICAgICAgID0gJEluY2x1ZGVJdGVtLT57UmVhZG9ubHl9OwogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZHsgJEluY2x1ZGVJdGVtLT57REZ9IH0gPSAkRHluYW1pY0ZpZWxkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiRHluYW1pY0ZpZWxkQ29uZmlnIG1pc3NpbmcgZm9yIGZpZWxkOiAkSW5jbHVkZUl0ZW0tPntERn0sIG9yIGlzIG5vdCBhIFRpY2tldCBEeW5hbWljIEZpZWxkISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbmV4dCBJVEVNOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBuZXh0IElURU07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcJUR5bmFtaWNGaWVsZDsKfQoKMTsK</File>
        <File Location="Kernel/Output/HTML/ITSMServiceMenu/Generic.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU2VydmljZU1lbnU6OkdlbmVyaWM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBVc2VySUQgcGFyYW0KICAgICRTZWxmLT57VXNlcklEfSA9ICRQYXJhbXtVc2VySUR9IHx8IGRpZSAiR290IG5vIFVzZXJJRCEiOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2VydmljZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNlcnZpY2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBncm91cHMKICAgIG15ICRHcm91cHNSbyA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSB9LT57R3JvdXBSb30KICAgICAgICB8fCBbXTsKICAgIG15ICRHcm91cHNSdyA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSB9LT57R3JvdXB9CiAgICAgICAgfHwgW107CgogICAgIyBzZXQgYWNjZXNzCiAgICBteSAkQWNjZXNzID0gMTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgaWYgKCAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0gJiYgKCBAeyRHcm91cHNSb30gfHwgQHskR3JvdXBzUnd9ICkgKSB7CgogICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICRBY2Nlc3MgPSAwOwoKICAgICAgICAjIGZpbmQgcmVhZCBvbmx5IGdyb3VwcwogICAgICAgIFJPR1JPVVA6CiAgICAgICAgZm9yIG15ICRSb0dyb3VwICggQHskR3JvdXBzUm99ICkgewoKICAgICAgICAgICAgbmV4dCBST0dST1VQIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvbkNoZWNrKAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIEdyb3VwTmFtZSA9PiAkUm9Hcm91cCwKICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAncm8nLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJPR1JPVVA7CiAgICAgICAgfQoKICAgICAgICAjIGZpbmQgcmVhZCB3cml0ZSBncm91cHMKICAgICAgICBSV0dST1VQOgogICAgICAgIGZvciBteSAkUndHcm91cCAoIEB7JEdyb3Vwc1J3fSApIHsKCiAgICAgICAgICAgIG5leHQgUldHUk9VUCBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25DaGVjaygKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBHcm91cE5hbWUgPT4gJFJ3R3JvdXAsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ3J3JywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICAgICAkQWNjZXNzID0gMTsKICAgICAgICAgICAgbGFzdCBSV0dST1VQOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9IGlmICEkQWNjZXNzOwoKICAgICMgb3V0cHV0IG1lbnUgaXRlbQogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWVudUl0ZW0nLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7ICRQYXJhbXtTZXJ2aWNlfSB9LAogICAgICAgICAgICAleyAkUGFyYW17Q29uZmlnfSB9LAogICAgICAgIH0sCiAgICApOwogICAgJFBhcmFte0NvdW50ZXJ9Kys7CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfTsKfQoKMTsK</File>
        <File Location="Kernel/Output/HTML/ITSMServiceMenu/Link.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU2VydmljZU1lbnU6Okxpbms7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgVXNlcklEIHBhcmFtCiAgICAkU2VsZi0+e1VzZXJJRH0gPSAkUGFyYW17VXNlcklEfSB8fCBkaWUgIkdvdCBubyBVc2VySUQhIjsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1NlcnZpY2V9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTZXJ2aWNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZ3JvdXBzCiAgICBteSAkR3JvdXBzUncgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0gfS0+e0dyb3VwfQogICAgICAgIHx8IFtdOwoKICAgICMgc2V0IGFjY2VzcwogICAgbXkgJEFjY2VzcyA9IDE7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb24KICAgIGlmICggJFBhcmFte0NvbmZpZ30tPntBY3Rpb259ICYmIEB7JEdyb3Vwc1J3fSApIHsKCiAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgJEFjY2VzcyA9IDA7CgogICAgICAgICMgZmluZCByZWFkIHdyaXRlIGdyb3VwcwogICAgICAgIFJXR1JPVVA6CiAgICAgICAgZm9yIG15ICRSd0dyb3VwICggQHskR3JvdXBzUnd9ICkgewoKICAgICAgICAgICAgbmV4dCBSV0dST1VQIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvbkNoZWNrKAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIEdyb3VwTmFtZSA9PiAkUndHcm91cCwKICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJXR1JPVVA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBjaGVjayBpZiBzZXJ2aWNlcyBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgb2JqZWN0cwogICAgbXkgJVBvc3NpYmxlT2JqZWN0cyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPlBvc3NpYmxlT2JqZWN0c0xpc3QoCiAgICAgICAgT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGRvbid0IHNob3cgbGluayBtZW51IGl0ZW0gaWYgdGhlcmUgYXJlIG5vIGxpbmthYmxlIG9iamVjdHMKICAgIHJldHVybiBpZiAhJVBvc3NpYmxlT2JqZWN0czsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZW51SXRlbScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte1NlcnZpY2V9IH0sCiAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgJFBhcmFte0NvdW50ZXJ9Kys7CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfTsKfQoKMTsK</File>
        <File Location="Kernel/Output/HTML/ITSMSLAMenu/Generic.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU0xBTWVudTo6R2VuZXJpYzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIFVzZXJJRCBwYXJhbQogICAgJFNlbGYtPntVc2VySUR9ID0gJFBhcmFte1VzZXJJRH0gfHwgZGllICJHb3Qgbm8gVXNlcklEISI7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtTTEF9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTTEEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBncm91cHMKICAgIG15ICRHcm91cHNSbyA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSB9LT57R3JvdXBSb30KICAgICAgICB8fCBbXTsKICAgIG15ICRHcm91cHNSdyA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSB9LT57R3JvdXB9CiAgICAgICAgfHwgW107CgogICAgIyBzZXQgYWNjZXNzCiAgICBteSAkQWNjZXNzID0gMTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgaWYgKCAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0gJiYgKCBAeyRHcm91cHNSb30gfHwgQHskR3JvdXBzUnd9ICkgKSB7CgogICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICRBY2Nlc3MgPSAwOwoKICAgICAgICAjIGZpbmQgcmVhZCBvbmx5IGdyb3VwcwogICAgICAgIFJPR1JPVVA6CiAgICAgICAgZm9yIG15ICRSb0dyb3VwICggQHskR3JvdXBzUm99ICkgewoKICAgICAgICAgICAgbmV4dCBST0dST1VQIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvbkNoZWNrKAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIEdyb3VwTmFtZSA9PiAkUm9Hcm91cCwKICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAncm8nLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJPR1JPVVA7CiAgICAgICAgfQoKICAgICAgICAjIGZpbmQgcmVhZCB3cml0ZSBncm91cHMKICAgICAgICBSV0dST1VQOgogICAgICAgIGZvciBteSAkUndHcm91cCAoIEB7JEdyb3Vwc1J3fSApIHsKCiAgICAgICAgICAgIG5leHQgUldHUk9VUCBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25DaGVjaygKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBHcm91cE5hbWUgPT4gJFJ3R3JvdXAsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ3J3JywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICAgICAkQWNjZXNzID0gMTsKICAgICAgICAgICAgbGFzdCBSV0dST1VQOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9IGlmICEkQWNjZXNzOwoKICAgICMgb3V0cHV0IG1lbnUgaXRlbQogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWVudUl0ZW0nLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7ICRQYXJhbXtTTEF9IH0sCiAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgfSwKICAgICk7CiAgICAkUGFyYW17Q291bnRlcn0rKzsKCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9Owp9CgoxOwo=</File>
        <File Location="Kernel/Output/HTML/LinkObject/Service.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMaW5rT2JqZWN0OjpTZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQ7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Okxhbmd1YWdlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SlNPTicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlVzZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6T3V0cHV0OjpIVE1MOjpMaW5rT2JqZWN0OjpTZXJ2aWNlIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBsYXlvdXQgZnVuY3Rpb25zIG9mIGxpbmsgb2JqZWN0IChzZXJ2aWNlKQoKPWN1dAoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGlua09iamVjdDo6U2VydmljZS0+bmV3KAogICAgICAgIFVzZXJMYW5ndWFnZSA9PiAnZW4nLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKHF3KFVzZXJMYW5ndWFnZSBVc2VySUQpKSB7CiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfSB8fCBkaWUgIkdvdCBubyAkTmVlZGVkISI7CiAgICB9CgogICAgIyB3ZSBuZWVkIG91ciBvd24gTGF5b3V0T2JqZWN0IGluc3RhbmNlIHRvIGF2b2lkIGJsb2NrZGF0YSBjb2xsaXNpb25zCiAgICAjIHdpdGggdGhlIG1haW4gcGFnZS4KICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fSA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQtPm5ldyggJXskU2VsZn0gKTsKCiAgICAjIGRlZmluZSBuZWVkZWQgdmFyaWFibGVzCiAgICAkU2VsZi0+e09iamVjdERhdGF9ID0gewogICAgICAgIE9iamVjdCAgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgIFJlYWxuYW1lICAgPT4gJ1NlcnZpY2UnLAogICAgICAgIE9iamVjdE5hbWUgPT4gJ1NvdXJjZU9iamVjdElEJywKICAgIH07CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgVGFibGVDcmVhdGVDb21wbGV4KCkKCnJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBibG9jayBkYXRhCgpSZXR1cm4KCiAgICBAQmxvY2tEYXRhID0gKAoKICAgICAgICBPYmplY3ROYW1lICA9PiAnU2VydmljZUlEJywKICAgICAgICBPYmplY3RJRCAgICA9PiAnMTIzJywKCiAgICAgICAgT2JqZWN0ICAgID0+ICdTZXJ2aWNlJywKICAgICAgICBCbG9ja25hbWUgPT4gJ1NlcnZpY2UnLAogICAgICAgIEhlYWRsaW5lICA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJycsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDIwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnVHlwZScsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ3JpdGljYWxpdHknLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NoYW5nZWQnLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAxNTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICAgICBJdGVtTGlzdCA9PiBbCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdJbmNpU2lnbmFsJywKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgICAgICAgID0+IDEyMywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgICAgID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnU2VydmljZSBCbGEnLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgICA9PiAnQWN0aW9uPUFnZW50SVRTTVNlcnZpY2Vab29tO1NlcnZpY2VJRD0xMjMnLAogICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA3MCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnT3RoZXInLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdIaWdoJywKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGltZUxvbmcnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzIwMDgtMDEtMDEgMTI6MTI6MDAnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0luY2lTaWduYWwnLAogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgICAgICAgPT4gMzIxLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICdTZXJ2aWNlIEJsYScsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgID0+ICdBY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPTMyMScsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDcwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdPdGhlcicsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0xvdycsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RpbWVMb25nJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcyMDA3LTAyLTAyIDIyOjEyOjAwJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgXSwKICAgICk7CgogICAgQEJsb2NrRGF0YSA9ICRMaW5rT2JqZWN0LT5UYWJsZUNyZWF0ZUNvbXBsZXgoCiAgICAgICAgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSA9PiAkT2JqZWN0TGlua0xpc3RSZWYsCiAgICApOwoKPWN1dAoKc3ViIFRhYmxlQ3JlYXRlQ29tcGxleCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfHwgcmVmICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9iamVjdExpbmtMaXN0V2l0aERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNvbnZlcnQgdGhlIGxpc3QKICAgIG15ICVMaW5rTGlzdDsKICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXsgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IH0gKSB7CgogICAgICAgICMgZXh0cmFjdCBsaW5rIHR5cGUgTGlzdAogICAgICAgIG15ICRMaW5rVHlwZUxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9OwoKICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoIHNvcnQga2V5cyAleyRMaW5rVHlwZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGRpcmVjdGlvbiBsaXN0CiAgICAgICAgICAgIG15ICREaXJlY3Rpb25MaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259OwoKICAgICAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IGtleXMgJXskRGlyZWN0aW9uTGlzdH0gKSB7CgogICAgICAgICAgICAgICAgJExpbmtMaXN0eyRTZXJ2aWNlSUR9LT57RGF0YX0gPSAkRGlyZWN0aW9uTGlzdC0+eyRTZXJ2aWNlSUR9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15ICRDb21wbGV4VGFibGVEYXRhID0gJENvbmZpZ09iamVjdC0+R2V0KCJMaW5rT2JqZWN0OjpDb21wbGV4VGFibGUiKTsKICAgIG15ICREZWZhdWx0Q29sdW1uczsKICAgIGlmICgKICAgICAgICAkQ29tcGxleFRhYmxlRGF0YQogICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCRDb21wbGV4VGFibGVEYXRhKQogICAgICAgICYmICRDb21wbGV4VGFibGVEYXRhLT57U2VydmljZX0KICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJENvbXBsZXhUYWJsZURhdGEtPntTZXJ2aWNlfSApCiAgICAgICAgKQogICAgewogICAgICAgICREZWZhdWx0Q29sdW1ucyA9ICRDb21wbGV4VGFibGVEYXRhLT57IlNlcnZpY2UifS0+eyJEZWZhdWx0Q29sdW1ucyJ9OwogICAgfQoKICAgIG15IEBUaW1lTG9uZ1R5cGVzID0gKAogICAgICAgICdDcmVhdGVUaW1lJywKICAgICAgICAnQ2hhbmdlVGltZScsCiAgICApOwoKICAgIG15IEBUcmFuc2xhdGVUeXBlcyA9ICgKICAgICAgICAnVHlwZScsCiAgICAgICAgJ0NyaXRpY2FsaXR5JywKICAgICk7CgogICAgIyBhbHdheXMgc2hvdyB0aGUgaW5jaWRlbnQgc3RhdGUgZmxhZyBhbmQgdGhlIHNlcnZpY2UgbmFtZQogICAgbXkgQEhlYWRsaW5lID0gKAogICAgICAgIHsKICAgICAgICAgICAgQ29udGVudCA9PiAnSW5jaWRlbnQgU3RhdGUnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBDb250ZW50ID0+ICdTZXJ2aWNlJywKICAgICAgICB9LAogICAgKTsKCiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBMb2FkIHVzZXIgcHJlZmVyZW5jZXMuCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkVXNlck9iamVjdC0+R2V0UHJlZmVyZW5jZXMoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgaWYgKCAhJERlZmF1bHRDb2x1bW5zIHx8ICFJc0hhc2hSZWZXaXRoRGF0YSgkRGVmYXVsdENvbHVtbnMpICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTWlzc2luZyBjb25maWd1cmF0aW9uIGZvciBMaW5rT2JqZWN0OjpDb21wbGV4VGFibGUjIyNTZXJ2aWNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBHZXQgZGVmYXVsdCBjb2x1bW4gcHJpb3JpdHkgZnJvbSBTeXNDb25maWcuCiAgICAjIEVhY2ggY29sdW1uIGluIHRhYmxlIChUaXRsZSwgU3RhdGUsLi4uKSBoYXMgZGVmaW5lZCBQcmlvcml0eSBpbiBTeXNDb25maWcuIFN5c3RlbSB1c2UgdGhpcwogICAgIyAgIHByaW9yaXR5IHRvIHNvcnQgY29sdW1ucywgaWYgdXNlciBkb2Vzbid0IGhhdmUgb3duIHNldHRpbmdzLgogICAgbXkgJVNvcnRPcmRlcjsKICAgIGlmICgKICAgICAgICAkQ29tcGxleFRhYmxlRGF0YS0+eyJTZXJ2aWNlIn0tPnsiUHJpb3JpdHkifQogICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQ29tcGxleFRhYmxlRGF0YS0+eyJTZXJ2aWNlIn0tPnsiUHJpb3JpdHkifSApCiAgICAgICAgKQogICAgewogICAgICAgICVTb3J0T3JkZXIgPSAleyAkQ29tcGxleFRhYmxlRGF0YS0+eyJTZXJ2aWNlIn0tPnsiUHJpb3JpdHkifSB9OwogICAgfQoKICAgIG15ICVVc2VyQ29sdW1ucyA9ICV7JERlZmF1bHRDb2x1bW5zfTsKCiAgICBpZiAoICRQcmVmZXJlbmNlc3snTGlua09iamVjdDo6Q29tcGxleFRhYmxlLVNlcnZpY2UnfSApIHsKCiAgICAgICAgbXkgJENvbHVtbnNFbmFibGVkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKS0+RGVjb2RlKAogICAgICAgICAgICBEYXRhID0+ICRQcmVmZXJlbmNlc3snTGlua09iamVjdDo6Q29tcGxleFRhYmxlLVNlcnZpY2UnfSwKICAgICAgICApOwoKICAgICAgICBpZiAoCiAgICAgICAgICAgICRDb2x1bW5zRW5hYmxlZAogICAgICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSgkQ29sdW1uc0VuYWJsZWQpCiAgICAgICAgICAgICYmICRDb2x1bW5zRW5hYmxlZC0+e09yZGVyfQogICAgICAgICAgICAmJiBJc0FycmF5UmVmV2l0aERhdGEoICRDb2x1bW5zRW5hYmxlZC0+e09yZGVyfSApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICMgQ2xlYXIgc29ydCBvcmRlci4KICAgICAgICAgICAgJVNvcnRPcmRlciA9ICgpOwoKICAgICAgICAgICAgREVGQVVMVENPTFVNTjoKICAgICAgICAgICAgZm9yIG15ICREZWZhdWx0Q29sdW1uICggc29ydCBrZXlzICVVc2VyQ29sdW1ucyApIHsKICAgICAgICAgICAgICAgIG15ICRJbmRleCA9IDA7CgogICAgICAgICAgICAgICAgZm9yIG15ICRVc2VyU2V0dGluZyAoIEB7ICRDb2x1bW5zRW5hYmxlZC0+e09yZGVyfSB9ICkgewogICAgICAgICAgICAgICAgICAgICRJbmRleCsrOwogICAgICAgICAgICAgICAgICAgIGlmICggJERlZmF1bHRDb2x1bW4gZXEgJFVzZXJTZXR0aW5nICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVXNlckNvbHVtbnN7JERlZmF1bHRDb2x1bW59ID0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgJFNvcnRPcmRlcnskRGVmYXVsdENvbHVtbn0gICA9ICRJbmRleDsKCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgREVGQVVMVENPTFVNTjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBOb3QgZm91bmQsIG1lYW5zIHVzZXIgY2hvc2UgdG8gaGlkZSB0aGlzIGl0ZW0uCiAgICAgICAgICAgICAgICBpZiAoICRVc2VyQ29sdW1uc3skRGVmYXVsdENvbHVtbn0gPT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAkVXNlckNvbHVtbnN7JERlZmF1bHRDb2x1bW59ID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICEkU29ydE9yZGVyeyREZWZhdWx0Q29sdW1ufSApIHsKICAgICAgICAgICAgICAgICAgICAkU29ydE9yZGVyeyREZWZhdWx0Q29sdW1ufSA9IDA7ICAgICMgU2V0IDAsIGl0IHN5c3RlbSB3aWxsIGhpZGUgdGhpcyBpdGVtIGFueXdheXMKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIFVzZXIgaGFzIG5vIG93biBzZXR0aW5ncy4KICAgICAgICBmb3IgbXkgJENvbHVtbiAoIHNvcnQga2V5cyAlVXNlckNvbHVtbnMgKSB7CiAgICAgICAgICAgIGlmICggISRTb3J0T3JkZXJ7JENvbHVtbn0gKSB7CiAgICAgICAgICAgICAgICAkU29ydE9yZGVyeyRDb2x1bW59ID0gMDsgICAgIyBTZXQgMCwgaXQgc3lzdGVtIHdpbGwgaGlkZSB0aGlzIGl0ZW0gYW55d2F5cwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgRGVmaW5lIEhlYWRsaW5lIGNvbHVtbnMuCiAgICBteSBAQWxsQ29sdW1uczsKICAgIENPTFVNTjoKICAgIGZvciBteSAkQ29sdW1uICggc29ydCB7ICRTb3J0T3JkZXJ7JGF9IDw9PiAkU29ydE9yZGVyeyRifSB9IGtleXMgJVVzZXJDb2x1bW5zICkgewoKICAgICAgICBteSAkQ29sdW1uVHJhbnNsYXRlID0gJENvbHVtbjsKICAgICAgICBpZiAoICRDb2x1bW4gZXEgJ0N1ckluY2lTdGF0ZScgKSB7CiAgICAgICAgICAgICRDb2x1bW5UcmFuc2xhdGUgPSBUcmFuc2xhdGFibGUoJ0luY2lkZW50IFN0YXRlJyk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJENvbHVtbiBlcSAnQ3JlYXRlVGltZScgKSB7CiAgICAgICAgICAgICRDb2x1bW5UcmFuc2xhdGUgPSBUcmFuc2xhdGFibGUoJ0NyZWF0ZWQnKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkQ29sdW1uIGVxICdDaGFuZ2VUaW1lJyApIHsKICAgICAgICAgICAgJENvbHVtblRyYW5zbGF0ZSA9IFRyYW5zbGF0YWJsZSgnQ2hhbmdlZCcpOwogICAgICAgIH0KCiAgICAgICAgcHVzaCBAQWxsQ29sdW1ucywgewogICAgICAgICAgICBDb2x1bW5OYW1lICAgICAgPT4gJENvbHVtbiwKICAgICAgICAgICAgQ29sdW1uVHJhbnNsYXRlID0+ICRDb2x1bW5UcmFuc2xhdGUsCiAgICAgICAgfTsKCiAgICAgICAgIyBpZiBlbmFibGVkIGJ5IGRlZmF1bHQuCiAgICAgICAgaWYgKCAkVXNlckNvbHVtbnN7JENvbHVtbn0gPT0gMiApIHsKICAgICAgICAgICAgcHVzaCBASGVhZGxpbmUsIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJENvbHVtblRyYW5zbGF0ZSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIGl0ZW0gbGlzdCAodGFibGUgY29udGVudCkKICAgIG15IEBJdGVtTGlzdDsKICAgIGZvciBteSAkU2VydmljZUlEICgKICAgICAgICBzb3J0IHsgbGMgJExpbmtMaXN0eyRhfXtEYXRhfS0+e05hbWV9IGNtcCBsYyAkTGlua0xpc3R7JGJ9e0RhdGF9LT57TmFtZX0gfQogICAgICAgIGtleXMgJUxpbmtMaXN0CiAgICAgICAgKQogICAgewoKICAgICAgICAjIGV4dHJhY3Qgc2VydmljZSBkYXRhCiAgICAgICAgbXkgJFNlcnZpY2UgPSAkTGlua0xpc3R7JFNlcnZpY2VJRH0tPntEYXRhfTsKCiAgICAgICAgIyBDdXJJbmNpU2lnbmFsIG11c3QgYWx3YXlzIGJlIHByZXNlbnQsIGFzIHdlbGwgYXMgc2VydmljZSBuYW1lCiAgICAgICAgIyAoYmVjYXVzZSBpdCBjb250YWlucyB0aGUgbWFzdGVyIGxpbmsgdG8gdGhlIFNlcnZpY2UpLgogICAgICAgIG15IEBJdGVtQ29sdW1ucyA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnQ3VySW5jaVNpZ25hbCcsCiAgICAgICAgICAgICAgICBLZXkgICAgICAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgICAgID0+ICRTZXJ2aWNlLT57Q3VySW5jaVN0YXRlfSwKICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJFNlcnZpY2UtPntDdXJJbmNpU3RhdGVUeXBlfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRTZXJ2aWNlLT57TmFtZX0sCiAgICAgICAgICAgICAgICBMaW5rICAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9JwogICAgICAgICAgICAgICAgICAgIC4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFRpdGxlICAgICA9PiAiU2VydmljZTogJFNlcnZpY2UtPntOYW1lfSIsCiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNzAsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgQ09MVU1OOgogICAgICAgIGZvciBteSAkQ29sdW1uICggc29ydCB7ICRTb3J0T3JkZXJ7JGF9IDw9PiAkU29ydE9yZGVyeyRifSB9IGtleXMgJVVzZXJDb2x1bW5zICkgewoKICAgICAgICAgICAgIyBpZiBlbmFibGVkIGJ5IGRlZmF1bHQKICAgICAgICAgICAgaWYgKCAkVXNlckNvbHVtbnN7JENvbHVtbn0gPT0gMiApIHsKCiAgICAgICAgICAgICAgICBteSAlSGFzaDsKICAgICAgICAgICAgICAgIGlmICggZ3JlcCB7ICRfIGVxICRDb2x1bW4gfSBAVGltZUxvbmdUeXBlcyApIHsKICAgICAgICAgICAgICAgICAgICAkSGFzaHsnVHlwZSd9ID0gJ1RpbWVMb25nJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRIYXNoeydUeXBlJ30gPSAnVGV4dCc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAkQ29sdW1uIGVxICdDb21tZW50JyApIHsKICAgICAgICAgICAgICAgICAgICAkSGFzaHtNYXhMZW5ndGh9ID0gMzA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBncmVwIHsgJF8gZXEgJENvbHVtbiB9IEBUcmFuc2xhdGVUeXBlcyApIHsKICAgICAgICAgICAgICAgICAgICAkSGFzaHsnVHJhbnNsYXRlJ30gPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRIYXNoeydDb250ZW50J30gPSAkU2VydmljZS0+eyRDb2x1bW59OwoKICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1Db2x1bW5zLCBcJUhhc2g7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHB1c2ggQEl0ZW1MaXN0LCBcQEl0ZW1Db2x1bW5zOwogICAgfQoKICAgIHJldHVybiBpZiAhQEl0ZW1MaXN0OwoKICAgICMgRGVmaW5lIHRoZSBibG9jayBkYXRhLgogICAgbXkgJUJsb2NrID0gKAogICAgICAgIE9iamVjdCAgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0sCiAgICAgICAgQmxvY2tuYW1lICA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0fSwKICAgICAgICBPYmplY3ROYW1lID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3ROYW1lfSwKICAgICAgICBPYmplY3RJRCAgID0+ICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgSGVhZGxpbmUgICA9PiBcQEhlYWRsaW5lLAogICAgICAgIEl0ZW1MaXN0ICAgPT4gXEBJdGVtTGlzdCwKICAgICAgICBBbGxDb2x1bW5zID0+IFxAQWxsQ29sdW1ucywKICAgICk7CgogICAgcmV0dXJuICggXCVCbG9jayApOwoKfQoKPWhlYWQyIFRhYmxlQ3JlYXRlU2ltcGxlKCkKCnJldHVybiBhIGhhc2ggd2l0aCB0aGUgbGluayBvdXRwdXQgZGF0YQoKUmV0dXJuCgogICAgJUxpbmtPdXRwdXREYXRhID0gKAogICAgICAgIE5vcm1hbDo6U291cmNlID0+IHsKICAgICAgICAgICAgU2VydmljZSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnUzpUaGUgc2VydmljWy4uXScsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnU2VydmljZTogVGhlIHNlcnZpY2UgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgQ3NzICAgICA9PiAnc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoIicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1M6TmFtZSBvZiBzZXJ2aWNbLi5dJywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgID0+ICdTZXJ2aWNlOiBOYW1lIG9mIHNlcnZpY2UgMicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUGFyZW50Q2hpbGQ6OlRhcmdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2UgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1M6U2VydmljZSBuYW1bLi5dJywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgID0+ICdTZXJ2aWNlOiBTZXJ2aWNlIG5hbWUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgKTsKCiAgICAlTGlua091dHB1dERhdGEgPSAkTGlua09iamVjdC0+VGFibGVDcmVhdGVTaW1wbGUoCiAgICAgICAgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSA9PiAkT2JqZWN0TGlua0xpc3RSZWYsCiAgICApOwoKPWN1dAoKc3ViIFRhYmxlQ3JlYXRlU2ltcGxlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB8fCByZWYgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICVMaW5rT3V0cHV0RGF0YTsKICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXsgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IH0gKSB7CgogICAgICAgICMgZXh0cmFjdCBsaW5rIHR5cGUgTGlzdAogICAgICAgIG15ICRMaW5rVHlwZUxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9OwoKICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoIHNvcnQga2V5cyAleyRMaW5rVHlwZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGRpcmVjdGlvbiBsaXN0CiAgICAgICAgICAgIG15ICREaXJlY3Rpb25MaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259OwoKICAgICAgICAgICAgbXkgQEl0ZW1MaXN0OwogICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoCiAgICAgICAgICAgICAgICBzb3J0IHsKICAgICAgICAgICAgICAgICAgICBsYyAkRGlyZWN0aW9uTGlzdC0+eyRhfS0+e05hbWVTaG9ydH0gY21wIGxjICREaXJlY3Rpb25MaXN0LT57JGJ9LT57TmFtZVNob3J0fQogICAgICAgICAgICAgICAgfSBrZXlzICV7JERpcmVjdGlvbkxpc3R9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3Qgc2VydmljZSBkYXRhCiAgICAgICAgICAgICAgICBteSAkU2VydmljZSA9ICREaXJlY3Rpb25MaXN0LT57JFNlcnZpY2VJRH07CgogICAgICAgICAgICAgICAgIyBkZWZpbmUgaXRlbSBkYXRhCiAgICAgICAgICAgICAgICBteSAlSXRlbSA9ICgKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICJTOiRTZXJ2aWNlLT57TmFtZVNob3J0fSIsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAiU2VydmljZTogJFNlcnZpY2UtPntOYW1lfSIsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAgICAgLiAnQWN0aW9uPUFnZW50SVRTTVNlcnZpY2Vab29tO1NlcnZpY2VJRD0nCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMjAsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1MaXN0LCBcJUl0ZW07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGl0ZW0gbGlzdCB0byBsaW5rIG91dHB1dCBkYXRhCiAgICAgICAgICAgICRMaW5rT3V0cHV0RGF0YXsgJExpbmtUeXBlIC4gJzo6JyAuICREaXJlY3Rpb24gfS0+e1NlcnZpY2V9ID0gXEBJdGVtTGlzdDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVMaW5rT3V0cHV0RGF0YTsKfQoKPWhlYWQyIENvbnRlbnRTdHJpbmdDcmVhdGUoKQoKcmV0dXJuIGEgb3V0cHV0IHN0cmluZwoKICAgIG15ICRTdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5Db250ZW50U3RyaW5nQ3JlYXRlKAogICAgICAgIENvbnRlbnREYXRhID0+ICRIYXNoUmVmLAogICAgKTsKCj1jdXQKCnN1YiBDb250ZW50U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDb250ZW50RGF0YX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENvbnRlbnREYXRhIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBleHRyYWN0IGNvbnRlbnQKICAgIG15ICRDb250ZW50ID0gJFBhcmFte0NvbnRlbnREYXRhfTsKCiAgICByZXR1cm4gaWYgJENvbnRlbnQtPntUeXBlfSBuZSAnQ3VySW5jaVNpZ25hbCc7CgogICAgIyBzZXQgaW5jaWRlbnQgc2lnbmFsCiAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgaW5jaWRlbnQgICAgPT4gJ3JlZGxlZCcsCiAgICAgICAgb3BlcmF0aW9uYWwgPT4gJ2dyZWVubGVkJywKICAgICAgICB1bmtub3duICAgICA9PiAnZ3JheWxlZCcsCiAgICAgICAgd2FybmluZyAgICAgPT4gJ3llbGxvd2xlZCcsCiAgICApOwoKICAgICMgaW52ZXN0aWdhdGUgY3VycmVudCBpbmNpZGVudCBzaWduYWwKICAgICRDb250ZW50LT57Q3VySW5jaVN0YXRlVHlwZX0gfHw9ICd1bmtub3duJzsKICAgIG15ICRDdXJJbmNpU2lnbmFsID0gJEluY2lTaWduYWxzeyAkQ29udGVudC0+e0N1ckluY2lTdGF0ZVR5cGV9IH07CiAgICAkQ3VySW5jaVNpZ25hbCB8fD0gJEluY2lTaWduYWxze3Vua25vd259OwoKICAgIG15ICRTdHJpbmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZSA9PiAnPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCIgdGl0bGU9IlslIERhdGEuQ3VySW5jaVN0YXRlIHwgaHRtbCAlXSI+ICcKICAgICAgICAgICAgLiAnPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCB8IGh0bWwgJV0iPjwvc3Bhbj4gPC9kaXY+JywKCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEN1ckluY2lTaWduYWwgPT4gJEN1ckluY2lTaWduYWwsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgPT4gJENvbnRlbnQtPntDb250ZW50fSB8fCAnJywKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWhlYWQyIFNlbGVjdGFibGVPYmplY3RMaXN0KCkKCnJldHVybiBhbiBhcnJheSBoYXNoIHdpdGggc2VsZWN0LWFibGUgb2JqZWN0cwoKUmV0dXJuCgogICAgQFNlbGVjdGFibGVPYmplY3RMaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICBWYWx1ZSA9PiAnU2VydmljZScsCiAgICAgICAgfSwKICAgICk7CgogICAgQFNlbGVjdGFibGVPYmplY3RMaXN0ID0gJExpbmtPYmplY3QtPlNlbGVjdGFibGVPYmplY3RMaXN0KAogICAgICAgIFNlbGVjdGVkID0+ICRJZGVudGlmaWVyLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIFNlbGVjdGFibGVPYmplY3RMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGVjdGVkOwogICAgaWYgKCAkUGFyYW17U2VsZWN0ZWR9ICYmICRQYXJhbXtTZWxlY3RlZH0gZXEgJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0gKSB7CiAgICAgICAgJFNlbGVjdGVkID0gMTsKICAgIH0KCiAgICAjIG9iamVjdCBzZWxlY3QgbGlzdAogICAgbXkgQE9iamVjdFNlbGVjdExpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0fSwKICAgICAgICAgICAgVmFsdWUgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e1JlYWxuYW1lfSwKICAgICAgICAgICAgU2VsZWN0ZWQgPT4gJFNlbGVjdGVkLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiBAT2JqZWN0U2VsZWN0TGlzdDsKfQoKPWhlYWQyIFNlYXJjaE9wdGlvbkxpc3QoKQoKcmV0dXJuIGFuIGFycmF5IGhhc2ggd2l0aCBzZWFyY2ggb3B0aW9ucwoKUmV0dXJuCgogICAgQFNlYXJjaE9wdGlvbkxpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICAgPT4gJ05hbWUnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICBJbnB1dFN0cmcgPT4gJEZvcm1TdHJpbmcsCiAgICAgICAgICAgIEZvcm1EYXRhICA9PiAnU2VydmljZSBOYW1lJywKICAgICAgICB9LAogICAgKTsKCiAgICBAU2VhcmNoT3B0aW9uTGlzdCA9ICRMaW5rT2JqZWN0LT5TZWFyY2hPcHRpb25MaXN0KCk7Cgo9Y3V0CgpzdWIgU2VhcmNoT3B0aW9uTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2VhcmNoIG9wdGlvbiBsaXN0CiAgICBteSBAU2VhcmNoT3B0aW9uTGlzdCA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgPT4gJ05hbWUnLAogICAgICAgICAgICBOYW1lID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9ybWtleQogICAgZm9yIG15ICRSb3cgKEBTZWFyY2hPcHRpb25MaXN0KSB7CiAgICAgICAgJFJvdy0+e0Zvcm1LZXl9ID0gJ1NFQVJDSDo6JyAuICRSb3ctPntLZXl9OwogICAgfQoKICAgICMgYWRkIGZvcm0gZGF0YSBhbmQgaW5wdXQgc3RyaW5nCiAgICBST1c6CiAgICBmb3IgbXkgJFJvdyAoQFNlYXJjaE9wdGlvbkxpc3QpIHsKCiAgICAgICAgIyBnZXQgZm9ybSBkYXRhCiAgICAgICAgJFJvdy0+e0Zvcm1EYXRhfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICRSb3ctPntGb3JtS2V5fSApOwoKICAgICAgICAjIHBhcnNlIHRoZSBpbnB1dCB0ZXh0IGJsb2NrCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSW5wdXRUZXh0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAkUm93LT57Rm9ybUtleX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUm93LT57Rm9ybURhdGF9IHx8ICcnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgYWRkIHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICAkUm93LT57SW5wdXRTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0xpbmtPYmplY3QnLAogICAgICAgICk7CgogICAgICAgIG5leHQgUk9XOwogICAgfQoKICAgIHJldHVybiBAU2VhcmNoT3B0aW9uTGlzdDsKfQoKMTsK</File>
        <File Location="Kernel/Output/HTML/TicketZoom/TicketInformation.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBjYTUwZDllZTc3NGJmZDUzNzAxYjZjY2E1ZDkwM2VhNGEyNDkxZjE5IC0gS2VybmVsL091dHB1dC9IVE1ML1RpY2tldFpvb20vVGlja2V0SW5mb3JtYXRpb24ucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0Wm9vbTo6VGlja2V0SW5mb3JtYXRpb247Cgp1c2UgdjUuMjQ7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIG5hbWVzcGFjZTo6YXV0b2NsZWFuOwp1c2UgdXRmODsKCnVzZSBwYXJlbnQgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpCYXNlJzsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6Okxhbmd1YWdlICAgICAgICAgICAgICBxdyhUcmFuc2xhdGFibGUpOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNIYXNoUmVmV2l0aERhdGEpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkVXNlck9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICBteSAlVGlja2V0ICAgID0gJFBhcmFte1RpY2tldH0tPiUqOwogICAgbXkgJUFjbEFjdGlvbiA9ICRQYXJhbXtBY2xBY3Rpb259LT4lKjsKCiAgICAjIFNob3cgY3JlYXRlZCBieSBuYW1lLCBpZiBkaWZmZXJlbnQgdGhlbiByb290IHVzZXIgKElEPTEpLgogICAgaWYgKCAkVGlja2V0e0NyZWF0ZUJ5fSA+IDEgKSB7CiAgICAgICAgJFRpY2tldHtDcmVhdGVkQnlVc2VyfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSggVXNlcklEID0+ICRUaWNrZXR7Q3JlYXRlQnl9ICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0NyZWF0ZWRCeScsCiAgICAgICAgICAgIERhdGEgPT4geyVUaWNrZXR9LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkVGlja2V0e0FyY2hpdmVGbGFnfSBlcSAneScgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FyY2hpdmVGbGFnJywKICAgICAgICAgICAgRGF0YSA9PiB7ICVUaWNrZXQsICVBY2xBY3Rpb24gfSwKICAgICAgICApOwogICAgfQoKICAgICMgdGlja2V0IHR5cGUKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlR5cGUnKSApIHsKCiAgICAgICAgbXkgJVR5cGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpLT5UeXBlR2V0KAogICAgICAgICAgICBJRCA9PiAkVGlja2V0e1R5cGVJRH0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1R5cGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFZhbGlkID0+ICRUeXBle1ZhbGlkSUR9LAogICAgICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgICAgICVBY2xBY3Rpb24KICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgdGlja2V0IHNlcnZpY2UKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSAmJiAkVGlja2V0e1NlcnZpY2V9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgRGF0YSA9PiB7ICVUaWNrZXQsICVBY2xBY3Rpb24gfSwKICAgICAgICApOwoKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICAgICAjIGdldCBzZXJ2aWNlIGRhdGEKICAgICAgICBteSAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkVGlja2V0e1NlcnZpY2VJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tJyktPntTZXJ2aWNlSW5jaVN0YXRlU2lnbmFsfSApIHsKICAgICAgICAgICAgIyBzZXQgaW5jaWRlbnQgc2lnbmFsCiAgICAgICAgICAgIG15ICVJbmNpU2lnbmFscyA9ICgKICAgICAgICAgICAgICAgIG9wZXJhdGlvbmFsID0+ICdncmVlbmxlZCcsCiAgICAgICAgICAgICAgICB3YXJuaW5nICAgICA9PiAneWVsbG93bGVkJywKICAgICAgICAgICAgICAgIGluY2lkZW50ICAgID0+ICdyZWRsZWQnLAogICAgICAgICAgICAgICAgdW5rbm93biAgICAgPT4gJ2dyYXlsZWQnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlcnZpY2V7Q3VySW5jaVN0YXRlVHlwZX0gfHw9ICd1bmtub3duJzsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VydmljZUluY2lTaWduYWwnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgSW5jaVR5cGVDbGFzcyA9PiAkSW5jaVNpZ25hbHN7ICRTZXJ2aWNle0N1ckluY2lTdGF0ZVR5cGV9IH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkU2VydmljZXtDcml0aWNhbGl0eX0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VydmljZUNyaXRpY2FsaXR5JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVTZXJ2aWNlLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiMgRU8gSVRTTUNvcmUKCiAgICAgICAgaWYgKCAkVGlja2V0e1NMQX0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU0xBJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyAlVGlja2V0LCAlQWNsQWN0aW9uIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBmaXJzdCByZXNwb25zZSB0aW1lIGlmIG5lZWRlZAogICAgaWYgKCBkZWZpbmVkICRUaWNrZXR7Rmlyc3RSZXNwb25zZVRpbWV9ICkgewogICAgICAgICRUaWNrZXR7Rmlyc3RSZXNwb25zZVRpbWVIdW1hbn0gPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckFnZSgKICAgICAgICAgICAgQWdlICAgICAgICAgICAgICAgID0+ICRUaWNrZXR7Rmlyc3RSZXNwb25zZVRpbWV9LAogICAgICAgICAgICBUaW1lU2hvd0Fsd2F5c0xvbmcgPT4gMSwKICAgICAgICAgICAgU3BhY2UgICAgICAgICAgICAgID0+ICcgJywKICAgICAgICApOwogICAgICAgICRUaWNrZXR7Rmlyc3RSZXNwb25zZVRpbWVXb3JraW5nVGltZX0gPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckFnZSgKICAgICAgICAgICAgQWdlICAgICAgICAgICAgICAgID0+ICRUaWNrZXR7Rmlyc3RSZXNwb25zZVRpbWVXb3JraW5nVGltZX0sCiAgICAgICAgICAgIFRpbWVTaG93QWx3YXlzTG9uZyA9PiAxLAogICAgICAgICAgICBTcGFjZSAgICAgICAgICAgICAgPT4gJyAnLAogICAgICAgICk7CiAgICAgICAgaWYgKCA2MCAqIDYwICogMSA+ICRUaWNrZXR7Rmlyc3RSZXNwb25zZVRpbWV9ICkgewogICAgICAgICAgICAkVGlja2V0e0ZpcnN0UmVzcG9uc2VUaW1lQ2xhc3N9ID0gJ1dhcm5pbmcnOwogICAgICAgIH0KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRmlyc3RSZXNwb25zZVRpbWUnLAogICAgICAgICAgICBEYXRhID0+IHsgJVRpY2tldCwgJUFjbEFjdGlvbiB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IHVwZGF0ZSB0aW1lIGlmIG5lZWRlZAogICAgaWYgKCBkZWZpbmVkICRUaWNrZXR7VXBkYXRlVGltZX0gKSB7CiAgICAgICAgJFRpY2tldHtVcGRhdGVUaW1lSHVtYW59ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJBZ2UoCiAgICAgICAgICAgIEFnZSAgICAgICAgICAgICAgICA9PiAkVGlja2V0e1VwZGF0ZVRpbWV9LAogICAgICAgICAgICBUaW1lU2hvd0Fsd2F5c0xvbmcgPT4gMSwKICAgICAgICAgICAgU3BhY2UgICAgICAgICAgICAgID0+ICcgJywKICAgICAgICApOwogICAgICAgICRUaWNrZXR7VXBkYXRlVGltZVdvcmtpbmdUaW1lfSA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyQWdlKAogICAgICAgICAgICBBZ2UgICAgICAgICAgICAgICAgPT4gJFRpY2tldHtVcGRhdGVUaW1lV29ya2luZ1RpbWV9LAogICAgICAgICAgICBUaW1lU2hvd0Fsd2F5c0xvbmcgPT4gMSwKICAgICAgICAgICAgU3BhY2UgICAgICAgICAgICAgID0+ICcgJywKICAgICAgICApOwogICAgICAgIGlmICggNjAgKiA2MCAqIDEgPiAkVGlja2V0e1VwZGF0ZVRpbWV9ICkgewogICAgICAgICAgICAkVGlja2V0e1VwZGF0ZVRpbWVDbGFzc30gPSAnV2FybmluZyc7CiAgICAgICAgfQogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdVcGRhdGVUaW1lJywKICAgICAgICAgICAgRGF0YSA9PiB7ICVUaWNrZXQsICVBY2xBY3Rpb24gfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBzb2x1dGlvbiB0aW1lIGlmIG5lZWRlZAogICAgaWYgKCBkZWZpbmVkICRUaWNrZXR7U29sdXRpb25UaW1lfSApIHsKICAgICAgICAkVGlja2V0e1NvbHV0aW9uVGltZUh1bWFufSA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyQWdlKAogICAgICAgICAgICBBZ2UgICAgICAgICAgICAgICAgPT4gJFRpY2tldHtTb2x1dGlvblRpbWV9LAogICAgICAgICAgICBUaW1lU2hvd0Fsd2F5c0xvbmcgPT4gMSwKICAgICAgICAgICAgU3BhY2UgICAgICAgICAgICAgID0+ICcgJywKICAgICAgICApOwogICAgICAgICRUaWNrZXR7U29sdXRpb25UaW1lV29ya2luZ1RpbWV9ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJBZ2UoCiAgICAgICAgICAgIEFnZSAgICAgICAgICAgICAgICA9PiAkVGlja2V0e1NvbHV0aW9uVGltZVdvcmtpbmdUaW1lfSwKICAgICAgICAgICAgVGltZVNob3dBbHdheXNMb25nID0+IDEsCiAgICAgICAgICAgIFNwYWNlICAgICAgICAgICAgICA9PiAnICcsCiAgICAgICAgKTsKICAgICAgICBpZiAoIDYwICogNjAgKiAxID4gJFRpY2tldHtTb2x1dGlvblRpbWV9ICkgewogICAgICAgICAgICAkVGlja2V0e1NvbHV0aW9uVGltZUNsYXNzfSA9ICdXYXJuaW5nJzsKICAgICAgICB9CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NvbHV0aW9uVGltZScsCiAgICAgICAgICAgIERhdGEgPT4geyAlVGlja2V0LCAlQWNsQWN0aW9uIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgbnVtYmVyIG9mIHRpY2tldHMgd2l0aCB0aGUgc2FtZSBjdXN0b21lciBpZCBpZiBmZWF0dXJlIGlzIGFjdGl2ZToKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpab29tQ3VzdG9tZXJUaWNrZXRzJykgKSB7CiAgICAgICAgaWYgKCAkVGlja2V0e0N1c3RvbWVySUR9ICkgewogICAgICAgICAgICAkVGlja2V0e0N1c3RvbWVySURUaWNrZXRzfSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJFRpY2tldHtDdXN0b21lcklEfSwKICAgICAgICAgICAgICAgIFJlc3VsdCAgICAgPT4gJ0NPVU5UJywKICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gJ3JvJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0N1c3RvbWVySURUaWNrZXRzJywKICAgICAgICAgICAgICAgIERhdGEgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyB0b3RhbCBhY2NvdW50ZWQgdGltZSBpZiBmZWF0dXJlIGlzIGFjdGl2ZToKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBY2NvdW50VGltZScpICkgewogICAgICAgICRUaWNrZXR7VGlja2V0VGltZVVuaXRzfSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRlZFRpbWVHZXQoJVRpY2tldCk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RvdGFsQWNjb3VudGVkVGltZScsCiAgICAgICAgICAgIERhdGEgPT4gXCVUaWNrZXQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgcGVuZGluZyB1bnRpbCwgaWYgc2V0OgogICAgaWYgKCAkVGlja2V0e1VudGlsVGltZX0gKSB7CiAgICAgICAgaWYgKCAkVGlja2V0e1VudGlsVGltZX0gPCAtMSApIHsKICAgICAgICAgICAgJFRpY2tldHtQZW5kaW5nVW50aWxDbGFzc30gPSAnV2FybmluZyc7CiAgICAgICAgfQoKICAgICAgICBteSAkQ3VyU3lzRFRPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgICAgICAkVGlja2V0e1VudGlsVGltZUh1bWFufSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgRXBvY2ggPT4gKCAkVGlja2V0e1VudGlsVGltZX0gKyAkQ3VyU3lzRFRPYmplY3QtPlRvRXBvY2goKSApLAogICAgICAgICAgICB9LAogICAgICAgICktPlRvU3RyaW5nKCk7CgogICAgICAgICRUaWNrZXR7UGVuZGluZ1VudGlsfSAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckFnZSgKICAgICAgICAgICAgQWdlICAgPT4gJFRpY2tldHtVbnRpbFRpbWV9LAogICAgICAgICAgICBTcGFjZSA9PiAnICcKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQZW5kaW5nVW50aWwnLAogICAgICAgICAgICBEYXRhID0+IFwlVGlja2V0LAogICAgICAgICk7CiAgICB9CgogICAgIyBDaGVjayBpZiBhZ2VudCBoYXMgcGVybWlzc2lvbiB0byBzdGFydCBjaGF0cyB3aXRoIGFnZW50cy4KICAgIG15ICRFbmFibGVDaGF0ICAgICAgICAgICAgICAgICAgICAgICAgPSAxOwogICAgbXkgJENoYXRTdGFydGluZ0FnZW50c0dyb3VwICAgICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnQ2hhdEVuZ2luZTo6UGVybWlzc2lvbkdyb3VwOjpDaGF0U3RhcnRpbmdBZ2VudHMnKSAgfHwgJ3VzZXJzJzsKICAgIG15ICRDaGF0UmVjZWl2aW5nQWdlbnRzR3JvdXAgICAgICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoYXRFbmdpbmU6OlBlcm1pc3Npb25Hcm91cDo6Q2hhdFJlY2VpdmluZ0FnZW50cycpIHx8ICd1c2Vycyc7CiAgICBteSAkQ2hhdFN0YXJ0aW5nQWdlbnRzR3JvdXBQZXJtaXNzaW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25DaGVjaygKICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIEdyb3VwTmFtZSA9PiAkQ2hhdFN0YXJ0aW5nQWdlbnRzR3JvdXAsCiAgICAgICAgVHlwZSAgICAgID0+ICdydycsCiAgICApOwoKICAgIGlmICggISRDb25maWdPYmplY3QtPkdldCgnQ2hhdEVuZ2luZTo6QWN0aXZlJykgfHwgISRDaGF0U3RhcnRpbmdBZ2VudHNHcm91cFBlcm1pc3Npb24gKSB7CiAgICAgICAgJEVuYWJsZUNoYXQgPSAwOwogICAgfQogICAgaWYgKAogICAgICAgICRFbmFibGVDaGF0CiAgICAgICAgJiYgISRDb25maWdPYmplY3QtPkdldCgnQ2hhdEVuZ2luZTo6Q2hhdERpcmVjdGlvbjo6QWdlbnRUb0FnZW50JykKICAgICAgICApCiAgICB7CiAgICAgICAgJEVuYWJsZUNoYXQgPSAwOwogICAgfQoKICAgIG15ICVPbmxpbmVEYXRhOwogICAgaWYgKCRFbmFibGVDaGF0KSB7CiAgICAgICAgbXkgJFZpZGVvQ2hhdEVuYWJsZWQgICAgICAgICAgICAgICA9IDA7CiAgICAgICAgbXkgJFZpZGVvQ2hhdEFnZW50c0dyb3VwICAgICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnQ2hhdEVuZ2luZTo6UGVybWlzc2lvbkdyb3VwOjpWaWRlb0NoYXRBZ2VudHMnKSB8fCAndXNlcnMnOwogICAgICAgIG15ICRWaWRlb0NoYXRBZ2VudHNHcm91cFBlcm1pc3Npb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvbkNoZWNrKAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBHcm91cE5hbWUgPT4gJFZpZGVvQ2hhdEFnZW50c0dyb3VwLAogICAgICAgICAgICBUeXBlICAgICAgPT4gJ3J3JywKICAgICAgICApOwoKICAgICAgICAjIEVuYWJsZSB0aGUgdmlkZW8gY2hhdCBmZWF0dXJlIGlmIHN5c3RlbSBpcyBlbnRpdGxlZCBhbmQgYWdlbnQgaXMgYSBtZW1iZXIgb2YgY29uZmlndXJlZCBncm91cC4KICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnQ2hhdEVuZ2luZTo6QWN0aXZlJykgJiYgJFZpZGVvQ2hhdEFnZW50c0dyb3VwUGVybWlzc2lvbiApIHsKICAgICAgICAgICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAnS2VybmVsOjpTeXN0ZW06OlZpZGVvQ2hhdCcsIFNpbGVudCA9PiAxICkgKSB7CiAgICAgICAgICAgICAgICAkVmlkZW9DaGF0RW5hYmxlZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWaWRlb0NoYXQnKS0+SXNFbmFibGVkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEZJRUxEOgogICAgICAgIGZvciBteSAkRmllbGQgKHF3KE93bmVySUQgUmVzcG9uc2libGVJRCkpIHsKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAhJFRpY2tldHskRmllbGR9OwogICAgICAgICAgICBuZXh0IEZJRUxEIGlmICRGaWVsZCBlcSAnUmVzcG9uc2libGVJRCcgJiYgISRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpSZXNwb25zaWJsZScpOwoKICAgICAgICAgICAgbXkgJFVzZXJJRCA9ICRUaWNrZXR7JEZpZWxkfTsKCiAgICAgICAgICAgICRPbmxpbmVEYXRheyRGaWVsZH0tPntFbmFibGVDaGF0fSAgICAgICAgID0gJEVuYWJsZUNoYXQ7CiAgICAgICAgICAgICRPbmxpbmVEYXRheyRGaWVsZH0tPntBZ2VudEVuYWJsZUNoYXR9ICAgID0gMDsKICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e0NoYXRBY2Nlc3N9ICAgICAgICAgPSAwOwogICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57VmlkZW9DaGF0QXZhaWxhYmxlfSA9IDA7CiAgICAgICAgICAgICRPbmxpbmVEYXRheyRGaWVsZH0tPntWaWRlb0NoYXRTdXBwb3J0fSAgID0gMDsKICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e1ZpZGVvQ2hhdEVuYWJsZWR9ICAgPSAkVmlkZW9DaGF0RW5hYmxlZDsKCiAgICAgICAgICAgICMgRGVmYXVsdCBzdGF0dXMgaXMgb2ZmbGluZS4KICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e1VzZXJTdGF0ZX0gICAgICAgICAgICA9IFRyYW5zbGF0YWJsZSgnT2ZmbGluZScpOwogICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57VXNlclN0YXRlRGVzY3JpcHRpb259ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdVc2VyIGlzIGN1cnJlbnRseSBvZmZsaW5lLicpOwoKICAgICAgICAgICAgIyBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHJlY2VpdmluZyBhZ2VudCBoYXMgY2hhdCBwZXJtaXNzaW9ucy4KICAgICAgICAgICAgbXkgJVVzZXJHcm91cHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvblVzZXJHZXQoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJVVzZXJHcm91cHNSZXZlcnNlID0gcmV2ZXJzZSAlVXNlckdyb3VwczsKICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e0NoYXRBY2Nlc3N9ID0gJFVzZXJHcm91cHNSZXZlcnNleyRDaGF0UmVjZWl2aW5nQWdlbnRzR3JvdXB9ID8gMSA6IDA7CgogICAgICAgICAgICBteSAlVXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICApOwogICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57VmlkZW9DaGF0U3VwcG9ydH0gPSAkVXNlcntWaWRlb0NoYXRIYXNXZWJSVEN9OwoKICAgICAgICAgICAgIyBDaGVjayBhZ2VudCdzIGF2YWlsYWJpbGl0eS4KICAgICAgICAgICAgaWYgKCAkT25saW5lRGF0YXskRmllbGR9LT57Q2hhdEFjY2Vzc30gKSB7CiAgICAgICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57QWdlbnRDaGF0QXZhaWxhYmlsaXR5fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGF0JyktPkFnZW50QXZhaWxhYmlsaXR5R2V0KAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICAgICAgICAgICAgICAgICAgRXh0ZXJuYWwgPT4gMCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAkT25saW5lRGF0YXskRmllbGR9LT57QWdlbnRDaGF0QXZhaWxhYmlsaXR5fSA9PSAzICkgewogICAgICAgICAgICAgICAgICAgICRPbmxpbmVEYXRheyRGaWVsZH0tPntVc2VyU3RhdGV9ICAgICAgICAgICAgPSBUcmFuc2xhdGFibGUoJ0FjdGl2ZScpOwogICAgICAgICAgICAgICAgICAgICRPbmxpbmVEYXRheyRGaWVsZH0tPntBZ2VudEVuYWJsZUNoYXR9ICAgICAgPSAxOwogICAgICAgICAgICAgICAgICAgICRPbmxpbmVEYXRheyRGaWVsZH0tPntVc2VyU3RhdGVEZXNjcmlwdGlvbn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1VzZXIgaXMgY3VycmVudGx5IGFjdGl2ZS4nKTsKICAgICAgICAgICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57VmlkZW9DaGF0QXZhaWxhYmxlfSAgID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJE9ubGluZURhdGF7JEZpZWxkfS0+e0FnZW50Q2hhdEF2YWlsYWJpbGl0eX0gPT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57VXNlclN0YXRlfSAgICAgICAgICAgID0gVHJhbnNsYXRhYmxlKCdBd2F5Jyk7CiAgICAgICAgICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e0FnZW50RW5hYmxlQ2hhdH0gICAgICA9IDE7CiAgICAgICAgICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e1VzZXJTdGF0ZURlc2NyaXB0aW9ufSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVXNlciB3YXMgaW5hY3RpdmUgZm9yIGEgd2hpbGUuJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRPbmxpbmVEYXRheyRGaWVsZH0tPntBZ2VudENoYXRBdmFpbGFiaWxpdHl9ID09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e1VzZXJTdGF0ZX0gICAgICAgICAgICA9IFRyYW5zbGF0YWJsZSgnVW5hdmFpbGFibGUnKTsKICAgICAgICAgICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57VXNlclN0YXRlRGVzY3JpcHRpb259ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdVc2VyIHNldCB0aGVpciBzdGF0dXMgdG8gdW5hdmFpbGFibGUuJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBvd25lciBpbmZvCiAgICB7CiAgICAgICAgbXkgJU93bmVySW5mbyA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRUaWNrZXR7T3duZXJJRH0sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3duZXInLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICAgICAlT3duZXJJbmZvLAogICAgICAgICAgICAgICAgJUFjbEFjdGlvbiwKICAgICAgICAgICAgICAgICggJE9ubGluZURhdGF7T3duZXJJRH0gLy8ge30gKS0+JSosCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpSZXNwb25zaWJsZScpICkgewoKICAgICAgICAjIHNob3cgcmVzcG9uc2libGUKICAgICAgICBteSAlUmVzcG9uc2libGVJbmZvID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJFRpY2tldHtSZXNwb25zaWJsZUlEfSB8fCAxLAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSZXNwb25zaWJsZScsCiAgICAgICAgICAgIERhdGEgPT4geyAlVGlja2V0LCAlUmVzcG9uc2libGVJbmZvLCAlQWNsQWN0aW9uLCAleyAkT25saW5lRGF0YXtSZXNwb25zaWJsZUlEfSAvLyB7fSB9IH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBkaXNwbGF5IG9wdGlvbnMKICAgICRQYXJhbXtXaWRnZXRUaXRsZX0gPSBUcmFuc2xhdGFibGUoJ1RpY2tldCBJbmZvcm1hdGlvbicpOwogICAgJFBhcmFte0hvb2t9ICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rJykgfHwgJ1RpY2tldCMnOwoKICAgICMgY2hlY2sgaWYgdGlja2V0IGlzIG5vcm1hbCBvciBwcm9jZXNzIHRpY2tldAogICAgbXkgJElzUHJvY2Vzc1RpY2tldCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0Q2hlY2tGb3JQcm9jZXNzVHlwZSgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfQogICAgKTsKCiAgICAjIGdldCB6b29tIHNldHRpbmdzIGRlcGVuZGluZyBvbiB0aWNrZXQgdHlwZQogICAgJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9ID0gJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20iKTsKCiAgICAjIG92ZXJ3cml0ZSBkaXNwbGF5IG9wdGlvbnMgZm9yIHByb2Nlc3MgdGlja2V0CiAgICBpZiAoJElzUHJvY2Vzc1RpY2tldCkgewogICAgICAgICRQYXJhbXtXaWRnZXRUaXRsZX0gPSAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc30tPntQcm9jZXNzRGlzcGxheX0tPntXaWRnZXRUaXRsZX07CiAgICB9CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCBjb25maWcgZm9yIGZyb250ZW5kIG1vZHVsZQogICAgbXkgJER5bmFtaWNGaWVsZEZpbHRlciA9IHsKICAgICAgICBJc0hhc2hSZWZXaXRoRGF0YSggJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e0R5bmFtaWNGaWVsZFdpZGdldERpc3BsYXl9ICkKICAgICAgICA/ICV7CiAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tIikKICAgICAgICAgICAgICAgIC0+e0R5bmFtaWNGaWVsZFdpZGdldER5bmFtaWNGaWVsZH0KICAgICAgICAgICAgICAgIHx8IHt9CiAgICAgICAgICAgIH0KICAgICAgICA6ICgpLAogICAgICAgICRJc1Byb2Nlc3NUaWNrZXQKICAgICAgICA/ICV7CiAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tIikKICAgICAgICAgICAgICAgIC0+e1Byb2Nlc3NXaWRnZXREeW5hbWljRmllbGR9CiAgICAgICAgICAgICAgICB8fCB7fQogICAgICAgICAgICB9CiAgICAgICAgOiAoKSwKICAgICAgICAleyAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Wm9vbSIpLT57RHluYW1pY0ZpZWxkfSB8fCB7fSB9LAogICAgfTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRpY2tldCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbJ1RpY2tldCddLAogICAgICAgIEZpZWxkRmlsdGVyID0+ICREeW5hbWljRmllbGRGaWx0ZXIgfHwge30sCiAgICApOwogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgIyB0byBzdG9yZSBkeW5hbWljIGZpZWxkcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHByb2Nlc3Mgd2lkZ2V0IGFuZCBpbiB0aGUgc2lkZWJhcgogICAgbXkgKEBGaWVsZHNTaWRlYmFyKTsKCiAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aWNrZXQgb2JqZWN0CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoICREeW5hbWljRmllbGQtPkAqICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIHVubGVzcyBJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCB1bmxlc3MgZGVmaW5lZCAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSBlcSAnJzsKCiAgICAgICAgIyBDaGVjayBpZiB0aGlzIGZpZWxkIGlzIHN1cHBvc2VkIHRvIGJlIGhpZGRlbiBmcm9tIHRoZSB0aWNrZXQgaW5mb3JtYXRpb24gYm94LgogICAgICAgICMgICBGb3IgZXhhbXBsZSwgaXQncyBkaXNwbGF5ZWQgYnkgYSBkaWZmZXJlbnQgbWVjaGFuaXNtIChpLmUuIGFzeW5jIHdpZGdldCkuCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYKICAgICAgICAgICAgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzSGlkZGVuSW5UaWNrZXRJbmZvcm1hdGlvbicsCiAgICAgICAgICAgICk7CgogICAgICAgICMgdXNlIHRyYW5zbGF0aW9uIGhlcmUgdG8gYmUgYWJsZSB0byByZWR1Y2UgdGhlIGNoYXJhY3RlciBsZW5ndGggaW4gdGhlIHRlbXBsYXRlCiAgICAgICAgbXkgJExhYmVsID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9ICk7CgogICAgICAgIG15ICRWYWx1ZVN0cmcgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRUaWNrZXR7IkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0ifSwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgIFZhbHVlTWF4Q2hhcnMgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkR5bmFtaWNGaWVsZHNab29tTWF4U2l6ZVNpZGViYXInKSB8fCAxOCwgICAgIyBsaW1pdCBmb3Igc2lkZWJhciBkaXNwbGF5CiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc30tPntEeW5hbWljRmllbGR9LT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICkgewogICAgICAgICAgICBwdXNoIEBGaWVsZHNTaWRlYmFyLCB7CiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgTGFiZWwgICAgICAgICAgICAgICAgICAgICAgID0+ICRMYWJlbCwKICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua30sCiAgICAgICAgICAgICAgICBMaW5rUHJldmlldyAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e0xpbmtQcmV2aWV3fSwKICAgICAgICAgICAgICAgIEZpZWxkVHlwZSAgICAgICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57RmllbGRUeXBlfSwKICAgICAgICAgICAgICAgIFRpdGxlRmllbGRDb25maWcgICAgICAgICAgICA9PiAoICREeW5hbWljRmllbGRDb25maWctPntGaWVsZFR5cGV9IGVxICdUaXRsZScgKSA/ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9IDogdW5kZWYsCgogICAgICAgICAgICAgICAgIyBJbmNsdWRlIHVuaXF1ZSBwYXJhbWV0ZXIgd2l0aCBkeW5hbWljIGZpZWxkIG5hbWUgaW4gY2FzZSBvZiBjb2xsaXNpb24gd2l0aCBvdGhlcnMuCiAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyREeW5hbWljRmllbGRDb25maWctPntOYW1lfSIgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICMgZXhhbXBsZSBvZiBkeW5hbWljIGZpZWxkcyBvcmRlciBjdXN0b21pemF0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldER5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIExhYmVsID0+ICRMYWJlbCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0RHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAnX1BsYWluJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IGR5bmFtaWMgZmllbGRzIGluIHRoZSBzaWRlYmFyCiAgICBGSUVMRDoKICAgIGZvciBteSAkRmllbGQgKEBGaWVsZHNTaWRlYmFyKSB7CgogICAgICAgICMgY2hlY2sgU2V0IGZpZWxkIGJlaGF2aW9yIHRvIGluY2x1ZGUgbGVuc2VzIG9uIFNldHMKICAgICAgICBteSAkRmllbGRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgTmFtZSA9PiAkRmllbGQtPntOYW1lfSwKICAgICAgICApOwogICAgICAgIG15ICRJc1NldEZpZWxkID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJEZpZWxkQ29uZmlnLAogICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzU2V0RmllbGQnLAogICAgICAgICk7CgogICAgICAgICMgaGFuZGxlIHRpdGxlcyBzZXBhcmF0ZWx5CiAgICAgICAgaWYgKCAkRmllbGQtPntUaXRsZUZpZWxkQ29uZmlnfSApIHsKICAgICAgICAgICAgbXkgJFN0eWxlID0gInBhZGRpbmctbGVmdDo0cHg7Zm9udC1zaXplOiRGaWVsZC0+e1RpdGxlRmllbGRDb25maWd9e0ZvbnRTaXplfXB4O2NvbG9yOiRGaWVsZC0+e1RpdGxlRmllbGRDb25maWd9e0ZvbnRDb2xvcn07IjsKCiAgICAgICAgICAgIGlmICggJEZpZWxkLT57VGl0bGVGaWVsZENvbmZpZ317Q0JGb250U3R5bGVVbmRlckxpbmVWYWx1ZX0gKSB7CiAgICAgICAgICAgICAgICAkU3R5bGUgLj0gInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRGaWVsZC0+e1RpdGxlRmllbGRDb25maWd9e0NCRm9udFN0eWxlSXRhbGljVmFsdWV9ICkgewogICAgICAgICAgICAgICAgJFN0eWxlIC49ICJmb250LXN0eWxlOml0YWxpYzsiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggJEZpZWxkLT57VGl0bGVGaWVsZENvbmZpZ317Q0JGb250U3R5bGVCb2xkVmFsdWV9ICkgewogICAgICAgICAgICAgICAgJFN0eWxlIC49ICJmb250LXdlaWdodDpib2xkOyI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0RHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgIFN0eWxlICAgICAgPT4gJFN0eWxlLAogICAgICAgICAgICAgICAgICAgIFRpdGxlRmllbGQgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoJElzU2V0RmllbGQpIHsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0RHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIExhYmVsICAgICA9PiAkRmllbGQtPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRGaWVsZC0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICBIVE1MVmFsdWUgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldER5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTGFiZWwgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIGlmICggJEZpZWxkLT57TGlua30gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0RHluYW1pY0ZpZWxkTGluaycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAkRmllbGQtPntOYW1lfSA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgJVRpY2tldCwKCiAgICAgICAgICAgICAgICAgICAgIyBhbGlhcyBmb3IgdGlja2V0IHRpdGxlLCBUaXRsZSB3aWxsIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICAgICAgICAgICAgVGlja2V0VGl0bGUgPT4gJFRpY2tldHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgPT4gJEZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICA9PiAkRmllbGQtPntMaW5rfSwKICAgICAgICAgICAgICAgICAgICBMaW5rUHJldmlldyA9PiAkRmllbGQtPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRGaWVsZC0+e05hbWV9IiA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXREeW5hbWljRmllbGRQbGFpbicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRmllbGQtPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0Wm9vbS9UaWNrZXRJbmZvcm1hdGlvbicsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsgJVBhcmFtLCAlVGlja2V0LCAlQWNsQWN0aW9uIH0sCiAgICApOwoKICAgIHJldHVybiB7CiAgICAgICAgT3V0cHV0ID0+ICRPdXRwdXQsCiAgICB9Owp9CgoxOwo=</File>
        <File Location="Kernel/Output/JavaScript/Templates/Standard/Agent/ITSMCore/LoadingDialog.html.tmpl" Permission="660" Encode="Base64">PGRpdiBjbGFzcz0iU3BhY2luZyBDZW50ZXIiPgogICAgPHNwYW4gY2xhc3M9IkFKQVhMb2FkZXIiIHRpdGxlPSJ7eyBTcGFuVGl0bGUgfCBUcmFuc2xhdGUgfX0iPjwvc3Bhbj4KPC9kaXY+Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AdminITSMCIPAllocate.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMSBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSDihpQgSW1wYWN0IOKGlCBQcmlvcml0eSIpIHwgaHRtbCAlXTwvaDE+CgogICAgWyUgQnJlYWRjcnVtYlBhdGggPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gVHJhbnNsYXRlKCdDcml0aWNhbGl0eSDihpQgSW1wYWN0IOKGlCBQcmlvcml0eScpLAogICAgICAgICAgICAgICAgTGluayA9PiBFbnYoIkFjdGlvbiIpLAogICAgICAgICAgICB9LAogICAgICAgIF0KICAgICVdCgogICAgWyUgSU5DTFVERSAiQnJlYWRjcnVtYi50dCIgUGF0aCA9IEJyZWFkY3J1bWJQYXRoICVdCgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj48aDI+WyUgVHJhbnNsYXRlKCJOb3RlIikgfCBodG1sICVdPC9oMj48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSDihpQgSW1wYWN0LiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJQcmlvcml0eSBhbGxvY2F0aW9uIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iQ0lQQWxsb2NhdGUiLz4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBEYXRhVGFibGVOb0hpZ2hsaWdodCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyQ29sdW1uRGVzY3JpcHRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuT2JqZWN0VHlwZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckNvbHVtbkRlc2NyaXB0aW9uIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyQ2VsbCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5PYmplY3RPcHRpb24pIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJDZWxsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KClslIFJlbmRlckJsb2NrU3RhcnQoIlJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkRlc2NyaXB0aW9uQ2VsbCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5PYmplY3RPcHRpb24pIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJEZXNjcmlwdGlvbkNlbGwiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDb250ZW50Q2VsbCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiQ29udGVudENlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AgU2F2ZUJ1dHRvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIkNhbmNlbCIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo=</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AdminService.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2Mzk3ZjM2ZmYwOWQwODVlNGMzMWQ1ZGRhNDExMGE3MzMxOWY5MDZkIC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pblNlcnZpY2UudHQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMSBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIE1hbmFnZW1lbnQiKSB8IGh0bWwgJV08L2gxPgoKICAgIFslIEJyZWFkY3J1bWJQYXRoID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFRyYW5zbGF0ZSgnU2VydmljZSBNYW5hZ2VtZW50JyksCiAgICAgICAgICAgICAgICBMaW5rID0+IEVudigiQWN0aW9uIiksCiAgICAgICAgICAgIH0sCiAgICAgICAgXQogICAgJV0KCiAgICBbJSBJRiBEYXRhLlNlcnZpY2VJRCA9PSAiTkVXIiAgJV0KICAgICAgICBbJSBCcmVhZGNydW1iUGF0aC5wdXNoKHsgTmFtZSA9PiBUcmFuc2xhdGUoIkFkZCBTZXJ2aWNlIiksfSkgJV0KICAgIFslIEVMU0lGIERhdGEuU2VydmljZUlEICVdCiAgICAgICAgWyUgVVNFIEVkaXRUaXRsZSA9IFN0cmluZyhUcmFuc2xhdGUoIkVkaXQgU2VydmljZSIpKSAlXQogICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IEVkaXRUaXRsZS5hcHBlbmQoICc6ICcsIERhdGEuU2VydmljZU5hbWUgKSB9KSAlXQogICAgWyUgRU5EICVdCgogICAgWyUgSU5DTFVERSAiQnJlYWRjcnVtYi50dCIgUGF0aCA9IEJyZWFkY3J1bWJQYXRoICVdCgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkluY2x1ZGVJbnZhbGlkIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRmlsdGVyIGJ5IHZhbGlkIHN0YXRlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iSW5jbHVkZUludmFsaWQiIG5hbWU9IkluY2x1ZGVJbnZhbGlkIiB2YWx1ZT0iMSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiSW5jbHVkZSBpbnZhbGlkIHNlcnZpY2VzIikgfCBodG1sICVdIiBbJSBEYXRhLkluY2x1ZGVJbnZhbGlkQ2hlY2tlZCB8IGh0bWwgJV0vPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iSW5jbHVkZUludmFsaWQiPlslIFRyYW5zbGF0ZSgiSW5jbHVkZSBpbnZhbGlkIHNlcnZpY2VzIikgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbmNsdWRlSW52YWxpZCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWxlZnQiPjwvaT5bJSBUcmFuc2xhdGUoIkdvIHRvIG92ZXJ2aWV3IikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25BZGQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVNlcnZpY2VFZGl0O1NlcnZpY2VJRD1ORVciIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIj48L2k+WyUgVHJhbnNsYXRlKCJBZGQgU2VydmljZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkxpc3QiKSAlXQogICAgICAgIDwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRmlsdGVyIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPjxsYWJlbCBmb3I9IkZpbHRlclNlcnZpY2VzIj5bJSBUcmFuc2xhdGUoIkZpbHRlciBmb3IgU2VydmljZXMiKSB8IGh0bWwgJV08L2xhYmVsPjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iRmlsdGVyU2VydmljZXMiIGNsYXNzPSJGaWx0ZXJCb3giIHBsYWNlaG9sZGVyPSJbJSBUcmFuc2xhdGUoIkp1c3Qgc3RhcnQgdHlwaW5nIHRvIGZpbHRlci4uLiIpIHwgaHRtbCAlXSIgbmFtZT0iRmlsdGVyU2VydmljZXMiIHZhbHVlPSIiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkZpbHRlciBmb3Igc2VydmljZXMiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkZpbHRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkltcG9ydEV4cG9ydFdpZGdldCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0nV2lkZ2V0U2ltcGxlJyBpZD0nU2VydmljZUltcG9ydEV4cG9ydFdpZGdldCc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9J0hlYWRlcic+CiAgICAgICAgICAgICAgICA8aDEgY2xhc3M9IkludmlzaWJsZVRleHQiPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiSW1wb3J0IC8gRXhwb3J0IikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L2gxPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoID0gWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBUcmFuc2xhdGUoJ0ltcG9ydCAvIEV4cG9ydCcpLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICVdCgogICAgICAgICAgICBbJSBJTkNMVURFICJCcmVhZGNydW1iLnR0IiBQYXRoID0gQnJlYWRjcnVtYlBhdGggJV0KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9J0NvbnRlbnQnPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9J0ZpZWxkRXhwbGFuYXRpb24nPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgnSGVyZSB5b3UgY2FuIHVwbG9hZCBhIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBpbXBvcnQgc2VydmljZXMgdG8geW91ciBzeXN0ZW0uIFRoZSBmaWxlIG5lZWRzIHRvIGJlIGluIC55bWwgZm9ybWF0IGFzIGV4cG9ydGVkIGJ5IHRoZSBzZXJ2aWNlIG1hbmFnZW1lbnQgbW9kdWxlLicpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSdBY3Rpb25MaXN0IFNwYWNpbmdUb3AnPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSdbJSBFbnYoIkNHSUhhbmRsZSIpICVdJyBtZXRob2Q9J3Bvc3QnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnIGNsYXNzPSdWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J0NoYWxsZW5nZVRva2VuJyB2YWx1ZT1bJSBFbnYoIlVzZXJDaGFsbGVuZ2VUb2tlbiIpIHwgSlNPTiAlXT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J0FjdGlvbicgdmFsdWU9J0FkbWluU2VydmljZUltcG9ydEV4cG9ydCcvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nU3ViYWN0aW9uJyB2YWx1ZT0nSW1wb3J0Jy8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0nRmlsZVVwbG9hZCcgaWQ9J0ZpbGVVcGxvYWQnIHR5cGU9J2ZpbGUnIHNpemU9JzE4JyBjbGFzcz0nRml4ZWQgVzEwMHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuRmlsZVVwbG9hZEludmFsaWQgfCBodG1sICVdJy8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSdGaWxlVXBsb2FkRXJyb3InIGNsYXNzPSdUb29sdGlwRXJyb3JNZXNzYWdlJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0nRmlsZVVwbG9hZFNlcnZlckVycm9yJyBjbGFzcz0nVG9vbHRpcEVycm9yTWVzc2FnZSc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgVHJhbnNsYXRlKCdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSdTcGFjaW5nVG9wJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0nY2hlY2tib3gnIGlkPSdPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzRXhhbXBsZScgbmFtZT0nT3ZlcndyaXRlRXhpc3RpbmdFbnRpdGllcycgdmFsdWU9JzEnLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSdPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzRXhhbXBsZSc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgnT3ZlcndyaXRlIGV4aXN0aW5nIGVudGl0aWVzJykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSdDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciBTcGFjaW5nVG9wJyBpZD0nU2VydmljZUltcG9ydCcgdHlwZT0nc3VibWl0Jz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0nZmEgZmEtdXBsb2FkJz48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgnU2VydmljZXMgSW1wb3J0JykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0nWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFkbWluU2VydmljZUltcG9ydEV4cG9ydDtTdWJhY3Rpb249RXhwb3J0JyBpZD0nU2VydmljZUV4cG9ydCcgY2xhc3M9J0NhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSdmYSBmYS1kb3dubG9hZCc+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgnU2VydmljZXMgRXhwb3J0JykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbXBvcnRFeHBvcnRXaWRnZXQiKSAlXQogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdMaXN0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiIGlkPSJTZXJ2aWNlcyI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJObyBkYXRhIGZvdW5kLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRGF0YUZvdW5kTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdMaXN0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIFslIElGIERhdGEuVmFsaWRJRCAhPSAxJV1jbGFzcz0iSW52YWxpZCJbJSBFTkQgJV0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIERhdGEuTGV2ZWxTcGFjZSB8IGh0bWwgJV08YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVNlcnZpY2VFZGl0O1NlcnZpY2VJRD1bJSBEYXRhLlNlcnZpY2VJRCB8IHVyaSAlXSI+WyUgRGF0YS5OYW1lIHwgdHJ1bmNhdGUoODApIHwgaHRtbCAlXTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgyMCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0xpc3RSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkZpbHRlck1lc3NhZ2UgSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI1Ij5bJSBUcmFuc2xhdGUoIk5vIG1hdGNoZXMgZm91bmQuIikgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdMaXN0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VFZGl0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgWyUgSUYgRGF0YS5TZXJ2aWNlSUQgPT0gJ05FVycgJV0KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFkZCBTZXJ2aWNlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRWRpdCBTZXJ2aWNlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTZXJ2aWNlU2F2ZSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNlcnZpY2VJRCIgdmFsdWU9IlslIERhdGEuU2VydmljZUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuU2VydmljZUlEICE9ICdORVcnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNvbnRpbnVlQWZ0ZXJTYXZlIiBpZD0iQ29udGludWVBZnRlclNhdmUiIHZhbHVlPSIiLz4KICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTmFtZSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgdmFsdWU9IlslIERhdGEuTmFtZVNob3J0IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuTmFtZUludmFsaWQgfCBodG1sICVdIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLkxvbmdOYW1lICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIiA+PHA+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIG5hbWUgbWF4aW11bSBsZW5ndGggaXMgMjAwIGNoYXJhY3RlcnMgKHdpdGggU3ViLXNlcnZpY2UpLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiID48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJQYXJlbnRJRCI+WyUgVHJhbnNsYXRlKCJTdWItc2VydmljZSBvZiIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5QYXJlbnRPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlR5cGVJRCI+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlR5cGVPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDcml0aWNhbGl0eSI+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Dcml0aWNhbGl0eU9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyBFTyBJVFNNQ29yZQoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iVmFsaWRJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29tbWVudCI+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgaWQ9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMjUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJdGVtIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5wdXRLZXkiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzI1cGMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIklucHV0S2V5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5wdXQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzI1cGMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnB1dCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRleHRBcmVhIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiByb3dzPSJbJSBEYXRhLlJvd3MgfCBodG1sICVdIiBjb2xzPSJbJSBEYXRhLkNvbHMgfCBodG1sICVdIj5bJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUZXh0QXJlYSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk9wdGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5PcHRpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPcHRpb24iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJVcGxvYWQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB0eXBlPSJmaWxlIiBzaXplPSIzMCIgY2xhc3M9ImZpeGVkIi8+PGJyLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiI+WyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJVcGxvYWQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJQYXNzd29yZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgY2xhc3M9IlcyNXBjIiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlBhc3N3b3JkIikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuU2VydmljZUlEICE9ICdORVcnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0QW5kQ29udGludWUiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIGFuZCBmaW5pc2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2VFZGl0IikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AdminSLA.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2Mzk3ZjM2ZmYwOWQwODVlNGMzMWQ1ZGRhNDExMGE3MzMxOWY5MDZkIC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pblNMQS50dAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlNMQSBNYW5hZ2VtZW50IikgfCBodG1sICVdPC9oMT4KCiAgICBbJSBCcmVhZGNydW1iUGF0aCA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiBUcmFuc2xhdGUoJ1NMQSBNYW5hZ2VtZW50JyksCiAgICAgICAgICAgICAgICBMaW5rID0+IEVudigiQWN0aW9uIiksCiAgICAgICAgICAgIH0sCiAgICAgICAgXQogICAgJV0KCiAgICBbJSBJRiBEYXRhLlNMQUlEICVdCiAgICAgICAgWyUgVVNFIEVkaXRUaXRsZSA9IFN0cmluZyhUcmFuc2xhdGUoIkVkaXQgU0xBIikpICVdCiAgICAgICAgWyUgQnJlYWRjcnVtYlBhdGgucHVzaCh7IE5hbWUgPT4gRWRpdFRpdGxlLmFwcGVuZCggJzogJywgRGF0YS5TTEFOYW1lICkgfSkgJV0KICAgIFslIEVMU0lGIERhdGEuU3ViYWN0aW9uID09ICJTTEFFZGl0IiAgJV0KICAgICAgICBbJSBCcmVhZGNydW1iUGF0aC5wdXNoKHsgTmFtZSA9PiBUcmFuc2xhdGUoIkFkZCBTTEEiKSx9KSAlXQogICAgWyUgRU5EICVdCgogICAgWyUgSU5DTFVERSAiQnJlYWRjcnVtYi50dCIgUGF0aCA9IEJyZWFkY3J1bWJQYXRoICVdCgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbmNsdWRlSW52YWxpZCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkZpbHRlciBieSB2YWxpZCBzdGF0ZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IkluY2x1ZGVJbnZhbGlkIiBuYW1lPSJJbmNsdWRlSW52YWxpZCIgdmFsdWU9IjEiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkluY2x1ZGUgaW52YWxpZCBTTEFzIikgfCBodG1sICVdIiBbJSBEYXRhLkluY2x1ZGVJbnZhbGlkQ2hlY2tlZCB8IGh0bWwgJV0vPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iSW5jbHVkZUludmFsaWQiPlslIFRyYW5zbGF0ZSgiSW5jbHVkZSBpbnZhbGlkIFNMQXMiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkluY2x1ZGVJbnZhbGlkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWxlZnQiPjwvaT5bJSBUcmFuc2xhdGUoIkdvIHRvIG92ZXJ2aWV3IikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uQWRkIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVNMQUVkaXQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIj48L2k+WyUgVHJhbnNsYXRlKCJBZGQgU0xBIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZCIpICVdCgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25MaXN0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiRmlsdGVyIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPjxsYWJlbCBmb3I9IkZpbHRlclNMQXMiPlslIFRyYW5zbGF0ZSgiRmlsdGVyIGZvciBTTEFzIikgfCBodG1sICVdPC9sYWJlbD48L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkZpbHRlclNMQXMiIGNsYXNzPSJGaWx0ZXJCb3giIHBsYWNlaG9sZGVyPSJbJSBUcmFuc2xhdGUoIkp1c3Qgc3RhcnQgdHlwaW5nIHRvIGZpbHRlci4uLiIpIHwgaHRtbCAlXSIgbmFtZT0iRmlsdGVyU0xBcyIgdmFsdWU9IiIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRmlsdGVyIGZvciBTTEFzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGaWx0ZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbXBvcnRFeHBvcnRXaWRnZXQiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9J1dpZGdldFNpbXBsZScgaWQ9J1NMQUltcG9ydEV4cG9ydFdpZGdldCc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9J0hlYWRlcic+CiAgICAgICAgICAgICAgICA8aDEgY2xhc3M9IkludmlzaWJsZVRleHQiPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiSW1wb3J0IC8gRXhwb3J0IikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L2gxPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoID0gWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBUcmFuc2xhdGUoJ0ltcG9ydCAvIEV4cG9ydCcpLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICVdCgogICAgICAgICAgICBbJSBJTkNMVURFICJCcmVhZGNydW1iLnR0IiBQYXRoID0gQnJlYWRjcnVtYlBhdGggJV0KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9J0NvbnRlbnQnPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9J0ZpZWxkRXhwbGFuYXRpb24nPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgnSGVyZSB5b3UgY2FuIHVwbG9hZCBhIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBpbXBvcnQgU0xBcyB0byB5b3VyIHN5c3RlbS4gVGhlIGZpbGUgbmVlZHMgdG8gYmUgaW4gLnltbCBmb3JtYXQgYXMgZXhwb3J0ZWQgYnkgdGhlIFNMQSBtYW5hZ2VtZW50IG1vZHVsZS4nKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0nQWN0aW9uTGlzdCBTcGFjaW5nVG9wJz4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0nWyUgRW52KCJDR0lIYW5kbGUiKSAlXScgbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyBjbGFzcz0nVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdDaGFsbGVuZ2VUb2tlbicgdmFsdWU9WyUgRW52KCJVc2VyQ2hhbGxlbmdlVG9rZW4iKSB8IEpTT04gJV0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdBY3Rpb24nIHZhbHVlPSdBZG1pblNMQUltcG9ydEV4cG9ydCcvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nU3ViYWN0aW9uJyB2YWx1ZT0nSW1wb3J0Jy8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0nRmlsZVVwbG9hZCcgaWQ9J0ZpbGVVcGxvYWQnIHR5cGU9J2ZpbGUnIHNpemU9JzE4JyBjbGFzcz0nRml4ZWQgVzEwMHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuRmlsZVVwbG9hZEludmFsaWQgfCBodG1sICVdJy8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSdGaWxlVXBsb2FkRXJyb3InIGNsYXNzPSdUb29sdGlwRXJyb3JNZXNzYWdlJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0nRmlsZVVwbG9hZFNlcnZlckVycm9yJyBjbGFzcz0nVG9vbHRpcEVycm9yTWVzc2FnZSc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgVHJhbnNsYXRlKCdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSdTcGFjaW5nVG9wJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0nY2hlY2tib3gnIGlkPSdPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzRXhhbXBsZScgbmFtZT0nT3ZlcndyaXRlRXhpc3RpbmdFbnRpdGllcycgdmFsdWU9JzEnLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSdPdmVyd3JpdGVFeGlzdGluZ0VudGl0aWVzRXhhbXBsZSc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgnT3ZlcndyaXRlIGV4aXN0aW5nIGVudGl0aWVzJykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSdDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciBTcGFjaW5nVG9wJyBpZD0nU0xBSW1wb3J0JyB0eXBlPSdzdWJtaXQnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSdmYSBmYS11cGxvYWQnPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCdTTEFzIEltcG9ydCcpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9J1slIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pblNMQUltcG9ydEV4cG9ydDtTdWJhY3Rpb249RXhwb3J0JyBpZD0nU0xBRXhwb3J0JyBjbGFzcz0nQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXInPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9J2ZhIGZhLWRvd25sb2FkJz48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCdTTEFzIEV4cG9ydCcpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW1wb3J0RXhwb3J0V2lkZ2V0IikgJV0KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TGlzdCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJMaXN0IikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIiBpZD0iU0xBcyI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TGlzdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBbJSBJRiBEYXRhLlZhbGlkSUQgJiYgRGF0YS5WYWxpZElEICE9IDEgJV1jbGFzcz0iSW52YWxpZCJbJSBFTkQgJV0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TTEFFZGl0O1NMQUlEPVslIERhdGEuU0xBSUQgfCB1cmkgJV0iPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLlNlcnZpY2UgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSI+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMjYpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdMaXN0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJGaWx0ZXJNZXNzYWdlIEhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNiI+WyUgVHJhbnNsYXRlKCJObyBtYXRjaGVzIGZvdW5kLiIpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdMaXN0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNMQUVkaXQiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICBbJSBJRiAhRGF0YS5TTEFJRCAlXQogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWRkIFNMQSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkVkaXQgU0xBIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTTEFTYXZlIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU0xBSUQiIHZhbHVlPSJbJSBEYXRhLlNMQUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuU0xBSUQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29udGludWVBZnRlclNhdmUiIGlkPSJDb250aW51ZUFmdGVyU2F2ZSIgdmFsdWU9IiIvPgogICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgdmFsdWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLk5hbWVJbnZhbGlkIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIyMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTZXJ2aWNlSURzIj5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5UeXBlT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIEVPIElUU01Db3JlCgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTZXJ2aWNlSURzIj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TZXJ2aWNlT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ2FsZW5kYXIiPlslIFRyYW5zbGF0ZSgiQ2FsZW5kYXIiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DYWxlbmRhck9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkZpcnN0UmVzcG9uc2VUaW1lIj5bJSBUcmFuc2xhdGUoIkVzY2FsYXRpb24gLSBmaXJzdCByZXNwb25zZSB0aW1lIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0pOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJGaXJzdFJlc3BvbnNlVGltZSIgaWQ9IkZpcnN0UmVzcG9uc2VUaW1lIiB2YWx1ZT0iWyUgRGF0YS5GaXJzdFJlc3BvbnNlVGltZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBweCBWYWxpZGF0ZV9OdW1iZXIiIG1heGxlbmd0aD0iMTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkZpcnN0UmVzcG9uc2VUaW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlBsZWFzZSB3cml0ZSBvbmx5IG51bWJlcnMhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxsYWJlbCBmb3I9IkZpcnN0UmVzcG9uc2VOb3RpZnkiPlslIFRyYW5zbGF0ZSgiTm90aWZ5IGJ5IikgfCBodG1sICVdPC9sYWJlbD4gWyUgRGF0YS5GaXJzdFJlc3BvbnNlTm90aWZ5T3B0aW9uU3RyZyAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIjAgPSBubyBlc2NhbGF0aW9uIikgfCBodG1sICVdIC0gMjQgWyUgVHJhbnNsYXRlKCJob3VycyIpIHwgaHRtbCAlXSA9IDE0NDAgWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdIC0gWyUgVHJhbnNsYXRlKCJPbmx5IGJ1c2luZXNzIGhvdXJzIGFyZSBjb3VudGVkLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVXBkYXRlVGltZSI+WyUgVHJhbnNsYXRlKCJFc2NhbGF0aW9uIC0gdXBkYXRlIHRpbWUiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXSk6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlVwZGF0ZVRpbWUiIGlkPSJVcGRhdGVUaW1lIiB2YWx1ZT0iWyUgRGF0YS5VcGRhdGVUaW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHB4IFZhbGlkYXRlX051bWJlciIgbWF4bGVuZ3RoPSIxMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVXBkYXRlVGltZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugd3JpdGUgb25seSBudW1iZXJzISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8bGFiZWwgZm9yPSJVcGRhdGVOb3RpZnkiPlslIFRyYW5zbGF0ZSgiTm90aWZ5IGJ5IikgfCBodG1sICVdPC9sYWJlbD4gWyUgRGF0YS5VcGRhdGVOb3RpZnlPcHRpb25TdHJnICVdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiMCA9IG5vIGVzY2FsYXRpb24iKSB8IGh0bWwgJV0gLSAyNCBbJSBUcmFuc2xhdGUoImhvdXJzIikgfCBodG1sICVdID0gMTQ0MCBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0gLSBbJSBUcmFuc2xhdGUoIk9ubHkgYnVzaW5lc3MgaG91cnMgYXJlIGNvdW50ZWQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTb2x1dGlvblRpbWUiPlslIFRyYW5zbGF0ZSgiRXNjYWxhdGlvbiAtIHNvbHV0aW9uIHRpbWUiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXSk6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlNvbHV0aW9uVGltZSIgaWQ9IlNvbHV0aW9uVGltZSIgdmFsdWU9IlslIERhdGEuU29sdXRpb25UaW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHB4IFZhbGlkYXRlX051bWJlciIgbWF4bGVuZ3RoPSIxMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU29sdXRpb25UaW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlBsZWFzZSB3cml0ZSBvbmx5IG51bWJlcnMhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxsYWJlbCBmb3I9IlNvbHV0aW9uTm90aWZ5Ij5bJSBUcmFuc2xhdGUoIk5vdGlmeSBieSIpIHwgaHRtbCAlXTwvbGFiZWw+IFslIERhdGEuU29sdXRpb25Ob3RpZnlPcHRpb25TdHJnICVdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiMCA9IG5vIGVzY2FsYXRpb24iKSB8IGh0bWwgJV0gLSAyNCBbJSBUcmFuc2xhdGUoImhvdXJzIikgfCBodG1sICVdID0gMTQ0MCBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0gLSBbJSBUcmFuc2xhdGUoIk9ubHkgYnVzaW5lc3MgaG91cnMgYXJlIGNvdW50ZWQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzIj5bJSBUcmFuc2xhdGUoIk1pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdKTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTWluVGltZUJldHdlZW5JbmNpZGVudHMiIGlkPSJNaW5UaW1lQmV0d2VlbkluY2lkZW50cyIgdmFsdWU9IlslIERhdGEuTWluVGltZUJldHdlZW5JbmNpZGVudHMgfCBodG1sICVdIiBjbGFzcz0iVzI1cGMgVmFsaWRhdGVfTnVtYmVyIiBtYXhsZW5ndGg9IjE1Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJNaW5UaW1lQmV0d2VlbkluY2lkZW50c0Vycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugd3JpdGUgb25seSBudW1iZXJzISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyBFTyBJVFNNQ29yZQoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iVmFsaWRJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29tbWVudCI+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDb21tZW50IiBpZD0iQ29tbWVudCIgdmFsdWU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgbWF4bGVuZ3RoPSIyNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU0xBSXRlbSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIklucHV0S2V5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoRGF0YS5LZXkpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIklucHV0S2V5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5wdXQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuU2VsZWN0ZWRJRCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLkRlc2MpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5wdXQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZXh0QXJlYSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiByb3dzPSJbJSBEYXRhLlJvd3MgfCBodG1sICVdIiBjb2xzPSJbJSBEYXRhLkNvbHMgfCBodG1sICVdIj5bJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrRW5kKCJUZXh0QXJlYSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk9wdGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5PcHRpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk9wdGlvbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlVwbG9hZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB0eXBlPSJmaWxlIiBjbGFzcz0iZml4ZWQiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiI+WyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJVcGxvYWQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJQYXNzd29yZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IiIgY2xhc3M9Ilc1MHBjIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQYXNzd29yZCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJTTEFJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlNMQUlEICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0QW5kQ29udGludWUiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIGFuZCBmaW5pc2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiU0xBRWRpdCIpICVdCiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlldyIpICVdCg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentITSMService.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQXJpYVJvbGVNYWluIFNwYWNpbmdUb3AiPgogICAgPGRpdiBjbGFzcz0iVzc1cGMgU3BhY2luZ0JvdHRvbSBDZW50ZXJCb3giPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJPdmVydmlldyIpIHwgaHRtbCAlXTogWyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgU3BhY2luZ0JvdHRvbSI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNyaXRpY2FsaXR5IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1JvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iTWFzdGVyQWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCAlXSIgdGl0bGU9IlslIERhdGEuU3RhdGUgJV0iPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MZXZlbFNwYWNlICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9Ik1hc3RlckFjdGlvbkxpbmsiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9WyUgRGF0YS5TZXJ2aWNlSUQgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSI+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMTAwKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuQ3JpdGljYWxpdHkpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSb3ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentITSMServiceZoom.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiI+CiAgICA8ZGl2IGNsYXNzPSJDbGVhckxlZnQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iSGVhZGxpbmUiPgogICAgICAgIDxkaXYgY2xhc3M9IkZsYWciIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLkN1ckluY2lTaWduYWwgfCBodG1sICVdIj48L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGgxIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV06IFslIERhdGEuTmFtZSB8IGh0bWwgJV0iPgogICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV06IFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICA8L2gxPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckxhc3QiPgogICAgICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIEluZm9ybWF0aW9uIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIFRpZ2h0Ij4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkN1cnJlbnQgaW5jaWRlbnQgc3RhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCB8IGh0bWwgJV0iPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuQ3VySW5jaVN0YXRlKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCBieSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DcmVhdGVCeU5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTGFzdCBjaGFuZ2VkIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkxhc3QgY2hhbmdlZCBieSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VCeU5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMaW5rVGFibGVTaW1wbGUiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgRG9udFByaW50Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTGlua2VkIE9iamVjdHMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxpbmtUYWJsZVN0cmcgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkxpbmtUYWJsZVNpbXBsZSIpICVdCiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250cm9sUm93Ij4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJNZW51SXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1bJSBEYXRhLkxpbmsgfCBJbnRlcnBvbGF0ZSAlXSIgY2xhc3M9IlslIERhdGEuTWVudUNsYXNzIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkRlc2NyaXB0aW9uKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiTWVudUl0ZW0iKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRCb3ggU3BhY2luZ1RvcCBFeHBhbmRlZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJMaWdodFJvdyBIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPjxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudC4iKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV06IFslIERhdGEuTmFtZSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50IEF1dG9IZWlnaHQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JpdGljYWxpdHkiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLkNyaXRpY2FsaXR5KSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLkNvbW1lbnQpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU0xBIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIERvbnRQcmludCBTcGFjaW5nVG9wICBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQXNzb2NpYXRlZCBTTEFzIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU0xBUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNU0xBWm9vbTtTTEFJRD1bJSBEYXRhLlNMQUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJTTEFSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTTEEiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiTGlua1RhYmxlQ29tcGxleCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgWyUgRGF0YS5MaW5rVGFibGVTdHJnICVdCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTGlua1RhYmxlQ29tcGxleCIpICVdCgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentITSMSLA.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQXJpYVJvbGVNYWluIFNwYWNpbmdUb3AiPgogICAgPGRpdiBjbGFzcz0iVzc1cGMgU3BhY2luZ0JvdHRvbSBDZW50ZXJCb3giPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJPdmVydmlldyIpIHwgaHRtbCAlXTogWyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBTcGFjaW5nQm90dG9tIj4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9Ik1hc3RlckFjdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9Ik1hc3RlckFjdGlvbkxpbmsiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01TTEFab29tO1NMQUlEPVslIERhdGEuU0xBSUQgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSI+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMTAwKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSb3ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentITSMSLAZoom.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiI+CiAgICA8ZGl2IGNsYXNzPSJDbGVhckxlZnQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iSGVhZGxpbmUiPgogICAgICAgIDxoMT5bJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDE+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckxhc3QiPgogICAgICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTTEEgSW5mb3JtYXRpb24iKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgVGlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQgYnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ3JlYXRlQnlOYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkxhc3QgY2hhbmdlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQgYnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlQnlOYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKCiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9ucyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk1lbnVJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBjbGFzcz0iWyUgRGF0YS5NZW51Q2xhc3MgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJNZW51SXRlbSIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEJveCBTcGFjaW5nVG9wIEV4cGFuZGVkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxpZ2h0Um93IEhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50LiIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdOiBbJSBEYXRhLk5hbWUgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBBdXRvSGVpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDYWxlbmRhciIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DYWxlbmRhck5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJGaXJzdCBSZXNwb25zZSBUaW1lIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpcnN0UmVzcG9uc2VUaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlVwZGF0ZSBUaW1lIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlVwZGF0ZVRpbWUgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiU29sdXRpb24gVGltZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Tb2x1dGlvblRpbWUgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2UiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQXNzb2NpYXRlZCBTZXJ2aWNlcyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLkNyaXRpY2FsaXR5KSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiU2VydmljZVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2UiKSAlXQoKICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentTicketZoom/TicketInformation.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBkZWI5OWQ2MGRhZjIxMmFlNzNlYzdmZWI3ODA3NGYzZjdhZTU2M2Y4IC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZ2VudFRpY2tldFpvb20vVGlja2V0SW5mb3JtYXRpb24udHQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZShEYXRhLldpZGdldFRpdGxlKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgTmFycm93Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQXJjaGl2ZUZsYWciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJBcmNoaXZlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgVHJhbnNsYXRlKCJUaGlzIHRpY2tldCBpcyBhcmNoaXZlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFyY2hpdmVGbGFnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHlwZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIEZpeGVkVmFsdWVTbWFsbCIgdGl0bGU9IlslIERhdGEuVHlwZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5WYWxpZCAhPSAxICVdIDxlbSBjbGFzcz0iRXJyb3IiPlslIFRyYW5zbGF0ZSgiTm90ZTogVHlwZSBpcyBpbnZhbGlkISIpIHwgaHRtbCAlXTwvZW0+IFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlR5cGUiKSAlXQoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQWdlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIERhdGEuQWdlICVdIj5bJSBEYXRhLkFnZSAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBEYXRhLkNyZWF0ZWQgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV0iPlslIERhdGEuQ3JlYXRlZCB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQ3JlYXRlZEJ5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCBieSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBEYXRhLkNyZWF0ZWRCeVVzZXIgJV0iPlslIERhdGEuQ3JlYXRlZEJ5VXNlciAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQ3JlYXRlZEJ5IikgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLlN0YXRlKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLlN0YXRlKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGVuZGluZ1VudGlsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiUGVuZGluZyB0aWxsIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSBbJSBEYXRhLlBlbmRpbmdVbnRpbENsYXNzIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlBlbmRpbmdVbnRpbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVW50aWxUaW1lSHVtYW4gfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQZW5kaW5nVW50aWwiKSAlXQoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTG9ja2VkIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkxvY2spIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTG9jaykgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJQcmlvcml0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5Qcmlvcml0eSkgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5Qcmlvcml0eSkgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJRdWV1ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5RdWV1ZSkgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5RdWV1ZSkgfCBodG1sIHwgcmVwbGFjZSgnOjonLCAnPHdicj46Ojx3YnI+JykgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2UiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdOjwvbGFiZWw+CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiMgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5TZXJ2aWNlKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLlNlcnZpY2UpIHwgaHRtbCB8IHJlcGxhY2UoJzo6JywgJzx3YnI+Ojo8d2JyPicpICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5TZXJ2aWNlKSB8IGh0bWwgJV0iPjxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9WyUgRGF0YS5TZXJ2aWNlSUQgfCB1cmkgJV07IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiPlslIFRyYW5zbGF0ZShEYXRhLlNlcnZpY2UpIHwgaHRtbCB8IHJlcGxhY2UoJzo6JywgJzx3YnI+Ojo8d2JyPicpICVdPC9hPjwvcD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2VydmljZUluY2lTaWduYWwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlNlcnZpY2UgSW5jaWRlbnQgU3RhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuSW5jaVR5cGVDbGFzcyB8IGh0bWwgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTZXJ2aWNlSW5jaVNpZ25hbCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VDcml0aWNhbGl0eSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiU2VydmljZSBDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIERhdGEuQ3JpdGljYWxpdHkgKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSggRGF0YS5Dcml0aWNhbGl0eSApIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2VDcml0aWNhbGl0eSIpICVdCiMgRU8gUm90aGVyIE9TUwogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTZXJ2aWNlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU0xBIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiU2VydmljZSBMZXZlbCBBZ3JlZW1lbnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKIyAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIERhdGEuU0xBIHwgaHRtbCAlXSI+WyUgRGF0YS5TTEEgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBEYXRhLlNMQSB8IGh0bWwgJV0iPjxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01TTEFab29tO1NMQUlEPVslIERhdGEuU0xBSUQgfCB1cmkgJV07IiB0YXJnZXQ9Il9ibGFuayI+WyUgRGF0YS5TTEEgfCBodG1sICVdPC9hPjwvcD4KIyBFTyBSb3RoZXIgT1NTCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNMQSIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIE5hcnJvdyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkZpcnN0UmVzcG9uc2VUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiRmlyc3QgUmVzcG9uc2UgVGltZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTZXJ2aWNlIFRpbWUiKSB8IGh0bWwgJV06IFslIERhdGEuRmlyc3RSZXNwb25zZVRpbWVXb3JraW5nVGltZSB8IGh0bWwgJV0iIGNsYXNzPSJbJSBEYXRhLkZpcnN0UmVzcG9uc2VUaW1lQ2xhc3MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpcnN0UmVzcG9uc2VUaW1lSHVtYW4gfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpcnN0UmVzcG9uc2VUaW1lRGVzdGluYXRpb25EYXRlIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGaXJzdFJlc3BvbnNlVGltZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlVwZGF0ZVRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJVcGRhdGUgVGltZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTZXJ2aWNlIFRpbWUiKSB8IGh0bWwgJV06IFslIERhdGEuVXBkYXRlVGltZVdvcmtpbmdUaW1lIHwgaHRtbCAlXSIgY2xhc3M9IlslIERhdGEuVXBkYXRlVGltZUNsYXNzIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5VcGRhdGVUaW1lSHVtYW4gfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlVwZGF0ZVRpbWVEZXN0aW5hdGlvbkRhdGUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlVwZGF0ZVRpbWUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTb2x1dGlvblRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJTb2x1dGlvbiBUaW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNlcnZpY2UgVGltZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5Tb2x1dGlvblRpbWVXb3JraW5nVGltZSB8IGh0bWwgJV0iIGNsYXNzPSJbJSBEYXRhLlNvbHV0aW9uVGltZUNsYXNzIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Tb2x1dGlvblRpbWVIdW1hbiB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU29sdXRpb25UaW1lRGVzdGluYXRpb25EYXRlIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTb2x1dGlvblRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCBOYXJyb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDdXN0b21lciBJRCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgQ29uZmlnKCJDdXN0b21lckRCTGluayIpIHwgSW50ZXJwb2xhdGUgJV0iIGNsYXNzPSJbJSBDb25maWcoIkN1c3RvbWVyREJMaW5rQ2xhc3MiKSB8IGh0bWwgJV0iIFslIENvbmZpZygiQ3VzdG9tZXJEQkxpbmtUYXJnZXQiKSAlXT5bJSBEYXRhLkN1c3RvbWVySUQgfCBodG1sICVdPC9hPlslIFJlbmRlckJsb2NrU3RhcnQoIkN1c3RvbWVySURUaWNrZXRzIikgJV0gLSA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRTZWFyY2g7U3ViYWN0aW9uPVNlYXJjaDtDdXN0b21lcklEPVslIERhdGEuQ3VzdG9tZXJJRCB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCIlcyBUaWNrZXQocykiLCBEYXRhLkN1c3RvbWVySURUaWNrZXRzKSB8IGh0bWwgJV08L2E+WyUgUmVuZGVyQmxvY2tFbmQoIkN1c3RvbWVySURUaWNrZXRzIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUb3RhbEFjY291bnRlZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJBY2NvdW50ZWQgdGltZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuVGlja2V0VGltZVVuaXRzICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja0VuZCgiVG90YWxBY2NvdW50ZWRUaW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3duZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJPd25lciIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBEYXRhLlVzZXJGdWxsbmFtZSB8IGh0bWwgJV0gKFslIERhdGEuVXNlckxvZ2luIHwgaHRtbCAlXSkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5FbmFibGVDaGF0ICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iVXNlclN0YXR1c0ljb24gWyUgRGF0YS5Vc2VyU3RhdGUgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2lyY2xlIiB0aXRsZT0iWyUgRGF0YS5Vc2VyU3RhdGVEZXNjcmlwdGlvbiB8IGh0bWwgJV0iPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Vc2VyRnVsbG5hbWUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLkFnZW50RW5hYmxlQ2hhdCAmJiBEYXRhLlVzZXJJRCAhPSBFbnYoJ1VzZXJJRCcpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iVXNlckNoYXRJY29ucyBCbG9jayBIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlN0YXJ0IGNoYXQiKSB8IGh0bWwgJV0iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IlVzZXJDaGF0U3RhcnQiIGRhdGEtdXNlci1pZD0iWyUgRGF0YS5Vc2VySUQgfCBodG1sICVdIiBkYXRhLXVzZXItdHlwZT0iVXNlciIgZGF0YS11c2VyLWZ1bGxuYW1lPSJbJSBEYXRhLlVzZXJGdWxsbmFtZSB8IGh0bWwgJV0iIGRhdGEtdGlja2V0LWlkPSJbJSBEYXRhLlRpY2tldElEIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jb21tZW50cyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlZpZGVvQ2hhdEVuYWJsZWQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJWaWRlbyBjYWxsIikgfCBodG1sICVdIiB0eXBlPSJidXR0b24iIGNsYXNzPSJVc2VyVmlkZW9DYWxsU3RhcnRbJSBJRiAhRGF0YS5WaWRlb0NoYXRBdmFpbGFibGUgJV0gVW5hdmFpbGFibGVbJSBFTFNJRiAhRGF0YS5WaWRlb0NoYXRTdXBwb3J0ICVdIFVuc3VwcG9ydGVkWyUgRU5EICVdIiBkYXRhLXVzZXItaWQ9IlslIERhdGEuVXNlcklEIHwgaHRtbCAlXSIgZGF0YS11c2VyLXR5cGU9IlVzZXIiIGRhdGEtdXNlci1mdWxsbmFtZT0iWyUgRGF0YS5Vc2VyRnVsbG5hbWUgfCBodG1sICVdIiBkYXRhLXRpY2tldC1pZD0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdmlkZW8tY2FtZXJhIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkF1ZGlvIGNhbGwiKSB8IGh0bWwgJV0iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IlVzZXJBdWRpb0NhbGxTdGFydFslIElGICFEYXRhLlZpZGVvQ2hhdEF2YWlsYWJsZSAlXSBVbmF2YWlsYWJsZVslIEVMU0lGICFEYXRhLlZpZGVvQ2hhdFN1cHBvcnQgJV0gVW5zdXBwb3J0ZWRbJSBFTkQgJV0iIGRhdGEtdXNlci1pZD0iWyUgRGF0YS5Vc2VySUQgfCBodG1sICVdIiBkYXRhLXVzZXItdHlwZT0iVXNlciIgIGRhdGEtdXNlci1mdWxsbmFtZT0iWyUgRGF0YS5Vc2VyRnVsbG5hbWUgfCBodG1sICVdIiBkYXRhLXRpY2tldC1pZD0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtbWljcm9waG9uZSI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrRW5kKCJPd25lciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlc3BvbnNpYmxlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiUmVzcG9uc2libGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iWyUgRGF0YS5Vc2VyRnVsbG5hbWUgfCBodG1sICVdIChbJSBEYXRhLlVzZXJMb2dpbiB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuRW5hYmxlQ2hhdCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlVzZXJTdGF0dXNJY29uIFslIERhdGEuVXNlclN0YXRlIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWNpcmNsZSIgdGl0bGU9IlslIERhdGEuVXNlclN0YXRlRGVzY3JpcHRpb24gfCBodG1sICVdIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVXNlckZ1bGxuYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5BZ2VudEVuYWJsZUNoYXQgJiYgRGF0YS5Vc2VySUQgIT0gRW52KCdVc2VySUQnKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlVzZXJDaGF0SWNvbnMgQmxvY2sgSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTdGFydCBjaGF0IikgfCBodG1sICVdIiB0eXBlPSJidXR0b24iIGNsYXNzPSJVc2VyQ2hhdFN0YXJ0IiBkYXRhLXVzZXItaWQ9IlslIERhdGEuVXNlcklEIHwgaHRtbCAlXSIgZGF0YS11c2VyLXR5cGU9IlVzZXIiIGRhdGEtdXNlci1mdWxsbmFtZT0iWyUgRGF0YS5Vc2VyRnVsbG5hbWUgfCBodG1sICVdIiBkYXRhLXRpY2tldC1pZD0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY29tbWVudHMiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5WaWRlb0NoYXRFbmFibGVkICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVmlkZW8gY2FsbCIpIHwgaHRtbCAlXSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iVXNlclZpZGVvQ2FsbFN0YXJ0WyUgSUYgIURhdGEuVmlkZW9DaGF0QXZhaWxhYmxlICVdIFVuYXZhaWxhYmxlWyUgRUxTSUYgIURhdGEuVmlkZW9DaGF0U3VwcG9ydCAlXSBVbnN1cHBvcnRlZFslIEVORCAlXSIgZGF0YS11c2VyLWlkPSJbJSBEYXRhLlVzZXJJRCB8IGh0bWwgJV0iIGRhdGEtdXNlci10eXBlPSJVc2VyIiBkYXRhLXVzZXItZnVsbG5hbWU9IlslIERhdGEuVXNlckZ1bGxuYW1lIHwgaHRtbCAlXSIgZGF0YS10aWNrZXQtaWQ9IlslIERhdGEuVGlja2V0SUQgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXZpZGVvLWNhbWVyYSI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJBdWRpbyBjYWxsIikgfCBodG1sICVdIiB0eXBlPSJidXR0b24iIGNsYXNzPSJVc2VyQXVkaW9DYWxsU3RhcnRbJSBJRiAhRGF0YS5WaWRlb0NoYXRBdmFpbGFibGUgJV0gVW5hdmFpbGFibGVbJSBFTFNJRiAhRGF0YS5WaWRlb0NoYXRTdXBwb3J0ICVdIFVuc3VwcG9ydGVkWyUgRU5EICVdIiBkYXRhLXVzZXItaWQ9IlslIERhdGEuVXNlcklEIHwgaHRtbCAlXSIgZGF0YS11c2VyLXR5cGU9IlVzZXIiICBkYXRhLXVzZXItZnVsbG5hbWU9IlslIERhdGEuVXNlckZ1bGxuYW1lIHwgaHRtbCAlXSIgZGF0YS10aWNrZXQtaWQ9IlslIERhdGEuVGlja2V0SUQgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLW1pY3JvcGhvbmUiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJSZXNwb25zaWJsZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiMgc2hvdyB0aWNrZXQgZHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgTmFycm93Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGlja2V0RHluYW1pY0ZpZWxkIikgJV0KWyUgSUYgRGF0YS5UaXRsZUZpZWxkICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHRpdGxlPSJbJSBEYXRhLlRleHQgfCBodG1sICVdIiBzdHlsZT0iWyUgRGF0YS5TdHlsZSB8IGh0bWwgJV0iPlslIERhdGEuVGV4dCB8IGh0bWwgJV08L3A+ClslIEVMU0lGIERhdGEuSFRNTFZhbHVlICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWx1ZSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGlja2V0RHluYW1pY0ZpZWxkTGluayIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgRGF0YS5UaXRsZSAlXSI+PGEgaHJlZj0iWyUgRGF0YS5MaW5rIHwgSW50ZXJwb2xhdGUgJV0iWyUgSUYgRGF0YS5MaW5rUHJldmlldyAlXSBkYXRhLXRyaWdnZXI9ImZsb2F0ZXIiIGRhdGEtZmxvYXRlci11cmw9IlslIERhdGEuTGlua1ByZXZpZXcgfCBJbnRlcnBvbGF0ZSAlXSJbJSBFTkQgJV0gdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJEeW5hbWljRmllbGRMaW5rIj5bJSBEYXRhLlZhbHVlICVdPC9hPjwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldER5bmFtaWNGaWVsZExpbmsiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXREeW5hbWljRmllbGRQbGFpbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgRGF0YS5UaXRsZSAlXSI+WyUgRGF0YS5WYWx1ZSAlXTwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldER5bmFtaWNGaWVsZFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIEVORCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0RHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgoKIyBleGFtcGxlIG9mIGhvdyB0byB1c2UgZml4ZWQgZHluYW1pYyBmaWVsZCBibG9ja3MgZm9yIGN1c3RvbWl6YXRpb25zCiMgTm90ZTogRmllbGQxIGFuZCBGaWVsZDIgYXJlIHRoZSBuYW1lcyBvZiB0aGUgZmllbGRzIGFuZCBoYWQgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGUgYWN0dWFsCiMgZmllbGQgbmFtZXMKIyAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIE5hcnJvdyI+CiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXREeW5hbWljRmllbGRfRmllbGQxIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjwvbGFiZWw+CiMgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgojWyUgUmVuZGVyQmxvY2tTdGFydCgiVGlja2V0RHluYW1pY0ZpZWxkX0ZpZWxkMV9MaW5rIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgRGF0YS5UaXRsZSAlXSI+PGEgaHJlZj0iWyUgRGF0YS5MaW5rICVdIiB0YXJnZXQ9Il9ibGFuayI+WyUgRGF0YS5WYWx1ZSAlXTwvYT48L3NwYW4+CiNbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0RHluYW1pY0ZpZWxkX0ZpZWxkMV9MaW5rIikgJV0KI1slIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldER5bmFtaWNGaWVsZF9GaWVsZDFfUGxhaW4iKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBEYXRhLlRpdGxlICVdIj5bJSBEYXRhLlZhbHVlICVdPC9zcGFuPgojWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldER5bmFtaWNGaWVsZF9GaWVsZDFfUGxhaW4iKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgojWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldER5bmFtaWNGaWVsZF9GaWVsZDEiKSAlXQojICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgojICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgTmFycm93Ij4KI1slIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldER5bmFtaWNGaWVsZF9GaWVsZDIiKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PC9sYWJlbD4KIyAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXREeW5hbWljRmllbGRfRmllbGQyX0xpbmsiKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBEYXRhLlRpdGxlICVdIj48YSBocmVmPSJbJSBEYXRhLkxpbmsgJV0iIHRhcmdldD0iX2JsYW5rIj5bJSBEYXRhLlZhbHVlICVdPC9hPjwvc3Bhbj4KI1slIFJlbmRlckJsb2NrRW5kKCJUaWNrZXREeW5hbWljRmllbGRfRmllbGQyX0xpbmsiKSAlXQojWyUgUmVuZGVyQmxvY2tTdGFydCgiVGlja2V0RHluYW1pY0ZpZWxkX0ZpZWxkMl9QbGFpbiIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgJV0iPlslIERhdGEuVmFsdWUgJV08L3NwYW4+CiNbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0RHluYW1pY0ZpZWxkX0ZpZWxkMl9QbGFpbiIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiNbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0RHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCiMgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+Cg==</File>
        <File Location="Kernel/System/Console/Command/Admin/Service/Add.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL1N5c3RlbS9Db25zb2xlL0NvbW1hbmQvQWRtaW4vU2VydmljZS9BZGQucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6Q29tbWFuZDo6QWRtaW46OlNlcnZpY2U6OkFkZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CiMgLS0tCgp1c2UgcGFyZW50IHF3KEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpCYXNlQ29tbWFuZCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScsCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAojIC0tLQopOwoKc3ViIENvbmZpZ3VyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5EZXNjcmlwdGlvbignQWRkIG5ldyBzZXJ2aWNlLicpOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAnbmFtZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIk5hbWUgb2YgdGhlIG5ldyBzZXJ2aWNlLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyLy4qL3NteCwKICAgICk7CiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2NyaXRpY2FsaXR5JywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiQ3JpdGljYWxpdHkgb2YgdGhlIG5ldyBzZXJ2aWNlLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyLy4qL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICd0eXBlJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiVHlwZSBvZiB0aGUgbmV3IHNlcnZpY2UuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvLiovc214LAogICAgKTsKIyAtLS0KICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3BhcmVudC1uYW1lJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiUGFyZW50IHNlcnZpY2UgbmFtZS4gSWYgZ2l2ZW4sIHRoZSBuZXcgc2VydmljZSB3aWxsIGJlIGEgc3Vic2VydmljZSBvZiB0aGUgZ2l2ZW4gcGFyZW50LiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyLy4qL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdjb21tZW50JywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiQ29tbWVudCBmb3IgdGhlIG5ldyBzZXJ2aWNlLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyLy4qL3NteCwKICAgICk7CgogICAgcmV0dXJuOwp9CgpzdWIgUHJlUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBHZXQgYWxsIHNlcnZpY2VzLgogICAgJFNlbGYtPntOYW1lfSA9ICRTZWxmLT5HZXRPcHRpb24oJ25hbWUnKTsKICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVSZXZlcnNlID0gcmV2ZXJzZSAlU2VydmljZUxpc3Q7CgogICAgJFNlbGYtPntQYXJlbnROYW1lfSA9ICRTZWxmLT5HZXRPcHRpb24oJ3BhcmVudC1uYW1lJyk7CiAgICBpZiAoICRTZWxmLT57UGFyZW50TmFtZX0gKSB7CgogICAgICAgICMgQ2hlY2sgaWYgUGFyZW50IHNlcnZpY2UgZXhpc3RzLgogICAgICAgICRTZWxmLT57UGFyZW50SUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSAgID0+ICRTZWxmLT57UGFyZW50TmFtZX0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgZGllICJQYXJlbnQgc2VydmljZSAkU2VsZi0+e1BhcmVudE5hbWV9IGRvZXMgbm90IGV4aXN0LlxuIiBpZiAhJFNlbGYtPntQYXJlbnRJRH07CgogICAgICAgICMgQ2hlY2sgaWYgUGFyZW50OjpDaGlsZCBzZXJ2aWNlIGNvbWJpbmF0aW9uIGV4aXN0cy4KICAgICAgICBteSAkU2VydmljZU5hbWUgPSAkU2VsZi0+e1BhcmVudE5hbWV9IC4gJzo6JyAuICRTZWxmLT57TmFtZX07CiAgICAgICAgZGllICJTZXJ2aWNlICckU2VydmljZU5hbWUnIGFscmVhZHkgZXhpc3RzIVxuIiBpZiAkUmV2ZXJzZXskU2VydmljZU5hbWV9OwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgQ2hlY2sgaWYgc2VydmljZSBhbHJlYWR5IGV4aXN0cy4KICAgICAgICBkaWUgIlNlcnZpY2UgJyRTZWxmLT57TmFtZX0nIGFscmVhZHkgZXhpc3RzIVxuIiBpZiAkUmV2ZXJzZXsgJFNlbGYtPntOYW1lfSB9OwogICAgfQojIC0tLQojIElUU01Db3JlCiMgLS0tCgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgY29uZmlnIGZvciBJVFNNQ3JpdGljYWxpdHkKICAgIG15ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsgJ1RpY2tldCcgXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlcyBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAlUG9zc2libGVWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiB9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICAkUG9zc2libGVWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30gfHwge307CiAgICB9CgogICAgbXkgJUNyaXRpY2FsaXR5ID0gJXsgJFBvc3NpYmxlVmFsdWVze0lUU01Dcml0aWNhbGl0eX0gfTsKCiAgICAkU2VsZi0+e0NyaXRpY2FsaXR5fSA9ICRDcml0aWNhbGl0eXsgJFNlbGYtPkdldE9wdGlvbignY3JpdGljYWxpdHknKSB9OwoKICAgIGlmICggISRTZWxmLT57Q3JpdGljYWxpdHl9ICkgewogICAgICAgIGRpZSAiQ3JpdGljYWxpdHkgJyIgLiAkU2VsZi0+R2V0T3B0aW9uKCdjcml0aWNhbGl0eScpIC4gIicgZG9lcyBub3QgZXhpc3QuXG4iOwogICAgfQoKICAgICMgZ2V0IHNlcnZpY2UgdHlwZSBsaXN0CiAgICBteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICk7CgogICAgbXkgJVNlcnZpY2VUeXBlID0gcmV2ZXJzZSAleyRTZXJ2aWNlVHlwZUxpc3R9OwoKICAgICRTZWxmLT57VHlwZUlEfSA9ICRTZXJ2aWNlVHlwZXsgJFNlbGYtPkdldE9wdGlvbigndHlwZScpIH07CgogICAgaWYgKCAhJFNlbGYtPntUeXBlSUR9ICkgewogICAgICAgIGRpZSAiVHlwZSAnIiAuICRTZWxmLT5HZXRPcHRpb24oJ3R5cGUnKSAuICInIGRvZXMgbm90IGV4aXN0LlxuIjsKICAgIH0KIyAtLS0KCiAgICByZXR1cm47Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+UHJpbnQoIjx5ZWxsb3c+QWRkaW5nIGEgbmV3IHNlcnZpY2UuLi48L3llbGxvdz5cbiIpOwoKICAgICMgYWRkIHNlcnZpY2UKICAgIGlmICgKICAgICAgICAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgTmFtZSAgICAgPT4gJFNlbGYtPntOYW1lfSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJFNlbGYtPkdldE9wdGlvbignY29tbWVudCcpLAogICAgICAgICAgICBQYXJlbnRJRCA9PiAkU2VsZi0+e1BhcmVudElEfSwKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAkU2VsZi0+e1R5cGVJRH0sCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICRTZWxmLT57Q3JpdGljYWxpdHl9LAojIC0tLQogICAgICAgICkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPlByaW50RXJyb3IoIkNhbid0IGFkZCBzZXJ2aWNlLiIpOwogICAgICAgIHJldHVybiAkU2VsZi0+RXhpdENvZGVFcnJvcigpOwogICAgfQoKICAgICRTZWxmLT5QcmludCgiPGdyZWVuPkRvbmUuPC9ncmVlbj5cbiIpOwogICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZU9rKCk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/System/DynamicField/Driver/Service.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6U2VydmljZTsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBhcmFtT2JqZWN0KQoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBuYW1lc3BhY2U6OmF1dG9jbGVhbjsKdXNlIHV0Zjg7Cgp1c2UgcGFyZW50IHF3KEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6QmFzZVJlZmVyZW5jZSk7CgojIGNvcmUgbW9kdWxlcwp1c2UgTGlzdDo6VXRpbCBxdyhhbnkgZmlyc3QpOwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpMYW5ndWFnZSAgICAgICAgICAgICAgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlVzZXInLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6U2VydmljZSAtIGJhY2tlbmQgZm9yIHRoZSBSZWZlcmVuY2UgZHluYW1pYyBmaWVsZAoKPWhlYWQxIERFU0NSSVBUSU9OCgpBZ2VudCBwbHVnaW4gZm9yIHRoZSBSZWZlcmVuY2UgZHluYW1pYyBmaWVsZC4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCml0IGlzIHVzdWFsbHkgbm90IG5lY2Vzc2FyeSB0byBleHBsaWNpdGx5IGNyZWF0ZSBpbnN0YW5jZXMgb2YgZHluYW1pYyBmaWVsZCBkcml2ZXJzLgpJbnN0YW5jZXMgb2YgdGhlIGRyaXZlcnMgYXJlIGNyZWF0ZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZQpkeW5hbWljIGZpZWxkIGJhY2tlbmQgb2JqZWN0IEM8S2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZD4uCgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICgkVHlwZSkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0gYmxlc3Mge30sICRUeXBlOwoKICAgICMgU29tZSByZWZlcmVuY2UgZHluYW1pYyBmaWVsZHMgYXJlIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UgdGFibGUgYXR0cmlidXRlIGR5bmFtaWNfZmllbGRfdmFsdWUudmFsdWVfaW50LgogICAgJFNlbGYtPntWYWx1ZVR5cGV9ICAgICAgPSAnSW50ZWdlcic7CiAgICAkU2VsZi0+e1ZhbHVlS2V5fSAgICAgICA9ICdWYWx1ZUludCc7CiAgICAkU2VsZi0+e1RhYmxlQXR0cmlidXRlfSA9ICd2YWx1ZV9pbnQnOwoKICAgICMgVXNlZCBmb3IgZGVjbGFyaW5nIENTUyBjbGFzc2VzCiAgICAkU2VsZi0+e0ZpZWxkQ1NTQ2xhc3N9ID0gJ0R5bmFtaWNGaWVsZFJlZmVyZW5jZSc7CgogICAgIyBzZXQgZmllbGQgYmVoYXZpb3JzCiAgICAkU2VsZi0+e0JlaGF2aW9yc30gPSB7CiAgICAgICAgJ0lzQUNMUmVkdWNpYmxlJyAgICAgICAgICAgICAgID0+IDAsCiAgICAgICAgJ0lzTm90aWZpY2F0aW9uRXZlbnRDb25kaXRpb24nID0+IDAsCiAgICAgICAgJ0lzU29ydGFibGUnICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgJ0lzRmlsdHJhYmxlJyAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgJ0lzU3RhdHNDb25kaXRpb24nICAgICAgICAgICAgID0+IDAsCiAgICAgICAgJ0lzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlJyAgID0+IDEsCiAgICAgICAgJ0lzSGlkZGVuSW5UaWNrZXRJbmZvcm1hdGlvbicgID0+IDAsCiAgICAgICAgJ0lzUmVmZXJlbmNlRmllbGQnICAgICAgICAgICAgID0+IDEsCiAgICAgICAgJ0lzU2V0Q2FwYWJsZScgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgJ1NldHNEeW5hbWljQ29udGVudCcgICAgICAgICAgID0+IDEsCiAgICB9OwoKICAgICRTZWxmLT57UmVmZXJlbmNlZE9iamVjdFR5cGV9ID0gJ1NlcnZpY2UnOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdldEZpZWxkVHlwZVNldHRpbmdzKCkKCkdldCBmaWVsZCB0eXBlIHNldHRpbmdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSByZWZlcmVuY2VkIG9iamVjdCB0eXBlIFNlcnZpY2UuCgo9Y3V0CgpzdWIgR2V0RmllbGRUeXBlU2V0dGluZ3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBARmllbGRUeXBlU2V0dGluZ3MgPSAkU2VsZi0+U1VQRVI6OkdldEZpZWxkVHlwZVNldHRpbmdzKAogICAgICAgICVQYXJhbSwKICAgICk7CgogICAgIyBTdXBwb3J0IGNvbmZpZ3VyYWJsZSBpbXBvcnQgc2VhcmNoIGF0dHJpYnV0ZQogICAgcHVzaCBARmllbGRUeXBlU2V0dGluZ3MsCiAgICAgICAgewogICAgICAgICAgICBDb25maWdQYXJhbU5hbWUgPT4gJ0ltcG9ydFNlYXJjaEF0dHJpYnV0ZScsCiAgICAgICAgICAgIExhYmVsICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0V4dGVybmFsLXNvdXJjZSBrZXknKSwKICAgICAgICAgICAgRXhwbGFuYXRpb24gICAgID0+IFRyYW5zbGF0YWJsZSgnV2hlbiBzZXQgdmlhIGFuIGV4dGVybmFsIHNvdXJjZSAoZS5nLiB3ZWIgc2VydmljZSBvciBpbXBvcnQgLyBleHBvcnQpLCB0aGUgdmFsdWUgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyB0aGlzIGF0dHJpYnV0ZS4nKSwKICAgICAgICAgICAgSW5wdXRUeXBlICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICBTZWxlY3Rpb25EYXRhICAgPT4gewogICAgICAgICAgICAgICAgJ05hbWUnID0+ICdOYW1lJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIE11bHRpcGxlICAgICA9PiAwLAogICAgICAgIH07CgogICAgcmV0dXJuIEBGaWVsZFR5cGVTZXR0aW5nczsKfQoKPWhlYWQyIE9iamVjdFBlcm1pc3Npb24oKQoKY2hlY2tzIHJlYWQgcGVybWlzc2lvbiBmb3IgYSBnaXZlbiBvYmplY3QgYW5kIFVzZXJJRC4KCiAgICAkUGVybWlzc2lvbiA9ICRCYWNrZW5kT2JqZWN0LT5PYmplY3RQZXJtaXNzaW9uKAogICAgICAgIEtleSAgICAgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0UGVybWlzc2lvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBUT0RPIGhvdyBzaG91bGQgc2VydmljZSBwZXJtaXNzaW9ucyBiZSBjaGVja2VkPwogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBPYmplY3REZXNjcmlwdGlvbkdldCgpCgpyZXR1cm4gYSBoYXNoIG9mIG9iamVjdCBkZXNjcmlwdGlvbnMuCgogICAgbXkgJURlc2NyaXB0aW9uID0gJEJhY2tlbmRPYmplY3QtPk9iamVjdERlc2NyaXB0aW9uR2V0KAogICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICApOwoKUmV0dXJuCgogICAgJURlc2NyaXB0aW9uID0gKAogICAgICAgIE5vcm1hbCA9PiAiU2VydmljZSBOYW1lIiwKICAgICAgICBMb25nICAgPT4gIlNlcnZpY2UgTmFtZSIsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdERlc2NyaXB0aW9uR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdElEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFVzZXJJRCA9ICRQYXJhbXtMYXlvdXRPYmplY3R9e1VzZXJJRH0gfHwgMTsKCiAgICBteSAlU2VydmljZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgIFVzZXJJRCAgICA9PiAkVXNlcklELAogICAgICAgIFNlcnZpY2VJRCA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgKTsKCiAgICByZXR1cm4gdW5sZXNzICVTZXJ2aWNlRGF0YTsKCiAgICBteSAkTGluazsKCiAgICBpZiAoICRQYXJhbXtMYXlvdXRPYmplY3R9e1Nlc3Npb25Tb3VyY2V9ICYmICRQYXJhbXtMYXlvdXRPYmplY3R9e1Nlc3Npb25Tb3VyY2V9IGVxICdBZ2VudEludGVyZmFjZScgKSB7CgogICAgICAgICMgVE9ETzogV2h5IGlzIHRoZSBVc2VySUQgbm90IHRyYW5zZmVycmVkIGhlcmU/IEkgdGhpbmsgVXNlcklEIHNob3VsZCBiZSBtYW5kYXRvcnkuCiAgICAgICAgIyBUT0RPOiBEb2VzIGl0IG1ha2Ugc2Vuc2UgdG8gZ2V0IHRoZSBVc2VySUQgZnJvbSB0aGUgTGF5b3V0T2JqZWN0IGlmIGl0IGlzIG5vdCBwYXNzZWQgaW4gJFBhcmFtPwogICAgICAgICMgVE9ETyB3aGVyZSB0byBsaW5rIHRvIGZvciBhZ2VudHM/CiAgICAgICAgbXkgJEZyb250ZW5kTW9kdWwgPSAnQWdlbnRJVFNNU2VydmljZVpvb20nOwoKICAgICAgICAkTGluayA9ICRTZWxmLT5fR2V0SFRUUExpbmsoCiAgICAgICAgICAgIEZyb250ZW5kTW9kdWwgPT4gJEZyb250ZW5kTW9kdWwsCiAgICAgICAgICAgIE9iamVjdElEICAgICAgPT4gJFBhcmFte0xheW91dE9iamVjdH0tPkxpbmtFbmNvZGUoICRQYXJhbXtPYmplY3RJRH0gKSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgICk7CiAgICB9CgogICAgIyBjcmVhdGUgZGVzY3JpcHRpb24KICAgIHJldHVybiAoCiAgICAgICAgTm9ybWFsID0+ICRTZXJ2aWNlRGF0YXtOYW1lU2hvcnR9LAogICAgICAgIExvbmcgICA9PiAkU2VydmljZURhdGF7TmFtZX0sCiAgICAgICAgTGluayAgID0+ICRMaW5rLAogICAgKTsKfQoKPWhlYWQyIFNlYXJjaE9iamVjdHMoKQoKVGhpcyBpcyB1c2VkIGluIGF1dG8gY29tcGxldGlvbiB3aGVuIHNlYXJjaGluZyBmb3IgcG9zc2libGUgb2JqZWN0IElEcy4KCiAgICBteSBAT2JqZWN0SURzID0gJEJhY2tlbmRPYmplY3QtPlNlYXJjaE9iamVjdHMoCiAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRPYmplY3RJRCwgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIGlmIGdpdmVuLCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgVGVybQogICAgICAgIFRlcm0gICAgICAgICAgICAgICA9PiAkVGVybSwgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0cyB0byB3aWxkY2FyZCBzZWFyY2ggd2l0aCBlbXB0eSBzdHJpbmcKICAgICAgICBNYXhSZXN1bHRzICAgICAgICAgPT4gJE1heFJlc3VsdHMsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBPYmplY3QgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAlRGF0YSwKICAgICAgICB9LAogICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICApOwoKPWN1dAoKIyBUT0RPIHJlZmVyZW5jZSBmaWx0ZXIgcmVzdHJpY3Rpb25zIGN1cnJlbnRseSBkbyBub3Qgd29yayB3aXRoIHRoaXMgZmllbGQgdHlwZQpzdWIgU2VhcmNoT2JqZWN0cyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRQYXJhbXtUZXJtfSAvLz0gJyonOwoKICAgIG15ICREeW5hbWljRmllbGRDb25maWcgPSAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfTsKICAgIG15ICVTZWFyY2hQYXJhbXM7CgogICAgaWYgKCAkUGFyYW17T2JqZWN0SUR9ICkgewoKICAgICAgICBteSAlU2VydmljZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte09iamVjdElEfSwKICAgICAgICApOwoKICAgICAgICAkU2VhcmNoUGFyYW1ze05hbWV9ID0gJFNlcnZpY2VEYXRhe05hbWVTaG9ydH07CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtFeHRlcm5hbFNvdXJjZX0gKSB7CiAgICAgICAgbXkgJFNlYXJjaEF0dHJpYnV0ZSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9e0ltcG9ydFNlYXJjaEF0dHJpYnV0ZX0gfHwgJ05hbWUnOwogICAgICAgICRTZWFyY2hQYXJhbXN7JFNlYXJjaEF0dHJpYnV0ZX0gPSAiJFBhcmFte1Rlcm19IjsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWFyY2hQYXJhbXN7TmFtZX0gPSAiKiRQYXJhbXtUZXJtfSoiOwogICAgfQoKICAgICMgaW5jb3Jwb3JhdGUgcmVmZXJlbmNlZmlsdGVybGlzdCBpbnRvIHNlYXJjaCBwYXJhbXMKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfXtSZWZlcmVuY2VGaWx0ZXJMaXN0fSApICYmICEkUGFyYW17RXh0ZXJuYWxTb3VyY2V9ICkgewoKICAgICAgICBteSAkQ3VzdG9tZXJVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwoKICAgICAgICBGSUxURVJJVEVNOgogICAgICAgIGZvciBteSAkRmlsdGVySXRlbSAoICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9e1JlZmVyZW5jZUZpbHRlckxpc3R9LT5AKiApIHsKCiAgICAgICAgICAgICMgY2hlY2sgZmlsdGVyIGNvbmZpZwogICAgICAgICAgICBuZXh0IEZJTFRFUklURU0gdW5sZXNzICRGaWx0ZXJJdGVtLT57UmVmZXJlbmNlT2JqZWN0QXR0cmlidXRlfTsKICAgICAgICAgICAgbmV4dCBGSUxURVJJVEVNIHVubGVzcyAoICRGaWx0ZXJJdGVtLT57RXF1YWxzT2JqZWN0QXR0cmlidXRlfSB8fCAkRmlsdGVySXRlbS0+e0VxdWFsc1N0cmluZ30gKTsKCiAgICAgICAgICAgIGlmICggJEZpbHRlckl0ZW0tPntFcXVhbHNPYmplY3RBdHRyaWJ1dGV9ICkgewoKICAgICAgICAgICAgICAgICMgZG9uJ3QgcGVyZm9ybSBzZWFyY2ggaWYgb2JqZWN0IGF0dHJpYnV0ZSB0byBzZWFyY2ggZm9yIGlzIGVtcHR5CiAgICAgICAgICAgICAgICBteSAkRXF1YWxzT2JqZWN0QXR0cmlidXRlOwogICAgICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte09iamVjdH0gKSApIHsKICAgICAgICAgICAgICAgICAgICAkRXF1YWxzT2JqZWN0QXR0cmlidXRlID0gJFBhcmFte09iamVjdH17RHluYW1pY0ZpZWxkfXsgJEZpbHRlckl0ZW0tPntFcXVhbHNPYmplY3RBdHRyaWJ1dGV9IH0gLy8gJFBhcmFte09iamVjdH17ICRGaWx0ZXJJdGVtLT57RXF1YWxzT2JqZWN0QXR0cmlidXRlfSB9OwoKICAgICAgICAgICAgICAgICAgICBpZiAoICRGaWx0ZXJJdGVtLT57RXF1YWxzT2JqZWN0QXR0cmlidXRlfSBlcSAnQ3VzdG9tZXJVc2VySUQnICYmICEkRXF1YWxzT2JqZWN0QXR0cmlidXRlICYmICRQYXJhbXtDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRFcXVhbHNPYmplY3RBdHRyaWJ1dGUgPSAkUGFyYW17Q3VzdG9tZXJVc2VySUR9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRGaWx0ZXJJdGVtLT57RXF1YWxzT2JqZWN0QXR0cmlidXRlfSBlcSAnQ3VzdG9tZXJJRCcgJiYgISRFcXVhbHNPYmplY3RBdHRyaWJ1dGUgJiYgJFBhcmFte0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUN1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlciA9PiAkUGFyYW17Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkRXF1YWxzT2JqZWN0QXR0cmlidXRlID0gJEN1c3RvbWVyVXNlckRhdGF7Q3VzdG9tZXJJRH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCBkZWZpbmVkICRQYXJhbXtQYXJhbU9iamVjdH0gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkRmlsdGVySXRlbS0+e0VxdWFsc09iamVjdEF0dHJpYnV0ZX0gPX4gL15EeW5hbWljRmllbGRfKD88REZOYW1lPlxTKykvICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkREZOYW1lICAgICAgICAgICAgID0gJCt7REZOYW1lfTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEZpbHRlckl0ZW1ERkNvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkREZOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUxURVJJVEVNIHVubGVzcyBJc0hhc2hSZWZXaXRoRGF0YSgkRmlsdGVySXRlbURGQ29uZmlnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRFcXVhbHNPYmplY3RBdHRyaWJ1dGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPkVkaXRGaWVsZFZhbHVlR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbXtQYXJhbU9iamVjdH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJEZpbHRlckl0ZW1ERkNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybURhdGVzICAgICA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRGaWx0ZXJJdGVtLT57RXF1YWxzT2JqZWN0QXR0cmlidXRlfSBlcSAnQ3VzdG9tZXJVc2VySUQnICYmICRQYXJhbXtDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRFcXVhbHNPYmplY3RBdHRyaWJ1dGUgPSAkUGFyYW17Q3VzdG9tZXJVc2VySUR9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRGaWx0ZXJJdGVtLT57RXF1YWxzT2JqZWN0QXR0cmlidXRlfSBlcSAnQ3VzdG9tZXJJRCcgJiYgJFBhcmFte0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUN1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlciA9PiAkUGFyYW17Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkRXF1YWxzT2JqZWN0QXR0cmlidXRlID0gJEN1c3RvbWVyVXNlckRhdGF7Q3VzdG9tZXJJRH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBtYXRjaCBzdGFuZGFyZCB0aWNrZXQgYXR0cmlidXRlIG5hbWVzIHdpdGggZWRpdCBtYXNrIGF0dHJpYnV0ZSBuYW1lcwogICAgICAgICAgICAgICAgICAgICAgICBteSBAUGFyYW1OYW1lcyA9ICRQYXJhbXtQYXJhbU9iamVjdH0tPkdldFBhcmFtTmFtZXMoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgYXR0cmlidXRlIG5hbWUgaXRzZWxmIGlzIGluIHBhcmFtcwogICAgICAgICAgICAgICAgICAgICAgICAjIE5PVEUgdHJ5aW5nIGF0dHJpYnV0ZSBpdHNlbGYgaXMgY3J1Y2lhbGx5IGltcG9ydGFudCBpbiBjYXNlIG9mIFF1ZXVlSUQKICAgICAgICAgICAgICAgICAgICAgICAgIyAgIGJlY2F1c2UgQWdlbnRUaWNrZXRQaG9uZSBkb2VzIG5vdCBwcm92aWRlIFF1ZXVlSUQsIGJ1dCBwdXRzIHRoZSBpZCBpbgogICAgICAgICAgICAgICAgICAgICAgICAjICAgRGVzdCwgYW5kIEFnZW50VGlja2V0RW1haWwgbGVhdmVzIERlc3QgYXMgYSBzdHJpbmcgYnV0IHB1dHMgdGhlIGlkIGluIFF1ZXVlSUQKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFBhcmFtTmFtZSA9IGZpcnN0IHsgJF8gZXEgJEZpbHRlckl0ZW0tPntFcXVhbHNPYmplY3RBdHRyaWJ1dGV9IH0gQFBhcmFtTmFtZXM7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBhcmFtTmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVxdWFsc09iamVjdEF0dHJpYnV0ZSA9ICRQYXJhbXtQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3aGVuIGNhbGxlZCBieSBBZ2VudFJlZmVyZW5jZVNlYXJjaCwgRGVzdCBpcyBhIHN0cmluZyBhbmQgd2UgbmVlZCB0byBleHRyYWN0IHRoZSBRdWV1ZUlECiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRQYXJhbU5hbWUgZXEgJ0Rlc3QnICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRRdWV1ZUlEID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkRXF1YWxzT2JqZWN0QXR0cmlidXRlID1+IC9eKFxkezEsMTAwfSlcfFx8Lis/JC8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRdWV1ZUlEID0gJDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFcXVhbHNPYmplY3RBdHRyaWJ1dGUgPSAkUXVldWVJRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRGaWx0ZXJJdGVtLT57RXF1YWxzT2JqZWN0QXR0cmlidXRlfSBlcSAnQ3VzdG9tZXJJRCcgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cnkgaWYgQ3VzdG9tZXJVc2VyIGlzIG9uIHRoZSBtYXNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkQ3VzdG9tZXJVc2VySUQgPSAkUGFyYW17UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NlbGVjdGVkQ3VzdG9tZXJVc2VyJyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRDdXN0b21lclVzZXJJRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICVDdXN0b21lclVzZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlciA9PiAkQ3VzdG9tZXJVc2VySUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRXF1YWxzT2JqZWN0QXR0cmlidXRlID0gJEN1c3RvbWVyVXNlckRhdGF7Q3VzdG9tZXJJRH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBuZWl0aGVyIGF0dHJpYnV0ZSBub3IgbWFwcGVkIGFsdGVybmF0aXZlcyBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBhdHRyaWJ1dGUgJyRGaWx0ZXJJdGVtLT57RXF1YWxzT2JqZWN0QXR0cmlidXRlfScgYW5kIGl0cyBhc3NvY2lhdGVkIGFsdGVybmF0aXZlcyBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSBtYXNrISIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGVuc3VyZSB0aGF0IGZvciBFcXVhbHNPYmplY3RBdHRyaWJ1dGUgVXNlcklEIGFsd2F5cyAkU2VsZi0+e1VzZXJJRH0gaXMgdXNlZCBpbiB0aGUgZW5kCiAgICAgICAgICAgICAgICBpZiAoICRGaWx0ZXJJdGVtLT57RXF1YWxzT2JqZWN0QXR0cmlidXRlfSBlcSAnVXNlcklEJyApIHsKICAgICAgICAgICAgICAgICAgICAkRXF1YWxzT2JqZWN0QXR0cmlidXRlID0gJFBhcmFte1VzZXJJRH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICgpIHVubGVzcyAkRXF1YWxzT2JqZWN0QXR0cmlidXRlOwogICAgICAgICAgICAgICAgcmV0dXJuICgpIGlmICggcmVmICRFcXVhbHNPYmplY3RBdHRyaWJ1dGUgZXEgJ0FSUkFZJyAmJiAhJEVxdWFsc09iamVjdEF0dHJpYnV0ZS0+QCogKTsKCiAgICAgICAgICAgICAgICAjIGNvbmZpZyBpdGVtIGF0dHJpYnV0ZQogICAgICAgICAgICAgICAgaWYgKCAkRmlsdGVySXRlbS0+e1JlZmVyZW5jZU9iamVjdEF0dHJpYnV0ZX0gPX4gbXteQ29ufWkgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlYXJjaFBhcmFtc3sgJEZpbHRlckl0ZW0tPntSZWZlcmVuY2VPYmplY3RBdHRyaWJ1dGV9IH0gPSAkRXF1YWxzT2JqZWN0QXR0cmlidXRlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsc2lmICggJEZpbHRlckl0ZW0tPntSZWZlcmVuY2VPYmplY3RBdHRyaWJ1dGV9IGVxICdDdXN0b21lclVzZXJJRCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlYXJjaFBhcmFtc3tDdXN0b21lclVzZXJMb2dpbn0gPSBbJEVxdWFsc09iamVjdEF0dHJpYnV0ZV07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBkeW5hbWljIGZpZWxkIGF0dHJpYnV0ZQogICAgICAgICAgICAgICAgZWxzaWYgKCAkRmlsdGVySXRlbS0+e1JlZmVyZW5jZU9iamVjdEF0dHJpYnV0ZX0gPX4gbXteRHlufWkgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlYXJjaFBhcmFtc3sgJEZpbHRlckl0ZW0tPntSZWZlcmVuY2VPYmplY3RBdHRyaWJ1dGV9IH0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEVxdWFscyA9PiAkRXF1YWxzT2JqZWN0QXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhcnJheSBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRTZWFyY2hQYXJhbXN7ICRGaWx0ZXJJdGVtLT57UmVmZXJlbmNlT2JqZWN0QXR0cmlidXRlfSB9ID0gWyRFcXVhbHNPYmplY3RBdHRyaWJ1dGVdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEZpbHRlckl0ZW0tPntFcXVhbHNTdHJpbmd9ICkgewoKICAgICAgICAgICAgICAgICMgY29uZmlnIGl0ZW0gYXR0cmlidXRlCiAgICAgICAgICAgICAgICAjIFRPRE8gY2hlY2sgaWYgdGhpcyBoYXMgdG8gYmUgYWRhcHRlZCBmb3IgdGlja2V0IHNlYXJjaAogICAgICAgICAgICAgICAgaWYgKCAkRmlsdGVySXRlbS0+e1JlZmVyZW5jZU9iamVjdEF0dHJpYnV0ZX0gPX4gbXteQ29ufWkgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlYXJjaFBhcmFtc3sgJEZpbHRlckl0ZW0tPntSZWZlcmVuY2VPYmplY3RBdHRyaWJ1dGV9IH0gPSAkRmlsdGVySXRlbS0+e0VxdWFsc1N0cmluZ307CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBkeW5hbWljIGZpZWxkIGF0dHJpYnV0ZQogICAgICAgICAgICAgICAgZWxzaWYgKCAkRmlsdGVySXRlbS0+e1JlZmVyZW5jZU9iamVjdEF0dHJpYnV0ZX0gPX4gbXteRHlufWkgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlYXJjaFBhcmFtc3sgJEZpbHRlckl0ZW0tPntSZWZlcmVuY2VPYmplY3RBdHRyaWJ1dGV9IH0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEVxdWFscyA9PiAkRmlsdGVySXRlbS0+e0VxdWFsc1N0cmluZ30sCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlbHNpZiAoICRGaWx0ZXJJdGVtLT57UmVmZXJlbmNlT2JqZWN0QXR0cmlidXRlfSBlcSAnQ3VzdG9tZXJVc2VySUQnICkgewogICAgICAgICAgICAgICAgICAgICRTZWFyY2hQYXJhbXN7Q3VzdG9tZXJVc2VyTG9naW59ID0gWyAkRmlsdGVySXRlbS0+e0VxdWFsc1N0cmluZ30gXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFycmF5IGF0dHJpYnV0ZQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFNlYXJjaFBhcmFtc3sgJEZpbHRlckl0ZW0tPntSZWZlcmVuY2VPYmplY3RBdHRyaWJ1dGV9IH0gPSBbICRGaWx0ZXJJdGVtLT57RXF1YWxzU3RyaW5nfSBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG15IEBTZXJ2aWNlU2VhcmNoUmVzdWx0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZVNlYXJjaCgKICAgICAgICAlU2VhcmNoUGFyYW1zLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyByZXR1cm4gYSBsaXN0IG9mIHVzZXIgSURzCiAgICByZXR1cm4gQFNlcnZpY2VTZWFyY2hSZXN1bHQ7Cn0KCj1oZWFkMiBfR2V0SFRUUExpbmsoKQoKcmV0dXJuIGEgSFRUUCBsaW5rIHRvIHRoZSBhZ2VudCBlZGl0IG1hc2ssIGlmIHBlcm1pc3Npb24gaXMgZ2l2ZW4uCgogICAgbXkgJExpbmsgPSAkQmFja2VuZE9iamVjdC0+X0dldEhUVFBMaW5rKAogICAgICAgIEZyb250ZW5kTW9kdWwgICAgICA9PiAkRnJvbnRlbmRNb2R1bCwKICAgICAgICBPYmplY3RJRCAgID0+ICRFbmNvZGVkVXNlckxvZ2luCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRVc2VySUQsCiAgICApOwoKUmV0dXJuCgogICAgJExpbmsgPSAiaHR0cHM6Ly9mcWRuLm90b2JvLmRlL290b2JvL2luZGV4LnBsP0FjdGlvbj1BZG1pblVzZXI7U3ViYWN0aW9uPUNoYW5nZTtJRD0kVXNlcklECgo9Y3V0CgpzdWIgX0dldEhUVFBMaW5rIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBGcm9udGVuZE1vZHVsIE9iamVjdElEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgbXkgJE1vZHVsZVJlZyA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57ICRQYXJhbXtGcm9udGVuZE1vZHVsfSB9OwogICAgbXkgJExpbms7CgogICAgIyBtb2R1bGUgcGVybWlzc2lvbiBjaGVjayBmb3IgYWN0aW9uCiAgICBpZiAoCiAgICAgICAgcmVmICRNb2R1bGVSZWctPntHcm91cFJvfSBlcSAnQVJSQVknCiAgICAgICAgJiYgIXNjYWxhciBAeyAkTW9kdWxlUmVnLT57R3JvdXBSb30gfQogICAgICAgICYmIHJlZiAkTW9kdWxlUmVnLT57R3JvdXB9IGVxICdBUlJBWScKICAgICAgICAmJiAhc2NhbGFyIEB7ICRNb2R1bGVSZWctPntHcm91cH0gfQogICAgICAgICkKICAgIHsKICAgICAgICAkUGFyYW17QWNjZXNzUm99ID0gMTsKICAgICAgICAkUGFyYW17QWNjZXNzUnd9ID0gMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIG15ICRHcm91cE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpOwoKICAgICAgICBQRVJNSVNTSU9OOgogICAgICAgIGZvciBteSAkUGVybWlzc2lvbiAocXcoR3JvdXBSbyBHcm91cCkpIHsKICAgICAgICAgICAgbXkgJEFjY2Vzc09rID0gMDsKICAgICAgICAgICAgbXkgJEdyb3VwICAgID0gJE1vZHVsZVJlZy0+eyRQZXJtaXNzaW9ufTsKICAgICAgICAgICAgbmV4dCBQRVJNSVNTSU9OIGlmICEkR3JvdXA7CiAgICAgICAgICAgIGlmICggcmVmICRHcm91cCBlcSAnQVJSQVknICkgewogICAgICAgICAgICAgICAgSU5ORVI6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEdyb3VwTmFtZSAoIEB7JEdyb3VwfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IElOTkVSIGlmICEkR3JvdXBOYW1lOwogICAgICAgICAgICAgICAgICAgIG5leHQgSU5ORVIgaWYgISRHcm91cE9iamVjdC0+UGVybWlzc2lvbkNoZWNrKAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwTmFtZSA9PiAkR3JvdXBOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJFBlcm1pc3Npb24gZXEgJ0dyb3VwUm8nID8gJ3JvJyA6ICdydycsCgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJEFjY2Vzc09rID0gMTsKICAgICAgICAgICAgICAgICAgICBsYXN0IElOTkVSOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbXkgJEhhc1Blcm1pc3Npb24gPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25DaGVjaygKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgR3JvdXBOYW1lID0+ICRHcm91cCwKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJFBlcm1pc3Npb24gZXEgJ0dyb3VwUm8nID8gJ3JvJyA6ICdydycsCgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgkSGFzUGVybWlzc2lvbikgewogICAgICAgICAgICAgICAgICAgICRBY2Nlc3NPayA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBlcSAnR3JvdXAnICYmICRBY2Nlc3NPayApIHsKICAgICAgICAgICAgICAgICRQYXJhbXtBY2Nlc3NSb30gPSAxOwogICAgICAgICAgICAgICAgJFBhcmFte0FjY2Vzc1J3fSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUGVybWlzc2lvbiBlcSAnR3JvdXBSbycgJiYgJEFjY2Vzc09rICkgewogICAgICAgICAgICAgICAgJFBhcmFte0FjY2Vzc1JvfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCAkUGFyYW17QWNjZXNzUm99IHx8ICRQYXJhbXtBY2Nlc3NSd30gKSB7CgogICAgICAgICAgICAkTGluayA9ICdpbmRleC5wbD9BY3Rpb249JyAuICRQYXJhbXtGcm9udGVuZE1vZHVsfSAuICc7JzsKICAgICAgICAgICAgJExpbmsgLj0gJ1NlcnZpY2VJRD0nIC4gJFBhcmFte09iamVjdElEfTsKICAgICAgICAgICAgcmV0dXJuICRMaW5rOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBib3RoIEdyb3VwUm8gbm9yIEdyb3VwIGFyZSBlbXB0eSBhcnJheXJlZnMKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/System/LinkObject/Service.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpTZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnLAogICAgJ0tlcm5lbDo6TGFuZ3VhZ2UnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpTZXJ2aWNlCgo9aGVhZDEgREVTQ1JJUFRJT04KClNlcnZpY2UgYmFja2VuZCBmb3IgdGhlIHNlcnZpY2UgbGluayBvYmplY3QuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWN1dAoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkTGlua09iamVjdFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdDo6U2VydmljZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBMaW5rTGlzdFdpdGhEYXRhKCkKCmZpbGwgdXAgdGhlIGxpbmsgbGlzdCB3aXRoIGRhdGEKCiAgICAkU3VjY2VzcyA9ICRMaW5rT2JqZWN0QmFja2VuZC0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICBMaW5rTGlzdCA9PiAkSGFzaFJlZiwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rTGlzdFdpdGhEYXRhIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KExpbmtMaXN0IFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBsaW5rIGxpc3QKICAgIGlmICggcmVmICRQYXJhbXtMaW5rTGlzdH0gbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTGlua0xpc3QgbXVzdCBiZSBhIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkUGFyYW17TGlua0xpc3R9IH0gKSB7CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICggc29ydCBrZXlzICV7ICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9IH0gKSB7CgogICAgICAgICAgICBTRVJWSUNFSUQ6CiAgICAgICAgICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICV7ICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBzZXJ2aWNlIGRhdGEKICAgICAgICAgICAgICAgIG15ICVTZXJ2aWNlRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBpZCBmcm9tIGhhc2ggaWYgbm8gc2VydmljZSBkYXRhIHdhcyBmb3VuZAogICAgICAgICAgICAgICAgaWYgKCAhJVNlcnZpY2VEYXRhICkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259LT57JFNlcnZpY2VJRH07CiAgICAgICAgICAgICAgICAgICAgbmV4dCBTRVJWSUNFSUQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhZGQgc2VydmljZSBkYXRhCiAgICAgICAgICAgICAgICAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259LT57JFNlcnZpY2VJRH0gPSBcJVNlcnZpY2VEYXRhOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgT2JqZWN0UGVybWlzc2lvbigpCgpjaGVja3MgcmVhZCBwZXJtaXNzaW9uIGZvciBhIGdpdmVuIG9iamVjdCBhbmQgVXNlcklELgoKICAgICRQZXJtaXNzaW9uID0gJExpbmtPYmplY3QtPk9iamVjdFBlcm1pc3Npb24oCiAgICAgICAgT2JqZWN0ICA9PiAnU2VydmljZScsCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdCBLZXkgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG1vZHVsZSByZWdpc3RyeSBvZiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgbXkgJE1vZHVsZVJlZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57QWdlbnRJVFNNU2VydmljZVpvb219OwoKICAgICMgZG8gbm90IGdyYW50IGFjY2VzcyBpZiBmcm9udGVuZCBtb2R1bGUgaXMgbm90IHJlZ2lzdGVyZWQKICAgIHJldHVybiBpZiAhJE1vZHVsZVJlZzsKCiAgICAjIGdyYW50IGFjY2VzcyBpZiBtb2R1bGUgcGVybWlzc29uIGhhcyBubyBHcm91cCBvciBHcm91cFJvIGRlZmluZWQKICAgIGlmICggISRNb2R1bGVSZWctPntHcm91cFJvfSAmJiAhJE1vZHVsZVJlZy0+e0dyb3VwfSApIHsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBQRVJNSVNTSU9OOgogICAgZm9yIG15ICRQZXJtaXNzaW9uIChxdyhHcm91cFJvIEdyb3VwKSkgewoKICAgICAgICBuZXh0IFBFUk1JU1NJT04gaWYgISRNb2R1bGVSZWctPnskUGVybWlzc2lvbn07CiAgICAgICAgbmV4dCBQRVJNSVNTSU9OIGlmIHJlZiAkTW9kdWxlUmVnLT57JFBlcm1pc3Npb259IG5lICdBUlJBWSc7CgogICAgICAgIGZvciBteSAkR3JvdXAgKCBAeyAkTW9kdWxlUmVnLT57JFBlcm1pc3Npb259IH0gKSB7CgogICAgICAgICAgICAjIGdldCB0aGUgZ3JvdXAgaWQKICAgICAgICAgICAgbXkgJEdyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoIEdyb3VwID0+ICRHcm91cCApOwoKICAgICAgICAgICAgbXkgJFR5cGU7CiAgICAgICAgICAgIGlmICggJFBlcm1pc3Npb24gZXEgJ0dyb3VwUm8nICkgewogICAgICAgICAgICAgICAgJFR5cGUgPSAncm8nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFBlcm1pc3Npb24gZXEgJ0dyb3VwJyApIHsKICAgICAgICAgICAgICAgICRUeXBlID0gJ3J3JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgdXNlciBncm91cHMsIHdoZXJlIHRoZSB1c2VyIGhhcyB0aGUgYXBwcm9wcmlhdGUgcHJpdmlsZWdlCiAgICAgICAgICAgIG15ICVHcm91cHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgVHlwZSAgID0+ICRUeXBlLAogICAgICAgICAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ3JhbnQgYWNjZXNzIGlmIGFnZW50IGlzIGEgbWVtYmVyIGluIHRoZSBncm91cAogICAgICAgICAgICByZXR1cm4gMSBpZiAkR3JvdXBzeyRHcm91cElEfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9Cgo9aGVhZDIgT2JqZWN0RGVzY3JpcHRpb25HZXQoKQoKcmV0dXJuIGEgaGFzaCBvZiBvYmplY3QgZGVzY3JpcHRpb25zCgpSZXR1cm4KICAgICVEZXNjcmlwdGlvbiA9ICgKICAgICAgICBOb3JtYWwgPT4gIlNlcnZpY2UgU2VydmljZU5hbWUiLAogICAgICAgIExvbmcgICA9PiAiU2VydmljZSBQYXJlbnRTZXJ2aWNlOjpTZXJ2aWNlTmFtZSIsCiAgICApOwoKICAgICVEZXNjcmlwdGlvbiA9ICRMaW5rT2JqZWN0LT5PYmplY3REZXNjcmlwdGlvbkdldCgKICAgICAgICBLZXkgICAgID0+IDEyMywKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdERlc2NyaXB0aW9uR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdCBLZXkgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkU2VydmljZVN0cmcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Okxhbmd1YWdlJyktPlRyYW5zbGF0ZSgnU2VydmljZScpOwoKICAgICMgY3JlYXRlIGRlc2NyaXB0aW9uCiAgICBteSAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICRTZXJ2aWNlU3RyZywKICAgICAgICBMb25nICAgPT4gJFNlcnZpY2VTdHJnLAogICAgKTsKCiAgICByZXR1cm4gJURlc2NyaXB0aW9uIGlmICRQYXJhbXtNb2RlfSAmJiAkUGFyYW17TW9kZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgIyBnZXQgc2VydmljZQogICAgbXkgJVNlcnZpY2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFBhcmFte0tleX0sCiAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAwLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIGlmICElU2VydmljZTsKCiAgICAjIGNyZWF0ZSBkZXNjcmlwdGlvbgogICAgJURlc2NyaXB0aW9uID0gKAogICAgICAgIE5vcm1hbCA9PiAkU2VydmljZVN0cmcgLiAiICckU2VydmljZXtOYW1lU2hvcnR9JyIsCiAgICAgICAgTG9uZyAgID0+ICRTZXJ2aWNlU3RyZyAuICIgJyRTZXJ2aWNle05hbWV9JyIsCiAgICApOwoKICAgIHJldHVybiAlRGVzY3JpcHRpb247Cn0KCj1oZWFkMiBPYmplY3RTZWFyY2goKQoKcmV0dXJuIGEgaGFzaCBsaXN0IG9mIHRoZSBzZWFyY2ggcmVzdWx0cwoKUmV0dXJuczoKCiAgICAkU2VhcmNoTGlzdCA9IHsKICAgICAgICBOT1RMSU5LRUQgPT4gewogICAgICAgICAgICBTb3VyY2UgPT4gewogICAgICAgICAgICAgICAgMTIgID0+ICREYXRhT2ZJdGVtMTIsCiAgICAgICAgICAgICAgICAyMTIgPT4gJERhdGFPZkl0ZW0yMTIsCiAgICAgICAgICAgICAgICAzMzIgPT4gJERhdGFPZkl0ZW0zMzIsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH07CgogICAgJFNlYXJjaExpc3QgPSAkTGlua09iamVjdEJhY2tlbmQtPk9iamVjdFNlYXJjaCgKICAgICAgICBTZWFyY2hQYXJhbXMgPT4gJEhhc2hSZWYsICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0U2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHBhcmFtcwogICAgJFBhcmFte1NlYXJjaFBhcmFtc30gfHw9IHt9OwoKICAgICMgYWRkIHdpbGRjYXJkcwogICAgbXkgJVNlYXJjaDsKICAgIGlmICggJFBhcmFte1NlYXJjaFBhcmFtc30tPntOYW1lfSApIHsKICAgICAgICAkU2VhcmNoe05hbWV9ID0gJyonIC4gJFBhcmFte1NlYXJjaFBhcmFtc30tPntOYW1lfSAuICcqJzsKICAgIH0KCiAgICAjIHNlYXJjaCB0aGUgc2VydmljZXMKICAgIG15IEBTZXJ2aWNlSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZVNlYXJjaCgKICAgICAgICAleyAkUGFyYW17U2VhcmNoUGFyYW1zfSB9LAogICAgICAgICVTZWFyY2gsCiAgICAgICAgTGltaXQgID0+IDUwLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJVNlYXJjaExpc3Q7CiAgICBTRVJWSUNFSUQ6CiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoQFNlcnZpY2VJRHMpIHsKCiAgICAgICAgIyBnZXQgc2VydmljZSBkYXRhCiAgICAgICAgbXkgJVNlcnZpY2VEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUdldCgKICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBTRVJWSUNFSUQgaWYgISVTZXJ2aWNlRGF0YTsKCiAgICAgICAgIyBhZGQgc2VydmljZSBkYXRhCiAgICAgICAgJFNlYXJjaExpc3R7Tk9UTElOS0VEfS0+e1NvdXJjZX0tPnskU2VydmljZUlEfSA9IFwlU2VydmljZURhdGE7CiAgICB9CgogICAgcmV0dXJuIFwlU2VhcmNoTGlzdDsKfQoKPWhlYWQyIExpbmtBZGRQcmUoKQoKbGluayBhZGQgcHJlIGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFRhcmdldEtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rQWRkUHJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBUeXBlIFN0YXRlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIExpbmtBZGRQb3N0KCkKCmxpbmsgYWRkIHByZSBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgU291cmNlS2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFBvc3QoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFRhcmdldEtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rQWRkUG9zdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxIGlmICRQYXJhbXtTdGF0ZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBMaW5rRGVsZXRlUHJlKCkKCmxpbmsgZGVsZXRlIHByZSBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0RlbGV0ZVByZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxIGlmICRQYXJhbXtTdGF0ZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBMaW5rRGVsZXRlUG9zdCgpCgpsaW5rIGRlbGV0ZSBwb3N0IGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtEZWxldGVQb3N0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBUeXBlIFN0YXRlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICAjIHVwZGF0ZSB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSB0eXBlIGZyb20gQ0lzIG9mIHRoZSBzZXJ2aWNlCiAgICAjIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBkeW5hbWljIGluY2lkZW50IGNhbGN1bGF0aW9uIGlzIHJlc2V0IGFmdGVyCiAgICAjIHVubGlua2luZyBhIENJIHdoaWNoIGhhcyBiZWVuIGluIGFuIGluY2lkZW50IHN0YXRlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbXtLZXl9LAogICAgICAgIEtleSAgICAgICA9PiAnQ3VySW5jaVN0YXRlVHlwZUZyb21DSXMnLAogICAgICAgIFZhbHVlICAgICA9PiAnJywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="Kernel/System/ITSMCIPAllocate.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUgLSBDPGNyaXRpY2FsaXR5PiwgaW1wYWN0IGFuZCBwcmlvcml0eSBhbGxvY2F0aW9uIGxpYgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1jdXQKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJElUU01DSVBBbGxvY2F0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgQWxsb2NhdGVMaXN0KCkKCnJldHVybiBhIHR3byBkaW1lbnNpb25hbCBoYXNoIHJlZmVyZW5jZSBvZiBhbGxvY2F0aW9ucwoKICAgIG15ICRMaXN0UmVmID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKQzwkTGlzdFJlZj4gaXMgc29tZXRoaW5nIGxpa2UKCiAgICAkTGlzdFJldCA9IHsKICAgICAgICAnMyBub3JtYWwnID0+IHsKICAgICAgICAgICAgJzEgdmVyeSBsb3cnID0+IDEsCiAgICAgICAgICAgICczIG5vcm1hbCcgICA9PiAyLAogICAgICAgICAgICAnNCBoaWdoJyAgICAgPT4gMywKICAgICAgICB9LAogICAgICAgICc1IHZlcnkgaGlnaCcgPT4gewogICAgICAgICAgICAnMiBsb3cnICAgID0+IDMsCiAgICAgICAgICAgICczIG5vcm1hbCcgPT4gNCwKICAgICAgICAgICAgJzQgaGlnaCcgICA9PiA1LAogICAgICAgIH0sCiAgICB9OwoKbWVhbmluZyB0aGF0IHRoZSBDPENyaXRpY2FsaXR5PiAnMyBub3JtYWwnIGFuZCB0aGUgSW1wYWN0ICcxIHZlcnkgbG93JyBzdWdnZXN0IHRoZSBQcmlvcml0eUlEICcxJy4KCj1jdXQKCnN1YiBBbGxvY2F0ZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBjcml0aWNhbGl0eSwgaW1wYWN0LCBwcmlvcml0eV9pZCBGUk9NIGNpcF9hbGxvY2F0ZScsCiAgICApOwoKICAgICMgcmVzdWx0IGxpc3QKICAgIG15ICVBbGxvY2F0ZURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRBbGxvY2F0ZURhdGF7ICRSb3dbMV0gfXsgJFJvd1swXSB9ID0gJFJvd1syXTsKICAgIH0KCiAgICByZXR1cm4gXCVBbGxvY2F0ZURhdGE7Cn0KCj1oZWFkMiBBbGxvY2F0ZVVwZGF0ZSgpCgp1cGRhdGUgdGhlIGFsbG9jYXRpb24gb2YgQzxjcml0aWNhbGl0eT4sIGltcGFjdCBhbmQgcHJpb3JpdHkKCiAgICBteSAkVHJ1ZSA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVVcGRhdGUoCiAgICAgICAgQWxsb2NhdGVEYXRhID0+ICREYXRhUmVmLCAgIyAyRCBoYXNoIHJlZmVyZW5jZQogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBBbGxvY2F0ZVVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBbGxvY2F0ZURhdGEgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIGFsbG9jYXRlIGRhdGEgaXMgYSBoYXNoIHJlZmVyZW5jZQogICAgaWYgKCByZWYgJFBhcmFte0FsbG9jYXRlRGF0YX0gbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnQWxsb2NhdGVEYXRhIG11c3QgYmUgYSAyRCBoYXNoIHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgaWYgYWxsb2NhdGUgZGF0YSBpcyBhIDJEIGhhc2ggcmVmZXJlbmNlCiAgICBJTVBBQ1Q6CiAgICBmb3IgbXkgJEltcGFjdCAoIHNvcnQga2V5cyAleyAkUGFyYW17QWxsb2NhdGVEYXRhfSB9ICkgewoKICAgICAgICBuZXh0IElNUEFDVCBpZiByZWYgJFBhcmFte0FsbG9jYXRlRGF0YX0tPnskSW1wYWN0fSBlcSAnSEFTSCc7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnQWxsb2NhdGVEYXRhIG11c3QgYmUgYSAyRCBoYXNoIHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGVsZXRlIG9sZCBhbGxvY2F0aW9ucwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKCBTUUwgPT4gJ0RFTEVURSBGUk9NIGNpcF9hbGxvY2F0ZScgKTsKCiAgICAjIGluc2VydCBuZXcgYWxsb2NhdGlvbnMKICAgIGZvciBteSAkSW1wYWN0ICggc29ydCBrZXlzICV7ICRQYXJhbXtBbGxvY2F0ZURhdGF9IH0gKSB7CgogICAgICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKCBzb3J0IGtleXMgJXsgJFBhcmFte0FsbG9jYXRlRGF0YX0tPnskSW1wYWN0fSB9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IHByaW9yaXR5CiAgICAgICAgICAgIG15ICRQcmlvcml0eUlEID0gJFBhcmFte0FsbG9jYXRlRGF0YX0tPnskSW1wYWN0fS0+eyRDcml0aWNhbGl0eX07CgogICAgICAgICAgICAjIGluc2VydCBuZXcgYWxsb2NhdGlvbgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGNpcF9hbGxvY2F0ZSAnCiAgICAgICAgICAgICAgICAgICAgLiAnKGNyaXRpY2FsaXR5LCBpbXBhY3QsIHByaW9yaXR5X2lkLCAnCiAgICAgICAgICAgICAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgVkFMVUVTICcKICAgICAgICAgICAgICAgICAgICAuICcoPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgICAgICBcJENyaXRpY2FsaXR5LCAgIFwkSW1wYWN0LCBcJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIFByaW9yaXR5QWxsb2NhdGlvbkdldCgpCgpyZXR1cm4gdGhlIHByaW9yaXR5IGlkIG9mIGEgQzxjcml0aWNhbGl0eT4gYW5kIGFuIGltcGFjdAoKICAgIG15ICRQcmlvcml0eUlEID0gJENJUEFsbG9jYXRlT2JqZWN0LT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgIEltcGFjdCAgICAgID0+ICczIG5vcm1hbCcsCiAgICApOwoKPWN1dAoKc3ViIFByaW9yaXR5QWxsb2NhdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDcml0aWNhbGl0eSBJbXBhY3QpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHByaW9yaXR5IGlkIGZyb20gZGIKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIHByaW9yaXR5X2lkIEZST00gY2lwX2FsbG9jYXRlICcKICAgICAgICAgICAgLiAnV0hFUkUgY3JpdGljYWxpdHkgPSA/IEFORCBpbXBhY3QgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q3JpdGljYWxpdHl9LCBcJFBhcmFte0ltcGFjdH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHJlc3VsdAogICAgbXkgJFByaW9yaXR5SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRQcmlvcml0eUlEID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJFByaW9yaXR5SUQ7Cn0KCjE7Cg==</File>
        <File Location="Kernel/System/Service.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA1YWE0ODUyNzEzZWU0YjM4NDU4OTE2ODJmNDM4NTkzOWZkMDg2NTQ2IC0gS2VybmVsL1N5c3RlbS9TZXJ2aWNlLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgKHF3KDphbGwpKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCiMgRU8gSVRTTUNvcmUKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRyYW5zbGF0aW9ucycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6U2VydmljZSAtIHNlcnZpY2UgbGliCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBzZXJ2aWNlIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICBteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICRTZWxmLT57Q2FjaGVUeXBlfSA9ICdTZXJ2aWNlJzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9IDYwICogNjAgKiAyNCAqIDIwOwojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIGZvciBJVFNNQ3JpdGljYWxpdHkKICAgIG15ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsgJ1RpY2tldCcgXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZvciBJVFNNQ3JpdGljYWxpdHkKICAgIG15ICVQb3NzaWJsZVZhbHVlczsKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHsgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmIH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgICAgICRQb3NzaWJsZVZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e1Bvc3NpYmxlVmFsdWVzfSB8fCB7fTsKICAgIH0KCiAgICAjIHNldCB0aGUgY3JpdGljYWxpdHkgbGlzdAogICAgJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9ID0gJFBvc3NpYmxlVmFsdWVze0lUU01Dcml0aWNhbGl0eX07CiMgRU8gSVRTTUNvcmUKCiAgICAjIGxvYWQgZ2VuZXJhdG9yIHByZWZlcmVuY2VzIG1vZHVsZQogICAgbXkgJEdlbmVyYXRvck1vZHVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2VydmljZTo6UHJlZmVyZW5jZXNNb2R1bGUnKQogICAgICAgIHx8ICdLZXJuZWw6OlN5c3RlbTo6U2VydmljZTo6UHJlZmVyZW5jZXNEQic7CiAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoJEdlbmVyYXRvck1vZHVsZSkgKSB7CiAgICAgICAgJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0gPSAkR2VuZXJhdG9yTW9kdWxlLT5uZXcoKTsKICAgIH0KIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICRTZWxmLT57REJPYmplY3R9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CiMgRU8gSVRTTUNvcmUKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBTZXJ2aWNlTGlzdCgpCgpyZXR1cm4gYSBoYXNoIGxpc3Qgb2Ygc2VydmljZXMKCiAgICBteSAlU2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3QoCiAgICAgICAgVmFsaWQgID0+IDAsICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMSAoMHwxKQogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayB2YWxpZCBwYXJhbQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRQYXJhbXtWYWxpZH0gPSAxOwogICAgfQoKICAgICMgcmVhZCBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ1NlcnZpY2VMaXN0OjpWYWxpZDo6JyAuICRQYXJhbXtWYWxpZH07CgogICAgaWYgKCAkUGFyYW17VmFsaWR9ICYmIGRlZmluZWQgJFBhcmFte0tlZXBDaGlsZHJlbn0gJiYgJFBhcmFte0tlZXBDaGlsZHJlbn0gZXEgJzEnICkgewogICAgICAgICRDYWNoZUtleSAuPSAnOjpLZWVwQ2hpbGRyZW46OicgLiAkUGFyYW17S2VlcENoaWxkcmVufTsKICAgIH0KCiAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAleyRDYWNoZX0gaWYgcmVmICRDYWNoZSBlcSAnSEFTSCc7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBuYW1lLCB2YWxpZF9pZCBGUk9NIHNlcnZpY2UnLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVTZXJ2aWNlTGlzdDsKICAgIG15ICVTZXJ2aWNlVmFsaWRMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNlcnZpY2VMaXN0eyAkUm93WzBdIH0gICAgICA9ICRSb3dbMV07CiAgICAgICAgJFNlcnZpY2VWYWxpZExpc3R7ICRSb3dbMF0gfSA9ICRSb3dbMl07CiAgICB9CgogICAgaWYgKCAhJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFwlU2VydmljZUxpc3QsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJVNlcnZpY2VMaXN0IGlmICEkUGFyYW17VmFsaWR9OwogICAgfQoKICAgICMgZ2V0IHZhbGlkIGlkcwogICAgbXkgQFZhbGlkSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCk7CgogICAgIyBkdXBsaWNhdGUgc2VydmljZSBsaXN0CiAgICBteSAlU2VydmljZUxpc3RUbXAgPSAlU2VydmljZUxpc3Q7CgogICAgIyBhZGQgc3VmZml4IGZvciBjb3JyZWN0IHNvcnRpbmcKICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVTZXJ2aWNlTGlzdFRtcCApIHsKICAgICAgICAkU2VydmljZUxpc3RUbXB7JFNlcnZpY2VJRH0gLj0gJzo6JzsKICAgIH0KCiAgICBteSAlU2VydmljZUludmFsaWRMaXN0OwogICAgU0VSVklDRUlEOgogICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IHsgJFNlcnZpY2VMaXN0VG1weyRhfSBjbXAgJFNlcnZpY2VMaXN0VG1weyRifSB9IGtleXMgJVNlcnZpY2VMaXN0VG1wICkKICAgIHsKCiAgICAgICAgbXkgJFZhbGlkID0gc2NhbGFyIGdyZXAgeyAkXyBlcSAkU2VydmljZVZhbGlkTGlzdHskU2VydmljZUlEfSB9IEBWYWxpZElEczsKCiAgICAgICAgbmV4dCBTRVJWSUNFSUQgaWYgJFZhbGlkOwoKICAgICAgICAkU2VydmljZUludmFsaWRMaXN0eyAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gfSA9IDE7CiAgICAgICAgZGVsZXRlICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfTsKICAgIH0KCiAgICAjIGRlbGV0ZSBpbnZhbGlkIHNlcnZpY2VzIGFuZCBjaGlsZHJlbgogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17S2VlcENoaWxkcmVufSB8fCAhJFBhcmFte0tlZXBDaGlsZHJlbn0gKSB7CiAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IGtleXMgJVNlcnZpY2VMaXN0ICkgewoKICAgICAgICAgICAgSU5WQUxJRE5BTUU6CiAgICAgICAgICAgIGZvciBteSAkSW52YWxpZE5hbWUgKCBzb3J0IGtleXMgJVNlcnZpY2VJbnZhbGlkTGlzdCApIHsKCiAgICAgICAgICAgICAgICBpZiAoICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfSA9fiBteyBcQSBcUSRJbnZhbGlkTmFtZVxFIDo6IH14bXMgKSB7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfTsKICAgICAgICAgICAgICAgICAgICBsYXN0IElOVkFMSUROQU1FOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVTZXJ2aWNlTGlzdCwKICAgICk7CgogICAgcmV0dXJuICVTZXJ2aWNlTGlzdDsKfQoKPWhlYWQyIFNlcnZpY2VMaXN0R2V0KCkKCnJldHVybiBhIGxpc3Qgb2Ygc2VydmljZXMgd2l0aCB0aGUgY29tcGxldGUgbGlzdCBvZiBhdHRyaWJ1dGVzIGZvciBlYWNoIHNlcnZpY2UKCiAgICBteSAkU2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3RHZXQoCiAgICAgICAgVmFsaWQgID0+IDAsICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMSAoMHwxKQogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICByZXR1cm5zCgogICAgJFNlcnZpY2VMaXN0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgU2VydmljZUlEICA9PiAxLAogICAgICAgICAgICBQYXJlbnRJRCAgID0+IDAsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ015U2VydmljZScsCiAgICAgICAgICAgIE5hbWVTaG9ydCAgPT4gJ015U2VydmljZScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICA9PiAnU29tZSBDb21tZW50JwogICAgICAgICAgICBDcmVhdGVUaW1lID0+ICcyMDExLTAyLTA4IDE1OjA4OjAwJywKICAgICAgICAgICAgQ2hhbmdlVGltZSA9PiAnMjAxMS0wNi0xMSAxNzoyMjowMCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICA9PiAxLAojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgICAgICAgICBUeXBlSUQgICAgICAgICAgID0+IDE2LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdCYWNrZW5kJywKICAgICAgICAgICAgQ3JpdGljYWxpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+IDEsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnb3BlcmF0aW9uYWwnLAojIEVPIElUU01Db3JlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIFNlcnZpY2VJRCAgPT4gMiwKICAgICAgICAgICAgUGFyZW50SUQgICA9PiAxLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdNeVNlcnZpY2U6Ok15U3ViU2VydmljZScsCiAgICAgICAgICAgIE5hbWVTaG9ydCAgPT4gJ015U3ViU2VydmljZScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICA9PiAnU29tZSBDb21tZW50JwogICAgICAgICAgICBDcmVhdGVUaW1lID0+ICcyMDExLTAyLTA4IDE1OjA4OjAwJywKICAgICAgICAgICAgQ2hhbmdlVGltZSA9PiAnMjAxMS0wNi0xMSAxNzoyMjowMCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICA9PiAxLAojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgICAgICAgICBUeXBlSUQgICAgICAgICAgID0+IDE2LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdCYWNrZW5kJywKICAgICAgICAgICAgQ3JpdGljYWxpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+IDEsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnb3BlcmF0aW9uYWwnLAojIEVPIElUU01Db3JlCiAgICAgICAgfSwKICAgICAgICAjIC4uLgogICAgXTsKCj1jdXQKCnN1YiBTZXJ2aWNlTGlzdEdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayB2YWxpZCBwYXJhbQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRQYXJhbXtWYWxpZH0gPSAxOwogICAgfQoKICAgICMgY2hlY2sgY2FjaGVkIHJlc3VsdHMKICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U2VydmljZUxpc3RHZXQ6OlZhbGlkOjonIC4gJFBhcmFte1ZhbGlkfTsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICRDYWNoZSBpZiBkZWZpbmVkICRDYWNoZTsKCiAgICAjIGNyZWF0ZSBTUUwgcXVlcnkKICAgIG15ICRTUUwgPSAnU0VMRUNUIGlkLCBuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkgJwojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgICAgIC4gIiwgdHlwZV9pZCwgY3JpdGljYWxpdHkgIgojIEVPIElUU01Db3JlCiAgICAgICAgLiAnRlJPTSBzZXJ2aWNlJzsKCiAgICBpZiAoICRQYXJhbXtWYWxpZH0gKSB7CiAgICAgICAgJFNRTCAuPSAnIFdIRVJFIHZhbGlkX2lkIElOICgnIC4gam9pbiAnLCAnLAogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKSAuICcpJzsKICAgIH0KCiAgICAkU1FMIC49ICcgT1JERVIgQlkgbmFtZSc7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAkU1FMLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBTZXJ2aWNlTGlzdDsKICAgIG15ICVTZXJ2aWNlTmFtZTJJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICVTZXJ2aWNlRGF0YTsKICAgICAgICAkU2VydmljZURhdGF7U2VydmljZUlEfSAgPSAkUm93WzBdOwogICAgICAgICRTZXJ2aWNlRGF0YXtOYW1lfSAgICAgICA9ICRSb3dbMV07CiAgICAgICAgJFNlcnZpY2VEYXRhe1ZhbGlkSUR9ICAgID0gJFJvd1syXTsKICAgICAgICAkU2VydmljZURhdGF7Q29tbWVudH0gICAgPSAkUm93WzNdIHx8ICcnOwogICAgICAgICRTZXJ2aWNlRGF0YXtDcmVhdGVUaW1lfSA9ICRSb3dbNF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyZWF0ZUJ5fSAgID0gJFJvd1s1XTsKICAgICAgICAkU2VydmljZURhdGF7Q2hhbmdlVGltZX0gPSAkUm93WzZdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDaGFuZ2VCeX0gICA9ICRSb3dbN107CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAgICAgJFNlcnZpY2VEYXRhe1R5cGVJRH0gICAgICA9ICRSb3dbOF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fSA9ICRSb3dbOV0gfHwgJyc7CiMgRU8gSVRTTUNvcmUKCiAgICAgICAgIyBhZGQgc2VydmljZSBkYXRhIHRvIHNlcnZpY2UgbGlzdAogICAgICAgIHB1c2ggQFNlcnZpY2VMaXN0LCBcJVNlcnZpY2VEYXRhOwoKICAgICAgICAjIGJ1aWxkIHNlcnZpY2UgaWQgbG9va3VwIGhhc2gKICAgICAgICAkU2VydmljZU5hbWUySUR7ICRTZXJ2aWNlRGF0YXtOYW1lfSB9ID0gJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH07CiAgICB9CgogICAgZm9yIG15ICRTZXJ2aWNlRGF0YSAoQFNlcnZpY2VMaXN0KSB7CgogICAgICAgICMgY3JlYXRlIHNob3J0IG5hbWUgYW5kIHBhcmVudCBpZAogICAgICAgICRTZXJ2aWNlRGF0YS0+e05hbWVTaG9ydH0gPSAkU2VydmljZURhdGEtPntOYW1lfTsKICAgICAgICBpZiAoICRTZXJ2aWNlRGF0YS0+e05hbWV9ID1+IG17IFxBICguKikgOjogKC4rPykgXHogfXhtcyApIHsKICAgICAgICAgICAgbXkgJFBhcmVudE5hbWUgPSAkMTsKICAgICAgICAgICAgJFNlcnZpY2VEYXRhLT57TmFtZVNob3J0fSA9ICQyOwogICAgICAgICAgICAkU2VydmljZURhdGEtPntQYXJlbnRJRH0gID0gJFNlcnZpY2VOYW1lMklEeyRQYXJlbnROYW1lfTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNlcnZpY2UgcHJlZmVyZW5jZXMKICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAkU2VsZi0+U2VydmljZVByZWZlcmVuY2VzR2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfSwKICAgICAgICApOwoKICAgICAgICAjIG1lcmdlIGhhc2gKICAgICAgICBpZiAoJVByZWZlcmVuY2VzKSB7CiAgICAgICAgICAgICV7JFNlcnZpY2VEYXRhfSA9ICggJXskU2VydmljZURhdGF9LCAlUHJlZmVyZW5jZXMgKTsKICAgICAgICB9CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAgICAgIyBnZXQgY3VycmVudCBpbmNpZGVudCBzdGF0ZSwgY2FsY3VsYXRlZCBmcm9tIHJlbGF0ZWQgY29uZmlnIGl0ZW1zIGFuZCBjaGlsZCBzZXJ2aWNlcwogICAgICAgIG15ICVOZXdTZXJ2aWNlRGF0YSA9ICRTZWxmLT5fU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlKAogICAgICAgICAgICBTZXJ2aWNlRGF0YSA9PiAkU2VydmljZURhdGEsCiAgICAgICAgICAgIFByZWZlcmVuY2VzID0+IFwlUHJlZmVyZW5jZXMsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgJFNlcnZpY2VEYXRhID0gXCVOZXdTZXJ2aWNlRGF0YTsKIyBFTyBJVFNNQ29yZQogICAgfQoKICAgIGlmIChAU2VydmljZUxpc3QpIHsKCiAgICAgICAgIyBzZXQgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFxAU2VydmljZUxpc3QsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gXEBTZXJ2aWNlTGlzdDsKfQoKPWhlYWQyIFNlcnZpY2VHZXQoKQoKcmV0dXJuIGEgc2VydmljZSBhcyBoYXNoCgpSZXR1cm4KICAgICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9CiAgICAkU2VydmljZURhdGF7UGFyZW50SUR9CiAgICAkU2VydmljZURhdGF7TmFtZX0KICAgICRTZXJ2aWNlRGF0YXtOYW1lU2hvcnR9CiAgICAkU2VydmljZURhdGF7VmFsaWRJRH0KICAgICRTZXJ2aWNlRGF0YXtDb21tZW50fQogICAgJFNlcnZpY2VEYXRhe0NyZWF0ZVRpbWV9CiAgICAkU2VydmljZURhdGF7Q3JlYXRlQnl9CiAgICAkU2VydmljZURhdGF7Q2hhbmdlVGltZX0KICAgICRTZXJ2aWNlRGF0YXtDaGFuZ2VCeX0KIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICRTZXJ2aWNlRGF0YXtUeXBlSUR9CiAgICAkU2VydmljZURhdGF7VHlwZX0KICAgICRTZXJ2aWNlRGF0YXtDcml0aWNhbGl0eX0KICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVJRH0gICAgIyBPbmx5IGlmIEluY2lkZW50U3RhdGUgaXMgMQogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZX0gICAgICAjIE9ubHkgaWYgSW5jaWRlbnRTdGF0ZSBpcyAxCiAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gICMgT25seSBpZiBJbmNpZGVudFN0YXRlIGlzIDEKCiAgICBteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICBTZXJ2aWNlSUQgICAgID0+IDEyMywKICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsICMgT3B0aW9uYWwsIHJldHVybnMgQ3VySW5jaVN0YXRlIGV0Yy4KICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICApOwojIEVPIElUU01Db3JlCgogICAgbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgTmFtZSAgICA9PiAnU2VydmljZTo6U3ViU2VydmljZScsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGVpdGhlciBTZXJ2aWNlSUQgb3IgTmFtZSBtdXN0IGJlIHBhc3NlZAogICAgaWYgKCAhJFBhcmFte1NlcnZpY2VJRH0gJiYgISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU2VydmljZUlEIG9yIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHRoYXQgbm90IGJvdGggU2VydmljZUlEIGFuZCBOYW1lIGFyZSBnaXZlbgogICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSAmJiAkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIGVpdGhlciBTZXJ2aWNlSUQgT1IgTmFtZSAtIG5vdCBib3RoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb29rdXAgdGhlIFNlcnZpY2VJRAogICAgaWYgKCAkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJFBhcmFte1NlcnZpY2VJRH0gPSAkU2VsZi0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlZCByZXN1bHRzCiAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNlcnZpY2VHZXQ6OicgLiAkUGFyYW17U2VydmljZUlEfTsKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICMgYWRkIHRoZSBJbmNpZGVudFN0YXRlIHBhcmFtZXRlciB0byB0aGUgY2FjaGUga2V5CiAgICAkUGFyYW17SW5jaWRlbnRTdGF0ZX0gfHw9IDA7CiAgICAkQ2FjaGVLZXkgLj0gJzo6SW5jaWRlbnRTdGF0ZTo6JyAuICRQYXJhbXtJbmNpZGVudFN0YXRlfTsKIyBFTyBJVFNNQ29yZQogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJXskQ2FjaGV9IGlmIHJlZiAkQ2FjaGUgZXEgJ0hBU0gnOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBnZXQgc2VydmljZSBmcm9tIGRiCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+CiAgICAgICAgICAgICdTRUxFQ1QgaWQsIG5hbWUsIHZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSAnCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAgICAgICAgIC4gIiwgdHlwZV9pZCwgY3JpdGljYWxpdHkgIgojIEVPIElUU01Db3JlCiAgICAgICAgICAgIC4gJ0ZST00gc2VydmljZSBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlU2VydmljZURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU2VydmljZURhdGF7U2VydmljZUlEfSAgPSAkUm93WzBdOwogICAgICAgICRTZXJ2aWNlRGF0YXtOYW1lfSAgICAgICA9ICRSb3dbMV07CiAgICAgICAgJFNlcnZpY2VEYXRhe1ZhbGlkSUR9ICAgID0gJFJvd1syXTsKICAgICAgICAkU2VydmljZURhdGF7Q29tbWVudH0gICAgPSAkUm93WzNdIHx8ICcnOwogICAgICAgICRTZXJ2aWNlRGF0YXtDcmVhdGVUaW1lfSA9ICRSb3dbNF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyZWF0ZUJ5fSAgID0gJFJvd1s1XTsKICAgICAgICAkU2VydmljZURhdGF7Q2hhbmdlVGltZX0gPSAkUm93WzZdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDaGFuZ2VCeX0gICA9ICRSb3dbN107CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAgICAgJFNlcnZpY2VEYXRhe1R5cGVJRH0gICAgICA9ICRSb3dbOF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fSA9ICRSb3dbOV0gfHwgJyc7CiMgRU8gSVRTTUNvcmUKICAgIH0KCiAgICAjIGNoZWNrIHNlcnZpY2UKICAgIGlmICggISRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBTZXJ2aWNlSUQgKCRQYXJhbXtTZXJ2aWNlSUR9KSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIHNob3J0IG5hbWUgYW5kIHBhcmVudCBpZAogICAgJFNlcnZpY2VEYXRhe05hbWVTaG9ydH0gPSAkU2VydmljZURhdGF7TmFtZX07CiAgICBpZiAoICRTZXJ2aWNlRGF0YXtOYW1lfSA9fiBteyBcQSAoLiopIDo6ICguKz8pIFx6IH14bXMgKSB7CiAgICAgICAgJFNlcnZpY2VEYXRhe05hbWVTaG9ydH0gPSAkMjsKCiAgICAgICAgIyBsb29rdXAgcGFyZW50CiAgICAgICAgbXkgJFNlcnZpY2VJRCA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICBOYW1lID0+ICQxLAogICAgICAgICk7CiAgICAgICAgJFNlcnZpY2VEYXRhe1BhcmVudElEfSA9ICRTZXJ2aWNlSUQ7CiAgICB9CgogICAgIyBnZXQgc2VydmljZSBwcmVmZXJlbmNlcwogICAgbXkgJVByZWZlcmVuY2VzID0gJFNlbGYtPlNlcnZpY2VQcmVmZXJlbmNlc0dldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0sCiAgICApOwoKICAgICMgbWVyZ2UgaGFzaAogICAgaWYgKCVQcmVmZXJlbmNlcykgewogICAgICAgICVTZXJ2aWNlRGF0YSA9ICggJVNlcnZpY2VEYXRhLCAlUHJlZmVyZW5jZXMgKTsKICAgIH0KIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgIGlmICggJFBhcmFte0luY2lkZW50U3RhdGV9ICkgewogICAgICAgICMgZ2V0IGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUsIGNhbGN1bGF0ZWQgZnJvbSByZWxhdGVkIGNvbmZpZyBpdGVtcyBhbmQgY2hpbGQgc2VydmljZXMKICAgICAgICAlU2VydmljZURhdGEgPSAkU2VsZi0+X1NlcnZpY2VHZXRDdXJyZW50SW5jaWRlbnRTdGF0ZSgKICAgICAgICAgICAgU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YSwKICAgICAgICAgICAgUHJlZmVyZW5jZXMgPT4gXCVQcmVmZXJlbmNlcywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KIyBFTyBJVFNNQ29yZQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVTZXJ2aWNlRGF0YSwKICAgICk7CgogICAgcmV0dXJuICVTZXJ2aWNlRGF0YTsKfQoKPWhlYWQyIFNlcnZpY2VMb29rdXAoKQoKcmV0dXJuIGEgc2VydmljZSBuYW1lIGFuZCBpZAoKICAgIG15ICRTZXJ2aWNlTmFtZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKAogICAgICAgIFNlcnZpY2VJRCA9PiAxMjMsCiAgICApOwoKICAgIG9yCgogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKAogICAgICAgIE5hbWUgPT4gJ1NlcnZpY2U6OlN1YlNlcnZpY2UnLAogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtTZXJ2aWNlSUR9ICYmICEkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNlcnZpY2VJRCBvciBOYW1lIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSApIHsKCiAgICAgICAgIyBjaGVjayBjYWNoZQogICAgICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U2VydmljZUxvb2t1cDo6SUQ6OicgLiAkUGFyYW17U2VydmljZUlEfTsKICAgICAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJENhY2hlIGlmIGRlZmluZWQgJENhY2hlOwoKICAgICAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBsb29rdXAKICAgICAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgbmFtZSBGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1NlcnZpY2VJRH0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSAkUmVzdWx0ID0gJyc7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRSZXN1bHQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiAkUmVzdWx0LAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkUmVzdWx0OwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNlcnZpY2VMb29rdXA6Ok5hbWU6OicgLiAkUGFyYW17TmFtZX07CiAgICAgICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRDYWNoZSBpZiBkZWZpbmVkICRDYWNoZTsKCiAgICAgICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICAgICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgICMgbG9va3VwCiAgICAgICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRSZXN1bHQgPSAnJzsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJFJlc3VsdCA9ICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+ICRSZXN1bHQsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRSZXN1bHQ7CiAgICB9Cn0KCj1oZWFkMiBTZXJ2aWNlQWRkKCkKCmFkZCBhIHNlcnZpY2UKCiAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgTmFtZSAgICAgPT4gJ1NlcnZpY2UgTmFtZScsCiAgICAgICAgUGFyZW50SUQgPT4gMSwgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgQ29tbWVudCAgPT4gJ0NvbW1lbnQnLCAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICA9PiAxLAojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgICAgIFR5cGVJRCAgICAgID0+IDIsCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyBFTyBJVFNNQ29yZQogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIFZhbGlkSUQgVXNlcklEKSkgewogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBWYWxpZElEIFVzZXJJRCBUeXBlSUQgQ3JpdGljYWxpdHkpKSB7CiMgRU8gSVRTTUNvcmUKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgY29tbWVudAogICAgJFBhcmFte0NvbW1lbnR9IHx8PSAnJzsKCiAgICAjIGNsZWFudXAgZ2l2ZW4gcGFyYW1zCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIENvbW1lbnQpKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpLT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBzZXJ2aWNlIG5hbWUKICAgIGlmICggJFBhcmFte05hbWV9ID1+IG17IDo6IH14bXMgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBhZGQgc2VydmljZSEgSW52YWxpZCBTZXJ2aWNlIG5hbWUgJyRQYXJhbXtOYW1lfSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBmdWxsIG5hbWUKICAgICRQYXJhbXtGdWxsTmFtZX0gPSAkUGFyYW17TmFtZX07CgogICAgIyBnZXQgcGFyZW50IG5hbWUKICAgIGlmICggJFBhcmFte1BhcmVudElEfSApIHsKICAgICAgICBteSAkUGFyZW50TmFtZSA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte1BhcmVudElEfSwKICAgICAgICApOwogICAgICAgIGlmICgkUGFyZW50TmFtZSkgewogICAgICAgICAgICAkUGFyYW17RnVsbE5hbWV9ID0gJFBhcmVudE5hbWUgLiAnOjonIC4gJFBhcmFte05hbWV9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZmluZCBleGlzdGluZyBzZXJ2aWNlCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNlcnZpY2UgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtGdWxsTmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAkRXhpc3RzOwogICAgd2hpbGUgKCAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRXhpc3RzID0gMTsKICAgIH0KCiAgICAjIGFkZCBzZXJ2aWNlIHRvIGRhdGFiYXNlCiAgICBpZiAoJEV4aXN0cykgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQSBzZXJ2aWNlIHdpdGggdGhlIG5hbWUgYW5kIHBhcmVudCAnJFBhcmFte0Z1bGxOYW1lfScgYWxyZWFkeSBleGlzdHMuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiMgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gc2VydmljZSAnCiMgICAgICAgICAgICAuICcobmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSAnCiMgICAgICAgICAgICAuICdWQUxVRVMgKD8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAojICAgICAgICBCaW5kID0+IFsKIyAgICAgICAgICAgIFwkUGFyYW17RnVsbE5hbWV9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAojICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiMgICAgICAgIF0sCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlICcKICAgICAgICAgICAgLiAnKG5hbWUsIHZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSwgJwogICAgICAgICAgICAuICd0eXBlX2lkLCBjcml0aWNhbGl0eSkgJwogICAgICAgICAgICAuICdWQUxVRVMgKD8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgPywgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0Z1bGxOYW1lfSwgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtDb21tZW50fSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VHlwZUlEfSwgXCRQYXJhbXtDcml0aWNhbGl0eX0sCiAgICAgICAgXSwKIyBFTyBJVFNNQ29yZQogICAgKTsKCiAgICAjIGdldCBzZXJ2aWNlIGlkCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNlcnZpY2UgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtGdWxsTmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKICAgIG15ICRTZXJ2aWNlSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU2VydmljZUlEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIHJlc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgbXkgJVNlcnZpY2VzID0gJFNlbGYtPlNlcnZpY2VMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBnZW5lcmF0ZSBjaGFpbmVkIHRyYW5zbGF0aW9ucyBhdXRvbWF0aWNhbGx5CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHJhbnNsYXRpb25zJyktPlRyYW5zbGF0ZVBhcmVudENoaWxkRWxlbWVudHMoCiAgICAgICAgU3RyaW5ncyA9PiBbIHZhbHVlcyAlU2VydmljZXMgXSwKICAgICk7CgogICAgcmV0dXJuICRTZXJ2aWNlSUQ7Cn0KCj1oZWFkMiBTZXJ2aWNlVXBkYXRlKCkKCnVwZGF0ZSBhbiBleGlzdGluZyBzZXJ2aWNlCgogICAgbXkgJFRydWUgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIFBhcmVudElEICA9PiAxLCAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgTmFtZSAgICAgID0+ICdTZXJ2aWNlIE5hbWUnLAogICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgIENvbW1lbnQgICA9PiAnQ29tbWVudCcsICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICA9PiAxLAojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgICAgIFR5cGVJRCAgICAgID0+IDIsCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyBFTyBJVFNNQ29yZQogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTZXJ2aWNlSUQgTmFtZSBWYWxpZElEIFVzZXJJRCkpIHsKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNlcnZpY2VJRCBOYW1lIFZhbGlkSUQgVXNlcklEIFR5cGVJRCBDcml0aWNhbGl0eSkpIHsKIyBFTyBJVFNNQ29yZQogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IGNvbW1lbnQKICAgICRQYXJhbXtDb21tZW50fSB8fD0gJyc7CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBDb21tZW50KSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgc2VydmljZSBuYW1lCiAgICBpZiAoICRQYXJhbXtOYW1lfSA9fiBteyA6OiB9eG1zICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgdXBkYXRlIHNlcnZpY2UhIEludmFsaWQgU2VydmljZSBuYW1lICckUGFyYW17TmFtZX0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgb2xkIG5hbWUgb2Ygc2VydmljZQogICAgbXkgJE9sZFNlcnZpY2VOYW1lID0gJFNlbGYtPlNlcnZpY2VMb29rdXAoCiAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbXtTZXJ2aWNlSUR9LAogICAgKTsKCiAgICBpZiAoICEkT2xkU2VydmljZU5hbWUgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCB1cGRhdGUgc2VydmljZSEgU2VydmljZSAnJFBhcmFte1NlcnZpY2VJRH0nIGRvZXMgbm90IGV4aXN0LiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgZnVsbCBuYW1lCiAgICAkUGFyYW17RnVsbE5hbWV9ID0gJFBhcmFte05hbWV9OwoKICAgICMgZ2V0IHBhcmVudCBuYW1lCiAgICBpZiAoICRQYXJhbXtQYXJlbnRJRH0gKSB7CgogICAgICAgICMgbG9va3VwIHNlcnZpY2UKICAgICAgICBteSAkUGFyZW50TmFtZSA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte1BhcmVudElEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJFBhcmVudE5hbWUpIHsKICAgICAgICAgICAgJFBhcmFte0Z1bGxOYW1lfSA9ICRQYXJlbnROYW1lIC4gJzo6JyAuICRQYXJhbXtOYW1lfTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2ssIGlmIHNlbGVjdGVkIHBhcmVudCB3YXMgYSBjaGlsZCBvZiB0aGlzIHNlcnZpY2UKICAgICAgICBpZiAoICRQYXJhbXtGdWxsTmFtZX0gPX4gbXsgXEEgKCBcUSRPbGRTZXJ2aWNlTmFtZVxFICkgOjogfXhtcyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NhblwndCB1cGRhdGUgc2VydmljZSEgSW52YWxpZCBwYXJlbnQgd2FzIHNlbGVjdGVkLicKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZmluZCBleGlzdHMgc2VydmljZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBzZXJ2aWNlIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17RnVsbE5hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CiAgICBteSAkRXhpc3RzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSBuZSAkUm93WzBdICkgewogICAgICAgICAgICAkRXhpc3RzID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyB1cGRhdGUgc2VydmljZQogICAgaWYgKCRFeGlzdHMpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkEgc2VydmljZSB3aXRoIHRoZSBuYW1lIGFuZCBwYXJlbnQgJyRQYXJhbXtGdWxsTmFtZX0nIGFscmVhZHkgZXhpc3RzLiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CgogICAgfQoKICAgICMgdXBkYXRlIHNlcnZpY2UKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKIyAgICAgICAgU1FMID0+ICdVUERBVEUgc2VydmljZSBTRVQgbmFtZSA9ID8sIHZhbGlkX2lkID0gPywgY29tbWVudHMgPSA/LCAnCiMgICAgICAgICAgICAuICcgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPyBXSEVSRSBpZCA9ID8nLAojICAgICAgICBCaW5kID0+IFsKIyAgICAgICAgICAgIFwkUGFyYW17RnVsbE5hbWV9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAojICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1NlcnZpY2VJRH0sCiMgICAgICAgIF0sCiAgICAgICAgU1FMID0+ICdVUERBVEUgc2VydmljZSBTRVQgbmFtZSA9ID8sIHZhbGlkX2lkID0gPywgY29tbWVudHMgPSA/LCAnCiAgICAgICAgICAgIC4gJyBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/LCB0eXBlX2lkID0gPywgY3JpdGljYWxpdHkgPSA/JwogICAgICAgICAgICAuICcgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtUeXBlSUR9LCBcJFBhcmFte0NyaXRpY2FsaXR5fSwgXCRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgIF0sCiMgRU8gSVRTTUNvcmUKICAgICk7CgogICAgbXkgJExpa2VTZXJ2aWNlID0gJERCT2JqZWN0LT5RdW90ZSggJE9sZFNlcnZpY2VOYW1lLCAnTGlrZScgKSAuICc6OiUnOwoKICAgICMgZmluZCBhbGwgY2hpbGRyZW4KICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICJTRUxFQ1QgaWQsIG5hbWUgRlJPTSBzZXJ2aWNlIFdIRVJFIG5hbWUgTElLRSA/IiwKICAgICAgICBCaW5kID0+IFsgXCRMaWtlU2VydmljZSBdLAogICAgKTsKCiAgICBteSBAQ2hpbGRzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJUNoaWxkOwogICAgICAgICRDaGlsZHtTZXJ2aWNlSUR9ID0gJFJvd1swXTsKICAgICAgICAkQ2hpbGR7TmFtZX0gICAgICA9ICRSb3dbMV07CiAgICAgICAgcHVzaCBAQ2hpbGRzLCBcJUNoaWxkOwogICAgfQoKICAgICMgdXBkYXRlIGNoaWxkcmVuCiAgICBmb3IgbXkgJENoaWxkIChAQ2hpbGRzKSB7CiAgICAgICAgJENoaWxkLT57TmFtZX0gPX4gc3sgXEEgKCBcUSRPbGRTZXJ2aWNlTmFtZVxFICkgOjogfXskUGFyYW17RnVsbE5hbWV9Ojp9eG1zOwogICAgICAgICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gJ1VQREFURSBzZXJ2aWNlIFNFVCBuYW1lID0gPyBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsgXCRDaGlsZC0+e05hbWV9LCBcJENoaWxkLT57U2VydmljZUlEfSBdLAogICAgICAgICk7CiAgICB9CgogICAgIyByZXNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgIG15ICVTZXJ2aWNlcyA9ICRTZWxmLT5TZXJ2aWNlTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2VuZXJhdGUgY2hhaW5lZCB0cmFuc2xhdGlvbnMgYXV0b21hdGljYWxseQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRyYW5zbGF0aW9ucycpLT5UcmFuc2xhdGVQYXJlbnRDaGlsZEVsZW1lbnRzKAogICAgICAgIFN0cmluZ3MgPT4gWyB2YWx1ZXMgJVNlcnZpY2VzIF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgU2VydmljZVNlYXJjaCgpCgpyZXR1cm4gc2VydmljZSBpZHMgYXMgYW4gYXJyYXkKCiAgICBteSBAU2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVNlYXJjaCgKICAgICAgICBOYW1lICAgPT4gJ1NlcnZpY2UgTmFtZScsICMgKG9wdGlvbmFsKQogICAgICAgIExpbWl0ICA9PiAxMjIsICAgICAgICAgICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMTAwMAogICAgICAgIFVzZXJJRCA9PiAxLAojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgICAgIFR5cGVJRHMgICAgICAgPT4gMiwKICAgICAgICBDcml0aWNhbGl0aWVzID0+IFsgJzIgbG93JywgJzMgbm9ybWFsJyBdLAojIEVPIElUU01Db3JlCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VTZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgbGltaXQKICAgICRQYXJhbXtMaW1pdH0gfHw9IDEwMDA7CgogICAgIyBjcmVhdGUgc3FsIHF1ZXJ5CiAgICBteSAkU1FMID0gIlNFTEVDVCBpZCBGUk9NIHNlcnZpY2UgV0hFUkUgdmFsaWRfaWQgSU4gKCAke1woam9pbiAnLCAnLCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKSl9ICkiOwogICAgbXkgQEJpbmQ7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICBpZiAoICRQYXJhbXtOYW1lfSApIHsKCiAgICAgICAgIyBxdW90ZQogICAgICAgICRQYXJhbXtOYW1lfSA9ICREQk9iamVjdC0+UXVvdGUoICRQYXJhbXtOYW1lfSwgJ0xpa2UnICk7CgogICAgICAgICMgcmVwbGFjZSAqIHdpdGggJSBhbmQgY2xlYW4gdGhlIHN0cmluZwogICAgICAgICRQYXJhbXtOYW1lfSA9fiBzeyBcKisgfXslfXhtc2c7CiAgICAgICAgJFBhcmFte05hbWV9ID1+IHN7ICUrIH17JX14bXNnOwogICAgICAgIG15ICRMaWtlU3RyaW5nID0gJyUnIC4gJFBhcmFte05hbWV9IC4gJyUnOwogICAgICAgIHB1c2ggQEJpbmQsIFwkTGlrZVN0cmluZzsKCiAgICAgICAgJFNRTCAuPSAiIEFORCBuYW1lIExJS0UgPyI7CiAgICB9CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAjIGFkZCB0eXBlIGlkcwogICAgaWYgKCAkUGFyYW17VHlwZUlEc30gJiYgcmVmICRQYXJhbXtUeXBlSURzfSBlcSAnQVJSQVknICYmIEB7ICRQYXJhbXtUeXBlSURzfSB9ICkgewoKICAgICAgICAjIHF1b3RlIGFzIGludGVnZXIKICAgICAgICBmb3IgbXkgJFR5cGVJRCAoIEB7ICRQYXJhbXtUeXBlSURzfSB9ICkgewogICAgICAgICAgICAkVHlwZUlEID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkVHlwZUlELCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgICRTUUwgLj0gIiBBTkQgdHlwZV9pZCBJTiAoIiAuIGpvaW4oJywgJywgQHsgJFBhcmFte1R5cGVJRHN9IH0pIC4gIikgIjsKICAgIH0KCiAgICAjIGFkZCBjcml0aWNhbGl0aWVzCiAgICBpZiAoJFBhcmFte0NyaXRpY2FsaXRpZXN9ICYmIHJlZiAkUGFyYW17Q3JpdGljYWxpdGllc30gZXEgJ0FSUkFZJyAmJiBAeyAkUGFyYW17Q3JpdGljYWxpdGllc30gfSApIHsKCiAgICAgICAgIyBxdW90ZSBhbmQgd3JhcCBpbiBzaW5nbGUgcXVvdGVzCiAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoIEB7ICRQYXJhbXtDcml0aWNhbGl0aWVzfSB9ICkgewogICAgICAgICAgICAkQ3JpdGljYWxpdHkgPSAiJyIgLiAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRDcml0aWNhbGl0eSApIC4gIiciOwogICAgICAgIH0KCiAgICAgICAgJFNRTCAuPSAiQU5EIGNyaXRpY2FsaXR5IElOICgiIC4gam9pbignLCAnLCBAeyAkUGFyYW17Q3JpdGljYWxpdGllc30gfSkgLiAiKSAiOwogICAgfQojIEVPIElUU01Db3JlCgogICAgJFNRTCAuPSAnIE9SREVSIEJZIG5hbWUnOwoKICAgICMgc2VhcmNoIHNlcnZpY2UgaW4gZGIKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICRTUUwsCiAgICAgICAgQmluZCA9PiBcQEJpbmQsCiAgICApOwoKICAgIG15IEBTZXJ2aWNlTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQFNlcnZpY2VMaXN0LCAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBAU2VydmljZUxpc3Q7Cn0KCj1oZWFkMiBDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgpCgpyZXR1cm5zIGEgbGlzdCBvZiBjdXN0b21lcnVzZXIvc2VydmljZSBtZW1iZXJzCgogICAgU2VydmljZUlEOiBzZXJ2aWNlIGlkCiAgICBDdXN0b21lclVzZXJMb2dpbjogY3VzdG9tZXIgdXNlciBsb2dpbgogICAgRGVmYXVsdFNlcnZpY2VzOiBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlIGRlZmF1bHQgc2VydmljZXMKCiAgICBSZXN1bHQ6IEhBU0ggLT4gcmV0dXJucyBhIGhhc2ggb2Yga2V5ID0+IHNlcnZpY2UgaWQsIHZhbHVlID0+IHNlcnZpY2UgbmFtZQogICAgICAgICAgICBOYW1lIC0+IHJldHVybnMgYW4gYXJyYXkgb2YgdXNlciBuYW1lcwogICAgICAgICAgICBJRCAgIC0+IHJldHVybnMgYW4gYXJyYXkgb2YgdXNlciBpZHMKCiAgICBFeGFtcGxlIChnZXQgc2VydmljZXMgb2YgY3VzdG9tZXIgdXNlcik6CgogICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICdUZXN0JywKICAgICAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICAgICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMCwKICAgICk7CgogICAgRXhhbXBsZSAoZ2V0IGN1c3RvbWVyIHVzZXIgb2Ygc2VydmljZSk6CgogICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkSUQsCiAgICAgICAgUmVzdWx0ICAgID0+ICdIQVNIJywKICAgICk7Cgo9Y3V0CgpzdWIgQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1Jlc3VsdH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFJlc3VsdCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgKG9ubHkgMSBvciAwIGlzIGFsbG93ZWQgdG8gY29ycmVjdGx5IHNldCB0aGUgY2FjaGUga2V5KQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSB8fCAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSApIHsKICAgICAgICAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSA9IDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSA9IDA7CiAgICB9CgogICAgIyBnZXQgb3B0aW9ucyBmb3IgZGVmYXVsdCBzZXJ2aWNlcyBmb3IgdW5rbm93biBjdXN0b21lcnMKICAgIG15ICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpTZXJ2aWNlOjpEZWZhdWx0OjpVbmtub3duQ3VzdG9tZXInKTsKICAgIGlmICgKICAgICAgICAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIKICAgICAgICAmJiAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfQogICAgICAgICYmICEkUGFyYW17U2VydmljZUlEfQogICAgICAgICYmICEkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59CiAgICAgICAgKQogICAgewogICAgICAgICRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0gPSAnPERFRkFVTFQ+JzsKICAgIH0KCiAgICAjIGNoZWNrIG1vcmUgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2VydmljZUlEfSAmJiAhJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU2VydmljZUlEIG9yIEN1c3RvbWVyVXNlckxvZ2luIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgY2FjaGUga2V5CiAgICBteSAkQ2FjaGVLZXkgPSAnQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3Q6OicgLiAkUGFyYW17UmVzdWx0fSAuICc6OicKICAgICAgICAuICdEZWZhdWx0U2VydmljZXM6OicgLiAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSAuICc6Oic7CiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICRDYWNoZUtleSAuPSAnU2VydmljZUlEOjonIC4gJFBhcmFte1NlcnZpY2VJRH07CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0gKSB7CiAgICAgICAgJENhY2hlS2V5IC49ICdDdXN0b21lclVzZXJMb2dpbjo6JyAuICRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn07CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICBpZiAoICRQYXJhbXtSZXN1bHR9IGVxICdIQVNIJyApIHsKICAgICAgICByZXR1cm4gJXskQ2FjaGV9IGlmIHJlZiAkQ2FjaGUgZXEgJ0hBU0gnOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIEB7JENhY2hlfSBpZiByZWYgJENhY2hlIGVxICdBUlJBWSc7CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGRiIHF1b3RlCiAgICBmb3IgKCBzb3J0IGtleXMgJVBhcmFtICkgewogICAgICAgICRQYXJhbXskX30gPSAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17JF99ICk7CiAgICB9CiAgICBmb3IgKHF3KFNlcnZpY2VJRCkpIHsKICAgICAgICAkUGFyYW17JF99ID0gJERCT2JqZWN0LT5RdW90ZSggJFBhcmFteyRffSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyBzcWwKICAgIG15ICVEYXRhOwogICAgbXkgQERhdGE7CiAgICBteSAkU1FMID0gJ1NFTEVDVCBzY3Uuc2VydmljZV9pZCwgc2N1LmN1c3RvbWVyX3VzZXJfbG9naW4sIHMubmFtZSAnCiAgICAgICAgLiAnIEZST00gJwogICAgICAgIC4gJyBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgc2N1LCBzZXJ2aWNlIHMnCiAgICAgICAgLiAnIFdIRVJFICcKICAgICAgICAuICIgcy52YWxpZF9pZCBJTiAoICR7XChqb2luICcsICcsICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpKX0gKSBBTkQgIgogICAgICAgIC4gJyBzLmlkID0gc2N1LnNlcnZpY2VfaWQgQU5EICc7CgogICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSApIHsKICAgICAgICAkU1FMIC49ICIgc2N1LnNlcnZpY2VfaWQgPSAkUGFyYW17U2VydmljZUlEfSI7CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0gKSB7CiAgICAgICAgJFNRTCAuPSAiIHNjdS5jdXN0b21lcl91c2VyX2xvZ2luID0gJyRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0nIjsKICAgIH0KCiAgICAkREJPYmplY3QtPlByZXBhcmUoIFNRTCA9PiAkU1FMICk7CgogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgIG15ICRWYWx1ZSA9ICcnOwogICAgICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICREYXRheyAkUm93WzFdIH0gPSAkUm93WzBdOwogICAgICAgICAgICAkVmFsdWUgPSAkUm93WzBdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJERhdGF7ICRSb3dbMF0gfSA9ICRSb3dbMl07CiAgICAgICAgfQogICAgfQogICAgaWYgKAogICAgICAgICRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0KICAgICAgICAmJiAkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59IG5lICc8REVGQVVMVD4nCiAgICAgICAgJiYgJFBhcmFte0RlZmF1bHRTZXJ2aWNlc30KICAgICAgICAmJiAha2V5cyglRGF0YSkKICAgICAgICApCiAgICB7CiAgICAgICAgJURhdGEgPSAkU2VsZi0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICAgICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICc8REVGQVVMVD4nLAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICAgICAgICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHJldHVybiByZXN1bHQKICAgIGlmICggJFBhcmFte1Jlc3VsdH0gZXEgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gXCVEYXRhLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICVEYXRhOwogICAgfQogICAgaWYgKCAkUGFyYW17UmVzdWx0fSBlcSAnTmFtZScgKSB7CiAgICAgICAgQERhdGEgPSB2YWx1ZXMgJURhdGE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBARGF0YSA9IGtleXMgJURhdGE7CiAgICB9CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBEYXRhLAogICAgKTsKICAgIHJldHVybiBARGF0YTsKfQoKPWhlYWQyIEN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoKQoKdG8gYWRkIGEgbWVtYmVyIHRvIGEgc2VydmljZQoKaWYgJ0FjdGl2ZScgaXMgMCwgdGhlIGN1c3RvbWVyIGlzIHJlbW92ZWQgZnJvbSB0aGUgc2VydmljZQoKICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICdUZXN0MScsCiAgICAgICAgU2VydmljZUlEICAgICAgICAgPT4gNiwKICAgICAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDdXN0b21lclVzZXJMb2dpbiBTZXJ2aWNlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZGVsZXRlIGV4aXN0aW5nIHJlbGF0aW9uCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gc2VydmljZV9jdXN0b21lcl91c2VyIFdIRVJFIGN1c3RvbWVyX3VzZXJfbG9naW4gPSA/IEFORCBzZXJ2aWNlX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59LCBcJFBhcmFte1NlcnZpY2VJRH0gXSwKICAgICk7CgogICAgIyByZXR1cm4gaWYgcmVsYXRpb24gaXMgbm90IGFjdGl2ZQogICAgaWYgKCAhJFBhcmFte0FjdGl2ZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgaW5zZXJ0IG5ldyByZWxhdGlvbgogICAgbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gc2VydmljZV9jdXN0b21lcl91c2VyICcKICAgICAgICAgICAgLiAnKGN1c3RvbWVyX3VzZXJfbG9naW4sIHNlcnZpY2VfaWQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnkpICcKICAgICAgICAgICAgLiAnVkFMVUVTICg/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSwgXCRQYXJhbXtTZXJ2aWNlSUR9LCBcJFBhcmFte1VzZXJJRH0gXQogICAgKTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgcmV0dXJuICRTdWNjZXNzOwp9Cgo9aGVhZDIgU2VydmljZVByZWZlcmVuY2VzU2V0KCkKCnNldCBzZXJ2aWNlIHByZWZlcmVuY2VzCgogICAgJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQcmVmZXJlbmNlc1NldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIEtleSAgICAgICA9PiAnVXNlckNvbW1lbnQnLAogICAgICAgIFZhbHVlICAgICA9PiAnc29tZSBjb21tZW50JywKICAgICAgICBVc2VySUQgICAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlUHJlZmVyZW5jZXNTZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fS0+U2VydmljZVByZWZlcmVuY2VzU2V0KCVQYXJhbSk7CgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBTZXJ2aWNlUHJlZmVyZW5jZXNHZXQoKQoKZ2V0IHNlcnZpY2UgcHJlZmVyZW5jZXMKCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVByZWZlcmVuY2VzR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgU2VydmljZVByZWZlcmVuY2VzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5TZXJ2aWNlUHJlZmVyZW5jZXNHZXQoJVBhcmFtKTsKfQoKPWhlYWQyIFNlcnZpY2VQYXJlbnRzR2V0KCkKCnJldHVybiBhbiBvcmRlcmVkIGxpc3QgYWxsIHBhcmVudCBzZXJ2aWNlIElEcyBmb3IgdGhlIGdpdmVuIHNlcnZpY2UgZnJvbSB0aGUgcm9vdCBwYXJlbnQgdG8gdGhlCmN1cnJlbnQgc2VydmljZSBwYXJlbnQKCiAgICBteSAkU2VydmljZVBhcmVudHNMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgICAgIFNlcnZpY2VJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKICAgIHJldHVybnMKCiAgICAkU2VydmljZVBhcmVudHNMaXN0ID0gWyAxLCAyLCAuLi5dOwoKPWN1dAoKc3ViIFNlcnZpY2VQYXJlbnRzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhVc2VySUQgU2VydmljZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgJE5lZWRlZCEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcmVhZCBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ1NlcnZpY2VQYXJlbnRzR2V0OjonIC4gJFBhcmFte1NlcnZpY2VJRH07CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAkQ2FjaGUgaWYgcmVmICRDYWNoZTsKCiAgICAjIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlcwogICAgbXkgJFNlcnZpY2VMaXN0ID0gJFNlbGYtPlNlcnZpY2VMaXN0R2V0KAogICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGdldCBhIHNlcnZpY2UgbG9va3VwIHRhYmxlCiAgICBteSAlU2VydmljZUxvb2t1cDsKICAgIFNFUlZJQ0U6CiAgICBmb3IgbXkgJFNlcnZpY2VEYXRhICggQHskU2VydmljZUxpc3R9ICkgewogICAgICAgIG5leHQgU0VSVklDRSBpZiAhJFNlcnZpY2VEYXRhOwogICAgICAgIG5leHQgU0VSVklDRSBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJFNlcnZpY2VEYXRhKTsKICAgICAgICBuZXh0IFNFUlZJQ0UgaWYgISRTZXJ2aWNlRGF0YS0+e1NlcnZpY2VJRH07CgogICAgICAgICRTZXJ2aWNlTG9va3VweyAkU2VydmljZURhdGEtPntTZXJ2aWNlSUR9IH0gPSAkU2VydmljZURhdGE7CiAgICB9CgogICAgIyBleGl0IGlmIFNlcnZpY2VJRCBpcyBpbnZhbGlkCiAgICByZXR1cm4gaWYgISRTZXJ2aWNlTG9va3VweyAkUGFyYW17U2VydmljZUlEfSB9OwoKICAgICMgdG8gc3RvcmUgdGhlIHJldHVybiBzdHJ1Y3R1cmUKICAgIG15IEBTZXJ2aWNlUGFyZW50czsKCiAgICAjIGdldCB0aGUgU2VydmljZVBhcmVudElEIGZyb20gdGhlIHJlcXVlc3RlZCBzZXJ2aWNlCiAgICBteSAkU2VydmljZVBhcmVudElEID0gJFNlcnZpY2VMb29rdXB7ICRQYXJhbXtTZXJ2aWNlSUR9IH0tPntQYXJlbnRJRH07CgogICAgIyBnZXQgYWxsIHBhcmVudHMgZm9yIHRoZSByZXF1ZXN0ZWQgc2VydmljZQogICAgd2hpbGUgKCRTZXJ2aWNlUGFyZW50SUQpIHsKCiAgICAgICAgIyBhZGQgc2VydmljZSBwYXJlbnQgSUQgdG8gdGhlIHJldHVybiBzdHJ1Y3R1cmUKICAgICAgICBwdXNoIEBTZXJ2aWNlUGFyZW50cywgJFNlcnZpY2VQYXJlbnRJRDsKCiAgICAgICAgIyBzZXQgbmV4dCBTZXJ2aWNlUGFyZW50SUQgKHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgcGFyZW50KQogICAgICAgICRTZXJ2aWNlUGFyZW50SUQgPSAkU2VydmljZUxvb2t1cHskU2VydmljZVBhcmVudElEfS0+e1BhcmVudElEfSB8fCAwOwoKICAgIH0KCiAgICAjIHJldmVyc2UgdGhlIHJldHVybiBhcnJheSB0byBnZXQgdGhlIGxpc3Qgb3JkZXJlZCBmcm9tIG9sZCB0byB5b3VuZyAoaW4gcGFyZW50IGNvbnRleHQpCiAgICBteSBARGF0YSA9IHJldmVyc2UgQFNlcnZpY2VQYXJlbnRzOwoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBEYXRhLAogICAgKTsKCiAgICByZXR1cm4gXEBEYXRhOwp9Cgo9aGVhZDIgR2V0QWxsQ3VzdG9tU2VydmljZXMoKQoKZ2V0IGFsbCBjdXN0b20gc2VydmljZXMgb2Ygb25lIHVzZXIKCiAgICBteSBAU2VydmljZXMgPSAkU2VydmljZU9iamVjdC0+R2V0QWxsQ3VzdG9tU2VydmljZXMoIFVzZXJJRCA9PiAxMjMgKTsKCj1jdXQKCnN1YiBHZXRBbGxDdXN0b21TZXJ2aWNlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0dldEFsbEN1c3RvbVNlcnZpY2VzOjonIC4gJFBhcmFte1VzZXJJRH07CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKCiAgICByZXR1cm4gQHskQ2FjaGV9IGlmICRDYWNoZTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgc2VhcmNoIGFsbCBjdXN0b20gc2VydmljZXMKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFNFTEVDVCBzZXJ2aWNlX2lkCiAgICAgICAgICAgIEZST00gcGVyc29uYWxfc2VydmljZXMKICAgICAgICAgICAgV0hFUkUgdXNlcl9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1VzZXJJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAU2VydmljZUlEczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQFNlcnZpY2VJRHMsICRSb3dbMF07CiAgICB9CgogICAgIyBzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQFNlcnZpY2VJRHMsCiAgICApOwoKICAgIHJldHVybiBAU2VydmljZUlEczsKfQoKc3ViIEV4cG9ydFNlcnZpY2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFVzZXJJRCA9ICRTZWxmLT57VXNlcklEfSB8fCAkUGFyYW17VXNlcklEfTsKCiAgICBteSAlU2VydmljZUZpbHRlcjsKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17U2VydmljZXN9ICkgKSB7CiAgICAgICAgJVNlcnZpY2VGaWx0ZXIgPSBtYXAgeyAkXyA9PiAxIH0gJFBhcmFte1NlcnZpY2VzfS0+QCo7CiAgICB9CgogICAgbXkgJVNlcnZpY2VMaXN0ID0gJFNlbGYtPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgKTsKCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICBteSAkVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgKTsKIyBFTyBJVFNNQ29yZQoKICAgIG15ICVFeHBvcnREYXRhOwogICAgU0VSVklDRUlEOgogICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IGtleXMgJVNlcnZpY2VMaXN0ICkgewoKICAgICAgICBteSAlU2VydmljZURhdGEgPSAkU2VsZi0+U2VydmljZUdldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkVXNlcklELAogICAgICAgICk7CgogICAgICAgIGlmICglU2VydmljZUZpbHRlcikgewogICAgICAgICAgICBuZXh0IFNFUlZJQ0VJRCB1bmxlc3MgJFNlcnZpY2VGaWx0ZXJ7ICRTZXJ2aWNlRGF0YXtOYW1lfSB9OwogICAgICAgIH0KCiAgICAgICAgIyB0cmFuc2xhdGUgSURzIGludG8gbmFtZXMgb3IgbmFtZS1saWtlIGlkZW50aWZpZXJzCiAgICAgICAgbXkgJFZhbGlkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7CgogICAgICAgIEFUVFJJQlVURToKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIGtleXMgJVNlcnZpY2VEYXRhICkgewoKICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgdW5sZXNzICRBdHRyaWJ1dGUgPX4gL0lELzsKCiAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZSBlcSAnUGFyZW50SUQnICkgewogICAgICAgICAgICAgICAgbXkgJFBhcmVudFNlcnZpY2UgPSAkU2VsZi0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VEYXRhe1BhcmVudElEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU2VydmljZURhdGF7UGFyZW50fSA9ICRQYXJlbnRTZXJ2aWNlOwogICAgICAgICAgICAgICAgZGVsZXRlICRTZXJ2aWNlRGF0YXtQYXJlbnRJRH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkQXR0cmlidXRlIGVxICdWYWxpZElEJyApIHsKICAgICAgICAgICAgICAgIG15ICRWYWxpZCA9ICRWYWxpZE9iamVjdC0+VmFsaWRMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgVmFsaWRJRCA9PiAkU2VydmljZURhdGF7VmFsaWRJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFNlcnZpY2VEYXRhe1ZhbGlkfSA9ICRWYWxpZDsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkU2VydmljZURhdGF7VmFsaWRJRH07CiAgICAgICAgICAgIH0KIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICAgICAgICAgZWxzaWYgKCAkQXR0cmlidXRlIGVxICdUeXBlSUQnICYmIElzSGFzaFJlZldpdGhEYXRhKCRUeXBlTGlzdCkgKSB7CiAgICAgICAgICAgICAgICBteSAkVHlwZSA9ICRUeXBlTGlzdC0+eyRTZXJ2aWNlRGF0YXtUeXBlSUR9fTsKICAgICAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtUeXBlfSA9ICRUeXBlOwogICAgICAgICAgICAgICAgZGVsZXRlICRTZXJ2aWNlRGF0YXtUeXBlSUR9OwogICAgICAgICAgICB9CiMgRU8gSVRTTUNvcmUKICAgICAgICB9CgogICAgICAgIGRlbGV0ZSAkU2VydmljZURhdGF7Q2hhbmdlQnl9OwogICAgICAgIGRlbGV0ZSAkU2VydmljZURhdGF7Q2hhbmdlVGltZX07CiAgICAgICAgZGVsZXRlICRTZXJ2aWNlRGF0YXtDcmVhdGVCeX07CiAgICAgICAgZGVsZXRlICRTZXJ2aWNlRGF0YXtDcmVhdGVUaW1lfTsKICAgICAgICBkZWxldGUgJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH07CgogICAgICAgICRFeHBvcnREYXRheyAkU2VydmljZURhdGF7TmFtZX0gfSA9IFwlU2VydmljZURhdGE7CiAgICB9CgogICAgcmV0dXJuIFwlRXhwb3J0RGF0YTsKfQoKc3ViIEltcG9ydFNlcnZpY2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFVzZXJJRCA9ICRTZWxmLT57VXNlcklEfSB8fCAkUGFyYW17VXNlcklEfTsKCiAgICBteSAkVmFsaWRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRTZWxmLT5TZXJ2aWNlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICk7CiAgICBteSAlU2VydmljZUxvb2t1cCA9IHJldmVyc2UgJVNlcnZpY2VMaXN0OwoKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgIG15ICRUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCiAgICApOwoKICAgIG15ICVUeXBlTG9va3VwID0gSXNIYXNoUmVmV2l0aERhdGEoJFR5cGVMaXN0KSA/IHJldmVyc2UgJFR5cGVMaXN0LT4lKiA6ICgpOwojIEVPIElUU01Db3JlCgogICAgIyBzb3J0IHNlcnZpY2VzIGJ5IHBhcmVudCBhdHRyaWJ1dGUKICAgIG15IEBGaXJzdExldmVsU2VydmljZXM7CiAgICBteSBAQ2hpbGRTZXJ2aWNlczsKICAgIGZvciBteSAkU2VydmljZU5hbWUgKCBrZXlzICRQYXJhbXtTZXJ2aWNlc30tPiUqICkgewogICAgICAgIGlmICggJFBhcmFte1NlcnZpY2VzfXskU2VydmljZU5hbWV9e1BhcmVudH0gKSB7CiAgICAgICAgICAgIHB1c2ggQENoaWxkU2VydmljZXMsICRTZXJ2aWNlTmFtZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHB1c2ggQEZpcnN0TGV2ZWxTZXJ2aWNlcywgJFNlcnZpY2VOYW1lOwogICAgICAgIH0KICAgIH0KICAgIG15IEBDaGlsZFNlcnZpY2VzU29ydGVkID0gc29ydCB7CiAgICAgICAgaWYgKCAoICRQYXJhbXtTZXJ2aWNlc317JGF9e1BhcmVudH0gLy8gJycgKSBlcSAkUGFyYW17U2VydmljZXN9eyRifXtOYW1lfSApIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggKCAkUGFyYW17U2VydmljZXN9eyRifXtQYXJlbnR9IC8vICcnICkgZXEgJFBhcmFte1NlcnZpY2VzfXskYX17TmFtZX0gKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgIH0gQENoaWxkU2VydmljZXM7CgogICAgU0VSVklDRU5BTUU6CiAgICBmb3IgbXkgJFNlcnZpY2VOYW1lICggQEZpcnN0TGV2ZWxTZXJ2aWNlcywgQENoaWxkU2VydmljZXNTb3J0ZWQgKSB7CiAgICAgICAgbXkgJFNlcnZpY2VEYXRhID0gJFBhcmFte1NlcnZpY2VzfXskU2VydmljZU5hbWV9OwoKICAgICAgICAjIHNraXAgaWYgcGFyZW50IGF0dHJpYnV0ZSBwcmVzZW50IGJ1dCBubyBjb3JyZXNwb25kaW5nIHNlcnZpY2UKICAgICAgICBpZiAoICRTZXJ2aWNlRGF0YS0+e1BhcmVudH0gKSB7CiAgICAgICAgICAgIG15ICRQYXJlbnRTZXJ2aWNlSUQgPSAkU2VsZi0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgICAgIE5hbWUgPT4gJFNlcnZpY2VEYXRhLT57UGFyZW50fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgU0VSVklDRU5BTUUgdW5sZXNzICRQYXJlbnRTZXJ2aWNlSUQ7CgogICAgICAgICAgICAkU2VydmljZURhdGEtPntQYXJlbnRJRH0gPSAkUGFyZW50U2VydmljZUlEOwogICAgICAgIH0KCiAgICAgICAgIyBpbiBjYXNlIG9mIGNoaWxkIHNlcnZpY2UsIGNoZWNrIGlmIGFsbCBwYXJlbnQgc2VydmljZXMgYXJlIHByZXNlbnQKICAgICAgICAjICAgZWl0aGVyIGluIHRoZSBzeXN0ZW0gb3IgaW4gdGhlIGltcG9ydCBkYXRhCiAgICAgICAgbXkgQE5hbWVFbGVtZW50cyA9IHNwbGl0KCAvOjovLCAkU2VydmljZURhdGEtPntOYW1lfSApOwogICAgICAgIGlmICggc2NhbGFyIEBOYW1lRWxlbWVudHMgPiAxICkgewogICAgICAgICAgICBteSAkTmFtZVN0cmcgPSAnJzsKICAgICAgICAgICAgZm9yIG15ICRJbmRleCAoIDAgLi4gJCNOYW1lRWxlbWVudHMgLSAxICkgewogICAgICAgICAgICAgICAgaWYgKCROYW1lU3RyZykgewogICAgICAgICAgICAgICAgICAgICROYW1lU3RyZyAuPSAnOjonIC4gJE5hbWVFbGVtZW50c1skSW5kZXhdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJE5hbWVTdHJnIC49ICROYW1lRWxlbWVudHNbJEluZGV4XTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICEkU2VydmljZUxvb2t1cHskTmFtZVN0cmd9ICYmICEkUGFyYW17U2VydmljZXN9eyROYW1lU3RyZ30gKSB7CgogICAgICAgICAgICAgICAgICAgICMgcGFyZW50IGVsZW1lbnQgbm90IGZvdW5kLCBza2lwcGluZwogICAgICAgICAgICAgICAgICAgIG5leHQgU0VSVklDRU5BTUU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VydmljZUxvb2t1cHsgJFNlcnZpY2VEYXRhLT57TmFtZX0gfTsKCiAgICAgICAgIyBza2lwIGlmIHNlcnZpY2Ugd2l0aCBzYW1lIG5hbWUgZXhpc3RzIGFuZCBvdmVyd3JpdGUgaXMgbm90IHNldAogICAgICAgIG5leHQgU0VSVklDRU5BTUUgaWYgKCAhJFBhcmFte092ZXJ3cml0ZUV4aXN0aW5nRW50aXRpZXN9ICYmICRTZXJ2aWNlSUQgKTsKCiAgICAgICAgIyB0cmFuc2xhdGUgbmFtZWQgZGF0YSBiYWNrIHRvIElEcwojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgICAgIGlmICggJFNlcnZpY2VEYXRhLT57VHlwZX0gKSB7CiAgICAgICAgICAgICRTZXJ2aWNlRGF0YS0+e1R5cGVJRH0gPSAkVHlwZUxvb2t1cHskU2VydmljZURhdGEtPntUeXBlfX07CiAgICAgICAgfQojIEVPIElUU01Db3JlCiAgICAgICAgJFNlcnZpY2VEYXRhLT57VmFsaWRJRH0gPSAkVmFsaWRPYmplY3QtPlZhbGlkTG9va3VwKAogICAgICAgICAgICBWYWxpZCA9PiAkU2VydmljZURhdGEtPntWYWxpZH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRTZXJ2aWNlSUQpIHsKCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgICAgICAgICAkU2VydmljZURhdGEtPiUqLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlRGF0YS0+e05hbWVTaG9ydH0sCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkVXNlcklELAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gdW5sZXNzICRTdWNjZXNzOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbXkgJFNlcnZpY2VJRCA9ICRTZWxmLT5TZXJ2aWNlQWRkKAogICAgICAgICAgICAgICAgJFNlcnZpY2VEYXRhLT4lKiwKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkU2VydmljZURhdGEtPntOYW1lU2hvcnR9LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgJFNlcnZpY2VJRDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKCj1oZWFkMiBfU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlKCkKClJldHVybnMgYSBoYXNoIHdpdGggdGhlIG9yaWdpbmFsIHNlcnZpY2UgZGF0YSwKZW5oYW5jZWQgd2l0aCBhZGRpdGlvbmFsIHNlcnZpY2UgZGF0YSBhYm91dCB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSwKYmFzZWQgb24gY29uZmlndXJhdGlvbiBpdGVtcyBhbmQgb3RoZXIgc2VydmljZXMuCgogICAgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPl9TZXJ2aWNlR2V0Q3VycmVudEluY2lkZW50U3RhdGUoCiAgICAgICAgU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YSwKICAgICAgICBQcmVmZXJlbmNlcyA9PiBcJVByZWZlcmVuY2VzLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9TZXJ2aWNlR2V0Q3VycmVudEluY2lkZW50U3RhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZURhdGEgUHJlZmVyZW5jZXMgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZURhdGEgUHJlZmVyZW5jZXMpKSB7CiAgICAgICAgaWYgKCByZWYgJFBhcmFteyRBcmd1bWVudH0gbmUgJ0hBU0gnICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEFyZ3VtZW50IG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbWFrZSBsb2NhbCBjb3BpZXMKICAgIG15ICVTZXJ2aWNlRGF0YSA9ICV7ICRQYXJhbXtTZXJ2aWNlRGF0YX0gfTsKICAgIG15ICVQcmVmZXJlbmNlcyA9ICV7ICRQYXJhbXtQcmVmZXJlbmNlc30gfTsKCiAgICAjIGdldCBzZXJ2aWNlIHR5cGUgbGlzdAogICAgbXkgJFNlcnZpY2VUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCiAgICApOwogICAgJFNlcnZpY2VEYXRhe1R5cGV9ID0gJFNlcnZpY2VUeXBlTGlzdC0+eyAkU2VydmljZURhdGF7VHlwZUlEfSB9IHx8ICcnOwoKICAgICMgc2V0IGRlZmF1bHQgaW5jaWRlbnQgc3RhdGUgdHlwZQogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ID0gJ29wZXJhdGlvbmFsJzsKCiAgICAjIGdldCBJVFNNIG1vZHVsZSBkaXJlY3RvcnkKICAgIG15ICRDb25maWdJdGVtTW9kdWxlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdIb21lJykgLiAnL0tlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0ucG0nOwoKICAgICMgY2hlY2sgaWYgSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50IHBhY2thZ2UgaXMgaW5zdGFsbGVkCiAgICBpZiAoIC1lICRDb25maWdJdGVtTW9kdWxlICkgewoKICAgICAgICAjIGNoZWNrIGlmIGEgcHJlZmVyZW5jZSBzZXR0aW5nIGZvciBDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcyBleGlzdHMKICAgICAgICBpZiAoICRQcmVmZXJlbmNlc3tDdXJJbmNpU3RhdGVUeXBlRnJvbUNJc30gKSB7CgogICAgICAgICAgICAjIHNldCBkZWZhdWx0IGluY2lkZW50IHN0YXRlIHR5cGUgZnJvbSBzZXJ2aWNlIHByZWZlcmVuY2VzICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycKICAgICAgICAgICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ID0gJFByZWZlcmVuY2Vze0N1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzfTsKICAgICAgICB9CgogICAgICAgICMgc2V0IHRoZSBwcmVmZXJlbmNlcyBzZXR0aW5nIGZvciBDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcwogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBnZXQgaW5jaWRlbnQgbGluayB0eXBlcyBhbmQgZGlyZWN0aW9ucyBmcm9tIGNvbmZpZwogICAgICAgICAgICBteSAkSW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSVRTTTo6Q29yZTo6SW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbicpOwoKICAgICAgICAgICAgIyB0byBzdG9yZSBhbGwgbGlua2VkIGNvbmZpZyBpdGVtIGlkcyBvZiB0aGlzIHNlcnZpY2UgKGZvciBhbGwgY29uZmlndXJlZCBsaW5rIHR5cGVzKQogICAgICAgICAgICBteSAlQWxsTGlua2VkQ29uZmlnSXRlbUlEczsKCiAgICAgICAgICAgIExJTktUWVBFOgogICAgICAgICAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uIH0gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIGRpcmVjdGlvbgogICAgICAgICAgICAgICAgbXkgJExpbmtEaXJlY3Rpb24gPSAkSW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbi0+eyRMaW5rVHlwZX07CgogICAgICAgICAgICAgICAgIyByZXZlcnNlIHRoZSBsaW5rIGRpcmVjdGlvbiwgYXMgdGhpcyBpcyB0aGUgcGVyc3BlY3RpdmUgZnJvbSB0aGUgc2VydmljZQogICAgICAgICAgICAgICAgIyBubyBuZWVkIHRvIHJldmVyc2UgaWYgZGlyZWN0aW9uIGlzICdCb3RoJwogICAgICAgICAgICAgICAgaWYgKCAkTGlua0RpcmVjdGlvbiBlcSAnU291cmNlJyApIHsKICAgICAgICAgICAgICAgICAgICAkTGlua0RpcmVjdGlvbiA9ICdUYXJnZXQnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkTGlua0RpcmVjdGlvbiBlcSAnVGFyZ2V0JyApIHsKICAgICAgICAgICAgICAgICAgICAkTGlua0RpcmVjdGlvbiA9ICdTb3VyY2UnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZmluZCBhbGwgbGlua2VkIGNvbmZpZyBpdGVtcyB3aXRoIHRoaXMgbGlua3R5cGUgYW5kIGRpcmVjdGlvbgogICAgICAgICAgICAgICAgbXkgJUxpbmtlZENvbmZpZ0l0ZW1JRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rS2V5TGlzdFdpdGhEYXRhKAogICAgICAgICAgICAgICAgICAgIE9iamVjdDEgICA9PiAnU2VydmljZScsCiAgICAgICAgICAgICAgICAgICAgS2V5MSAgICAgID0+ICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIE9iamVjdDIgICA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAkTGlua1R5cGUsCiAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uID0+ICRMaW5rRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIHRoZSBsaW5rZWQgY29uZmlnIGl0ZW1zCiAgICAgICAgICAgICAgICAlQWxsTGlua2VkQ29uZmlnSXRlbUlEcyA9ICggJUFsbExpbmtlZENvbmZpZ0l0ZW1JRHMsICVMaW5rZWRDb25maWdJdGVtSURzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpbnZlc3RpZ2F0ZSB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiBlYWNoIGNvbmZpZyBpdGVtCiAgICAgICAgICAgIENPTkZJR0lURU1JRDoKICAgICAgICAgICAgZm9yIG15ICRDb25maWdJdGVtSUQgKCBzb3J0IGtleXMgJUFsbExpbmtlZENvbmZpZ0l0ZW1JRHMgKSB7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IGNvbmZpZyBpdGVtIGRhdGEKICAgICAgICAgICAgICAgIG15ICRDb25maWdJdGVtRGF0YSA9ICRBbGxMaW5rZWRDb25maWdJdGVtSURzeyRDb25maWdJdGVtSUR9OwoKICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICRDb25maWdJdGVtRGF0YS0+e0N1ckRlcGxTdGF0ZVR5cGV9IG5lICdwcm9kdWN0aXZlJzsKICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICRDb25maWdJdGVtRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IGVxICdvcGVyYXRpb25hbCc7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIG11c3QgYmUgc2V0IHRvICd3YXJuaW5nJwogICAgICAgICAgICAgICAgaWYgKCAkQ29uZmlnSXRlbURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSBlcSAnd2FybmluZycgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ID0gJ3dhcm5pbmcnOwogICAgICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgc2VydmljZSBtdXN0IGJlIHNldCB0byAnaW5jaWRlbnQnCiAgICAgICAgICAgICAgICBpZiAoICRDb25maWdJdGVtRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IGVxICdpbmNpZGVudCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ID0gJ2luY2lkZW50JzsKICAgICAgICAgICAgICAgICAgICBsYXN0IENPTkZJR0lURU1JRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB1cGRhdGUgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgdHlwZSBmcm9tIENJcyBvZiB0aGUgc2VydmljZQogICAgICAgICAgICAkU2VsZi0+U2VydmljZVByZWZlcmVuY2VzU2V0KAogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgS2V5ICAgICAgID0+ICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCB0aGUgcHJlZmVyZW5jZXMgbG9jYWxseQogICAgICAgICAgICAkUHJlZmVyZW5jZXN7Q3VySW5jaVN0YXRlVHlwZUZyb21DSXN9ID0gJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGludmVzdGlnYXRlIHRoZSBzdGF0ZSBvZiBhbGwgY2hpbGQgc2VydmljZXMKICAgIGlmICggJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9IGVxICdvcGVyYXRpb25hbCcgKSB7CgogICAgICAgICMgY3JlYXRlIHRoZSB2YWxpZCBzdHJpbmcKICAgICAgICBteSAkVmFsaWRJRFN0cmluZyA9IGpvaW4gcXssIH0sICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpOwoKICAgICAgICAjIHByZXBhcmUgbmFtZQogICAgICAgIG15ICROYW1lID0gJFNlcnZpY2VEYXRhe05hbWV9OwogICAgICAgICROYW1lID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkTmFtZSwgJ0xpa2UnICk7CgogICAgICAgICMgZ2V0IGxpc3Qgb2YgYWxsIHZhbGlkIGNoaWxkcwogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHNlcnZpY2UgIgogICAgICAgICAgICAgICAgLiAiV0hFUkUgbmFtZSBMSUtFICciIC4gJE5hbWUgLiAiOjolJyAiCiAgICAgICAgICAgICAgICAuICJBTkQgdmFsaWRfaWQgSU4gKCIgLiAkVmFsaWRJRFN0cmluZyAuICIpIiwKICAgICAgICApOwoKICAgICAgICAjIGZpbmQgbGVuZ3RoIG9mIGNoaWxkcyBwcmVmaXgKICAgICAgICBteSAkUHJlZml4TGVuZ3RoID0gbGVuZ3RoICIkU2VydmljZURhdGF7TmFtZX06OiI7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15IEBDaGlsZElEczsKICAgICAgICBST1c6CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBjaGlsZCBwYXJ0CiAgICAgICAgICAgIG15ICRDaGlsZFBhcnQgPSBzdWJzdHIgJFJvd1sxXSwgJFByZWZpeExlbmd0aDsKCiAgICAgICAgICAgIG5leHQgUk9XIGlmICRDaGlsZFBhcnQgPX4gbXsgOjogfXhtczsKCiAgICAgICAgICAgIHB1c2ggQENoaWxkSURzLCAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgU0VSVklDRUlEOgogICAgICAgIGZvciBteSAkU2VydmljZUlEICggQENoaWxkSURzICkgewoKICAgICAgICAgICAgIyBnZXQgZGF0YSBvZiBjaGlsZCBzZXJ2aWNlCiAgICAgICAgICAgIG15ICVDaGlsZFNlcnZpY2VEYXRhID0gJFNlbGYtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBTRVJWSUNFSUQgaWYgJENoaWxkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gZXEgJ29wZXJhdGlvbmFsJzsKCiAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICd3YXJuaW5nJzsKICAgICAgICAgICAgbGFzdCBTRVJWSUNFSUQ7CiAgICAgICAgfQogICAgfQoKICAgICMgZGVmaW5lIGRlZmF1bHQgaW5jaWRlbnQgc3RhdGVzCiAgICBteSAlRGVmYXVsdEluY2lTdGF0ZXMgPSAoCiAgICAgICAgb3BlcmF0aW9uYWwgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICB3YXJuaW5nICAgICA9PiAnV2FybmluZycsCiAgICAgICAgaW5jaWRlbnQgICAgPT4gJ0luY2lkZW50JywKICAgICk7CgogICAgIyBnZXQgdGhlIGluY2lkZW50IHN0YXRlIGxpc3Qgb2YgdGhpcyB0eXBlCiAgICBteSAkSW5jaVN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICAgID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKICAgICAgICBQcmVmZXJlbmNlcyAgID0+IHsKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0sCiAgICAgICAgfSwKICAgICk7CgogICAgbXkgJVJldmVyc2VJbmNpU3RhdGVMaXN0ID0gcmV2ZXJzZSAleyAkSW5jaVN0YXRlTGlzdCB9OwogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZUlEfQogICAgICAgID0gJFJldmVyc2VJbmNpU3RhdGVMaXN0eyAkRGVmYXVsdEluY2lTdGF0ZXN7ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSB9IH07CgogICAgIyBmYWxsYmFjayBpZiB0aGUgZGVmYXVsdCBpbmNpZGVudCBzdGF0ZSBpcyBkZWFjdGl2YXRlZAogICAgaWYgKCAhJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZUlEfSApIHsKICAgICAgICBteSBAU29ydGVkSW5jaUxpc3QgPSBzb3J0IGtleXMgJXsgJEluY2lTdGF0ZUxpc3QgfTsKICAgICAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlSUR9ID0gJFNvcnRlZEluY2lMaXN0WzBdOwogICAgfQoKICAgICMgZ2V0IGluY2lkZW50IHN0YXRlIGZ1bmN0aW9uYWxpdHkKICAgIG15ICRJbmNpU3RhdGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICBJdGVtSUQgPT4gJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZUlEfSwKICAgICk7CgogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZX0gICAgID0gJEluY2lTdGF0ZS0+e05hbWV9OwogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ID0gJEluY2lTdGF0ZS0+e0Z1bmN0aW9uYWxpdHl9WzBdIC8vICcnOwoKICAgICVTZXJ2aWNlRGF0YSA9ICglU2VydmljZURhdGEsICVQcmVmZXJlbmNlcyk7CgogICAgcmV0dXJuICVTZXJ2aWNlRGF0YTsKfQoKIyBFTyBJVFNNQ29yZQoKMTsK</File>
        <File Location="Kernel/System/SLA.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBlYTIxMTkwMjEzMGNhNWI3OTZkOTY2ODQ1OTcwY2ZjNTQ2NDQ0NTQ4IC0gS2VybmVsL1N5c3RlbS9TTEEucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6U0xBOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKIyB1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNBcnJheVJlZldpdGhEYXRhKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSk7CiMgRU8gSVRTTUNvcmUKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKIyBFTyBJVFNNQ29yZQogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpTTEEgLSBzbGEgbGliCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBzbGEgZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKRG9uJ3QgdXNlIHRoZSBjb25zdHJ1Y3RvciBkaXJlY3RseSwgdXNlIHRoZSBPYmplY3RNYW5hZ2VyIGluc3RlYWQ6CgogICAgbXkgJFNMQU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgY29uZmlndXJlZCBwcmVmZXJlbmNlcyBvYmplY3QKICAgIG15ICRHZW5lcmF0b3JNb2R1bGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NMQTo6UHJlZmVyZW5jZXNNb2R1bGUnKQogICAgICAgIHx8ICdLZXJuZWw6OlN5c3RlbTo6U0xBOjpQcmVmZXJlbmNlc0RCJzsKCiAgICAjIGdldCBwcmVmZXJlbmNlcyBvYmplY3QKICAgICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9ID0gJEtlcm5lbDo6T00tPkdldCgkR2VuZXJhdG9yTW9kdWxlKTsKCiAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnU0xBJzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9IDYwICogNjAgKiAyNCAqIDIwOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFNMQUxpc3QoKQoKcmV0dXJuIGEgaGFzaCBsaXN0IG9mIHNsYXMKCiAgICBteSAlU0xBTGlzdCA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICAgICAgU2VydmljZUlEID0+IDEsICAjIChvcHRpb25hbCkKICAgICAgICBWYWxpZCAgICAgPT4gMCwgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEgKDB8MSkKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgU0xBTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCB2YWxpZCBwYXJhbQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRQYXJhbXtWYWxpZH0gPSAxOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBhZGQgU2VydmljZUlECiAgICBteSAlU1FMVGFibGU7CiAgICAkU1FMVGFibGV7c2xhfSA9ICdzbGEgcyc7CiAgICBteSBAU1FMV2hlcmU7CiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewoKICAgICAgICAjIHF1b3RlCiAgICAgICAgJFBhcmFte1NlcnZpY2VJRH0gPSAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17U2VydmljZUlEfSwgJ0ludGVnZXInICk7CgogICAgICAgICRTUUxUYWJsZXtzZXJ2aWNlfSA9ICdzZXJ2aWNlX3NsYSByJzsKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgInMuaWQgPSByLnNsYV9pZCBBTkQgci5zZXJ2aWNlX2lkID0gJFBhcmFte1NlcnZpY2VJRH0iOwogICAgfQoKICAgICMgYWRkIHZhbGlkIHBhcnQKICAgIGlmICggJFBhcmFte1ZhbGlkfSApIHsKCiAgICAgICAgIyBnZXQgdmFsaWQgb2JqZWN0CiAgICAgICAgbXkgJFZhbGlkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7CgogICAgICAgICMgY3JlYXRlIHRoZSB2YWxpZCBsaXN0CiAgICAgICAgbXkgJFZhbGlkSURzID0gam9pbiAnLCAnLCAkVmFsaWRPYmplY3QtPlZhbGlkSURzR2V0KCk7CgogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAicy52YWxpZF9pZCBJTiAoICRWYWxpZElEcyApIjsKICAgIH0KCiAgICAjIGNyZWF0ZSB0aGUgdGFibGUgYW5kIHdoZXJlIHN0cmluZ3MKICAgIG15ICRUYWJsZVN0cmluZyA9IGpvaW4gcXssIH0sIHZhbHVlcyAlU1FMVGFibGU7CiAgICBteSAkV2hlcmVTdHJpbmcgPSBAU1FMV2hlcmUgPyAnIFdIRVJFICcgLiBqb2luIHF7IEFORCB9LCBAU1FMV2hlcmUgOiAnJzsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIHMuaWQsIHMubmFtZSBGUk9NICRUYWJsZVN0cmluZyAkV2hlcmVTdHJpbmciLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVTTEFMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNMQUxpc3R7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgcmV0dXJuICVTTEFMaXN0Owp9Cgo9aGVhZDIgU0xBR2V0KCkKClJldHVybnMgYW4gU0xBIGFzIGEgaGFzaAoKICAgIG15ICVTTEFEYXRhID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgIFNMQUlEICA9PiAxMjMsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKUmV0dXJuczoKCiAgICBteSAlU0xBRGF0YSA9ICgKICAgICAgICAgICdTTEFJRCcgICAgICAgICAgICAgICA9PiAnMicsCiAgICAgICAgICAnTmFtZScgICAgICAgICAgICAgICAgPT4gJ0RpYW1vbmQgUGFjaWZpYyAtIFMyJywKICAgICAgICAgICdDYWxlbmRhcicgICAgICAgICAgICA9PiAnMicsCiAgICAgICAgICAnRmlyc3RSZXNwb25zZVRpbWUnICAgPT4gJzYwJywgICAjIGluIG1pbnV0ZXMgYWNjb3JkaW5nIHRvIGJ1c2luZXNzIGhvdXJzCiAgICAgICAgICAnRmlyc3RSZXNwb25zZU5vdGlmeScgPT4gJzcwJywgICAjIGluIHBlcmNlbnQKICAgICAgICAgICdVcGRhdGVUaW1lJyAgICAgICAgICA9PiAnMzYwJywgICMgaW4gbWludXRlcyBhY2NvcmRpbmcgdG8gYnVzaW5lc3MgaG91cnMKICAgICAgICAgICdVcGRhdGVOb3RpZnknICAgICAgICA9PiAnNzAnLCAgICMgaW4gcGVyY2VudAogICAgICAgICAgJ1NvbHV0aW9uVGltZScgICAgICAgID0+ICc5NjAnLCAgIyBpbiBtaW51dGVzIGFjY29yZGluZyB0byBidXNpbmVzcyBob3VycwogICAgICAgICAgJ1NvbHV0aW9uTm90aWZ5JyAgICAgID0+ICc4MCcsICAgIyBpbiBwZXJjZW50CiAgICAgICAgICAnU2VydmljZUlEcycgICAgICAgICAgPT4gWyAnNCcsICc3JywgJzgnIF0sCiAgICAgICAgICAnVmFsaWRJRCcgICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgJ0NvbW1lbnQnICAgICAgICAgICAgID0+ICdTb21lIENvbW1lbnQnLAojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQogICAgICAgICAgJ1R5cGVJRCcgICAgICAgICAgICAgICAgICA9PiAnNScsCiAgICAgICAgICAnVHlwZScgICAgICAgICAgICAgICAgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAnTWluVGltZUJldHdlZW5JbmNpZGVudHMnID0+ICc0MDAwJywgICMgaW4gbWludXRlcwojIEVPIElUU01Db3JlCiAgICAgICAgICAnQ3JlYXRlQnknICAgICAgICAgICAgPT4gJzkzJywKICAgICAgICAgICdDcmVhdGVUaW1lJyAgICAgICAgICA9PiAnMjAxMS0wNi0xNiAyMjo1NDo1NCcsCiAgICAgICAgICAnQ2hhbmdlQnknICAgICAgICAgICAgPT4gJzkzJywKICAgICAgICAgICdDaGFuZ2VUaW1lJyAgICAgICAgICA9PiAnMjAxMS0wNi0xNiAyMjo1NDo1NCcsCiAgICApOwoKPWN1dAoKc3ViIFNMQUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTTEFJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgcmVzdWx0IGlzIGFscmVhZHkgY2FjaGVkCiAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNMQUdldDo6JyAuICRQYXJhbXtTTEFJRH07CiAgICBteSAkQ2FjaGVkICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICAgICAgICAgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgQ2FjaGVJbk1lbW9yeSAgPT4gMSwKICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgKTsKCiAgICBpZiAoIHJlZiAkQ2FjaGVkIGVxICdIQVNIJyApIHsKICAgICAgICByZXR1cm4gJXskQ2FjaGVkfTsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZ2V0IHNsYSBmcm9tIGRiCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIG5hbWUsIGNhbGVuZGFyX25hbWUsIGZpcnN0X3Jlc3BvbnNlX3RpbWUsIGZpcnN0X3Jlc3BvbnNlX25vdGlmeSwgJwogICAgICAgICAgICAuICd1cGRhdGVfdGltZSwgdXBkYXRlX25vdGlmeSwgc29sdXRpb25fdGltZSwgc29sdXRpb25fbm90aWZ5LCAnCiAgICAgICAgICAgIC4gJ3ZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSAnCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAgICAgICAgIC4gJywgdHlwZV9pZCwgbWluX3RpbWVfYmV0X2luY2lkZW50cyAnCiMgRU8gSVRTTUNvcmUKICAgICAgICAgICAgLiAnRlJPTSBzbGEgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtTTEFJRH0sCiAgICAgICAgXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVTTEFEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNMQURhdGF7U0xBSUR9ICAgICAgICAgICAgICAgPSAkUm93WzBdOwogICAgICAgICRTTEFEYXRhe05hbWV9ICAgICAgICAgICAgICAgID0gJFJvd1sxXTsKICAgICAgICAkU0xBRGF0YXtDYWxlbmRhcn0gICAgICAgICAgICA9ICRSb3dbMl0gfHwgJyc7CiAgICAgICAgJFNMQURhdGF7Rmlyc3RSZXNwb25zZVRpbWV9ICAgPSAkUm93WzNdOwogICAgICAgICRTTEFEYXRhe0ZpcnN0UmVzcG9uc2VOb3RpZnl9ID0gJFJvd1s0XTsKICAgICAgICAkU0xBRGF0YXtVcGRhdGVUaW1lfSAgICAgICAgICA9ICRSb3dbNV07CiAgICAgICAgJFNMQURhdGF7VXBkYXRlTm90aWZ5fSAgICAgICAgPSAkUm93WzZdOwogICAgICAgICRTTEFEYXRhe1NvbHV0aW9uVGltZX0gICAgICAgID0gJFJvd1s3XTsKICAgICAgICAkU0xBRGF0YXtTb2x1dGlvbk5vdGlmeX0gICAgICA9ICRSb3dbOF07CiAgICAgICAgJFNMQURhdGF7VmFsaWRJRH0gICAgICAgICAgICAgPSAkUm93WzldOwogICAgICAgICRTTEFEYXRhe0NvbW1lbnR9ICAgICAgICAgICAgID0gJFJvd1sxMF0gfHwgJyc7CiAgICAgICAgJFNMQURhdGF7Q3JlYXRlVGltZX0gICAgICAgICAgPSAkUm93WzExXTsKICAgICAgICAkU0xBRGF0YXtDcmVhdGVCeX0gICAgICAgICAgICA9ICRSb3dbMTJdOwogICAgICAgICRTTEFEYXRhe0NoYW5nZVRpbWV9ICAgICAgICAgID0gJFJvd1sxM107CiAgICAgICAgJFNMQURhdGF7Q2hhbmdlQnl9ICAgICAgICAgICAgPSAkUm93WzE0XTsKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICAgICAkU0xBRGF0YXtUeXBlSUR9ICAgICAgICAgICAgICAgICAgPSAkUm93WzE1XTsKICAgICAgICAkU0xBRGF0YXtNaW5UaW1lQmV0d2VlbkluY2lkZW50c30gPSAkUm93WzE2XSB8fCAwOwojIEVPIElUU01Db3JlCiAgICB9CgogICAgIyBjaGVjayBzbGEKICAgIGlmICggISRTTEFEYXRhe1NMQUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHN1Y2ggU0xBSUQgKCRQYXJhbXtTTEFJRH0pISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAjIGdldCBzbGEgdHlwZSBsaXN0CiAgICBteSAkU0xBVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNMQTo6VHlwZScsCiAgICApOwogICAgJFNMQURhdGF7VHlwZX0gPSAkU0xBVHlwZUxpc3QtPnsgJFNMQURhdGF7VHlwZUlEfSB9IHx8ICcnOwojIEVPIElUU01Db3JlCgogICAgIyBnZXQgYWxsIHNlcnZpY2UgaWRzCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIHNlcnZpY2VfaWQgRlJPTSBzZXJ2aWNlX3NsYSBXSEVSRSBzbGFfaWQgPSA/IE9SREVSIEJZIHNlcnZpY2VfaWQgQVNDJywKICAgICAgICBCaW5kID0+IFsgXCRTTEFEYXRhe1NMQUlEfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBTZXJ2aWNlSURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAU2VydmljZUlEcywgJFJvd1swXTsKICAgIH0KCiAgICAjIGFkZCB0aGUgaWRzCiAgICAkU0xBRGF0YXtTZXJ2aWNlSURzfSA9IFxAU2VydmljZUlEczsKCiAgICAjIGdldCBzbGEgcHJlZmVyZW5jZXMKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRTZWxmLT5TTEFQcmVmZXJlbmNlc0dldCggU0xBSUQgPT4gJFBhcmFte1NMQUlEfSApOwoKICAgICMgbWVyZ2UgaGFzaAogICAgaWYgKCVQcmVmZXJlbmNlcykgewogICAgICAgICVTTEFEYXRhID0gKCAlU0xBRGF0YSwgJVByZWZlcmVuY2VzICk7CiAgICB9CgogICAgIyBjYWNoZSByZXN1bHQKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKCiAgICAgICAgIyBtYWtlIGEgbG9jYWwgY29weSBvZiB0aGUgc2xhIGRhdGEgdG8gYXZvaWQgaXQgYmVpbmcgYWx0ZXJlZCBpbi1tZW1vcnkgbGF0ZXIKICAgICAgICBWYWx1ZSAgICAgICAgICA9PiB7JVNMQURhdGF9LAogICAgICAgIENhY2hlSW5NZW1vcnkgID0+IDEsCiAgICAgICAgQ2FjaGVJbkJhY2tlbmQgPT4gMCwKICAgICk7CgogICAgcmV0dXJuICVTTEFEYXRhOwp9Cgo9aGVhZDIgU0xBTG9va3VwKCkKCnJldHVybnMgdGhlIG5hbWUgb3IgdGhlIHNsYSBpZAoKICAgIG15ICRTTEFOYW1lID0gJFNMQU9iamVjdC0+U0xBTG9va3VwKAogICAgICAgIFNMQUlEID0+IDEyMywKICAgICk7CgogICAgb3IKCiAgICBteSAkU0xBSUQgPSAkU0xBT2JqZWN0LT5TTEFMb29rdXAoCiAgICAgICAgTmFtZSA9PiAnU0xBIE5hbWUnLAogICAgKTsKCj1jdXQKCnN1YiBTTEFMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1NMQUlEfSAmJiAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTTEFJRCBvciBOYW1lIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICBpZiAoICRQYXJhbXtTTEFJRH0gKSB7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNMQUxvb2t1cDo6SUQ6OicgLiAkUGFyYW17U0xBSUR9OwogICAgICAgIG15ICRDYWNoZWQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICAgICAgICAgICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBDYWNoZUluTWVtb3J5ICA9PiAxLAogICAgICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgICAgICk7CiAgICAgICAgaWYgKCBkZWZpbmVkICRDYWNoZWQgKSB7CiAgICAgICAgICAgIHJldHVybiAkQ2FjaGVkOwogICAgICAgIH0KCiAgICAgICAgIyBsb29rdXAKICAgICAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgbmFtZSBGUk9NIHNsYSBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U0xBSUR9LCBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15ICROYW1lID0gJyc7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICROYW1lID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICMgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICAgICAgICAgICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIFRUTCAgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICAgICBLZXkgICAgICAgICAgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgID0+ICROYW1lLAogICAgICAgICAgICBDYWNoZUluTWVtb3J5ICA9PiAxLAogICAgICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkTmFtZTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ0NhY2hlOjpTTEFMb29rdXA6Ok5hbWU6OicgLiAkUGFyYW17TmFtZX07CiAgICAgICAgbXkgJENhY2hlZCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgICAgICAgICAgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIENhY2hlSW5NZW1vcnkgID0+IDEsCiAgICAgICAgICAgIENhY2hlSW5CYWNrZW5kID0+IDAsCiAgICAgICAgKTsKICAgICAgICBpZiAoIGRlZmluZWQgJENhY2hlZCApIHsKICAgICAgICAgICAgcmV0dXJuICRDYWNoZWQ7CiAgICAgICAgfQoKICAgICAgICAjIGxvb2t1cAogICAgICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNsYSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15ICRTTEFJRCA9ICcnOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkU0xBSUQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgIyBjYWNoZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgICAgICAgICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgICAgICAgICAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICBDYWNoZUluTWVtb3J5ICA9PiAxLAogICAgICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU0xBSUQ7CiAgICB9Cn0KCj1oZWFkMiBTTEFBZGQoKQoKYWRkIGEgc2xhCgogICAgbXkgJFNMQUlEID0gJFNMQU9iamVjdC0+U0xBQWRkKAogICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gWyAxLCA1LCA3IF0sICAjIChvcHRpb25hbCkKICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdTTEEgTmFtZScsCiAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnQ2FsZW5kYXIxJywgICMgKG9wdGlvbmFsKQogICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMTIwLCAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDYwLCAgICAgICAgICAgIyAob3B0aW9uYWwpIG5vdGlmeSBhZ2VudCBpZiBmaXJzdCByZXNwb25zZSBlc2NhbGF0aW9uIGlzIDYwJSByZWFjaGVkCiAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAxODAsICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gODAsICAgICAgICAgICAjIChvcHRpb25hbCkgbm90aWZ5IGFnZW50IGlmIHVwZGF0ZSBlc2NhbGF0aW9uIGlzIDgwJSByZWFjaGVkCiAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA1ODAsICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gODAsICAgICAgICAgICAjIChvcHRpb25hbCkgbm90aWZ5IGFnZW50IGlmIHNvbHV0aW9uIGVzY2FsYXRpb24gaXMgODAlIHJlYWNoZWQKICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnQ29tbWVudCcsICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICAgICBUeXBlSUQgICAgICAgICAgICAgICAgICA9PiAyLAogICAgICAgIE1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzID0+IDM0NDMsICAgICAjIChvcHRpb25hbCkKIyBFTyBJVFNNQ29yZQogICAgKTsKCj1jdXQKCnN1YiBTTEFBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgojIFJvdGhlciBPU1MgLyBJVFNNQ29yZQojICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgVmFsaWRJRCBVc2VySUQpKSB7CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIFZhbGlkSUQgVXNlcklEIFR5cGVJRCkpIHsKIyBFTyBJVFNNQ29yZQogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHNlcnZpY2UgaWRzCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte1NlcnZpY2VJRHN9ICYmIHJlZiAkUGFyYW17U2VydmljZUlEc30gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1NlcnZpY2VJRHMgbmVlZHMgdG8gYmUgYW4gYXJyYXkgcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgICRQYXJhbXtTZXJ2aWNlSURzfSAgICAgICAgICB8fD0gW107CiAgICAkUGFyYW17Q2FsZW5kYXJ9ICAgICAgICAgICAgfHw9ICcnOwogICAgJFBhcmFte0NvbW1lbnR9ICAgICAgICAgICAgIHx8PSAnJzsKICAgICRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0gICB8fD0gMDsKICAgICRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSB8fD0gMDsKICAgICRQYXJhbXtVcGRhdGVUaW1lfSAgICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtVcGRhdGVOb3RpZnl9ICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtTb2x1dGlvblRpbWV9ICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtTb2x1dGlvbk5vdGlmeX0gICAgICB8fD0gMDsKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICRQYXJhbXtNaW5UaW1lQmV0d2VlbkluY2lkZW50c30gfHw9IDA7CiMgRU8gSVRTTUNvcmUKCiAgICAjIGdldCBjaGVjayBpdGVtIG9iamVjdAogICAgbXkgJENoZWNrSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKTsKCiAgICAjIGNsZWFudXAgZ2l2ZW4gcGFyYW1zCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIENvbW1lbnQpKSB7CiAgICAgICAgJENoZWNrSXRlbU9iamVjdC0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBmaW5kIGV4aXRpbmcgc2xhJ3Mgd2l0aCB0aGUgc2FtZSBuYW1lCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNsYSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkTm9BZGQ7CiAgICB3aGlsZSAoICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICROb0FkZCA9IDE7CiAgICB9CgogICAgIyBhYm9ydCBpbnNlcnQgb2YgbmV3IHNsYSwgaWYgbmFtZSBhbHJlYWR5IGV4aXN0cwogICAgaWYgKCROb0FkZCkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQW4gU0xBIHdpdGggdGhlIG5hbWUgJyRQYXJhbXtOYW1lfScgYWxyZWFkeSBleGlzdHMuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGFkZCBzbGEgdG8gZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKIyAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBzbGEgJwojICAgICAgICAgICAgLiAnKG5hbWUsIGNhbGVuZGFyX25hbWUsIGZpcnN0X3Jlc3BvbnNlX3RpbWUsIGZpcnN0X3Jlc3BvbnNlX25vdGlmeSwgJwojICAgICAgICAgICAgLiAndXBkYXRlX3RpbWUsIHVwZGF0ZV9ub3RpZnksIHNvbHV0aW9uX3RpbWUsIHNvbHV0aW9uX25vdGlmeSwgJwojICAgICAgICAgICAgLiAndmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSBWQUxVRVMgJwojICAgICAgICAgICAgLiAnKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAojICAgICAgICBCaW5kID0+IFsKIyAgICAgICAgICAgIFwkUGFyYW17TmFtZX0sICAgICAgICAgICAgICAgIFwkUGFyYW17Q2FsZW5kYXJ9LCAgICAgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSwKIyAgICAgICAgICAgIFwkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0sIFwkUGFyYW17VXBkYXRlVGltZX0sICAgICBcJFBhcmFte1VwZGF0ZU5vdGlmeX0sCiMgICAgICAgICAgICBcJFBhcmFte1NvbHV0aW9uVGltZX0sICAgICAgICBcJFBhcmFte1NvbHV0aW9uTm90aWZ5fSwgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtDb21tZW50fSwKIyAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtVc2VySUR9LAojICAgICAgICBdLAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gc2xhICcKICAgICAgICAgICAgLiAnKG5hbWUsIGNhbGVuZGFyX25hbWUsIGZpcnN0X3Jlc3BvbnNlX3RpbWUsIGZpcnN0X3Jlc3BvbnNlX25vdGlmeSwgJwogICAgICAgICAgICAuICd1cGRhdGVfdGltZSwgdXBkYXRlX25vdGlmeSwgc29sdXRpb25fdGltZSwgc29sdXRpb25fbm90aWZ5LCAnCiAgICAgICAgICAgIC4gJ3ZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSwgJwogICAgICAgICAgICAuICd0eXBlX2lkLCBtaW5fdGltZV9iZXRfaW5jaWRlbnRzKSBWQUxVRVMgJwogICAgICAgICAgICAuICcoPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCA/LCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17TmFtZX0sICAgICAgICAgICAgICAgIFwkUGFyYW17Q2FsZW5kYXJ9LCAgICAgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSwKICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwgICAgIFwkUGFyYW17VXBkYXRlTm90aWZ5fSwKICAgICAgICAgICAgXCRQYXJhbXtTb2x1dGlvblRpbWV9LCAgICAgICAgXCRQYXJhbXtTb2x1dGlvbk5vdGlmeX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgICAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgICAgICAgICBcJFBhcmFte1R5cGVJRH0sICBcJFBhcmFte01pblRpbWVCZXR3ZWVuSW5jaWRlbnRzfSwKICAgICAgICBdLAojIEVPIElUU01Db3JlCiAgICApOwoKICAgICMgZ2V0IHNsYSBpZAogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNsYSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkU0xBSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU0xBSUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgY2hlY2sgc2xhIGlkCiAgICBpZiAoICEkU0xBSUQgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBmaW5kIFNMQUlEIGZvciAnJFBhcmFte05hbWV9JyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcmVtb3ZlIGFsbCBleGlzdGluZyBhbGxvY2F0aW9ucwogICAgJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBzZXJ2aWNlX3NsYSBXSEVSRSBzbGFfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRTTEFJRCBdLAogICAgKTsKCiAgICAjIGFkZCB0aGUgbmV3IGFsbG9jYXRpb25zCiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIEB7ICRQYXJhbXtTZXJ2aWNlSURzfSB9ICkgewoKICAgICAgICAjIGFkZCBvbmUgYWxsb2NhdGlvbgogICAgICAgICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gJ0lOU0VSVCBJTlRPIHNlcnZpY2Vfc2xhIChzZXJ2aWNlX2lkLCBzbGFfaWQpIFZBTFVFUyAoPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRTZXJ2aWNlSUQsIFwkU0xBSUQgXSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkU0xBSUQ7Cn0KCj1oZWFkMiBTTEFVcGRhdGUoKQoKdXBkYXRlIGEgZXhpc3Rpbmcgc2xhCgogICAgbXkgJFRydWUgPSAkU0xBT2JqZWN0LT5TTEFVcGRhdGUoCiAgICAgICAgU0xBSUQgICAgICAgICAgICAgICA9PiAyLAogICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gWyAxLCAyLCAzIF0sICAjIChvcHRpb25hbCkKICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdTZXJ2aWNlIE5hbWUnLAogICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJ0NhbGVuZGFyMScsICAjIChvcHRpb25hbCkKICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDEyMCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiA2MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgZmlyc3QgcmVzcG9uc2UgZXNjYWxhdGlvbiBpcyA2MCUgcmVhY2hlZAogICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMTgwLCAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDgwLCAgICAgICAgICAgIyAob3B0aW9uYWwpIG5vdGlmeSBhZ2VudCBpZiB1cGRhdGUgZXNjYWxhdGlvbiBpcyA4MCUgcmVhY2hlZAogICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gNTgwLCAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDgwLCAgICAgICAgICAgIyAob3B0aW9uYWwpIG5vdGlmeSBhZ2VudCBpZiBzb2x1dGlvbiBlc2NhbGF0aW9uIGlzIDgwJSByZWFjaGVkCiAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ0NvbW1lbnQnLCAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAgICAgVHlwZUlEICAgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBNaW5UaW1lQmV0d2VlbkluY2lkZW50cyA9PiAzNDQzLCAgIyAob3B0aW9uYWwpCiMgRU8gSVRTTUNvcmUKICAgICk7Cgo9Y3V0CgpzdWIgU0xBVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTTEFJRCBOYW1lIFZhbGlkSUQgVXNlcklEKSkgewogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU0xBSUQgTmFtZSBWYWxpZElEIFVzZXJJRCBUeXBlSUQpKSB7CiMgRU8gSVRTTUNvcmUKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBzZXJ2aWNlIGlkcwogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtTZXJ2aWNlSURzfSAmJiByZWYgJFBhcmFte1NlcnZpY2VJRHN9IG5lICdBUlJBWScgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdTZXJ2aWNlSURzIG5lZWQgdG8gYmUgYW4gYXJyYXkgcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgICRQYXJhbXtTZXJ2aWNlSURzfSAgICAgICAgICB8fD0gW107CiAgICAkUGFyYW17Q2FsZW5kYXJ9ICAgICAgICAgICAgfHw9ICcnOwogICAgJFBhcmFte0NvbW1lbnR9ICAgICAgICAgICAgIHx8PSAnJzsKICAgICRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0gICB8fD0gMDsKICAgICRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSB8fD0gMDsKICAgICRQYXJhbXtVcGRhdGVUaW1lfSAgICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtVcGRhdGVOb3RpZnl9ICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtTb2x1dGlvblRpbWV9ICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtTb2x1dGlvbk5vdGlmeX0gICAgICB8fD0gMDsKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICRQYXJhbXtNaW5UaW1lQmV0d2VlbkluY2lkZW50c30gfHw9IDA7CiMgRU8gSVRTTUNvcmUKCiAgICAjIGdldCBjaGVjayBpdGVtIG9iamVjdAogICAgbXkgJENoZWNrSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKTsKCiAgICAjIGNsZWFudXAgZ2l2ZW4gcGFyYW1zCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIENvbW1lbnQpKSB7CiAgICAgICAgJENoZWNrSXRlbU9iamVjdC0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBmaW5kIGV4aXRpbmcgc2xhJ3Mgd2l0aCB0aGUgc2FtZSBuYW1lCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2xhIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRVcGRhdGUgPSAwOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAkUm93WzBdICE9ICRQYXJhbXtTTEFJRH0gKSB7CiAgICAgICAgICAgICRVcGRhdGUgPSAkUm93WzBdOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFib3J0IHVwZGF0ZSBvZiBzbGEsIGlmIG5hbWUgYWxyZWFkeSBleGlzdHMKICAgIGlmICgkVXBkYXRlKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJBbiBTTEEgd2l0aCB0aGUgbmFtZSAnJFBhcmFte05hbWV9JyBhbHJlYWR5IGV4aXN0cy4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcmVzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnQ2FjaGU6OlNMQUdldDo6JyAuICRQYXJhbXtTTEFJRH0sCiAgICApOwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICdDYWNoZTo6U0xBTG9va3VwOjpOYW1lOjonIC4gJFBhcmFte05hbWV9LAogICAgKTsKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnQ2FjaGU6OlNMQUxvb2t1cDo6SUQ6OicgLiAkUGFyYW17U0xBSUR9LAogICAgKTsKCiAgICAjIHVwZGF0ZSBzZXJ2aWNlCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiMgICAgICAgIFNRTCA9PiAnVVBEQVRFIHNsYSBTRVQgbmFtZSA9ID8sIGNhbGVuZGFyX25hbWUgPSA/LCAnCiMgICAgICAgICAgICAuICdmaXJzdF9yZXNwb25zZV90aW1lID0gPywgZmlyc3RfcmVzcG9uc2Vfbm90aWZ5ID0gPywgJwojICAgICAgICAgICAgLiAndXBkYXRlX3RpbWUgPSA/LCB1cGRhdGVfbm90aWZ5ID0gPywgc29sdXRpb25fdGltZSA9ID8sIHNvbHV0aW9uX25vdGlmeSA9ID8sICcKIyAgICAgICAgICAgIC4gJ3ZhbGlkX2lkID0gPywgY29tbWVudHMgPSA/LCBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/ICcKIyAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiMgICAgICAgIEJpbmQgPT4gWwojICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwgICAgICAgICAgICAgICAgXCRQYXJhbXtDYWxlbmRhcn0sICAgICAgIFwkUGFyYW17Rmlyc3RSZXNwb25zZVRpbWV9LAojICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwgICAgIFwkUGFyYW17VXBkYXRlTm90aWZ5fSwKIyAgICAgICAgICAgIFwkUGFyYW17U29sdXRpb25UaW1lfSwgICAgICAgIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAojICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1NMQUlEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ1VQREFURSBzbGEgU0VUIG5hbWUgPSA/LCBjYWxlbmRhcl9uYW1lID0gPywgJwogICAgICAgICAgICAuICdmaXJzdF9yZXNwb25zZV90aW1lID0gPywgZmlyc3RfcmVzcG9uc2Vfbm90aWZ5ID0gPywgJwogICAgICAgICAgICAuICd1cGRhdGVfdGltZSA9ID8sIHVwZGF0ZV9ub3RpZnkgPSA/LCBzb2x1dGlvbl90aW1lID0gPywgc29sdXRpb25fbm90aWZ5ID0gPywgJwogICAgICAgICAgICAuICd2YWxpZF9pZCA9ID8sIGNvbW1lbnRzID0gPywgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPywgJwogICAgICAgICAgICAuICd0eXBlX2lkID0gPywgbWluX3RpbWVfYmV0X2luY2lkZW50cyA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgICAgICAgICAgICBcJFBhcmFte0NhbGVuZGFyfSwgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0sCiAgICAgICAgICAgIFwkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0sIFwkUGFyYW17VXBkYXRlVGltZX0sICAgICBcJFBhcmFte1VwZGF0ZU5vdGlmeX0sCiAgICAgICAgICAgIFwkUGFyYW17U29sdXRpb25UaW1lfSwgICAgICAgIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sICAgICAgICAgICAgICBcJFBhcmFte1R5cGVJRH0sICAgICAgICAgXCRQYXJhbXtNaW5UaW1lQmV0d2VlbkluY2lkZW50c30sIFwkUGFyYW17U0xBSUR9LAogICAgICAgIF0sCiMgRU8gSVRTTUNvcmUKICAgICk7CgogICAgIyByZW1vdmUgYWxsIGV4aXN0aW5nIGFsbG9jYXRpb25zCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17U0xBSUR9LCBdCiAgICApOwoKICAgICMgYWRkIHRoZSBuZXcgYWxsb2NhdGlvbnMKICAgIGZvciBteSAkU2VydmljZUlEICggQHsgJFBhcmFte1NlcnZpY2VJRHN9IH0gKSB7CgogICAgICAgICMgYWRkIG9uZSBhbGxvY2F0aW9uCiAgICAgICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX3NsYSAoc2VydmljZV9pZCwgc2xhX2lkKSBWQUxVRVMgKD8sID8pJywKICAgICAgICAgICAgQmluZCA9PiBbIFwkU2VydmljZUlELCBcJFBhcmFte1NMQUlEfSBdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBTTEFQcmVmZXJlbmNlc1NldCgpCgpzZXQgU0xBIHByZWZlcmVuY2VzCgogICAgJFNMQU9iamVjdC0+U0xBUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgU0xBSUQgID0+IDEyMywKICAgICAgICBLZXkgICAgPT4gJ1VzZXJDb21tZW50JywKICAgICAgICBWYWx1ZSAgPT4gJ3NvbWUgY29tbWVudCcsCiAgICAgICAgVXNlcklEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgU0xBUHJlZmVyZW5jZXNTZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0tPlNMQVByZWZlcmVuY2VzU2V0KCVQYXJhbSk7Cn0KCj1oZWFkMiBTTEFQcmVmZXJlbmNlc0dldCgpCgpnZXQgU0xBIHByZWZlcmVuY2VzCgogICAgbXkgJVByZWZlcmVuY2VzID0gJFNMQU9iamVjdC0+U0xBUHJlZmVyZW5jZXNHZXQoCiAgICAgICAgU0xBSUQgID0+IDEyMywKICAgICAgICBVc2VySUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBTTEFQcmVmZXJlbmNlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fS0+U0xBUHJlZmVyZW5jZXNHZXQoJVBhcmFtKTsKfQoKc3ViIEV4cG9ydFNMQXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVXNlcklEID0gJFNlbGYtPntVc2VySUR9IHx8ICRQYXJhbXtVc2VySUR9OwoKICAgIG15ICVTTEFGaWx0ZXI7CiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJFBhcmFte1NMQXN9ICkgKSB7CiAgICAgICAgJVNMQUZpbHRlciA9IG1hcCB7ICRfID0+IDEgfSAkUGFyYW17U0xBc30tPkAqOwogICAgfQoKICAgIG15ICVTTEFMaXN0ID0gJFNlbGYtPlNMQUxpc3QoCiAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICApOwoKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgIG15ICRUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKICAgICk7CiMgRU8gSVRTTUNvcmUKCiAgICBteSAlRXhwb3J0RGF0YTsKICAgIFNMQUlEOgogICAgZm9yIG15ICRTTEFJRCAoIHNvcnQga2V5cyAlU0xBTGlzdCApIHsKCiAgICAgICAgbXkgJVNMQURhdGEgPSAkU2VsZi0+U0xBR2V0KAogICAgICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgICAgICBpZiAoJVNMQUZpbHRlcikgewogICAgICAgICAgICBuZXh0IFNMQUlEIHVubGVzcyAkU0xBRmlsdGVyeyAkU0xBRGF0YXtOYW1lfSB9OwogICAgICAgIH0KCiAgICAgICAgIyB0cmFuc2xhdGUgSURzIGludG8gbmFtZXMgb3IgbmFtZS1saWtlIGlkZW50aWZpZXJzCiAgICAgICAgbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwogICAgICAgIG15ICRWYWxpZE9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7CgogICAgICAgIEFUVFJJQlVURToKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIGtleXMgJVNMQURhdGEgKSB7CgogICAgICAgICAgICBuZXh0IEFUVFJJQlVURSB1bmxlc3MgJEF0dHJpYnV0ZSA9fiAvSUQvOwoKICAgICAgICAgICAgaWYgKCAkQXR0cmlidXRlIGVxICdWYWxpZElEJyApIHsKICAgICAgICAgICAgICAgIG15ICRWYWxpZCA9ICRWYWxpZE9iamVjdC0+VmFsaWRMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgVmFsaWRJRCA9PiAkU0xBRGF0YXtWYWxpZElEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU0xBRGF0YXtWYWxpZH0gPSAkVmFsaWQ7CiAgICAgICAgICAgICAgICBkZWxldGUgJFNMQURhdGF7VmFsaWRJRH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkQXR0cmlidXRlIGVxICdTZXJ2aWNlSURzJyApIHsKICAgICAgICAgICAgICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkU0xBRGF0YXtTZXJ2aWNlSURzfSApICkgewogICAgICAgICAgICAgICAgICAgIG15IEBTZXJ2aWNlczsKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoICRTTEFEYXRhe1NlcnZpY2VJRHN9LT5AKiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2VydmljZXMsICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRTTEFEYXRhe1NlcnZpY2VzfSA9IFxAU2VydmljZXM7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRTTEFEYXRhe1NlcnZpY2VJRHN9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiMgUm90aGVyIE9TUyAvIElUU01Db3JlCiAgICAgICAgICAgIGVsc2lmICggJEF0dHJpYnV0ZSBlcSAnVHlwZUlEJyAmJiBJc0hhc2hSZWZXaXRoRGF0YSgkVHlwZUxpc3QpICkgewogICAgICAgICAgICAgICAgbXkgJFR5cGUgPSAkVHlwZUxpc3QtPnskU0xBRGF0YXtUeXBlSUR9fTsKICAgICAgICAgICAgICAgICRTTEFEYXRhe1R5cGV9ID0gJFR5cGU7CiAgICAgICAgICAgICAgICBkZWxldGUgJFNMQURhdGF7VHlwZUlEfTsKICAgICAgICAgICAgfQojIEVPIElUU01Db3JlCiAgICAgICAgfQoKICAgICAgICAjIG9ic2VydmF0aW9uIHNob3dlZCB0aGF0IFR5cGUgYW5kIFR5cGVJRCBib3RoIGFyZSB1c3VhbGx5IHByZXNlbnQKICAgICAgICBkZWxldGUgJFNMQURhdGF7VHlwZUlEfTsKCiAgICAgICAgZGVsZXRlICRTTEFEYXRhe0NoYW5nZUJ5fTsKICAgICAgICBkZWxldGUgJFNMQURhdGF7Q2hhbmdlVGltZX07CiAgICAgICAgZGVsZXRlICRTTEFEYXRhe0NyZWF0ZUJ5fTsKICAgICAgICBkZWxldGUgJFNMQURhdGF7Q3JlYXRlVGltZX07CiAgICAgICAgZGVsZXRlICRTTEFEYXRhe1NMQUlEfTsKCiAgICAgICAgJEV4cG9ydERhdGF7ICRTTEFEYXRhe05hbWV9IH0gPSBcJVNMQURhdGE7CiAgICB9CgogICAgcmV0dXJuIFwlRXhwb3J0RGF0YTsKfQoKc3ViIEltcG9ydFNMQXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVXNlcklEID0gJFNlbGYtPntVc2VySUR9IHx8ICRQYXJhbXtVc2VySUR9OwoKICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKICAgIG15ICRWYWxpZE9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7CiAgICBteSAlU0xBTGlzdCAgICAgICA9ICRTZWxmLT5TTEFMaXN0KAogICAgICAgIFZhbGlkICA9PiAwLAogICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgKTsKICAgIG15ICVTTEFMb29rdXAgPSByZXZlcnNlICVTTEFMaXN0OwoKIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgIG15ICRUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKICAgICk7CgogICAgbXkgJVR5cGVMb29rdXAgPSBJc0hhc2hSZWZXaXRoRGF0YSgkVHlwZUxpc3QpID8gcmV2ZXJzZSAkVHlwZUxpc3QtPiUqIDogKCk7CiMgRU8gSVRTTUNvcmUKCiAgICBTTEFOQU1FOgogICAgZm9yIG15ICRTTEFOYW1lICgga2V5cyAkUGFyYW17U0xBc30tPiUqICkgewogICAgICAgIG15ICRTTEFEYXRhID0gJFBhcmFte1NMQXN9eyRTTEFOYW1lfTsKCiAgICAgICAgbXkgJFNMQUlEID0gJFNMQUxvb2t1cHsgJFNMQURhdGEtPntOYW1lfSB9OwoKICAgICAgICAjIHNraXAgaWYgU0xBIHdpdGggc2FtZSBuYW1lIGV4aXN0cyBhbmQgb3ZlcndyaXRlIGlzIG5vdCBzZXQKICAgICAgICBuZXh0IFNMQU5BTUUgaWYgKCAhJFBhcmFte092ZXJ3cml0ZUV4aXN0aW5nRW50aXRpZXN9ICYmICRTTEFJRCApOwoKICAgICAgICAjIHRyYW5zbGF0ZSBuYW1lZCBkYXRhIGJhY2sgdG8gSURzCiAgICAgICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICRTTEFEYXRhLT57U2VydmljZXN9ICkgKSB7CiAgICAgICAgICAgIG15IEBTZXJ2aWNlSURzOwogICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2UgKCAkU0xBRGF0YS0+e1NlcnZpY2VzfS0+QCogKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBTZXJ2aWNlSURzLCAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICRTZXJ2aWNlLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkU0xBRGF0YS0+e1NlcnZpY2VJRHN9ID0gXEBTZXJ2aWNlSURzOwogICAgICAgIH0KIyBSb3RoZXIgT1NTIC8gSVRTTUNvcmUKICAgICAgICBpZiAoICRTTEFEYXRhLT57VHlwZX0gKSB7CiAgICAgICAgICAgICRTTEFEYXRhLT57VHlwZUlEfSA9ICRUeXBlTG9va3VweyRTTEFEYXRhLT57VHlwZX19OwogICAgICAgIH0KIyBFTyBJVFNNQ29yZQogICAgICAgICRTTEFEYXRhLT57VmFsaWRJRH0gPSAkVmFsaWRPYmplY3QtPlZhbGlkTG9va3VwKAogICAgICAgICAgICBWYWxpZCA9PiAkU0xBRGF0YS0+e1ZhbGlkfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJFNMQUlEKSB7CgogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5TTEFVcGRhdGUoCiAgICAgICAgICAgICAgICAkU0xBRGF0YS0+JSosCiAgICAgICAgICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgJFN1Y2Nlc3M7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkU0xBSUQgPSAkU2VsZi0+U0xBQWRkKAogICAgICAgICAgICAgICAgJFNMQURhdGEtPiUqLAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgJFNMQUlEOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKMTsK</File>
        <File Location="scripts/test/Console/Command/Admin/Service/Add.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L0NvbnNvbGUvQ29tbWFuZC9BZG1pbi9TZXJ2aWNlL0FkZC50CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpSZWdpc3RlckRyaXZlcjsgICAgIyBTZXQgdXAgJEtlcm5lbDo6T00gYW5kICRtYWluOjpTZWxmCgpvdXIgJFNlbGY7CgpteSAkQ29tbWFuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpBZG1pbjo6U2VydmljZTo6QWRkJyk7CgojIGdldCBoZWxwZXIgb2JqZWN0CiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgpteSAkUGFyZW50U2VydmljZU5hbWUgPSAiUGFyZW50U2VydmljZSIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwpteSAkQ2hpbGRTZXJ2aWNlTmFtZSAgPSAiQ2hpbGRTZXJ2aWNlIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgojIHRyeSB0byBleGVjdXRlIGNvbW1hbmQgd2l0aG91dCBhbnkgb3B0aW9ucwpteSAkRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSgpOwokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAxLAogICAgIk5vIG9wdGlvbnMiLAopOwoKIyBwcm92aWRlIG1pbmltdW0gb3B0aW9ucwojIC0tLQojIElUU01Db3JlCiMgLS0tCiMkRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSApOwokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSwgJy0tY3JpdGljYWxpdHknLCAnMyBub3JtYWwnLCAnLS10eXBlJywgJ0RlbW9uc3RyYXRpb24nICk7CgojIC0tLQokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIk1pbmltdW0gb3B0aW9ucyAoIHRoZSBzZXJ2aWNlIGlzIGFkZGVkIC0gJFBhcmVudFNlcnZpY2VOYW1lICkiLAopOwoKIyBzYW1lIGFnYWluIChzaG91bGQgZmFpbCBiZWNhdXNlIGFscmVhZHkgZXhpc3RzKQojIC0tLQojIElUU01Db3JlCiMgLS0tCiMkRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSApOwokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSwgJy0tY3JpdGljYWxpdHknLCAnMyBub3JtYWwnLCAnLS10eXBlJywgJ0RlbW9uc3RyYXRpb24nICk7CgojIC0tLQokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAxLAogICAgIk1pbmltdW0gb3B0aW9ucyAoIHNlcnZpY2UgJFBhcmVudFNlcnZpY2VOYW1lIGFscmVhZHkgZXhpc3RzICkiLAopOwoKIyBpbnZhbGlkIHBhcmVudAojIC0tLQojIElUU01Db3JlCiMgLS0tCiMkRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRDaGlsZFNlcnZpY2VOYW1lLCAnLS1wYXJlbnQtbmFtZScsICRDaGlsZFNlcnZpY2VOYW1lICk7CiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1uYW1lJywgJENoaWxkU2VydmljZU5hbWUsICctLXBhcmVudC1uYW1lJywgJENoaWxkU2VydmljZU5hbWUsICctLWNyaXRpY2FsaXR5JywgJzMgbm9ybWFsJywgJy0tdHlwZScsICdEZW1vbnN0cmF0aW9uJyApOwoKIyAtLS0KJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMSwKICAgICJQYXJlbnQgc2VydmljZSAkQ2hpbGRTZXJ2aWNlTmFtZSBkb2VzIG5vdCBleGlzdCIsCik7CgojIHZhbGlkIHBhcmVudAojIC0tLQojIElUU01Db3JlCiMgLS0tCiMkRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRDaGlsZFNlcnZpY2VOYW1lLCAnLS1wYXJlbnQtbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSApOwokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRDaGlsZFNlcnZpY2VOYW1lLCAnLS1wYXJlbnQtbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSwgJy0tY3JpdGljYWxpdHknLCAnMyBub3JtYWwnLCAnLS10eXBlJywgJ0RlbW9uc3RyYXRpb24nICk7CgojIC0tLQokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIkV4aXN0aW5nIHBhcmVudCAoIHNlcnZpY2UgaXMgYWRkZWQgLSAkQ2hpbGRTZXJ2aWNlTmFtZSApIiwKKTsKCiMgU2FtZSBhZ2FpbiAoc2hvdWxkIGZhaWwgYmVjYXVzZSBhbHJlYWR5IGV4aXN0cykuCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1uYW1lJywgJENoaWxkU2VydmljZU5hbWUsICctLXBhcmVudC1uYW1lJywgJFBhcmVudFNlcnZpY2VOYW1lICk7CiRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1uYW1lJywgJENoaWxkU2VydmljZU5hbWUsICctLXBhcmVudC1uYW1lJywgJFBhcmVudFNlcnZpY2VOYW1lLCAnLS1jcml0aWNhbGl0eScsICczIG5vcm1hbCcsICctLXR5cGUnLCAnRGVtb25zdHJhdGlvbicgKTsKCiMgLS0tCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDEsCiAgICAiRXhpc3RpbmcgcGFyZW50ICggc2VydmljZSAke1BhcmVudFNlcnZpY2VOYW1lfTo6JENoaWxkU2VydmljZU5hbWUgYWxyZWFkeSBleGlzdHMgKSIsCik7CgojIFBhcmVudCBhbmQgY2hpbGQgc2VydmljZSBzYW1lIG5hbWUuCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyRFeGl0Q29kZSA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1uYW1lJywgJFBhcmVudFNlcnZpY2VOYW1lLCAnLS1wYXJlbnQtbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSApOwokRXhpdENvZGUKICAgID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoICctLW5hbWUnLCAkUGFyZW50U2VydmljZU5hbWUsICctLXBhcmVudC1uYW1lJywgJFBhcmVudFNlcnZpY2VOYW1lLCAnLS1jcml0aWNhbGl0eScsICczIG5vcm1hbCcsICctLXR5cGUnLCAnRGVtb25zdHJhdGlvbicgKTsKCiMgLS0tCm15ICRTZXJ2aWNlTmFtZSA9ICRQYXJlbnRTZXJ2aWNlTmFtZSAuICc6OicgLiAkUGFyZW50U2VydmljZU5hbWU7CiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDAsCiAgICAiUGFyZW50IGFuZCBjaGlsZCBzZXJ2aWNlIHNhbWUgbmFtZSAtICRTZXJ2aWNlTmFtZSAtIGlzIGNyZWF0ZWQiLAopOwoKIyBQYXJlbnQgKHR3byBsZXZlbHMpIGFuZCBjaGlsZCBzYW1lIG5hbWUuCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KIyRFeGl0Q29kZSAgICA9ICRDb21tYW5kT2JqZWN0LT5FeGVjdXRlKCAnLS1uYW1lJywgJFBhcmVudFNlcnZpY2VOYW1lLCAnLS1wYXJlbnQtbmFtZScsICRTZXJ2aWNlTmFtZSApOwokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tbmFtZScsICRQYXJlbnRTZXJ2aWNlTmFtZSwgJy0tcGFyZW50LW5hbWUnLCAkU2VydmljZU5hbWUsICctLWNyaXRpY2FsaXR5JywgJzMgbm9ybWFsJywgJy0tdHlwZScsICdEZW1vbnN0cmF0aW9uJyApOwoKIyAtLS0KJFNlcnZpY2VOYW1lID0gJFNlcnZpY2VOYW1lIC4gJzo6JyAuICRQYXJlbnRTZXJ2aWNlTmFtZTsKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMCwKICAgICJQYXJlbnQgKHR3byBsZXZlbHMpIGFuZCBjaGlsZCBzZXJ2aWNlIHNhbWUgbmFtZSAtICRTZXJ2aWNlTmFtZSAtIGlzIGNyZWF0ZWQiLAopOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/GenericInterface/Operation/Ticket/TicketCreate.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L0dlbmVyaWNJbnRlcmZhY2UvT3BlcmF0aW9uL1RpY2tldC9UaWNrZXRDcmVhdGUudAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlciAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpUaWNrZXRDcmVhdGUgICAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyBubyBwZXJsaW1wb3J0cywgbmV3KCkgZnJvbSBzdHJpbmcKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpTZXNzaW9uOjpTZXNzaW9uQ3JlYXRlICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIG5vIHBlcmxpbXBvcnRzLCBuZXcoKSBmcm9tIHN0cmluZwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXcoSXNBcnJheVJlZldpdGhEYXRhIElzSGFzaFJlZldpdGhEYXRhIElzU3RyaW5nV2l0aERhdGEpOwoKIyBzZXQgdXAgb2JqZWN0IGF0dHJpYnV0ZXMKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgU2tpcFNTTFZlcmlmeSAgICAgPT4gMSwKICAgICAgICBEaXNhYmxlQXN5bmNDYWxscyA9PiAxLAogICAgfSwKKTsKCm15ICRIZWxwZXIgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7Cm15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdUaWNrZXQ6OlR5cGUnLAogICAgVmFsdWUgPT4gMSwKKTsKCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkFjY291bnRUaW1lJywKICAgIFZhbHVlID0+IDEsCik7CgokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScsCiAgICBWYWx1ZSA9PiAxLAopOwoKIyBkaXNhYmxlIEROUyBsb29rdXBzCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ0NoZWNrTVhSZWNvcmQnLAogICAgVmFsdWUgPT4gMCwKKTsKCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgVmFsdWUgPT4gMSwKKTsKCiMgZGlzYWJsZSBTZXNzaW9uQ2hlY2tSZW1vdGVJUCBzZXR0aW5nCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1Nlc3Npb25DaGVja1JlbW90ZUlQJywKICAgIFZhbHVlID0+IDAsCik7CgojIGVuYWJsZSBjdXN0b21lciBncm91cHMgc3VwcG9ydAokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdDdXN0b21lckdyb3VwU3VwcG9ydCcsCiAgICBWYWx1ZSA9PiAxLAopOwoKJEtlcm5lbDo6T00tPk9iamVjdHNEaXNjYXJkKAogICAgT2JqZWN0cyAgICAgICAgICAgID0+IFsnS2VybmVsOjpDb25maWcnXSwKICAgIEZvcmNlUGFja2FnZVJlbG9hZCA9PiAxLAopOwoKbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgojIGNoZWNrIGlmIFNTTCBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQKaXMoCiAgICAkRU5We1BFUkxfTFdQX1NTTF9WRVJJRllfSE9TVE5BTUV9LAogICAgMCwKICAgICdEaXNhYmxlZCBTU0wgY2VydGlmaWNhdGVzIHZlcmlmaWNhdGlvbiBpbiBlbnZpcm9ubWVudCcKKTsKCm15ICRUZXN0T3duZXJMb2dpbiAgICAgICAgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgpOwpteSAkVGVzdFJlc3BvbnNpYmxlTG9naW4gID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoKTsKbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKbXkgJFRlc3RVc2VyTG9naW4gICAgICAgICA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgXSwKKTsKCm15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCm15ICRPd25lcklEID0gJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoCiAgICBVc2VyTG9naW4gPT4gJFRlc3RPd25lckxvZ2luLAopOwpteSAkUmVzcG9uc2libGVJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgVXNlckxvZ2luID0+ICRUZXN0UmVzcG9uc2libGVMb2dpbiwKKTsKbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAopOwoKbXkgJEludmFsaWRJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ2ludmFsaWQnICk7CgojIHNhbml0eSB0ZXN0Cm9rKAogICAgZGVmaW5lZCAkSW52YWxpZElELAogICAgIlZhbGlkTG9va3VwKCkgZm9yICdpbnZhbGlkJyBzaG91bGQgbm90IGJlIHVuZGVmIgopOwoKIyBnZXQgZ3JvdXAgb2JqZWN0Cm15ICRHcm91cE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpOwoKIyBjcmVhdGUgYSBuZXcgZ3JvdXAKbXkgJEdyb3VwSUQgPSAkR3JvdXBPYmplY3QtPkdyb3VwQWRkKAogICAgTmFtZSAgICA9PiAnVGVzdFNwZWNpYWwnIC4gJFJhbmRvbUlELAogICAgQ29tbWVudCA9PiAnY29tbWVudCBkZXNjcmliaW5nIHRoZSBncm91cCcsICAgICMgb3B0aW9uYWwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCm15ICVHcm91cERhdGEgPSAkR3JvdXBPYmplY3QtPkdyb3VwR2V0KCBJRCA9PiAkR3JvdXBJRCApOwoKIyBzYW5pdHkgY2hlY2sKb2soCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVHcm91cERhdGEgKSwKICAgICJHcm91cEdldCgpIC0gZm9yIHRlc3RpbmcgZ3JvdXAiCik7CgojIGNyZWF0ZSBxdWV1ZSBvYmplY3QKbXkgJFF1ZXVlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CgpteSBAUXVldWVzOwpteSBAUXVldWVJRHM7CgpteSBAUXVldWVQcm9wZXJ0aWVzID0gKAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ3F1ZXVlMScgLiAkUmFuZG9tSUQsCiAgICAgICAgR3JvdXBJRCA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgID0+ICdxdWV1ZTInIC4gJFJhbmRvbUlELAogICAgICAgIEdyb3VwSUQgPT4gJEdyb3VwSUQsCiAgICB9Cik7CgojIGNyZWF0ZSBxdWV1ZXMKZm9yIG15ICRRdWV1ZVByb3BlcnR5IChAUXVldWVQcm9wZXJ0aWVzKSB7CiAgICBteSAkUXVldWVJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVBZGQoCiAgICAgICAgJXskUXVldWVQcm9wZXJ0eX0sCiAgICAgICAgVmFsaWRJRCAgICAgICAgID0+IDEsCiAgICAgICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICAgICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICAgICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVjawogICAgb2soICRRdWV1ZUlELCAiUXVldWVBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIHF1ZXVlIiApOwoKICAgIG15ICVRdWV1ZURhdGEgPSAkUXVldWVPYmplY3QtPlF1ZXVlR2V0KCBJRCA9PiAkUXVldWVJRCApOwogICAgcHVzaCBAUXVldWVzLCAgIFwlUXVldWVEYXRhOwogICAgcHVzaCBAUXVldWVJRHMsICRRdWV1ZURhdGF7UXVldWVJRH07Cn0KCiMgZ2V0IHR5cGUgb2JqZWN0Cm15ICRUeXBlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKCiMgY3JlYXRlIG5ldyB0eXBlCm15ICRUeXBlSUQgPSAkVHlwZU9iamVjdC0+VHlwZUFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RUeXBlJyAuICRSYW5kb21JRCwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCm9rKCAkVHlwZUlELCAiVHlwZUFkZCgpIC0gY3JlYXRlIHRlc3RpbmcgdHlwZSIgKTsKCm15ICVUeXBlRGF0YSA9ICRUeXBlT2JqZWN0LT5UeXBlR2V0KAogICAgSUQgPT4gJFR5cGVJRCwKKTsKCiMgc2FuaXR5IGNoZWNrCm9rKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVHlwZURhdGEgKSwKICAgICJUeXBlR2V0KCkgLSBmb3IgdGVzdGluZyB0eXBlIgopOwoKIyBjcmVhdGUgc2VydmljZSBvYmplY3QKbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZwpteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTZXJ2aWNlVHlwZU5hbWUySUQgPSByZXZlcnNlICV7JFNlcnZpY2VUeXBlTGlzdH07CgojIGdldCB0aGUgbGlzdCBvZiBzbGEgdHlwZXMgZnJvbSBnZW5lcmFsIGNhdGFsb2cKbXkgJFNMQVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNMQTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNMQVR5cGVOYW1lMklEID0gcmV2ZXJzZSAleyRTTEFUeXBlTGlzdH07CgojIC0tLQoKIyBjcmVhdGUgbmV3IHNlcnZpY2UKbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICA9PiAnVGVzdFNlcnZpY2UnIC4gJFJhbmRvbUlELAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAoKICAgICMgLS0tCiAgICAjIElUU01Db3JlCiAgICAjIC0tLQogICAgVHlwZUlEICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICMgLS0tCik7CgojIHNhbml0eSBjaGVjawpvayggJFNlcnZpY2VJRCwgIlNlcnZpY2VBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIHNlcnZpY2UiICk7CgpteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgVXNlcklEICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawpvaygKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVNlcnZpY2VEYXRhICksCiAgICAiU2VydmljZUdldCgpIC0gZm9yIHRlc3Rpbmcgc2VydmljZSIKKTsKCiMgc2V0IHNlcnZpY2UgZm9yIHRoZSBjdXN0b21lcgokU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlELAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIGNyZWF0ZSBTTEEgb2JqZWN0Cm15ICRTTEFPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7CgojIGNyZWF0ZSBuZXcgU0xBCm15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgIE5hbWUgICAgICAgPT4gJ1Rlc3RTTEEnIC4gJFJhbmRvbUlELAogICAgU2VydmljZUlEcyA9PiBbJFNlcnZpY2VJRF0sCiAgICBWYWxpZElEICAgID0+IDEsCiAgICBVc2VySUQgICAgID0+IDEsCgogICAgIyAtLS0KICAgICMgSVRTTUNvcmUKICAgICMgLS0tCiAgICBUeXBlSUQgPT4gJFNMQVR5cGVOYW1lMklEe090aGVyfSwKCiAgICAjIC0tLQopOwoKIyBzYW5pdHkgY2hlY2sKb2soICRTTEFJRCwgIlNMQUFkZCgpIC0gY3JlYXRlIHRlc3RpbmcgU0xBIiApOwoKbXkgJVNMQURhdGEgPSAkU0xBT2JqZWN0LT5TTEFHZXQoCiAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgVXNlcklEID0+IDEsCik7CgojIHNhbml0eSBjaGVjawpvaygKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVNMQURhdGEgKSwKICAgICJTTEFHZXQoKSAtIGZvciB0ZXN0aW5nIFNMQSIKKTsKCiMgY3JlYXRlIHN0YXRlIG9iamVjdApteSAkU3RhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKTsKCiMgY3JlYXRlIG5ldyBzdGF0ZQpteSAkU3RhdGVJRCA9ICRTdGF0ZU9iamVjdC0+U3RhdGVBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U3RhdGUnIC4gJFJhbmRvbUlELAogICAgVHlwZUlEICA9PiAyLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKb2soICRTdGF0ZUlELCAiU3RhdGVBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIHN0YXRlIiApOwoKbXkgJVN0YXRlRGF0YSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICBJRCA9PiAkU3RhdGVJRCwKKTsKCiMgc2FuaXR5IGNoZWNrCm9rKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU3RhdGVEYXRhICksCiAgICAiU3RhdGVHZXQoKSAtIGZvciB0ZXN0aW5nIHN0YXRlIgopOwoKIyBjcmVhdGUgcHJpb3JpdHkgb2JqZWN0Cm15ICRQcmlvcml0eU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpOwoKIyBjcmVhdGUgbmV3IHByaW9yaXR5Cm15ICRQcmlvcml0eUlEID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eUFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RQcmlvcml0eScgLiAkUmFuZG9tSUQsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawpvayggJFByaW9yaXR5SUQsICJQcmlvcml0eUFkZCgpIC0gY3JlYXRlIHRlc3RpbmcgcHJpb3JpdHkiLCApOwoKbXkgJVByaW9yaXR5RGF0YSA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlHZXQoCiAgICBQcmlvcml0eUlEID0+ICRQcmlvcml0eUlELAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKb2soCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVQcmlvcml0eURhdGEgKSwKICAgICJQcmlvcml0eUdldCgpIC0gZm9yIHRlc3RpbmcgcHJpb3JpdHkiCik7CgojIGNyZWF0ZSBkeW5hbWljIGZpZWxkIG9iamVjdApteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKIyBhZGQgdGV4dCBkeW5hbWljIGZpZWxkCm15ICVEeW5hbWljRmllbGRUZXh0Q29uZmlnID0gKAogICAgTmFtZSAgICAgICA9PiAiVW5pdHRlc3QxJFJhbmRvbUlEIiwKICAgIEZpZWxkT3JkZXIgPT4gOTk5MSwKICAgIEZpZWxkVHlwZSAgPT4gJ1RleHQnLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIExhYmVsICAgICAgPT4gJ0Rlc2NyaXB0aW9uJywKICAgIFZhbGlkSUQgICAgPT4gMSwKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnJywKICAgIH0sCik7Cm15ICRGaWVsZFRleHRJRCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgICVEeW5hbWljRmllbGRUZXh0Q29uZmlnLAogICAgVXNlcklEICA9PiAxLAogICAgUmVvcmRlciA9PiAwLAopOwpvayggJEZpZWxkVGV4dElELCAiRHluYW1pYyBGaWVsZCAkRmllbGRUZXh0SUQiICk7CgojIGFkZCBJRAokRHluYW1pY0ZpZWxkVGV4dENvbmZpZ3tJRH0gPSAkRmllbGRUZXh0SUQ7CgojIGFkZCBkcm9wZG93biBkeW5hbWljIGZpZWxkCm15ICVEeW5hbWljRmllbGREcm9wZG93bkNvbmZpZyA9ICgKICAgIE5hbWUgICAgICAgPT4gIlVuaXR0ZXN0MiRSYW5kb21JRCIsCiAgICBGaWVsZE9yZGVyID0+IDk5OTIsCiAgICBGaWVsZFR5cGUgID0+ICdEcm9wZG93bicsCiAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgTGFiZWwgICAgICA9PiAnRGVzY3JpcHRpb24nLAogICAgVmFsaWRJRCAgICA9PiAxLAogICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgUG9zc2libGVWYWx1ZXMgPT4gewogICAgICAgICAgICAxID0+ICdPbmUnLAogICAgICAgICAgICAyID0+ICdUd28nLAogICAgICAgICAgICAzID0+ICdUaHJlZScsCiAgICAgICAgICAgIDAgPT4gJzAnLAogICAgICAgIH0sCiAgICB9LAopOwpteSAkRmllbGREcm9wZG93bklEID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgJUR5bmFtaWNGaWVsZERyb3Bkb3duQ29uZmlnLAogICAgVXNlcklEICA9PiAxLAogICAgUmVvcmRlciA9PiAwLAopOwpvayggJEZpZWxkRHJvcGRvd25JRCwgIkR5bmFtaWMgRmllbGQgJEZpZWxkRHJvcGRvd25JRCIgKTsKCiMgYWRkIElECiREeW5hbWljRmllbGREcm9wZG93bkNvbmZpZ3tJRH0gPSAkRmllbGREcm9wZG93bklEOwoKIyBhZGQgbXVsdGlzZWxlY3QgZHluYW1pYyBmaWVsZApteSAlRHluYW1pY0ZpZWxkTXVsdGlzZWxlY3RDb25maWcgPSAoCiAgICBOYW1lICAgICAgID0+ICJVbml0dGVzdDMkUmFuZG9tSUQiLAogICAgRmllbGRPcmRlciA9PiA5OTkzLAogICAgRmllbGRUeXBlICA9PiAnTXVsdGlzZWxlY3QnLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIExhYmVsICAgICAgPT4gJ011bHRpc2VsZWN0IGxhYmVsJywKICAgIFZhbGlkSUQgICAgPT4gMSwKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIFBvc3NpYmxlVmFsdWVzID0+IHsKICAgICAgICAgICAgMSA9PiAnVmFsdWU5w5/DvMOfJywKICAgICAgICAgICAgMiA9PiAnRGlmZmVyZW50VmFsdWUnLAogICAgICAgICAgICAzID0+ICcxMjM0NTY3JywKICAgICAgICB9LAogICAgfSwKKTsKbXkgJEZpZWxkTXVsdGlzZWxlY3RJRCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgICVEeW5hbWljRmllbGRNdWx0aXNlbGVjdENvbmZpZywKICAgIFVzZXJJRCAgPT4gMSwKICAgIFJlb3JkZXIgPT4gMCwKKTsKb2soICRGaWVsZE11bHRpc2VsZWN0SUQsICJEeW5hbWljIEZpZWxkICRGaWVsZE11bHRpc2VsZWN0SUQiICk7CgojIGFkZCBJRAokRHluYW1pY0ZpZWxkTXVsdGlzZWxlY3RDb25maWd7SUR9ID0gJEZpZWxkTXVsdGlzZWxlY3RJRDsKCiMgYWRkIGRhdGUtdGltZSBkeW5hbWljIGZpZWxkCm15ICVEeW5hbWljRmllbGREYXRlVGltZUNvbmZpZyA9ICgKICAgIE5hbWUgICAgICAgPT4gIlVuaXR0ZXN0NCRSYW5kb21JRCIsCiAgICBGaWVsZE9yZGVyID0+IDk5OTQsCiAgICBGaWVsZFR5cGUgID0+ICdEYXRlVGltZScsCiAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgTGFiZWwgICAgICA9PiAnRGVzY3JpcHRpb24nLAogICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgRGVmYXVsdFZhbHVlICA9PiAwLAogICAgICAgIFllYXJzSW5GdXR1cmUgPT4gMCwKICAgICAgICBZZWFyc0luUGFzdCAgID0+IDAsCiAgICAgICAgWWVhcnNQZXJpb2QgICA9PiAwLAogICAgfSwKICAgIFZhbGlkSUQgPT4gMSwKKTsKbXkgJEZpZWxkRGF0ZVRpbWVJRCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgICVEeW5hbWljRmllbGREYXRlVGltZUNvbmZpZywKICAgIFVzZXJJRCAgPT4gMSwKICAgIFJlb3JkZXIgPT4gMCwKKTsKb2soICRGaWVsZERhdGVUaW1lSUQsICJEeW5hbWljIEZpZWxkICRGaWVsZERhdGVUaW1lSUQiICk7CgojIGFkZCBJRAokRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7SUR9ID0gJEZpZWxkRGF0ZVRpbWVJRDsKCiMgYWRkIGRhdGUtdGltZSBkeW5hbWljIGZpZWxkCm15ICVEeW5hbWljRmllbGREYXRlQ29uZmlnID0gKAogICAgTmFtZSAgICAgICA9PiAiVW5pdHRlc3Q1JFJhbmRvbUlEIiwKICAgIEZpZWxkT3JkZXIgPT4gOTk5NSwKICAgIEZpZWxkVHlwZSAgPT4gJ0RhdGUnLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIExhYmVsICAgICAgPT4gJ0Rlc2NyaXB0aW9uJywKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIERlZmF1bHRWYWx1ZSAgPT4gMCwKICAgICAgICBZZWFyc0luRnV0dXJlID0+IDAsCiAgICAgICAgWWVhcnNJblBhc3QgICA9PiAwLAogICAgICAgIFllYXJzUGVyaW9kICAgPT4gMCwKICAgIH0sCiAgICBWYWxpZElEID0+IDEsCik7Cm15ICRGaWVsZERhdGVJRCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgICVEeW5hbWljRmllbGREYXRlQ29uZmlnLAogICAgVXNlcklEICA9PiAxLAogICAgUmVvcmRlciA9PiAwLAopOwpvayggJEZpZWxkRGF0ZUlELCAiRHluYW1pYyBGaWVsZCAkRmllbGREYXRlSUQiLCApOwoKIyBhZGQgSUQKJER5bmFtaWNGaWVsZERhdGVDb25maWd7SUR9ID0gJEZpZWxkRGF0ZUlEOwoKIyBjcmVhdGUgd2ViIHNlcnZpY2Ugb2JqZWN0Cm15ICRXZWJzZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnKTsKaXNhX29rKAogICAgJFdlYnNlcnZpY2VPYmplY3QsCiAgICBbJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJ10sCiAgICAnQ3JlYXRlIHdlYiBzZXJ2aWNlIG9iamVjdCcKKTsKCiMgc2V0IHdlYiBzZXJ2aWNlIG5hbWUKbXkgJFdlYnNlcnZpY2VOYW1lID0gJy1UZXN0LScgLiAkUmFuZG9tSUQ7CgpteSAkV2Vic2VydmljZUlEID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VBZGQoCiAgICBOYW1lICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnID0+IHsKICAgICAgICBEZWJ1Z2dlciA9PiB7CiAgICAgICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgfSwKICAgICAgICBQcm92aWRlciA9PiB7CiAgICAgICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwpvayggJFdlYnNlcnZpY2VJRCwgIkFkZGVkIHdlYiBzZXJ2aWNlIiApOwoKIyBnZXQgcmVtb3RlIGhvc3Qgd2l0aCBzb21lIHByZWNhdXRpb25zIGZvciBjZXJ0YWluIHVuaXQgdGVzdCBzeXN0ZW1zCm15ICRIb3N0ID0gJEhlbHBlci0+R2V0VGVzdEhUVFBIb3N0bmFtZSgpOwoKIyBwcmVwYXJlIHdlYiBzZXJ2aWNlIGNvbmZpZwpteSAkUmVtb3RlU3lzdGVtID0KICAgICRDb25maWdPYmplY3QtPkdldCgnSHR0cFR5cGUnKQogICAgLiAnOi8vJwogICAgLiAkSG9zdAogICAgLiAnLycKICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCdTY3JpcHRBbGlhcycpCiAgICAuICducGgtZ2VuZXJpY2ludGVyZmFjZS5wbC9XZWJzZXJ2aWNlSUQvJwogICAgLiAkV2Vic2VydmljZUlEOwoKbXkgJFdlYnNlcnZpY2VDb25maWcgPSB7CgogICAgIyAgICBOYW1lID0+ICcnLAogICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAnVGVzdCBmb3IgVGlja2V0IENvbm5lY3RvciB1c2luZyBTT0FQIHRyYW5zcG9ydCBiYWNrZW5kLicsCiAgICBEZWJ1Z2dlciA9PiB7CiAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICBUZXN0TW9kZSAgICAgICA9PiAxLAogICAgfSwKICAgIFByb3ZpZGVyID0+IHsKICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICBUeXBlICAgPT4gJ0hUVFA6OlNPQVAnLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDEwMDAwMDAwLAogICAgICAgICAgICAgICAgTmFtZVNwYWNlID0+ICdodHRwOi8vb3RvYm8ub3JnL1NvYXBUZXN0SW50ZXJmYWNlLycsCiAgICAgICAgICAgICAgICBFbmRwb2ludCAgPT4gJFJlbW90ZVN5c3RlbSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiB7CiAgICAgICAgICAgIFRpY2tldENyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUaWNrZXQ6OlRpY2tldENyZWF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlc3Npb25DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnU2Vzc2lvbjo6U2Vzc2lvbkNyZWF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICBSZXF1ZXN0ZXIgPT4gewogICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgIFR5cGUgICA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBOYW1lU3BhY2UgPT4gJ2h0dHA6Ly9vdG9iby5vcmcvU29hcFRlc3RJbnRlcmZhY2UvJywKICAgICAgICAgICAgICAgIEVuY29kaW5nICA9PiAnVVRGLTgnLAogICAgICAgICAgICAgICAgRW5kcG9pbnQgID0+ICRSZW1vdGVTeXN0ZW0sCiAgICAgICAgICAgICAgICBUaW1lb3V0ICAgPT4gMTIwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgSW52b2tlciA9PiB7CiAgICAgICAgICAgIFRpY2tldENyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2Vzc2lvbkNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKfTsKCiMgdXBkYXRlIHdlYiBzZXJ2aWNlIHdpdGggcmVhbCBjb25maWcKbXkgJFdlYnNlcnZpY2VVcGRhdGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZVVwZGF0ZSgKICAgIElEICAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIE5hbWUgICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnICA9PiAkV2Vic2VydmljZUNvbmZpZywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKb2soICRXZWJzZXJ2aWNlVXBkYXRlLCAiVXBkYXRlZCB3ZWIgc2VydmljZSAkV2Vic2VydmljZUlEIC0gJFdlYnNlcnZpY2VOYW1lIiApOwoKIyBHZXQgU2Vzc2lvbklECiMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKbXkgJFJlcXVlc3RlclNlc3Npb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwppc2Ffb2soCiAgICAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdCwKICAgIFsnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInXSwKICAgICdTZXNzaW9uSUQgLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCcKKTsKCiMgY3JlYXRlIGEgbmV3IHVzZXIgZm9yIGN1cnJlbnQgdGVzdApteSAkVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnIF0sCik7Cm15ICRQYXNzd29yZCA9ICRVc2VyTG9naW47CgojIGNyZWF0ZSBhIG5ldyB1c2VyIHdpdGhvdXQgcGVybWlzc2lvbnMgZm9yIGN1cnJlbnQgdGVzdApteSAkVXNlckxvZ2luMiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKCk7Cm15ICRQYXNzd29yZDIgID0gJFVzZXJMb2dpbjI7CgojIGNyZWF0ZSBhIGN1c3RvbWVyIHdoZXJlIGEgdGlja2V0IHdpbGwgdXNlIGFuZCB3aWxsIGhhdmUgcGVybWlzc2lvbnMKbXkgJEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwpteSAkQ3VzdG9tZXJQYXNzd29yZCAgPSAkQ3VzdG9tZXJVc2VyTG9naW47CgojIGNyZWF0ZSBhIGN1c3RvbWVyIHRoYXQgd2lsbCBub3QgaGF2ZSBwZXJtaXNzaW9ucwpteSAkQ3VzdG9tZXJVc2VyTG9naW4yID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwpteSAkQ3VzdG9tZXJQYXNzd29yZDIgID0gJEN1c3RvbWVyVXNlckxvZ2luMjsKCiMgQ3JlYXRlIGEgY3VzdG9tZXIgd2l0aCBlbWFpbCBhZGRyZXNzLgpteSAkQ3VzdG9tZXJSYW5kICAgICAgID0gJ2VtYWlsLWN1c3RvbWVyLScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwpteSAkRW1haWxDdXN0b21lclJhbmQgID0gJEN1c3RvbWVyUmFuZCAuICdAbG9jYWxob3N0LmNvbSc7Cm15ICRDdXN0b21lclVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7CgpteSAkVGVzdEN1c3RvbWVyVXNlcklEID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyQWRkKAogICAgU291cmNlICAgICAgICAgPT4gJ0N1c3RvbWVyVXNlcicsCiAgICBVc2VyRmlyc3RuYW1lICA9PiAnRmlyc3RuYW1lIFRlc3QnLAogICAgVXNlckxhc3RuYW1lICAgPT4gJ0xhc3RuYW1lIFRlc3QnLAogICAgVXNlckN1c3RvbWVySUQgPT4gJEN1c3RvbWVyUmFuZCwKICAgIFVzZXJMb2dpbiAgICAgID0+ICRDdXN0b21lclJhbmQsCiAgICBVc2VyRW1haWwgICAgICA9PiAkRW1haWxDdXN0b21lclJhbmQsCiAgICBVc2VyUGFzc3dvcmQgICA9PiAkQ3VzdG9tZXJSYW5kLAogICAgVmFsaWRJRCAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgID0+IDEsCik7CgojIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWIgc2VydmljZQpteSAkUmVxdWVzdGVyU2Vzc2lvblJlc3VsdCA9ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0LT5SdW4oCiAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgIEludm9rZXIgICAgICA9PiAnU2Vzc2lvbkNyZWF0ZScsCiAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQsCiAgICB9LAopOwoKbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCnN1YiBUZXN0VGlja2V0RGVsZXRlIHsKICAgIG15ICVQYXJhbSA9IEBfOwoKICAgIG15IEBUaWNrZXRJRHMgPSBAeyAkUGFyYW17VGlja2V0SURzfSB9OwoKICAgICMgQWxsb3cgc29tZSB0aW1lIGZvciBhbGwgaGlzdG9yeSBlbnRyaWVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHRpY2tldCBiZWZvcmUgZGVsZXRpbmcgaXQsCiAgICAjICAgb3RoZXJ3aXNlIFRpY2tldERlbGV0ZSBjb3VsZCBmYWlsLgogICAgc2xlZXAgMTsKICAgIFRJQ0tFVElEOgogICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewoKICAgICAgICBuZXh0IFRJQ0tFVElEIHVubGVzcyAkVGlja2V0SUQ7CgogICAgICAgIG15ICRUaWNrZXREZWxldGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIFRpY2tldCBkZWxldGlvbiBjb3VsZCBmYWlsIGlmIHRoZSB3ZWIgc2VydmVyIHN0aWxsIHdyaXRlcyB0byB0aWNrZXQgaGlzdG9yeS4gVHJ5IGFnYWluIGluIHRoaXMgY2FzZS4KICAgICAgICBpZiAoICEkVGlja2V0RGVsZXRlICkgewogICAgICAgICAgICBzbGVlcCAzOwogICAgICAgICAgICAkVGlja2V0RGVsZXRlID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgb2soICRUaWNrZXREZWxldGUsICJUaWNrZXREZWxldGUoKSBzdWNjZXNzZnVsIGZvciBUaWNrZXQgSUQgJFRpY2tldElEIiApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpteSAkTmV3U2Vzc2lvbklEID0gJFJlcXVlc3RlclNlc3Npb25SZXN1bHQtPntEYXRhfS0+e1Nlc3Npb25JRH07Cm15IEBUZXN0cyAgICAgICAgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0VtcHR5IFJlcXVlc3QnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7fSwKICAgICAgICBFeHBlY3RlZERhdGEgICA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdObyBBcnRpY2xlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgVGlja2V0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgID0+IDEsCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQXJ0aWNsZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiAxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRHluYW1pY0ZpZWxkJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IDEsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBBdHRhY2htZW50JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgVGl0bGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIEN1c3RvbWVyVXNlcicsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBDdXN0b21lclVzZXInLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBRdWV1ZSBvciBRdWV1ZUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFF1ZXVlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBRdWV1ZUlEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBMb2NrJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgTG9jayAgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgTG9ja0lEJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgTG9ja0lEICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgVHlwZSBvciBUeXBlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFR5cGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBUeXBlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTZXJ2aWNlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTZXJ2aWNlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTTEEnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBICAgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgU0xBSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgU3RhdGUgb3IgU3RhdGVJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTdGF0ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgU3RhdGVJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgUHJpb3JpdHkgb3IgUHJpb3JpdHlJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBQcmlvcml0eScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgUHJpb3JpdHlJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgT3duZXInLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVyICAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIE93bmVySUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFJlc3BvbnNpYmxlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBSZXNwb25zaWJlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBQZW5kaW5nVGltZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMywKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFBlbmRpbmdUaW1lIERpZmYnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBEaWZmID0+IC0xMjM0NTYsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBQZW5kaW5nVGltZSBEaWZmICsgRnVsbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIERpZmYgICA9PiAxMjM0NTYsCiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEzLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgU3ViamVjdCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIEJvZHknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgQXV0b1Jlc3BvbnNlVHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQXV0b1Jlc3BvbnNlVHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTZW5kZXJUeXBlJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBTZW5kZXJUeXBlSUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEZyb20nLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBDb250ZW50VHlwZSBvciBNSU1FVHlwZSBhbmQgQ2hhcnNldCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgQ29udGVudFR5cGUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgID0+ICdoZWxsb0BvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIENvbnRlbnRUeXBlIG9yIE1JTUVUeXBlIGFuZCBDaGFyc2V0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBIaXN0b3J5VHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBUaW1lVW5pdCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIFRpbWVVbml0JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gewogICAgICAgICAgICAgICAgICAgIEl0ZW0gPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCBJbnRlcm5hbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyAnSW52YWxpZCcgLiAkUmFuZG9tSUQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnSW52YWxpZCBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgID0+ICdoZWxsb0BvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gewogICAgICAgICAgICAgICAgICAgIEl0ZW0gPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEIGludGVybmFsJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFsgJ0ludmFsaWQnIC4gJFJhbmRvbUlEIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBJdGVtID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgaW50ZXJuYWwnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdoZWxsb0BvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbICdJbnZhbGlkJyAuICRSYW5kb21JRCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIER5bmFtaWNGaWVsZCBuYW1lJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIER5bmFtaWNGaWVsZCB2YWx1ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIER5bmFtaWNGaWVsZCBuYW1lJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIFRlc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdJbnZhbGlkIER5bmFtaWNGaWVsZCB2YWx1ZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICdJbnZhbGlkJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBUZXN0ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnTWlzc2luZyBhdHRhY2htZW50IENvbnRlbnQnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdoZWxsb0BvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgVGVzdCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ01pc3NpbmcgYXR0YWNobWVudCBDb250ZW50VHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdNaXNzaW5nIGF0dGFjaG1lbnQgRmlsZW5hbWUnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMCwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdoZWxsb0BvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ0ludmFsaWQnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0ludmFsaWQgYXR0YWNobWVudCBDb250ZW50VHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnSW52YWxpZCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIElEcycsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBDdXN0b21lciBVc2VyIGJ5IGVtYWlsLicsCiAgICAgICAgVHlwZSAgICAgICAgICAgPT4gJ0VtYWlsQ3VzdG9tZXJVc2VyJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJEVtYWlsQ3VzdG9tZXJSYW5kLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJEVtYWlsQ3VzdG9tZXJSYW5kLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmOCcsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAnMScsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD11dGY4JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBJRHMgUGVuZGluZ1RpbWUgRGlmZicsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIERpZmYgPT4gMTAwODAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdoZWxsb0BvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggSURzIChVc2luZyBTZXNzaW9uKScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBBdXRoID0+IHsKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICROZXdTZXNzaW9uSUQsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBDREFUQSB0YWdzJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnVGVzdCBjb250ZW50IDxbW2h0dHBzOi8vZXhhbXBsZS5jb20vXV0+JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEF1dGggPT4gewogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJE5ld1Nlc3Npb25JRCwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIE5hbWVzJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJFF1ZXVlc1swXS0+e05hbWV9LAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICRUeXBlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFNlcnZpY2UgICAgICA9PiAkU2VydmljZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTTEEgICAgICAgICAgPT4gJFNMQURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJFN0YXRlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAkUHJpb3JpdHlEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgT3duZXIgICAgICAgID0+ICRUZXN0T3duZXJMb2dpbiwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlICA9PiAkVGVzdFJlc3BvbnNpYmxlTG9naW4sCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0IMOkw7bDvMOfw4TDlsOc4oKs0LjRgScsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHkgyZ8gyaAgyaEgyaIgyaMgyaQgyaUgyaYgyacgyoAgyoEgyoIgyoMgyoQgyoUgyoYgyocgyoggyokgyoogyosgyowgyo0gyo4nLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlICAgICAgICAgICAgICAgICAgICAgID0+ICdhZ2VudCcsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdoZWxsb0BvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBleHRlcm5hbCBjdXN0b21lciB1c2VyIC0gdmFsaWQgYWRkcmVzcycsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgICA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgICAgPT4gMSwKICAgICAgICBFeHRlcm5hbEN1c3RvbWVyID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJ3NvbWVvbmVAc29tZWhvdHMuY29tJywKICAgICAgICAgICAgICAgIFF1ZXVlICAgICAgICA9PiAkUXVldWVzWzBdLT57TmFtZX0sCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJFR5cGVEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICRTdGF0ZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICAgPT4gJFByaW9yaXR5RGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIE93bmVyICAgICAgICA9PiAkVGVzdE93bmVyTG9naW4sCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSAgPT4gJFRlc3RSZXNwb25zaWJsZUxvZ2luLAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCDDpMO2w7zDn8OEw5bDnOKCrNC40YEnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5IMmfIMmgIMmhIMmiIMmjIMmkIMmlIMmmIMmnIMqAIMqBIMqCIMqDIMqEIMqFIMqGIMqHIMqIIMqJIMqKIMqLIMqMIMqNIMqOJywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVGlja2V0IHdpdGggZXh0ZXJuYWwgY3VzdG9tZXIgdXNlciAtIGludmFsaWQgYWRkcmVzcycsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgICA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgICAgPT4gMCwKICAgICAgICBFeHRlcm5hbEN1c3RvbWVyID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJ3NvbWVvbmVzb21laG90cy5jb20nLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICRRdWV1ZXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkVHlwZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJFN0YXRlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAkUHJpb3JpdHlEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgT3duZXIgICAgICAgID0+ICRUZXN0T3duZXJMb2dpbiwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlICA9PiAkVGVzdFJlc3BvbnNpYmxlTG9naW4sCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0IMOkw7bDvMOfw4TDlsOc4oKs0LjRgScsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHkgyZ8gyaAgyaEgyaIgyaMgyaQgyaUgyaYgyacgyoAgyoEgyoIgyoMgyoQgyoUgyoYgyocgyoggyokgyoogyosgyowgyo0gyo4nLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlICAgICAgICAgICAgICAgICAgICAgID0+ICdhZ2VudCcsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBUaW1lVW5pdHMgMCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICRRdWV1ZXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkVHlwZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTZXJ2aWNlICAgICAgPT4gJFNlcnZpY2VEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU0xBICAgICAgICAgID0+ICRTTEFEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICRTdGF0ZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICAgPT4gJFByaW9yaXR5RGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIE93bmVyICAgICAgICA9PiAkVGVzdE93bmVyTG9naW4sCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSAgPT4gJFRlc3RSZXNwb25zaWJsZUxvZ2luLAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCDDpMO2w7zDn8OEw5bDnOKCrNC40YEnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIFRpbWVVbml0cyBmcmFjdGlvbmFsJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJFF1ZXVlc1swXS0+e05hbWV9LAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICRUeXBlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFNlcnZpY2UgICAgICA9PiAkU2VydmljZURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTTEEgICAgICAgICAgPT4gJFNMQURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJFN0YXRlRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAkUHJpb3JpdHlEYXRhe05hbWV9LAogICAgICAgICAgICAgICAgT3duZXIgICAgICAgID0+ICRUZXN0T3duZXJMb2dpbiwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlICA9PiAkVGVzdFJlc3BvbnNpYmxlTG9naW4sCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0IMOkw7bDvMOfw4TDlsOc4oKs0LjRgScsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlICAgICAgICAgICAgICAgICAgICAgID0+ICdhZ2VudCcsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdoZWxsb0BvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUuNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBJRHMgQWdlbnQgKE5vIFBlcm1pc3Npb24pJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEF1dGggPT4gewogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFVzZXJMb2dpbjIsCiAgICAgICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQyLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCgogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIElEcyBDdXN0b21lciAoV2l0aCBQZXJtaXNzaW9ucyknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdoZWxsb0BvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQXV0aCA9PiB7CiAgICAgICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgICAgICAgICAgPT4gJEN1c3RvbWVyUGFzc3dvcmQsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBJRHMgQ3VzdG9tZXIgKE5vIFBlcm1pc3Npb24pJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1sxXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEF1dGggPT4gewogICAgICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyTG9naW4yLAogICAgICAgICAgICBQYXNzd29yZCAgICAgICAgICA9PiAkQ3VzdG9tZXJQYXNzd29yZDIsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdDcmVhdGUgRHluYW1pY0ZpZWxkcyAod2l0aCBlbXB0eSB2YWx1ZSknLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdoZWxsb0BvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gIlVuaXR0ZXN0MSRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICJVbml0dGVzdDIkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiVW5pdHRlc3QzJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ3JlYXRlIER5bmFtaWNGaWVsZHMgKHdpdGggbm90IGVtcHR5IHZhbHVlKScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiVW5pdHRlc3QxJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnVmFsdWU5w5/DvMOfLeOCq+OCueOCvzEyMzQnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiVW5pdHRlc3QyJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICJVbml0dGVzdDMkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+IFsgMSwgMiBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdDcmVhdGUgRHluYW1pY0ZpZWxkcyAod2l0aCBkcm9wZG93biB2YWx1ZSAwKScsICAgICMgc2VlIGJ1ZyMxNDg1OAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdlbmpveUBvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD11dGY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gIlVuaXR0ZXN0MiRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJzAnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD11dGY4JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdDcmVhdGUgRHluYW1pY0ZpZWxkcyAod2l0aCB3cm9uZyB2YWx1ZSB0eXBlKScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiVW5pdHRlc3QxJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiB7IFdyb25nID0+ICdWYWx1ZScgfSwgICAgIyB2YWx1ZSB0eXBlIGRlcGVuZHMgb24gdGhlIGR5bmFtaWMgZmllbGQKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gIlVuaXR0ZXN0MiRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4geyBXcm9uZyA9PiAnVmFsdWUnIH0sICAgICMgdmFsdWUgdHlwZSBkZXBlbmRzIG9uIHRoZSBkeW5hbWljIGZpZWxkCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSA9PiAnVGlja2V0Q3JlYXRlLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdDcmVhdGUgRHluYW1pY0ZpZWxkcyAod2l0aCBpbnZhbGlkIHZhbHVlKScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiVW5pdHRlc3QyJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnNCcsICAgICAgICAgICAgICAgICAgICAjIGludmFsaWQgdmFsdWUKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQgd2l0aCBBbGlhcyBDaGFyc2V0cyBhdHRhY2htZW50JywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVMtQVNDSUknLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VUy1BU0NJSScsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQXJ0aWNsZSB3aXRoIEVtYWlsIGNvbW11bmljYXRpb24gY2hhbm5lbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENvbW11bmljYXRpb25DaGFubmVsICAgICAgICAgICAgPT4gJ0VtYWlsJywKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVTLUFTQ0lJJywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0ZVRpbWVDb25maWd7TmFtZX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnMjAxMi0wMS0xNyAxMjo0MDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gewogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJ1ZHaHBjeUJwY3lCaElIUmxjM1FnZEdWNGRDND0nLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVMtQVNDSUknLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ1Rlc3QudHh0JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FydGljbGUgd2l0aCBJbnRlcm5hbCBjb21tdW5pY2F0aW9uIGNoYW5uZWwnLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgU3VjY2Vzc0NyZWF0ZSAgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVzWzBdLT57UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkT3duZXJJRCwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gJFJlc3BvbnNpYmxlSUQsCiAgICAgICAgICAgICAgICBQZW5kaW5nVGltZSAgID0+IHsKICAgICAgICAgICAgICAgICAgICBZZWFyICAgPT4gMjAxMiwKICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gMTIsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgID0+IDE2LAogICAgICAgICAgICAgICAgICAgIEhvdXIgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICBNaW51dGUgPT4gNDgsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgc3ViamVjdCcsCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIGJvZHknLAogICAgICAgICAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSAgICAgICAgICAgICAgICA9PiAnYXV0byByZXBseScsCiAgICAgICAgICAgICAgICBBcnRpY2xlVHlwZUlEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZW5kZXJUeXBlSUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDb21tdW5pY2F0aW9uQ2hhbm5lbCAgICAgICAgICAgID0+ICdJbnRlcm5hbCcsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdoZWxsb0BvdG9iby5vcmcnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VUy1BU0NJSScsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVTLUFTQ0lJJywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBcnRpY2xlIHdpdGggUGhvbmUgY29tbXVuaWNhdGlvbiBjaGFubmVsJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ29tbXVuaWNhdGlvbkNoYW5uZWwgICAgICAgICAgICA9PiAnUGhvbmUnLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVMtQVNDSUknLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VUy1BU0NJSScsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQXJ0aWNsZSB3aXRoIHdyb25nIGNvbW11bmljYXRpb24gY2hhbm5lbCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENvbW11bmljYXRpb25DaGFubmVsICAgICAgICAgICAgPT4gJ1Rlc3QxMjMnLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnaGVsbG9Ab3RvYm8ub3JnJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGVUaW1lQ29uZmlne05hbWV9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJzIwMTItMDEtMTcgMTI6NDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVTLUFTQ0lJJywKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICdUZXN0LnR4dCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEVycm9yID0+IHsKICAgICAgICAgICAgICAgICAgICBFcnJvckNvZGUgPT4gJ1RpY2tldENyZWF0ZS5JbnZhbGlkUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnRmlsZW5hbWUgd2l0aCBuYW1lICIwIicsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENvbW11bmljYXRpb25DaGFubmVsICAgICAgICAgICAgPT4gJ0VtYWlsJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgVG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PgogICAgICAgICAgICAgICAgICAgICIkVGVzdEN1c3RvbWVyVXNlckxvZ2luICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gPCR7VGVzdEN1c3RvbWVyVXNlckxvZ2lufVxAbG9jYWx1bml0dGVzdC5jb20+LCAiCiAgICAgICAgICAgICAgICAgICAgLiAnImFub3RoZXIgXCIgcmVjaXBpZW50IiA8dG9fcmVjaXBpZW50X2FAbG9jYWx1bml0dGVzdC5jb20+LCAnCiAgICAgICAgICAgICAgICAgICAgLiAnPHRvX3JlY2lwaWVudF9iQGxvY2FsdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgICAgICBDYyA9PgogICAgICAgICAgICAgICAgICAgICciYW5vdGhlciBcIiByZWNpcGllbnQiIDxjY19yZWNpcGllbnRfYUBsb2NhbHVuaXR0ZXN0LmNvbT4sICcKICAgICAgICAgICAgICAgICAgICAuICc8Y2NfcmVjaXBpZW50X2JAbG9jYWx1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGREYXRlVGltZUNvbmZpZ3tOYW1lfSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaScsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnMCcsCiAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAogICAgewogICAgICAgICMgdGhlIGF0dGFjaG1lbnQgc2hvdWxkIGJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIENvbnRlbnRUeXBlIGxvb2tzIGR1YmlvdXMKICAgICAgICBOYW1lICAgICAgICAgICA9PiAncmVqZWN0IGF0dGFjaG1lbnQ6IHVua25vd24gY2hhcnNldCcsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAwLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENvbW11bmljYXRpb25DaGFubmVsICAgICAgICAgICAgPT4gJ0VtYWlsJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmOCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgVG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PgogICAgICAgICAgICAgICAgICAgICIkVGVzdEN1c3RvbWVyVXNlckxvZ2luICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gPCR7VGVzdEN1c3RvbWVyVXNlckxvZ2lufVxAbG9jYWx1bml0dGVzdC5jb20+LCAiCiAgICAgICAgICAgICAgICAgICAgLiAnImFub3RoZXIgXCIgcmVjaXBpZW50IiA8dG9fcmVjaXBpZW50X2FAbG9jYWx1bml0dGVzdC5jb20+LCAnCiAgICAgICAgICAgICAgICAgICAgLiAnPHRvX3JlY2lwaWVudF9iQGxvY2FsdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgICAgICBDYyA9PgogICAgICAgICAgICAgICAgICAgICciYW5vdGhlciBcIiByZWNpcGllbnQiIDxjY19yZWNpcGllbnRfYUBsb2NhbHVuaXR0ZXN0LmNvbT4sICcKICAgICAgICAgICAgICAgICAgICAuICc8Y2NfcmVjaXBpZW50X2JAbG9jYWx1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAidGV4dC9wbGFpbjsgY2hhcnNldD1ub3RpbnZlbnRlZGhlcmUiLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ3JlamVjdF9jaGFyc2V0JywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRXJyb3IgPT4gewogICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0Q3JlYXRlLkludmFsaWRQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnVGlja2V0Q3JlYXRlOiBBdHRhY2htZW50LT5Db250ZW50VHlwZSBpcyBpbnZhbGlkIScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCiAgICB7CiAgICAgICAgIyB0aGUgYXR0YWNobWVudCBzaG91bGQgYmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgQ29udGVudFR5cGUgY29udGFpbnMgYSBuZXdsaW5lCiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ3JlamVjdCBhdHRhY2htZW50OiBXZWItQ2FjaGUtUG9pc29uaW5nJywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFN1Y2Nlc3NDcmVhdGUgID0+IDAsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlc1swXS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJE93bmVySUQsCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRSZXNwb25zaWJsZUlELAogICAgICAgICAgICAgICAgUGVuZGluZ1RpbWUgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+IDIwMTIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggID0+IDEyLAogICAgICAgICAgICAgICAgICAgIERheSAgICA9PiAxNiwKICAgICAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgTWludXRlID0+IDQ4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBcnRpY2xlIHN1YmplY3QnLAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBib2R5JywKICAgICAgICAgICAgICAgIEF1dG9SZXNwb25zZVR5cGUgICAgICAgICAgICAgICAgPT4gJ2F1dG8gcmVwbHknLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ29tbXVuaWNhdGlvbkNoYW5uZWwgICAgICAgICAgICA9PiAnRW1haWwnLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD11dGY4JywKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCAgICAgICAgICAgICAgICAgID0+ICclICUgJywKICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMjUsCiAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU11dGVOb3RpZmljYXRpb25Ub1VzZXJJRCA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBUbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+CiAgICAgICAgICAgICAgICAgICAgIiRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiA8JHtUZXN0Q3VzdG9tZXJVc2VyTG9naW59XEBsb2NhbHVuaXR0ZXN0LmNvbT4sICIKICAgICAgICAgICAgICAgICAgICAuICciYW5vdGhlciBcIiByZWNpcGllbnQiIDx0b19yZWNpcGllbnRfYUBsb2NhbHVuaXR0ZXN0LmNvbT4sICcKICAgICAgICAgICAgICAgICAgICAuICc8dG9fcmVjaXBpZW50X2JAbG9jYWx1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgICAgIENjID0+CiAgICAgICAgICAgICAgICAgICAgJyJhbm90aGVyIFwiIHJlY2lwaWVudCIgPGNjX3JlY2lwaWVudF9hQGxvY2FsdW5pdHRlc3QuY29tPiwgJwogICAgICAgICAgICAgICAgICAgIC4gJzxjY19yZWNpcGllbnRfYkBsb2NhbHVuaXR0ZXN0LmNvbT4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBBdHRhY2htZW50ID0+IHsKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJ0ZXh0L3BsYWluXG5Ib3N0LUhlYWRlci1JbmplY3Rpb246IFdlYi1DYWNoZS1Qb2lzb25pbmciLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ3JlamVjdF9pbmplY3Rpb24nLAogICAgICAgICAgICAgICAgRGlzcG9zaXRpb24gPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWREYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBFcnJvciA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRDcmVhdGUuSW52YWxpZFBhcmFtZXRlcicsCiAgICAgICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdUaWNrZXRDcmVhdGU6IEF0dGFjaG1lbnQtPkNvbnRlbnRUeXBlIGlzIGludmFsaWQhJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRDcmVhdGUnLAogICAgfSwKICAgIHsKICAgICAgICAjIHRoZSBhdHRhY2htZW50IHNob3VsZCBub3QgYmUgcmVqZWN0ZWQgYmVjYXVzZSBleHRyYSBwYXJhbWV0ZXJzIGFyZSBhbGxvd2VkCiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ2V4dHJhIHBhcmFtZXRlciBpbiBDb250ZW50VHlwZScsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIEFydGljbGVUeXBlSUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENvbW11bmljYXRpb25DaGFubmVsICAgICAgICAgICAgPT4gJ0VtYWlsJywKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgICAgICAgICAgICAgPT4gInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmOCIsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAnJSAlICcsCiAgICAgICAgICAgICAgICBUaW1lVW5pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDI1LAogICAgICAgICAgICAgICAgRm9yY2VOb3RpZmljYXRpb25Ub1VzZXJJRCAgICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgID0+IFskVXNlcklEXSwKICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgVG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PgogICAgICAgICAgICAgICAgICAgICIkVGVzdEN1c3RvbWVyVXNlckxvZ2luICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gPCR7VGVzdEN1c3RvbWVyVXNlckxvZ2lufVxAbG9jYWx1bml0dGVzdC5jb20+LCAiCiAgICAgICAgICAgICAgICAgICAgLiAnImFub3RoZXIgXCIgcmVjaXBpZW50IiA8dG9fcmVjaXBpZW50X2FAbG9jYWx1bml0dGVzdC5jb20+LCAnCiAgICAgICAgICAgICAgICAgICAgLiAnPHRvX3JlY2lwaWVudF9iQGxvY2FsdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgICAgICBDYyA9PgogICAgICAgICAgICAgICAgICAgICciYW5vdGhlciBcIiByZWNpcGllbnQiIDxjY19yZWNpcGllbnRfYUBsb2NhbHVuaXR0ZXN0LmNvbT4sICcKICAgICAgICAgICAgICAgICAgICAuICc8Y2NfcmVjaXBpZW50X2JAbG9jYWx1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0YWNobWVudCA9PiB7CiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnVkdocGN5QnBjeUJoSUhSbGMzUWdkR1Y0ZEM0PScsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAidGV4dC9wbGFpbjtleHRyYV90ZXN0X3BhcmFtZXRlcj1kdW1teV9wYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ2V4dHJhX3Rlc3RfcGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0Q3JlYXRlJywKICAgIH0sCik7CgojIGRlYnVnZ2VyIG9iamVjdApteSAkRGVidWdnZXJPYmplY3QgPSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyLT5uZXcoCiAgICBEZWJ1Z2dlckNvbmZpZyA9PiB7CiAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICBUZXN0TW9kZSAgICAgICA9PiAxLAogICAgfSwKICAgIFdlYnNlcnZpY2VJRCAgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBDb21tdW5pY2F0aW9uVHlwZSA9PiAnUHJvdmlkZXInLAopOwppc2Ffb2soCiAgICAkRGVidWdnZXJPYmplY3QsCiAgICBbJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXInXSwKICAgICdEZWJ1Z2dlck9iamVjdCBpbnN0YW50aWF0ZSBjb3JyZWN0bHknCik7Cgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewoKICAgIHN1YnRlc3QgJFRlc3QtPntOYW1lfSA9PiBzdWIgewoKICAgICAgICBpZiAoICRUZXN0LT57VHlwZX0gJiYgJFRlc3QtPntUeXBlfSBlcSAnRW1haWxDdXN0b21lclVzZXInICkgewogICAgICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBsb2NhbCBvYmplY3QKICAgICAgICBteSAkTG9jYWxPYmplY3QgPSAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OlRpY2tldDo6JFRlc3QtPntPcGVyYXRpb259Ii0+bmV3KAogICAgICAgICAgICBEZWJ1Z2dlck9iamVjdCA9PiAkRGVidWdnZXJPYmplY3QsCiAgICAgICAgICAgIFdlYnNlcnZpY2VJRCAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgKTsKICAgICAgICBpc2Ffb2soCiAgICAgICAgICAgICRMb2NhbE9iamVjdCwKICAgICAgICAgICAgWyJLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjokVGVzdC0+e09wZXJhdGlvbn0iXSwKICAgICAgICAgICAgIkNyZWF0ZSBsb2NhbCBvYmplY3QiCiAgICAgICAgKTsKCiAgICAgICAgbXkgJUF1dGggPSAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkLAogICAgICAgICk7CiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFRlc3QtPntBdXRofSApICkgewogICAgICAgICAgICAlQXV0aCA9ICRUZXN0LT57QXV0aH0tPiUqOwogICAgICAgIH0KCiAgICAgICAgIyBzdGFydCByZXF1ZXN0ZXIgd2l0aCBvdXIgd2ViIHNlcnZpY2UKICAgICAgICBteSAkTG9jYWxSZXN1bHQgPSAkTG9jYWxPYmplY3QtPlJ1bigKICAgICAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgICAgIEludm9rZXIgICAgICA9PiAkVGVzdC0+e09wZXJhdGlvbn0sCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlQXV0aCwKICAgICAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT4lKiwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHJlc3VsdAogICAgICAgIHJlZl9vaygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LAogICAgICAgICAgICAnSEFTSCcsCiAgICAgICAgICAgICJMb2NhbCByZXN1bHQgc3RydWN0dXJlIGlzIHZhbGlkIgogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKICAgICAgICBteSAkUmVxdWVzdGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKICAgICAgICBpc2Ffb2soCiAgICAgICAgICAgICRSZXF1ZXN0ZXJPYmplY3QsCiAgICAgICAgICAgIFsnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInXSwKICAgICAgICAgICAgIkNyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0IgogICAgICAgICk7CgogICAgICAgICMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYi1zZXJ2aWNlCiAgICAgICAgbXkgJFJlcXVlc3RlclJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgICAgIEludm9rZXIgICAgICA9PiAkVGVzdC0+e09wZXJhdGlvbn0sCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlQXV0aCwKICAgICAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT4lKiwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIFRPRE8gcHJldmVudCBmYWlsaW5nIHRlc3QgaWYgZW52aXJvbWVudCBvbiBTYWFTIHVuaXQgdGVzdCBzeXN0ZW0gZG9lc24ndCB3b3JrLgogICAgICAgIGlmICgKICAgICAgICAgICAgJFRlc3QtPntTdWNjZXNzQ3JlYXRlfQogICAgICAgICAgICAmJgogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RXJyb3JNZXNzYWdlfQogICAgICAgICAgICAmJgogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RXJyb3JNZXNzYWdlfSBlcSAnZmF1bHRjb2RlOiBTZXJ2ZXIsIGZhdWx0c3RyaW5nOiBBdHRhY2htZW50IGNvdWxkIG5vdCBiZSBjcmVhdGVkLCBwbGVhc2UgY29udGFjdCB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3InCiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICBteSBAVGlja2V0SURzID0gKCAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfSwgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9ICk7CiAgICAgICAgICAgIFRlc3RUaWNrZXREZWxldGUoIFRpY2tldElEcyA9PiBcQFRpY2tldElEcyApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayByZXN1bHQKICAgICAgICByZWZfb2soCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQsCiAgICAgICAgICAgICdIQVNIJywKICAgICAgICAgICAgIlJlcXVlc3RlciByZXN1bHQgc3RydWN0dXJlIGlzIHZhbGlkIgogICAgICAgICk7CgogICAgICAgIGlzKAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57U3VjY2Vzc30sCiAgICAgICAgICAgICRUZXN0LT57U3VjY2Vzc1JlcXVlc3R9LAogICAgICAgICAgICAiUmVxdWVzdGVyIHN1Y2Nlc3NmdWwgcmVzdWx0IgogICAgICAgICk7CgogICAgICAgICMgdGVzdHMgc3VwcG9zZWQgdG8gc3VjY2VlZAogICAgICAgIGlmICggJFRlc3QtPntTdWNjZXNzQ3JlYXRlfSApIHsKCiAgICAgICAgICAgICMgbG9jYWwgcmVzdWx0cwogICAgICAgICAgICBvaygKICAgICAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgIkxvY2FsIHJlc3VsdCBUaWNrZXRJRCB3aXRoIFRydWUuIgogICAgICAgICAgICApOwogICAgICAgICAgICBvaygKICAgICAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgICJMb2NhbCByZXN1bHQgVGlja2V0TnVtYmVyIHdpdGggVHJ1ZS4iCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG9rKAogICAgICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgIkxvY2FsIHJlc3VsdCBBcnRpY2xlSUQgd2l0aCBUcnVlLiIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaXMoCiAgICAgICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfSwKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgIkxvY2FsIHJlc3VsdCBFcnJvciBpcyB1bmRlZmluZWQuIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyByZXF1ZXN0ZXIgcmVzdWx0cwogICAgICAgICAgICBvaygKICAgICAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICJSZXF1ZXN0ZXIgcmVzdWx0IFRpY2tldElEIHdpdGggVHJ1ZS4iCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG9rKAogICAgICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgICJSZXF1ZXN0ZXIgcmVzdWx0IFRpY2tldE51bWJlciB3aXRoIFRydWUuIgogICAgICAgICAgICApOwogICAgICAgICAgICBvaygKICAgICAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAiUmVxdWVzdGVyIHJlc3VsdCBBcnRpY2xlSUQgd2l0aCBUcnVlLiIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaXMoCiAgICAgICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntFcnJvcn0sCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICJSZXF1ZXN0ZXIgcmVzdWx0IEVycm9yIGlzIHVuZGVmaW5lZC4iCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCB0aGUgVGlja2V0IGVudHJ5IChmcm9tIGxvY2FsIHJlc3VsdCkKICAgICAgICAgICAgbXkgJUxvY2FsVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJExvY2FsUmVzdWx0LT57RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBvaygKICAgICAgICAgICAgICAgIHNjYWxhciAlTG9jYWxUaWNrZXREYXRhLAogICAgICAgICAgICAgICAgImNyZWF0ZWQgbG9jYWwgdGlja2V0IHN0cnVjdHVyZSB3aXRoIFRydWUuIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgdGhlIFRpY2tldCBlbnRyeSAoZnJvbSByZXF1ZXN0ZXIgcmVzdWx0KQogICAgICAgICAgICBteSAlUmVxdWVzdGVyVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgb2soCiAgICAgICAgICAgICAgICBzY2FsYXIgJVJlcXVlc3RlclRpY2tldERhdGEsCiAgICAgICAgICAgICAgICAiY3JlYXRlZCByZXF1ZXN0ZXIgdGlja2V0IHN0cnVjdHVyZSB3aXRoIFRydWUuIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayB0aWNrZXQgYXR0cmlidXRlcyBhcyBkZWZpbmVkIGluIHRoZSB0ZXN0CiAgICAgICAgICAgIGlzKAogICAgICAgICAgICAgICAgJExvY2FsVGlja2V0RGF0YXtUaXRsZX0sCiAgICAgICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e1RpY2tldH0tPntUaXRsZX0sCiAgICAgICAgICAgICAgICAibG9jYWwgVGlja2V0LT5UaXRsZSBtYXRjaCB0ZXN0IGRlZmluaXRpb24uIgoKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZXh0ZXJuYWwgY3VzdG9tZXJzIG9ubHkgc2V0IGl0J3MgdmFsdWUgaW4gYXJ0aWNsZSAoaWYgbm8gRnJvbSBpcyBkZWZpbmVkKQogICAgICAgICAgICAjIG9yIEN1c3RvbWVyVXNlciBpcyBzZXQgYXMgdmFsaWQgYWRkcmVzcy4KICAgICAgICAgICAgIyBTZWUgYnVnIzE0Mjg4IGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICBpZiAoICRUZXN0LT57RXh0ZXJuYWxDdXN0b21lcn0gKSB7CiAgICAgICAgICAgICAgICBpcygKICAgICAgICAgICAgICAgICAgICAkTG9jYWxUaWNrZXREYXRhe0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e1RpY2tldH0tPntDdXN0b21lclVzZXJ9LAogICAgICAgICAgICAgICAgICAgICJsb2NhbCBUaWNrZXQtPkN1c3RvbWVyVXNlciBpcyBlbXB0eS4iCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbXkgJEV4cGVjdGVkQ3VzdG9tZXJVc2VySUQgPSAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e1RpY2tldH0tPntDdXN0b21lclVzZXJ9OwoKICAgICAgICAgICAgICAgIGlmICggKCAkVGVzdC0+e1R5cGV9IC8vICcnICkgZXEgJ0VtYWlsQ3VzdG9tZXJVc2VyJyApIHsKICAgICAgICAgICAgICAgICAgICAkRXhwZWN0ZWRDdXN0b21lclVzZXJJRCA9ICRDdXN0b21lclJhbmQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaXMoCiAgICAgICAgICAgICAgICAgICAgJExvY2FsVGlja2V0RGF0YXtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgJEV4cGVjdGVkQ3VzdG9tZXJVc2VySUQsCiAgICAgICAgICAgICAgICAgICAgImxvY2FsIFRpY2tldC0+Q3VzdG9tZXJVc2VyIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoUXVldWUgVHlwZSBTZXJ2aWNlIFNMQSBTdGF0ZSBQcmlvcml0eSBPd25lciBSZXNwb25zaWJsZSkpIHsKICAgICAgICAgICAgICAgIGlmICggJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntUaWNrZXR9LT57ICRBdHRyaWJ1dGUgLiAnSUQnIH0gKSB7CiAgICAgICAgICAgICAgICAgICAgaXMoCiAgICAgICAgICAgICAgICAgICAgICAgICRMb2NhbFRpY2tldERhdGF7ICRBdHRyaWJ1dGUgLiAnSUQnIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57VGlja2V0fS0+eyAkQXR0cmlidXRlIC4gJ0lEJyB9LAogICAgICAgICAgICAgICAgICAgICAgICAibG9jYWwgVGlja2V0LT4kQXR0cmlidXRlIiAuICdJRCcgLiAiIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpcygKICAgICAgICAgICAgICAgICAgICAgICAgJExvY2FsVGlja2V0RGF0YXskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntUaWNrZXR9LT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbCBUaWNrZXQtPiRBdHRyaWJ1dGUgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKCiAgICAgICAgICAgIG15ICRMb2NhbEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IGxvY2FsIGFydGljbGUgaW5mb3JtYXRpb24KICAgICAgICAgICAgbXkgJUxvY2FsQXJ0aWNsZURhdGEgPSAkTG9jYWxBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJExvY2FsUmVzdWx0LT57RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgID0+ICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRSZXF1ZXN0ZXJBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHJlcXVlc3RlciBhcnRpY2xlIGluZm9ybWF0aW9uCiAgICAgICAgICAgIG15ICVSZXF1ZXN0ZXJBcnRpY2xlRGF0YSA9ICRSZXF1ZXN0ZXJBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KFN1YmplY3QgQm9keSBDb250ZW50VHlwZSBNaW1lVHlwZSBDaGFyc2V0IEZyb20pKSB7CiAgICAgICAgICAgICAgICBpZiAoICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXJ0aWNsZX0tPnskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgICAgICAgICBpcygKICAgICAgICAgICAgICAgICAgICAgICAgJExvY2FsQXJ0aWNsZURhdGF7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXJ0aWNsZX0tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsIEFydGljbGUtPiRBdHRyaWJ1dGUgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoU2VuZGVyVHlwZSkpIHsKICAgICAgICAgICAgICAgIGlmICggJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntBcnRpY2xlfS0+eyAkQXR0cmlidXRlIC4gJ0lEJyB9ICkgewogICAgICAgICAgICAgICAgICAgIGlzKAogICAgICAgICAgICAgICAgICAgICAgICAkTG9jYWxBcnRpY2xlRGF0YXsgJEF0dHJpYnV0ZSAuICdJRCcgfSwKICAgICAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntBcnRpY2xlfS0+eyAkQXR0cmlidXRlIC4gJ0lEJyB9LAogICAgICAgICAgICAgICAgICAgICAgICAibG9jYWwgQXJ0aWNsZS0+JEF0dHJpYnV0ZSIgLiAnSUQnIC4gIiBtYXRjaCB0ZXN0IGRlZmluaXRpb24uIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpcygKICAgICAgICAgICAgICAgICAgICAgICAgJExvY2FsQXJ0aWNsZURhdGF7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXJ0aWNsZX0tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsIEFydGljbGUtPiRBdHRyaWJ1dGUgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGR5bmFtaWMgZmllbGRzCiAgICAgICAgICAgIG15IEBPcmlnaW5hbER5bmFtaWNGaWVsZHM7CiAgICAgICAgICAgIGlmICggISRUZXN0LT57UmVxdWVzdERhdGF9LT57RHluYW1pY0ZpZWxkfSApIHsKCiAgICAgICAgICAgICAgICAjIG5vdGhpbmcgdG8gZG8sIGR5bmFtaWMgZmllbGRzIGFyZSBub3QgcmVxdWlyZWQgZm9yIGFsbCB0ZXN0IGNhc2VzCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCByZWYgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntEeW5hbWljRmllbGR9IGVxICdIQVNIJyApIHsKICAgICAgICAgICAgICAgIHB1c2ggQE9yaWdpbmFsRHluYW1pY0ZpZWxkcywgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntEeW5hbWljRmllbGR9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgQE9yaWdpbmFsRHluYW1pY0ZpZWxkcyA9IEB7ICRUZXN0LT57UmVxdWVzdERhdGF9LT57RHluYW1pY0ZpZWxkfSB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkIChAT3JpZ2luYWxEeW5hbWljRmllbGRzKSB7CgogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICggJER5bmFtaWNGaWVsZC0+e0ZpZWxkVHlwZX0gLy8gJycgKSBlcSAnRGF0ZScKICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgICAgICggJER5bmFtaWNGaWVsZC0+e1ZhbHVlfSAvLyAnJyApID1+IG17IFxBIFxkezR9LVxkezJ9LVxkezJ9IFx6IH14bXMKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZC0+e1ZhbHVlfSAuPSAnIDAwOjAwOjAwJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpcygKICAgICAgICAgICAgICAgICAgICAkTG9jYWxUaWNrZXREYXRheyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSAvLyAnJywKICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICJsb2NhbCBUaWNrZXQtPkR5bmFtaWNGaWVsZF8kRHluYW1pY0ZpZWxkLT57TmFtZX0gbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgbG9jYWwgYW5kIHJlcXVlc3RlciBhdHRhY2htZW50cyBhZ2FpbnN0IHRoZSBvcmlnaW5hbGx5IHN1Ym1pdHRlZCBhdHRhY2htZW50cwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBteSBATG9jYWxBdHRhY2htZW50czsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAlQXR0YWNobWVudEluZGV4ID0gJExvY2FsQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50SW5kZXgoCiAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgPT4gJExvY2FsUmVzdWx0LT57RGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlUGxhaW5UZXh0ID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVIVE1MQm9keSAgPT4gMSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRmlsZUlEICggc29ydCBrZXlzICVBdHRhY2htZW50SW5kZXggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCB1bmxlc3MgJEZpbGVJRDsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVBdHRhY2htZW50ID0gJExvY2FsQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVJRCAgICA9PiAkRmlsZUlELAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIHVubGVzcyBJc0hhc2hSZWZXaXRoRGF0YSggXCVBdHRhY2htZW50ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgY29udGVudCB0byBiYXNlNjQKICAgICAgICAgICAgICAgICAgICAgICAgJEF0dGFjaG1lbnR7Q29udGVudH0gPSBlbmNvZGVfYmFzZTY0KCAkQXR0YWNobWVudHtDb250ZW50fSwgJycgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsZXRlIG5vdCBuZWVkZWQgYXR0cmlidXRlcwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgQEF0dGFjaG1lbnR7cXcoQ29udGVudEFsdGVybmF0aXZlIENvbnRlbnRJRCBGaWxlc2l6ZSBGaWxlc2l6ZVJhdyl9OwoKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBATG9jYWxBdHRhY2htZW50cywgXCVBdHRhY2htZW50OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSBAUmVxdWVzdGVyQXR0YWNobWVudHM7CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnRJbmRleCA9ICRSZXF1ZXN0ZXJBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICA9PiAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVQbGFpblRleHQgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgRXhjbHVkZUhUTUxCb2R5ICA9PiAxLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRGaWxlSUQgKCBzb3J0IGtleXMgJUF0dGFjaG1lbnRJbmRleCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIHVubGVzcyAkRmlsZUlEOwoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnQgPSAkUmVxdWVzdGVyQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlSUQgICAgPT4gJEZpbGVJRCwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCB1bmxlc3MgSXNIYXNoUmVmV2l0aERhdGEoIFwlQXR0YWNobWVudCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IGNvbnRlbnQgdG8gYmFzZTY0CiAgICAgICAgICAgICAgICAgICAgICAgICRBdHRhY2htZW50e0NvbnRlbnR9ID0gZW5jb2RlX2Jhc2U2NCggJEF0dGFjaG1lbnR7Q29udGVudH0sICcnICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGRlbGV0ZSBub3QgbmVlZGVkIGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIEBBdHRhY2htZW50e3F3KENvbnRlbnRBbHRlcm5hdGl2ZSBDb250ZW50SUQgRmlsZXNpemUgRmlsZXNpemVSYXcpfTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQFJlcXVlc3RlckF0dGFjaG1lbnRzLCBcJUF0dGFjaG1lbnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15IEBPcmlnaW5hbEF0dGFjaG1lbnRzOwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmICggcmVmICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXR0YWNobWVudH0gZXEgJ0hBU0gnICkgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBPcmlnaW5hbEF0dGFjaG1lbnRzLCAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0F0dGFjaG1lbnR9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAT3JpZ2luYWxBdHRhY2htZW50cywgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntBdHRhY2htZW50fS0+QCo7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgdGhlIGFjdHVhbCBjaGVja3MKICAgICAgICAgICAgICAgIGlzKCBcQExvY2FsQXR0YWNobWVudHMsICAgICBcQE9yaWdpbmFsQXR0YWNobWVudHMsICJsb2NhbCBUaWNrZXQtPkF0dGFjaG1lbnQgbWF0Y2ggdGVzdCBkZWZpbml0aW9uIiApOwogICAgICAgICAgICAgICAgaXMoIFxAUmVxdWVzdGVyQXR0YWNobWVudHMsIFxAT3JpZ2luYWxBdHRhY2htZW50cywgInJlcXVlc3RlciBUaWNrZXQtPkF0dGFjaG1lbnQgbWF0Y2ggdGVzdCBkZWZpbml0aW9uIiApOwogICAgICAgICAgICAgICAgaXMoIFxAUmVxdWVzdGVyQXR0YWNobWVudHMsIFxATG9jYWxBdHRhY2htZW50cywgICAgInJlcXVlc3RlciBhbmQgbG9jYWwgYXR0YWNobWVudHMgbXVzdCBtYXRjaCIgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZW1vdmUgdGlja2V0IGF0dHJpYnV0ZXMgdGhhdCBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSBsb2NhbCBhbmQgcmVxdWVzdGVyIHJlc3BvbnNlcwogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoCiAgICAgICAgICAgICAgICBxdyhUaWNrZXRJRCBUaWNrZXROdW1iZXIgQ3JlYXRlZCBDaGFuZ2VkIEFnZSBVbmxvY2tUaW1lb3V0KQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkZWxldGUgJExvY2FsVGlja2V0RGF0YXskQXR0cmlidXRlfTsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkUmVxdWVzdGVyVGlja2V0RGF0YXskQXR0cmlidXRlfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaXMoCiAgICAgICAgICAgICAgICBcJUxvY2FsVGlja2V0RGF0YSwKICAgICAgICAgICAgICAgIFwlUmVxdWVzdGVyVGlja2V0RGF0YSwKICAgICAgICAgICAgICAgICJMb2NhbCB0aWNrZXQgcmVzdWx0IG1hdGNoZWQgd2l0aCByZW1vdGUgcmVzdWx0LiIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVtb3ZlIGF0dHJpYnV0ZXMgdGhhdCBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSBsb2NhbCBhbmQgcmVxdWVzdGVyIHJlc3BvbnNlcwogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoCiAgICAgICAgICAgICAgICBxdyggQWdlIEFnZVRpbWVVbml4IEFydGljbGVJRCBUaWNrZXRJRCBDcmVhdGVUaW1lIENoYW5nZVRpbWUgSW5jb21pbmdUaW1lIFRpY2tldE51bWJlcgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkZWxldGUgJExvY2FsQXJ0aWNsZURhdGF7JEF0dHJpYnV0ZX07CiAgICAgICAgICAgICAgICBkZWxldGUgJFJlcXVlc3RlckFydGljbGVEYXRheyRBdHRyaWJ1dGV9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpcygKICAgICAgICAgICAgICAgIFwlTG9jYWxBcnRpY2xlRGF0YSwKICAgICAgICAgICAgICAgIFwlUmVxdWVzdGVyQXJ0aWNsZURhdGEsCiAgICAgICAgICAgICAgICAnTG9jYWwgYXJ0aWNsZSByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuJwogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgQFRpY2tldElEcyA9ICggJExvY2FsUmVzdWx0LT57RGF0YX0tPntUaWNrZXRJRH0sICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfSApOwogICAgICAgICAgICBUZXN0VGlja2V0RGVsZXRlKCBUaWNrZXRJRHMgPT4gXEBUaWNrZXRJRHMgKTsKICAgICAgICB9CgogICAgICAgICMgdGVzdHMgc3VwcG9zZWQgdG8gZmFpbAogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRoZXJlIGlzIGFuIGVycm9yLCBidXQgbm8gcGF5bG9hZAogICAgICAgICAgICByZWZfb2soCiAgICAgICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfSwKICAgICAgICAgICAgICAgICdIQVNIJywKICAgICAgICAgICAgICAgICJMb2NhbCByZXN1bHQgc3RydWN0dXJlIGdvdCBEYXRhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZWZfb2soCiAgICAgICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfSwKICAgICAgICAgICAgICAgICdIQVNIJywKICAgICAgICAgICAgICAgICJMb2NhbCByZXN1bHQgc3RydWN0dXJlIGdvdCBEYXRhLT5FcnJvciIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yIG15ICRBdHRyIChxdyhUaWNrZXRJRCBUaWNrZXROdW1iZXIgQXJ0aWNsZUlEKSkgewogICAgICAgICAgICAgICAgb2soCiAgICAgICAgICAgICAgICAgICAgIWV4aXN0cyAkTG9jYWxSZXN1bHQtPntEYXRhfS0+eyRBdHRyfSwKICAgICAgICAgICAgICAgICAgICAiTG9jYWwgcmVzdWx0ICRBdHRyIG5vdCBwcmVzZW50IgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBDaGVjayB0aGUgZXhwZWN0ZWQgZXJyb3IgY29kZQogICAgICAgICAgICBpcygKICAgICAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JDb2RlfSwKICAgICAgICAgICAgICAgICRUZXN0LT57RXhwZWN0ZWREYXRhfS0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JDb2RlfSwKICAgICAgICAgICAgICAgICJMb2NhbCByZXN1bHQgRXJyb3JDb2RlIG1hdGNoZWQgd2l0aCBleHBlY3RlZCBsb2NhbCBjYWxsIHJlc3VsdC4iCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG9rKCAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yTWVzc2FnZX0sICJnb3QgYSBsb2NhbCByZXN1bHQgRXJyb3JNZXNzYWdlIiApOwoKICAgICAgICAgICAgIyBUaGUgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZSBpcyBub3QgYWx3YXlzIGdpdmVuCiAgICAgICAgICAgIGlmICggJFRlc3QtPntFeHBlY3RlZERhdGF9LT57RGF0YX0tPntFcnJvcn0tPntFcnJvck1lc3NhZ2V9ICkgewogICAgICAgICAgICAgICAgaXMoCiAgICAgICAgICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0tPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57RXhwZWN0ZWREYXRhfS0+e0RhdGF9LT57RXJyb3J9LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgICAgICAgICAiTG9jYWwgcmVzdWx0IEVycm9yTWVzc2FnZSBtYXRjaGVkIHdpdGggZXhwZWN0ZWQgbG9jYWwgY2FsbCByZXN1bHQuIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaXMoCiAgICAgICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0tPntFcnJvckNvZGV9CiAgICAgICAgICAgICAgICAgICAgLiAnOiAnCiAgICAgICAgICAgICAgICAgICAgLiAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0Vycm9yfS0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICAgICAiTG9jYWwgcmVzdWx0IEVycm9yTWVzc2FnZSAob3V0c2lkZSBEYXRhIGhhc2gpIG1hdGNoZWQgd2l0aCBjb25jYXRlbmF0aW9uIgogICAgICAgICAgICAgICAgICAgIC4gIiBvZiBFcnJvckNvZGUgYW5kIEVycm9yTWVzc2FnZSB3aXRoaW4gRGF0YSBoYXNoLiIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVtb3ZlIEVycm9yTWVzc2FnZSBwYXJhbWV0ZXIgZnJvbSBkaXJlY3QgY2FsbAogICAgICAgICAgICAjIHJlc3VsdCB0byBiZSBjb25zaXN0ZW50IHdpdGggU09BUCBjYWxsIHJlc3VsdAogICAgICAgICAgICBpZiAoICRMb2NhbFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzYW5pdHkgY2hlY2sKICAgICAgICAgICAgb2soCiAgICAgICAgICAgICAgICAhJExvY2FsUmVzdWx0LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgICAgICJMb2NhbCByZXN1bHQgRXJyb3JNZXNzYWdlIChvdXRzaWRlIERhdGEgaGFzaCkgZ290IHJlbW92ZWQgdG8gY29tcGFyZSIKICAgICAgICAgICAgICAgICAgICAuICIgbG9jYWwgYW5kIHJlbW90ZSB0ZXN0cy4iCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpcygKICAgICAgICAgICAgICAgICRMb2NhbFJlc3VsdCwKICAgICAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQsCiAgICAgICAgICAgICAgICAiTG9jYWwgcmVzdWx0IG1hdGNoZWQgd2l0aCByZW1vdGUgcmVzdWx0LiIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Owp9CgojIGRlbGV0ZSB3ZWIgc2VydmljZQpteSAkV2Vic2VydmljZURlbGV0ZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlRGVsZXRlKAogICAgSUQgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKb2soICRXZWJzZXJ2aWNlRGVsZXRlLCAiRGVsZXRlZCB3ZWIgc2VydmljZSAkV2Vic2VydmljZUlEIiApOwoKIyBnZXQgREIgb2JqZWN0Cm15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwppc2Ffb2soCiAgICAkREJPYmplY3QsCiAgICBbJ0tlcm5lbDo6U3lzdGVtOjpEQiddLAogICAgIkRCT2JqZWN0IGNyZWF0ZWQgY29ycmVjdGx5IiwKKTsKCiMgU29tZSB0aWNrZXQgaGFzIGJlYW4gY3JlYXRlZCBvbiBTYWFTIHN5c3RlbSBidXQgUmVxdWVzdGVyUmVzdWx0IHJldHVybiBlcnJvciB3aXRob3V0IHRpY2tldCBkYXRhLgojIFNvIGdldCBhbGwgY3JlYXRlZCB0aWNrZXRzIGJ5IHRpY2tldCBzZWFyY2ggYnkgUXVldWUuCm15IEBUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBRdWV1ZUlEcyA9PiBcQFF1ZXVlSURzLAogICAgVXNlcklEICAgPT4gMSwKKTsKVGVzdFRpY2tldERlbGV0ZSggVGlja2V0SURzID0+IFxAVGlja2V0SURzICk7CgojIGRlbGV0ZSBxdWV1ZXMKZm9yIG15ICRRdWV1ZURhdGEgKEBRdWV1ZXMpIHsKICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHF1ZXVlIFdIRVJFIGlkID0gJFF1ZXVlRGF0YS0+e1F1ZXVlSUR9IiwKICAgICk7CiAgICBvayggJFN1Y2Nlc3MsICJRdWV1ZSB3aXRoIElEICRRdWV1ZURhdGEtPntRdWV1ZUlEfSBpcyBkZWxldGVkISIgKTsKfQoKIyBkZWxldGUgZ3JvdXAKbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMICA9PiAnREVMRVRFIEZST00gZ3JvdXBzX3RhYmxlIFdIRVJFIGlkID0gPycsCiAgICBCaW5kID0+IFsgXCRHcm91cElEIF0sCik7Cm9rKCAkU3VjY2VzcywgIkdyb3VwIHdpdGggSUQgJEdyb3VwSUQgaXMgZGVsZXRlZCEiICk7CgojIGRlbGV0ZSB0eXBlCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gdGlja2V0X3R5cGUgV0hFUkUgaWQgPSAkVHlwZUlEIiwKKTsKb2soICRTdWNjZXNzLCAiVHlwZSB3aXRoIElEICRUeXBlSUQgaXMgZGVsZXRlZCEiICk7CgojIGRlbGV0ZSBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgYW5kIHNlcnZpY2UKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAopOwpvayggJFN1Y2Nlc3MsICJTZXJ2aWNlIHVzZXIgcmVmZXJlbmNlZCB0byBzZXJ2aWNlIElEICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCEiICk7CgokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2Vfc2xhIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIE9SIHNsYV9pZCA9ICRTTEFJRCIsCik7Cm9rKCAkU3VjY2VzcywgIlNlcnZpY2UgU0xBIHJlZmVyZW5jZWQgdG8gc2VydmljZSBJRCAkU2VydmljZUlEIGlzIGRlbGV0ZWQhIiApOwoKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gJFNlcnZpY2VJRCIsCik7Cm9rKCAkU3VjY2VzcywgIlNlcnZpY2Ugd2l0aCBJRCAkU2VydmljZUlEIGlzIGRlbGV0ZWQhIiApOwoKIyBkZWxldGUgU0xBCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2xhIFdIRVJFIGlkID0gJFNMQUlEIiwKKTsKb2soICRTdWNjZXNzLCAiU0xBIHdpdGggSUQgJFNMQUlEIGlzIGRlbGV0ZWQhIiwgKTsKCiMgZGVsZXRlIHN0YXRlCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gdGlja2V0X3N0YXRlIFdIRVJFIGlkID0gJFN0YXRlSUQiLAopOwpvayggJFN1Y2Nlc3MsICJTdGF0ZSB3aXRoIElEICRTdGF0ZUlEIGlzIGRlbGV0ZWQhIiApOwoKIyBkZWxldGUgcHJpb3JpdHkKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSB0aWNrZXRfcHJpb3JpdHkgV0hFUkUgaWQgPSAkUHJpb3JpdHlJRCIsCik7Cm9rKCAkU3VjY2VzcywgIlByaW9yaXR5IHdpdGggSUQgJFByaW9yaXR5SUQgaXMgZGVsZXRlZCEiICk7CgojIGRlbGV0ZSBkeW5hbWljIGZpZWxkcwpteSAkRGVsZXRlRmllbGRMaXN0ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdCgKICAgIFJlc3VsdFR5cGUgPT4gJ0hBU0gnLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKKTsKCm15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKRFlOQU1JQ0ZJRUxEOgpmb3IgbXkgJER5bmFtaWNGaWVsZElEICggc29ydCBrZXlzICREZWxldGVGaWVsZExpc3QtPiUqICkgewoKICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkSUQ7CiAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJERlbGV0ZUZpZWxkTGlzdC0+eyREeW5hbWljRmllbGRJRH07CgogICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJERlbGV0ZUZpZWxkTGlzdC0+eyREeW5hbWljRmllbGRJRH0gIX4gbXsgXlVuaXR0ZXN0IH14bXM7CgogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBJRCA9PiAkRHluYW1pY0ZpZWxkSUQsCiAgICApOwogICAgbXkgJFZhbHVlc0RlbGV0ZVN1Y2Nlc3MgPSAkQmFja2VuZE9iamVjdC0+QWxsVmFsdWVzRGVsZXRlKAogICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgICAgICBJRCAgICAgPT4gJER5bmFtaWNGaWVsZElELAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICBvayggJFN1Y2Nlc3MsICJEeW5hbWljRmllbGREZWxldGUoKSBmb3IgJERlbGV0ZUZpZWxkTGlzdC0+eyREeW5hbWljRmllbGRJRH0gd2l0aCB0cnVlIiApOwp9CgojIGNsZWFudXAgY2FjaGUKJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/GenericInterface/Operation/Ticket/TicketCreateIncludeTicketData.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L0dlbmVyaWNJbnRlcmZhY2UvT3BlcmF0aW9uL1RpY2tldC9UaWNrZXRDcmVhdGVJbmNsdWRlVGlja2V0RGF0YS50CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpSZWdpc3RlckRyaXZlcjsgICAgIyBTZXQgdXAgJEtlcm5lbDo6T00gYW5kICRtYWluOjpTZWxmCnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyICAgICAgICAgICAgICAgICAgICAgICAgICAoKTsKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldENyZWF0ZSAgICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIG5vIHBlcmxpbXBvcnRzLCBuZXcoKSBmcm9tIHN0cmluZwp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OlNlc3Npb246OlNlc3Npb25DcmVhdGUgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgbm8gcGVybGltcG9ydHMsIG5ldygpIGZyb20gc3RyaW5nCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdyhJc0FycmF5UmVmV2l0aERhdGEgSXNIYXNoUmVmV2l0aERhdGEgSXNTdHJpbmdXaXRoRGF0YSk7CgpvdXIgJFNlbGY7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiMgU2tpcCBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uLgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBTa2lwU1NMVmVyaWZ5ID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCm15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdUaWNrZXQ6OlR5cGUnLAogICAgVmFsdWUgPT4gMSwKKTsKCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkFjY291bnRUaW1lJywKICAgIFZhbHVlID0+IDEsCik7CgokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScsCiAgICBWYWx1ZSA9PiAxLAopOwoKIyBkaXNhYmxlIEROUyBsb29rdXBzCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ0NoZWNrTVhSZWNvcmQnLAogICAgVmFsdWUgPT4gMCwKKTsKCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgVmFsdWUgPT4gMSwKKTsKCiMgZGlzYWJsZSBTZXNzaW9uQ2hlY2tSZW1vdGVJUCBzZXR0aW5nCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBWYWxpZCA9PiAxLAogICAgS2V5ICAgPT4gJ1Nlc3Npb25DaGVja1JlbW90ZUlQJywKICAgIFZhbHVlID0+IDAsCik7CgojIGVuYWJsZSBjdXN0b21lciBncm91cHMgc3VwcG9ydAokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgVmFsaWQgPT4gMSwKICAgIEtleSAgID0+ICdDdXN0b21lckdyb3VwU3VwcG9ydCcsCiAgICBWYWx1ZSA9PiAxLAopOwoKIyBjaGVjayBpZiBTU0wgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGlzIGRpc2FibGVkCiRTZWxmLT5JcygKICAgICRFTlZ7UEVSTF9MV1BfU1NMX1ZFUklGWV9IT1NUTkFNRX0sCiAgICAwLAogICAgJ0Rpc2FibGVkIFNTTCBjZXJ0aWZpY2F0ZXMgdmVyaWZpY2F0aW9uIGluIGVudmlyb25tZW50JwopOwoKbXkgJFRlc3RPd25lckxvZ2luICAgICAgICA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKCk7Cm15ICRUZXN0UmVzcG9uc2libGVMb2dpbiAgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgpOwpteSAkVGVzdEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwpteSAkVGVzdFVzZXJMb2dpbiAgICAgICAgID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnLCBdLAopOwpteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgpteSAkT3duZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgVXNlckxvZ2luID0+ICRUZXN0T3duZXJMb2dpbiwKKTsKbXkgJFJlc3BvbnNpYmxlSUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgIFVzZXJMb2dpbiA9PiAkVGVzdFJlc3BvbnNpYmxlTG9naW4sCik7Cm15ICRVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKKTsKCm15ICRJbnZhbGlkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMb29rdXAoIFZhbGlkID0+ICdpbnZhbGlkJyApOwoKIyBzYW5pdHkgdGVzdAokU2VsZi0+SXNOb3QoCiAgICAkSW52YWxpZElELAogICAgdW5kZWYsCiAgICAiVmFsaWRMb29rdXAoKSBmb3IgJ2ludmFsaWQnIHNob3VsZCBub3QgYmUgdW5kZWYiCik7CgojIGdldCBncm91cCBvYmplY3QKbXkgJEdyb3VwT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CgojIGNyZWF0ZSBhIG5ldyBncm91cApteSAkR3JvdXBJRCA9ICRHcm91cE9iamVjdC0+R3JvdXBBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U3BlY2lhbCcgLiAkUmFuZG9tSUQsCiAgICBDb21tZW50ID0+ICdjb21tZW50IGRlc2NyaWJpbmcgdGhlIGdyb3VwJywgICAgIyBvcHRpb25hbAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKbXkgJUdyb3VwRGF0YSA9ICRHcm91cE9iamVjdC0+R3JvdXBHZXQoIElEID0+ICRHcm91cElEICk7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJUdyb3VwRGF0YSApLAogICAgIkdyb3VwR2V0KCkgLSBmb3IgdGVzdGluZyBncm91cCIsCik7CgojIGNyZWF0ZSBxdWV1ZSBvYmplY3QKbXkgJFF1ZXVlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CgpteSBAUXVldWVzOwoKbXkgQFF1ZXVlUHJvcGVydGllcyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgID0+ICdxdWV1ZTEnIC4gJFJhbmRvbUlELAogICAgICAgIEdyb3VwSUQgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAncXVldWUyJyAuICRSYW5kb21JRCwKICAgICAgICBHcm91cElEID0+ICRHcm91cElELAogICAgfQopOwoKIyBjcmVhdGUgcXVldWVzCmZvciBteSAkUXVldWVQcm9wZXJ0eSAoQFF1ZXVlUHJvcGVydGllcykgewogICAgbXkgJFF1ZXVlSUQgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKAogICAgICAgICV7JFF1ZXVlUHJvcGVydHl9LAogICAgICAgIFZhbGlkSUQgICAgICAgICA9PiAxLAogICAgICAgIFN5c3RlbUFkZHJlc3NJRCA9PiAxLAogICAgICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgICAgIENvbW1lbnQgICAgICAgICA9PiAnU29tZSBjb21tZW50JywKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICk7CgogICAgIyBzYW5pdHkgY2hlY2sKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRRdWV1ZUlELAogICAgICAgICJRdWV1ZUFkZCgpIC0gY3JlYXRlIHRlc3RpbmcgcXVldWUiLAogICAgKTsKICAgIG15ICVRdWV1ZURhdGEgPSAkUXVldWVPYmplY3QtPlF1ZXVlR2V0KCBJRCA9PiAkUXVldWVJRCApOwoKICAgIHB1c2ggQFF1ZXVlcywgXCVRdWV1ZURhdGE7Cn0KCiMgZ2V0IHR5cGUgb2JqZWN0Cm15ICRUeXBlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKCiMgY3JlYXRlIG5ldyB0eXBlCm15ICRUeXBlSUQgPSAkVHlwZU9iamVjdC0+VHlwZUFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RUeXBlJyAuICRSYW5kb21JRCwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFR5cGVJRCwKICAgICJUeXBlQWRkKCkgLSBjcmVhdGUgdGVzdGluZyB0eXBlIiwKKTsKCm15ICVUeXBlRGF0YSA9ICRUeXBlT2JqZWN0LT5UeXBlR2V0KAogICAgSUQgPT4gJFR5cGVJRCwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVHlwZURhdGEgKSwKICAgICJUeXBlR2V0KCkgLSBmb3IgdGVzdGluZyB0eXBlIiwKKTsKCiMgY3JlYXRlIHNlcnZpY2Ugb2JqZWN0Cm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KCiMgZ2V0IHRoZSBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgZnJvbSBnZW5lcmFsIGNhdGFsb2cKbXkgJFNlcnZpY2VUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKKTsKCiMgYnVpbGQgYSBsb29rdXAgaGFzaApteSAlU2VydmljZVR5cGVOYW1lMklEID0gcmV2ZXJzZSAleyRTZXJ2aWNlVHlwZUxpc3R9OwoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2xhIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTTEFUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXskU0xBVHlwZUxpc3R9OwoKIyAtLS0KCiMgY3JlYXRlIG5ldyBzZXJ2aWNlCm15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RTZXJ2aWNlJyAuICRSYW5kb21JRCwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKCiAgICAjIC0tLQogICAgIyBJVFNNQ29yZQogICAgIyAtLS0KICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAjIC0tLQopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUlELAogICAgIlNlcnZpY2VBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIHNlcnZpY2UiLAopOwoKbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVTZXJ2aWNlRGF0YSApLAogICAgIlNlcnZpY2VHZXQoKSAtIGZvciB0ZXN0aW5nIHNlcnZpY2UiLAopOwoKIyBzZXQgc2VydmljZSBmb3IgdGhlIGN1c3RvbWVyCiRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKCiMgY3JlYXRlIFNMQSBvYmplY3QKbXkgJFNMQU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKCiMgY3JlYXRlIG5ldyBTTEEKbXkgJFNMQUlEID0gJFNMQU9iamVjdC0+U0xBQWRkKAogICAgTmFtZSAgICAgICA9PiAnVGVzdFNMQScgLiAkUmFuZG9tSUQsCiAgICBTZXJ2aWNlSURzID0+IFskU2VydmljZUlEXSwKICAgIFZhbGlkSUQgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgPT4gMSwKCiAgICAjIC0tLQogICAgIyBJVFNNQ29yZQogICAgIyAtLS0KICAgIFR5cGVJRCA9PiAkU0xBVHlwZU5hbWUySUR7T3RoZXJ9LAoKICAgICMgLS0tCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTTEFJRCwKICAgICJTTEFBZGQoKSAtIGNyZWF0ZSB0ZXN0aW5nIFNMQSIsCik7CgpteSAlU0xBRGF0YSA9ICRTTEFPYmplY3QtPlNMQUdldCgKICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU0xBRGF0YSApLAogICAgIlNMQUdldCgpIC0gZm9yIHRlc3RpbmcgU0xBIiwKKTsKCiMgY3JlYXRlIHN0YXRlIG9iamVjdApteSAkU3RhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKTsKCiMgY3JlYXRlIG5ldyBzdGF0ZQpteSAkU3RhdGVJRCA9ICRTdGF0ZU9iamVjdC0+U3RhdGVBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0U3RhdGUnIC4gJFJhbmRvbUlELAogICAgVHlwZUlEICA9PiAyLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU3RhdGVJRCwKICAgICJTdGF0ZUFkZCgpIC0gY3JlYXRlIHRlc3Rpbmcgc3RhdGUiLAopOwoKbXkgJVN0YXRlRGF0YSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICBJRCA9PiAkU3RhdGVJRCwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU3RhdGVEYXRhICksCiAgICAiU3RhdGVHZXQoKSAtIGZvciB0ZXN0aW5nIHN0YXRlIiwKKTsKCiMgY3JlYXRlIHByaW9yaXR5IG9iamVjdApteSAkUHJpb3JpdHlPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKTsKCiMgY3JlYXRlIG5ldyBwcmlvcml0eQpteSAkUHJpb3JpdHlJRCA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0UHJpb3JpdHknIC4gJFJhbmRvbUlELAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkUHJpb3JpdHlJRCwKICAgICJQcmlvcml0eUFkZCgpIC0gY3JlYXRlIHRlc3RpbmcgcHJpb3JpdHkiLAopOwoKbXkgJVByaW9yaXR5RGF0YSA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlHZXQoCiAgICBQcmlvcml0eUlEID0+ICRQcmlvcml0eUlELAogICAgVXNlcklEICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVQcmlvcml0eURhdGEgKSwKICAgICJQcmlvcml0eUdldCgpIC0gZm9yIHRlc3RpbmcgcHJpb3JpdHkiLAopOwoKIyBjcmVhdGUgZHluYW1pYyBmaWVsZCBvYmplY3QKbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiMgY3JlYXRlIG5ldyBkeW5hbWljIGZpZWxkCm15ICREeW5hbWljRmllbGRJRCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgIE5hbWUgICAgICAgPT4gJ1Rlc3REeW5hbWljRmllbGRHSScgLiAkSGVscGVyLT5HZXRSYW5kb21OdW1iZXIoKSwKICAgIExhYmVsICAgICAgPT4gJ0dJIFRlc3QgRmllbGQnLAogICAgRmllbGRPcmRlciA9PiA5OTkxLAogICAgRmllbGRUeXBlICA9PiAnRGF0ZVRpbWUnLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIENvbmZpZyAgICAgPT4gewogICAgICAgIERlZmF1bHRWYWx1ZSAgPT4gMCwKICAgICAgICBZZWFyc0luRnV0dXJlID0+IDAsCiAgICAgICAgWWVhcnNJblBhc3QgICA9PiAwLAogICAgICAgIFllYXJzUGVyaW9kICAgPT4gMCwKICAgIH0sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgpteSAkRHluYW1pY0ZpZWxkSUQyID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgTmFtZSAgICAgICA9PiAnVGVzdER5bmFtaWNGaWVsZEdJMicgLiAkSGVscGVyLT5HZXRSYW5kb21OdW1iZXIoKSwKICAgIExhYmVsICAgICAgPT4gJ0dJIFRlc3QgRmllbGQyJywKICAgIEZpZWxkT3JkZXIgPT4gOTk5MiwKICAgIEZpZWxkVHlwZSAgPT4gJ1RleHQnLAogICAgT2JqZWN0VHlwZSA9PiAnQXJ0aWNsZScsCiAgICBDb25maWcgICAgID0+IHsKICAgICAgICBEZWZhdWx0VmFsdWUgPT4gJycsCiAgICB9LAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkRHluYW1pY0ZpZWxkSUQsCiAgICAiRHluYW1pY0ZpZWxkQWRkKCkgLSBjcmVhdGUgdGVzdGluZyBkeW5hbWljIGZpZWxkIiwKKTsKCm15ICREeW5hbWljRmllbGREYXRhID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgSUQgPT4gJER5bmFtaWNGaWVsZElELAopOwoKJFNlbGYtPlRydWUoCiAgICAkRHluYW1pY0ZpZWxkSUQyLAogICAgIkR5bmFtaWNGaWVsZEFkZCgpIC0gY3JlYXRlIHRlc3RpbmcgZHluYW1pYyBmaWVsZCIsCik7CgpteSAkRHluYW1pY0ZpZWxkRGF0YTIgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICBJRCA9PiAkRHluYW1pY0ZpZWxkSUQyLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICBJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkRGF0YSksCiAgICAiRHluYW1pY0ZpZWxkR2V0KCkgLSBmb3IgdGVzdGluZyBkeW5hbWljIGZpZWxkIiwKKTsKCiMgY3JlYXRlIHdlYiBzZXJ2aWNlIG9iamVjdApteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CiRTZWxmLT5JcygKICAgIHJlZiAkV2Vic2VydmljZU9iamVjdCwKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScsCiAgICAiQ3JlYXRlIHdlYiBzZXJ2aWNlIG9iamVjdCIsCik7CgojIHNldCB3ZWIgc2VydmljZSBuYW1lCm15ICRXZWJzZXJ2aWNlTmFtZSA9ICctVGVzdC0nIC4gJFJhbmRvbUlEOwoKbXkgJFdlYnNlcnZpY2VJRCA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlQWRkKAogICAgTmFtZSAgID0+ICRXZWJzZXJ2aWNlTmFtZSwKICAgIENvbmZpZyA9PiB7CiAgICAgICAgRGVidWdnZXIgPT4gewogICAgICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIH0sCiAgICAgICAgUHJvdmlkZXIgPT4gewogICAgICAgICAgICBUcmFuc3BvcnQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZUlELAogICAgIkFkZGVkIHdlYiBzZXJ2aWNlIiwKKTsKCiMgZ2V0IHJlbW90ZSBob3N0IHdpdGggc29tZSBwcmVjYXV0aW9ucyBmb3IgY2VydGFpbiB1bml0IHRlc3Qgc3lzdGVtcwpteSAkSG9zdCA9ICRIZWxwZXItPkdldFRlc3RIVFRQSG9zdG5hbWUoKTsKCiMgcHJlcGFyZSB3ZWIgc2VydmljZSBjb25maWcKbXkgJFJlbW90ZVN5c3RlbSA9CiAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ0h0dHBUeXBlJykKICAgIC4gJzovLycKICAgIC4gJEhvc3QKICAgIC4gJy8nCiAgICAuICRDb25maWdPYmplY3QtPkdldCgnU2NyaXB0QWxpYXMnKQogICAgLiAnbnBoLWdlbmVyaWNpbnRlcmZhY2UucGwvV2Vic2VydmljZUlELycKICAgIC4gJFdlYnNlcnZpY2VJRDsKCm15ICRXZWJzZXJ2aWNlQ29uZmlnID0gewoKICAgICMgICAgTmFtZSA9PiAnJywKICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgJ1Rlc3QgZm9yIFRpY2tldCBDb25uZWN0b3IgdXNpbmcgU09BUCB0cmFuc3BvcnQgYmFja2VuZC4nLAogICAgRGVidWdnZXIgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBQcm92aWRlciA9PiB7CiAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgVHlwZSAgID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAxMDAwMDAwMCwKICAgICAgICAgICAgICAgIE5hbWVTcGFjZSA9PiAnaHR0cDovL290b2JvLm9yZy9Tb2FwVGVzdEludGVyZmFjZS8nLAogICAgICAgICAgICAgICAgRW5kcG9pbnQgID0+ICRSZW1vdGVTeXN0ZW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gewogICAgICAgICAgICBUaWNrZXRDcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgPT4gJ1RpY2tldDo6VGlja2V0Q3JlYXRlJywKICAgICAgICAgICAgICAgIEluY2x1ZGVUaWNrZXREYXRhID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFNlc3Npb25DcmVhdGUgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnU2Vzc2lvbjo6U2Vzc2lvbkNyZWF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICBSZXF1ZXN0ZXIgPT4gewogICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgIFR5cGUgICA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBOYW1lU3BhY2UgPT4gJ2h0dHA6Ly9vdG9iby5vcmcvU29hcFRlc3RJbnRlcmZhY2UvJywKICAgICAgICAgICAgICAgIEVuY29kaW5nICA9PiAnVVRGLTgnLAogICAgICAgICAgICAgICAgRW5kcG9pbnQgID0+ICRSZW1vdGVTeXN0ZW0sCiAgICAgICAgICAgICAgICBUaW1lb3V0ICAgPT4gMTIwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgSW52b2tlciA9PiB7CiAgICAgICAgICAgIFRpY2tldENyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2Vzc2lvbkNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdUZXN0OjpUZXN0U2ltcGxlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKfTsKCiMgdXBkYXRlIHdlYiBzZXJ2aWNlIHdpdGggcmVhbCBjb25maWcKbXkgJFdlYnNlcnZpY2VVcGRhdGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZVVwZGF0ZSgKICAgIElEICAgICAgPT4gJFdlYnNlcnZpY2VJRCwKICAgIE5hbWUgICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnICA9PiAkV2Vic2VydmljZUNvbmZpZywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZVVwZGF0ZSwKICAgICJVcGRhdGVkIHdlYiBzZXJ2aWNlICRXZWJzZXJ2aWNlSUQgLSAkV2Vic2VydmljZU5hbWUiLAopOwoKIyBHZXQgU2Vzc2lvbklECiMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKbXkgJFJlcXVlc3RlclNlc3Npb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwokU2VsZi0+SXMoCiAgICByZWYgJFJlcXVlc3RlclNlc3Npb25PYmplY3QsCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAogICAgIlNlc3Npb25JRCAtIENyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0IiwKKTsKCiMgY3JlYXRlIGEgbmV3IHVzZXIgZm9yIGN1cnJlbnQgdGVzdApteSAkVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnIF0sCik7Cm15ICRQYXNzd29yZCA9ICRVc2VyTG9naW47CgojIGNyZWF0ZSBhIG5ldyB1c2VyIHdpdGhvdXQgcGVybWlzc2lvbnMgZm9yIGN1cnJlbnQgdGVzdApteSAkVXNlckxvZ2luMiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKCk7Cm15ICRQYXNzd29yZDIgID0gJFVzZXJMb2dpbjI7CgojIGNyZWF0ZSBhIGN1c3RvbWVyIHdoZXJlIGEgdGlja2V0IHdpbGwgdXNlIGFuZCB3aWxsIGhhdmUgcGVybWlzc2lvbnMKbXkgJEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwpteSAkQ3VzdG9tZXJQYXNzd29yZCAgPSAkQ3VzdG9tZXJVc2VyTG9naW47CgojIGNyZWF0ZSBhIGN1c3RvbWVyIHRoYXQgd2lsbCBub3QgaGF2ZSBwZXJtaXNzaW9ucwpteSAkQ3VzdG9tZXJVc2VyTG9naW4yID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwpteSAkQ3VzdG9tZXJQYXNzd29yZDIgID0gJEN1c3RvbWVyVXNlckxvZ2luMjsKCiMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYiBzZXJ2aWNlCm15ICRSZXF1ZXN0ZXJTZXNzaW9uUmVzdWx0ID0gJFJlcXVlc3RlclNlc3Npb25PYmplY3QtPlJ1bigKICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgSW52b2tlciAgICAgID0+ICdTZXNzaW9uQ3JlYXRlJywKICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgVXNlckxvZ2luID0+ICRVc2VyTG9naW4sCiAgICAgICAgUGFzc3dvcmQgID0+ICRQYXNzd29yZCwKICAgIH0sCik7CgpteSAkTmV3U2Vzc2lvbklEID0gJFJlcXVlc3RlclNlc3Npb25SZXN1bHQtPntEYXRhfS0+e1Nlc3Npb25JRH07Cm15IEBUZXN0cyAgICAgICAgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldCB3aXRoIElEcycsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBTdWNjZXNzQ3JlYXRlICA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgPT4gJ1RpY2tldCBUaXRsZScsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZXNbMF0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICAgPT4gJFR5cGVJRCwKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRPd25lcklELAogICAgICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVJRCwKICAgICAgICAgICAgICAgIFBlbmRpbmdUaW1lICAgPT4gewogICAgICAgICAgICAgICAgICAgIFllYXIgICA9PiAyMDEyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICA9PiAxMiwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gMTYsCiAgICAgICAgICAgICAgICAgICAgSG91ciAgID0+IDIwLAogICAgICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiA0OCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXJ0aWNsZSBzdWJqZWN0JywKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0FydGljbGUgYm9keScsCiAgICAgICAgICAgICAgICBBdXRvUmVzcG9uc2VUeXBlICAgICAgICAgICAgICAgID0+ICdhdXRvIHJlcGx5JywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGVJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENvbW11bmljYXRpb25DaGFubmVsICAgICAgICAgICAgPT4gJ0VtYWlsJywKICAgICAgICAgICAgICAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ2hlbGxvQG90b2JvLm9yZycsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURjgnLAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAnTmV3VGlja2V0JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJyUgJSAnLAogICAgICAgICAgICAgICAgVGltZVVuaXQgICAgICAgICAgICAgICAgICAgICAgICA9PiAyNSwKICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gWyRVc2VySURdLAogICAgICAgICAgICAgICAgRXhjbHVkZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICA9PiBbJFVzZXJJRF0sCiAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFskVXNlcklEXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkRGF0YS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICcyMDEyLTAxLTE3IDEyOjQwOjAwJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZERhdGEyLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJ0R5bmFtaWNGaWVsZFR5cGVBcnRpY2xlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICdWR2hwY3lCcGN5QmhJSFJsYzNRZ2RHVjRkQzQ9JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEY4JywKICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnVGVzdC50eHQnLAogICAgICAgICAgICAgICAgICAgIERpc3Bvc2l0aW9uID0+ICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldENyZWF0ZScsCiAgICB9LAopOwoKIyBkZWJ1Z2dlciBvYmplY3QKbXkgJERlYnVnZ2VyT2JqZWN0ID0gS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlci0+bmV3KAogICAgRGVidWdnZXJDb25maWcgPT4gewogICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgVGVzdE1vZGUgICAgICAgPT4gMSwKICAgIH0sCiAgICBXZWJzZXJ2aWNlSUQgICAgICA9PiAkV2Vic2VydmljZUlELAogICAgQ29tbXVuaWNhdGlvblR5cGUgPT4gJ1Byb3ZpZGVyJywKKTsKJFNlbGYtPklzKAogICAgcmVmICREZWJ1Z2dlck9iamVjdCwKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyJywKICAgICdEZWJ1Z2dlck9iamVjdCBpbnN0YW50aWF0ZSBjb3JyZWN0bHknLAopOwoKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKCiAgICAjIGNyZWF0ZSBsb2NhbCBvYmplY3QKICAgIG15ICRMb2NhbE9iamVjdCA9ICJLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjokVGVzdC0+e09wZXJhdGlvbn0iLT5uZXcoCiAgICAgICAgRGVidWdnZXJPYmplY3QgPT4gJERlYnVnZ2VyT2JqZWN0LAogICAgICAgIFdlYnNlcnZpY2VJRCAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgT3BlcmF0aW9uICAgICAgPT4gJFRlc3QtPntPcGVyYXRpb259LAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgcmVmICRMb2NhbE9iamVjdCwKICAgICAgICAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OlRpY2tldDo6JFRlc3QtPntPcGVyYXRpb259IiwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENyZWF0ZSBsb2NhbCBvYmplY3QiLAogICAgKTsKCiAgICBteSAlQXV0aCA9ICgKICAgICAgICBVc2VyTG9naW4gPT4gJFVzZXJMb2dpbiwKICAgICAgICBQYXNzd29yZCAgPT4gJFBhc3N3b3JkLAogICAgKTsKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRUZXN0LT57QXV0aH0gKSApIHsKICAgICAgICAlQXV0aCA9ICV7ICRUZXN0LT57QXV0aH0gfTsKICAgIH0KCiAgICAjIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWIgc2VydmljZQogICAgbXkgJExvY2FsUmVzdWx0ID0gJExvY2FsT2JqZWN0LT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICRUZXN0LT57T3BlcmF0aW9ufSwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlQXV0aCwKICAgICAgICAgICAgJXsgJFRlc3QtPntSZXF1ZXN0RGF0YX0gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIHJlc3VsdAogICAgJFNlbGYtPklzKAogICAgICAgIHJlZiAkTG9jYWxSZXN1bHQsCiAgICAgICAgJ0hBU0gnLAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICMgY3JlYXRlIHJlcXVlc3RlciBvYmplY3QKICAgIG15ICRSZXF1ZXN0ZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwogICAgJFNlbGYtPklzKAogICAgICAgIHJlZiAkUmVxdWVzdGVyT2JqZWN0LAogICAgICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCIsCiAgICApOwoKICAgICMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYiBzZXJ2aWNlCiAgICBteSAkUmVxdWVzdGVyUmVzdWx0ID0gJFJlcXVlc3Rlck9iamVjdC0+UnVuKAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgICAgIEludm9rZXIgICAgICA9PiAkVGVzdC0+e09wZXJhdGlvbn0sCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJUF1dGgsCiAgICAgICAgICAgICV7ICRUZXN0LT57UmVxdWVzdERhdGF9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBjaGVjayByZXN1bHQKICAgICRTZWxmLT5JcygKICAgICAgICByZWYgJFJlcXVlc3RlclJlc3VsdCwKICAgICAgICAnSEFTSCcsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IHN0cnVjdHVyZSBpcyB2YWxpZCIsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57U3VjY2Vzc30sCiAgICAgICAgJFRlc3QtPntTdWNjZXNzUmVxdWVzdH0sCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgc3VjY2Vzc2Z1bCByZXN1bHQiLAogICAgKTsKCiAgICAjIHRlc3RzIHN1cHBvc2VkIHRvIHN1Y2NlZWQKICAgIGlmICggJFRlc3QtPntTdWNjZXNzQ3JlYXRlfSApIHsKCiAgICAgICAgIyBsb2NhbCByZXN1bHRzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBUaWNrZXRJRCB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IFRpY2tldE51bWJlciB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gTG9jYWwgcmVzdWx0IEFydGljbGVJRCB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntFcnJvcn0sCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIExvY2FsIHJlc3VsdCBFcnJvciBpcyB1bmRlZmluZWQuIiwKICAgICAgICApOwoKICAgICAgICAjIHJlcXVlc3RlciByZXN1bHRzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IFRpY2tldElEIHdpdGggVHJ1ZS4iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBUaWNrZXROdW1iZXIgd2l0aCBUcnVlLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IEFydGljbGVJRCB3aXRoIFRydWUuIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57RXJyb3J9LAogICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBSZXF1ZXN0ZXIgcmVzdWx0IEVycm9yIGlzIHVuZGVmaW5lZC4iLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRpY2tldCBvYmplY3QKICAgICAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICAgICAjIGNoZWNrIHNldmVyYWwgdGlja2V0IGFuZCBhcnRpY2xlIGRhdGEKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRMb2NhbFJlc3VsdC0+e0RhdGF9LT57VGlja2V0fS0+e1RpdGxlfSwKICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntUaWNrZXR9LT57VGl0bGV9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFRpY2tldCB0aXRsZSBPay4iLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntUaWNrZXR9LT57UXVldWVJRH0sCiAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57VGlja2V0fS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFRpY2tldCBRdWV1ZUlEIE9rLiIsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntBcnRpY2xlfS0+e0JvZHl9LAogICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0FydGljbGV9LT57Qm9keX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gQXJ0aWNsZSBib2R5IE9rLiIsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntBcnRpY2xlfS0+e0Zyb219LAogICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0FydGljbGV9LT57RnJvbX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gQXJ0aWNsZSBmcm9tIE9rLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBkeW5hbWljIGZpZWxkcwogICAgICAgIG15ICVDb21wYXJlRHluYW1pY0ZpZWxkVGVzdDsKICAgICAgICBmb3IgbXkgJEZpZWxkICggQHsgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgICAgIGlmICggJEZpZWxkLT57TmFtZX0gZXEgJER5bmFtaWNGaWVsZERhdGEtPntOYW1lfSApIHsKICAgICAgICAgICAgICAgICRDb21wYXJlRHluYW1pY0ZpZWxkVGVzdHtUaWNrZXR9ID0gJEZpZWxkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEZpZWxkLT57TmFtZX0gZXEgJER5bmFtaWNGaWVsZERhdGEyLT57TmFtZX0gKSB7CiAgICAgICAgICAgICAgICAkQ29tcGFyZUR5bmFtaWNGaWVsZFRlc3R7QXJ0aWNsZX0gPSAkRmllbGQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBteSAlQ29tcGFyZUR5bmFtaWNGaWVsZExvY2FsOwogICAgICAgIExPQ0FMUkVTVUxUVElDS0VUOgogICAgICAgIGZvciBteSAkRmllbGQgKCBAeyAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntEeW5hbWljRmllbGR9IH0gKSB7CiAgICAgICAgICAgIG5leHQgTE9DQUxSRVNVTFRUSUNLRVQgaWYgJEZpZWxkLT57TmFtZX0gbmUgJER5bmFtaWNGaWVsZERhdGEtPntOYW1lfTsKICAgICAgICAgICAgJENvbXBhcmVEeW5hbWljRmllbGRMb2NhbHtUaWNrZXR9ID0gJEZpZWxkOwogICAgICAgIH0KCiAgICAgICAgTE9DQUxSRVNVTFRBUlRJQ0xFOgogICAgICAgIGZvciBteSAkRmllbGQgKCBAeyAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntBcnRpY2xlfS0+e0R5bmFtaWNGaWVsZH0gfSApIHsKICAgICAgICAgICAgbmV4dCBMT0NBTFJFU1VMVEFSVElDTEUgaWYgJEZpZWxkLT57TmFtZX0gbmUgJER5bmFtaWNGaWVsZERhdGEyLT57TmFtZX07CiAgICAgICAgICAgICRDb21wYXJlRHluYW1pY0ZpZWxkTG9jYWx7QXJ0aWNsZX0gPSAkRmllbGQ7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgIFwlQ29tcGFyZUR5bmFtaWNGaWVsZExvY2FsLAogICAgICAgICAgICBcJUNvbXBhcmVEeW5hbWljRmllbGRUZXN0LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIGxvY2FsIFRpY2tldC0+RHluYW1pY0ZpZWxkIG1hdGNoIHRlc3QgZGVmaW5pdGlvbi4iLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJExvY2FsUmVzdWx0LT57RGF0YX0tPntUaWNrZXR9LT57QXJ0aWNsZX0tPntBdHRhY2htZW50fS0+WzBdLT57RmlsZW5hbWV9LAogICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0F0dGFjaG1lbnR9LT5bMF0tPntGaWxlbmFtZX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gQXR0YWNobWVudCBmaWxlbmFtZSBPay4iLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0fS0+e1RpdGxlfSwKICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntUaWNrZXR9LT57VGl0bGV9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFRpY2tldCB0aXRsZSBPay4iLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0fS0+e1F1ZXVlSUR9LAogICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e1RpY2tldH0tPntRdWV1ZUlEfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBUaWNrZXQgUXVldWVJRCBPay4iLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0fS0+e0FydGljbGV9LT57Qm9keX0sCiAgICAgICAgICAgICRUZXN0LT57UmVxdWVzdERhdGF9LT57QXJ0aWNsZX0tPntCb2R5fSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBBcnRpY2xlIGJvZHkgT2suIiwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntBcnRpY2xlfS0+e0Zyb219LAogICAgICAgICAgICAkVGVzdC0+e1JlcXVlc3REYXRhfS0+e0FydGljbGV9LT57RnJvbX0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gQXJ0aWNsZSBmcm9tIE9rLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBkeW5hbWljIGZpZWxkcwogICAgICAgIG15ICVDb21wYXJlRHluYW1pY0ZpZWxkUmVxOwogICAgICAgIExPQ0FMUkVTVUxUVElDS0VUOgogICAgICAgIGZvciBteSAkRmllbGQgKCBAeyAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntUaWNrZXR9LT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgICAgICBuZXh0IExPQ0FMUkVTVUxUVElDS0VUIGlmICRGaWVsZC0+e05hbWV9IG5lICREeW5hbWljRmllbGREYXRhLT57TmFtZX07CiAgICAgICAgICAgICRDb21wYXJlRHluYW1pY0ZpZWxkUmVxe1RpY2tldH0gPSAkRmllbGQ7CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIGZvciB0eXBlIG9mIGtleSBjb250YWluaW5nIGFydGljbGUgZHluYW1pYyBmaWVsZCBkYXRhLCBzaW5jZSBpdCBtaWdodCBiZSBhIGhhc2ggb24gc3lzdGVtcyB3aXRob3V0CiAgICAgICAgIyAgIG11bHRpcGxlIGZpZWxkcyBkZWZpbmVkLiBJbiB0aGlzIGNhc2Ugbm9ybWFsaXplIGl0IHRvIGFuIGFycmF5IG9mIGhhc2hlcyBmb3IgZWFzaWVyIGNvbXBhcmlzb24gbGF0ZXIuCiAgICAgICAgaWYgKCByZWYgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0fS0+e0FydGljbGV9LT57RHluYW1pY0ZpZWxkfSBlcSAnSEFTSCcgKSB7CiAgICAgICAgICAgICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntBcnRpY2xlfS0+e0R5bmFtaWNGaWVsZH0gPSBbICRSZXF1ZXN0ZXJSZXN1bHQtPntEYXRhfS0+e1RpY2tldH0tPntBcnRpY2xlfS0+e0R5bmFtaWNGaWVsZH0gXTsKICAgICAgICB9CgogICAgICAgIExPQ0FMUkVTVUxUQVJUSUNMRToKICAgICAgICBmb3IgbXkgJEZpZWxkICggQHsgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0fS0+e0FydGljbGV9LT57RHluYW1pY0ZpZWxkfSB9ICkgewogICAgICAgICAgICBuZXh0IExPQ0FMUkVTVUxUQVJUSUNMRSBpZiAkRmllbGQtPntOYW1lfSBuZSAkRHluYW1pY0ZpZWxkRGF0YTItPntOYW1lfTsKICAgICAgICAgICAgJENvbXBhcmVEeW5hbWljRmllbGRSZXF7QXJ0aWNsZX0gPSAkRmllbGQ7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgIFwlQ29tcGFyZUR5bmFtaWNGaWVsZFJlcSwKICAgICAgICAgICAgXCVDb21wYXJlRHluYW1pY0ZpZWxkVGVzdCwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSByZXEgVGlja2V0LT5EeW5hbWljRmllbGQgbWF0Y2ggdGVzdCBkZWZpbml0aW9uLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBhdHRhY2htZW50CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LT57RGF0YX0tPntUaWNrZXR9LT57QXJ0aWNsZX0tPntBdHRhY2htZW50fS0+e0ZpbGVuYW1lfSwKICAgICAgICAgICAgJFRlc3QtPntSZXF1ZXN0RGF0YX0tPntBdHRhY2htZW50fS0+WzBdLT57RmlsZW5hbWV9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIEF0dGFjaG1lbnQgZmlsZW5hbWUgT2suIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0aGUgdGlja2V0cwogICAgICAgIGZvciBteSAkVGlja2V0SUQgKAogICAgICAgICAgICAkTG9jYWxSZXN1bHQtPntEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e0RhdGF9LT57VGlja2V0SUR9CiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIEFsbG93IHNvbWUgdGltZSBmb3IgYWxsIGhpc3RvcnkgZW50cmllcyB0byBiZSB3cml0dGVuIHRvIHRoZSB0aWNrZXQgYmVmb3JlIGRlbGV0aW5nIGl0LAogICAgICAgICAgICAjICAgb3RoZXJ3aXNlIFRpY2tldERlbGV0ZSBjb3VsZCBmYWlsLgogICAgICAgICAgICBzbGVlcCAxOwoKICAgICAgICAgICAgbXkgJFRpY2tldERlbGV0ZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNhbml0eSBjaGVjawogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRUaWNrZXREZWxldGUsCiAgICAgICAgICAgICAgICAiVGlja2V0RGVsZXRlKCkgc3VjY2Vzc2Z1bCBmb3IgVGlja2V0IElEICRUaWNrZXRJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQp9CgojIGRlbGV0ZSB3ZWIgc2VydmljZQpteSAkV2Vic2VydmljZURlbGV0ZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlRGVsZXRlKAogICAgSUQgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBVc2VySUQgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkV2Vic2VydmljZURlbGV0ZSwKICAgICJEZWxldGVkIHdlYiBzZXJ2aWNlICRXZWJzZXJ2aWNlSUQiLAopOwoKIyBnZXQgREIgb2JqZWN0Cm15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKbXkgJFN1Y2Nlc3M7CgojIGRlbGV0ZSBxdWV1ZXMKZm9yIG15ICRRdWV1ZURhdGEgKEBRdWV1ZXMpIHsKICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHF1ZXVlIFdIRVJFIGlkID0gJFF1ZXVlRGF0YS0+e1F1ZXVlSUR9IiwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiUXVldWUgd2l0aCBJRCAkUXVldWVEYXRhLT57UXVldWVJRH0gaXMgZGVsZXRlZCEiLAogICAgKTsKfQoKIyBkZWxldGUgZ3JvdXAKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMICA9PiAnREVMRVRFIEZST00gZ3JvdXBzX3RhYmxlIFdIRVJFIGlkID0gPycsCiAgICBCaW5kID0+IFsgXCRHcm91cElEIF0sCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiR3JvdXAgd2l0aCBJRCAkR3JvdXBJRCBpcyBkZWxldGVkISIsCik7CgojIGRlbGV0ZSB0eXBlCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gdGlja2V0X3R5cGUgV0hFUkUgaWQgPSAkVHlwZUlEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJUeXBlIHdpdGggSUQgJFR5cGVJRCBpcyBkZWxldGVkISIsCik7CgojIGRlbGV0ZSBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgYW5kIHNlcnZpY2UKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlNlcnZpY2UgdXNlciByZWZlcmVuY2VkIHRvIHNlcnZpY2UgSUQgJFNlcnZpY2VJRCBpcyBkZWxldGVkISIsCik7CgokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2Vfc2xhIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIE9SIHNsYV9pZCA9ICRTTEFJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiU2VydmljZSBTTEEgcmVmZXJlbmNlZCB0byBzZXJ2aWNlIElEICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCEiLAopOwoKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gJFNlcnZpY2VJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiU2VydmljZSB3aXRoIElEICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCEiLAopOwoKIyBkZWxldGUgU0xBCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2xhIFdIRVJFIGlkID0gJFNMQUlEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJTTEEgd2l0aCBJRCAkU0xBSUQgaXMgZGVsZXRlZCEiLAopOwoKIyBkZWxldGUgc3RhdGUKJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSB0aWNrZXRfc3RhdGUgV0hFUkUgaWQgPSAkU3RhdGVJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiU3RhdGUgd2l0aCBJRCAkU3RhdGVJRCBpcyBkZWxldGVkISIsCik7CgojIGRlbGV0ZSBwcmlvcml0eQokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHRpY2tldF9wcmlvcml0eSBXSEVSRSBpZCA9ICRQcmlvcml0eUlEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJQcmlvcml0eSB3aXRoIElEICRQcmlvcml0eUlEIGlzIGRlbGV0ZWQhIiwKKTsKCiMgRGVsZXRlIHRlc3QgZHluYW1pYyBmaWVsZHMuCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGR5bmFtaWNfZmllbGQgV0hFUkUgaWQgPSA/IE9SIGlkID0gPycsCiAgICBCaW5kID0+IFsgXCREeW5hbWljRmllbGRJRCwgXCREeW5hbWljRmllbGRJRDIgXSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJEeW5hbWljIGZpZWxkcyB3aXRoIElEICREeW5hbWljRmllbGRJRCBhbmQgJER5bmFtaWNGaWVsZElEMiBhcmUgZGVsZXRlZCEiLAopOwoKIyBjbGVhbnVwIGNhY2hlCiRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/GenericInterface/Operation/Ticket/TicketSearch.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L0dlbmVyaWNJbnRlcmZhY2UvT3BlcmF0aW9uL1RpY2tldC9UaWNrZXRTZWFyY2gudAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgp1c2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpEZWJ1Z2dlciAgICAgICAgICAgICAgICAgICAgICAgICAgKCk7CnVzZSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpUaWNrZXRTZWFyY2ggICAoKTsgICAgICAgICAjIyBubyBwZXJsaW1wb3J0cywgbmV3KCkgZnJvbSBzdHJpbmcKdXNlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpTZXNzaW9uOjpTZXNzaW9uQ3JlYXRlICgpOyAgICAgICAgICMjIG5vIHBlcmxpbXBvcnRzLCBuZXcoKSBmcm9tIHN0cmluZwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXcoOmFsbCk7CgpvdXIgJFNlbGY7CgpteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiMgU2tpcCBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uLgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBTa2lwU1NMVmVyaWZ5ID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgc2VhcmNoIG9sZCB0ZXN0IHRpY2tldHMKbXkgQE9sZFRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICcqQGV4YW1wbGUuY29tJywKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdBUlJBWScsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKIyBkZWxldGUgb2xkIHRlc3QgdGlja2V0IHRvIGhhdmUgYSBjbGVhbiBlbnZpcm9ubWVudApmb3IgbXkgJFRpY2tldElEIChAT2xkVGlja2V0SURzKSB7CiAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwp9CgojIGdldCBhIHJhbmRvbSBudW1iZXIKbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tTnVtYmVyKCk7CgokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICBWYWx1ZSA9PiAwLAopOwoKIyBnZXQgdGhlIHN0YXJ0IHRpbWUgZm9yIHRoZSB0ZXN0Cm15ICRTdGFydFRpbWUgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKCiMgZ2V0IHVzZXIgb2JqZWN0Cm15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiMgY3JlYXRlIGEgbmV3IHVzZXIgZm9yIGN1cnJlbnQgdGVzdApteSAkVXNlcklEID0gJFVzZXJPYmplY3QtPlVzZXJBZGQoCiAgICBVc2VyRmlyc3RuYW1lID0+ICdUZXN0JywKICAgIFVzZXJMYXN0bmFtZSAgPT4gJ1VzZXInLAogICAgVXNlckxvZ2luICAgICA9PiAnVGVzdFVzZXInIC4gJFJhbmRvbUlELAogICAgVXNlclB3ICAgICAgICA9PiAnc29tZS1wYXNzJywKICAgIFVzZXJFbWFpbCAgICAgPT4gJ3Rlc3QnIC4gJFJhbmRvbUlEIC4gJ2VtYWlsQGV4YW1wbGUuY29tJywKICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgIENoYW5nZVVzZXJJRCAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFVzZXJJRCwKICAgICdVc2VyIEFkZCAoKScsCik7CgojIGNyZWF0ZSB0eXBlIG9iamVjdApteSAkVHlwZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyk7CgojIGNyZWF0ZSBuZXcgdHlwZQpteSAkVHlwZUlEID0gJFR5cGVPYmplY3QtPlR5cGVBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0VHlwZScgLiAkUmFuZG9tSUQsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRUeXBlSUQsCiAgICAiVHlwZUFkZCgpIC0gY3JlYXRlIHRlc3RpbmcgdHlwZSIsCik7CgpteSAlVHlwZURhdGEgPSAkVHlwZU9iamVjdC0+VHlwZUdldCgKICAgIElEID0+ICRUeXBlSUQsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVR5cGVEYXRhICksCiAgICAiUXVldWVHZXQoKSAtIGZvciB0ZXN0aW5nIHR5cGUiLAopOwoKIyBnZXQgc2VydmljZSBvYmplY3QKbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKIyBjcmVhdGUgbmV3IHNlcnZpY2UKbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICA9PiAnVGVzdFNlcnZpY2UnIC4gJFJhbmRvbUlELAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAoKICAgICMgLS0tCiAgICAjIElUU01Db3JlCiAgICAjIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgIyAtLS0KKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VJRCwKICAgICJTZXJ2aWNlQWRkKCkgLSBjcmVhdGUgdGVzdGluZyBzZXJ2aWNlIiwKKTsKCm15ICVTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlU2VydmljZURhdGEgKSwKICAgICJTZXJ2aWNlR2V0KCkgLSBmb3IgdGVzdGluZyBzZXJ2aWNlIiwKKTsKCiMgY3JlYXRlIGR5bmFtaWMgZmllbGQgcHJvcGVydGllcwpteSBARHluYW1pY0ZpZWxkUHJvcGVydGllcyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgID0+ICJERlQxJFJhbmRvbUlEIiwKICAgICAgICBGaWVsZE9yZGVyID0+IDk5OTEsCiAgICAgICAgRmllbGRUeXBlICA9PiAnVGV4dCcsCiAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnRGVmYXVsdCcsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICA9PiAiREZUMiRSYW5kb21JRCIsCiAgICAgICAgRmllbGRPcmRlciA9PiA5OTkyLAogICAgICAgIEZpZWxkVHlwZSAgPT4gJ0Ryb3Bkb3duJywKICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgRGVmYXVsdFZhbHVlICAgPT4gJ0RlZmF1bHQnLAogICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiB7CiAgICAgICAgICAgICAgICB0aWNrZXQxX2ZpZWxkMiA9PiAndGlja2V0MV9maWVsZDInLAogICAgICAgICAgICAgICAgdGlja2V0Ml9maWVsZDIgPT4gJ3RpY2tldDJfZmllbGQyJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgID0+ICJERlQzJFJhbmRvbUlEIiwKICAgICAgICBGaWVsZE9yZGVyID0+IDk5OTMsCiAgICAgICAgRmllbGRUeXBlICA9PiAnRGF0ZVRpbWUnLCAgICAgICAgIyBtYW5kYXRvcnksIHNlbGVjdHMgdGhlIERGIGJhY2tlbmQgdG8gdXNlIGZvciB0aGlzIGZpZWxkCiAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnRGVmYXVsdCcsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICA9PiAiREZUNCRSYW5kb21JRCIsCiAgICAgICAgRmllbGRPcmRlciA9PiA5OTk0LAogICAgICAgIEZpZWxkVHlwZSAgPT4gJ0RhdGUnLCAgICAgICAgICAgICMgbWFuZGF0b3J5LCBzZWxlY3RzIHRoZSBERiBiYWNrZW5kIHRvIHVzZSBmb3IgdGhpcyBmaWVsZAogICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICBEZWZhdWx0VmFsdWUgPT4gJ0RlZmF1bHQnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gIkRGVDUkUmFuZG9tSUQiLAogICAgICAgIEZpZWxkT3JkZXIgPT4gOTk5NSwKICAgICAgICBGaWVsZFR5cGUgID0+ICdDaGVja2JveCcsICAgICAgICAjIG1hbmRhdG9yeSwgc2VsZWN0cyB0aGUgREYgYmFja2VuZCB0byB1c2UgZm9yIHRoaXMgZmllbGQKICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgRGVmYXVsdFZhbHVlID0+ICdEZWZhdWx0JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgID0+ICJERlQ2JFJhbmRvbUlEIiwKICAgICAgICBGaWVsZE9yZGVyID0+IDk5OTYsCiAgICAgICAgRmllbGRUeXBlICA9PiAnTXVsdGlzZWxlY3QnLCAgICAgIyBtYW5kYXRvcnksIHNlbGVjdHMgdGhlIERGIGJhY2tlbmQgdG8gdXNlIGZvciB0aGlzIGZpZWxkCiAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgIERlZmF1bHRWYWx1ZSAgID0+IFsgJ3RpY2tldDJfZmllbGQ1JywgJ3RpY2tldDRfZmllbGQ1JyBdLAogICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiB7CiAgICAgICAgICAgICAgICB0aWNrZXQxX2ZpZWxkNSA9PiAndGlja2V0MV9maWVsZDUxJywKICAgICAgICAgICAgICAgIHRpY2tldDJfZmllbGQ1ID0+ICd0aWNrZXQyX2ZpZWxkNTInLAogICAgICAgICAgICAgICAgdGlja2V0M19maWVsZDUgPT4gJ3RpY2tldDJfZmllbGQ1MycsCiAgICAgICAgICAgICAgICB0aWNrZXQ0X2ZpZWxkNSA9PiAndGlja2V0Ml9maWVsZDU0JywKICAgICAgICAgICAgICAgIHRpY2tldDVfZmllbGQ1ID0+ICd0aWNrZXQyX2ZpZWxkNTUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9Cik7CgojIGNyZWF0ZSBkeW5hbWljIGZpZWxkcwpteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwpteSBAVGVzdEZpZWxkQ29uZmlnOwoKZm9yIG15ICREeW5hbWljRmllbGRQcm9wZXJ0eSAoQER5bmFtaWNGaWVsZFByb3BlcnRpZXMpIHsKICAgIG15ICRGaWVsZElEID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgICAgICV7JER5bmFtaWNGaWVsZFByb3BlcnR5fSwKICAgICAgICBMYWJlbCAgICAgID0+ICdEZXNjcmlwdGlvbicsCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgIFJlb3JkZXIgICAgPT4gMCwKICAgICk7CgogICAgcHVzaCBAVGVzdEZpZWxkQ29uZmlnLCAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgSUQgPT4gJEZpZWxkSUQsCiAgICApOwp9CgojIGNyZWF0ZSAzIHRpY2tldHMKCiMgdGlja2V0IGlkIGNvbnRhaW5lcgpteSBAVGlja2V0SURzOwoKIyBjcmVhdGUgdGlja2V0IDEKbXkgJFRpY2tldElEMSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IE9uZSBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lcklEICAgPT4gJzEyMzQ2NScgLiAkUmFuZG9tSUQsCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyT25lQGV4YW1wbGUuY29tJywKICAgIFNlcnZpY2UgICAgICA9PiAnVGVzdFNlcnZpY2UnIC4gJFJhbmRvbUlELAogICAgT3duZXJJRCAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEMSwKICAgICJUaWNrZXRDcmVhdGUoKSBzdWNjZXNzZnVsIGZvciBUaWNrZXQgT25lIElEICRUaWNrZXRJRDEiLAopOwoKbXkgJFRpY2tldE51bWJlcjEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXROdW1iZXJMb29rdXAoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0TnVtYmVyMSwKICAgICJUaWNrZXROdW1iZXJMb29rdXAoKSBzdWNjZXNzZnVsIGZvciBUaWNrZXQgT25lIElEICRUaWNrZXRJRDEiLAopOwoKIyB1cGRhdGUgZXNjYWxhdGlvbiB0aW1lcyBkaXJlY3RseSBpbiB0aGUgREIKbXkgJEVzY2FsYXRpb25UaW1lID0gJFN0YXJ0VGltZS0+VG9FcG9jaCgpICsgMTIwOwpteSAkRG9TdWNjZXNzICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICBTUUwgPT4gJwogICAgICAgIFVQREFURSB0aWNrZXQKICAgICAgICBTRVQgZXNjYWxhdGlvbl90aW1lID0gPywgZXNjYWxhdGlvbl9yZXNwb25zZV90aW1lID0gPywgZXNjYWxhdGlvbl91cGRhdGVfdGltZSA9ID8sCiAgICAgICAgICAgIGVzY2FsYXRpb25fc29sdXRpb25fdGltZSA9ID8sIGNoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8KICAgICAgICBXSEVSRSBpZCA9ID8nLAogICAgQmluZCA9PiBbCiAgICAgICAgXCRFc2NhbGF0aW9uVGltZSwKICAgICAgICBcJEVzY2FsYXRpb25UaW1lLAogICAgICAgIFwkRXNjYWxhdGlvblRpbWUsCiAgICAgICAgXCRFc2NhbGF0aW9uVGltZSwKICAgICAgICBcJzEnLAogICAgICAgIFwkVGlja2V0SUQxLAogICAgXSwKKTsKYmFpbF9vdXQoJ2JhaWxpbmcgb3V0IGFzIFVQREFURSB0aWNrZXQgZmFpbGVkJykgdW5sZXNzICREb1N1Y2Nlc3M7CgojIGNyZWF0ZSBiYWNrZW5kIG9iamVjdCBhbmQgZGVsZWdhdGVzCm15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwokU2VsZi0+SXMoCiAgICByZWYgJEJhY2tlbmRPYmplY3QsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcsCiAgICAnQmFja2VuZCBvYmplY3Qgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5JywKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnWzBdLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDEsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ3RpY2tldDFfZmllbGQxJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRUZXN0RmllbGRDb25maWdbMV0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAndGlja2V0MV9maWVsZDInLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFRlc3RGaWVsZENvbmZpZ1syXSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQxLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICcyMDAxLTAxLTAxIDAxOjAxOjAxJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRUZXN0RmllbGRDb25maWdbM10sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnMjAwMS0wMS0wMSAwMDowMDowMCcsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnWzRdLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDEsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJzAnLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFRlc3RGaWVsZENvbmZpZ1s1XSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQxLAogICAgVmFsdWUgICAgICAgICAgICAgID0+IFsgJ3RpY2tldDFfZmllbGQ1MScsICd0aWNrZXQxX2ZpZWxkNTInLCAndGlja2V0MV9maWVsZDUzJyBdLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgojIGdldCB0aGUgVGlja2V0IGVudHJ5CiMgd2l0aG91dCBkeW5hbWljIGZpZWxkcwpteSAlVGlja2V0RW50cnlPbmUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRDEsCiAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldEVudHJ5T25lICksCiAgICAiVGlja2V0R2V0KCkgc3VjY2Vzc2Z1bCBmb3IgTG9jYWwgVGlja2V0R2V0IE9uZSBJRCAkVGlja2V0SUQxIiwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeU9uZSApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeU9uZXskS2V5fSApIHsKICAgICAgICAkVGlja2V0RW50cnlPbmV7JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5T25leyRLZXl9OwogICAgfQp9CgojIGdldCB0aGUgVGlja2V0IGVudHJ5CiMgd2l0aCBkeW5hbWljIGZpZWxkcwpteSAlVGlja2V0RW50cnlPbmVERiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElEMSwKICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0RW50cnlPbmVERiApLAogICAgIlRpY2tldEdldCgpIHN1Y2Nlc3NmdWwgd2l0aCBERiBmb3IgTG9jYWwgVGlja2V0R2V0IE9uZSBJRCAkVGlja2V0SUQxIiwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeU9uZURGICkgewogICAgaWYgKCAhJFRpY2tldEVudHJ5T25lREZ7JEtleX0gKSB7CiAgICAgICAgJFRpY2tldEVudHJ5T25lREZ7JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5T25lREZ7JEtleX07CiAgICB9Cn0KCiMgYWRkIHRpY2tldCBpZApwdXNoIEBUaWNrZXRJRHMsICRUaWNrZXRJRDE7CgojIGNyZWF0ZSB0aWNrZXQgMgpteSAkVGlja2V0SUQyID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgVHdvIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVySUQgICA9PiAnMTIzNDY1JyAuICRSYW5kb21JRCwKICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJUd28nIC4gJFJhbmRvbUlEIC4gJ0BleGFtcGxlLmNvbScsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQyLAogICAgIlRpY2tldENyZWF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBUd28gSUQgJFRpY2tldElEMiIsCik7CgpteSAkVGlja2V0TnVtYmVyMiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldE51bWJlckxvb2t1cCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXROdW1iZXIyLAogICAgIlRpY2tldE51bWJlckxvb2t1cCgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBPbmUgSUQgJFRpY2tldElEMiIsCik7CgojIHNldCBkeW5hbWljIGZpZWxkIHZhbHVlcwokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFRlc3RGaWVsZENvbmZpZ1swXSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQyLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICd0aWNrZXQyX2ZpZWxkMScsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnWzFdLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDIsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ3RpY2tldDJfZmllbGQyJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRUZXN0RmllbGRDb25maWdbMl0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMiwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnMjAxMS0xMS0xMSAxMToxMToxMScsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkVGVzdEZpZWxkQ29uZmlnWzNdLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRDIsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJzIwMTEtMTEtMTEgMDA6MDA6MDAnLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFRlc3RGaWVsZENvbmZpZ1s0XSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQyLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICcxJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRUZXN0RmllbGRDb25maWdbNV0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEMiwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiBbCiAgICAgICAgJ3RpY2tldDFfZmllbGQ1JywKICAgICAgICAndGlja2V0Ml9maWVsZDUnLAogICAgICAgICd0aWNrZXQ0X2ZpZWxkNScsCiAgICBdLAogICAgVXNlcklEID0+IDEsCik7CgojIGdldCB0aGUgVGlja2V0IGVudHJ5CiMgd2l0aG91dCBERgpteSAlVGlja2V0RW50cnlUd28gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRDIsCiAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldEVudHJ5VHdvICksCiAgICAiVGlja2V0R2V0KCkgc3VjY2Vzc2Z1bCBmb3IgTG9jYWwgVGlja2V0R2V0IFR3byBJRCAkVGlja2V0SUQyIiwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeVR3byApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeVR3b3skS2V5fSApIHsKICAgICAgICAkVGlja2V0RW50cnlUd297JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5VHdveyRLZXl9OwogICAgfQp9CgojIGdldCB0aGUgVGlja2V0IGVudHJ5CiMgd2l0aCBERgpteSAlVGlja2V0RW50cnlUd29ERiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElEMiwKICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0RW50cnlUd29ERiApLAogICAgIlRpY2tldEdldCgpIHN1Y2Nlc3NmdWwgZm9yIExvY2FsIFRpY2tldEdldCBUd28gSUQgJFRpY2tldElEMiIsCik7Cgpmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlVGlja2V0RW50cnlUd29ERiApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeVR3b0RGeyRLZXl9ICkgewogICAgICAgICRUaWNrZXRFbnRyeVR3b0RGeyRLZXl9ID0gJyc7CiAgICB9CiAgICBpZiAoICRLZXkgZXEgJ0FnZScgKSB7CiAgICAgICAgZGVsZXRlICRUaWNrZXRFbnRyeVR3b0RGeyRLZXl9OwogICAgfQp9CgojIGFkZCB0aWNrZXQgaWQKcHVzaCBAVGlja2V0SURzLCAkVGlja2V0SUQyOwoKIyBjcmVhdGUgdGlja2V0IDMKbXkgJFRpY2tldElEMyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IFRocmVlIFRpdGxlJywKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMSB2ZXJ5IGxvdycsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lcklEICAgPT4gJzEyMzQ2NScgLiAkUmFuZG9tSUQsCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyVGhyZWVAZXhhbXBsZS5jb20nLAogICAgVHlwZSAgICAgICAgID0+ICdUZXN0VHlwZScgLiAkUmFuZG9tSUQsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQzLAogICAgIlRpY2tldENyZWF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBUaHJlZSBJRCAkVGlja2V0SUQzIiwKKTsKCiMgZ2V0IHRoZSBUaWNrZXQgZW50cnkKbXkgJVRpY2tldEVudHJ5VGhyZWUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRDMsCiAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldEVudHJ5VGhyZWUgKSwKICAgICJUaWNrZXRHZXQoKSBzdWNjZXNzZnVsIGZvciBMb2NhbCBUaWNrZXRHZXQgVGhyZWUgSUQgJFRpY2tldElEMyIsCik7Cgpmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlVGlja2V0RW50cnlUaHJlZSApIHsKICAgIGlmICggISRUaWNrZXRFbnRyeVRocmVleyRLZXl9ICkgewogICAgICAgICRUaWNrZXRFbnRyeVRocmVleyRLZXl9ID0gJyc7CiAgICB9CiAgICBpZiAoICRLZXkgZXEgJ0FnZScgKSB7CiAgICAgICAgZGVsZXRlICRUaWNrZXRFbnRyeVRocmVleyRLZXl9OwogICAgfQp9CgojIGFkZCB0aWNrZXQgaWQKcHVzaCBAVGlja2V0SURzLCAkVGlja2V0SUQzOwoKIyBjcmVhdGUgdGlja2V0IDQKbXkgJFRpY2tldElENCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnVGlja2V0IEZvdXIgVGl0bGUgw6TDtsO8w5/DhMOWw5zigqzQuNGBJywKICAgIFF1ZXVlICAgICAgICA9PiAnSnVuaycsCiAgICBMb2NrICAgICAgICAgPT4gJ2xvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lcklEICAgPT4gJzY1NDMyMScgLiAkUmFuZG9tSUQsCiAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyRm91ckBleGFtcGxlLmNvbScsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQ0LAogICAgIlRpY2tldENyZWF0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBGb3VyIElEICRUaWNrZXRJRDQiLAopOwoKbXkgJEFydGljbGVPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwpteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckNoYW5uZWwoIENoYW5uZWxOYW1lID0+ICdJbnRlcm5hbCcgKTsKCiMgZmlyc3QgYXJ0aWNsZQpteSAkQXJ0aWNsZUlENDEgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQ0LAogICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICBGcm9tICAgICAgICAgICAgICAgICA9PiAnQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgVG8gICAgICAgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyIEEgPGN1c3RvbWVyLWFAZXhhbXBsZS5jb20+JywKICAgIENjICAgICAgICAgICAgICAgICAgID0+ICdDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICBSZXBseVRvICAgICAgICAgICAgICA9PiAnQ3VzdG9tZXIgQiA8Y3VzdG9tZXItYkBleGFtcGxlLmNvbT4nLAogICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ2ZpcnN0IGFydGljbGUnLAogICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ0EgdGV4dCBmb3IgdGhlIGJvZHksIFRpdGxlIMOkw7bDvMOfw4TDlsOc4oKs0LjRgScsCiAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xNScsCiAgICBIaXN0b3J5VHlwZSAgICAgICAgICA9PiAnT3duZXJVcGRhdGUnLAogICAgSGlzdG9yeUNvbW1lbnQgICAgICAgPT4gJ2ZpcnN0IGFydGljbGUnLAogICAgVXNlcklEICAgICAgICAgICAgICAgPT4gMSwKICAgIE5vQWdlbnROb3RpZnkgICAgICAgID0+IDEsCik7CgokQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZVNlYXJjaEluZGV4QnVpbGQoCiAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElENCwKICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlENDEsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiMgc2Vjb25kIGFydGljbGUKbXkgJEFydGljbGVJRDQyID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQ3JlYXRlKAogICAgVGlja2V0SUQgICAgICAgICAgICAgPT4gJFRpY2tldElENCwKICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICdhZ2VudCcsCiAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ0Fub3QgUmVhbCBBZ2VudCA8ZW1haWxAZXhhbXBsZS5jb20+JywKICAgIFRvICAgICAgICAgICAgICAgICAgID0+ICdDdXN0b21lciBBIDxjdXN0b21lci1hQGV4YW1wbGUuY29tPicsCiAgICBDYyAgICAgICAgICAgICAgICAgICA9PiAnQ3VzdG9tZXIgQiA8Y3VzdG9tZXItYkBleGFtcGxlLmNvbT4nLAogICAgUmVwbHlUbyAgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyIEIgPGN1c3RvbWVyLWJAZXhhbXBsZS5jb20+JywKICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdzZWNvbmQgYXJ0aWNsZScsCiAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAnQSB0ZXh0IGZvciB0aGUgYm9keSwgbm90IHRvbyBsb25nJywKICAgIENvbnRlbnRUeXBlICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTE1JywKICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdPd25lclVwZGF0ZScsCiAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnc2Vjb25kIGFydGljbGUnLAogICAgVXNlcklEICAgICAgICAgICAgICAgPT4gMSwKICAgIE5vQWdlbnROb3RpZnkgICAgICAgID0+IDEsCik7CgokQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZVNlYXJjaEluZGV4QnVpbGQoCiAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElENCwKICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlENDIsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiMgSGVscGVyIG1ldGhvZCB0byByZXRyaWV2ZSBhcnRpY2xlIGNvbnRlbnQgZm9yIHN1cHBsaWVkIGxpc3Qgb2YgYXJ0aWNsZXMuCiMKIyAgICAkQXJ0aWNsZUNvbnRlbnRHZXQtPigKIyAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgPT4gMTIzLCAgICAgICAgICAgIyAocmVxdWlyZWQpCiMgICAgICAgIEFydGljbGVzICAgICAgICAgICAgID0+IFxAQXJ0aWNsZXMsICAgICMgKHJlcXVpcmVkKQojICAgICAgICBEeW5hbWljRmllbGRzICAgICAgICA9PiAxLCAgICAgICAgICAgICAjIChvcHRpb25hbCkgSW5jbHVkZSBkeW5hbWljIGZpZWxkIHZhbHVlcwojICAgICk7CiMKbXkgJEFydGljbGVDb250ZW50R2V0ID0gc3ViIHsKICAgIG15ICglUGFyYW0pID0gQF87CgogICAgaWYgKAogICAgICAgICEkUGFyYW17VGlja2V0SUR9CiAgICAgICAgJiYgIUlzQXJyYXlSZWZXaXRoRGF0YSggJFBhcmFte0FydGljbGVzfSApCiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSBAQXJ0aWNsZUNvbnRlbnRzOwogICAgZm9yIG15ICRBcnRpY2xlICggQHsgJFBhcmFte0FydGljbGVzfSB9ICkgewogICAgICAgIG15ICVBcnRpY2xlQ29udGVudCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGUtPntBcnRpY2xlSUR9LAogICAgICAgICk7CgogICAgICAgIHB1c2ggQEFydGljbGVDb250ZW50cywgXCVBcnRpY2xlQ29udGVudDsKICAgIH0KCiAgICByZXR1cm4gQEFydGljbGVDb250ZW50czsKfTsKCiMgR2V0IGFydGljbGUgY29udGVudHMgKG5vIGF0dGFjaG1lbnRzKS4KbXkgQEFydGljbGVzID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElENCwKKTsKbXkgQEFydGljbGVXaXRob3V0QXR0YWNobWVudHMgPSAkQXJ0aWNsZUNvbnRlbnRHZXQtPigKICAgIEFydGljbGVzID0+IFxAQXJ0aWNsZXMsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQ0LAopOwoKIyBBZGQgYXR0YWNobWVudHMgdG8gYXJ0aWNsZS4KZm9yIG15ICRGaWxlIChxdyh4bHMgdHh0IGRvYyBwbmcgcGRmKSkgewogICAgbXkgJExvY2F0aW9uID0gJENvbmZpZ09iamVjdC0+R2V0KCdIb21lJykKICAgICAgICAuICIvc2NyaXB0cy90ZXN0L3NhbXBsZS9TdGRBdHRhY2htZW50L1N0ZEF0dGFjaG1lbnQtVGVzdDEuJEZpbGUiOwoKICAgIG15ICRDb250ZW50UmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+RmlsZVJlYWQoCiAgICAgICAgTG9jYXRpb24gPT4gJExvY2F0aW9uLAogICAgICAgIE1vZGUgICAgID0+ICdiaW5tb2RlJywKICAgICAgICBUeXBlICAgICA9PiAnTG9jYWwnLAogICAgKTsKCiAgICBteSAkQXJ0aWNsZVdyaXRlQXR0YWNobWVudCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZVdyaXRlQXR0YWNobWVudCgKICAgICAgICBDb250ZW50ICAgICA9PiAkeyRDb250ZW50UmVmfSwKICAgICAgICBGaWxlbmFtZSAgICA9PiAiU3RkQXR0YWNobWVudC1UZXN0MS4kRmlsZSIsCiAgICAgICAgQ29udGVudFR5cGUgPT4gJEZpbGUsCiAgICAgICAgQXJ0aWNsZUlEICAgPT4gJEFydGljbGVJRDQyLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwp9CgojIEdldCBhcnRpY2xlIGNvbnRlbnRzIChhdHRhY2htZW50cykuCm15IEBBcnRpY2xlQm94ID0gJEFydGljbGVDb250ZW50R2V0LT4oCiAgICBBcnRpY2xlcyA9PiBcQEFydGljbGVzLAogICAgVGlja2V0SUQgPT4gJFRpY2tldElENCwKKTsKCiMgSGVscGVyIG1ldGhvZCB0byByZXRyaWV2ZSBhcnRpY2xlIGF0dGFjaG1lbnQgY29udGVudCBmb3Igc3VwcGxpZWQgbGlzdCBvZiBhcnRpY2xlcy4KIwojICAgICRBcnRpY2xlQXR0YWNobWVudENvbnRlbnRHZXQtPigKIyAgICAgICAgQXJ0aWNsZXMgID0+IFxAQXJ0aWNsZXMsICAgICMgKHJlcXVpcmVkKQojICAgICAgICBOb0NvbnRlbnQgPT4gMSwgICAgICAgICAgICAgIyAob3B0aW9uYWwpIE9taXQgYWN0dWFsIGF0dGFjaG1lbnQgY29udGVudCwgcmV0dXJuIG9ubHkgbWV0YSBkYXRhCiMgICAgICAgIEhUTUxCb2R5ICA9PiAxLCAgICAgICAgICAgICAjIChvcHRpb25hbCkgSW5jbHVkZSBIVE1MIGJvZHkgYXR0YWNobWVudCBjb250ZW50CiMgICAgKTsKIwpteSAkQXJ0aWNsZUF0dGFjaG1lbnRDb250ZW50R2V0ID0gc3ViIHsKICAgIG15ICglUGFyYW0pID0gQF87CgogICAgaWYgKCAhSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17QXJ0aWNsZXN9ICkgKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15IEBBcnRpY2xlcyA9IEB7ICRQYXJhbXtBcnRpY2xlc30gfTsKCiAgICBBUlRJQ0xFOgogICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZXMpIHsKCiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXskQXJ0aWNsZX0gKSB7CiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJEFydGljbGUtPnskS2V5fSApIHsKICAgICAgICAgICAgICAgICRBcnRpY2xlLT57JEtleX0gPSAnJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBHZXQgYXR0YWNobWVudCBpbmRleC4KICAgICAgICBteSAlQXRtSW5kZXggPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50SW5kZXgoCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgPT4gJEFydGljbGUtPntBcnRpY2xlSUR9LAogICAgICAgICAgICBFeGNsdWRlUGxhaW5UZXh0ID0+IDEsCiAgICAgICAgICAgIEV4Y2x1ZGVIVE1MQm9keSAgPT4gJFBhcmFte0hUTUxCb2R5fSA/IDAgOiAxLAogICAgICAgICk7CgogICAgICAgIG5leHQgQVJUSUNMRSBpZiAhSXNIYXNoUmVmV2l0aERhdGEoIFwlQXRtSW5kZXggKTsKCiAgICAgICAgbXkgQEF0dGFjaG1lbnRzOwogICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgZm9yIG15ICRGaWxlSUQgKCBzb3J0IGtleXMgJUF0bUluZGV4ICkgewogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRGaWxlSUQ7CiAgICAgICAgICAgIG15ICVBdHRhY2htZW50ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudCgKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBGaWxlSUQgICAgPT4gJEZpbGVJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoIFwlQXR0YWNobWVudCApOwoKICAgICAgICAgICAgJEF0dGFjaG1lbnR7RmlsZUlEfSA9ICRGaWxlSUQ7CgogICAgICAgICAgICAjIGNvbnZlcnQgY29udGVudCB0byBiYXNlNjQKICAgICAgICAgICAgJEF0dGFjaG1lbnR7Q29udGVudH0gICAgICAgICAgICA9ICRQYXJhbXtOb0NvbnRlbnR9ID8gJycgOiBlbmNvZGVfYmFzZTY0KCAkQXR0YWNobWVudHtDb250ZW50fSApOwogICAgICAgICAgICAkQXR0YWNobWVudHtDb250ZW50SUR9ICAgICAgICAgID0gJyc7CiAgICAgICAgICAgICRBdHRhY2htZW50e0NvbnRlbnRBbHRlcm5hdGl2ZX0gPSAnJzsKICAgICAgICAgICAgcHVzaCBAQXR0YWNobWVudHMsIHslQXR0YWNobWVudH07CiAgICAgICAgfQoKICAgICAgICAjIHNldCBBdHRhY2htZW50cyBkYXRhCiAgICAgICAgJEFydGljbGUtPntBdHRhY2htZW50fSA9IFxAQXR0YWNobWVudHM7CiAgICB9Cn07CgojIEluc2VydCBhdHRhY2htZW50IGNvbnRlbnQuCiRBcnRpY2xlQXR0YWNobWVudENvbnRlbnRHZXQtPigKICAgIEFydGljbGVzID0+IFxAQXJ0aWNsZUJveCwKKTsKCiMgZ2V0IHRoZSBUaWNrZXQgZW50cnkKbXkgJVRpY2tldEVudHJ5Rm91ciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElENCwKICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKKTsKCiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0RW50cnlGb3VyICksCiAgICAiVGlja2V0R2V0KCkgc3VjY2Vzc2Z1bCBmb3IgTG9jYWwgVGlja2V0R2V0IEZvdXIgSUQgJFRpY2tldElENCIKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVUaWNrZXRFbnRyeUZvdXIgKSB7CiAgICBpZiAoICEkVGlja2V0RW50cnlGb3VyeyRLZXl9ICkgewogICAgICAgICRUaWNrZXRFbnRyeUZvdXJ7JEtleX0gPSAnJzsKICAgIH0KICAgIGlmICggJEtleSBlcSAnQWdlJyApIHsKICAgICAgICBkZWxldGUgJFRpY2tldEVudHJ5Rm91cnskS2V5fTsKICAgIH0KfQoKIyBhZGQgdGlja2V0IGlkCnB1c2ggQFRpY2tldElEcywgJFRpY2tldElENDsKCiMgc2V0IHdlYiBzZXJ2aWNlIG5hbWUKbXkgJFdlYnNlcnZpY2VOYW1lID0gJy1UZXN0LScgLiAkUmFuZG9tSUQ7CgojIGNyZWF0ZSB3ZWIgc2VydmljZSBvYmplY3QKbXkgJFdlYnNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScpOwokU2VsZi0+SXMoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnLAogICAgcmVmICRXZWJzZXJ2aWNlT2JqZWN0LAogICAgIkNyZWF0ZSB3ZWIgc2VydmljZSBvYmplY3QiCik7CgpteSAkV2Vic2VydmljZUlEID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VBZGQoCiAgICBOYW1lICAgPT4gJFdlYnNlcnZpY2VOYW1lLAogICAgQ29uZmlnID0+IHsKICAgICAgICBEZWJ1Z2dlciA9PiB7CiAgICAgICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdkZWJ1ZycsCiAgICAgICAgfSwKICAgICAgICBQcm92aWRlciA9PiB7CiAgICAgICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRXZWJzZXJ2aWNlSUQsCiAgICAnQWRkZWQgd2ViIHNlcnZpY2UnCik7CgojIGdldCByZW1vdGUgaG9zdCB3aXRoIHNvbWUgcHJlY2F1dGlvbnMgZm9yIGNlcnRhaW4gdW5pdCB0ZXN0IHN5c3RlbXMKbXkgJEhvc3QgPSAkSGVscGVyLT5HZXRUZXN0SFRUUEhvc3RuYW1lKCk7CgojIHByZXBhcmUgd2ViIHNlcnZpY2UgY29uZmlnCm15ICRSZW1vdGVTeXN0ZW0gPQogICAgJENvbmZpZ09iamVjdC0+R2V0KCdIdHRwVHlwZScpCiAgICAuICc6Ly8nCiAgICAuICRIb3N0CiAgICAuICcvJwogICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NjcmlwdEFsaWFzJykKICAgIC4gJ25waC1nZW5lcmljaW50ZXJmYWNlLnBsL1dlYnNlcnZpY2VJRC8nCiAgICAuICRXZWJzZXJ2aWNlSUQ7CgpteSAkV2Vic2VydmljZUNvbmZpZyA9IHsKCiAgICAjICAgIE5hbWUgPT4gJycsCiAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICdUZXN0IGZvciBUaWNrZXQgQ29ubmVjdG9yIHVzaW5nIFNPQVAgdHJhbnNwb3J0IGJhY2tlbmQuJywKICAgIERlYnVnZ2VyID0+IHsKICAgICAgICBEZWJ1Z1RocmVzaG9sZCA9PiAnZGVidWcnLAogICAgICAgIFRlc3RNb2RlICAgICAgID0+IDEsCiAgICB9LAogICAgUHJvdmlkZXIgPT4gewogICAgICAgIFRyYW5zcG9ydCA9PiB7CiAgICAgICAgICAgIFR5cGUgICA9PiAnSFRUUDo6U09BUCcsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMTAwMDAwMDAsCiAgICAgICAgICAgICAgICBOYW1lU3BhY2UgPT4gJ2h0dHA6Ly9vdG9iby5vcmcvU29hcFRlc3RJbnRlcmZhY2UvJywKICAgICAgICAgICAgICAgIEVuZHBvaW50ICA9PiAkUmVtb3RlU3lzdGVtLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+IHsKICAgICAgICAgICAgVGlja2V0U2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1RpY2tldDo6VGlja2V0U2VhcmNoJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU2Vzc2lvbkNyZWF0ZSA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdTZXNzaW9uOjpTZXNzaW9uQ3JlYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIFJlcXVlc3RlciA9PiB7CiAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgVHlwZSAgID0+ICdIVFRQOjpTT0FQJywKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE5hbWVTcGFjZSA9PiAnaHR0cDovL290b2JvLm9yZy9Tb2FwVGVzdEludGVyZmFjZS8nLAogICAgICAgICAgICAgICAgRW5jb2RpbmcgID0+ICdVVEYtOCcsCiAgICAgICAgICAgICAgICBFbmRwb2ludCAgPT4gJFJlbW90ZVN5c3RlbSwKICAgICAgICAgICAgICAgIFRpbWVvdXQgICA9PiAxMjAsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBJbnZva2VyID0+IHsKICAgICAgICAgICAgVGlja2V0U2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Rlc3Q6OlRlc3RTaW1wbGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTZXNzaW9uQ3JlYXRlID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1Rlc3Q6OlRlc3RTaW1wbGUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAp9OwoKIyB1cGRhdGUgd2ViIHNlcnZpY2Ugd2l0aCByZWFsIGNvbmZpZwpteSAkV2Vic2VydmljZVVwZGF0ZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlVXBkYXRlKAogICAgSUQgICAgICA9PiAkV2Vic2VydmljZUlELAogICAgTmFtZSAgICA9PiAkV2Vic2VydmljZU5hbWUsCiAgICBDb25maWcgID0+ICRXZWJzZXJ2aWNlQ29uZmlnLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAkVXNlcklELAopOwokU2VsZi0+VHJ1ZSgKICAgICRXZWJzZXJ2aWNlVXBkYXRlLAogICAgIlVwZGF0ZWQgd2ViIHNlcnZpY2UgJFdlYnNlcnZpY2VJRCAtICRXZWJzZXJ2aWNlTmFtZSIKKTsKCiMgR2V0IFNlc3Npb25JRAojIGNyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0Cm15ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKJFNlbGYtPklzKAogICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJywKICAgIHJlZiAkUmVxdWVzdGVyU2Vzc2lvbk9iamVjdCwKICAgICdTZXNzaW9uSUQgLSBDcmVhdGUgcmVxdWVzdGVyIG9iamVjdCcKKTsKCiMgY3JlYXRlIGEgbmV3IHVzZXIgZm9yIGN1cnJlbnQgdGVzdApteSAkVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnIF0sCik7Cm15ICRQYXNzd29yZCA9ICRVc2VyTG9naW47CgojIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWIgc2VydmljZQpteSAkUmVxdWVzdGVyU2Vzc2lvblJlc3VsdCA9ICRSZXF1ZXN0ZXJTZXNzaW9uT2JqZWN0LT5SdW4oCiAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgIEludm9rZXIgICAgICA9PiAnU2Vzc2lvbkNyZWF0ZScsCiAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgIFVzZXJMb2dpbiA9PiAkVXNlckxvZ2luLAogICAgICAgIFBhc3N3b3JkICA9PiAkUGFzc3dvcmQsCiAgICB9LAopOwoKbXkgJE5ld1Nlc3Npb25JRCA9ICRSZXF1ZXN0ZXJTZXNzaW9uUmVzdWx0LT57RGF0YX0tPntTZXNzaW9uSUR9OwoKbXkgJFRlc3RDb3VudGVyID0gMTsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkVGlja2V0TnVtYmVyMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gWwogICAgICAgICAgICAgICAgJFRpY2tldE51bWJlcjEsCiAgICAgICAgICAgICAgICAkVGlja2V0TnVtYmVyMiwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0JywgICAgIyBmb3JjZSBvcmRlciwgYmVjYXVzZSB0aGUgQWdlIChkZWZhdWx0KSBjYW4gYmUgdGhlIHNhbWUKICAgICAgICAgICAgT3JkZXJCeSA9PiAnRG93bicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlID0+ICdUaWNrZXQgVHdvIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlID0+IFsKICAgICAgICAgICAgICAgICdUaWNrZXQgT25lIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBdLAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXQnLCAgICAjIGZvcmNlIG9yZGVyLCBiZWNhdXNlIHRoZSBBZ2UgKGRlZmF1bHQpIGNhbiBiZSB0aGUgc2FtZQogICAgICAgICAgICBPcmRlckJ5ID0+ICdEb3duJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgID0+ICdUaWNrZXQgVHdvIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIFF1ZXVlcyA9PiAnUmF3JwogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaXRsZSAgPT4gJ1RpY2tldCBUd28gVGl0bGUgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgUXVldWVzID0+ICdSYXcnLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaXRsZSA9PiAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBMb2NrcyA9PiAndW5sb2NrJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgID0+ICdUaWNrZXQgVHdvIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIFN0YXRlcyA9PiAnbmV3JywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgICAgICA9PiAnVGlja2V0IFR3byBUaXRsZSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBQcmlvcml0aWVzID0+ICczIG5vcm1hbCcsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJzEyMzQ2NScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIFNvcnRCeSAgICAgPT4gJ1RpY2tldCcsICAgICAgICAgICAgICAgIyBmb3JjZSBvcmRlciwgYmVjYXVzZSB0aGUgQWdlIChkZWZhdWx0KSBjYW4gYmUgdGhlIHNhbWUKICAgICAgICAgICAgT3JkZXJCeSAgICA9PiAnRG93bicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFF1ZXVlcyAgICAgPT4gWydKdW5rJ10sCiAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJzY1NDMyMScgLiAkUmFuZG9tSUQsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDRdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElENCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFR5cGVzID0+IFsgJ1Rlc3RUeXBlJyAuICRSYW5kb21JRCBdLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQzXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDMsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBTdGF0ZXMgPT4gWyduZXcnXSwKICAgICAgICAgICAgVGl0bGUgID0+ICdUaWNrZXQgVHdvIFRpdGxlICcgLiAkUmFuZG9tSUQsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFN0YXRlcyAgPT4gWyduZXcnXSwKICAgICAgICAgICAgVGl0bGUgICA9PiAnKicgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldCcsICAgICAgICAgICMgZm9yY2Ugb3JkZXIsIGJlY2F1c2UgdGhlIEFnZSAoZGVmYXVsdCkgY2FuIGJlIHRoZSBzYW1lCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ0Rvd24nLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaXRsZSAgICAgID0+ICcqIMOkw7bDvMOfw4TDlsOc4oKs0LjRgScsCiAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJzY1NDMyMScgLiAkUmFuZG9tSUQsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDRdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElENCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFByaW9yaXRpZXMgPT4gWycxIHZlcnkgbG93J10sCiAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJzEyMzQ2NScgLiAkUmFuZG9tSUQsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDNdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAoSGFzaCkgREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICJERlQxJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgIEVxdWFscyA9PiAndGlja2V0Ml9maWVsZDEnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQyXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgKEhhc2gpIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gIkRGVDEkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgTGlrZSA9PiAnKl9maWVsZDEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3J0QnkgPT4gJ1RpY2tldE51bWJlcicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAoQXJyYXkpIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gIkRGVDEkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgICAgIEVxdWFscyA9PiAndGlja2V0Ml9maWVsZDEnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElEMl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQyLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IChBcnJheSkgREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gIkRGVDEkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgICAgIExpa2UgPT4gJypfZmllbGQxJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFNvcnRCeSA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IChPbGQgQVBJKSBERiAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgICJEeW5hbWljRmllbGRfREZUMSRSYW5kb21JRCIgPT4gewogICAgICAgICAgICAgICAgRXF1YWxzID0+ICd0aWNrZXQyX2ZpZWxkMScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAoT2xkIEFQSSkgREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICAiRHluYW1pY0ZpZWxkX0RGVDEkUmFuZG9tSUQiID0+IHsKICAgICAgICAgICAgICAgIExpa2UgPT4gJypfZmllbGQxJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU29ydEJ5ID0+ICdUaWNrZXROdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMiwgJFRpY2tldElEMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgREYgRGF0ZSAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgICJEeW5hbWljRmllbGRfREZUNCRSYW5kb21JRCIgPT4gewogICAgICAgICAgICAgICAgR3JlYXRlclRoYW5FcXVhbHMgPT4gJzIwMTAtMDEtMDEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTb3J0QnkgPT4gJ1RpY2tldE51bWJlcicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDJdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBMYXN0Q2hhbmdlVGltZU5ld2VyRGF0ZSArICBDcmVhdGVUaW1lTmV3ZXJEYXRlICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0TGFzdENoYW5nZVRpbWVOZXdlckRhdGUgPT4gJFN0YXJ0VGltZS0+VG9TdHJpbmcoKSwKICAgICAgICAgICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSAgICAgPT4gJFN0YXJ0VGltZS0+VG9TdHJpbmcoKSwKICAgICAgICAgICAgU29ydEJ5ICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ1RpY2tldCcsICAgICAgICAgICAgICAgICAjIGZvcmNlIG9yZGVyLCBiZWNhdXNlIHRoZSBBZ2UgKGRlZmF1bHQpIGNhbiBiZSB0aGUgc2FtZQogICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgICAgICAgICAgICAgICA9PiAnRG93bicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQ0LCAkVGlja2V0SUQzLCAkVGlja2V0SUQyLCAkVGlja2V0SUQxIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDQsICRUaWNrZXRJRDMsICRUaWNrZXRJRDIsICRUaWNrZXRJRDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBDcmVhdGVUaW1lTmV3ZXJEYXRlICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgIEVwb2NoID0+ICRTdGFydFRpbWUtPlRvRXBvY2goKSArIDEwMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICktPlRvU3RyaW5nKCksCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldCcsICAgICMgZm9yY2Ugb3JkZXIsIGJlY2F1c2UgdGhlIEFnZSAoZGVmYXVsdCkgY2FuIGJlIHRoZSBzYW1lCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ0Rvd24nLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhICAgID0+IHt9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgICAgPT4ge30sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgTGltaXQgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAkU3RhcnRUaW1lLT5Ub1N0cmluZygpLAogICAgICAgICAgICBUaWNrZXRDcmVhdGVUaW1lTmV3ZXJEYXRlICAgICA9PiAkU3RhcnRUaW1lLT5Ub1N0cmluZygpLAogICAgICAgICAgICBTb3J0QnkgICAgICAgICAgICAgICAgICAgICAgICA9PiAnVGlja2V0JywgICAgICAgICAgICAgICAgICMgZm9yY2Ugb3JkZXIsIGJlY2F1c2UgdGhlIEFnZSAoZGVmYXVsdCkgY2FuIGJlIHRoZSBzYW1lCiAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgICAgICAgICAgICAgID0+ICdEb3duJywKICAgICAgICAgICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElENF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQ0LAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IEVzY2FsYXRpb25UaW1lICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0RXNjYWxhdGlvblRpbWVOZXdlck1pbnV0ZXMgPT4gMTIwLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgRXNjYWxhdGlvblJlc3BvbnNlVGltZSAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldEVzY2FsYXRpb25SZXNwb25zZVRpbWVOZXdlck1pbnV0ZXMgPT4gMTIwLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFskVGlja2V0SUQxXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgRXNjYWxhdGlvblVwZGF0ZVRpbWUgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRFc2NhbGF0aW9uVXBkYXRlVGltZU5ld2VyTWludXRlcyA9PiAxMjAsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBFc2NhbGF0aW9uU29sdXRpb25UaW1lICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0RXNjYWxhdGlvblNvbHV0aW9uVGltZU5ld2VyTWludXRlcyA9PiAxMjAsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyRUaWNrZXRJRDFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBDb250ZW50U2VhcmNoIFBhcmFtZXRlciIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgTUlNRUJhc2VfQm9keSAgICA9PiAndGV4dCBib2R5IGxvbmcnLAogICAgICAgICAgICBNSU1FQmFzZV9TdWJqZWN0ID0+ICd0ZXh0IGJvZHkgbG9uZycsCiAgICAgICAgICAgIENvbnRlbnRTZWFyY2ggICAgPT4gJ09SJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbJFRpY2tldElENF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElENCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBPcGVyYXRvciAnRW1wdHknIERGVDEgLSBERiAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldElEICAgICA9PiBbICRUaWNrZXRJRDEsICRUaWNrZXRJRDIsICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICJERlQxJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgIEVtcHR5ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ1VwJywKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IE9wZXJhdG9yICdFbXB0eScgREZUMiAtIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgICAgID0+IFsgJFRpY2tldElEMSwgJFRpY2tldElEMiwgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gIkRGVDIkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgRW1wdHkgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgT3JkZXJCeSA9PiAnVXAnLAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXROdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgT3BlcmF0b3IgJ0VtcHR5JyBERlQzIC0gREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRJRCAgICAgPT4gWyAkVGlja2V0SUQxLCAkVGlja2V0SUQyLCAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAiREZUMyRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICBFbXB0eSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBPcmRlckJ5ID0+ICdVcCcsCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldE51bWJlcicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCBPcGVyYXRvciAnRW1wdHknIERGVDQgLSBERiAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldElEICAgICA9PiBbICRUaWNrZXRJRDEsICRUaWNrZXRJRDIsICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICJERlQ0JFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgIEVtcHR5ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ1VwJywKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IE9wZXJhdG9yICdFbXB0eScgREZUIEFMTCAtIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgICAgID0+IFsgJFRpY2tldElEMSwgJFRpY2tldElEMiwgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICJERlQxJFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBFbXB0eSA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAiREZUMiRSYW5kb21JRCIsCiAgICAgICAgICAgICAgICAgICAgRW1wdHkgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gIkRGVDMkUmFuZG9tSUQiLAogICAgICAgICAgICAgICAgICAgIEVtcHR5ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICJERlQ0JFJhbmRvbUlEIiwKICAgICAgICAgICAgICAgICAgICBFbXB0eSA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgT3JkZXJCeSA9PiAnVXAnLAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXROdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgKE9sZCBBUEkpIE9wZXJhdG9yICdFbXB0eScgREZUMSAtIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICAgICAgICA9PiBbICRUaWNrZXRJRDEsICRUaWNrZXRJRDIsICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF9ERlQxJFJhbmRvbUlEIiA9PiB7CiAgICAgICAgICAgICAgICBFbXB0eSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBPcmRlckJ5ID0+ICdVcCcsCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldE51bWJlcicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAoT2xkIEFQSSkgT3BlcmF0b3IgJ0VtcHR5JyBERlQyIC0gREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgICAgICAgID0+IFsgJFRpY2tldElEMSwgJFRpY2tldElEMiwgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICAiRHluYW1pY0ZpZWxkX0RGVDIkUmFuZG9tSUQiID0+IHsKICAgICAgICAgICAgICAgIEVtcHR5ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ1VwJywKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0IChPbGQgQVBJKSBPcGVyYXRvciAnRW1wdHknIERGVDMgLSBERiAiIC4gJFRlc3RDb3VudGVyKyssCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgICAgICAgICAgPT4gWyAkVGlja2V0SUQxLCAkVGlja2V0SUQyLCAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgICJEeW5hbWljRmllbGRfREZUMyRSYW5kb21JRCIgPT4gewogICAgICAgICAgICAgICAgRW1wdHkgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgT3JkZXJCeSA9PiAnVXAnLAogICAgICAgICAgICBTb3J0QnkgID0+ICdUaWNrZXROdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gIlRlc3QgKE9sZCBBUEkpIE9wZXJhdG9yICdFbXB0eScgREZUNCAtIERGICIgLiAkVGVzdENvdW50ZXIrKywKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICAgICAgICA9PiBbICRUaWNrZXRJRDEsICRUaWNrZXRJRDIsICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF9ERlQ0JFJhbmRvbUlEIiA9PiB7CiAgICAgICAgICAgICAgICBFbXB0eSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBPcmRlckJ5ID0+ICdVcCcsCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ1RpY2tldE51bWJlcicsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gWyAkVGlja2V0SUQzLCAkVGlja2V0SUQ0IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAoT2xkIEFQSSkgT3BlcmF0b3IgJ0VtcHR5JyBERlQgQUxMIC0gREYgIiAuICRUZXN0Q291bnRlcisrLAogICAgICAgIFN1Y2Nlc3NSZXF1ZXN0ID0+IDEsCiAgICAgICAgUmVxdWVzdERhdGEgICAgPT4gewogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgICAgICAgID0+IFsgJFRpY2tldElEMSwgJFRpY2tldElEMiwgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICAiRHluYW1pY0ZpZWxkX0RGVDEkUmFuZG9tSUQiID0+IHsKICAgICAgICAgICAgICAgIEVtcHR5ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJEeW5hbWljRmllbGRfREZUMiRSYW5kb21JRCIgPT4gewogICAgICAgICAgICAgICAgRW1wdHkgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIkR5bmFtaWNGaWVsZF9ERlQzJFJhbmRvbUlEIiA9PiB7CiAgICAgICAgICAgICAgICBFbXB0eSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICAiRHluYW1pY0ZpZWxkX0RGVDQkUmFuZG9tSUQiID0+IHsKICAgICAgICAgICAgICAgIEVtcHR5ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ1VwJywKICAgICAgICAgICAgU29ydEJ5ICA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiBbICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+IFsgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9LAopOwoKIyBBZGQgYSB3cm9uZyB2YWx1ZSB0ZXN0IGZvciBlYWNoIHBvc3NpYmxlIHBhcmFtZXRlciBvbiBkaXJlY3Qgc2VhcmNoCgpmb3IgbXkgJEl0ZW0gKAogICAgcXcoCiAgICAgICAgVGlja2V0TnVtYmVyIFRpdGxlIE1JTUVCYXNlX0Zyb20gTUlNRUJhc2VfVG8gTUlNRUJhc2VfQ2MgTUlNRUJhc2VfU3ViamVjdAogICAgICAgIE1JTUVCYXNlX0JvZHkgQ3VzdG9tZXJJRCBDdXN0b21lclVzZXJMb2dpbiBTdGF0ZVR5cGUgRnVsbHRleHQKICAgICkKICAgICkKewogICAgbXkgJEZhaWxUZXN0ID0gewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICRJdGVtIiwKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgJEl0ZW0gPT4gJ05vdEFSZWFsJyAuICRJdGVtLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGEgPT4gewogICAgICAgICAgICBEYXRhICAgID0+IHt9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuUmVtb3RlRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgICAgPT4ge30sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgT3BlcmF0aW9uID0+ICdUaWNrZXRTZWFyY2gnLAogICAgfTsKCiAgICAjIHB1c2ggdGVzdAogICAgcHVzaCBAVGVzdHMsICRGYWlsVGVzdDsKfQoKIyBBcnJheXMgYXMgc3RyaW5ncwpmb3IgbXkgJEl0ZW0gKAogICAgcXcoU3RhdGVJRHMgU3RhdGVUeXBlSURzIFF1ZXVlSURzIFByaW9yaXR5SURzIE93bmVySURzCiAgICBDcmVhdGVkUXVldWVJRHMgQ3JlYXRlZFVzZXJJRHMgV2F0Y2hVc2VySURzIFJlc3BvbnNpYmxlSURzCiAgICBUeXBlSURzIFNlcnZpY2VJRHMgU0xBSURzIExvY2tJRHMgUXVldWVzIFR5cGVzIFN0YXRlcwogICAgUHJpb3JpdGllcyBTZXJ2aWNlcyBTTEFzIExvY2tzIENyZWF0ZWRUeXBlcyBDcmVhdGVkVXNlcklEcwogICAgQ3JlYXRlZFR5cGVzIENyZWF0ZWRUeXBlSURzIENyZWF0ZWRQcmlvcml0aWVzCiAgICBDcmVhdGVkUHJpb3JpdHlJRHMgQ3JlYXRlZFN0YXRlcyBDcmVhdGVkU3RhdGVJRHMKICAgIENyZWF0ZWRRdWV1ZXMgQ3JlYXRlZFF1ZXVlSURzCiAgICApCiAgICApCnsKICAgIG15ICRGYWlsVGVzdCA9IHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAiVGVzdCAkSXRlbSIsCiAgICAgICAgU3VjY2Vzc1JlcXVlc3QgPT4gMSwKICAgICAgICBSZXF1ZXN0RGF0YSAgICA9PiB7CiAgICAgICAgICAgICRJdGVtID0+ICdOb3RBUmVhbCcgLiAkSXRlbSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmV0dXJuTG9jYWxEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSAgICA9PiB7fSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVyblJlbW90ZURhdGEgPT4gewogICAgICAgICAgICBEYXRhICAgID0+IHt9LAogICAgICAgICAgICBTdWNjZXNzID0+IDEKICAgICAgICB9LAogICAgICAgIE9wZXJhdGlvbiA9PiAnVGlja2V0U2VhcmNoJywKICAgIH07CgogICAgIyBwdXNoIHRlc3QKICAgIHB1c2ggQFRlc3RzLCAkRmFpbFRlc3Q7Cn0KCiMgQXJyYXlzCmZvciBteSAkSXRlbSAoCiAgICBxdyhTdGF0ZUlEcyBTdGF0ZVR5cGVJRHMgUXVldWVJRHMgUHJpb3JpdHlJRHMgT3duZXJJRHMKICAgIENyZWF0ZWRRdWV1ZUlEcyBDcmVhdGVkVXNlcklEcyBXYXRjaFVzZXJJRHMgUmVzcG9uc2libGVJRHMKICAgIFR5cGVJRHMgU2VydmljZUlEcyBTTEFJRHMgTG9ja0lEcyBRdWV1ZXMgVHlwZXMgU3RhdGVzCiAgICBQcmlvcml0aWVzIFNlcnZpY2VzIFNMQXMgTG9ja3MgQ3JlYXRlZFR5cGVzIENyZWF0ZWRVc2VySURzCiAgICBDcmVhdGVkVHlwZXMgQ3JlYXRlZFR5cGVJRHMgQ3JlYXRlZFByaW9yaXRpZXMKICAgIENyZWF0ZWRQcmlvcml0eUlEcyBDcmVhdGVkU3RhdGVzIENyZWF0ZWRTdGF0ZUlEcwogICAgQ3JlYXRlZFF1ZXVlcyBDcmVhdGVkUXVldWVJRHMKICAgICkKICAgICkKewogICAgbXkgJEZhaWxUZXN0ID0gewogICAgICAgIE5hbWUgICAgICAgICAgID0+ICJUZXN0ICRJdGVtIiwKICAgICAgICBTdWNjZXNzUmVxdWVzdCA9PiAxLAogICAgICAgIFJlcXVlc3REYXRhICAgID0+IHsKICAgICAgICAgICAgJEl0ZW0gPT4gWwogICAgICAgICAgICAgICAgJ05vdEFSZWFsJyAuICRJdGVtIC4gJ09uZScsCiAgICAgICAgICAgICAgICAnTm90QVJlYWwnIC4gJEl0ZW0gLiAnVHdvJywKICAgICAgICAgICAgICAgICdOb3RBUmVhbCcgLiAkSXRlbSAuICdUaHJlZScsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJldHVybkxvY2FsRGF0YSA9PiB7CiAgICAgICAgICAgIERhdGEgICAgPT4ge30sCiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gMQogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhID0+IHsKICAgICAgICAgICAgRGF0YSAgICA9PiB7fSwKICAgICAgICAgICAgU3VjY2VzcyA9PiAxCiAgICAgICAgfSwKICAgICAgICBPcGVyYXRpb24gPT4gJ1RpY2tldFNlYXJjaCcsCiAgICB9OwoKICAgICMgcHVzaCB0ZXN0CiAgICBwdXNoIEBUZXN0cywgJEZhaWxUZXN0Owp9CgojIGRlYnVnZ2VyIG9iamVjdApteSAkRGVidWdnZXJPYmplY3QgPSBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkRlYnVnZ2VyLT5uZXcoCiAgICBEZWJ1Z2dlckNvbmZpZyA9PiB7CiAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJ2RlYnVnJywKICAgICAgICBUZXN0TW9kZSAgICAgICA9PiAxLAogICAgfSwKICAgIFdlYnNlcnZpY2VJRCAgICAgID0+ICRXZWJzZXJ2aWNlSUQsCiAgICBDb21tdW5pY2F0aW9uVHlwZSA9PiAnUHJvdmlkZXInLAopOwokU2VsZi0+SXMoCiAgICByZWYgJERlYnVnZ2VyT2JqZWN0LAogICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6RGVidWdnZXInLAogICAgJ0RlYnVnZ2VyT2JqZWN0IGluc3RhbnRpYXRlIGNvcnJlY3RseScKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgIyBjcmVhdGUgbG9jYWwgb2JqZWN0CiAgICBteSAkTG9jYWxPYmplY3QgPSAiS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OlRpY2tldDo6JFRlc3QtPntPcGVyYXRpb259Ii0+bmV3KAogICAgICAgIERlYnVnZ2VyT2JqZWN0ID0+ICREZWJ1Z2dlck9iamVjdCwKICAgICAgICBXZWJzZXJ2aWNlSUQgICA9PiAkV2Vic2VydmljZUlELAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgIktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OiRUZXN0LT57T3BlcmF0aW9ufSIsCiAgICAgICAgcmVmICRMb2NhbE9iamVjdCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENyZWF0ZSBsb2NhbCBvYmplY3QiLAogICAgKTsKCiAgICAjIHN0YXJ0IHJlcXVlc3RlciB3aXRoIG91ciB3ZWIgc2VydmljZQogICAgbXkgJExvY2FsUmVzdWx0ID0gJExvY2FsT2JqZWN0LT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICRUZXN0LT57T3BlcmF0aW9ufSwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgID0+ICRQYXNzd29yZCwKICAgICAgICAgICAgVGlja2V0SUQgID0+IFsgJFRpY2tldElEMSwgJFRpY2tldElEMiwgJFRpY2tldElEMywgJFRpY2tldElENCBdLAogICAgICAgICAgICAleyAkVGVzdC0+e1JlcXVlc3REYXRhfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgY2hlY2sgcmVzdWx0CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJ0hBU0gnLAogICAgICAgIHJlZiAkTG9jYWxSZXN1bHQsCiAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgc3RydWN0dXJlIGlzIHZhbGlkIgogICAgKTsKCiAgICAjIGNyZWF0ZSByZXF1ZXN0ZXIgb2JqZWN0CiAgICBteSAkUmVxdWVzdGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKICAgICRTZWxmLT5JcygKICAgICAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAogICAgICAgIHJlZiAkUmVxdWVzdGVyT2JqZWN0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gQ3JlYXRlIHJlcXVlc3RlciBvYmplY3QiCiAgICApOwoKICAgICMgc3RhcnQgcmVxdWVzdGVyIHdpdGggb3VyIHdlYiBzZXJ2aWNlCiAgICBteSAkUmVxdWVzdGVyUmVzdWx0ID0gJFJlcXVlc3Rlck9iamVjdC0+UnVuKAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkV2Vic2VydmljZUlELAogICAgICAgIEludm9rZXIgICAgICA9PiAkVGVzdC0+e09wZXJhdGlvbn0sCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICROZXdTZXNzaW9uSUQsCiAgICAgICAgICAgIFRpY2tldElEICA9PiBbICRUaWNrZXRJRDEsICRUaWNrZXRJRDIsICRUaWNrZXRJRDMsICRUaWNrZXRJRDQgXSwKICAgICAgICAgICAgJXsgJFRlc3QtPntSZXF1ZXN0RGF0YX0gfSwKICAgICAgICB9CiAgICApOwoKICAgICMgY2hlY2sgcmVzdWx0CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJ0hBU0gnLAogICAgICAgIHJlZiAkUmVxdWVzdGVyUmVzdWx0LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHJlc3VsdCBzdHJ1Y3R1cmUgaXMgdmFsaWQiLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFJlcXVlc3RlclJlc3VsdC0+e1N1Y2Nlc3N9LAogICAgICAgICRUZXN0LT57U3VjY2Vzc1JlcXVlc3R9LAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gUmVxdWVzdGVyIHN1Y2Nlc3NmdWwgcmVzdWx0IiwKICAgICk7CgogICAgIyByZW1vdmUgRXJyb3JNZXNzYWdlIHBhcmFtZXRlciBmcm9tIGRpcmVjdCBjYWxsCiAgICAjIHJlc3VsdCB0byBiZSBjb25zaXN0ZW50IHdpdGggU09BUCBjYWxsIHJlc3VsdAogICAgaWYgKCAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9ICkgewogICAgICAgIGRlbGV0ZSAkTG9jYWxSZXN1bHQtPntFcnJvck1lc3NhZ2V9OwogICAgfQoKICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAkUmVxdWVzdGVyUmVzdWx0LAogICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhfSwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIFJlcXVlc3RlciBzdWNjZXNzIHN0YXR1cyAobmVlZHMgY29uZmlndXJlZCBhbmQgcnVubmluZyB3ZWJzZXJ2ZXIpIgogICAgKTsKCiAgICBpZiAoICRUZXN0LT57RXhwZWN0ZWRSZXR1cm5Mb2NhbERhdGF9ICkgewogICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgJExvY2FsUmVzdWx0LAogICAgICAgICAgICAkVGVzdC0+e0V4cGVjdGVkUmV0dXJuTG9jYWxEYXRhfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgbWF0Y2hlZCB3aXRoIGV4cGVjdGVkIGxvY2FsIGNhbGwgcmVzdWx0LiIKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkTG9jYWxSZXN1bHQsCiAgICAgICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXR1cm5SZW1vdGVEYXRhfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBMb2NhbCByZXN1bHQgbWF0Y2hlZCB3aXRoIHJlbW90ZSByZXN1bHQuIgogICAgICAgICk7CiAgICB9Cgp9ICAgICNlbmQgbG9vcAoKIyBjbGVhbnVwCgojIGNsZWFudXAgd2ViIHNlcnZpY2UKbXkgJFdlYnNlcnZpY2VEZWxldGUgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZURlbGV0ZSgKICAgIElEICAgICA9PiAkV2Vic2VydmljZUlELAogICAgVXNlcklEID0+ICRVc2VySUQsCik7CiRTZWxmLT5UcnVlKAogICAgJFdlYnNlcnZpY2VEZWxldGUsCiAgICAiRGVsZXRlZCB3ZWIgc2VydmljZSAkV2Vic2VydmljZUlEIgopOwoKIyBkZWxldGUgdGhlIHRpY2tldHMKZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewogICAgbXkgJFRpY2tldERlbGV0ZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwKICAgICk7CgogICAgIyBzYW5pdHkgY2hlY2sKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRUaWNrZXREZWxldGUsCiAgICAgICAgIlRpY2tldERlbGV0ZSgpIHN1Y2Nlc3NmdWwgZm9yIFRpY2tldCBJRCAkVGlja2V0SUQiCiAgICApOwp9CgojIGRlbGV0ZSBkeW5hbWljIGZpZWxkcwpmb3IgbXkgJFRlc3RGaWVsZENvbmZpZ0l0ZW0gKEBUZXN0RmllbGRDb25maWcpIHsKICAgIG15ICRUZXN0RmllbGRDb25maWdJdGVtSUQgPSAkVGVzdEZpZWxkQ29uZmlnSXRlbS0+e0lEfTsKCiAgICBteSAkREZEZWxldGUgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGREZWxldGUoCiAgICAgICAgSUQgICAgICA9PiAkVGVzdEZpZWxkQ29uZmlnSXRlbUlELAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICBSZW9yZGVyID0+IDAsCiAgICApOwoKICAgICMgc2FuaXR5IGNoZWNrCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkREZEZWxldGUsCiAgICAgICAgIkR5bmFtaWNGaWVsZERlbGV0ZSgpIHN1Y2Nlc3NmdWwgZm9yIEZpZWxkIElEICRUZXN0RmllbGRDb25maWdJdGVtSUQiCiAgICApOwp9CgojIGdldCBEQiBvYmplY3QKbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgojIGRlbGV0ZSB1c2VyCm15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gdXNlcl9wcmVmZXJlbmNlcyBXSEVSRSB1c2VyX2lkID0gJFVzZXJJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVXNlciBwcmVmZXJlbmNlIHJlZmVyZW5jZWQgdG8gVXNlciBJRCAkVXNlcklEIGlzIGRlbGV0ZWQhIgopOwokU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHVzZXJzIFdIRVJFIGlkID0gJFVzZXJJRCIsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVXNlciB3aXRoIElEICRVc2VySUQgaXMgZGVsZXRlZCEiCik7CgojIGRlbGV0ZSB0eXBlCiRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gdGlja2V0X3R5cGUgV0hFUkUgaWQgPSAkVHlwZUlEIiwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJUeXBlIHdpdGggSUQgJFR5cGVJRCBpcyBkZWxldGVkISIKKTsKCiMgY2xlYW51cCBjYWNoZQokS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgpOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/ProcessManagement/TransitionAction/TicketSLASet.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1Byb2Nlc3NNYW5hZ2VtZW50L1RyYW5zaXRpb25BY3Rpb24vVGlja2V0U0xBU2V0LnQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCiMgY29yZSBtb2R1bGVzCnVzZSBTdG9yYWJsZSBxdyhkY2xvbmUpOwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpSZWdpc3RlckRyaXZlcjsgICAgIyBTZXQgdXAgJEtlcm5lbDo6T00gYW5kICRtYWluOjpTZWxmCgpvdXIgJFNlbGY7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7Cm15ICRTTEFPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwpteSAkVGlja2V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKbXkgJE1vZHVsZU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb246OlRpY2tldFNMQVNldCcpOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgID0+IDEsCiAgICAgICAgVXNlVG1wQXJ0aWNsZURpciA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIGRlZmluZSB2YXJpYWJsZXMKbXkgJFVzZXJJRCAgICAgPSAxOwpteSAkTW9kdWxlTmFtZSA9ICdUaWNrZXRTTEFTZXQnOwpteSAkUmFuZG9tSUQgICA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgojIGFkZCBhIGN1c3RvbWVyIHVzZXIKbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKCiMgc2V0IHVzZXIgZGV0YWlscwpteSAoICRUZXN0VXNlckxvZ2luLCAkVGVzdFVzZXJJRCApID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoKTsKCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KCiMgZ2V0IHRoZSBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgZnJvbSBnZW5lcmFsIGNhdGFsb2cKbXkgJFNlcnZpY2VUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKKTsKCiMgYnVpbGQgYSBsb29rdXAgaGFzaApteSAlU2VydmljZVR5cGVOYW1lMklEID0gcmV2ZXJzZSAleyRTZXJ2aWNlVHlwZUxpc3R9OwoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2xhIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTTEFUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXskU0xBVHlwZUxpc3R9OwoKIyAtLS0KCiMKIyBDcmVhdGUgbmV3IHNlcnZpY2VzCiMKbXkgQFNlcnZpY2VzID0gKAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ1NlcnZpY2UwJyAuICRSYW5kb21JRCwKICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAoKICAgICAgICAjIC0tLQogICAgICAgICMgSVRTTUNvcmUKICAgICAgICAjIC0tLQogICAgICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICMgLS0tCiAgICB9LAopOwoKZm9yIG15ICRTZXJ2aWNlRGF0YSAoQFNlcnZpY2VzKSB7CiAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoICV7JFNlcnZpY2VEYXRhfSApOwoKICAgICMgc2FuaXR5IHRlc3QKICAgICRTZWxmLT5Jc05vdCgKICAgICAgICAkU2VydmljZUlELAogICAgICAgIHVuZGVmLAogICAgICAgICJTZXJ2aWNlQWRkKCkgZm9yICRTZXJ2aWNlRGF0YS0+e05hbWV9LCBTZXJ2aWNlSUQgc2hvdWxkIG5vdCBiZSB1bmRlZiIsCiAgICApOwoKICAgICMgc3RvcmUgdGhlIFNlcnZpY2VJRAogICAgJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfSA9ICRTZXJ2aWNlSUQ7Cn0KCiMKIyBDcmVhdGUgbmV3IFNMQXMKIwpteSBAU0xBcyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgID0+ICdTTEEwJyAuICRSYW5kb21JRCwKICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VzWzBdLT57U2VydmljZUlEfSBdLAogICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCgogICAgICAgICMgLS0tCiAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICMgLS0tCiAgICAgICAgVHlwZUlEID0+ICRTTEFUeXBlTmFtZTJJRHtPdGhlcn0sCgogICAgICAgICMgLS0tCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gJ1NMQTEnIC4gJFJhbmRvbUlELAogICAgICAgIFNlcnZpY2VJRHMgPT4gWyAkU2VydmljZXNbMF0tPntTZXJ2aWNlSUR9IF0sCiAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKCiAgICAgICAgIyAtLS0KICAgICAgICAjIElUU01Db3JlCiAgICAgICAgIyAtLS0KICAgICAgICBUeXBlSUQgPT4gJFNMQVR5cGVOYW1lMklEe090aGVyfSwKCiAgICAgICAgIyAtLS0KICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICA9PiAnU0xBMicgLiAkUmFuZG9tSUQsCiAgICAgICAgU2VydmljZUlEcyA9PiBbXSwKICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAoKICAgICAgICAjIC0tLQogICAgICAgICMgSVRTTUNvcmUKICAgICAgICAjIC0tLQogICAgICAgIFR5cGVJRCA9PiAkU0xBVHlwZU5hbWUySUR7T3RoZXJ9LAoKICAgICAgICAjIC0tLQogICAgfSwKKTsKCmZvciBteSAkU0xBRGF0YSAoQFNMQXMpIHsKICAgIG15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCggJXskU0xBRGF0YX0gKTsKCiAgICAjIHNhbml0eSB0ZXN0CiAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgJFNMQUlELAogICAgICAgIHVuZGVmLAogICAgICAgICJTTEFBZGQoKSBmb3IgJFNMQURhdGEtPntOYW1lfSwgU0xBSUQgc2hvdWxkIG5vdCBiZSB1bmRlZiIsCiAgICApOwoKICAgICMgc3RvcmUgdGhlIFNMQUlECiAgICAkU0xBRGF0YS0+e1NMQUlEfSA9ICRTTEFJRDsKfQoKIwojIEFzc2lnbiBzZXJ2aWNlcyB0byBjdXN0b21lciAoMCBhbmQgMSkKIwpteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlc1swXS0+e1NlcnZpY2VJRH0sCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IHRlc3QKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKCkgZm9yIHVzZXIgJFRlc3RDdXN0b21lclVzZXJMb2dpbiwgYW5kIFNlcnZpY2UgJFNlcnZpY2VzWzBdLT57TmFtZX0iCiAgICAgICAgLiAiIHdpdGggdHJ1ZSIsCik7CgojCiMgQ3JlYXRlIGEgdGVzdCB0aWNrZXRzCiMKbXkgQFRpY2tldERhdGE7CmZvciBteSAkSXRlbSAoIDAgLi4gMSApIHsKICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgICAgICBUaXRsZSAgICAgICAgID0+ICggJEl0ZW0gPT0gMCApID8gJFNMQXNbMF0tPntTTEFJRH0gOiAndGVzdCcsCiAgICAgICAgUXVldWVJRCAgICAgICA9PiAxLAogICAgICAgIExvY2sgICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgUHJpb3JpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgIFN0YXRlSUQgICAgICAgPT4gMSwKICAgICAgICBUeXBlSUQgICAgICAgID0+IDEsCiAgICAgICAgU2VydmljZSAgICAgICA9PiAoICRJdGVtID09IDAgKSA/ICRTZXJ2aWNlc1swXS0+e05hbWV9ICAgOiB1bmRlZiwKICAgICAgICBDdXN0b21lclVzZXIgID0+ICggJEl0ZW0gPT0gMCApID8gJFRlc3RDdXN0b21lclVzZXJMb2dpbiA6IHVuZGVmLAogICAgICAgIE93bmVySUQgICAgICAgPT4gMSwKICAgICAgICBSZXNwb25zaWJsZUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVja3MKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRUaWNrZXRJRCwKICAgICAgICAiVGlja2V0Q3JlYXRlKCkgLSAkVGlja2V0SUQiLAogICAgKTsKCiAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICA9PiAkVXNlcklELAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldCApLAogICAgICAgICJUaWNrZXRHZXQoKSAtIEdldCBUaWNrZXQgd2l0aCBJRCAkVGlja2V0SUQuIiwKICAgICk7CgogICAgcHVzaCBAVGlja2V0RGF0YSwgXCVUaWNrZXQ7Cn0KCiMgUnVuKCkgdGVzdHMKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgPT4gJ05vIFBhcmFtcycsCiAgICAgICAgQ29uZmlnICA9PiB1bmRlZiwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm8gVXNlcklEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gdW5kZWYsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJ3Rlc3QnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ05vIFRpY2tldCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiB1bmRlZiwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJ3Rlc3QnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ05vIENvbmZpZycsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHt9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIENvbmZpZycsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIE5vQWdlbnROb3RpZnkgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdXcm9uZyBUaWNrZXQgRm9ybWF0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IDEsCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEEgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIENvbmZpZyBGb3JtYXQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIFNMQScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQSA9PiAnTm90RXhpc3RpbmcnIC4gJFJhbmRvbUlELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIFNMQUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJ05vdEV4aXN0aW5nJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdOb3QgYXNzaWduZWQgU0xBJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBID0+ICRTTEFzWzJdLT57TmFtZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm90IEFzc2lnbmVkIFNMQUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNMQXNbMl0tPntTTEFJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiVGlja2V0IHdpdGhvdXQgc2VydmljZSB3aXRoIFNMQSAkU0xBc1swXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzFdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNMQXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJUaWNrZXQgd2l0aG91dCBzZXJ2aWNlIHdpdGggU0xBSUQgJFNMQXNbMV0tPntOYW1lfSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVsxXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQUlEID0+ICRTTEFzWzBdLT57U0xBSUR9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgU0xBICRTTEFzWzBdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEEgPT4gJFNMQXNbMF0tPntOYW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFNMQSAkU0xBc1sxXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBID0+ICRTTEFzWzFdLT57TmFtZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBTTEFJRCAkU0xBc1swXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNMQXNbMF0tPntTTEFJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBTTEFJRCAkU0xBc1sxXS0+e05hbWV9IiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNMQXNbMF0tPntTTEFJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBUaWNrZXQtPlRpdGxlIiwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU0xBSUQgPT4gJzxPVE9CT19USUNLRVRfVGl0bGU+JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFRpY2tldC0+Tm90RXhpc3RpbmciLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTTEFJRCA9PiAnPE9UT0JPX1RJQ0tFVF9Ob3RFeGlzdGluZz4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgVXNpbmcgRGlmZmVyZW50IFVzZXJJRCIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNMQSAgICA9PiAkU0xBc1swXS0+e05hbWV9LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgIyBtYWtlIGEgZGVlcCBjb3B5IHRvIGF2b2lkIGNoYW5naW5nIHRoZSBkZWZpbml0aW9uCiAgICBteSAkT3JpZ1Rlc3QgPSBkY2xvbmUoJFRlc3QpOwoKICAgIG15ICRTdWNjZXNzID0gJE1vZHVsZU9iamVjdC0+UnVuKAogICAgICAgICV7ICRUZXN0LT57Q29uZmlnfSB9LAogICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgICAgICAgICA9PiAnUDEnLAogICAgICAgIEFjdGl2aXR5RW50aXR5SUQgICAgICAgICA9PiAnQTEnLAogICAgICAgIFRyYW5zaXRpb25FbnRpdHlJRCAgICAgICA9PiAnVDEnLAogICAgICAgIFRyYW5zaXRpb25BY3Rpb25FbnRpdHlJRCA9PiAnVEExJywKICAgICk7CgogICAgaWYgKCAkVGVzdC0+e1N1Y2Nlc3N9ICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkTW9kdWxlTmFtZSBSdW4oKSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgZXhlY3V0ZWQgd2l0aCBUcnVlIgogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRpY2tldAogICAgICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXREYXRhWzBdLT57VGlja2V0SUR9OwogICAgICAgIGlmICggJFRlc3QtPntDb25maWd9LT57VGlja2V0fS0+e1RpY2tldElEfSBlcSAkVGlja2V0RGF0YVsxXS0+e1RpY2tldElEfSApIHsKICAgICAgICAgICAgJFRpY2tldElEID0gJFRpY2tldERhdGFbMV0tPntUaWNrZXRJRH07CiAgICAgICAgfQogICAgICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBBVFRSSUJVVEU6CiAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJFRlc3QtPntDb25maWd9LT57Q29uZmlnfSB9ICkgewoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBkZWZpbmVkICRUaWNrZXR7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAiJE1vZHVsZU5hbWUgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IEF0dHJpYnV0ZTogJEF0dHJpYnV0ZSBmb3IgVGlja2V0SUQ6IgogICAgICAgICAgICAgICAgICAgIC4gIiAkVGlja2V0SUQgZXhpc3RzIHdpdGggVHJ1ZSIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkRXhwZWN0ZWRWYWx1ZSA9ICRUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPnskQXR0cmlidXRlfTsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJE9yaWdUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPnskQXR0cmlidXRlfQogICAgICAgICAgICAgICAgPX4gbXtcQTxPVE9CT19USUNLRVRfKFtBLVphLXowLTlfXSspPlx6fW1zeAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRXhwZWN0ZWRWYWx1ZSA9ICRUaWNrZXR7JDF9IC8vICcnOwogICAgICAgICAgICAgICAgJFNlbGYtPklzTm90KAogICAgICAgICAgICAgICAgICAgICRUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiAkQXR0cmlidXRlIHZhbHVlOiAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9IHNob3VsZCBiZWVuIHJlcGxhY2VkIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRUaWNrZXR7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAkRXhwZWN0ZWRWYWx1ZSwKICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiAkQXR0cmlidXRlIGZvciBUaWNrZXRJRDoiCiAgICAgICAgICAgICAgICAgICAgLiAiICRUaWNrZXRJRCBtYXRjaCBleHBlY3RlZCB2YWx1ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRPcmlnVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57VXNlcklEfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFRlc3QtPntDb25maWd9LT57Q29uZmlnfS0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICB1bmRlZiwKICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiBVc2VySUQgZm9yIFRpY2tldElEOiIKICAgICAgICAgICAgICAgICAgICAuICIgJFRpY2tldElEIHNob3VsZCBiZSByZW1vdmVkIChhcyBpdCB3YXMgdXNlZCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkTW9kdWxlTmFtZSBSdW4oKSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgZXhlY3V0ZWQgd2l0aCBGYWxzZSIKICAgICAgICApOwogICAgfQp9Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/ProcessManagement/TransitionAction/TicketServiceSet.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1Byb2Nlc3NNYW5hZ2VtZW50L1RyYW5zaXRpb25BY3Rpb24vVGlja2V0U2VydmljZVNldC50CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwp1c2UgU3RvcmFibGUgcXcoZGNsb25lKTsKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCB0aGUgdGVzdCBkcml2ZXIgJFNlbGYKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRTZWxmOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwpteSAkVGlja2V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKbXkgJE1vZHVsZU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb246OlRpY2tldFNlcnZpY2VTZXQnKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlICA9PiAxLAogICAgICAgIFVzZVRtcEFydGljbGVEaXIgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKIyBkZWZpbmUgdmFyaWFibGVzCm15ICRVc2VySUQgICAgID0gMTsKbXkgJE1vZHVsZU5hbWUgPSAnVGlja2V0U2VydmljZVNldCc7Cm15ICRSYW5kb21JRCAgID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiMgYWRkIGEgY3VzdG9tZXIgdXNlcgpteSAkVGVzdEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwoKIyBzZXQgdXNlciBkZXRhaWxzCm15ICggJFRlc3RVc2VyTG9naW4sICRUZXN0VXNlcklEICkgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgpOwoKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZwpteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTZXJ2aWNlVHlwZU5hbWUySUQgPSByZXZlcnNlICV7JFNlcnZpY2VUeXBlTGlzdH07CgojIC0tLQoKIwojIENyZWF0ZSBuZXcgc2VydmljZXMKIwpteSBAU2VydmljZXMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAnU2VydmljZTAnIC4gJFJhbmRvbUlELAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCgogICAgICAgICMgLS0tCiAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgIyAtLS0KICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAnU2VydmljZTEnIC4gJFJhbmRvbUlELAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCgogICAgICAgICMgLS0tCiAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgIyAtLS0KICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAnU2VydmljZTInIC4gJFJhbmRvbUlELAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCgogICAgICAgICMgLS0tCiAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgIyAtLS0KICAgIH0sCik7Cgpmb3IgbXkgJFNlcnZpY2VEYXRhIChAU2VydmljZXMpIHsKICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCggJXskU2VydmljZURhdGF9ICk7CgogICAgIyBzYW5pdHkgdGVzdAogICAgJFNlbGYtPklzTm90KAogICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgdW5kZWYsCiAgICAgICAgIlNlcnZpY2VBZGQoKSBmb3IgJFNlcnZpY2VEYXRhLT57TmFtZX0sIFNlcnZpY2VJRCBzaG91bGQgbm90IGJlIHVuZGVmIiwKICAgICk7CgogICAgIyBzdG9yZSB0aGUgU2VydmljZUlECiAgICAkU2VydmljZURhdGEtPntTZXJ2aWNlSUR9ID0gJFNlcnZpY2VJRDsKfQoKIwojIEFzc2lnbiBzZXJ2aWNlcyB0byBjdXN0b21lciAoMCBhbmQgMSkKIwpteSAkU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlc1swXS0+e1NlcnZpY2VJRH0sCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IHRlc3QKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKCkgZm9yIHVzZXIgJFRlc3RDdXN0b21lclVzZXJMb2dpbiwgYW5kIFNlcnZpY2UgJFNlcnZpY2VzWzBdLT57TmFtZX0iCiAgICAgICAgLiAiIHdpdGggdHJ1ZSIsCik7CgokU3VjY2VzcyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlc1sxXS0+e1NlcnZpY2VJRH0sCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IHRlc3QKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKCkgZm9yIHVzZXIgJFRlc3RDdXN0b21lclVzZXJMb2dpbiwgYW5kIFNlcnZpY2UgJFNlcnZpY2VzWzFdLT57TmFtZX0iCiAgICAgICAgLiAiIHdpdGggdHJ1ZSIsCik7CgojCiMgQ3JlYXRlIGEgdGVzdCB0aWNrZXRzCiMKbXkgQFRpY2tldERhdGE7CmZvciBteSAkSXRlbSAoIDAgLi4gMSApIHsKICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgICAgICBUaXRsZSAgICAgICAgID0+ICggJEl0ZW0gPT0gMCApID8gJFNlcnZpY2VzWzBdLT57U2VydmljZUlEfSA6ICd0ZXN0JywKICAgICAgICBRdWV1ZUlEICAgICAgID0+IDEsCiAgICAgICAgTG9jayAgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICBQcmlvcml0eSAgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgU3RhdGVJRCAgICAgICA9PiAxLAogICAgICAgIFR5cGVJRCAgICAgICAgPT4gMSwKICAgICAgICBDdXN0b21lclVzZXIgID0+ICggJEl0ZW0gPT0gMCApID8gJFRlc3RDdXN0b21lclVzZXJMb2dpbiA6IHVuZGVmLAogICAgICAgIE93bmVySUQgICAgICAgPT4gMSwKICAgICAgICBSZXNwb25zaWJsZUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgKTsKCiAgICAjIHNhbml0eSBjaGVja3MKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRUaWNrZXRJRCwKICAgICAgICAiVGlja2V0Q3JlYXRlKCkgLSAkVGlja2V0SUQiLAogICAgKTsKCiAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICA9PiAkVXNlcklELAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICBJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXQgKSwKICAgICAgICAiVGlja2V0R2V0KCkgLSBHZXQgVGlja2V0IHdpdGggSUQgJFRpY2tldElELiIsCiAgICApOwoKICAgIHB1c2ggQFRpY2tldERhdGEsIFwlVGlja2V0OwoKfQoKIyBSdW4oKSB0ZXN0cwpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICA9PiAnTm8gUGFyYW1zJywKICAgICAgICBDb25maWcgID0+IHVuZGVmLAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdObyBVc2VySUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiB1bmRlZiwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAndGVzdCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm8gVGlja2V0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+IHVuZGVmLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAndGVzdCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm8gQ29uZmlnJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4ge30sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgQ29uZmlnJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgTm9BZ2VudE5vdGlmeSA9PiAwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIFRpY2tldCBGb3JtYXQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gMSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIENvbmZpZyBGb3JtYXQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1dyb25nIFNlcnZpY2UnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICdOb3RFeGlzdGluZycgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnV3JvbmcgU2VydmljZUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVGlja2V0ID0+ICRUaWNrZXREYXRhWzBdLAogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICdOb3RFeGlzdGluZycgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTm90IGFzc2lnbmVkIFNlcnZpY2UnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICRTZXJ2aWNlc1syXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ05vdCBBc3NpZ25lZCBTZXJ2aWNlSUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VzWzJdLT57U2VydmljZUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJUaWNrZXQgd2l0aG91dCBjdXN0b21lciB3aXRoIFNlcnZpY2UgJFNlcnZpY2VzWzBdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMV0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VzWzBdLT57TmFtZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiVGlja2V0IHdpdGhvdXQgY3VzdG9tZXIgd2l0aCBTZXJ2aWNlSUQgJFNlcnZpY2VzWzFdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMV0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VzWzBdLT57U2VydmljZUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFNlcnZpY2UgJFNlcnZpY2VzWzBdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICRTZXJ2aWNlc1swXS0+e05hbWV9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgU2VydmljZSAkU2VydmljZXNbMV0tPntOYW1lfSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJFNlcnZpY2VzWzFdLT57TmFtZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAiQ29ycmVjdCBTZXJ2aWNlSUQgJFNlcnZpY2VzWzBdLT57TmFtZX0iLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VzWzBdLT57U2VydmljZUlEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFNlcnZpY2VJRCAkU2VydmljZXNbMV0tPntOYW1lfSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZXNbMV0tPntTZXJ2aWNlSUR9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIkNvcnJlY3QgVGlja2V0LT5UaXRsZSIsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFRpY2tldCA9PiAkVGlja2V0RGF0YVswXSwKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAnPE9UT0JPX1RJQ0tFVF9UaXRsZT4nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gIldyb25nIFRpY2tldC0+Tm90RXhpc3RpbmciLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJzxPVE9CT19USUNLRVRfTm90RXhpc3Rpbmc+JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICJDb3JyZWN0IFVzaW5nIERpZmZlcmVudCBVc2VySUQiLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICBUaWNrZXQgPT4gJFRpY2tldERhdGFbMF0sCiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICRTZXJ2aWNlc1swXS0+e05hbWV9LAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAkVGVzdFVzZXJJRCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH0sCik7Cgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewoKICAgICMgbWFrZSBhIGRlZXAgY29weSB0byBhdm9pZCBjaGFuZ2luZyB0aGUgZGVmaW5pdGlvbgogICAgbXkgJE9yaWdUZXN0ID0gZGNsb25lKCRUZXN0KTsKCiAgICBteSAkU3VjY2VzcyA9ICRNb2R1bGVPYmplY3QtPlJ1bigKICAgICAgICAleyAkVGVzdC0+e0NvbmZpZ30gfSwKICAgICAgICBQcm9jZXNzRW50aXR5SUQgICAgICAgICAgPT4gJ1AxJywKICAgICAgICBBY3Rpdml0eUVudGl0eUlEICAgICAgICAgPT4gJ0ExJywKICAgICAgICBUcmFuc2l0aW9uRW50aXR5SUQgICAgICAgPT4gJ1QxJywKICAgICAgICBUcmFuc2l0aW9uQWN0aW9uRW50aXR5SUQgPT4gJ1RBMScsCiAgICApOwoKICAgIGlmICggJFRlc3QtPntTdWNjZXNzfSApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJE1vZHVsZU5hbWUgUnVuKCkgLSBUZXN0OickVGVzdC0+e05hbWV9JyB8IGV4ZWN1dGVkIHdpdGggVHJ1ZSIKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aWNrZXQKICAgICAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0RGF0YVswXS0+e1RpY2tldElEfTsKICAgICAgICBpZiAoICRUZXN0LT57Q29uZmlnfS0+e1RpY2tldH0tPntUaWNrZXRJRH0gZXEgJFRpY2tldERhdGFbMV0tPntUaWNrZXRJRH0gKSB7CiAgICAgICAgICAgICRUaWNrZXRJRCA9ICRUaWNrZXREYXRhWzFdLT57VGlja2V0SUR9OwogICAgICAgIH0KCiAgICAgICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIEFUVFJJQlVURToKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkVGVzdC0+e0NvbmZpZ30tPntDb25maWd9IH0gKSB7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGRlZmluZWQgJFRpY2tldHskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICIkTW9kdWxlTmFtZSAtIFRlc3Q6JyRUZXN0LT57TmFtZX0nIHwgQXR0cmlidXRlOiAkQXR0cmlidXRlIGZvciBUaWNrZXRJRDoiCiAgICAgICAgICAgICAgICAgICAgLiAiICRUaWNrZXRJRCBleGlzdHMgd2l0aCBUcnVlIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRFeHBlY3RlZFZhbHVlID0gJFRlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkT3JpZ1Rlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9CiAgICAgICAgICAgICAgICA9fiBte1xBPE9UT0JPX1RJQ0tFVF8oW0EtWmEtejAtOV9dKyk+XHp9bXN4CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRFeHBlY3RlZFZhbHVlID0gJFRpY2tldHskMX0gLy8gJyc7CiAgICAgICAgICAgICAgICAkU2VsZi0+SXNOb3QoCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntDb25maWd9LT57Q29uZmlnfS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICRPcmlnVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgIiRNb2R1bGVOYW1lIC0gVGVzdDonJFRlc3QtPntOYW1lfScgfCBBdHRyaWJ1dGU6ICRBdHRyaWJ1dGUgdmFsdWU6ICRPcmlnVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57JEF0dHJpYnV0ZX0gc2hvdWxkIGJlZW4gcmVwbGFjZWQiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFRpY2tldHskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICRFeHBlY3RlZFZhbHVlLAogICAgICAgICAgICAgICAgIiRNb2R1bGVOYW1lIC0gVGVzdDonJFRlc3QtPntOYW1lfScgfCBBdHRyaWJ1dGU6ICRBdHRyaWJ1dGUgZm9yIFRpY2tldElEOiIKICAgICAgICAgICAgICAgICAgICAuICIgJFRpY2tldElEIG1hdGNoIGV4cGVjdGVkIHZhbHVlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICggJE9yaWdUZXN0LT57Q29uZmlnfS0+e0NvbmZpZ30tPntVc2VySUR9ICkgewogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkVGVzdC0+e0NvbmZpZ30tPntDb25maWd9LT57VXNlcklEfSwKICAgICAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAgICAgIiRNb2R1bGVOYW1lIC0gVGVzdDonJFRlc3QtPntOYW1lfScgfCBBdHRyaWJ1dGU6IFVzZXJJRCBmb3IgVGlja2V0SUQ6IgogICAgICAgICAgICAgICAgICAgIC4gIiAkVGlja2V0SUQgc2hvdWxkIGJlIHJlbW92ZWQgKGFzIGl0IHdhcyB1c2VkKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRNb2R1bGVOYW1lIFJ1bigpIC0gVGVzdDonJFRlc3QtPntOYW1lfScgfCBleGVjdXRlZCB3aXRoIEZhbHNlIgogICAgICAgICk7CiAgICB9Cn0KCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/ProcessManagement/Process.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1Byb2Nlc3NNYW5hZ2VtZW50L1Byb2Nlc3MudAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgoKb3VyICRTZWxmOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkUXVldWVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwpteSAkUHJvY2Vzc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2VzcycpOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgID0+IDEsCiAgICAgICAgVXNlVG1wQXJ0aWNsZURpciA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIGNyZWF0ZSBjb21tb24gb2JqZWN0cyB0byBiZSB1c2VkIGluIEFjdGl2aXR5RGlhbG9nIG9iamVjdCBjcmVhdGlvbgpteSAlQ29tbW9uT2JqZWN0OwokQ29tbW9uT2JqZWN0e0FjdGl2aXR5T2JqZWN0fSAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eScpOwokQ29tbW9uT2JqZWN0e0FjdGl2aXR5RGlhbG9nT2JqZWN0fSAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eURpYWxvZycpOwokQ29tbW9uT2JqZWN0e1RyYW5zaXRpb25PYmplY3R9ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uJyk7CiRDb21tb25PYmplY3R7VHJhbnNpdGlvbkFjdGlvbk9iamVjdH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb24nKTsKJENvbW1vbk9iamVjdHtUaWNrZXRPYmplY3R9ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiMgZGVmaW5lIG5lZWRlZCB2YXJpYWJsZXMKbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiMgY3JlYXRlIHNvbWUgcXVldWVzIGluIHRoZSBzeXN0ZW0KbXkgJVF1ZXVlRGF0YTEgPSAoCiAgICBOYW1lICAgICAgICAgICAgPT4gJ1F1ZXVlMScgLiAkUmFuZG9tSUQsCiAgICBWYWxpZElEICAgICAgICAgPT4gMSwKICAgIEdyb3VwSUQgICAgICAgICA9PiAxLAogICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICBTYWx1dGF0aW9uSUQgICAgPT4gMSwKICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgVXNlcklEICAgICAgICAgID0+IDEsCik7CgpteSAlUXVldWVEYXRhMiA9ICgKICAgIE5hbWUgICAgICAgICAgICA9PiAnUXVldWUyJyAuICRSYW5kb21JRCwKICAgIFZhbGlkSUQgICAgICAgICA9PiAxLAogICAgR3JvdXBJRCAgICAgICAgID0+IDEsCiAgICBTeXN0ZW1BZGRyZXNzSUQgPT4gMSwKICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICBDb21tZW50ICAgICAgICAgPT4gJ1NvbWUgY29tbWVudCcsCiAgICBVc2VySUQgICAgICAgICAgPT4gMSwKKTsKCm15ICVRdWV1ZURhdGEzID0gKAogICAgTmFtZSAgICAgICAgICAgID0+ICdRdWV1ZTMnIC4gJFJhbmRvbUlELAogICAgVmFsaWRJRCAgICAgICAgID0+IDEsCiAgICBHcm91cElEICAgICAgICAgPT4gMSwKICAgIFN5c3RlbUFkZHJlc3NJRCA9PiAxLAogICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICBTaWduYXR1cmVJRCAgICAgPT4gMSwKICAgIENvbW1lbnQgICAgICAgICA9PiAnU29tZSBjb21tZW50JywKICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAopOwoKbXkgJFF1ZXVlSUQxID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUFkZCglUXVldWVEYXRhMSk7CgojIHNhbml0eSBjaGVjawokU2VsZi0+SXNOb3QoCiAgICAkUXVldWVJRDEsCiAgICB1bmRlZiwKICAgICJRdWV1ZUFkZCgpIC0gQWRkZWQgcXVldWUgJyRRdWV1ZURhdGExe05hbWV9JyBmb3IgQUNMIGNoZWNrIC0gc2hvdWxkIG5vdCBiZSB1bmRlZiIKKTsKCm15ICRRdWV1ZUlEMiA9ICRRdWV1ZU9iamVjdC0+UXVldWVBZGQoJVF1ZXVlRGF0YTIpOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPklzTm90KAogICAgJFF1ZXVlSUQyLAogICAgdW5kZWYsCiAgICAiUXVldWVBZGQoKSAtIEFkZGVkIHF1ZXVlICckUXVldWVEYXRhMntOYW1lfScgZm9yIEFDTCBjaGVjayAtIHNob3VsZCBub3QgYmUgdW5kZWYiCik7CgpteSAkUXVldWVJRDMgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKCVRdWV1ZURhdGEzKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5Jc05vdCgKICAgICRRdWV1ZUlEMywKICAgIHVuZGVmLAogICAgIlF1ZXVlQWRkKCkgLSBBZGRlZCBxdWV1ZSAnJFF1ZXVlRGF0YTN7TmFtZX0nIGZvciBBQ0wgY2hlY2sgLSBzaG91bGQgbm90IGJlIHVuZGVmIgopOwoKbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKCiMgR2V0IFNlcnZpY2VPYmplY3QuCm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCiMgLS0tCiMgSVRTTUNvcmUKIyAtLS0KCiMgZ2V0IHRoZSBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgZnJvbSBnZW5lcmFsIGNhdGFsb2cKbXkgJFNlcnZpY2VUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKKTsKCiMgYnVpbGQgYSBsb29rdXAgaGFzaApteSAlU2VydmljZVR5cGVOYW1lMklEID0gcmV2ZXJzZSAleyRTZXJ2aWNlVHlwZUxpc3R9OwoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2xhIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTTEFUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXskU0xBVHlwZUxpc3R9OwoKIyAtLS0KCm15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gJFJhbmRvbUlELAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAoKICAgICMgLS0tCiAgICAjIElUU01Db3JlCiAgICAjIC0tLQogICAgVHlwZUlEICAgICAgPT4gJFNlcnZpY2VUeXBlTmFtZTJJRHtUcmFpbmluZ30sCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICMgLS0tCik7CgokU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlELAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgpteSAkU0xBSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKICAgIFNlcnZpY2VJRHMgPT4gWyRTZXJ2aWNlSURdLAogICAgTmFtZSAgICAgICA9PiAkUmFuZG9tSUQsCiAgICBWYWxpZElEICAgID0+IDEsCiAgICBVc2VySUQgICAgID0+IDEsCgogICAgIyAtLS0KICAgICMgSVRTTUNvcmUKICAgICMgLS0tCiAgICBUeXBlSUQgPT4gJFNMQVR5cGVOYW1lMklEe090aGVyfSwKCiAgICAjIC0tLQopOwoKbXkgJFRpY2tldElEID0gJENvbW1vbk9iamVjdHtUaWNrZXRPYmplY3R9LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICBRdWV1ZSAgICAgICAgPT4gJFF1ZXVlRGF0YTN7TmFtZX0sCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQgfHwgMCwKICAgICJUaWNrZXRDcmVhdGUoKSBUZXN0dGlja2V0IGZvciBVbml0dGVzdHMgY3JlYXRlZCIsCik7CgpteSBAVGVzdHMgPSAoCgogICAgIyBHZXQgb24gbm8gY29uZmlnCiAgICB7CiAgICAgICAgUHJvY2Vzc0dldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyAgICAgICAgICA9PiB7fSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICd1bmtub3duMTIzJywKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzR2V0KCkgKE5vIENvbmZpZyknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ0ZhbHNlJywKICAgICAgICB9CiAgICB9LAoKICAgICMgR2V0IG9uIG5vIFByb2Nlc3NFbnRpdHlJRAogICAgewogICAgICAgIFByb2Nlc3NHZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICd1bmtub3duJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzR2V0KCkgKHVua25vd24gUHJvY2Vzc0VudGl0eUlEKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgIH0KICAgIH0sCgogICAgewogICAgICAgIFByb2Nlc3NHZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1Byb2Nlc3NHZXQoKSAoTm8gUHJvY2Vzc0VudGl0eUlEKScsCiAgICAgICAgICAgIFRlc3RUeXBlID0+ICdGYWxzZScsCiAgICAgICAgfQogICAgfSwKCiAgICAjIEdldCBvbiBpbnZhbGlkIFByb2Nlc3NFbnRpdHlJRAogICAgewogICAgICAgIFByb2Nlc3NHZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICd1bmtub3duMTIzJywKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzR2V0KCkgKHVua25vd24gUHJvY2Vzc0VudGl0eUlEKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgIH0KICAgIH0sCgogICAgIyBHZXQgb24gdmFsaWQgUHJvY2Vzc0VudGl0eUlECiAgICB7CiAgICAgICAgUHJvY2Vzc0dldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzR2V0KCkgKGtub3duIFByb2Nlc3NFbnRpdHlJRCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ1Jlc3VsdCcsCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIEdldCBvbiB2YWxpZCBQcm9jZXNzRW50aXR5SUQgVVRGOAogICAgewogICAgICAgIFByb2Nlc3NHZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ8Okw7bDvMOfw4TDlsOc4oKs0LjRgcOhw6nDrcO6w7PDusOBw4nDjcOTw5rDscORLeOCq+OCueOCvy3nlKjov47kvb/nlKgt0K/Qt9GL0LonLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc0dldCgpIChrbm93biBQcm9jZXNzRW50aXR5SUQgVVRGOCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ1Jlc3VsdCcsCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+CiAgICAgICAgICAgICAgICAgICAgJ8Okw7bDvMOfw4TDlsOc4oKs0LjRgcOhw6nDrcO6w7PDusOBw4nDjcOTw5rDscORLeOCq+OCueOCvy3nlKjov47kvb/nlKgt0K/Qt9GL0LonLAogICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBMaXN0IG9uIGludmFsaWQgQ29uZmlnCiAgICB7CiAgICAgICAgUHJvY2Vzc0xpc3QgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAnUDEnLAogICAgICAgICAgICBQcm9jZXNzU3RhdGUgICAgPT4gWyAnQWN0aXZlJywgJ0ZhZGVBd2F5JywgJ0luYWN0aXZlJyBdLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgPT4gJ1Byb2Nlc3NMaXN0KCkgKGludmFsaWQgQ29uZmlnKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgIH0KICAgIH0sCgogICAgIyBMaXN0IG9uIHZhbGlkIENvbmZpZywgbWlzc2luZyBQcm9jZXNzU3RhdGUKICAgIHsKICAgICAgICBQcm9jZXNzTGlzdCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgUHJvY2Vzc1N0YXRlICAgID0+IFtdLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgPT4gJ1Byb2Nlc3NMaXN0KCkgKHZhbGlkIENvbmZpZywgbWlzc2luZyBQcm9jZXNzU3RhdGUpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBMaXN0IG9uIHZhbGlkIENvbmZpZywgcmlnaHQgUHJvY2Vzc1N0YXRlCiAgICB7CiAgICAgICAgUHJvY2Vzc0xpc3QgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIFByb2Nlc3NTdGF0ZSAgICA9PiBbICdBY3RpdmUnLCAnRmFkZUF3YXknLCAnSW5hY3RpdmUnIF0sCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc0xpc3QoKSAodmFsaWQgQ29uZmlnLCByaWdodCBQcm9jZXNzU3RhdGUpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdSZXN1bHQnLAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJ1AxJyA9PiAnQm9vayBPcmRlcnMnCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBMaXN0IG9uIHZhbGlkIENvbmZpZywgd3JvbmcgUHJvY2Vzc1N0YXRlCiAgICB7CiAgICAgICAgUHJvY2Vzc0xpc3QgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIFByb2Nlc3NTdGF0ZSAgICA9PiBbICdGYWRlQXdheScsICdJbmFjdGl2ZScgXSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzTGlzdCgpICh2YWxpZCBDb25maWcsIHdyb25nIFByb2Nlc3NTdGF0ZSknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgPT4gJ1Jlc3VsdCcsCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICA9PiB7fSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIExpc3Qgb24gdmFsaWQgQ29uZmlnLCB3cm9uZyBpbnRlcmZhY2UKICAgIHsKICAgICAgICBQcm9jZXNzTGlzdCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5RGlhbG9nJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0FEMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgID0+IFsnQ3VzdG9tZXJJbnRlcmZhY2UnXSwKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnQWN0aXZpdHkgRGlhbG9nIDEnLAogICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblNob3J0ID0+ICdBRDEgUHJvY2VzcyBTaG9ydCcsCiAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgPT4gJ0FEMSBQcm9jZXNzIExvbmcgZGVzY3JpcHRpb24nLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgID0+ICcwNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAnMicsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgPT4gJzA4LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+ICczJywKICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRzICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRfTWFrZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheSAgICAgICAgICA9PiAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uTG9uZyAgPT4gJ01ha2UgTG9uZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCA9PiAnTWFrZSBTaG9ydCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBGaWVsZE9yZGVyID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfTWFrZScsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgIFN1Ym1pdEFkdmljZVRleHQgPT4gJ05PVEU6IElmIHlvdSBzdWJtaXQgdGhlIGZvcm0gLi4uJywKICAgICAgICAgICAgICAgICAgICAgICAgU3VibWl0QnV0dG9uVGV4dCA9PiAnTWFrZSBhbiBpbnF1aXJ5JywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgUHJvY2Vzc1N0YXRlICAgID0+IFsnQWN0aXZlJ10sCiAgICAgICAgICAgIEludGVyZmFjZSAgICAgICA9PiBbJ0FnZW50SW50ZXJmYWNlJ10sCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc0xpc3QoKSAodmFsaWQgQ29uZmlnLCB3cm9uZyBJbnRlcmZhY2UpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdSZXN1bHQnLAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgPT4ge30sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBMaXN0IG9uIHZhbGlkIENvbmZpZywgcmlnaHQgaW50ZXJmYWNlCiAgICB7CiAgICAgICAgUHJvY2Vzc0xpc3QgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eURpYWxvZycgPT4gewogICAgICAgICAgICAgICAgICAgICdBRDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICA9PiBbJ0FnZW50SW50ZXJmYWNlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ0FjdGl2aXR5IERpYWxvZyAxJywKICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25TaG9ydCA9PiAnQUQxIFByb2Nlc3MgU2hvcnQnLAogICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgID0+ICdBRDEgUHJvY2VzcyBMb25nIGRlc2NyaXB0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICA9PiAnMDctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJzInLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgID0+ICcwOC0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAnMycsCiAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkX01ha2UgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgICAgICAgICAgPT4gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbkxvbmcgID0+ICdNYWtlIExvbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uU2hvcnQgPT4gJ01ha2UgU2hvcnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRPcmRlciA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkX01ha2UnLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICBTdWJtaXRBZHZpY2VUZXh0ID0+ICdOT1RFOiBJZiB5b3Ugc3VibWl0IHRoZSBmb3JtIC4uLicsCiAgICAgICAgICAgICAgICAgICAgICAgIFN1Ym1pdEJ1dHRvblRleHQgPT4gJ01ha2UgYW4gaW5xdWlyeScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIFByb2Nlc3NTdGF0ZSAgICA9PiBbJ0FjdGl2ZSddLAogICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgPT4gWydBZ2VudEludGVyZmFjZSddLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgPT4gJ1Byb2Nlc3NMaXN0KCkgKHZhbGlkIENvbmZpZywgcmlnaHQgSW50ZXJmYWNlKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICA9PiAnUmVzdWx0JywKICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgID0+IHsgJ1AxJyA9PiAnQm9vayBPcmRlcnMnIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQcm9jZXNzU3RhcnRwb2ludEdldCBvbiBpbnZhbGlkIENvbmZpZwogICAgewogICAgICAgIFByb2Nlc3NTdGFydHBvaW50R2V0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxJywKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgID0+ICdQcm9jZXNzU3RhcnRwb2ludEdldCgpIChpbnZhbGlkIFN0YXJ0KScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUHJvY2Vzc1N0YXJ0cG9pbnRHZXQgb24gdmFsaWQgQ29uZmlnCiAgICB7CiAgICAgICAgUHJvY2Vzc1N0YXJ0cG9pbnRHZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PiAnUHJvY2Vzc1N0YXJ0cG9pbnRHZXQoKSAodmFsaWQgU3RhcnQpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgID0+ICdSZXN1bHQnLAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgQWN0aXZpdHlzZXQgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiBvbiBtaXNzaW5nIFByb2Nlc3NFbnRpdHlJRAogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+IHVuZGVmLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4gJ1Byb2Nlc3NUcmFuc2l0aW9uKCkgKG1pc3NpbmcgUHJvY2Vzc0VudGl0eUlEKScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICAgPT4gJ0ZhbHNlJywKICAgICAgICB9CiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiBvbiBtaXNzaW5nIEFjdGl2aXR5RW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzVHJhbnNpdGlvbiA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+IHVuZGVmLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+ICdQcm9jZXNzVHJhbnNpdGlvbigpIChtaXNzaW5nIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgIH0KICAgIH0sCgogICAgIyBUcmFuc2l0aW9uIG9uIG1pc3NpbmcgVGlja2V0SUQKICAgIHsKICAgICAgICBQcm9jZXNzVHJhbnNpdGlvbiA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PiAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWlzc2luZyBUaWNrZXRJRCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgfQogICAgfSwKCiAgICAjIFRyYW5zaXRpb24gb24gbWlzc2luZyBVc2VySUQKICAgIHsKICAgICAgICBQcm9jZXNzVHJhbnNpdGlvbiA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IHVuZGVmLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+ICdQcm9jZXNzVHJhbnNpdGlvbigpIChtaXNzaW5nIFVzZXJJRCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgfQogICAgfSwKCiAgICAjIFRyYW5zaXRpb24gb24gaW52YWxpZCBUaWNrZXRJRAogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4gJ1Byb2Nlc3NUcmFuc2l0aW9uKCkgKGludmFsaWQgVGlja2V0SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgIH0KICAgIH0sCgogICAgIyBUcmFuc2l0aW9uIG9uIGludmFsaWQgUHJvY2VzcyBDb25maWd1cmF0aW9uCiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PiAnUHJvY2Vzc1RyYW5zaXRpb24oKSAoaW52YWxpZCBQcm9jZXNzIENvbmZpZ3VyYXRpb24pJywKICAgICAgICAgICAgVGVzdFR5cGUgICAgICAgICA9PiAnRmFsc2UnLAogICAgICAgIH0KICAgIH0sCgogICAgIyBUcmFuc2l0aW9uIG9uIG1pc3NpbmcgQWN0aXZpdHNldHMgaW4gUHJvY2Vzcy0+UGF0aAogICAgewogICAgICAgIFByb2Nlc3NUcmFuc2l0aW9uID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PiAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWlzc2luZyByZXF1aXJlZCBBY3Rpdml0eSBpbiBQYXRoIENvbmZpZyknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgICAgIERlYnVnICAgICAgICAgICAgPT4gMSwKICAgICAgICB9CiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiBvbiBubyBtYXRjaGluZyBUcmFuc2l0aW9uCiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OlRyYW5zaXRpb24nID0+IHsKICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDEnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICc5OTk5OTk5OTk5OTk5OTk5OTk5OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDInLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICc5OTk5OTk5OTk5OTk5OTk5OTk5OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PiAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobm8gbWF0Y2hpbmcgVHJhbnNpdGlvbiknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdGYWxzZScsCiAgICAgICAgICAgIERlYnVnICAgICAgICAgICAgPT4gMSwKICAgICAgICB9CiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiBvbiBtYXRjaGluZyBUcmFuc2l0aW9uIENoZWNrIE9ubHkKICAgIHsKICAgICAgICBQcm9jZXNzVHJhbnNpdGlvbiA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6VHJhbnNpdGlvbicgPT4gewogICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1RyYW5zaXRpb24gMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJzk5OTk5OTk5OTk5OTk5OTk5OTk5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1RyYW5zaXRpb24gMicsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAnUHJvY2VzcyBVbml0dGVzdCBUZXN0dGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMiBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMyBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBNCcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgNCBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoZWNrT25seSAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PiAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWF0Y2hpbmcgVHJhbnNpdGlvbiBDaGVjayBPbmx5KScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgICAgPT4gJ1Jlc3VsdCcsCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFRyYW5zaXRpb24gb24gbWF0Y2hpbmcgVHJhbnNpdGlvbiBjaGFuZ2UgQWN0aXZpdHlFbnRpdHlJRCBvbiBUaWNrZXQKICAgIHsKICAgICAgICBQcm9jZXNzVHJhbnNpdGlvbiA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6VHJhbnNpdGlvbicgPT4gewogICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1RyYW5zaXRpb24gMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJzk5OTk5OTk5OTk5OTk5OTk5OTk5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1RyYW5zaXRpb24gMicsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAnUHJvY2VzcyBVbml0dGVzdCBUZXN0dGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMiBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMyBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBNCcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgNCBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoZWNrT25seSAgICAgICAgPT4gMCwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PiAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWF0Y2hpbmcgVHJhbnNpdGlvbiBjaGFuZ2UgQWN0aXZpdHlFbnRpdHlJRCknLAogICAgICAgICAgICBUZXN0VHlwZSAgICAgICAgID0+ICdUcnVlJywKICAgICAgICB9CiAgICB9LAoKICAgICMgUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0IG9uIG5vIEFjdGl2aXR5RW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gdW5kZWYsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQoKSAoU2V0IEFjdGl2aXR5RW50aXR5SUQgb24gVGlja2V0IHdpdGggbm8gQWN0aXZpdHlFbnRpdHlJRCknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnRmFsc2UnLAogICAgICAgIH0KICAgIH0sCgogICAgIyBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgb24gbm8gUHJvY2Vzc0VudGl0eUlECiAgICB7CiAgICAgICAgUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiB1bmRlZiwKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0KCkgKFNldCBBY3Rpdml0eUVudGl0eUlEIG9uIFRpY2tldCB3aXRoIG5vIFByb2Nlc3NFbnRpdHlJRCknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnRmFsc2UnLAogICAgICAgIH0KICAgIH0sCgogICAgIyBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgb24gbm8gVGlja2V0SUQKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiB1bmRlZiwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0KCkgKFNldCBBY3Rpdml0eUVudGl0eUlEIG9uIFRpY2tldCB3aXRoIG5vIFRpY2tldElEKScsCiAgICAgICAgICAgIFRlc3RUeXBlID0+ICdGYWxzZScsCiAgICAgICAgfQogICAgfSwKCiAgICAjIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCBvbiBpbnZhbGlkIEFjdGl2aXR5RW50aXR5SUQKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTWVzc2FnZSAgICAgICAgICA9PgogICAgICAgICAgICAgICAgJ1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCgpIChTZXQgQWN0aXZpdHlFbnRpdHlJRCBvbiBUaWNrZXQgd2l0aCBpbnZhbGlkIEFjdGl2aXR5RW50aXR5SUQpJywKICAgICAgICAgICAgVGVzdFR5cGUgPT4gJ0ZhbHNlJywKICAgICAgICB9CiAgICB9LAoKICAgICMgUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0IG9uIGludmFsaWQgUHJvY2Vzc0VudGl0eUlECiAgICB7CiAgICAgICAgUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0ID0+IHsKICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6QWN0aXZpdHknID0+IHsKICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0FjdGl2aXR5IDEgb3B0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMicsCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJ1AyJywKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTEnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0KCkgKFNldCBBY3Rpdml0eUVudGl0eUlEIG9uIFRpY2tldCB3aXRoIGludmFsaWQgUHJvY2Vzc0VudGl0eUlEKScsCiAgICAgICAgICAgIFRlc3RUeXBlID0+ICdGYWxzZScsCiAgICAgICAgfQogICAgfSwKCiAgICAjIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCBvbiB2YWxpZCBDb25maWcKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEICA9PiAnUDEnLAogICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQoKSAoU2V0IEFjdGl2aXR5RW50aXR5SUQgb24gVGlja2V0IHdpdGggdmFsaWQgQ29uZmlnKScsCiAgICAgICAgICAgIFRlc3RUeXBlID0+ICdUcnVlJywKICAgICAgICB9CiAgICB9LAoKICAgICMgUHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQgb24gaW52YWxpZCBDb25maWcKICAgIHsKICAgICAgICBQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJ1AxNycsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCgpIChTZXQgUHJvY2Vzc0VudGl0eUlEIG9uIFRpY2tldCB3aXRoIGludmFsaWQgUHJvY2Vzc0VudGl0eUlEKScsCiAgICAgICAgICAgIFRlc3RUeXBlID0+ICdGYWxzZScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCBvbiBpbnZhbGlkIFRpY2tldElECiAgICB7CiAgICAgICAgUHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICA9PiB1bmRlZiwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICA9PgogICAgICAgICAgICAgICAgJ1Byb2Nlc3NUaWNrZXRQcm9jZXNzU2V0KCkgKFNldCBQcm9jZXNzRW50aXR5SUQgb24gVGlja2V0IHdpdGggaW52YWxpZCBUaWNrZXRJRCknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnRmFsc2UnLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQgb24gdmFsaWQgQ29uZmlnCiAgICB7CiAgICAgICAgUHJvY2Vzc1RpY2tldFByb2Nlc3NTZXQgPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3MnID0+IHsKICAgICAgICAgICAgICAgICAgICAnUDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnQm9vayBPcmRlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVUaW1lICAgICAgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJzE3LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICAgICAgICA9PiAnQWN0aXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eSAgICAgICA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5RGlhbG9nID0+ICdBRDEnLAogICAgICAgICAgICAgICAgICAgICAgICBQYXRoICAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICdQMScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCgpIChTZXQgUHJvY2Vzc0VudGl0eUlEIG9uIFRpY2tldCB3aXRoIHZhbGlkIENvbmZpZyknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnVHJ1ZScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBUcmFuc2l0aW9uICsgUXVldWVNb3ZlIFRyYW5zaXRpb25BY3Rpb24gb24gbWF0Y2hpbmcgVHJhbnNpdGlvbiBjaGFuZ2UgQWN0aXZpdHlFbnRpdHlJRCBvbiBUaWNrZXQKICAgICMgYW5kIG1vdmUgaXQgdG8gUXVldWUxCiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OlRyYW5zaXRpb24nID0+IHsKICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDEnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICc5OTk5OTk5OTk5OTk5OTk5OTk5OScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnVDInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDInLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbkFjdGlvbiA9PiBbJ1RBMSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0E0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpBY3Rpdml0eScgPT4gewogICAgICAgICAgICAgICAgICAgICdBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMSBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMiBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgMyBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdBNCcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQWN0aXZpdHkgNCBvcHRpb25hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICcxNi0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2cgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQyJywKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpUcmFuc2l0aW9uQWN0aW9uJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1RBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ1F1ZXVlIE1vdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGUgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb246OlRpY2tldFF1ZXVlU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+ICRRdWV1ZURhdGExe05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdUQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICdRdWV1ZSBNb3ZlJywKICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uOjpUaWNrZXRRdWV1ZVNldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkUXVldWVEYXRhMntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAnVEEzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICA9PiAnUXVldWUgTW92ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6VHJhbnNpdGlvbkFjdGlvbjo6VGlja2V0UXVldWVTZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gJFF1ZXVlRGF0YTN7TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hlY2tPbmx5ICAgICAgICA9PiAwLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWF0Y2hpbmcgVHJhbnNpdGlvbiBjaGFuZ2UgQWN0aXZpdHlFbnRpdHlJRCBhbmQgQWN0aW9uIFF1ZXVlIE1vdmUgdG8gTWlzYyknLAogICAgICAgICAgICBUZXN0VHlwZSA9PiAnVHJ1ZScsCiAgICAgICAgfQogICAgfSwKCiAgICAjIFRyYW5zaXRpb24gKyBRdWV1ZU1vdmUgVHJhbnNpdGlvbkFjdGlvbiBvbiBtYXRjaGluZyBUcmFuc2l0aW9uIGNoYW5nZSBBY3Rpdml0eUVudGl0eUlEIG9uIFRpY2tldCAxCiAgICAjIGJhY2sgdG8gQTEgYW5kIG1vdmUgaXQgYmFjayB0byBRdWV1ZTMKICAgIHsKICAgICAgICBQcm9jZXNzVHJhbnNpdGlvbiA9PiB7CiAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAnUHJvY2Vzczo6VHJhbnNpdGlvbicgPT4gewogICAgICAgICAgICAgICAgICAgICdUMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1RyYW5zaXRpb24gMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJzk5OTk5OTk5OTk5OTk5OTk5OTk5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJ1RyYW5zaXRpb24gMicsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAnUHJvY2VzcyBVbml0dGVzdCBUZXN0dGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ1Q0JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAnVHJhbnNpdGlvbiA0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmQxID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZHMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICdQcm9jZXNzIFVuaXR0ZXN0IFRlc3R0aWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnUHJvY2VzcycgPT4gewogICAgICAgICAgICAgICAgICAgICdQMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdCb29rIE9yZGVycycsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlVGltZSAgICAgICAgICA9PiAnMTctMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgID0+ICdBY3RpdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydEFjdGl2aXR5ICAgICAgID0+ICdBMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHlEaWFsb2cgPT4gJ0FEMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1QxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0EyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zaXRpb25BY3Rpb24gPT4gWydUQTEnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUMycgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICdBNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDQnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uQWN0aW9uID0+IFsnVEEzJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAyIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0EzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAzIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0E0JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSA0IG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OlRyYW5zaXRpb25BY3Rpb24nID0+IHsKICAgICAgICAgICAgICAgICAgICAnVEExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICA9PiAnUXVldWUgTW92ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6VHJhbnNpdGlvbkFjdGlvbjo6VGlja2V0UXVldWVTZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gJFF1ZXVlRGF0YTF7TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ1RBMicgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ1F1ZXVlIE1vdmUnLAogICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGUgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlRyYW5zaXRpb25BY3Rpb246OlRpY2tldFF1ZXVlU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+ICRRdWV1ZURhdGEye05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdUQTMnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICdRdWV1ZSBNb3ZlJywKICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uOjpUaWNrZXRRdWV1ZVNldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkUXVldWVEYXRhM3tOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCAgPT4gJ1AxJywKICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTMnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGVja09ubHkgICAgICAgID0+IDAsCiAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgICAgPT4KICAgICAgICAgICAgICAgICdQcm9jZXNzVHJhbnNpdGlvbigpIChtYXRjaGluZyBUcmFuc2l0aW9uIGNoYW5nZSBBY3Rpdml0eUVudGl0eUlEIGFuZCBUcmFuc2l0aW9uQWN0aW9uIFF1ZXVlIE1vdmUgdG8gUmF3KScsCiAgICAgICAgICAgIFRlc3RUeXBlID0+ICdUcnVlJywKICAgICAgICB9CiAgICB9LAoKICAgICMgVHJhbnNpdGlvbiArIFRpY2tldFNlcnZpY2VTZXQgKyBUaWNrZXRTTEFTZXQgVHJhbnNpdGlvbkFjdGlvbiBvbiBtYXRjaGluZyBUcmFuc2l0aW9uIGNoYW5nZSBTZXJ2aWNlIGFuZCBTTEEgb24gVGlja2V0CiAgICB7CiAgICAgICAgUHJvY2Vzc1RyYW5zaXRpb24gPT4gewogICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OlRyYW5zaXRpb24nID0+IHsKICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdUcmFuc2l0aW9uIDEnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZDEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJ1Byb2Nlc3MgVW5pdHRlc3QgVGVzdHRpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJRCAgID0+ICcxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1AxJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ0Jvb2sgT3JkZXJzJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAnMTYtMDItMjAxMiAxMzozNzowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgICAgICAgPT4gJ0FjdGl2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWN0aXZpdHkgICAgICAgPT4gJ0ExJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBY3Rpdml0eURpYWxvZyA9PiAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCAgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVDEnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlFbnRpdHlJRCA9PiAnQTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2l0aW9uQWN0aW9uID0+IFsgJ1RBMScsICdUQTInIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQTInID0+IHt9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ1Byb2Nlc3M6OkFjdGl2aXR5JyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ0ExJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAxIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgJ0EyJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdBY3Rpdml0eSAyIG9wdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJzE2LTAyLTIwMTIgMTM6Mzc6MDAnLAogICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAnMScsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgICAgID0+ICcxNy0wMi0yMDEyIDEzOjM3OjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJzEnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUQxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBRDInLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdQcm9jZXNzOjpUcmFuc2l0aW9uQWN0aW9uJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1RBMScgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ1NlcnZpY2UgU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uOjpUaWNrZXRTZXJ2aWNlU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICdUQTInID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICdTTEEgU2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpUcmFuc2l0aW9uQWN0aW9uOjpUaWNrZXRTTEFTZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xBSUQgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgID0+ICdQMScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJ0ExJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hlY2tPbmx5ICAgICAgICA9PiAwLAogICAgICAgICAgICBNZXNzYWdlICAgICAgICAgID0+CiAgICAgICAgICAgICAgICAnUHJvY2Vzc1RyYW5zaXRpb24oKSAobWF0Y2hpbmcgVHJhbnNpdGlvbiBBY3Rpb25zIFNlcnZpY2UgU2V0IGFuZCBTTEEgU2V0KScsCiAgICAgICAgICAgIFRlc3RUeXBlICAgICAgID0+ICdUaWNrZXRWYWx1ZXMnLAogICAgICAgICAgICBFeHBlY3RlZFJlc3VsdCA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIFNMQUlEICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCik7Cgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewogICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NUcmFuc2l0aW9ufSApIHsKCiAgICAgICAgIyBTZXQgQ29uZmlnCiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntDb25maWd9ICkgKSB7CiAgICAgICAgICAgIGZvciBteSAkQ29uZmlnICggc29ydCBrZXlzICV7ICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259LT57Q29uZmlnfSB9ICkgewogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntDb25maWd9LT57JENvbmZpZ30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIElmIHdlIGhhdmUgYSB0ZXN0IHdpdGggZGVidWcgb24sIHdlIG5lZWQgYSBuZXcgUHJvY2Vzc09iamVjdAogICAgICAgICMgd2l0aCBEZWJ1ZyB0dXJuZWQgb24KICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259LT57RGVidWd9ICkgewogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IHVuZGVmOwogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2Vzcy0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAlQ29tbW9uT2JqZWN0LAogICAgICAgICAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgICAgICAgICBEZWJ1ZyAgICAgICAgPT4gJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntEZWJ1Z30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGV4Y3VzZSBwcm9jZXNzIG9iamVjdCBjYWxsCiAgICAgICAgbXkgJFJlc3VsdCA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzVHJhbnNpdGlvbiggJXsgJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0gfSApOwoKICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259LT57VGVzdFR5cGV9IGVxICdGYWxzZScgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NUcmFuc2l0aW9uIC0gQ2hlY2sgb24gRmFsc2UKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259LT57TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntUZXN0VHlwZX0gZXEgJ1RydWUnICkgewoKICAgICAgICAgICAgIyBQcm9jZXNzVHJhbnNpdGlvbiAtIENoZWNrIG9uIFRydWUKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NUcmFuc2l0aW9ufS0+e1Rlc3RUeXBlfSBlcSAnUmVzdWx0JyApIHsKICAgICAgICAgICAgbXkgJEV4cGVjdGVkUmVzdWx0ID0gJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntSZXN1bHR9OwoKICAgICAgICAgICAgIyBQcm9jZXNzVHJhbnNpdGlvbiAtIENoZWNrIGdpdmVuIGFuZCBleHBlY3RlZCByZXN1bHQKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRFeHBlY3RlZFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc1RyYW5zaXRpb259LT57TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntUZXN0VHlwZX0gZXEgJ1RpY2tldFZhbHVlcycgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NUcm5zaXRpb24gLSBDaGVjayB0aWNrZXQgdmFsdWVzIGFmdGVyIGFsbCB0cmFuc2l0aW9uIGFjdGlvbnMKICAgICAgICAgICAgbXkgJVRpY2tldCA9ICRDb21tb25PYmplY3R7VGlja2V0T2JqZWN0fS0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkVGVzdC0+e1Byb2Nlc3NUcmFuc2l0aW9ufS0+e0V4cGVjdGVkUmVzdWx0fSB9ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRUaWNrZXR7JEF0dHJpYnV0ZX0gLy8gJycsCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntFeHBlY3RlZFJlc3VsdH0tPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntNZXNzYWdlfSAtIFRpY2tldCAkQXR0cmlidXRlIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGFkIGEgdGVzdCB3aXRoIGRlYnVnIG9uLCByZXN0b3JlIFByb2Nlc3NPYmplY3QgdG8gZGVmYXVsdAogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzVHJhbnNpdGlvbn0tPntEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9ICkgewoKICAgICAgICAjIFNldCBDb25maWcKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRQcm9jZXNzU2V0fS0+e0NvbmZpZ30gKSApIHsKICAgICAgICAgICAgZm9yIG15ICRDb25maWcgKCBzb3J0IGtleXMgJXsgJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0tPntDb25maWd9IH0gKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRQcm9jZXNzU2V0fS0+e0NvbmZpZ30tPnskQ29uZmlnfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGF2ZSBhIHRlc3Qgd2l0aCBkZWJ1ZyBvbiwgd2UgbmVlZCBhIG5ldyBQcm9jZXNzT2JqZWN0CiAgICAgICAgIyB3aXRoIERlYnVnIHR1cm5lZCBvbgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0tPntEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgICAgIERlYnVnICAgICAgICA9PiAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRQcm9jZXNzU2V0fS0+e0RlYnVnfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZXhlY3V0ZSBwcm9jZXNzIG9iamVjdCBjYWxsCiAgICAgICAgbXkgJFJlc3VsdCA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzVGlja2V0UHJvY2Vzc1NldCggJXsgJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0gfSApOwoKICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9LT57VGVzdFR5cGV9IGVxICdGYWxzZScgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NUaWNrZXRQcm9jZXNzU2V0IC0gQ2hlY2sgb24gRmFsc2UKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc1RpY2tldFByb2Nlc3NTZXR9LT57TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0tPntUZXN0VHlwZX0gZXEgJ1RydWUnICkgewoKICAgICAgICAgICAgIyBQcm9jZXNzVGlja2V0UHJvY2Vzc1NldCAtIENoZWNrIG9uIFRydWUKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGFkIGEgdGVzdCB3aXRoIGRlYnVnIG9uLCByZXN0b3JlIFByb2Nlc3NPYmplY3QgdG8gZGVmYXVsdAogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzVGlja2V0UHJvY2Vzc1NldH0tPntEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0fSApIHsKCiAgICAgICAgIyBTZXQgQ29uZmlnCiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFRlc3QtPntQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXR9LT57Q29uZmlnfSApICkgewogICAgICAgICAgICBmb3IgbXkgJENvbmZpZyAoIHNvcnQga2V5cyAleyAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH0tPntDb25maWd9IH0gKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH0tPntDb25maWd9LT57JENvbmZpZ30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIElmIHdlIGhhdmUgYSB0ZXN0IHdpdGggZGVidWcgb24sIHdlIG5lZWQgYSBuZXcgUHJvY2Vzc09iamVjdAogICAgICAgICMgd2l0aCBEZWJ1ZyB0dXJuZWQgb24KICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0fS0+e0RlYnVnfSApIHsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSB1bmRlZjsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgJUNvbW1vbk9iamVjdCwKICAgICAgICAgICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgICAgICAgICAgRGVidWcgICAgICAgID0+ICRUZXN0LT57UHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0fS0+e0RlYnVnfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZXhlY3V0ZSBwcm9jZXNzIG9iamVjdCBjYWxsCiAgICAgICAgbXkgJFJlc3VsdCA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQoICV7ICRUZXN0LT57UHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0fSB9ICk7CgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXR9LT57VGVzdFR5cGV9IGVxICdGYWxzZScgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NUaWNrZXRBY3Rpdml0eVNldCAtIENoZWNrIG9uIEZhbHNlCiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRSZXN1bHQsCiAgICAgICAgICAgICAgICAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH0tPntUZXN0VHlwZX0gZXEgJ1RydWUnICkgewoKICAgICAgICAgICAgIyBQcm9jZXNzVGlja2V0QWN0aXZpdHlTZXQgLSBDaGVjayBvbiBUcnVlCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc1RpY2tldEFjdGl2aXR5U2V0fS0+e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYWQgYSB0ZXN0IHdpdGggZGVidWcgb24sIHJlc3RvcmUgUHJvY2Vzc09iamVjdCB0byBkZWZhdWx0CiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NUaWNrZXRBY3Rpdml0eVNldH0tPntEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRUZXN0LT57UHJvY2Vzc0xpc3R9ICkgewoKICAgICAgICAjIFNldCBDb25maWcKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkVGVzdC0+e1Byb2Nlc3NMaXN0fS0+e0NvbmZpZ30gKSApIHsKICAgICAgICAgICAgZm9yIG15ICRDb25maWcgKCBzb3J0IGtleXMgJXsgJFRlc3QtPntQcm9jZXNzTGlzdH0tPntDb25maWd9IH0gKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e1Byb2Nlc3NMaXN0fS0+e0NvbmZpZ30tPnskQ29uZmlnfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGF2ZSBhIHRlc3Qgd2l0aCBkZWJ1ZyBvbiwgd2UgbmVlZCBhIG5ldyBQcm9jZXNzT2JqZWN0CiAgICAgICAgIyB3aXRoIERlYnVnIHR1cm5lZCBvbgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzTGlzdH0tPntEZWJ1Z30gKSB7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRQcm9jZXNzT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpQcm9jZXNzLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICVDb21tb25PYmplY3QsCiAgICAgICAgICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICAgICAgICAgIERlYnVnICAgICAgICA9PiAkVGVzdC0+e1Byb2Nlc3NMaXN0fS0+e0RlYnVnfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZXhlY3V0ZSBwcm9jZXNzIG9iamVjdCBjYWxsCiAgICAgICAgbXkgJFJlc3VsdCA9ICRQcm9jZXNzT2JqZWN0LT5Qcm9jZXNzTGlzdCggJXsgJFRlc3QtPntQcm9jZXNzTGlzdH0gfSApOwoKICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc0xpc3R9LT57VGVzdFR5cGV9IGVxICdGYWxzZScgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NMaXN0IC0gQ2hlY2sgb24gRmFsc2UKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc0xpc3R9LT57TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzTGlzdH0tPntUZXN0VHlwZX0gZXEgJ1RydWUnICkgewoKICAgICAgICAgICAgIyBQcm9jZXNzTGlzdCAtIENoZWNrIG9uIFRydWUKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzTGlzdH0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NMaXN0fS0+e1Rlc3RUeXBlfSBlcSAnUmVzdWx0JyApIHsKICAgICAgICAgICAgbXkgJEV4cGVjdGVkUmVzdWx0ID0gJFRlc3QtPntQcm9jZXNzTGlzdH0tPntSZXN1bHR9OwoKICAgICAgICAgICAgIyBQcm9jZXNzTGlzdCAtIENoZWNrIGdpdmVuIGFuZCBleHBlY3RlZCByZXN1bHQKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRFeHBlY3RlZFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc0xpc3R9LT57TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIElmIHdlIGhhZCBhIHRlc3Qgd2l0aCBkZWJ1ZyBvbiwgcmVzdG9yZSBQcm9jZXNzT2JqZWN0IHRvIGRlZmF1bHQKICAgICAgICBpZiAoICRUZXN0LT57UHJvY2Vzc0xpc3R9LT57RGVidWd9ICkgewogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IHVuZGVmOwogICAgICAgICAgICAkUHJvY2Vzc09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6UHJvY2Vzcy0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAlQ29tbW9uT2JqZWN0LAogICAgICAgICAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NHZXR9ICkgewoKICAgICAgICAjIFNldCBDb25maWcKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkVGVzdC0+e1Byb2Nlc3NHZXR9LT57Q29uZmlnfSApICkgewogICAgICAgICAgICBmb3IgbXkgJENvbmZpZyAoIHNvcnQga2V5cyAleyAkVGVzdC0+e1Byb2Nlc3NHZXR9LT57Q29uZmlnfSB9ICkgewogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFRlc3QtPntQcm9jZXNzR2V0fS0+e0NvbmZpZ30tPnskQ29uZmlnfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGF2ZSBhIHRlc3Qgd2l0aCBkZWJ1ZyBvbiwgd2UgbmVlZCBhIG5ldyBQcm9jZXNzT2JqZWN0CiAgICAgICAgIyB3aXRoIERlYnVnIHR1cm5lZCBvbgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzR2V0fS0+e0RlYnVnfSApIHsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSB1bmRlZjsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgJUNvbW1vbk9iamVjdCwKICAgICAgICAgICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgICAgICAgICAgRGVidWcgICAgICAgID0+ICRUZXN0LT57UHJvY2Vzc0dldH0tPntEZWJ1Z30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGV4ZWN1dGUgcHJvY2VzcyBvYmplY3QgY2FsbAogICAgICAgIG15ICRSZXN1bHQgPSAkUHJvY2Vzc09iamVjdC0+UHJvY2Vzc0dldCggJXsgJFRlc3QtPntQcm9jZXNzR2V0fSB9ICk7CgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzR2V0fS0+e1Rlc3RUeXBlfSBlcSAnRmFsc2UnICkgewoKICAgICAgICAgICAgIyBQcm9jZXNzR2V0IC0gQ2hlY2sgb24gRmFsc2UKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFJlc3VsdCwKICAgICAgICAgICAgICAgICRUZXN0LT57UHJvY2Vzc0dldH0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NHZXR9LT57VGVzdFR5cGV9IGVxICdUcnVlJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc0dldCAtIENoZWNrIG9uIFRydWUKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzR2V0fS0+e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRUZXN0LT57UHJvY2Vzc0dldH0tPntUZXN0VHlwZX0gZXEgJ1Jlc3VsdCcgKSB7CiAgICAgICAgICAgIG15ICRFeHBlY3RlZFJlc3VsdCA9ICRUZXN0LT57UHJvY2Vzc0dldH0tPntSZXN1bHR9OwoKICAgICAgICAgICAgIyBQcm9jZXNzR2V0IC0gQ2hlY2sgZ2l2ZW4gYW5kIGV4cGVjdGVkIHJlc3VsdAogICAgICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJEV4cGVjdGVkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzR2V0fS0+e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYWQgYSB0ZXN0IHdpdGggZGVidWcgb24sIHJlc3RvcmUgUHJvY2Vzc09iamVjdCB0byBkZWZhdWx0CiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NMaXN0fS0+e0RlYnVnfSApIHsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSB1bmRlZjsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgJUNvbW1vbk9iamVjdCwKICAgICAgICAgICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFRlc3QtPntQcm9jZXNzU3RhcnRwb2ludEdldH0gKSB7CgogICAgICAgICMgU2V0IENvbmZpZwogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRUZXN0LT57UHJvY2Vzc1N0YXJ0cG9pbnRHZXR9LT57Q29uZmlnfSApICkgewogICAgICAgICAgICBmb3IgbXkgJENvbmZpZyAoIHNvcnQga2V5cyAleyAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fS0+e0NvbmZpZ30gfSApIHsKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+IHt9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRUZXN0LT57UHJvY2Vzc1N0YXJ0cG9pbnRHZXR9LT57Q29uZmlnfS0+eyRDb25maWd9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYXZlIGEgdGVzdCB3aXRoIGRlYnVnIG9uLCB3ZSBuZWVkIGEgbmV3IFByb2Nlc3NPYmplY3QKICAgICAgICAjIHdpdGggRGVidWcgdHVybmVkIG9uCiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fS0+e0RlYnVnfSApIHsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSB1bmRlZjsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgJUNvbW1vbk9iamVjdCwKICAgICAgICAgICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgICAgICAgICAgRGVidWcgICAgICAgID0+ICRUZXN0LT57UHJvY2Vzc1N0YXJ0cG9pbnRHZXR9LT57RGVidWd9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBleGVjdXRlIHByb2Nlc3Mgb2JqZWN0IGNhbGwKICAgICAgICBteSAkUmVzdWx0ID0gJFByb2Nlc3NPYmplY3QtPlByb2Nlc3NTdGFydHBvaW50R2V0KCAleyAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fSB9ICk7CgogICAgICAgIGlmICggJFRlc3QtPntQcm9jZXNzU3RhcnRwb2ludEdldH0tPntUZXN0VHlwZX0gZXEgJ0ZhbHNlJyApIHsKCiAgICAgICAgICAgICMgUHJvY2Vzc1N0YXJ0cG9pbnRHZXQgLSBDaGVjayBvbiBGYWxzZQogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAgICAgJFRlc3QtPntQcm9jZXNzU3RhcnRwb2ludEdldH0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fS0+e1Rlc3RUeXBlfSBlcSAnVHJ1ZScgKSB7CgogICAgICAgICAgICAjIFByb2Nlc3NTdGFydHBvaW50R2V0IC0gQ2hlY2sgb24gVHJ1ZQogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRSZXN1bHQsCiAgICAgICAgICAgICAgICAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fS0+e01lc3NhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBJZiB3ZSBoYWQgYSB0ZXN0IHdpdGggZGVidWcgb24sIHJlc3RvcmUgUHJvY2Vzc09iamVjdCB0byBkZWZhdWx0CiAgICAgICAgaWYgKCAkVGVzdC0+e1Byb2Nlc3NTdGFydHBvaW50R2V0fS0+e0RlYnVnfSApIHsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSB1bmRlZjsKICAgICAgICAgICAgJFByb2Nlc3NPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MtPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgJUNvbW1vbk9iamVjdCwKICAgICAgICAgICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KfQoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/Stats/TicketSolutionResponseTimeGetStatElement.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1N0YXRzL1RpY2tldFNvbHV0aW9uUmVzcG9uc2VUaW1lR2V0U3RhdEVsZW1lbnQudAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6TW9ja1RpbWUgcXcoRml4ZWRUaW1lQWRkU2Vjb25kcyBGaXhlZFRpbWVTZXQpOwp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpSZWdpc3RlckRyaXZlcjsgICAgIyBTZXQgdXAgJEtlcm5lbDo6T00gYW5kICRtYWluOjpTZWxmCgpvdXIgJFNlbGY7CgokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgID0+IDEsCiAgICAgICAgVXNlVG1wQXJ0aWNsZURpciA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgpteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7Cm15ICRCYWNrZW5kT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKbXkgJFRpY2tldE9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpteSAkQXJ0aWNsZU9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7Cm15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQ2hhbm5lbCggQ2hhbm5lbE5hbWUgPT4gJ0ludGVybmFsJyApOwpteSAkU2VydmljZU9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKIyAtLS0KIyBJVFNNQ29yZQojIC0tLQoKIyBnZXQgdGhlIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZwpteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAopOwoKIyBidWlsZCBhIGxvb2t1cCBoYXNoCm15ICVTZXJ2aWNlVHlwZU5hbWUySUQgPSByZXZlcnNlICV7JFNlcnZpY2VUeXBlTGlzdH07CgojIGdldCB0aGUgbGlzdCBvZiBzbGEgdHlwZXMgZnJvbSBnZW5lcmFsIGNhdGFsb2cKbXkgJFNMQVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNMQTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNMQVR5cGVOYW1lMklEID0gcmV2ZXJzZSAleyRTTEFUeXBlTGlzdH07CgojIC0tLQoKIyBFbmFibGUgU2VydmljZS4KJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgIEtleSAgID0+ICdUaWNrZXQ6OlNlcnZpY2UnLAogICAgVmFsdWUgPT4gMSwKKTsKCiMgVXNlIGEgY2FsZW5kYXIgd2l0aCB0aGUgc2FtZSBidXNpbmVzcyBob3VycyBmb3IgZXZlcnkgZGF5IHNvIHRoYXQgdGhlIFVUIHJ1bnMgY29ycmVjdGx5CiMgICBvbiBldmVyeSBkYXkgb2YgdGhlIHdlZWsgYW5kIG91dHNpZGUgdXN1YWwgYnVzaW5lc3MgaG91cnMuCiRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICBLZXkgICA9PiAnVGltZVdvcmtpbmdIb3Vyczo6Q2FsZW5kYXIxJywKICAgIFZhbHVlID0+IHsKICAgICAgICBtYXAgeyAkXyA9PiBbIDAgLi4gMjMgXSB9IHF3KCBNb24gVHVlIFdlZCBUaHUgRnJpIFNhdCBTdW4gKSwKICAgIH0sCik7CgojIERpc2FibGUgZGVmYXVsdCBWYWNhdGlvbiBkYXlzLgokSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgS2V5ICAgPT4gJ1RpbWVWYWNhdGlvbkRheXM6OkNhbGVuZGFyMScsCiAgICBWYWx1ZSA9PiB7fSwKKTsKCiMgU2V0IGZpeGVkIHRpbWUuCkZpeGVkVGltZVNldCgpOwoKbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tTnVtYmVyKCk7CgojIENyZWF0ZSBhIHRlc3QgY3VzdG9tZXIuCm15ICRUZXN0VXNlckN1c3RvbWVyID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwoKIyBDcmVhdGUgYSBkeW5hbWljIGZpZWxkLgpteSAkRHluYW1pY0ZpZWxkTmFtZSA9ICJUZXN0REYkUmFuZG9tSUQiOwpteSAkRmllbGRJRCAgICAgICAgICA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgIE5hbWUgICAgICAgPT4gJER5bmFtaWNGaWVsZE5hbWUsCiAgICBGaWVsZE9yZGVyID0+IDk5OTIsCiAgICBGaWVsZFR5cGUgID0+ICdEcm9wZG93bicsCiAgICBDb25maWcgICAgID0+IHsKICAgICAgICBEZWZhdWx0VmFsdWUgICA9PiAnRGVmYXVsdCcsCiAgICAgICAgUG9zc2libGVWYWx1ZXMgPT4gewogICAgICAgICAgICBJdGVtMSA9PiAnVmFsdWUxJywKICAgICAgICAgICAgaXRlbTIgPT4gJ1ZhbHVlMicsCiAgICAgICAgfSwKICAgIH0sCiAgICBMYWJlbCAgICAgID0+ICREeW5hbWljRmllbGROYW1lLAogICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgIFZhbGlkSUQgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFJlb3JkZXIgICAgPT4gMCwKKTsKJFNlbGYtPlRydWUoCiAgICAkRmllbGRJRCwKICAgICJEeW5hbWljRmllbGRBZGQoKSBzdWNjZXNzZnVsIGZvciBGaWVsZCBJRCAkRmllbGRJRCIsCik7CgojIEFkZCB0ZXN0IFNlcnZpY2UuCm15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gIlRlc3RTZXJ2aWNlIC0gIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCgogICAgIyAtLS0KICAgICMgSVRTTUNvcmUKICAgICMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAkU2VydmljZVR5cGVOYW1lMklEe1RyYWluaW5nfSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgIyAtLS0KKTsKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUlELAogICAgIlNlcnZpY2UgJFNlcnZpY2VJRCBoYXMgYmVlbiBjcmVhdGVkLiIsCik7CgojIEFkZCBzZXJ2aWNlIGZvciB0aGUgdGVzdCBjdXN0b21lci4KJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkVGVzdFVzZXJDdXN0b21lciwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKCiMgQWRkIHRlc3QgU0xBLgpteSAkU0xBSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKCiAgICAjIC0tLQogICAgIyBJVFNNQ29yZQogICAgIyAtLS0KICAgIFR5cGVJRCA9PiAkU0xBVHlwZU5hbWUySUR7T3RoZXJ9LAoKICAgICMgLS0tCiAgICBOYW1lICAgICAgICAgICAgICAgID0+ICJUZXN0U0xBIC0gIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFskU2VydmljZUlEXSwKICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gNSwKICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gNjAsCiAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDEwLAogICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA4MCwKICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMTUsCiAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDgwLAogICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAxLAogICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTTEFJRCwKICAgICJTTEEgJFNMQUlEIGhhcyBiZWVuIGNyZWF0ZWQuIiwKKTsKCm15IEBUaWNrZXRJRHM7CmZvciBteSAkSXRlbSAoIDEgLi4gNiApIHsKCiAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgVGl0bGUgICAgICAgID0+ICdUaWNrZXQgT25lIFRpdGxlJywKICAgICAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgICAgICBTZXJ2aWNlSUQgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICBTTEFJRCAgICAgICAgPT4gJFNMQUlELAogICAgICAgIEN1c3RvbWVySUQgICA9PiAkVGVzdFVzZXJDdXN0b21lciwKICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RVc2VyQ3VzdG9tZXIsCiAgICAgICAgT3duZXJJRCAgICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFRpY2tldElELAogICAgICAgICJUaWNrZXRDcmVhdGUoKSBzdWNjZXNzZnVsIGZvciBUaWNrZXQgSUQgJFRpY2tldElEIiwKICAgICk7CiAgICBwdXNoIEBUaWNrZXRJRHMsICRUaWNrZXRJRDsKCiAgICBteSAkVGVzdEZpZWxkQ29uZmlnID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgIElEID0+ICRGaWVsZElELAogICAgKTsKCiAgICAkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRUZXN0RmllbGRDb25maWcsCiAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ0l0ZW0xJywKICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgICk7CgogICAgRml4ZWRUaW1lQWRkU2Vjb25kcyggMiAqICRJdGVtICogNjAgKTsKCiAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN0YXRlU2V0KAogICAgICAgIFN0YXRlSUQgICAgICAgICAgICA9PiA0LAogICAgICAgIFRpY2tldElEICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgU2VuZE5vTm90aWZpY2F0aW9uID0+IDAsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIlRpY2tldFN0YXRlU2V0KCkgc3VjY2Vzc2Z1bCBzZXQgc3RhdGUgJ29wZW4nIGZvciB0aWNrZXQgJFRpY2tldElEIiwKICAgICk7CgogICAgbXkgJEFydGljbGVJRCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUNyZWF0ZSgKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICBTZW5kZXJUeXBlICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgICAgIEZyb20gICAgICAgICAgICAgICAgID0+ICdBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgPGVtYWlsQGV4YW1wbGUuY29tPicsCiAgICAgICAgVG8gICAgICAgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyIEEgPGN1c3RvbWVyLWFAZXhhbXBsZS5jb20+JywKICAgICAgICBDYyAgICAgICAgICAgICAgICAgICA9PiAnQ3VzdG9tZXIgQiA8Y3VzdG9tZXItYkBleGFtcGxlLmNvbT4nLAogICAgICAgIFJlcGx5VG8gICAgICAgICAgICAgID0+ICdDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ3NvbWUgc2hvcnQgZGVzY3JpcHRpb24nLAogICAgICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICd0aGUgbWVzc2FnZSB0ZXh0IFBlcmwgbW9kdWxlcyBwcm92aWRlIGEgcmFuZ2Ugb2YnLAogICAgICAgIENvbnRlbnRUeXBlICAgICAgICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTE1JywKICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICA9PiAnT3duZXJVcGRhdGUnLAogICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICdTb21lIGZyZWUgdGV4dCEnLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgTm9BZ2VudE5vdGlmeSAgICAgICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSggJEFydGljbGVJRCwgIkFydGljbGVDcmVhdGUoKSBDcmVhdGVkIGFydGljbGUgJEFydGljbGVJRCIgKTsKCiAgICBGaXhlZFRpbWVBZGRTZWNvbmRzKCAkSXRlbSAqIDYwICk7CgogICAgIyBDbG9zZSBhbGwgdGlja2V0J3MgZXhjZXB0IHRoZSBsYXN0IG9uZS4KICAgIGlmICggJEl0ZW0gIT0gNiApIHsKICAgICAgICAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN0YXRlU2V0KAogICAgICAgICAgICBTdGF0ZUlEICAgICAgICAgICAgPT4gMiwKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU2VuZE5vTm90aWZpY2F0aW9uID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiVGlja2V0U3RhdGVTZXQoKSBzdWNjZXNzZnVsIHNldCBzdGF0ZSAnY2xvc2Ugc3VjY2Vzc2Z1bCcgZm9yIHRpY2tldCAkVGlja2V0SUQiLAogICAgICAgICk7CiAgICB9Cn0KCiMgTWVyZ2UgdHdvIGxhc3QgY3JlYXRlZCB0ZXN0IHRpY2tldHMuCm15ICRNZXJnZVN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRNZXJnZSgKICAgIE1haW5UaWNrZXRJRCAgPT4gJFRpY2tldElEc1s0XSwKICAgIE1lcmdlVGlja2V0SUQgPT4gJFRpY2tldElEc1s1XSwKICAgIFVzZXJJRCAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkTWVyZ2VTdWNjZXNzLAogICAgIlRpY2tldE1lcmdlKCkgc3VjY2Vzc2Z1bCBtZXJnZWQgVGlja2V0SUQgJFRpY2tldElEc1s0XSB3aXRoIFRpY2tldElEICRUaWNrZXRJRHNbNV0iCik7CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnU29sdXRpb25BdmVyYWdlQWxsT3ZlcicsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnOCBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnU29sdXRpb25NaW5UaW1lQWxsT3ZlcicsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnMyBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnU29sdXRpb25NYXhUaW1lQWxsT3ZlcicsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnMTUgbScsCiAgICB9LAogICAgewogICAgICAgIEtpbmRzT2ZSZXBvcnRpbmcgPT4gJ1NvbHV0aW9uQXZlcmFnZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnOSBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnU29sdXRpb25NaW5UaW1lJywKICAgICAgICBFeHBlY3RlZFJlc3VsdCAgID0+ICczIG0nLAogICAgfSwKICAgIHsKICAgICAgICBLaW5kc09mUmVwb3J0aW5nID0+ICdTb2x1dGlvbk1heFRpbWUnLAogICAgICAgIEV4cGVjdGVkUmVzdWx0ICAgPT4gJzE1IG0nLAogICAgfSwKICAgIHsKICAgICAgICBLaW5kc09mUmVwb3J0aW5nID0+ICdTb2x1dGlvbldvcmtpbmdUaW1lQXZlcmFnZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnOSBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnU29sdXRpb25NaW5Xb3JraW5nVGltZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnMyBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnU29sdXRpb25NYXhXb3JraW5nVGltZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnMTUgbScsCiAgICB9LAogICAgewogICAgICAgIEtpbmRzT2ZSZXBvcnRpbmcgPT4gJ051bWJlck9mVGlja2V0cycsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnNScsCiAgICB9LAogICAgewogICAgICAgIEtpbmRzT2ZSZXBvcnRpbmcgPT4gJ1Jlc3BvbnNlQXZlcmFnZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnNiBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnUmVzcG9uc2VNaW5UaW1lJywKICAgICAgICBFeHBlY3RlZFJlc3VsdCAgID0+ICcyIG0nLAogICAgfSwKICAgIHsKICAgICAgICBLaW5kc09mUmVwb3J0aW5nID0+ICdSZXNwb25zZVdvcmtpbmdUaW1lQXZlcmFnZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnNiBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnUmVzcG9uc2VNaW5Xb3JraW5nVGltZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnMiBtJywKICAgIH0sCiAgICB7CiAgICAgICAgS2luZHNPZlJlcG9ydGluZyA9PiAnUmVzcG9uc2VNYXhXb3JraW5nVGltZScsCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgICA9PiAnMTAgbScsCiAgICB9LAopOwoKbXkgJFRpY2tldFNvbHV0aW9uUmVzcG9uc2VUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpUaWNrZXRTb2x1dGlvblJlc3BvbnNlVGltZScpOwoKIyBDaGVjayBHZXRTdGF0RWxlbWVudCgpLgpmb3IgbXkgJFRlc3QgKEBUZXN0cykgewogICAgZm9yIG15ICRJdGVtIChxdyhJdGVtMSBJdGVtMikpIHsKCiAgICAgICAgbXkgJFJlc3VsdCA9ICRUaWNrZXRTb2x1dGlvblJlc3BvbnNlVGltZU9iamVjdC0+R2V0U3RhdEVsZW1lbnQoCiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgICAgICAgICAgICAgID0+IFskU2VydmljZUlEXSwKICAgICAgICAgICAgS2luZHNPZlJlcG9ydGluZyAgICAgICAgICAgICAgICAgPT4gWyAkVGVzdC0+e0tpbmRzT2ZSZXBvcnRpbmd9IF0sCiAgICAgICAgICAgICJEeW5hbWljRmllbGRfJER5bmFtaWNGaWVsZE5hbWUiID0+IFskSXRlbV0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJEV4cGVjdGVkUmVzdWx0OwogICAgICAgIGlmICggJEl0ZW0gZXEgJ0l0ZW0yJyApIHsKICAgICAgICAgICAgJEV4cGVjdGVkUmVzdWx0ID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRFeHBlY3RlZFJlc3VsdCA9ICRUZXN0LT57RXhwZWN0ZWRSZXN1bHR9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkUmVzdWx0LAogICAgICAgICAgICAkRXhwZWN0ZWRSZXN1bHQsCiAgICAgICAgICAgICIkVGVzdC0+e0tpbmRzT2ZSZXBvcnRpbmd9IGlzIGNhbGN1bGF0ZWQgd2VsbCAtICRSZXN1bHQiLAogICAgICAgICk7CiAgICB9Cgp9CgojIENsZWFudXAgY2FjaGUuCiRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/Ticket/TicketACL.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1RpY2tldC9UaWNrZXRBQ0wudAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKdXNlIFN0b3JhYmxlIHF3KGRjbG9uZSk7CgojIENQQU4gbW9kdWxlcwp1c2UgVGVzdDI6OlYwOwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlJlZ2lzdGVyRHJpdmVyOyAgICAjIFNldCB1cCAkS2VybmVsOjpPTSBhbmQgJG1haW46OlNlbGYKCm91ciAkU2VsZjsKCm15ICRDb25maWdPYmplY3QgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJFVzZXJPYmplY3QgICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwpteSAkQ3VzdG9tZXJVc2VyT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKTsKbXkgJFNlcnZpY2VPYmplY3QgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwpteSAkUXVldWVPYmplY3QgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwpteSAkVHlwZU9iamVjdCAgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyk7Cm15ICRQcmlvcml0eU9iamVjdCAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5Jyk7Cm15ICRTTEFPYmplY3QgICAgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwpteSAkU3RhdGVPYmplY3QgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpOwpteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7Cm15ICRTdG9yYWJsZU9iamVjdCAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJyk7CgojIGdldCBoZWxwZXIgb2JqZWN0CiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSAgPT4gMSwKICAgICAgICBVc2VUbXBBcnRpY2xlRGlyID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgc2V0IHZhbGlkIG9wdGlvbnMKbXkgJVZhbGlkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKJVZhbGlkTGlzdCA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiMgc2V0IHVzZXIgb3B0aW9ucwpteSAoICRVc2VyTG9naW4sICRVc2VySUQgKSA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgR3JvdXBzID0+IFsnYWRtaW4nXSwKKTsKbXkgJVVzZXJEYXRhID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgVXNlcklEID0+ICRVc2VySUQsCik7Cm9rKCBzY2FsYXIgJVVzZXJEYXRhLCAnZmlyc3QgdXNlciBjcmVhdGVkJyApOwoKbXkgKCAkTmV3VXNlckxvZ2luLCAkTmV3VXNlcklEICkgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbJ2FkbWluJ10sCik7Cm15ICVOZXdVc2VyRGF0YSA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgIFVzZXJJRCA9PiAkTmV3VXNlcklELAopOwpvayggc2NhbGFyICVOZXdVc2VyRGF0YSwgJ3NlY29uZCB1c2VyIGNyZWF0ZWQnICk7CgojIHNldCBjdXN0b21lciB1c2VyIG9wdGlvbnMKbXkgJEN1c3RvbWVyVXNlckxvZ2luID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7CgpteSAlQ3VzdG9tZXJVc2VyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICBVc2VyID0+ICRDdXN0b21lclVzZXJMb2dpbiwKKTsKCm15ICROZXdDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKQogICAgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IGN1c3RvbWVyIHVzZXIiOwoKbXkgJU5ld0N1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgVXNlciA9PiAkTmV3Q3VzdG9tZXJVc2VyTG9naW4sCik7CgpteSAkUmFuZG9tSUQgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwoKIyBzZXQgcXVldWUgb3B0aW9ucwpteSAkUXVldWVOYW1lID0gJ1F1ZXVlXycgLiAkUmFuZG9tSUQ7Cm15ICRRdWV1ZUlEICAgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKAogICAgTmFtZSAgICAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICBWYWxpZElEICAgICAgICAgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIEdyb3VwSUQgICAgICAgICA9PiAxLAogICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICBTYWx1dGF0aW9uSUQgICAgPT4gMSwKICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgVXNlcklEICAgICAgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRRdWV1ZUlELAogICAgIlF1ZXVlQWRkKCkgSUQgKCRRdWV1ZUlEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgpteSAkTmV3UXVldWVOYW1lID0gJ05ld1F1ZXVlXycgLiAkUmFuZG9tSUQ7Cm15ICROZXdRdWV1ZUlEICAgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKAogICAgTmFtZSAgICAgICAgICAgID0+ICROZXdRdWV1ZU5hbWUsCiAgICBWYWxpZElEICAgICAgICAgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIEdyb3VwSUQgICAgICAgICA9PiAxLAogICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICBTYWx1dGF0aW9uSUQgICAgPT4gMSwKICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgVXNlcklEICAgICAgICAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICROZXdRdWV1ZUlELAogICAgIlF1ZXVlQWRkKCkgSUQgKCROZXdRdWV1ZUlEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgojIC0tLQojIElUU01Db3JlCiMgLS0tCgojIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNlcnZpY2VUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXskU2VydmljZVR5cGVMaXN0fTsKCiMgZ2V0IHRoZSBsaXN0IG9mIHNsYSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZwpteSAkU0xBVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKKTsKCiMgYnVpbGQgYSBsb29rdXAgaGFzaApteSAlU0xBVHlwZU5hbWUySUQgPSByZXZlcnNlICV7JFNMQVR5cGVMaXN0fTsKCiMgLS0tCgojIHNldCBzZXJ2aWNlIG9wdGlvbnMKbXkgJFNlcnZpY2VOYW1lID0gJ1NlcnZpY2VfJyAuICRSYW5kb21JRDsKbXkgJFNlcnZpY2VJRCAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKCiAgICAjIC0tLQogICAgIyBJVFNNQ29yZQogICAgIyAtLS0KICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAjIC0tLQopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUlELAogICAgIlNlcnZpY2VBZGQoKSBJRCAoJFNlcnZpY2VJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKbXkgJE5ld1NlcnZpY2VOYW1lID0gJ05ld1NlcnZpY2VfJyAuICRSYW5kb21JRDsKbXkgJE5ld1NlcnZpY2VJRCAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICROZXdTZXJ2aWNlTmFtZSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKCiAgICAjIC0tLQogICAgIyBJVFNNQ29yZQogICAgIyAtLS0KICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAjIC0tLQopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkTmV3U2VydmljZUlELAogICAgIlNlcnZpY2VBZGQoKSBJRCAoJE5ld1NlcnZpY2VJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKIyBzZXQgdHlwZSBvcHRpb25zCm15ICRUeXBlTmFtZSA9ICdUeXBlXycgLiAkUmFuZG9tSUQ7Cm15ICRUeXBlSUQgICA9ICRUeXBlT2JqZWN0LT5UeXBlQWRkKAogICAgTmFtZSAgICA9PiAkVHlwZU5hbWUsCiAgICBWYWxpZElEID0+ICRWYWxpZExpc3R7J3ZhbGlkJ30sCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRUeXBlSUQsCiAgICAiVHlwZUFkZCgpIElEICgkVHlwZUlEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgpteSAkTmV3VHlwZU5hbWUgPSAnTmV3VHlwZV8nIC4gJFJhbmRvbUlEOwpteSAkTmV3VHlwZUlEICAgPSAkVHlwZU9iamVjdC0+VHlwZUFkZCgKICAgIE5hbWUgICAgPT4gJE5ld1R5cGVOYW1lLAogICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0eyd2YWxpZCd9LAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkTmV3VHlwZUlELAogICAgIlR5cGVBZGQoKSBJRCAoJE5ld1R5cGVJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKIyBzZXQgcHJpb3JpdHkgb3B0aW9ucwpteSAkUHJpb3JpdHlOYW1lID0gJ1ByaW9yaXR5XycgLiAkUmFuZG9tSUQ7Cm15ICRQcmlvcml0eUlEICAgPSAkUHJpb3JpdHlPYmplY3QtPlByaW9yaXR5QWRkKAogICAgTmFtZSAgICA9PiAkUHJpb3JpdHlOYW1lLAogICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0eyd2YWxpZCd9LAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkUHJpb3JpdHlJRCwKICAgICJQcmlvcml0eUFkZCgpIElEICgkUHJpb3JpdHlJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKbXkgJE5ld1ByaW9yaXR5TmFtZSA9ICdOZXdQcmlvcml0eV8nIC4gJFJhbmRvbUlEOwpteSAkTmV3UHJpb3JpdHlJRCAgID0gJFByaW9yaXR5T2JqZWN0LT5Qcmlvcml0eUFkZCgKICAgIE5hbWUgICAgPT4gJE5ld1ByaW9yaXR5TmFtZSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJE5ld1ByaW9yaXR5SUQsCiAgICAiUHJpb3JpdHlBZGQoKSBJRCAoJE5ld1ByaW9yaXR5SUQpIGFkZGVkIHN1Y2Nlc3NmdWxseSIKKTsKCiMgc2V0IFNMQSBvcHRpb25zCm15ICRTTEFOYW1lID0gJ1NMQV8nIC4gJFJhbmRvbUlEOwpteSAkU0xBSUQgICA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgIE5hbWUgICAgPT4gJFNMQU5hbWUsCiAgICBWYWxpZElEID0+ICRWYWxpZExpc3R7J3ZhbGlkJ30sCiAgICBVc2VySUQgID0+IDEsCgogICAgIyAtLS0KICAgICMgSVRTTUNvcmUKICAgICMgLS0tCiAgICBUeXBlSUQgPT4gJFNMQVR5cGVOYW1lMklEe090aGVyfSwKCiAgICAjIC0tLQopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU0xBSUQsCiAgICAiU0xBQWRkKCkgSUQgKCRTTEFJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKbXkgJE5ld1NMQU5hbWUgPSAnTmV3U0xBXycgLiAkUmFuZG9tSUQ7Cm15ICROZXdTTEFJRCAgID0gJFNMQU9iamVjdC0+U0xBQWRkKAogICAgTmFtZSAgICA9PiAkTmV3U0xBTmFtZSwKICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdHsndmFsaWQnfSwKICAgIFVzZXJJRCAgPT4gMSwKCiAgICAjIC0tLQogICAgIyBJVFNNQ29yZQogICAgIyAtLS0KICAgIFR5cGVJRCA9PiAkU0xBVHlwZU5hbWUySUR7T3RoZXJ9LAoKICAgICMgLS0tCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICROZXdTTEFJRCwKICAgICJTTEFBZGQoKSBJRCAoJE5ld1NMQUlEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgojIHNldCBzdGF0ZSBvcHRpb25zCm15ICRTdGF0ZU5hbWUgPSAnU3RhdGVfJyAuICRSYW5kb21JRDsKbXkgJFN0YXRlSUQgICA9ICRTdGF0ZU9iamVjdC0+U3RhdGVBZGQoCiAgICBOYW1lICAgID0+ICRTdGF0ZU5hbWUsCiAgICBWYWxpZElEID0+IDEsCiAgICBUeXBlSUQgID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTdGF0ZUlELAogICAgIlN0YXRlQWRkKCkgSUQgKCRTdGF0ZUlEKSBhZGRlZCBzdWNjZXNzZnVsbHkiCik7CgpteSAkTmV3U3RhdGVOYW1lID0gJ05ld1N0YXRlXycgLiAkUmFuZG9tSUQ7Cm15ICROZXdTdGF0ZUlEICAgPSAkU3RhdGVPYmplY3QtPlN0YXRlQWRkKAogICAgTmFtZSAgICA9PiAkTmV3U3RhdGVOYW1lLAogICAgVmFsaWRJRCA9PiAxLAogICAgVHlwZUlEICA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkTmV3U3RhdGVJRCwKICAgICJTdGF0ZUFkZCgpIElEICgkTmV3U3RhdGVJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgopOwoKIyBDcmVhdGUgdGVzdCB0aWNrZXQgZHluYW1pYyBmaWVsZHMuCm15IEBEeW5hbWljRmllbGROYW1lczsKZm9yIG15ICRDb3VudCAoIDEgLi4gMiApIHsKICAgIG15ICREeW5hbWljRmllbGROYW1lID0gJ0R5bmFtaWNGaWVsZCcgLiAkQ291bnQgLiAkUmFuZG9tSUQ7CiAgICBteSAkRHluYW1pY0ZpZWxkSUQgICA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEFkZCgKICAgICAgICBOYW1lICAgICAgID0+ICREeW5hbWljRmllbGROYW1lLAogICAgICAgIExhYmVsICAgICAgPT4gJ2EgZGVzY3JpcHRpb24nLAogICAgICAgIEZpZWxkT3JkZXIgPT4gOTk5OTksCiAgICAgICAgRmllbGRUeXBlICA9PiAnVGV4dCcsCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgRGVmYXVsdFZhbHVlID0+ICdEZWZhdWx0JywKICAgICAgICB9LAogICAgICAgIFJlb3JkZXIgPT4gMCwKICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICREeW5hbWljRmllbGRJRCwKICAgICAgICAiRHluYW1pY0ZpZWxkQWRkKCkgSUQgKCREeW5hbWljRmllbGRJRCkgYWRkZWQgc3VjY2Vzc2Z1bGx5IgogICAgKTsKCiAgICBwdXNoIEBEeW5hbWljRmllbGROYW1lcywgJER5bmFtaWNGaWVsZE5hbWU7Cn0KCiMgVE9ETyBpbnRlZ3JhdGUgdGhpcyB0ZXN0cyB3aXRoIGRhdGFiYXNlIHRlc3RzCiMgc2V0IHRlc3RpbmcgQUNMcyBvcHRpb25zCm15ICVUZXN0QUNMcyA9ICgKICAgICdRdWV1ZS0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRRdWV1ZU5hbWVdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnU2VydmljZS0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiBbJFNlcnZpY2VOYW1lXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ1R5cGUtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBUeXBlID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRUeXBlTmFtZV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ1JhdyddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ0N1c3RvbWVyVXNlci0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiB7CiAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRDdXN0b21lclVzZXJMb2dpbl0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdQcmlvcml0eS0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIFByaW9yaXR5ID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgUXVldWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgICdTTEEtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBTTEEgPT4gewogICAgICAgICAgICAgICAgTmFtZSA9PiBbJFNMQU5hbWVdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnU3RhdGUtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBTdGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFF1ZXVlID0+IFsnUmF3J10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnT3duZXItMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBPd25lciA9PiB7CiAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnUmVzcG9uc2libGUtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBSZXNwb25zaWJsZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnRnJvbnRlbmQtMScgPT4gewogICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICBGcm9udGVuZCA9PiB7CiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gWyAnQWdlbnRUaWNrZXRQaG9uZScsICdBZ2VudFRpY2tldEVtYWlsJyBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnVGlja2V0LTEnID0+IHsKICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFF1ZXVlICAgID0+IFskUXVldWVOYW1lXSwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgIFN0YXRlICAgID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgQWN0aW9uID0+IFsgJ0FnZW50VGlja2V0UGhvbmUnLCAnQWdlbnRUaWNrZXRCb3VuY2UnLCBdLAogICAgICAgIH0sCiAgICB9LAogICAgJ0R5bmFtaWNGaWVsZC0xJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRfRmllbGQxID0+IFsnSXRlbTEnXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ0R5bmFtaWNGaWVsZC0yJyA9PiB7CiAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRfRmllbGQyID0+IFsnMCddLCAgICAjIHplcm8tdmFsdWUsIHNlZSBidWcjMTIyNzMKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAopOwoKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ1RpY2tldEFjbCcsCiAgICBWYWx1ZSA9PiBcJVRlc3RBQ0xzLAopOwoKbXkgJEdvdEFDTHMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldEFjbCcpOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPklzRGVlcGx5KAogICAgJEdvdEFDTHMsCiAgICBcJVRlc3RBQ0xzLAogICAgIkFDTHMgU2V0IGFuZCBHZXQgZnJvbSBzeXNjb25maWciLAopOwoKbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiMgc2V0IHRpY2tldCBvcHRpb25zCm15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICAgPT4gJ1NvbWUgVGlja2V0IFRpdGxlJywKICAgIFF1ZXVlICAgICAgICAgPT4gJFF1ZXVlTmFtZSwKICAgIFNlcnZpY2UgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgVHlwZSAgICAgICAgICA9PiAkVHlwZU5hbWUsCiAgICBMb2NrICAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgICA9PiAkUHJpb3JpdHlOYW1lLAogICAgU0xBICAgICAgICAgICA9PiAkU0xBTmFtZSwKICAgIFN0YXRlICAgICAgICAgPT4gJFN0YXRlTmFtZSwKICAgIEN1c3RvbWVySUQgICAgPT4gJzEyMzQ2NScsCiAgICBDdXN0b21lclVzZXIgID0+ICRDdXN0b21lclVzZXJMb2dpbiwKICAgIE93bmVySUQgICAgICAgPT4gJFVzZXJJRCwKICAgIFJlc3BvbnNpYmxlSUQgPT4gJFVzZXJJRCwKICAgIFVzZXJJRCAgICAgICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElELAogICAgIlRpY2tldENyZWF0ZSgpIElEICgkVGlja2V0SUQpIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IiwKKTsKCiMgU2V0IHRoZSB0ZXN0IHRpY2tldCBkeW5hbWljIGZpZWxkIHZhbHVlcy4KZm9yIG15ICRDb3VudCAoIDAgLi4gMSApIHsKICAgIG15ICRWYWx1ZTsKICAgIGlmICggJENvdW50ID09IDAgKSB7CiAgICAgICAgJFZhbHVlID0gJ0l0ZW0xJzsKICAgIH0KICAgIGVsc2lmICggJENvdW50ID09IDEgKSB7CiAgICAgICAgJFZhbHVlID0gJzAnOwogICAgfQoKICAgIG15ICREeW5hbWljRmllbGRDb25maWcgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgTmFtZSA9PiAkRHluYW1pY0ZpZWxkTmFtZXNbJENvdW50XSwKICAgICk7CiAgICBteSAkRHluYW1pY0ZpZWxkVmFsdWVTZXRTdWNjZXNzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRWYWx1ZSwKICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFVzZXJJRCwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJER5bmFtaWNGaWVsZFZhbHVlU2V0U3VjY2VzcywKICAgICAgICAiRHluYW1pY0ZpZWxkIFZhbHVlU2V0KCkgZm9yIER5bmFtaWNGaWVsZCBJRCAoJER5bmFtaWNGaWVsZE5hbWVzWyRDb3VudF0pLCBUaWNrZXQgSUQgKCRUaWNrZXRJRCkgc2V0IHN1Y2Nlc3NmdWxseSIsCiAgICApOwp9CgojIGRlZmluZSBmb3JtIHVwZGF0ZSBiYXNlZCB0ZXN0cwpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgUXVldWUtMSAtIHdyb25nIFF1ZXVlJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFF1ZXVlLTEgLSB3cm9uZyByZXR1cm4gdHlwZSAoQWN0aW9uKScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1dyb25nJywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggICAgID0+IDAsCiAgICAgICAgUmV0dXJuQWN0aW9uRGF0YSA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgUXVldWUtMSAtIHdyb25nIHJldHVybiB0eXBlIChOb24gQWN0aW9uKScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1dyb25nJywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgUXVldWUtMSAtIHdyb25nIHJldHVybiBzdWIgdHlwZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1dyb25nJywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFF1ZXVlLTEgLSBjb3JyZWN0IFF1ZXVlJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgUXVldWUtMSAtIGNvcnJlY3QgUXVldWVJRCcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBTZXJ2aWNlLTEgLSBjb3JyZWN0IFNlcnZpY2UnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgU2VydmljZSAgICAgICA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgU2VydmljZS0xIC0gY29ycmVjdCBTZXJ2aWNlSUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFR5cGUtMSAtIGNvcnJlY3QgVHlwZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgPT4gJFR5cGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFR5cGUtMSAtIGNvcnJlY3QgVHlwZUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgVHlwZUlEICAgICAgICA9PiAkVHlwZUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIEN1c3RvbWVyVXNlci0xIC0gY29ycmVjdCBDdXN0b21lclVzZXInLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJ1N0YXRlJywKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlckRhdGF7VXNlcklEfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFByaW9yaXR5LTEgLSBjb3JyZWN0IFByaW9yaXR5JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkUHJpb3JpdHlOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFByaW9yaXR5LTEgLSBjb3JyZWN0IFByaW9yaXR5SUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFNMQS0xIC0gY29ycmVjdCBTTEEnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFNMQSAgICAgICAgICAgPT4gJFNMQU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgU0xBLTEgLSBjb3JyZWN0IFNMQUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgU0xBSUQgICAgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBTdGF0ZS0xIC0gY29ycmVjdCBTdGF0ZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJFN0YXRlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBTdGF0ZS0xIC0gY29ycmVjdCBTdGF0ZUlEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBPd25lci0xIC0gY29ycmVjdCBPd25lcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgT3duZXIgICAgICAgICA9PiAkVXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBPd25lci0xIC0gY29ycmVjdCBPd25lcklEJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAkVXNlcklELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBSZXNwb25zaWJsZS0xIC0gY29ycmVjdCBSZXNwb25zaWJsZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgUmVzcG9uc2libGUgICA9PiAkVXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFJlc3BvbnNpYmxlLTEgLSBjb3JyZWN0IFJlc3BvbnNpYmxlSUQnLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRVc2VySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBGcm9udGVuZC0xIC0gY29ycmVjdCBBY3Rpb24nLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgQWN0aW9uICAgICAgICA9PiAnQWdlbnRUaWNrZXRQaG9uZScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdBQ0wgVGlja2V0LTEgLSBjb3JyZWN0IFRpY2tldCB1c2luZyBBY3Rpb24nLAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgICAgICAgICAgPT4gJy0nLAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBBY3Rpb24gICAgICAgID0+ICdBZ2VudFRpY2tldFBob25lJywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnLScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggICAgID0+IDEsCiAgICAgICAgUmV0dXJuQWN0aW9uRGF0YSA9PiB7CiAgICAgICAgICAgIDEgPT4gJ0FnZW50VGlja2V0UGhvbmUnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIFRpY2tldC0xIC0gY29ycmVjdCBUaWNrZXQgdXNpbmcgRGF0YScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldFBob25lJywKICAgICAgICAgICAgICAgIDIgPT4gJ0FnZW50VGlja2V0Qm91bmNlJywKICAgICAgICAgICAgICAgIDMgPT4gJ0FnZW50VGlja2V0Q29tcG9zZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoICAgICA9PiAxLAogICAgICAgIFJldHVybkFjdGlvbkRhdGEgPT4gewogICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldFBob25lJywKICAgICAgICAgICAgMiA9PiAnQWdlbnRUaWNrZXRCb3VuY2UnLAogICAgICAgIH0sCiAgICB9LAoKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ0FDTCBEeW5hbWljRmllbGQtMSAtIGNvcnJlY3QgRHluYW1pY0ZpZWxkJywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgRHluYW1pY0ZpZWxkICA9PiB7CiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRfRmllbGQxID0+IFsnSXRlbTEnXQogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCgogICAgewogICAgICAgIE5hbWUgICA9PiAnQUNMIER5bmFtaWNGaWVsZC0yIC0gRHluYW1pY0ZpZWxkIHdpdGggemVybyB2YWx1ZScsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCAgPT4gewogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkX0ZpZWxkMiA9PiBbJzAnXSwgICAgIyB6ZXJvLXZhbHVlLCBzZWUgYnVnIzEyMjczCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CiAgICBteSAkQUNMU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCggJXsgJFRlc3QtPntDb25maWd9IH0gKTsKCiAgICBpZiAoICEkVGVzdC0+e1N1Y2Nlc3NNYXRjaH0gKSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkQUNMU3VjY2VzcywKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gZXhlY3V0ZWQgd2l0aCBGYWxzZSIsCiAgICAgICAgKTsKCiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEFDTFN1Y2Nlc3MsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IGV4ZWN1dGVkIHdpdGggVHJ1ZSIsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkVGVzdC0+e0NvbmZpZ30tPntSZXR1cm5UeXBlfSBlcSAnQWN0aW9uJyApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBhY3Rpb24gZGF0YSBmcm9tIEFDTAogICAgICAgICAgICBteSAlQUNMQWN0aW9uRGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbEFjdGlvbkRhdGEoKTsKCiAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgIFwlQUNMQWN0aW9uRGF0YSwKICAgICAgICAgICAgICAgICRUZXN0LT57UmV0dXJuQWN0aW9uRGF0YX0sCiAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBBQ0wgYWN0aW9uIGRhdGEiLAogICAgICAgICAgICApOwoKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGdldCB0aGUgZGF0YSBmcm9tIEFDTAogICAgICAgICAgICBteSAlQUNMRGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKTsKCiAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgIFwlQUNMRGF0YSwKICAgICAgICAgICAgICAgICRUZXN0LT57UmV0dXJuRGF0YX0sCiAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBBQ0wgZGF0YSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQp9CgokU2VsZi0+VHJ1ZSgKICAgIDEsCiAgICAiLS0tIFN0YXJ0IERhdGFiYXNlIEFDTCBUZXN0cyAtLS0iLAopOwoKIyBkZWZpbmUgdGhlIGRhdGFiYXNlIHRlc3RzCkBUZXN0cyA9ICgKCiAgICAjIHF1ZXVlIGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVF1ZXVlLTEgLSBTZW50IG5ldyBxdWV1ZSwgV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUXVldWUtMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1F1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWyduZXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICROZXdRdWV1ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVF1ZXVlLTEgLSBTZW50IG5ldyBxdWV1ZSwgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1RdWV1ZS0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskUXVldWVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICROZXdRdWV1ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVF1ZXVlLTEgLSBTZW50IG5ldyBxdWV1ZSwgV3JvbmcgUHJvcGVydGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1RdWV1ZS0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFF1ZXVlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWyduZXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICROZXdRdWV1ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVF1ZXVlLTEgLSBTZW50IG5ldyBxdWV1ZSwgQ29ycmVjdCBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUXVldWUtMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyROZXdRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnbmV3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAkTmV3UXVldWVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHNlcnZpY2UgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU2VydmljZS0xIC0gU2VudCBuZXcgc2VydmljZSwgV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU2VydmljZS0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyROZXdTZXJ2aWNlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTZXJ2aWNlICAgICAgID0+ICROZXdTZXJ2aWNlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU2VydmljZS0xIC0gU2VudCBuZXcgc2VydmljZSwgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TZXJ2aWNlLTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFNlcnZpY2VOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNlcnZpY2UgICAgICAgPT4gJE5ld1NlcnZpY2VOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU2VydmljZS0xIC0gU2VudCBuZXcgc2VydmljZSwgV3JvbmcgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVNlcnZpY2UtMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFNlcnZpY2VOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU2VydmljZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTZXJ2aWNlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTZXJ2aWNlICAgICAgID0+ICROZXdTZXJ2aWNlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU2VydmljZS0xIC0gU2VudCBuZXcgc2VydmljZSwgQ29ycmVjdCBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU2VydmljZS0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3U2VydmljZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFNlcnZpY2VOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNlcnZpY2UgICAgICAgPT4gJE5ld1NlcnZpY2VOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdHlwZSBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1UeXBlLTEgLSBTZW50IG5ldyB0eXBlLCBXcm9uZyBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1UeXBlLTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1R5cGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBUeXBlICAgICAgICAgID0+ICROZXdUeXBlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVHlwZS0xIC0gU2VudCBuZXcgdHlwZSwgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVR5cGUtMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskVHlwZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IFsnTWlzYyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgICAgICAzID0+ICdKdW5rJywKICAgICAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdRdWV1ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBUeXBlICAgICAgICAgID0+ICROZXdUeXBlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVR5cGUtMSAtIFNlbnQgbmV3IHR5cGUsIFdyb25nIFByb3BlcnRpZXMsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1UeXBlLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRUeXBlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskVHlwZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgPT4gJE5ld1R5cGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1UeXBlLTEgLSBTZW50IG5ldyB0eXBlLCBDb3JyZWN0IFByb3BlcnRpZXMsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1UeXBlLTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyROZXdUeXBlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskVHlwZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgPT4gJE5ld1R5cGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICdSYXcnLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgY3VzdG9tZXIgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItQ3VzdG9tZXJVc2VyLTEgLSBTZXQgbmV3IEN1c3RvbWVyVXNlciwgV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItQ3VzdG9tZXJVc2VyLTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyROZXdDdXN0b21lclVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJE5ld0N1c3RvbWVyVXNlckRhdGF7VXNlcklEfSwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUN1c3RvbWVyVXNlci0xIC0gU2V0IG5ldyBDdXN0b21lclVzZXIsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItQ3VzdG9tZXJVc2VyLTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRDdXN0b21lclVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWyduZXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkTmV3Q3VzdG9tZXJVc2VyRGF0YXtVc2VySUR9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItQ3VzdG9tZXJVc2VyLTEgLSBTZXQgbmV3IEN1c3RvbWVyVXNlciwgV3JvbmcgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUN1c3RvbWVyVXNlci0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJEN1c3RvbWVyVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskQ3VzdG9tZXJVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlICA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICROZXdDdXN0b21lclVzZXJEYXRhe1VzZXJJRH0sCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1DdXN0b21lclVzZXItMSAtIFNldCBuZXcgQ3VzdG9tZXJVc2VyLCBDb3JyZWN0IFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1DdXN0b21lclVzZXItMS1TJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyROZXdDdXN0b21lclVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJEN1c3RvbWVyVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSAgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkTmV3Q3VzdG9tZXJVc2VyRGF0YXtVc2VySUR9LAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBwcmlvcml0eSBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Qcmlvcml0eS0xIC0gU2VudCBuZXcgcHJpb3JpdHksIFdyb25nIFByb3BlcnRpZXM6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Qcmlvcml0eS0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3UHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBQcmlvcml0eSAgICAgID0+ICROZXdQcmlvcml0eU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVByaW9yaXR5LTEgLSBTZW50IG5ldyBwcmlvcml0eSwgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Qcmlvcml0eS0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskUHJpb3JpdHlOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ25ldyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJE5ld1ByaW9yaXR5TmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUHJpb3JpdHktMSAtIFNlbnQgbmV3IHByaW9yaXR5LCBXcm9uZyBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItUHJpb3JpdHktMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJE5ld1ByaW9yaXR5TmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUHJpb3JpdHktMSAtIFNlbnQgbmV3IHByaW9yaXR5LCBDb3JyZWN0IFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Qcmlvcml0eS0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJE5ld1ByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkTmV3UHJpb3JpdHlOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHNsYSBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TTEEtMSAtIFNlbnQgbmV3IFNMQSwgV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU0xBLTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskTmV3U0xBTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU0xBICAgICAgICAgICA9PiAkTmV3U0xBTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU0xBLTEgLSBTZW50IG5ldyBTTEEsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU0xBLTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU0xBTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWyduZXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTTEEgICAgICAgICAgID0+ICROZXdTTEFOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU0xBLTEgLSBTZW50IG5ldyBTTEEsIFdyb25nIFByb3BlcnRpZXMsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU0xBLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU0xBID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFNMQU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFskU0xBTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU0xBICAgICAgICAgICA9PiAkTmV3U0xBTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU0xBLTEgLSBTZW50IG5ldyBTTEEsIENvcnJlY3QgUHJvcGVydGllcywgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVNMQS0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFNMQSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyROZXdTTEFOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU0xBID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFNMQU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNMQSAgICAgICAgICAgPT4gJE5ld1NMQU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBzdGF0ZSBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TdGF0ZS0xIC0gU2VudCBuZXcgc3RhdGUsIFdyb25nIFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVN0YXRlLTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyROZXdTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJE5ld1N0YXRlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItU3RhdGUtMSAtIFNlbnQgbmV3IHN0YXRlLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU3RhdGUtMS1CJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFN0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gWydKdW5rJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJE5ld1N0YXRlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgIDQgPT4gJ01pc2MnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TdGF0ZS0xIC0gU2VudCBuZXcgc3RhdGUsIFdyb25nIFByb3BlcnRpZXMsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1TdGF0ZS0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFN0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJFN0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnUmF3JywKICAgICAgICAgICAgICAgIDIgPT4gJ1Bvc3RNYXN0ZXInLAogICAgICAgICAgICAgICAgMyA9PiAnSnVuaycsCiAgICAgICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUXVldWUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkTmV3U3RhdGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1TdGF0ZS0xIC0gU2VudCBuZXcgc3RhdGUsIENvcnJlY3QgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItU3RhdGUtMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyROZXdTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWyRTdGF0ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ1JhdycsCiAgICAgICAgICAgICAgICAyID0+ICdQb3N0TWFzdGVyJywKICAgICAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICAgICAgNCA9PiAnTWlzYycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJE5ld1N0YXRlTmFtZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnUG9zdE1hc3RlcicsCiAgICAgICAgICAgIDMgPT4gJ0p1bmsnLAogICAgICAgICAgICA0ID0+ICdNaXNjJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIG93bmVyIGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLU93bmVyLTEgLSBTZW50IG5ldyBvd25lciwgV3JvbmcgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItT3duZXItMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIE93bmVyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskTmV3VXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBPd25lciAgICAgICAgID0+ICROZXdVc2VyTG9naW4sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLU93bmVyLTEgLSBTZW50IG5ldyBvd25lciwgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Pd25lci0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3duZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnY2xvc2VkJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgT3duZXIgICAgICAgICA9PiAkTmV3VXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Pd25lci0xIC0gU2VudCBuZXcgb3duZXIsIFdyb25nIFByb3BlcnRpZXMsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItT3duZXItMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBPd25lciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIE93bmVyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBPd25lciAgICAgICAgID0+ICROZXdVc2VyTG9naW4sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLU93bmVyLTEgLSBTZW50IG5ldyBvd25lciwgQ29ycmVjdCBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItT3duZXItMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBPd25lciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJE5ld1VzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIE93bmVyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBPd25lciAgICAgICAgID0+ICROZXdVc2VyTG9naW4sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgcmVzcG9uc2libGUgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUmVzcG9uc2libGUtMSAtIFNlbnQgbmV3IHJlc3BvbnNpYmxlLCBXcm9uZyBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1SZXNwb25zaWJsZS0xLUEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyROZXdVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFJlc3BvbnNpYmxlICAgPT4gJE5ld1VzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUmVzcG9uc2libGUtMSAtIFNlbnQgbmV3IHJlc3BvbnNpYmxlLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVJlc3BvbnNpYmxlLTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydjbG9zZWQnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBSZXNwb25zaWJsZSAgID0+ICROZXdVc2VyTG9naW4sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1SZXNwb25zaWJsZS0xIC0gU2VudCBuZXcgcmVzcG9uc2libGUsIFdyb25nIFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1SZXNwb25zaWJsZS0xLUMnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFJlc3BvbnNpYmxlICAgPT4gJE5ld1VzZXJMb2dpbiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItUmVzcG9uc2libGUtMSAtIFNlbnQgbmV3IHJlc3BvbnNpYmxlLCBDb3JyZWN0IFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVJlc3BvbnNpYmxlLTEtRCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyROZXdVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgUmVzcG9uc2libGUgICA9PiAkTmV3VXNlckxvZ2luLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgZnJvbnRlbmQgYmFzZWQgdGVzdHMKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItRnJvbnRlbmQtMSAtIGNvcnJlY3QgQWN0aW9uOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItRnJvbnRlbmQtMScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBGcm9udGVuZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbiA9PiBbICdBZ2VudFRpY2tldFBob25lJywgJ0FnZW50VGlja2V0RW1haWwnIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgPT4gJ0FnZW50VGlja2V0UGhvbmUnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGlja2V0IGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVRpY2tldC0xIC0gU2VudCBuZXcgcGFyYW1zLCBXcm9uZyBQcm9wZXJ0aWVzRGF0YWJhc2UgOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1UaWNrZXQtMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlICAgID0+IFskTmV3UXVldWVOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyROZXdQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICA9PiBbJE5ld1N0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQWN0aW9uID0+IFsnQWdlbnRUaWNrZXRDb21wb3NlJ10sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldENsb3NlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnQWN0aW9uJywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnLScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICROZXdRdWV1ZU5hbWUsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJE5ld1ByaW9yaXR5TmFtZSwKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkTmV3U3RhdGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKCiAgICAgICAgIyBBY3Rpb24gQUNMIGFsd2F5cyByZXR1cm4gZmFsc2UKICAgICAgICBTdWNjZXNzTWF0Y2ggICAgID0+IDAsCiAgICAgICAgUmV0dXJuQWN0aW9uRGF0YSA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLVRpY2tldC0xIC0gU2VudCBuZXcgcGFyYW1zLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVRpY2tldC0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgICAgPT4gWyRRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbJFByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gPT4gWyAnQWdlbnRUaWNrZXRDbG9zZScsICdBZ2VudFRpY2tldEJvdW5jZScsIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldENsb3NlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnQWN0aW9uJywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnLScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICROZXdRdWV1ZU5hbWUsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJE5ld1ByaW9yaXR5TmFtZSwKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkTmV3U3RhdGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKCiAgICAgICAgIyBBY3Rpb24gQUNMIGFsd2F5cyByZXR1cm4gZmFsc2UKICAgICAgICBTdWNjZXNzTWF0Y2ggICAgID0+IDEsCiAgICAgICAgUmV0dXJuQWN0aW9uRGF0YSA9PiB7CiAgICAgICAgICAgIDEgPT4gJ0FnZW50VGlja2V0Q2xvc2UnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1UaWNrZXQtMSAtIFNlbnQgbmV3IHBhcmFtcywgV3JvbmcgUHJvcGVydGllcywnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVGlja2V0LTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgICAgPT4gWyRRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbJFByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUXVldWUgICAgPT4gWyRRdWV1ZU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbJFByaW9yaXR5TmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgID0+IFskU3RhdGVOYW1lXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gPT4gWydBZ2VudFRpY2tldENvbXBvc2UnXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ0FnZW50VGlja2V0Q2xvc2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJE5ld1F1ZXVlTmFtZSwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkTmV3UHJpb3JpdHlOYW1lLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgID0+ICROZXdTdGF0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCAgICAgPT4gMCwKICAgICAgICBSZXR1cm5BY3Rpb25EYXRhID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVGlja2V0LTIgLSBTZW50IG5ldyBwYXJhbXMsIFdyb25nIFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVRpY2tldC0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlICAgID0+IFskTmV3UXVldWVOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyROZXdQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICA9PiBbJE5ld1N0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlICAgID0+IFskUXVldWVOYW1lXSwKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyRQcmlvcml0eU5hbWVdLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICA9PiBbJFN0YXRlTmFtZV0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQWN0aW9uID0+IFsnQWdlbnRUaWNrZXRDb21wb3NlJ10sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldENsb3NlJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnQWN0aW9uJywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnLScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICROZXdRdWV1ZU5hbWUsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJE5ld1ByaW9yaXR5TmFtZSwKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAkTmV3U3RhdGVOYW1lLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKCiAgICAgICAgIyBBY3Rpb24gQUNMIGFsd2F5cyByZXR1cm4gZmFsc2UKICAgICAgICBTdWNjZXNzTWF0Y2ggICAgID0+IDEsCiAgICAgICAgUmV0dXJuQWN0aW9uRGF0YSA9PiB7fQogICAgfSwKCiAgICAjIGR5bmFtaWMgZmllbGRzIGJhc2VkIHRlc3RzCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUR5bmFtaWNGaWVsZC0xIC0gU2VudCBuZXcgZHluYW1pYyBmaWVsZCB2YWx1ZSwnCiAgICAgICAgICAgIC4gJyBXcm9uZyBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1EeW5hbWljRmllbGQtMS1BJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzRGF0YWJhc2UgPT4gewogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lc1swXSA9PiBbJ0l0ZW0yJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gWydvcGVuJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ25ldycsCiAgICAgICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgICAgIDMgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZCAgPT4gewogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWVzWzBdID0+IFsnSXRlbTInXQogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIERCLUR5bmFtaWNGaWVsZC0xIC0gU2VudCBuZXcgZHluYW1pYyBmaWVsZCB2YWx1ZSwnCiAgICAgICAgICAgIC4gJyBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLUR5bmFtaWNGaWVsZC0xLUInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWVzWzBdID0+IFsnSXRlbTEnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ25ldyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBEeW5hbWljRmllbGQgID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lc1swXSA9PiBbJ0l0ZW0yJ10KICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAyID0+ICdvcGVuJywKICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItRHluYW1pY0ZpZWxkLTEgLSBTZW50IG5ldyBkeW5hbWljIGZpZWxkIHZhbHVlLCBXcm9uZyBQcm9wZXJ0aWVzLCcKICAgICAgICAgICAgLiAnIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItRHluYW1pY0ZpZWxkLTEtQycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWVzWzBdID0+IFsnSXRlbTEnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWVzWzBdID0+IFsnSXRlbTEnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiBbJ29wZW4nXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnbmV3JywKICAgICAgICAgICAgICAgIDIgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgMyA9PiAnY2xvc2VkJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkICA9PiB7CiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZXNbMF0gPT4gWydJdGVtMiddCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItRHluYW1pY0ZpZWxkLTEgLSBTZW50IG5ldyBkeW5hbWljIGZpZWxkIHZhbHVlLCBDb3JyZWN0IFByb3BlcnRpZXMsJwogICAgICAgICAgICAuICcgQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1EeW5hbWljRmllbGQtMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZXNbMF0gPT4gWydJdGVtMiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZXNbMF0gPT4gWydJdGVtMSddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlID0+IFsnb3BlbiddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAgICAgMiA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdTdGF0ZScsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBEeW5hbWljRmllbGQgID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGROYW1lc1swXSA9PiBbJ0l0ZW0yJ10KICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICduZXcnLAogICAgICAgICAgICAzID0+ICdjbG9zZWQnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1EeW5hbWljRmllbGQgLSByZXN0cmljdCBhY3Rpb24nLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItRHluYW1pY0ZpZWxkJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZXNbMF0gPT4gWydJdGVtMSddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIEFjdGlvbiA9PiBbJ0FnZW50VGlja2V0Q2xvc2UnXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJ0FnZW50VGlja2V0UHJpbnQnLAogICAgICAgICAgICAgICAgMiA9PiAnQWdlbnRUaWNrZXRDbG9zZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoICAgICA9PiAxLAogICAgICAgIFJldHVybkFjdGlvbkRhdGEgPT4gewogICAgICAgICAgICAxID0+ICdBZ2VudFRpY2tldFByaW50JywKICAgICAgICB9CiAgICB9LAoKICAgICMgdXNlciBiYXNlZCB0ZXN0cwogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Vc2VyLTEgLSBXcm9uZyBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Vc2VyLTEtQScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskTmV3VXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgREItVXNlci0xIC0gQ29ycmVjdCBQcm9wZXJ0aWVzRGF0YWJhc2U6ICcsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdEQi1Vc2VyLTEtQicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbJzIgbG93J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Vc2VyLTEgLSBXcm9uZyBQcm9wZXJ0aWVzLCBDb3JyZWN0IFByb3BlcnRpZXNEYXRhYmFzZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVVzZXItMS1DJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskTmV3VXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXNEYXRhYmFzZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWycyIGxvdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4ge30sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Vc2VyLTEgLSBDb3JyZWN0IFByb3BlcnRpZXMsIENvcnJlY3QgUHJvcGVydGllc0RhdGFiYXNlOiAnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnREItVXNlci0xLUQnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllc0RhdGFiYXNlID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICB9LAogICAgfSwKKTsKCiMgR2V0IHJvbGUgb2JqZWN0LgpteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiMgQWRkIHNvbWUgcm9sZXMKbXkgJFJvbGVJRDEgPSAkR3JvdXBPYmplY3QtPlJvbGVBZGQoCiAgICBOYW1lICAgID0+ICJ1bml0dGVzdDEtJFJhbmRvbUlEIiwKICAgIENvbW1lbnQgPT4gJ2NvbW1lbnQgZGVzY3JpYmluZyB0aGUgcm9sZScsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5Jc05vdCgKICAgICRSb2xlSUQxLAogICAgdW5kZWYsCiAgICAiUm9sZUFkZCgpIC0gUm9sZUlEMSIsCik7Cm15ICRSb2xlSUQyID0gJEdyb3VwT2JqZWN0LT5Sb2xlQWRkKAogICAgTmFtZSAgICA9PiAidW5pdHRlc3QyLSRSYW5kb21JRCIsCiAgICBDb21tZW50ID0+ICdjb21tZW50IGRlc2NyaWJpbmcgdGhlIHJvbGUnLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwokU2VsZi0+SXNOb3QoCiAgICAkUm9sZUlEMiwKICAgIHVuZGVmLAogICAgIlJvbGVBZGQoKSAtIFJvbGVJRDIiLAopOwoKbXkgJFJlbW92ZVJvbGVzID0gc3ViIHsKCiAgICBmb3IgbXkgJFJvbGVJRCAoICRSb2xlSUQxLCAkUm9sZUlEMiApIHsKICAgICAgICBteSAkU3VjY2VzcyA9ICRHcm91cE9iamVjdC0+UGVybWlzc2lvblJvbGVVc2VyQWRkKAogICAgICAgICAgICBVSUQgICAgPT4gJFVzZXJJRCwKICAgICAgICAgICAgUklEICAgID0+ICRSb2xlSUQsCiAgICAgICAgICAgIEFjdGl2ZSA9PiAwLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlRlc3QgdXNlciByZW1vdmVkIGZyb20gUm9sZSAkUm9sZUlEIiwKICAgICAgICApOwogICAgfQp9OwoKbXkgJEV4ZWN1dGVUZXN0cyA9IHN1YiB7CiAgICBteSAlUGFyYW0gPSBAXzsKICAgIG15IEBUZXN0cyA9IEB7ICRQYXJhbXtUZXN0c30gfTsKCiAgICBmb3IgbXkgJFRlc3QgKEBUZXN0cykgewoKICAgICAgICAjIGNsZWFuIHByZXZpb3VzIGRhdGEKICAgICAgICAkVGlja2V0T2JqZWN0LT57VGlja2V0QWNsRGF0YX0gPSB7fTsKCiAgICAgICAgaWYgKCAkVGVzdC0+e0FkZFJvbGVzfSApIHsKICAgICAgICAgICAgJFJlbW92ZVJvbGVzLT4oKTsKICAgICAgICAgICAgZm9yIG15ICRSb2xlSUQgKCBAeyAkVGVzdC0+e0FkZFJvbGVzfSB9ICkgewogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25Sb2xlVXNlckFkZCgKICAgICAgICAgICAgICAgICAgICBVSUQgICAgPT4gJFVzZXJJRCwKICAgICAgICAgICAgICAgICAgICBSSUQgICAgPT4gJFJvbGVJRCwKICAgICAgICAgICAgICAgICAgICBBY3RpdmUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICAgICAiVGVzdCB1c2VyIGFkZGVkIHRvIFJvbGUgJFJvbGVJRCIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXRBY2wnLAogICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e0FDTHN9LAogICAgICAgICk7CgogICAgICAgICRHb3RBQ0xzID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRBY2wnKTsKCiAgICAgICAgIyBzYW5pdHkgY2hlY2sKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRHb3RBQ0xzLAogICAgICAgICAgICAkVGVzdC0+e0FDTHN9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBBQ0xzIFNldCBhbmQgR2V0IGZyb20gc3lzY29uZmlnIiwKICAgICAgICApOwoKICAgICAgICBteSAkQUNMU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCggJXsgJFRlc3QtPntDb25maWd9IH0gKTsKCiAgICAgICAgIyBnZXQgdGhlIGRhdGEgZnJvbSBBQ0wKICAgICAgICBteSAlQUNMRGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKTsKCiAgICAgICAgaWYgKCAhJFRlc3QtPntTdWNjZXNzTWF0Y2h9ICkgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkQUNMU3VjY2VzcywKICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IEV4ZWN1dGVkIHdpdGggRmFsc2UiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgXCVBQ0xEYXRhLAogICAgICAgICAgICAgICAge30sCiAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBBQ0wgZGF0YSBtdXN0IGJlIGVtcHR5IiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICBpZiAoICRUZXN0LT57Q29uZmlnfS0+e1JldHVyblR5cGV9IGVxICdBY3Rpb24nICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBhY3Rpb24gZGF0YSBmcm9tIEFDTAogICAgICAgICAgICAgICAgIyBBY3Rpb24gQUNMIGFsd2F5cyByZXR1cm4gZmFsc2UKICAgICAgICAgICAgICAgIG15ICVBQ0xBY3Rpb25EYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsQWN0aW9uRGF0YSgpOwoKICAgICAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICAgICBcJUFDTEFjdGlvbkRhdGEsCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXR1cm5BY3Rpb25EYXRhfSwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBBQ0wgYWN0aW9uIGRhdGEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICRBQ0xTdWNjZXNzLAogICAgICAgICAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IEV4ZWN1dGVkIHdpdGggVHJ1ZSIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICAgICBcJUFDTERhdGEsCiAgICAgICAgICAgICAgICAgICAgJFRlc3QtPntSZXR1cm5EYXRhfSwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBBQ0wgZGF0YSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNsZWFuIEFDTHMKICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXRBY2wnLAogICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICApOwoKICAgICAgICAkR290QUNMcyA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0QWNsJyk7CgogICAgICAgICMgc2FuaXR5IGNoZWNrCiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkR290QUNMcywKICAgICAgICAgICAge30sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IEFDTHMgYXJlIGNsZWFuIiwKICAgICAgICApOwoKICAgICAgICBpZiAoICRUZXN0LT57QWRkUm9sZXN9ICkgewogICAgICAgICAgICAkUmVtb3ZlUm9sZXMtPigpOwogICAgICAgIH0KICAgIH0KfTsKJEV4ZWN1dGVUZXN0cy0+KCBUZXN0cyA9PiBcQFRlc3RzICk7CgojIHNwZWNpYWwgdGVzdHMKQFRlc3RzID0gKAoKICAgICMgUHJvcGVydGllcyBOb3QKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90XTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnW05vdF1SYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnTWlzYycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gVXNpbmcgW05vdF0gTmVnYXRlZCBRdWV1ZTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnW05vdF1SYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90XSBpbiBhbiBBcnJheTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsgJ1tOb3RdUmF3JywgJ1tOb3RdUG9zdG1hc3RlcicgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnTWlzYycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQcm9wZXJ0aWVzIE5vdFJlZ0V4cAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFVzaW5nIFtOb3RSZWdFeHBdOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdOb3QtUXVldWUtUmF3JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydbTm90UmVnRXhwXUhXJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ01pc2MnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFVzaW5nIFtOb3RSZWdFeHBdIE5lZ2F0ZWQgUXVldWU6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ05vdC1RdWV1ZS1SYXcnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1tOb3RSZWdFeHBdYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHt9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90UmVnRXhwXSBpbiBhbiBBcnJheTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsgJ1tOb3RSZWdFeHBdYXcnLCAnW05vdFJlZ0V4cF1tYXN0ZXInIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ01pc2MnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUHJvcGVydGllcyBOb3RyZWdleHAKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90cmVnZXhwXTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnTm90LVF1ZXVlLVJhdycgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnW05vdHJlZ2V4cF1IVyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdNaXNjJywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBVc2luZyBbTm90cmVnZXhwXSBOZWdhdGVkIFF1ZXVlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdOb3QtUXVldWUtUmF3JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydbTm90cmVnZXhwXXJhJ10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7fSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gVXNpbmcgW05vdHJlZ2V4cF0gaW4gYW4gQXJyYXk6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ05vdC1RdWV1ZS1SYXcnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbICdbTm90cmVnZXhwXXJhJywgJ1tOb3RyZWdleHBdbWFzdGVyJyBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdNaXNjJywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIGNvbWJpbmF0aW9uIHBvc3NpYmxlLCBwb3NzaWJsZSBub3QKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBQb3NzaWJsZS9Qb3NzaWJsZU5vdDonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHknID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMiBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHkyJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcyIGxvdycsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gUG9zc2libGUvUG9zc2libGVOb3QgSm9pbjonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHknID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMiBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzIgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBQb3NzaWJsZU5vdCBvbmx5OicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eTInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzIgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Vc2VyLTEgLSBQb3NzaWJsZS9Qb3NzaWJsZUFkZDogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVVzZXItMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICAnREItVXNlci0xLUUnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZUFkZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnNCBoaWdoJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgNCA9PiAnNCBoaWdoJwogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBEQi1Vc2VyLTEgLSBQb3NzaWJsZS9Qb3NzaWJsZUFkZC9Qb3NzaWJsZTogJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ0RCLVVzZXItMS1EJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICAnREItVXNlci0xLUUnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiBbJFVzZXJMb2dpbl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZUFkZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnNCBoaWdoJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ0RCLVVzZXItMS1GJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+IFskVXNlckxvZ2luXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gWyRVc2VyTG9naW5dLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzQgaGlnaCcsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCgogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMSwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICA0ID0+ICc0IGhpZ2gnCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFF1ZXVlIC0gUG9zc2libGVOb3QvUG9zc2libGVBZGQ6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5MScgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vdCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICcyIGxvdycsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eTInID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVBZGQgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzIgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgICAgICA0ID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgNSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgUXVldWUgICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBRdWV1ZSAtIFBvc3NpYmxlTm90L1Bvc3NpYmxlOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdRdWV1ZS1Qb3NzaWJsZS1Qcmlvcml0eTEnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFF1ZXVlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiBbJ1JhdyddLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGVOb3QgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzIgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5MicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICcyIGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgUXVldWUgLSBQb3NzaWJsZS9Qb3NzaWJsZUFkZC9Qb3NzaWJsZU5vdDonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHkxJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzIgbG93JywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ1F1ZXVlLVBvc3NpYmxlLVByaW9yaXR5MicgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgUXVldWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+IFsnUmF3J10sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZUFkZCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMiBsb3cnLCAnMyBtZWRpdW0nLCAnNCBoaWdoJyBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICAnUXVldWUtUG9zc2libGUtUHJpb3JpdHkzJyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBRdWV1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gWydSYXcnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICAgICAgNCA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgdmVyeSBoaWdoJwogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDQgPT4gJzQgaGlnaCcsCiAgICAgICAgfSwKICAgIH0sCik7CiRTZWxmLT5UcnVlKAogICAgMSwKICAgICItLS0gU3RhcnQgU3BlY2lhbCBBQ0wgVGVzdHMgLS0tIiwKKTsKJEV4ZWN1dGVUZXN0cy0+KCBUZXN0cyA9PiBcQFRlc3RzICk7CgojIEFycmF5IG1hdGNoIHRlc3RzCm15IEBUZXN0c05vcm1hbCA9ICgKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gTm8gcm9sZXMgY2hlY2sgdW5pdHRlc3QxJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1JvbGUtVGVzdCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJvbGUgPT4gWyJ1bml0dGVzdDEtJFJhbmRvbUlEIl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gMSByb2xlICh3cm9uZykgY2hlY2sgdW5pdHRlc3QxJywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1JvbGUtVGVzdCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJvbGUgPT4gWyJ1bml0dGVzdDEtJFJhbmRvbUlEIl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIEFkZFJvbGVzICAgICA9PiBbJFJvbGVJRDJdLAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDEgcm9sZSBjaGVjayB1bml0dGVzdDEnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUm9sZS1UZXN0JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUm9sZSA9PiBbInVuaXR0ZXN0MS0kUmFuZG9tSUQiXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgQWRkUm9sZXMgICAgID0+IFskUm9sZUlEMV0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDIgcm9sZSBjaGVjayB1bml0dGVzdDEnLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUm9sZS1UZXN0JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUm9sZSA9PiBbInVuaXR0ZXN0MS0kUmFuZG9tSUQiXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgQWRkUm9sZXMgICAgID0+IFsgJFJvbGVJRDEsICRSb2xlSUQyIF0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDIgcm9sZSBjaGVjayB1bml0dGVzdDInLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUm9sZS1UZXN0JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUm9sZSA9PiBbInVuaXR0ZXN0Mi0kUmFuZG9tSUQiXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgQWRkUm9sZXMgICAgID0+IFsgJFJvbGVJRDEsICRSb2xlSUQyIF0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDEsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKKTsKCm15ICVUZXN0TW9kaWZpZXJzID0gKAogICAgUmVnRXhwID0+IFsKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSBObyByb2xlcyBjaGVjayBbUmVnRXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbUmVnRXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAxIHJvbGUgKHdyb25nKSBjaGVjayBbUmVnRXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbUmVnRXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMSByb2xlIGNoZWNrIFtSZWdFeHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltSZWdFeHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgW1JlZ0V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW1JlZ0V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDIgcm9sZSBjaGVjayBbUmVnRXhwXXVuaXR0ZXN0MicsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbUmVnRXhwXXVuaXR0ZXN0MiJdCiAgICAgICAgfQogICAgXSwKICAgIHJlZ2V4cCA9PiBbCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gTm8gcm9sZXMgY2hlY2sgW3JlZ2V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW3JlZ2V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gMSByb2xlICh3cm9uZykgY2hlY2sgW3JlZ2V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW3JlZ2V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDEgcm9sZSBjaGVjayBbcmVnZXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbcmVnZXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMiByb2xlIGNoZWNrIFtyZWdleHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltyZWdleHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgW3JlZ2V4cF11bml0dGVzdDInLAogICAgICAgICAgICBSb2xlID0+IFsiW3JlZ2V4cF11bml0dGVzdDIiXQogICAgICAgIH0sCiAgICBdCik7CgpteSAkTnVtYmVyT2ZUZXN0cyA9ICQjVGVzdHNOb3JtYWw7Cgpmb3IgbXkgJFRlc3RDYXNlICggc29ydCBrZXlzICVUZXN0TW9kaWZpZXJzICkgewogICAgZm9yIG15ICRJbmRleCAoIDAgLi4gJE51bWJlck9mVGVzdHMgKSB7CgogICAgICAgIG15ICRUZXN0ID0gJFN0b3JhYmxlT2JqZWN0LT5DbG9uZSggRGF0YSA9PiAkVGVzdHNOb3JtYWxbJEluZGV4XSApOwoKICAgICAgICAkVGVzdC0+e05hbWV9ID0gJFRlc3RNb2RpZmllcnN7JFRlc3RDYXNlfS0+WyRJbmRleF0tPntOYW1lfTsKICAgICAgICAkVGVzdC0+e0FDTHN9LT57J1JvbGUtVGVzdCd9LT57UHJvcGVydGllc30tPntVc2VyfS0+e1JvbGV9ID0gJFRlc3RNb2RpZmllcnN7JFRlc3RDYXNlfS0+WyRJbmRleF0tPntSb2xlfTsKCiAgICAgICAgcHVzaCBAVGVzdHNOb3JtYWwsICRUZXN0OwogICAgfQp9CgpteSBAVGVzdHNOb3QgPSAoCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIE5vIHJvbGVzIGNoZWNrIFtOb3RddW5pdHRlc3QxOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdSb2xlLVRlc3QnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSb2xlID0+IFsiW05vdF11bml0dGVzdDEtJFJhbmRvbUlEIl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIDEgcm9sZSAod3JvbmcpIGNoZWNrIFtOb3RddW5pdHRlc3QxOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdSb2xlLVRlc3QnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSb2xlID0+IFsiW05vdF11bml0dGVzdDEtJFJhbmRvbUlEIl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIEFkZFJvbGVzICAgICA9PiBbJFJvbGVJRDJdLAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAxLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtIDEgcm9sZSBjaGVjayBbTm90XXVuaXR0ZXN0MTonLAogICAgICAgIEFDTHMgPT4gewogICAgICAgICAgICAnUm9sZS1UZXN0JyA9PiB7CiAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzID0+IHsKICAgICAgICAgICAgICAgICAgICBVc2VyID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUm9sZSA9PiBbIltOb3RddW5pdHRlc3QxLSRSYW5kb21JRCJdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUG9zc2libGUgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+IFsgJzEgdmVyeSBsb3cnLCAnMyBtZWRpdW0nLCBdLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgfSwKICAgICAgICBBZGRSb2xlcyAgICAgPT4gWyRSb2xlSUQxXSwKICAgICAgICBTdWNjZXNzTWF0Y2ggPT4gMCwKICAgICAgICBSZXR1cm5EYXRhICAgPT4gewogICAgICAgICAgICAxID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgW05vdF11bml0dGVzdDE6JywKICAgICAgICBBQ0xzID0+IHsKICAgICAgICAgICAgJ1JvbGUtVGVzdCcgPT4gewogICAgICAgICAgICAgICAgUHJvcGVydGllcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90XXVuaXR0ZXN0MS0kUmFuZG9tSUQiXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlID0+IHsKICAgICAgICAgICAgICAgICAgICBUaWNrZXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiBbICcxIHZlcnkgbG93JywgJzMgbWVkaXVtJywgXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAzID0+ICczIG1lZGl1bScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgICAgIH0sCiAgICAgICAgQWRkUm9sZXMgICAgID0+IFsgJFJvbGVJRDEsICRSb2xlSUQyIF0sCiAgICAgICAgU3VjY2Vzc01hdGNoID0+IDAsCiAgICAgICAgUmV0dXJuRGF0YSAgID0+IHsKICAgICAgICAgICAgMSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIDIgPT4gJzIgbG93JywKICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMiByb2xlIGNoZWNrIFtOb3RddW5pdHRlc3QyOicsCiAgICAgICAgQUNMcyA9PiB7CiAgICAgICAgICAgICdSb2xlLVRlc3QnID0+IHsKICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSb2xlID0+IFsiW05vdF11bml0dGVzdDItJFJhbmRvbUlEIl0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gWyAnMSB2ZXJ5IGxvdycsICczIG1lZGl1bScsIF0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgMiA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgMyA9PiAnMyBtZWRpdW0nLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICB9LAogICAgICAgIEFkZFJvbGVzICAgICA9PiBbICRSb2xlSUQxLCAkUm9sZUlEMiBdLAogICAgICAgIFN1Y2Nlc3NNYXRjaCA9PiAwLAogICAgICAgIFJldHVybkRhdGEgICA9PiB7CiAgICAgICAgICAgIDEgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAyID0+ICcyIGxvdycsCiAgICAgICAgICAgIDMgPT4gJzMgbWVkaXVtJywKICAgICAgICB9LAogICAgfSwKKTsKCiVUZXN0TW9kaWZpZXJzID0gKAogICAgUmVnRXhwID0+IFsKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSBObyByb2xlcyBjaGVjayBbTm90UmVnRXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90UmVnRXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAxIHJvbGUgKHdyb25nKSBjaGVjayBbTm90UmVnRXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90UmVnRXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMSByb2xlIGNoZWNrIFtOb3RSZWdFeHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltOb3RSZWdFeHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgW05vdFJlZ0V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW05vdFJlZ0V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDIgcm9sZSBjaGVjayBbTm90UmVnRXhwXXVuaXR0ZXN0MicsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90UmVnRXhwXXVuaXR0ZXN0MiJdCiAgICAgICAgfQogICAgXSwKICAgIHJlZ2V4cCA9PiBbCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gTm8gcm9sZXMgY2hlY2sgW05vdHJlZ2V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW05vdHJlZ2V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gMSByb2xlICh3cm9uZykgY2hlY2sgW05vdHJlZ2V4cF11bml0dGVzdDEnLAogICAgICAgICAgICBSb2xlID0+IFsiW05vdHJlZ2V4cF11bml0dGVzdDEiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lID0+ICdBQ0wgVXNlciBSb2xlIC0gIDEgcm9sZSBjaGVjayBbTm90cmVnZXhwXXVuaXR0ZXN0MScsCiAgICAgICAgICAgIFJvbGUgPT4gWyJbTm90cmVnZXhwXXVuaXR0ZXN0MSJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgPT4gJ0FDTCBVc2VyIFJvbGUgLSAgMiByb2xlIGNoZWNrIFtOb3RyZWdleHBddW5pdHRlc3QxJywKICAgICAgICAgICAgUm9sZSA9PiBbIltOb3RyZWdleHBddW5pdHRlc3QxIl0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSA9PiAnQUNMIFVzZXIgUm9sZSAtICAyIHJvbGUgY2hlY2sgW05vdHJlZ2V4cF11bml0dGVzdDInLAogICAgICAgICAgICBSb2xlID0+IFsiW05vdHJlZ2V4cF11bml0dGVzdDIiXQogICAgICAgIH0sCiAgICBdCik7CgokTnVtYmVyT2ZUZXN0cyA9ICQjVGVzdHNOb3Q7Cgpmb3IgbXkgJFRlc3RDYXNlICggc29ydCBrZXlzICVUZXN0TW9kaWZpZXJzICkgewogICAgZm9yIG15ICRJbmRleCAoIDAgLi4gJE51bWJlck9mVGVzdHMgKSB7CgogICAgICAgIG15ICRUZXN0ID0gZGNsb25lKCAkVGVzdHNOb3RbJEluZGV4XSApOwoKICAgICAgICAkVGVzdC0+e05hbWV9ID0gJFRlc3RNb2RpZmllcnN7JFRlc3RDYXNlfS0+WyRJbmRleF0tPntOYW1lfTsKICAgICAgICAkVGVzdC0+e0FDTHN9LT57J1JvbGUtVGVzdCd9LT57UHJvcGVydGllc30tPntVc2VyfS0+e1JvbGV9ID0gJFRlc3RNb2RpZmllcnN7JFRlc3RDYXNlfS0+WyRJbmRleF0tPntSb2xlfTsKCiAgICAgICAgcHVzaCBAVGVzdHNOb3QsICRUZXN0OwogICAgfQp9CgpAVGVzdHMgPSAoIEBUZXN0c05vcm1hbCwgQFRlc3RzTm90ICk7CgokU2VsZi0+VHJ1ZSgKICAgIDEsCiAgICAiLS0tIFN0YXJ0IEFycmF5IG1hdGNoIEFDTCBUZXN0cyAtLS0iLAopOwokRXhlY3V0ZVRlc3RzLT4oIFRlc3RzID0+IFxAVGVzdHMgKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/Ticket/TicketServiceList.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1RpY2tldC9UaWNrZXRTZXJ2aWNlTGlzdC50CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpSZWdpc3RlckRyaXZlcjsgICAgIyBTZXQgdXAgJEtlcm5lbDo6T00gYW5kICRtYWluOjpTZWxmCgpvdXIgJFNlbGY7CgojIGdldCBoZWxwZXIgb2JqZWN0CiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwpteSAkVGlja2V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwpteSAkVHlwZU9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyk7CgpteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKCm15ICRSYW5kb20gPSAkSGVscGVyLT5HZXRSYW5kb21OdW1iZXIoKTsKCm15ICRUeXBlSUQxID0gJFR5cGVPYmplY3QtPlR5cGVBZGQoCiAgICBOYW1lICAgID0+ICdUZXN0VHlwZTEnIC4gJFJhbmRvbSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkVHlwZUlEMSwKICAgICdUeXBlIDEgY3JlYXRlZC4nLAopOwoKbXkgJFR5cGVJRDIgPSAkVHlwZU9iamVjdC0+VHlwZUFkZCgKICAgIE5hbWUgICAgPT4gJ1Rlc3RUeXBlMicgLiAkUmFuZG9tLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUeXBlSUQyLAogICAgJ1R5cGUgMiBjcmVhdGVkLicsCik7CgojIC0tLQojIElUU01Db3JlCiMgLS0tCgojIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNlcnZpY2VUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXskU2VydmljZVR5cGVMaXN0fTsKCiMgLS0tCgpteSAkU2VydmljZUlEMSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICA9PiAnVGVzdFNlcnZpY2UxJyAuICRSYW5kb20sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCgogICAgIyAtLS0KICAgICMgSVRTTUNvcmUKICAgICMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAkU2VydmljZVR5cGVOYW1lMklEe1RyYWluaW5nfSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgIyAtLS0KKTsKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUlEMSwKICAgICdTZXJ2aWNlIDEgY3JlYXRlZC4nLAopOwpteSAkU2VydmljZUlEMiA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICA9PiAnVGVzdFNlcnZpY2UyJyAuICRSYW5kb20sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCgogICAgIyAtLS0KICAgICMgSVRTTUNvcmUKICAgICMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAkU2VydmljZVR5cGVOYW1lMklEe1RyYWluaW5nfSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgIyAtLS0KKTsKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUlEMiwKICAgICdTZXJ2aWNlIDIgY3JlYXRlZC4nLAopOwoKbXkgJFF1ZXVlSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVMb29rdXAoIFF1ZXVlID0+ICdSYXcnICk7CgpteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJ1Rlc3QgdGlja2V0IHRpdGxlICcgLiAkUmFuZG9tLAogICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZUlELAogICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RVc2VyTG9naW4sCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SUQsCiAgICAnVGlja2V0IGNyZWF0ZWQuJywKKTsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1RpY2tldFNlcnZpY2VMaXN0KCkgLSBNaXNzaW5nIFVzZXJJRCBvciBDdXN0b21lclVzZXJJRCcsCiAgICAgICAgUGFyYW1zID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdUaWNrZXRTZXJ2aWNlTGlzdCgpIC0gTWlzc2luZyBUaWNrZXRJRCBvciBRdWV1ZUlEJywKICAgICAgICBQYXJhbXMgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0ID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnVGlja2V0U2VydmljZUxpc3QoKSAtIFVzZXJJRCBhbmQgVGlja2V0SUQnLAogICAgICAgIFBhcmFtcyA9PiB7CiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0ID0+IHsKICAgICAgICAgICAgIiRTZXJ2aWNlSUQxIiA9PiAnVGVzdFNlcnZpY2UxJyAuICRSYW5kb20sCiAgICAgICAgICAgICIkU2VydmljZUlEMiIgPT4gJ1Rlc3RTZXJ2aWNlMicgLiAkUmFuZG9tLAoKICAgICAgICAgICAgIyBUaGVyZSBtaWdodCBiZSBvdGhlciBzZXJ2aWNlcyBhcyB3ZWxsLi4uCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdUaWNrZXRTZXJ2aWNlTGlzdCgpIC0gVXNlcklEIGFuZCBRdWV1ZUlEJywKICAgICAgICBQYXJhbXMgPT4gewogICAgICAgICAgICBRdWV1ZUlEID0+ICRRdWV1ZUlELAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdCA9PiB7CiAgICAgICAgICAgICIkU2VydmljZUlEMSIgPT4gJ1Rlc3RTZXJ2aWNlMScgLiAkUmFuZG9tLAogICAgICAgICAgICAiJFNlcnZpY2VJRDIiID0+ICdUZXN0U2VydmljZTInIC4gJFJhbmRvbSwKCiAgICAgICAgICAgICMgVGhlcmUgbWlnaHQgYmUgb3RoZXIgc2VydmljZXMgYXMgd2VsbC4uLgogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnVGlja2V0U2VydmljZUxpc3QoKSAtIEN1c3RvbWVyVXNlcklEIGFuZCBRdWV1ZUlEJywKICAgICAgICBQYXJhbXMgPT4gewogICAgICAgICAgICBRdWV1ZUlEICAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdCA9PiB7CgogICAgICAgICAgICAjIFRoZXJlIG1pZ2h0IGJlIG90aGVyIHNlcnZpY2VzIGFzIHdlbGwuLi4KICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1RpY2tldFNlcnZpY2VMaXN0KCkgLSBDdXN0b21lclVzZXJJRCBhbmQgVGlja2V0SUQnLAogICAgICAgIFBhcmFtcyA9PiB7CiAgICAgICAgICAgIFRpY2tldElEICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdCA9PiB7CgogICAgICAgICAgICAjIFRoZXJlIG1pZ2h0IGJlIG90aGVyIHNlcnZpY2VzIGFzIHdlbGwuLi4KICAgICAgICB9LAogICAgfSwKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgbXkgJUxpc3QgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZXJ2aWNlTGlzdCgKICAgICAgICAleyAkVGVzdC0+e1BhcmFtc30gfSwKICAgICk7CgogICAgaWYgKCAkVGVzdC0+e0V4cGVjdGVkUmVzdWx0fSApIHsKCiAgICAgICAgIyBpZiAoJFRlc3QtPntQYXJhbXN9LT57VXNlcklEfSkgewogICAgICAgICMgUmVtb3ZlIGFsbCBvdGhlciBzZXJ2aWNlcyB0aGF0IGFyZSBub3QgY3JlYXRlZCBpbiB0aGlzIHRlc3QuCiAgICAgICAgbXkgQEZpbHRlciA9IGdyZXAgeyAkXyA9PSAkU2VydmljZUlEMSB8fCAkXyA9PSAkU2VydmljZUlEMiB9IGtleXMgJUxpc3Q7CiAgICAgICAgbXkgJVRlbXA7CiAgICAgICAgQFRlbXB7QEZpbHRlcn0gPSBATGlzdHtARmlsdGVyfTsKICAgICAgICAlTGlzdCA9ICVUZW1wOwoKICAgICAgICAjIH0KICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgIFwlTGlzdCwKICAgICAgICAgICAgJFRlc3QtPntFeHBlY3RlZFJlc3VsdH0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gQ2hlY2sgaWYgcmVzdWx0IG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUuIiwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAlTGlzdCA/IDEgOiAwLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSAtIENDQ2hlY2sgaWYgcmVzdWx0IG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUuIiwKICAgICAgICApOwogICAgfQp9CgokU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAogICAgU2VydmljZUlEICAgICAgICAgPT4gJFNlcnZpY2VJRDEsCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKCkBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1RpY2tldFNlcnZpY2VMaXN0KCkgLSBVc2VySUQgYW5kIFRpY2tldElEJywKICAgICAgICBQYXJhbXMgPT4gewogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdCA9PiB7CiAgICAgICAgICAgICIkU2VydmljZUlEMSIgPT4gJ1Rlc3RTZXJ2aWNlMScgLiAkUmFuZG9tLAogICAgICAgICAgICAiJFNlcnZpY2VJRDIiID0+ICdUZXN0U2VydmljZTInIC4gJFJhbmRvbSwKCiAgICAgICAgICAgICMgVGhlcmUgbWlnaHQgYmUgb3RoZXIgc2VydmljZXMgYXMgd2VsbC4uLgogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnVGlja2V0U2VydmljZUxpc3QoKSAtIFVzZXJJRCBhbmQgUXVldWVJRCcsCiAgICAgICAgUGFyYW1zID0+IHsKICAgICAgICAgICAgUXVldWVJRCA9PiAkUXVldWVJRCwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgPT4gewogICAgICAgICAgICAiJFNlcnZpY2VJRDEiID0+ICdUZXN0U2VydmljZTEnIC4gJFJhbmRvbSwKICAgICAgICAgICAgIiRTZXJ2aWNlSUQyIiA9PiAnVGVzdFNlcnZpY2UyJyAuICRSYW5kb20sCgogICAgICAgICAgICAjIFRoZXJlIG1pZ2h0IGJlIG90aGVyIHNlcnZpY2VzIGFzIHdlbGwuLi4KICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ1RpY2tldFNlcnZpY2VMaXN0KCkgLSBDdXN0b21lclVzZXJJRCBhbmQgUXVldWVJRCcsCiAgICAgICAgUGFyYW1zID0+IHsKICAgICAgICAgICAgUXVldWVJRCAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgPT4gewogICAgICAgICAgICAiJFNlcnZpY2VJRDEiID0+ICdUZXN0U2VydmljZTEnIC4gJFJhbmRvbSwKCiAgICAgICAgICAgICMgVGhlcmUgbWlnaHQgYmUgb3RoZXIgc2VydmljZXMgYXMgd2VsbC4uLgogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnVGlja2V0U2VydmljZUxpc3QoKSAtIEN1c3RvbWVyVXNlcklEIGFuZCBUaWNrZXRJRCcsCiAgICAgICAgUGFyYW1zID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0ID0+IHsKICAgICAgICAgICAgIiRTZXJ2aWNlSUQxIiA9PiAnVGVzdFNlcnZpY2UxJyAuICRSYW5kb20sCgogICAgICAgICAgICAjIFRoZXJlIG1pZ2h0IGJlIG90aGVyIHNlcnZpY2VzIGFzIHdlbGwuLi4KICAgICAgICB9LAogICAgfSwKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgbXkgJUxpc3QgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZXJ2aWNlTGlzdCgKICAgICAgICAleyAkVGVzdC0+e1BhcmFtc30gfSwKICAgICk7CgogICAgaWYgKCAkVGVzdC0+e0V4cGVjdGVkUmVzdWx0fSApIHsKCiAgICAgICAgIyBSZW1vdmUgYWxsIG90aGVyIHNlcnZpY2VzIHRoYXQgYXJlIG5vdCBjcmVhdGVkIGluIHRoaXMgdGVzdC4KICAgICAgICBteSBARmlsdGVyID0gZ3JlcCB7ICRfID09ICRTZXJ2aWNlSUQxIHx8ICRfID09ICRTZXJ2aWNlSUQyIH0ga2V5cyAlTGlzdDsKICAgICAgICBteSAlVGVtcDsKICAgICAgICBAVGVtcHtARmlsdGVyfSA9IEBMaXN0e0BGaWx0ZXJ9OwogICAgICAgICVMaXN0ID0gJVRlbXA7CgogICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgXCVMaXN0LAogICAgICAgICAgICAkVGVzdC0+e0V4cGVjdGVkUmVzdWx0fSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gLSBDaGVjayBpZiByZXN1bHQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4iLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICVMaXN0ID8gMSA6IDAsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IC0gQ0NDaGVjayBpZiByZXN1bHQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4iLAogICAgICAgICk7CiAgICB9Cn0KCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/CustomerUserService.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L0N1c3RvbWVyVXNlclNlcnZpY2UudAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgoKb3VyICRTZWxmOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRDdXN0b21lclVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKIyBnZXQgaGVscGVyIG9iamVjdAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBSZXN0b3JlRGF0YWJhc2UgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKIyBkb24ndCBjaGVjayBlbWFpbCBhZGRyZXNzIHZhbGlkaXR5CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+IDAsCik7CgojIHNhdmUgYWxsIG9yaWdpbmFsIGRlZmF1bHQgc2VydmljZXMKbXkgQE9yaWdpbmFsRGVmYXVsdFNlcnZpY2VzID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJzxERUZBVUxUPicsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAogICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMCwKKTsKCiMgZGVsZXRlIGFsbCBkZWZhdWx0IHNlcnZpY2VzCmZvciBteSAkU2VydmljZUlEIChAT3JpZ2luYWxEZWZhdWx0U2VydmljZXMpIHsKICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICc8REVGQVVMVD4nLAogICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgQWN0aXZlICAgICAgICAgICAgPT4gMCwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKfQoKIyBhZGQgc2VydmljZTEKbXkgJFNlcnZpY2VSYW5kMSA9ICdTb21lU2VydmljZScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwpteSAkU2VydmljZUlEMSAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICRTZXJ2aWNlUmFuZDEsCiAgICBDb21tZW50ID0+ICdTb21lIENvbW1lbnQnLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAoKICAgICMgLS0tCiAgICAjIElUU01Db3JlCiAgICAjIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgIyAtLS0KKTsKCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VJRDEsCiAgICAnU2VydmljZUFkZDEoKScsCik7CgojIGFkZCBzZXJ2aWNlMgpteSAkU2VydmljZVJhbmQyID0gJ1NvbWVTZXJ2aWNlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7Cm15ICRTZXJ2aWNlSUQyICAgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gJFNlcnZpY2VSYW5kMiwKICAgIENvbW1lbnQgPT4gJ1NvbWUgQ29tbWVudCcsCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCgogICAgIyAtLS0KICAgICMgSVRTTUNvcmUKICAgICMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAjIC0tLQopOwoKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUlEMiwKICAgICdTZXJ2aWNlQWRkMigpJywKKTsKCm15ICRDdXN0b21lclVzZXIxID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7Cm15ICRDdXN0b21lclVzZXIyID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7CgojIGFsbG9jYXRpb24gdGVzdCAxCm15IEBBbGxvY2F0aW9uMSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MSgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDIKbXkgQEFsbG9jYXRpb24yID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKJFNlbGYtPkZhbHNlKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uMiwKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDIoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAzCm15IEBBbGxvY2F0aW9uMyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24zLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MygpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDQKbXkgQEFsbG9jYXRpb240ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKJFNlbGYtPkZhbHNlKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uNCwKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDQoKScsCik7CgojIHNldCBhbGxvY2F0aW9uIDEKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnPERFRkFVTFQ+JywKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQxLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIGFsbG9jYXRpb24gdGVzdCA1Cm15IEBBbGxvY2F0aW9uNSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb241LAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0NSgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDYKbXkgQEFsbG9jYXRpb242ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb242Q291bnQgPSBAQWxsb2NhdGlvbjY7Cm15ICRBbGxvY2F0aW9uNk9rICAgID0gMDsKaWYgKCAkQWxsb2NhdGlvbjZDb3VudCBlcSAxICYmICRBbGxvY2F0aW9uNlswXSBlcSAkU2VydmljZUlEMSApIHsKICAgICRBbGxvY2F0aW9uNk9rID0gMTsKfQoKJFNlbGYtPlRydWUoCiAgICAkQWxsb2NhdGlvbjZPaywKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDYoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCA3Cm15IEBBbGxvY2F0aW9uNyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb243LAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0NygpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDgKbXkgQEFsbG9jYXRpb244ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb244Q291bnQgPSBAQWxsb2NhdGlvbjg7Cm15ICRBbGxvY2F0aW9uOE9rICAgID0gMDsKaWYgKCAkQWxsb2NhdGlvbjhDb3VudCBlcSAxICYmICRBbGxvY2F0aW9uOFswXSBlcSAkU2VydmljZUlEMSApIHsKICAgICRBbGxvY2F0aW9uOE9rID0gMTsKfQoKJFNlbGYtPlRydWUoCiAgICAkQWxsb2NhdGlvbjhPaywKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDgoKScsCik7CgojIHNldCBhbGxvY2F0aW9uIDIKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMSwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQyLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIGFsbG9jYXRpb24gdGVzdCA5Cm15IEBBbGxvY2F0aW9uOSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgpteSAkQWxsb2NhdGlvbjlDb3VudCA9IEBBbGxvY2F0aW9uOTsKbXkgJEFsbG9jYXRpb245T2sgICAgPSAwOwppZiAoICRBbGxvY2F0aW9uOUNvdW50IGVxIDEgJiYgJEFsbG9jYXRpb245WzBdIGVxICRTZXJ2aWNlSUQyICkgewogICAgJEFsbG9jYXRpb245T2sgPSAxOwp9CgokU2VsZi0+VHJ1ZSgKICAgICRBbGxvY2F0aW9uOU9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0OSgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDEwCm15IEBBbGxvY2F0aW9uMTAgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMSwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCik7CgpteSAkQWxsb2NhdGlvbjEwQ291bnQgPSBAQWxsb2NhdGlvbjEwOwpteSAkQWxsb2NhdGlvbjEwT2sgICAgPSAwOwppZiAoICRBbGxvY2F0aW9uMTBDb3VudCBlcSAxICYmICRBbGxvY2F0aW9uMTBbMF0gZXEgJFNlcnZpY2VJRDIgKSB7CiAgICAkQWxsb2NhdGlvbjEwT2sgPSAxOwp9CgokU2VsZi0+VHJ1ZSgKICAgICRBbGxvY2F0aW9uMTBPaywKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDEwKCknLAopOwoKIyBhbGxvY2F0aW9uIHRlc3QgMTEKbXkgQEFsbG9jYXRpb24xMSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xMSwKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDExKCknLAopOwoKIyBhbGxvY2F0aW9uIHRlc3QgMTIKbXkgQEFsbG9jYXRpb24xMiA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKKTsKCm15ICRBbGxvY2F0aW9uMTJDb3VudCA9IEBBbGxvY2F0aW9uMTI7Cm15ICRBbGxvY2F0aW9uMTJPayAgICA9IDA7CmlmICggJEFsbG9jYXRpb24xMkNvdW50IGVxIDEgJiYgJEFsbG9jYXRpb24xMlswXSBlcSAkU2VydmljZUlEMSApIHsKICAgICRBbGxvY2F0aW9uMTJPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xMk9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTIoKScsCik7CgojIHNldCBhbGxvY2F0aW9uIDMKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQxLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CiRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlEMiwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKIyBhbGxvY2F0aW9uIHRlc3QgMTMKbXkgQEFsbG9jYXRpb24xMyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgpteSAkQWxsb2NhdGlvbjEzT2sgPSAwOwppZiAoIHNjYWxhciBAQWxsb2NhdGlvbjEzIGVxIDEgJiYgJEFsbG9jYXRpb24xM1swXSBlcSAkU2VydmljZUlEMiApIHsKICAgICRBbGxvY2F0aW9uMTNPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xM09rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTMoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAxNApteSBAQWxsb2NhdGlvbjE0ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb24xNENvdW50ID0gQEFsbG9jYXRpb24xNDsKbXkgJEFsbG9jYXRpb24xNE9rICAgID0gMDsKaWYgKCAkQWxsb2NhdGlvbjE0Q291bnQgZXEgMSAmJiAkQWxsb2NhdGlvbjE0WzBdIGVxICRTZXJ2aWNlSUQyICkgewogICAgJEFsbG9jYXRpb24xNE9rID0gMTsKfQoKJFNlbGYtPlRydWUoCiAgICAkQWxsb2NhdGlvbjE0T2ssCiAgICAnQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QxNCgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDE1Cm15IEBBbGxvY2F0aW9uMTUgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMiwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCiAgICBEZWZhdWx0U2VydmljZXMgICA9PiAwLAopOwoKbXkgJEFsbG9jYXRpb24xNUNvdW50ID0gQEFsbG9jYXRpb24xNTsKbXkgJEFsbG9jYXRpb24xNU9rICAgID0gMDsKaWYgKAogICAgJEFsbG9jYXRpb24xNUNvdW50IGVxIDIgJiYgKAogICAgICAgICggJEFsbG9jYXRpb24xNVswXSBlcSAkU2VydmljZUlEMSAmJiAkQWxsb2NhdGlvbjE1WzFdIGVxICRTZXJ2aWNlSUQyICkgfHwKICAgICAgICAoICRBbGxvY2F0aW9uMTVbMF0gZXEgJFNlcnZpY2VJRDIgJiYgJEFsbG9jYXRpb24xNVsxXSBlcSAkU2VydmljZUlEMSApCiAgICApCiAgICApCnsKICAgICRBbGxvY2F0aW9uMTVPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xNU9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTUoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAxNgpteSBAQWxsb2NhdGlvbjE2ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb24xNkNvdW50ID0gQEFsbG9jYXRpb24xNjsKbXkgJEFsbG9jYXRpb24xNk9rICAgID0gMDsKaWYgKAogICAgJEFsbG9jYXRpb24xNkNvdW50IGVxIDIgJiYgKAogICAgICAgICggJEFsbG9jYXRpb24xNlswXSBlcSAkU2VydmljZUlEMSAmJiAkQWxsb2NhdGlvbjE2WzFdIGVxICRTZXJ2aWNlSUQyICkgfHwKICAgICAgICAoICRBbGxvY2F0aW9uMTZbMF0gZXEgJFNlcnZpY2VJRDIgJiYgJEFsbG9jYXRpb24xNlsxXSBlcSAkU2VydmljZUlEMSApCiAgICApCiAgICApCnsKICAgICRBbGxvY2F0aW9uMTZPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xNk9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTYoKScsCik7CgojIHJlbmFtZSBjdXN0b21lciB1c2VyMQpteSAlQ3VzdG9tZXIgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgVXNlciA9PiAkQ3VzdG9tZXJVc2VyMSwKKTsKbXkgJE5ld0N1c3RvbWVyVXNlcjEgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwpteSAkVXBkYXRlICAgICAgICAgICA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlclVwZGF0ZSgKICAgICVDdXN0b21lciwKICAgIElEICAgICAgICA9PiAkQ3VzdG9tZXJ7VXNlckxvZ2lufSwKICAgIFVzZXJMb2dpbiA9PiAkTmV3Q3VzdG9tZXJVc2VyMSwKICAgIFVzZXJJRCAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRVcGRhdGUsCiAgICAiQ3VzdG9tZXJVc2VyVXBkYXRlIC0gJEN1c3RvbWVye1VzZXJMb2dpbn0gLSAkTmV3Q3VzdG9tZXJVc2VyMSIsCik7CgojIGFsbG9jYXRpb24gdGVzdCBhZnRlciByZW5hbWUKIyBpbnN0YW50aWF0ZSBuZXcgc2VydmljZSBvYmplY3QgYmVjYXVzZSBvZiBjYWNoaW5nIQokS2VybmVsOjpPTS0+T2JqZWN0c0Rpc2NhcmQoIE9iamVjdHMgPT4gWydLZXJuZWw6OlN5c3RlbTo6U2VydmljZSddICk7CiRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCm15IEBBbGxvY2F0aW9uMTcgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJ7VXNlckxvZ2lufSwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCiAgICBEZWZhdWx0U2VydmljZXMgICA9PiAwLAopOwoKJFNlbGYtPklzKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uMTcsCiAgICAwLAogICAgIk5vIHNlcnZpY2VzIGFsbG9jYXRlZCB0byBvbGQgY3VzdG9tZXIgJEN1c3RvbWVyVXNlcjEgYWZ0ZXIgcmVuYW1lIiwKKTsKbXkgQEFsbG9jYXRpb24xOCA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICROZXdDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+SXMoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xOCwKICAgIDEsCiAgICAiU2VydmljZXMgYWxsb2NhdGVkIHRvIG5ldyBjdXN0b21lciAkTmV3Q3VzdG9tZXJVc2VyMSBhZnRlciByZW5hbWUiLAopOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/ITSMCIPAllocate.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpSZWdpc3RlckRyaXZlcjsgICAgIyBTZXQgdXAgJEtlcm5lbDo6T00gYW5kICRtYWluOjpTZWxmCgpvdXIgJFNlbGY7CgpteSAkQ0lQQWxsb2NhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlJyk7CgojIGdldCBjdXJyZW50IGFsbG9jYXRpb24gbGlzdCAoVXNlcklEIGlzIG5lZWRlZCkKbXkgJEFsbG9jYXRlRGF0YTEgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPkFsbG9jYXRlTGlzdCgpOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSggJEFsbG9jYXRlRGF0YTEsICdBbGxvY2F0ZUxpc3QoKScgKTsKCiMgZ2V0IGN1cnJlbnQgYWxsb2NhdGlvbiBsaXN0Cm15ICRBbGxvY2F0ZURhdGEyID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgY2hlY2sgdGhlIHJlc3VsdAokU2VsZi0+VHJ1ZSggJEFsbG9jYXRlRGF0YTIsICdBbGxvY2F0ZUxpc3QoKScgKTsKCiMgY2hlY2sgdGhlIGFsbG9jYXRpb24gaGFzaApteSAkSGFzaE9LID0gMTsKaWYgKCByZWYgJEFsbG9jYXRlRGF0YTIgbmUgJ0hBU0gnICkgewogICAgJEhhc2hPSyA9IDA7Cn0KCiMgY2hlY2sgdGhlIGFsbG9jYXRpb24gMmQgaGFzaAppZiAoJEhhc2hPSykgewoKICAgIElNUEFDVDoKICAgIGZvciBteSAkSW1wYWN0ICggc29ydCBrZXlzICV7JEFsbG9jYXRlRGF0YTJ9ICkgewoKICAgICAgICBpZiAoIHJlZiAkQWxsb2NhdGVEYXRhMi0+eyRJbXBhY3R9IG5lICdIQVNIJyApIHsKICAgICAgICAgICAgJEhhc2hPSyA9IDA7CiAgICAgICAgICAgIGxhc3QgSU1QQUNUOwogICAgICAgIH0KCiAgICAgICAgQ1JJVElDQUxJVFk6CiAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoIHNvcnQga2V5cyAleyAkQWxsb2NhdGVEYXRhMi0+eyRJbXBhY3R9IH0gKSB7CgogICAgICAgICAgICBpZiAoICEkQ3JpdGljYWxpdHkgfHwgISRBbGxvY2F0ZURhdGEyLT57JEltcGFjdH0tPnskQ3JpdGljYWxpdHl9ICkgewogICAgICAgICAgICAgICAgJEhhc2hPSyA9IDA7CiAgICAgICAgICAgICAgICBsYXN0IElNUEFDVDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKIyBjaGVjayBIYXNoT0sKJFNlbGYtPlRydWUoICRIYXNoT0ssICdBbGxvY2F0ZUxpc3QoKScgKTsKCiMgY2FsbCBQcmlvcml0eUFsbG9jYXRpb25HZXQoKSBmb3Igb25lIENyaXRpY2FsaXR5L0ltcGFjdCBwYWlyCmlmICgkSGFzaE9LKSB7CgogICAgbXkgKCRJbXBhY3QpID0gc29ydCBrZXlzICV7JEFsbG9jYXRlRGF0YTJ9OwoKICAgIGlmICggJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSApIHsKICAgICAgICBteSAoJENyaXRpY2FsaXR5KSA9IHNvcnQga2V5cyAleyAkQWxsb2NhdGVEYXRhMi0+eyRJbXBhY3R9IH07CgogICAgICAgIG15ICRFeHBlY3RlZFByaW9yaXR5SUQgPSAkQWxsb2NhdGVEYXRhMi0+eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fTsKICAgICAgICBteSAkUHJpb3JpdHlJRCAgICAgICAgID0gJENJUEFsbG9jYXRlT2JqZWN0LT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICRDcml0aWNhbGl0eSwKICAgICAgICAgICAgSW1wYWN0ICAgICAgPT4gJEltcGFjdCwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFByaW9yaXR5SUQsCiAgICAgICAgICAgICRFeHBlY3RlZFByaW9yaXR5SUQsCiAgICAgICAgICAgICdQcmlvcml0eUFsbG9jYXRpb25HZXQoKScsCiAgICAgICAgKTsKICAgIH0KfQoKIyB1cGRhdGUgdGhlIGFsbG9jYXRpb24gaGFzaCAobm90IGFsbCBuZWVkZWQgYXJndW1lbnRzIGdpdmVuKQpteSAkU3VjY2VzczEgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPkFsbG9jYXRlVXBkYXRlKAogICAgVXNlcklEID0+IDEsCik7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPkZhbHNlKCAkU3VjY2VzczEsICdBbGxvY2F0ZVVwZGF0ZSgpJyApOwoKIyB1cGRhdGUgdGhlIGFsbG9jYXRpb24gaGFzaCAobm90IGFsbCBuZWVkZWQgYXJndW1lbnRzIGdpdmVuKQpteSAkU3VjY2VzczIgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPkFsbG9jYXRlVXBkYXRlKAogICAgQWxsb2NhdGVEYXRhID0+ICRBbGxvY2F0ZURhdGEyLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSggJFN1Y2Nlc3MyLCAnQWxsb2NhdGVVcGRhdGUoKScgKTsKCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2ggKGFsbG9jYXRpb24gaGFzaCkKbXkgJFN1Y2Nlc3MzID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIEFsbG9jYXRlRGF0YSA9PiB7CiAgICAgICAgVGVzdCAgPT4gJ2FhYScsCiAgICAgICAgVGVzdDIgPT4gJ2JiYicsCiAgICB9LAogICAgVXNlcklEID0+IDEsCik7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPkZhbHNlKCAkU3VjY2VzczMsICdBbGxvY2F0ZVVwZGF0ZSgpJyApOwoKIyB1cGRhdGUgdGhlIGFsbG9jYXRpb24gaGFzaApteSAkU3VjY2VzczQgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPkFsbG9jYXRlVXBkYXRlKAogICAgQWxsb2NhdGVEYXRhID0+ICRBbGxvY2F0ZURhdGEyLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPlRydWUoICRTdWNjZXNzNCwgJ0FsbG9jYXRlVXBkYXRlKCknICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/Service.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1NlcnZpY2UudAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgoKb3VyICRTZWxmOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7Cm15ICRVc2VyT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCm15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBjcmVhdGUgbmVlZGVkIHVzZXJzCm15IEBVc2VySURzOwp7CgogICAgIyBkaXNhYmxlIGVtYWlsIGNoZWNrcyB0byBjcmVhdGUgbmV3IHVzZXIKICAgIG15ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnID0gJENvbmZpZ09iamVjdC0+R2V0KCdDaGVja0VtYWlsQWRkcmVzc2VzJykgfHwgMTsKICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgVmFsdWUgPT4gMCwKICAgICk7CgogICAgZm9yIG15ICRDb3VudGVyICggMSAuLiAyICkgewoKICAgICAgICAjIGNyZWF0ZSBuZXcgdXNlcnMgZm9yIHRoZSB0ZXN0cwogICAgICAgIG15ICRVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckFkZCgKICAgICAgICAgICAgVXNlckZpcnN0bmFtZSA9PiAnU2VydmljZScgLiAkQ291bnRlciwKICAgICAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICBVc2VyTG9naW4gICAgID0+ICdVbml0VGVzdC1TZXJ2aWNlLScgLiAkQ291bnRlciAuICRSYW5kb21JRCwKICAgICAgICAgICAgVXNlckVtYWlsICAgICA9PiAnVW5pdFRlc3QtU2VydmljZS0nIC4gJENvdW50ZXIgLiAnQGxvY2FsaG9zdCcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQFVzZXJJRHMsICRVc2VySUQ7CiAgICB9CgogICAgIyByZXN0b3JlIG9yaWdpbmFsIGVtYWlsIGNoZWNrIHBhcmFtCiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnLAogICAgKTsKfQoKIyBjcmVhdGUgbmVlZGVkIHJhbmRvbSBzZXJ2aWNlIG5hbWVzCm15IEBTZXJ2aWNlTmFtZTsKZm9yIG15ICRDb3VudGVyICggMSAuLiAxMSApIHsKICAgIHB1c2ggQFNlcnZpY2VOYW1lLCAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwp9CgojIGdldCBvcmlnaW5hbCBzZXJ2aWNlIGxpc3QgZm9yIGxhdGVyIGNoZWNrcwpteSAlU2VydmljZUxpc3RPcmlnaW5hbCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgIFZhbGlkICA9PiAwLAogICAgVXNlcklEID0+IDEsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZGVmaW5lIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEl0ZW1EYXRhID0gWwoKICAgICMgdGhpcyBzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyAtLS0KICAgICMgSVRTTUNvcmUKICAgICMgLS0tCgogICAgIyB0aGlzIHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICA9PiAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyAtLS0KCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIG9uZSB0ZXN0IGJlZm9yZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgPT4gJFNlcnZpY2VOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSBpcyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIC0tLQogICAgIyBJVFNNQ29yZQogICAgIyAtLS0KCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSBpcyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICBUeXBlSUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRTZXJ2aWNlTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIC0tLQoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnVGVzdENvbW1lbnQyJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVsxXSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnVGVzdENvbW1lbnQyJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTInLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsxXSAuICdVUERBVEUyJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMicsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMF0sCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDQsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTInLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTInLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdUZXN0Q29tbWVudDJVUERBVEUyJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAkVXNlcklEc1swXSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gNCwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIChzZXJ2aWNlIHVwZGF0ZSBhcmd1bWVudHMgYXJlIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTMnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1Rlc3RDb21tZW50MlVQREFURTMnLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzFdLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVsxXSAuICdVUERBVEUzJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVsxXSAuICdVUERBVEUzJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gJFVzZXJJRHNbMV0sCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGhhcyBhbiBpbnZhbGlkIG5hbWUgYW5kIG11c3QgYmUgTk9UIGluc2VydGVkCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnOjpVUERBVEU0JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaGFzIGFuIGludmFsaWQgbmFtZSBhbmQgbXVzdCBiZSBOT1QgaW5zZXJ0ZWQKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsxXSAuICc6OlRlc3Q6OlVQREFURTQnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXMgYW4gaW52YWxpZCBuYW1lIGFuZCBtdXN0IGJlIE5PVCBpbnNlcnRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzJdIC4gJzo6VGVzdCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGhhcyBhbiBpbnZhbGlkIG5hbWUgYW5kIG11c3QgYmUgTk9UIGluc2VydGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAnOjpUZXN0JyAuICRTZXJ2aWNlTmFtZVsyXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaGFzIGFuIGludmFsaWQgbmFtZSBhbmQgbXVzdCBiZSBOT1QgaW5zZXJ0ZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsyXSAuICc6OlRlc3Q6OlRlc3QnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXMgYW4gaW52YWxpZCBuYW1lIGFuZCBtdXN0IGJlIE5PVCBpbnNlcnRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzJdIC4gJ1Rlc3Q6OicsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICIgXHQgXG4gXHIgIiAuICRTZXJ2aWNlTmFtZVszXSAuICIgXHQgXG4gXHIgIiwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICIgXHQgXG4gXHIgVGVzdCBDb21tZW50IFx0IFxuIFxyICIsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbM10sCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbM10sCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ1Rlc3QgQ29tbWVudCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKGNoZWNrIHN0cmluZyBjbGVhbmVyIGZ1bmN0aW9uKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gIiBcdCBcbiBcciAiIC4gJFNlcnZpY2VOYW1lWzNdIC4gIiBVUERBVEUxIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzFdLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVszXSAuICcgVVBEQVRFMScsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbM10gLiAnIFVQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdUZXN0IENvbW1lbnQnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+ICRVc2VySURzWzFdLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAoVW5pY29kZSBjaGVja3MpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbNF0gLiAnIM+SIM+hIMapIM+eICcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnINGgINGkIFRlc3RDb21tZW50NSDPoCDOqSAnLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzRdIC4gJyDPkiDPoSDGqSDPnicsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbNF0gLiAnIM+SIM+hIMapIM+eJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAn0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSAoVW5pY29kZSBjaGVja3MpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbNF0gLiAnIM+SIM+hIMapIM+eIFVQREFURTEnLAogICAgICAgICAgICBWYWxpZElEID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJyDRoCDRpCBUZXN0Q29tbWVudDUgz6AgzqkgVVBEQVRFMScsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMF0sCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzRdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs0XSAuICcgz5Igz6Egxqkgz54gVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ9GgINGkIFRlc3RDb21tZW50NSDPoCDOqSBVUERBVEUxJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAkVXNlcklEc1swXSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdbdGVzdF0lKlxcICcgLiAkU2VydmljZU5hbWVbOF0gLiAnIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJ1t0ZXN0XSUqXFwgJyAuICRTZXJ2aWNlTmFtZVs4XSAuICcgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IChzcGVjaWFsIGNoYXJhY3RlciBjaGVja3MpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAnIFt0ZXN0XSUqXFwgJyAuICRTZXJ2aWNlTmFtZVs4XSAuICcgVVBEQVRFMSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFVQREFURTEgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzFdLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdbdGVzdF0lKlxcICcgLiAkU2VydmljZU5hbWVbOF0gLiAnIFVQREFURTEgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAnW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+ICRVc2VySURzWzFdLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAodXNlZCBmb3IgdGhlIGZvbGxvd2luZyB0ZXN0cykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVs1XSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzVdLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzVdLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAocGFyZW50IHNlcnZpY2UgY2hlY2spCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZXJ2aWNlTmFtZVs2XSwKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbNV0gLiAnOjonIC4gJFNlcnZpY2VOYW1lWzZdLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzZdLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAocGFyZW50IHNlcnZpY2UgY2hlY2spCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICIgXG4gXHQgIiAuICRTZXJ2aWNlTmFtZVs3XSAuICIgXG4gXHQgIiwKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbNV0gLiAnOjonIC4gJFNlcnZpY2VOYW1lWzZdIC4gJzo6JyAuICRTZXJ2aWNlTmFtZVs3XSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs3XSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChwYXJlbnQgc2VydmljZSBpZCBhbmQgcGFyZW50IGlkIGFyZSBpZGVudGljYWwpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZXJ2aWNlTmFtZVs3XSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IChtb3ZlIHNlcnZpY2UgdG8gdGhlIGhpZ2hlc3QgbGV2ZWwpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZXJ2aWNlTmFtZVs3XSAuICcgVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzddIC4gJyBVUERBVEUxJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs3XSAuICcgVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKG1vdmUgc2VydmljZSBiYWNrIHdpdGggdGhlIG9sZCBwYXJlbnQgc2VydmljZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBQYXJlbnRJRCA9PiAnTEFTVExBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZXJ2aWNlTmFtZVs3XSAuICcgVVBEQVRFKDIpJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCA9PiAnTEFTVExBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZXJ2aWNlTmFtZVs1XSAuICc6OicKICAgICAgICAgICAgICAgIC4gJFNlcnZpY2VOYW1lWzZdIC4gJzo6JwogICAgICAgICAgICAgICAgLiAkU2VydmljZU5hbWVbN10KICAgICAgICAgICAgICAgIC4gJyBVUERBVEUoMiknLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzddIC4gJyBVUERBVEUoMiknLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKXTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBydW4gZ2VuZXJhbCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkVGVzdENvdW50ID0gMTsKbXkgJExhc3RBZGRlZFNlcnZpY2VJRDsKbXkgJExhc3RMYXN0QWRkZWRTZXJ2aWNlSUQ7Cm15ICRBZGRlZENvdW50ZXIgPSAwOwoKZm9yIG15ICRJdGVtICggQHskSXRlbURhdGF9ICkgewoKICAgIGlmICggJEl0ZW0tPntBZGR9ICkgewoKICAgICAgICAjIHByZXBhcmUgcGFyZW50IGlkCiAgICAgICAgaWYgKCAkSXRlbS0+e0FkZH0tPntQYXJlbnRJRH0gJiYgJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9IGVxICdMQVNUQURESUQnICkgewogICAgICAgICAgICAkSXRlbS0+e0FkZH0tPntQYXJlbnRJRH0gPSAkTGFzdEFkZGVkU2VydmljZUlEOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRJdGVtLT57QWRkfS0+e1BhcmVudElEfSAmJiAkSXRlbS0+e0FkZH0tPntQYXJlbnRJRH0gZXEgJ0xBU1RMQVNUQURESUQnICkgewogICAgICAgICAgICAkSXRlbS0+e0FkZH0tPntQYXJlbnRJRH0gPSAkTGFzdExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRlbGV0ZSAkSXRlbS0+e0FkZH0tPntQYXJlbnRJRH07CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBuZXcgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgICAgICAgICAgJXsgJEl0ZW0tPntBZGR9IH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIHdhcyBhZGRlZCBzdWNjZXNzZnVsbHkgb3Igbm90CiAgICAgICAgaWYgKCAkSXRlbS0+e0FkZEdldH0gKSB7CgogICAgICAgICAgICAjIHByZXBhcmUgcGFyZW50IGlkCiAgICAgICAgICAgIGlmICggJEl0ZW0tPntBZGRHZXR9LT57UGFyZW50SUR9ICYmICRJdGVtLT57QWRkR2V0fS0+e1BhcmVudElEfSBlcSAnTEFTVEFERElEJyApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+e1BhcmVudElEfSA9ICRMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkSXRlbS0+e0FkZEdldH0tPntQYXJlbnRJRH0gJiYgJEl0ZW0tPntBZGRHZXR9LT57UGFyZW50SUR9IGVxICdMQVNUTEFTVEFERElEJyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+e1BhcmVudElEfSA9ICRMYXN0TGFzdEFkZGVkU2VydmljZUlEOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlQWRkKCkgLSBTZXJ2aWNlSUQ6ICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRTZXJ2aWNlSUQpIHsKCiAgICAgICAgICAgICAgICAjIGxvb2t1cCBzZXJ2aWNlIG5hbWUKICAgICAgICAgICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKCBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCApOwoKICAgICAgICAgICAgICAgICMgbG9va3VwIHRlc3QKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU2VydmljZU5hbWUgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgJEl0ZW0tPntBZGRHZXR9LT57TmFtZX0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUxvb2t1cCgpIC0gbG9va3VwIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0aGUgc2VydmljZSBpZAogICAgICAgICAgICAgICAgbXkgJFNlcnZpY2VJRE5ldyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKCBOYW1lID0+ICRTZXJ2aWNlTmFtZSB8fCAnJyApOwoKICAgICAgICAgICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGVzdAogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlSUROZXcgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgJFNlcnZpY2VJRCAgICB8fCAnJywKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTG9va3VwKCkgLSByZXZlcnNlIGxvb2t1cCIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IGxhc3Qgc2VydmljZSBpZCB2YXJpYWJsZQogICAgICAgICAgICAgICAgJExhc3RMYXN0QWRkZWRTZXJ2aWNlSUQgPSAkTGFzdEFkZGVkU2VydmljZUlEOwogICAgICAgICAgICAgICAgJExhc3RBZGRlZFNlcnZpY2VJRCAgICAgPSAkU2VydmljZUlEOwoKICAgICAgICAgICAgICAgICMgaW5jcmVtZW50IHRoZSBhZGRlZCBjb3VudGVyCiAgICAgICAgICAgICAgICAkQWRkZWRDb3VudGVyKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlQWRkKCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc2VydmljZSBkYXRhIHRvIGNoZWNrIHRoZSB2YWx1ZXMgYWZ0ZXIgY3JlYXRpb24gb2YgdGhlIHNlcnZpY2UKICAgICAgICBteSAlU2VydmljZUdldCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRJdGVtLT57QWRkfS0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBzZXJ2aWNlIGRhdGEgYWZ0ZXIgY3JlYXRpb24gb2YgdGhlIHNlcnZpY2UKICAgICAgICBmb3IgbXkgJFNlcnZpY2VBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntBZGRHZXR9IH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRTZXJ2aWNlR2V0eyRTZXJ2aWNlQXR0cmlidXRlfSB8fCAnJywKICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+eyRTZXJ2aWNlQXR0cmlidXRlfSB8fCAnJywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VHZXQoKSAtICRTZXJ2aWNlQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkSXRlbS0+e1VwZGF0ZX0gKSB7CgogICAgICAgICMgY2hlY2sgbGFzdCBzZXJ2aWNlIGlkIHZhcmlhYmxlCiAgICAgICAgaWYgKCAhJExhc3RBZGRlZFNlcnZpY2VJRCApIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IE5PIExBU1QgU0VSVklDRSBJRCBHSVZFTiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHByZXBhcmUgcGFyZW50IGlkCiAgICAgICAgaWYgKCAkSXRlbS0+e1VwZGF0ZX0tPntQYXJlbnRJRH0gJiYgJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9IGVxICdMQVNUQURESUQnICkgewogICAgICAgICAgICAkSXRlbS0+e1VwZGF0ZX0tPntQYXJlbnRJRH0gPSAkTGFzdEFkZGVkU2VydmljZUlEOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfSAmJiAkSXRlbS0+e1VwZGF0ZX0tPntQYXJlbnRJRH0gZXEgJ0xBU1RMQVNUQURESUQnICkgewogICAgICAgICAgICAkSXRlbS0+e1VwZGF0ZX0tPntQYXJlbnRJRH0gPSAkTGFzdExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRlbGV0ZSAkSXRlbS0+e1VwZGF0ZX0tPntQYXJlbnRJRH07CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSB0aGUgc2VydmljZQogICAgICAgIG15ICRVcGRhdGVTdWNlc3MgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICAgICAgJXsgJEl0ZW0tPntVcGRhdGV9IH0sCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkTGFzdEFkZGVkU2VydmljZUlELAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaWYgc2VydmljZSB3YXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkgb3Igbm90CiAgICAgICAgaWYgKCAkSXRlbS0+e1VwZGF0ZUdldH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFVwZGF0ZVN1Y2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VVcGRhdGUoKSAtIFNlcnZpY2VJRDogJExhc3RBZGRlZFNlcnZpY2VJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkVXBkYXRlU3VjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZVVwZGF0ZSgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIG5vbi1leGlzdGluZyBzZXJ2aWNlCiAgICAgICAgbXkgJE5vbmV4aXN0aW5nU2VydmljZUlEID0gMzI1NjcgLSAxOwogICAgICAgIG15ICRVcGRhdGVOb25TdWNlc3MgICAgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgICAgICAgICAleyAkSXRlbS0+e1VwZGF0ZX0gfSwKICAgICAgICAgICAgU2VydmljZUlEID0+ICROb25leGlzdGluZ1NlcnZpY2VJRCwKICAgICAgICApOwogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJFVwZGF0ZU5vblN1Y2VzcywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZVVwZGF0ZSgpIGZvciBub25leGlzdGluZyBzZXJ2aWNlIiwKICAgICAgICApOwoKICAgICAgICAjIHByZXBhcmUgcGFyZW50IGlkCiAgICAgICAgaWYgKCAkSXRlbS0+e1VwZGF0ZUdldH0tPntQYXJlbnRJRH0gJiYgJEl0ZW0tPntVcGRhdGVHZXR9LT57UGFyZW50SUR9IGVxICdMQVNUQURESUQnICkgewogICAgICAgICAgICAkSXRlbS0+e1VwZGF0ZUdldH0tPntQYXJlbnRJRH0gPSAkTGFzdEFkZGVkU2VydmljZUlEOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICRJdGVtLT57VXBkYXRlR2V0fS0+e1BhcmVudElEfQogICAgICAgICAgICAmJiAkSXRlbS0+e1VwZGF0ZUdldH0tPntQYXJlbnRJRH0gZXEgJ0xBU1RMQVNUQURESUQnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRJdGVtLT57VXBkYXRlR2V0fS0+e1BhcmVudElEfSA9ICRMYXN0TGFzdEFkZGVkU2VydmljZUlEOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc2VydmljZSBkYXRhIHRvIGNoZWNrIHRoZSB2YWx1ZXMgYWZ0ZXIgdGhlIHVwZGF0ZQogICAgICAgIG15ICVTZXJ2aWNlR2V0MiA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJExhc3RBZGRlZFNlcnZpY2VJRCwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRJdGVtLT57VXBkYXRlfS0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBzZXJ2aWNlIGRhdGEgYWZ0ZXIgdXBkYXRlCiAgICAgICAgZm9yIG15ICRTZXJ2aWNlQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRJdGVtLT57VXBkYXRlR2V0fSB9ICkgewogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkU2VydmljZUdldDJ7JFNlcnZpY2VBdHRyaWJ1dGV9IHx8ICcnLAogICAgICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGVHZXR9LT57JFNlcnZpY2VBdHRyaWJ1dGV9IHx8ICcnLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUdldCgpIC0gJFNlcnZpY2VBdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBsb29rdXAgc2VydmljZSBuYW1lCiAgICAgICAgbXkgJFNlcnZpY2VOYW1lID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMb29rdXAoIFNlcnZpY2VJRCA9PiAkU2VydmljZUdldDJ7U2VydmljZUlEfSApOwoKICAgICAgICAjIGxvb2t1cCB0ZXN0CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VydmljZU5hbWUgfHwgJycsCiAgICAgICAgICAgICRTZXJ2aWNlR2V0MntOYW1lfSB8fCAnJywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUxvb2t1cCgpIC0gbG9va3VwIiwKICAgICAgICApOwoKICAgICAgICAjIHJldmVyc2UgbG9va3VwIHRoZSBzZXJ2aWNlIGlkCiAgICAgICAgbXkgJFNlcnZpY2VJRE5ldyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKCBOYW1lID0+ICRTZXJ2aWNlTmFtZSB8fCAnJyApOwoKICAgICAgICAjIHJldmVyc2UgbG9va3VwIHRlc3QKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZXJ2aWNlSUROZXcgfHwgJycsCiAgICAgICAgICAgICRTZXJ2aWNlR2V0MntTZXJ2aWNlSUR9IHx8ICcnLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTG9va3VwKCkgLSByZXZlcnNlIGxvb2t1cCIsCiAgICAgICAgKTsKICAgIH0KCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBBZGRpdGlvbmFsIFNlcnZpY2VHZXQgdGVzdCAoQnkgU2VydmljZU5hbWUgYW5kIFNlcnZpY2VJRCkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKewoKICAgICMgZ2V0IGEgc2VydmljZSBieSB1c2luZyB0aGUgc2VydmljZSBuYW1lCiAgICBteSAlU2VydmljZUdldCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgIE5hbWUgICA9PiAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkU2VydmljZUdldHtOYW1lfSwKICAgICAgICAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUdldCgpIC0gYnkgc2VydmljZSBuYW1lIiwKICAgICk7CgogICAgIyBnZXQgdGhlIHNhbWUgc2VydmljZSBieSB1c2luZyB0aGUgc2VydmljZSBpZAogICAgJVNlcnZpY2VHZXQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VHZXR7U2VydmljZUlEfSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRTZXJ2aWNlR2V0e05hbWV9LAogICAgICAgICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlR2V0KCkgLSBieSBzZXJ2aWNlIGlkIiwKICAgICk7Cgp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU2VydmljZUxpc3QgdGVzdCAxIChjaGVjayBnZW5lcmFsIGZ1bmN0aW9uYWxpdHkpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICVTZXJ2aWNlTGlzdDEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwpteSAlU2VydmljZUxpc3QxT3JnID0gJVNlcnZpY2VMaXN0T3JpZ2luYWw7CgpTRVJWSUNFSUQ6CmZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVTZXJ2aWNlTGlzdDFPcmcgKSB7CgogICAgaWYgKCAkU2VydmljZUxpc3QxeyRTZXJ2aWNlSUR9ICYmICRTZXJ2aWNlTGlzdDFPcmd7JFNlcnZpY2VJRH0gZXEgJFNlcnZpY2VMaXN0MXskU2VydmljZUlEfSApIHsKICAgICAgICBkZWxldGUgJFNlcnZpY2VMaXN0MXskU2VydmljZUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZXJ2aWNlTGlzdDF7RHVtbXl9ID0gMTsKICAgIH0KfQoKbXkgJFNlcnZpY2VMaXN0MUNvdW50ID0gc2NhbGFyIGtleXMgJVNlcnZpY2VMaXN0MTsKCiRTZWxmLT5JcygKICAgICRTZXJ2aWNlTGlzdDFDb3VudCB8fCAnJywKICAgICRBZGRlZENvdW50ZXIgICAgICB8fCAnJywKICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VMaXN0KCkiLAopOwoKJFRlc3RDb3VudCsrOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNlcnZpY2VMaXN0IHRlc3QgMiAoY2hlY2sgY2FjaGUpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICVTZXJ2aWNlTGlzdDIgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKbXkgJFNlcnZpY2VMaXN0MlNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbOV0sCiAgICBWYWxpZElEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCgogICAgIyAtLS0KICAgICMgSVRTTUNvcmUKICAgICMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAjIC0tLQopOwoKbXkgJVNlcnZpY2VMaXN0MmIgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKU0VSVklDRUlEOgpmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAlU2VydmljZUxpc3QyICkgewoKICAgIGlmICggJFNlcnZpY2VMaXN0MmJ7JFNlcnZpY2VJRH0gJiYgJFNlcnZpY2VMaXN0MnskU2VydmljZUlEfSBlcSAkU2VydmljZUxpc3QyYnskU2VydmljZUlEfSApIHsKICAgICAgICBkZWxldGUgJFNlcnZpY2VMaXN0MmJ7JFNlcnZpY2VJRH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VydmljZUxpc3QyYntEdW1teX0gPSAxOwogICAgfQp9CgpteSBAU2VydmljZUxpc3QySURzICAgPSBrZXlzICVTZXJ2aWNlTGlzdDJiOwpteSAkU2VydmljZUxpc3QyQ291bnQgPSBzY2FsYXIgQFNlcnZpY2VMaXN0MklEczsKCiRTZWxmLT5JcygKICAgICRTZXJ2aWNlTGlzdDJDb3VudCB8fCAnJywKICAgIDEsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTGlzdCgpIC0gY2hlY2sgbnVtYmVyIG9mIHNlcnZpY2VzIiwKKTsKCiRTZWxmLT5JcygKICAgICRTZXJ2aWNlTGlzdDJJRHNbMF0gfHwgJycsCiAgICAkU2VydmljZUxpc3QyU2VydmljZUlEIHx8ICcnLAogICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUxpc3QoKSAtIGNoZWNrIGlkIG9mIGxhc3Qgc2VydmljZSIsCik7CgokVGVzdENvdW50Kys7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU2VydmljZVNlYXJjaCB0ZXN0IDEgKGNoZWNrIGdlbmVyYWwgZnVuY3Rpb25hbGl0eSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgQFNlcnZpY2VTZWFyY2gxU2VhcmNoID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VTZWFyY2goIFVzZXJJRCA9PiAxICk7CgpteSAlU2VydmljZVNlYXJjaDFMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBLZWVwQ2hpbGRyZW4gPT4gMSwKKTsKClNFUlZJQ0VJRDoKZm9yIG15ICRTZXJ2aWNlSUQgKEBTZXJ2aWNlU2VhcmNoMVNlYXJjaCkgewoKICAgIGlmICggJFNlcnZpY2VTZWFyY2gxTGlzdHskU2VydmljZUlEfSApIHsKICAgICAgICBkZWxldGUgJFNlcnZpY2VTZWFyY2gxTGlzdHskU2VydmljZUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZXJ2aWNlU2VhcmNoMUxpc3R7RHVtbXl9ID0gMTsKICAgIH0KfQoKbXkgJFNlcnZpY2VTZWFyY2gxQ291bnQgPSBzY2FsYXIga2V5cyAlU2VydmljZVNlYXJjaDFMaXN0OwoKJFNlbGYtPklzKAogICAgJFNlcnZpY2VTZWFyY2gxQ291bnQsCiAgICAwLAogICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZVNlYXJjaCgpIiwKKTsKCiRUZXN0Q291bnQrKzsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucyBmb3IgbGF0ZXIgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBhZGQgc29tZSBuZWVkZWQgc2VydmljZXMgZm9yIGxhdGVyIHRlc3RzCm15IEBTZXJ2aWNlTmFtZXMgPSAoICRTZXJ2aWNlTmFtZVsxMF0gLiAnTm9ybWFsJywgJFNlcnZpY2VOYW1lWzEwXSAuICfUiCDTtCDPqiDPvicgKTsKbXkgJVNlcnZpY2VTZWFyY2gyU2VydmljZUlEOwoKbXkgJENvdW50ZXIxID0gMDsKZm9yIG15ICRTZXJ2aWNlTmFtZSAoQFNlcnZpY2VOYW1lcykgewoKICAgICRTZXJ2aWNlU2VhcmNoMlNlcnZpY2VJRHskQ291bnRlcjF9ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKCiAgICAgICAgIyAtLS0KICAgICAgICAjIElUU01Db3JlCiAgICAgICAgIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICMgLS0tCiAgICApOwoKICAgICRDb3VudGVyMSsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU2VydmljZVNlYXJjaCB0ZXN0IDIgKGdlbmVyYWwgbmFtZSBjaGVja3MpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRDb3VudGVyMiA9IDA7CmZvciBteSAkU2VydmljZU5hbWUgKEBTZXJ2aWNlTmFtZXMpIHsKCiAgICBteSBAUHJlcGFyZWROYW1lcyA9ICgKICAgICAgICAkU2VydmljZU5hbWUsCiAgICAgICAgJyonIC4gJFNlcnZpY2VOYW1lLAogICAgICAgICRTZXJ2aWNlTmFtZSAuICcqJywKICAgICAgICAnKicgLiAkU2VydmljZU5hbWUgLiAnKicsCiAgICAgICAgJyoqJyAuICRTZXJ2aWNlTmFtZSwKICAgICAgICAkU2VydmljZU5hbWUgLiAnKionLAogICAgICAgICcqKicgLiAkU2VydmljZU5hbWUgLiAnKionLAogICAgKTsKCiAgICBmb3IgbXkgJFByZXBhcmVkTmFtZSAoQFByZXBhcmVkTmFtZXMpIHsKCiAgICAgICAgbXkgQFNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VTZWFyY2goCiAgICAgICAgICAgIE5hbWUgICA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlcnZpY2VMaXN0WzBdIHx8ICcnLAogICAgICAgICAgICAkU2VydmljZVNlYXJjaDJTZXJ2aWNlSUR7JENvdW50ZXIyfSB8fCAnJywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZVNlYXJjaCgpIC0gZ2VuZXJhbCBuYW1lIGNoZWNrIiwKICAgICAgICApOwoKICAgICAgICAkVGVzdENvdW50Kys7CiAgICB9CgogICAgJENvdW50ZXIyKys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBTZXJ2aWNlTGlzdEdldAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlcwpteSAkU2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3RHZXQoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayBpZiByZXN1bHQgaXMgYW4gYXJyYXkgcmVmCiRTZWxmLT5JcygKICAgIHJlZiAkU2VydmljZUxpc3QsCiAgICAnQVJSQVknLAogICAgIlNlcnZpY2VMaXN0R2V0KCkgLSBJcyBBcnJheSIsCik7CgojIGNoZWNrIGlmIGVhY2ggYXJyYXkgaXRlbSBpcyBhIGhhc2ggcmVmCnsKICAgIG15ICRDb3VudGVyOwogICAgZm9yIG15ICRTZXJ2aWNlRGF0YSAoIEB7JFNlcnZpY2VMaXN0fSApIHsKCiAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHJlZiAkU2VydmljZURhdGEsCiAgICAgICAgICAgICdIQVNIJywKICAgICAgICAgICAgIlNlcnZpY2VMaXN0R2V0WyRDb3VudGVyXSAtIElzIEhhc2giLAogICAgICAgICk7CiAgICB9Cn0KCiMgY2hlY2sgaW50ZWdyaXR5IG9mIGVhY2ggYXJyYXkgZWxlbWVudAp7CiAgICBteSAkQ291bnRlcjsKICAgIGZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgIG15ICVTZXJ2aWNlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZURhdGEtPntTZXJ2aWNlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICApOwogICAgICAgICRDb3VudGVyKys7CiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkU2VydmljZURhdGEsCiAgICAgICAgICAgIFwlU2VydmljZSwKICAgICAgICAgICAgIlNlcnZpY2VMaXN0R2V0WyRDb3VudGVyXSAtIENvbXBhcmVkIHRvIFNlcnZpY2VHZXQiLAogICAgICAgICk7CiAgICB9Cn0KCiMgYWRkIHNlcnZpY2VzCm15ICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICAgPT4gJ1VuaXRUZXN0U2VydmljZV9HRl8nIC4gJFJhbmRvbUlELAogICAgUGFyZW50SUQgPT4gMCwKICAgIFZhbGlkSUQgID0+IDEsCgogICAgIyAtLS0KICAgICMgSVRTTUNvcmUKICAgICMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAjIC0tLQogICAgQ29tbWVudCA9PiAnVGVzdGluZyBzZXJ2aWNlJywKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VHcmFuZEZhdGhlcklELAogICAgIlNlcnZpY2VBZGQoKSAtIGZvciBTZXJ2aWNlR3JhbmRGYXRoZXIiCik7CgpteSAkU2VydmljZUZhdGhlcklEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgICA9PiAnVW5pdFRlc3RTZXJ2aWNlX0ZfJyAuICRSYW5kb21JRCwKICAgIFBhcmVudElEID0+ICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwKICAgIFZhbGlkSUQgID0+IDEsCgogICAgIyAtLS0KICAgICMgSVRTTUNvcmUKICAgICMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAjIC0tLQogICAgQ29tbWVudCA9PiAnVGVzdGluZyBzZXJ2aWNlJywKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VGYXRoZXJJRCwKICAgICJTZXJ2aWNlQWRkKCkgLSBmb3IgU2VydmljZUZhdGhlciIKKTsKCm15ICRTZXJ2aWNlU29uSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgID0+ICdVbml0VGVzdFNlcnZpY2VfU18nIC4gJFJhbmRvbUlELAogICAgUGFyZW50SUQgPT4gJFNlcnZpY2VGYXRoZXJJRCwKICAgIFZhbGlkSUQgID0+IDEsCiAgICBDb21tZW50ICA9PiAnVGVzdGluZyBzZXJ2aWNlJywKICAgIFVzZXJJRCAgID0+IDEsCgogICAgIyAtLS0KICAgICMgSVRTTUNvcmUKICAgICMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAjIC0tLQopOwoKIyBzYW5pdHkgY2hlY2sKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZVNvbklELAogICAgIlNlcnZpY2VBZGQoKSAtIGZvciBTZXJ2aWNlU29uIgopOwoKIyBnZXQgdGhlIHNlcnZpY2UgbGlzdCBhZ2FpbgpteSAkTmV3U2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3RHZXQoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjb21wYXJlIHRoZSBzZXJ2aWNlIGxpc3RzIChzaG91bGQgYmUgbm90IGVxdWFsIHNpbmNlIG5ldyBzZXJ2aWNlcyB3aGVyZSBhZGRlZCkKJFNlbGYtPklzTm90RGVlcGx5KAogICAgJFNlcnZpY2VMaXN0LAogICAgJE5ld1NlcnZpY2VMaXN0LAogICAgIlNlcnZpY2VMaXN0R2V0KCkgLSBjb21wYXJlZCB3aXRoIGl0c2VsZiBhZnRlciBhZGRpbmcgbmV3IHNlcnZpY2VzIgopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNlcnZpY2VQYXJlbnRzR2V0CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IHRoZSBwYXJlbnRzIGZvciBncmFuZCBmYXRoZXIKbXkgJFNlcnZpY2VQYXJlbnRzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPklzRGVlcGx5KAogICAgJFNlcnZpY2VQYXJlbnRzLAogICAgW10sCiAgICAiU2VydmljZVBhcmVudHNMaXN0R2V0IC0gZm9yIFNlcnZpY2VHcmFuZEZhdGhlciIKKTsKCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUdyYW5kRmF0aGVySUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICRTZXJ2aWNlUGFyZW50cywKICAgIFtdLAogICAgIlNlcnZpY2VQYXJlbnRzTGlzdEdldCAtIGZvciBTZXJ2aWNlR3JhbmRGYXRoZXIgKGNhY2hlZCkiCik7CgojIGdldCB0aGUgcGFyZW50cyBmb3IgZmF0aGVyCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUZhdGhlcklELAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2VydmljZVBhcmVudHMsCiAgICBbJFNlcnZpY2VHcmFuZEZhdGhlcklEXSwKICAgICJTZXJ2aWNlUGFyZW50c0dldCAtIGZvciBTZXJ2aWNlRmF0aGVyIgopOwoKJFNlcnZpY2VQYXJlbnRzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlRmF0aGVySUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICRTZXJ2aWNlUGFyZW50cywKICAgIFskU2VydmljZUdyYW5kRmF0aGVySURdLAogICAgIlNlcnZpY2VQYXJlbnRzR2V0IC0gZm9yIFNlcnZpY2VGYXRoZXIgKGNhY2hlZCkiCik7CgojIGdldCB0aGUgcGFyZW50cyBmb3Igc29uCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZVNvbklELAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2VydmljZVBhcmVudHMsCiAgICBbICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwgJFNlcnZpY2VGYXRoZXJJRCBdLAogICAgIlNlcnZpY2VQYXJlbnRzR2V0IC0gZm9yIFNlcnZpY2VTb24iCik7CgokU2VydmljZVBhcmVudHMgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVBhcmVudHNHZXQoCiAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VTb25JRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPklzRGVlcGx5KAogICAgJFNlcnZpY2VQYXJlbnRzLAogICAgWyAkU2VydmljZUdyYW5kRmF0aGVySUQsICRTZXJ2aWNlRmF0aGVySUQgXSwKICAgICJTZXJ2aWNlUGFyZW50c0dldCAtIGZvciBTZXJ2aWNlU29uIChjYWNoZWQpIgopOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/SLA.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1NMQS50CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpSZWdpc3RlckRyaXZlcjsgICAgIyBTZXQgdXAgJEtlcm5lbDo6T00gYW5kICRtYWluOjpTZWxmCgpvdXIgJFNlbGY7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFNMQU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7Cm15ICRVc2VyT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGNyZWF0ZSBuZWVkZWQgdXNlcnMKbXkgQFVzZXJJRHM7CnsKCiAgICAjIGRpc2FibGUgZW1haWwgY2hlY2tzIHRvIGNyZWF0ZSBuZXcgdXNlcgogICAgbXkgJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrRW1haWxBZGRyZXNzZXMnKSB8fCAxOwogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAwLAogICAgKTsKCiAgICBmb3IgbXkgJENvdW50ZXIgKCAxIC4uIDIgKSB7CgogICAgICAgICMgY3JlYXRlIG5ldyB1c2VycyBmb3IgdGhlIHRlc3RzCiAgICAgICAgbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyQWRkKAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lID0+ICdTTEEnIC4gJENvdW50ZXIsCiAgICAgICAgICAgIFVzZXJMYXN0bmFtZSAgPT4gJ1VuaXRUZXN0JywKICAgICAgICAgICAgVXNlckxvZ2luICAgICA9PiAnVW5pdFRlc3QtU0xBLScgLiAkQ291bnRlciAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ1VuaXRUZXN0LVNMQS0nIC4gJENvdW50ZXIgLiAnQGxvY2FsaG9zdCcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQFVzZXJJRHMsICRVc2VySUQ7CiAgICB9CgogICAgIyByZXN0b3JlIG9yaWdpbmFsIGVtYWlsIGNoZWNrIHBhcmFtCiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnLAogICAgKTsKfQoKIyBjcmVhdGUgbmVlZGVkIHJhbmRvbSBzZXJ2aWNlIG5hbWVzCm15IEBTTEFOYW1lID0gbWFwIHsgJ1VuaXRUZXN0JyAuICRIZWxwZXItPkdldFJhbmRvbUlEIH0gKCAxIC4uIDEwICk7CgojIGNyZWF0ZSBzb21lIHRlc3Qgc2VydmljZXMKbXkgQFNlcnZpY2VJRHM7CmZvciAoIDEgLi4gMyApIHsKCiAgICAjIGFkZCBhIHNlcnZpY2UKICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgICAgICBOYW1lICAgID0+ICdVbml0VGVzdC1TTEEnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAoKICAgICAgICAjIC0tLQogICAgICAgICMgSVRTTUNvcmUKICAgICAgICAjIC0tLQogICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgIyAtLS0KICAgICk7CgogICAgcHVzaCBAU2VydmljZUlEcywgJFNlcnZpY2VJRDsKfQoKIyBnZXQgb3JpZ2luYWwgU0xBIGxpc3QgZm9yIGxhdGVyIGNoZWNrcwpteSAlU0xBTGlzdE9yaWdpbmFsID0gJFNMQU9iamVjdC0+U0xBTGlzdCgKICAgIFZhbGlkICA9PiAwLAogICAgVXNlcklEID0+IDEsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZGVmaW5lIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEl0ZW1EYXRhID0gWwoKICAgICMgdGhpcyBTTEEgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIFNMQSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgID0+ICRTTEFOYW1lWzBdLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNMQU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgLS0tCiAgICAjIElUU01Db3JlCiAgICAjIC0tLQogICAgIyB0aGlzIFNMQSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyAtLS0KCiAgICAjIHNlcnZpY2UgaWRzIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBcZG8geydEdW1teSd9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgc2VydmljZSBpZHMgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgc2VydmljZSBpZHMgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UgKGNoZWNrIHJldHVybiBmYWxzZSkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IHt9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIG9uZSB0ZXN0IGJlZm9yZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIFNMQSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKFNMQSBpcyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChTTEEgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU0xBTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChTTEEgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNMQU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIFNMQSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgaWRzIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gXGRvIHsnRHVtbXknfSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIFNMQSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgaWRzIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4ge30sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNMQU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIFNMQSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAoY2hlY2sgdGhlIHJldHVybmVkIHNlcnZpY2UgaWQgYXJyYXkpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBbICRTZXJ2aWNlSURzWzBdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNMQU5hbWVbMV0sCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVsxXSwKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKGNoZWNrIHRoZSBzb3J0aW5nIG9mIHRoZSByZXR1cm5lZCBzZXJ2aWNlIGlkIGFycmF5KQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gWyAkU2VydmljZUlEc1sxXSwgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVsyXSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gWyAkU2VydmljZUlEc1swXSwgJFNlcnZpY2VJRHNbMV0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVsyXSwKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNMQU5hbWVbMV0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIFNMQSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gWyAkU2VydmljZUlEc1sxXSwgJFNlcnZpY2VJRHNbMl0sICRTZXJ2aWNlSURzWzBdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbM10sCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDEwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDIwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDMwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDQwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDUwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDYwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3RDb21tZW50MicsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzBdLCAkU2VydmljZUlEc1sxXSwgJFNlcnZpY2VJRHNbMl0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVszXSwKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMTAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMjAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMzAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gNDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gNTAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gNjAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnVGVzdENvbW1lbnQyJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChTTEEgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChTTEEgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgID0+ICRTTEFOYW1lWzNdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIFNMQSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKFNMQSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzNdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKFNMQSB1cGRhdGUgYXJndW1lbnRzIGFyZSBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzNdIC4gJ1VQREFURTInLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcxJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAyMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAzMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiA0MCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA1MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA2MCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA3MCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0Q29tbWVudDJVUERBVEUyJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAkVXNlcklEc1swXSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVszXSAuICdVUERBVEUyJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMjAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMzAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gNDAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gNTAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gNjAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gNzAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMicsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAkVXNlcklEc1swXSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIFNMQSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCAoU0xBIHVwZGF0ZSBhcmd1bWVudHMgYXJlIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gWyAkU2VydmljZUlEc1syXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzNdIC4gJ1VQREFURTMnLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcyJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAzMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiA0MCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiA1MCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA2MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA3MCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA4MCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0Q29tbWVudDJVUERBVEUzJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAkVXNlcklEc1sxXSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzJdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbM10gLiAnVVBEQVRFMycsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzInLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDMwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDQwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDUwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDYwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDcwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDgwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3RDb21tZW50MlVQREFURTMnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgU0xBIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAiIFx0IFxuIFxyICIgLiAkU0xBTmFtZVs0XSAuICIgXHQgXG4gXHIgIiwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgID0+ICIgXHQgXG4gXHIgVGVzdCBDb21tZW50IFx0IFxuIFxyICIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzBdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbNF0sCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnVGVzdCBDb21tZW50JywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VJRHNbMV0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAiIFx0IFxuIFxyICIgLiAkU0xBTmFtZVs0XSAuICIgVVBEQVRFMSBcdCBcbiBcciAiLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgPT4gIiBcdCBcbiBcciBUZXN0IENvbW1lbnQgVVBEQVRFMSBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRVc2VySURzWzFdLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMV0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVs0XSAuICcgVVBEQVRFMScsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnVGVzdCBDb21tZW50IFVQREFURTEnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgU0xBIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChVbmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzVdIC4gJyDPkiDPoSDGqSDPniAnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJyDRoCDRpCBUZXN0Q29tbWVudDUgz6AgzqkgJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzVdIC4gJyDPkiDPoSDGqSDPnicsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAn0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAzLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IChVbmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzVdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pIFVQREFURTEnLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzVdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICfRoCDRpCBUZXN0Q29tbWVudDUgz6AgzqkgVVBEQVRFMScsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAkVXNlcklEc1swXSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBTTEEgbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNMQU5hbWVbNl0gLiAnIFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgID0+ICcgW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ1t0ZXN0XSUqXFwgJyAuICRTTEFOYW1lWzZdIC4gJyBbdGVzdF0lKlxcJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBbdGVzdF0lKlxcJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBTTEEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IChzcGVjaWFsIGNoYXJhY3RlciBjaGVja3MpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBbXSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnIFt0ZXN0XSUqXFwgJyAuICRTTEFOYW1lWzZdIC4gJyBVUERBVEUxIFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgID0+ICcgW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgVVBEQVRFMSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRHNbMV0sCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ1t0ZXN0XSUqXFwgJyAuICRTTEFOYW1lWzZdIC4gJyBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFVQREFURTEgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAkVXNlcklEc1sxXSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCgogICAgICAgICAgICAjIC0tLQogICAgICAgIH0sCiAgICB9LApdOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHJ1biBnZW5lcmFsIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRUZXN0Q291bnQgPSAxOwpteSAkTGFzdEFkZGVkU0xBSUQ7Cm15ICRBZGRlZENvdW50ZXIgPSAwOwoKZm9yIG15ICRJdGVtICggQHskSXRlbURhdGF9ICkgewoKICAgIGlmICggJEl0ZW0tPntBZGR9ICkgewoKICAgICAgICAjIGFkZCBuZXcgU0xBCiAgICAgICAgbXkgJFNMQUlEID0gJFNMQU9iamVjdC0+U0xBQWRkKCAleyAkSXRlbS0+e0FkZH0gfSApOwoKICAgICAgICAjIGNoZWNrIGlmIFNMQSB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntBZGRHZXR9ICkgewoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU0xBSUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFBZGQoKSAtIFNMQUlEOiAkU0xBSUQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRTTEFJRCkgewoKICAgICAgICAgICAgICAgICMgbG9va3VwIFNMQSBuYW1lCiAgICAgICAgICAgICAgICBteSAkU0xBTmFtZSA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCggU0xBSUQgPT4gJFNMQUlEICk7CgogICAgICAgICAgICAgICAgIyBsb29rdXAgdGVzdAogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRTTEFOYW1lIHx8ICcnLAogICAgICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+e05hbWV9IHx8ICcnLAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNMQUxvb2t1cCgpIC0gbG9va3VwIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0aGUgU0xBIGlkCiAgICAgICAgICAgICAgICBteSAkU0xBSUROZXcgPSAkU0xBT2JqZWN0LT5TTEFMb29rdXAoIE5hbWUgPT4gJFNMQU5hbWUgfHwgJycgKTsKCiAgICAgICAgICAgICAgICAjIHJldmVyc2UgbG9va3VwIHRlc3QKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU0xBSUROZXcgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgJFNMQUlEICAgIHx8ICcnLAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNMQUxvb2t1cCgpIC0gcmV2ZXJzZSBsb29rdXAiLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCBsYXN0IFNMQSBpZCB2YXJpYWJsZQogICAgICAgICAgICAgICAgJExhc3RBZGRlZFNMQUlEID0gJFNMQUlEOwoKICAgICAgICAgICAgICAgICMgaW5jcmVtZW50IHRoZSBhZGRlZCBjb3VudGVyCiAgICAgICAgICAgICAgICAkQWRkZWRDb3VudGVyKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRTTEFJRCwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNMQUFkZCgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IFNMQSBkYXRhIHRvIGNoZWNrIHRoZSB2YWx1ZXMgYWZ0ZXIgY3JlYXRpb24gb2YgdGhlIFNMQQogICAgICAgIG15ICVTTEFHZXQgPSAkU0xBT2JqZWN0LT5TTEFHZXQoCiAgICAgICAgICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkSXRlbS0+e0FkZH0tPntVc2VySUR9LAogICAgICAgICAgICBDYWNoZSAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIFNMQSBkYXRhIGFmdGVyIGNyZWF0aW9uIG9mIHRoZSBTTEEKICAgICAgICBmb3IgbXkgJFNMQUF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e0FkZEdldH0gfSApIHsKCiAgICAgICAgICAgICMgY2hlY2sgYXR0cmlidXRlcwogICAgICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICAgICAkU0xBR2V0eyRTTEFBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgJEl0ZW0tPntBZGRHZXR9LT57JFNMQUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFHZXQoKSAtICRTTEFBdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRJdGVtLT57VXBkYXRlfSApIHsKCiAgICAgICAgIyBjaGVjayBsYXN0IFNMQSBpZCB2YXJpYWJsZQogICAgICAgIGlmICggISRMYXN0QWRkZWRTTEFJRCApIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IE5PIExBU1QgU0VSVklDRSBJRCBHSVZFTiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSB0aGUgU0xBCiAgICAgICAgbXkgJFVwZGF0ZVN1Y2VzcyA9ICRTTEFPYmplY3QtPlNMQVVwZGF0ZSgKICAgICAgICAgICAgJXsgJEl0ZW0tPntVcGRhdGV9IH0sCiAgICAgICAgICAgIFNMQUlEID0+ICRMYXN0QWRkZWRTTEFJRCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIFNMQSB3YXMgdXBkYXRlZCBzdWNjZXNzZnVsbHkgb3Igbm90CiAgICAgICAgaWYgKCAkSXRlbS0+e1VwZGF0ZUdldH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFVwZGF0ZVN1Y2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNMQVVwZGF0ZSgpIC0gU0xBSUQ6ICRMYXN0QWRkZWRTTEFJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkVXBkYXRlU3VjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBVXBkYXRlKCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgU0xBIGRhdGEgdG8gY2hlY2sgdGhlIHZhbHVlcyBhZnRlciB0aGUgdXBkYXRlCiAgICAgICAgbXkgJVNMQUdldDIgPSAkU0xBT2JqZWN0LT5TTEFHZXQoCiAgICAgICAgICAgIFNMQUlEICA9PiAkTGFzdEFkZGVkU0xBSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkSXRlbS0+e1VwZGF0ZX0tPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgU0xBIGRhdGEgYWZ0ZXIgdXBkYXRlCiAgICAgICAgZm9yIG15ICRTTEFBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntVcGRhdGVHZXR9IH0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIGF0dHJpYnV0ZXMKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgJFNMQUdldDJ7JFNMQUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAkSXRlbS0+e1VwZGF0ZUdldH0tPnskU0xBQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNMQUdldCgpIC0gJFNMQUF0dHJpYnV0ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGxvb2t1cCBTTEEgbmFtZQogICAgICAgIG15ICRTTEFOYW1lID0gJFNMQU9iamVjdC0+U0xBTG9va3VwKCBTTEFJRCA9PiAkU0xBR2V0MntTTEFJRH0gKTsKCiAgICAgICAgIyBsb29rdXAgdGVzdAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNMQU5hbWUgfHwgJycsCiAgICAgICAgICAgICRTTEFHZXQye05hbWV9IHx8ICcnLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIGxvb2t1cCIsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0aGUgU0xBIGlkCiAgICAgICAgbXkgJFNMQUlETmV3ID0gJFNMQU9iamVjdC0+U0xBTG9va3VwKCBOYW1lID0+ICRTTEFOYW1lIHx8ICcnICk7CgogICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGVzdAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNMQUlETmV3IHx8ICcnLAogICAgICAgICAgICAkU0xBR2V0MntTTEFJRH0gfHwgJycsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNMQUxvb2t1cCgpIC0gcmV2ZXJzZSBsb29rdXAiLAogICAgICAgICk7CiAgICB9CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU0xBTGlzdCB0ZXN0IDEgKGNoZWNrIGdlbmVyYWwgZnVuY3Rpb25hbGl0eSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJVNMQUxpc3QxID0gJFNMQU9iamVjdC0+U0xBTGlzdCgKICAgIFZhbGlkICA9PiAwLAogICAgVXNlcklEID0+IDEsCik7Cm15ICVTTEFMaXN0MU9yZyA9ICVTTEFMaXN0T3JpZ2luYWw7CgpTRVJWSUNFSUQ6CmZvciBteSAkU0xBSUQgKCBzb3J0IGtleXMgJVNMQUxpc3QxT3JnICkgewoKICAgIGlmICggJFNMQUxpc3QxeyRTTEFJRH0gJiYgJFNMQUxpc3QxT3JneyRTTEFJRH0gZXEgJFNMQUxpc3QxeyRTTEFJRH0gKSB7CiAgICAgICAgZGVsZXRlICRTTEFMaXN0MXskU0xBSUR9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNMQUxpc3Qxe0R1bW15fSA9IDE7CiAgICB9Cn0KCm15ICRTTEFMaXN0MUNvdW50ID0gc2NhbGFyIGtleXMgJVNMQUxpc3QxOwoKJFNlbGYtPklzKAogICAgJFNMQUxpc3QxQ291bnQgfHwgJycsCiAgICAkQWRkZWRDb3VudGVyICB8fCAnJywKICAgICJUZXN0ICRUZXN0Q291bnQ6IFNMQUxpc3QoKSIsCik7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/Ticket.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1RpY2tldC50CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKdXNlIENhcHR1cmU6OlRpbnkgcXcoY2FwdHVyZSk7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6TW9ja1RpbWUgcXcoRml4ZWRUaW1lQWRkU2Vjb25kcyBGaXhlZFRpbWVTZXQpOwp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpSZWdpc3RlckRyaXZlcjsgICAgIyBTZXQgdXAgJEtlcm5lbDo6T00gYW5kICRtYWluOjpTZWxmCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyhJc0hhc2hSZWZXaXRoRGF0YSk7CgpvdXIgJFNlbGY7CgpteSAkUXVldWVPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKbXkgJFNlcnZpY2VPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKbXkgJFNMQU9iamVjdCAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwpteSAkU3RhdGVPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKTsKbXkgJFRpY2tldE9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpteSAkQXJ0aWNsZU9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7Cm15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQ2hhbm5lbCggQ2hhbm5lbE5hbWUgPT4gJ0ludGVybmFsJyApOwpteSAkRGF0ZVRpbWVPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKbXkgJFR5cGVPYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKTsKbXkgJFVzZXJPYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSAgPT4gMSwKICAgICAgICBVc2VUbXBBcnRpY2xlRGlyID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgc2V0IGZpeGVkIHRpbWUKRml4ZWRUaW1lU2V0KCk7CgpteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0X1RpdGxlJywKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGUgICAgICAgID0+ICdjbG9zZWQgc3VjY2Vzc2Z1bCcsCiAgICBDdXN0b21lck5vICAgPT4gJzEyMzQ2NScsCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90b2JvLm9yZycsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRCwKICAgICdUaWNrZXRDcmVhdGUoKScsCik7CgpteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgRXh0ZW5kZWQgPT4gMSwKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtUaXRsZX0sCiAgICAnU29tZSBUaWNrZXRfVGl0bGUnLAogICAgJ1RpY2tldEdldCgpIChUaXRsZSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1F1ZXVlfSwKICAgICdSYXcnLAogICAgJ1RpY2tldEdldCgpIChRdWV1ZSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1ByaW9yaXR5fSwKICAgICczIG5vcm1hbCcsCiAgICAnVGlja2V0R2V0KCkgKFByaW9yaXR5KScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7U3RhdGV9LAogICAgJ2Nsb3NlZCBzdWNjZXNzZnVsJywKICAgICdUaWNrZXRHZXQoKSAoU3RhdGUpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtPd25lcn0sCiAgICAncm9vdEBsb2NhbGhvc3QnLAogICAgJ1RpY2tldEdldCgpIChPd25lciknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e0NyZWF0ZUJ5fSwKICAgIDEsCiAgICAnVGlja2V0R2V0KCkgKENyZWF0ZUJ5KScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7Q2hhbmdlQnl9LAogICAgMSwKICAgICdUaWNrZXRHZXQoKSAoQ2hhbmdlQnkpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldHtUaXRsZX0sCiAgICAnU29tZSBUaWNrZXRfVGl0bGUnLAogICAgJ1RpY2tldEdldCgpIChUaXRsZSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1Jlc3BvbnNpYmxlfSwKICAgICdyb290QGxvY2FsaG9zdCcsCiAgICAnVGlja2V0R2V0KCkgKFJlc3BvbnNpYmxlKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7TG9ja30sCiAgICAndW5sb2NrJywKICAgICdUaWNrZXRHZXQoKSAoTG9jayknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1NlcnZpY2VJRH0sCiAgICAnJywKICAgICdUaWNrZXRHZXQoKSAoU2VydmljZUlEKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7U0xBSUR9LAogICAgJycsCiAgICAnVGlja2V0R2V0KCkgKFNMQUlEKScsCik7CgpteSAkRGVmYXVsdFRpY2tldFR5cGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1RpY2tldDo6VHlwZTo6RGVmYXVsdCcpOwokU2VsZi0+SXMoCiAgICAkVGlja2V0e1R5cGVJRH0sCiAgICAkVHlwZU9iamVjdC0+VHlwZUxvb2t1cCggVHlwZSA9PiAkRGVmYXVsdFRpY2tldFR5cGUgKSwKICAgICdUaWNrZXRHZXQoKSAoVHlwZUlEKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXR7Q2xvc2VkfSwKICAgICRUaWNrZXR7Q3JlYXRlZH0sCiAgICAnVGlja2V0IGNyZWF0ZWQgYXMgY2xvc2VkIGFzIENsb3NlIFRpbWUgPSBDcmVhdGlvbiBUaW1lJywKKTsKCm15ICggJFRlc3RVc2VyTG9naW4sICRUZXN0VXNlcklEICkgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyA9PiBbICd1c2VycycsIF0sCik7CgpteSAkVGlja2V0SURDcmVhdGVkQnkgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0X1RpdGxlJywKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGUgICAgICAgID0+ICdjbG9zZWQgc3VjY2Vzc2Z1bCcsCiAgICBDdXN0b21lck5vICAgPT4gJzEyMzQ2NScsCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90b2JvLm9yZycsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAkVGVzdFVzZXJJRCwKKTsKCm15ICVDaGVja0NyZWF0ZWRCeSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRENyZWF0ZWRCeSwKICAgIFVzZXJJRCAgID0+ICRUZXN0VXNlcklELAopOwoKJFNlbGYtPklzKAogICAgJENoZWNrQ3JlYXRlZEJ5e0NoYW5nZUJ5fSwKICAgICRUZXN0VXNlcklELAogICAgJ1RpY2tldEdldCgpIChDaGFuZ2VCeSAtIG5vdCBzeXN0ZW0gSUQgMSB1c2VyKScsCik7CgokU2VsZi0+SXMoCiAgICAkQ2hlY2tDcmVhdGVkQnl7Q3JlYXRlQnl9LAogICAgJFRlc3RVc2VySUQsCiAgICAnVGlja2V0R2V0KCkgKENyZWF0ZUJ5IC0gbm90IHN5c3RlbSBJRCAxIHVzZXIpJywKKTsKCiRUaWNrZXRPYmplY3QtPlRpY2tldE93bmVyU2V0KAogICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRENyZWF0ZWRCeSwKICAgIE5ld1VzZXJJRCA9PiAkVGVzdFVzZXJJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJUNoZWNrQ3JlYXRlZEJ5ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElEQ3JlYXRlZEJ5LAogICAgVXNlcklEICAgPT4gJFRlc3RVc2VySUQsCik7CgokU2VsZi0+SXMoCiAgICAkQ2hlY2tDcmVhdGVkQnl7Q3JlYXRlQnl9LAogICAgJFRlc3RVc2VySUQsCiAgICAnVGlja2V0R2V0KCkgKENyZWF0ZUJ5IC0gc3RpbGwgdGhlIHNhbWUgYWZ0ZXIgT3duZXJTZXQpJywKKTsKCiRTZWxmLT5JcygKICAgICRDaGVja0NyZWF0ZWRCeXtPd25lcklEfSwKICAgICRUZXN0VXNlcklELAogICAgJ1RpY2tldE93bmVyU2V0KCknLAopOwoKJFNlbGYtPklzKAogICAgJENoZWNrQ3JlYXRlZEJ5e0NoYW5nZUJ5fSwKICAgIDEsCiAgICAnVGlja2V0T3duZXJTZXQoKSAoQ2hhbmdlQnkgLSBTeXN0ZW0gSUQgMSBub3cpJywKKTsKCm15ICRBcnRpY2xlSUQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICBTZW5kZXJUeXBlICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMCwKICAgIEZyb20gICAgICAgICAgICAgICAgID0+CiAgICAgICAgJ1NvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCA8ZW1haWxAZXhhbXBsZS5jb20+JywKICAgIFRvID0+CiAgICAgICAgJ1NvbWUgQ3VzdG9tZXIgQSBTb21lIEN1c3RvbWVyIEEgU29tZSBDdXN0b21lciBBIFNvbWUgQ3VzdG9tZXIgQSBTb21lIEN1c3RvbWVyIEEgU29tZSBDdXN0b21lciBBICBTb21lIEN1c3RvbWVyIEFTb21lIEN1c3RvbWVyIEEgU29tZSBDdXN0b21lciBBIDxjdXN0b21lci1hQGV4YW1wbGUuY29tPicsCiAgICBDYyA9PgogICAgICAgICdTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiA8Y3VzdG9tZXItYkBleGFtcGxlLmNvbT4nLAogICAgUmVwbHlUbyA9PgogICAgICAgICdTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiBTb21lIEN1c3RvbWVyIEIgU29tZSBDdXN0b21lciBCIFNvbWUgQ3VzdG9tZXIgQiA8Y3VzdG9tZXItYkBleGFtcGxlLmNvbT4nLAogICAgU3ViamVjdCA9PgogICAgICAgICdzb21lIHNob3J0IGRlc2NyaXB0aW9uIHNvbWUgc2hvcnQgZGVzY3JpcHRpb24gc29tZSBzaG9ydCBkZXNjcmlwdGlvbiBzb21lIHNob3J0IGRlc2NyaXB0aW9uIHNvbWUgc2hvcnQgZGVzY3JpcHRpb24gc29tZSBzaG9ydCBkZXNjcmlwdGlvbiBzb21lIHNob3J0IGRlc2NyaXB0aW9uIHNvbWUgc2hvcnQgZGVzY3JpcHRpb24gJywKICAgIEJvZHkgPT4gKAogICAgICAgICd0aGUgbWVzc2FnZSB0ZXh0ClBlcmwgbW9kdWxlcyBwcm92aWRlIGEgcmFuZ2Ugb2YgZmVhdHVyZXMgdG8gaGVscCB5b3UgYXZvaWQgcmVpbnZlbnRpbmcgdGhlIHdoZWVsLCBhbmQgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBDUEFOICggaHR0cDovL3d3dy5jcGFuLm9yZy8gKS4gQSBudW1iZXIgb2YgcG9wdWxhciBtb2R1bGVzIGFyZSBpbmNsdWRlZCB3aXRoIHRoZSBQZXJsIGRpc3RyaWJ1dGlvbiBpdHNlbGYuCgpDYXRlZ29yaWVzIG9mIG1vZHVsZXMgcmFuZ2UgZnJvbSB0ZXh0IG1hbmlwdWxhdGlvbiB0byBuZXR3b3JrIHByb3RvY29scyB0byBkYXRhYmFzZSBpbnRlZ3JhdGlvbiB0byBncmFwaGljcy4gQSBjYXRlZ29yaXplZCBsaXN0IG9mIG1vZHVsZXMgaXMgYWxzbyBhdmFpbGFibGUgZnJvbSBDUEFOLgoKVG8gbGVhcm4gaG93IHRvIGluc3RhbGwgbW9kdWxlcyB5b3UgZG93bmxvYWQgZnJvbSBDUEFOLCByZWFkIHBlcmxtb2RpbnN0YWxsCgpUbyBsZWFybiBob3cgdG8gdXNlIGEgcGFydGljdWxhciBtb2R1bGUsIHVzZSBwZXJsZG9jIE1vZHVsZTo6TmFtZSAuIFR5cGljYWxseSB5b3Ugd2lsbCB3YW50IHRvIHVzZSBNb2R1bGU6Ok5hbWUgLCB3aGljaCB3aWxsIHRoZW4gZ2l2ZSB5b3UgYWNjZXNzIHRvIGV4cG9ydGVkIGZ1bmN0aW9ucyBvciBhbiBPTyBpbnRlcmZhY2UgdG8gdGhlIG1vZHVsZS4KCnBlcmxmYXEgY29udGFpbnMgcXVlc3Rpb25zIGFuZCBhbnN3ZXJzIHJlbGF0ZWQgdG8gbWFueSBjb21tb24gdGFza3MsIGFuZCBvZnRlbiBwcm92aWRlcyBzdWdnZXN0aW9ucyBmb3IgZ29vZCBDUEFOIG1vZHVsZXMgdG8gdXNlLgoKcGVybG1vZCBkZXNjcmliZXMgUGVybCBtb2R1bGVzIGluIGdlbmVyYWwuIHBlcmxtb2RsaWIgbGlzdHMgdGhlIG1vZHVsZXMgd2hpY2ggY2FtZSB3aXRoIHlvdXIgUGVybCBpbnN0YWxsYXRpb24uCgpJZiB5b3UgZmVlbCB0aGUgdXJnZSB0byB3cml0ZSBQZXJsIG1vZHVsZXMsIHBlcmxuZXdtb2Qgd2lsbCBnaXZlIHlvdSBnb29kIGFkdmljZS4KJyB4IDIwMAogICAgKSwgICAgIyBjcmVhdGUgYSByZWFsbHkgYmlnIHN0cmluZyBieSBjb25jYXRlbmF0aW5nIDIwMCB0aW1lcwoKICAgIENvbnRlbnRUeXBlICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTE1JywKICAgIEhpc3RvcnlUeXBlICAgID0+ICdPd25lclVwZGF0ZScsCiAgICBIaXN0b3J5Q29tbWVudCA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICBOb0FnZW50Tm90aWZ5ICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB5b3UgZG9uJ3Qgd2FudCB0byBzZW5kIGFnZW50IG5vdGlmaWNhdGlvbnMKKTsKCiRTZWxmLT5UcnVlKAogICAgJEFydGljbGVJRCwKICAgICdBcnRpY2xlQ3JlYXRlKCknCik7CgokU2VsZi0+SXMoCiAgICBzY2FsYXIgJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KCBUaWNrZXRJRCA9PiAkVGlja2V0SUQgKSwKICAgIDEsCiAgICAnQXJ0aWNsZUNvdW50JywKKTsKCm15ICVBcnRpY2xlID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAopOwokU2VsZi0+VHJ1ZSgKICAgICRBcnRpY2xle0Zyb219IGVxCiAgICAgICAgJ1NvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgU29tZSBBZ2VudCA8ZW1haWxAZXhhbXBsZS5jb20+JywKICAgICdBcnRpY2xlR2V0KCknLAopOwoKZm9yIG15ICRLZXkgKHF3KCBCb2R5IFN1YmplY3QgRnJvbSBUbyBSZXBseVRvICkpIHsKICAgIG15ICRTdWNjZXNzID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlVXBkYXRlKAogICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICAgICAgS2V5ICAgICAgID0+ICRLZXksCiAgICAgICAgVmFsdWUgICAgID0+ICJOZXcgJEtleSIsCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgJ0FydGljbGVVcGRhdGUoKScKICAgICk7CgogICAgbXkgJUFydGljbGUyID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRBcnRpY2xlMnskS2V5fSwKICAgICAgICAiTmV3ICRLZXkiLAogICAgICAgICdBcnRpY2xlVXBkYXRlKCknCiAgICApOwoKICAgICMgc2V0IG9sZCB2YWx1ZQogICAgJFN1Y2Nlc3MgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVVcGRhdGUoCiAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICBLZXkgICAgICAgPT4gJEtleSwKICAgICAgICBWYWx1ZSAgICAgPT4gJEFydGljbGV7JEtleX0sCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwp9CgokQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZVNlYXJjaEluZGV4QnVpbGQoCiAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCm15ICRUaWNrZXRTZWFyY2hUaWNrZXROdW1iZXIgPSBzdWJzdHIgJFRpY2tldHtUaWNrZXROdW1iZXJ9LCAwLCAxMDsKbXkgJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyID0+IFsgJFRpY2tldFNlYXJjaFRpY2tldE51bWJlciAuICclJywgJyVub3QgZXhpc2l0aW5nJScgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlciBhcyBIQVNIUkVGKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TnVtYmVyKScsCik7CgojIFRlc3QgVGlja2V0TnVtYmVyIHNlYXJjaCBjb25kaXRpb24gJzAnLCBleHBlY3Rpbmcgbm8gcmVzdWx0cywgc2VlIGJ1ZyMxMTQ2MS4KJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyID0+IDAsCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICEkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TnVtYmVyIGVxIDApJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgPT4gMTAwLAogICAgVGlja2V0SUQgICA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRJRCknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICA9PiAxMDAsCiAgICBUaWNrZXRJRCAgID0+IFsgJFRpY2tldElELCA0MiBdLAogICAgVXNlcklEICAgICA9PiAxLAogICAgUGVybWlzc2lvbiA9PiAncncnLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0SUQgYXMgQVJSQVlSRUYpJywKKTsKCiggdW5kZWYsIG15ICRFcnJvck91dHB1dCwgdW5kZWYgKSA9IGNhcHR1cmUgewogICAgbXkgJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICBUaWNrZXRJRCA9PiBbXSwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKfTsKCiMgVmVyaWZ5IHRoYXQgc2VhcmNoIGRvZXMgbm90IGZhaWwgU1FMIHN5bnRheCBjaGVjayB3aGVuIGFuIGVtcHR5IGFycmF5IHJlZmVyZW5jZSBpcyBwYXNzZWQgZm9yIHRoZSBUaWNrZXRJRCBwYXJhbS4KIyAgIFBsZWFzZSBzZWUgYnVnIzE0MjI3IGZvciBtb3JlIGluZm9ybWF0aW9uLgokU2VsZi0+RmFsc2UoCiAgICAoICRFcnJvck91dHB1dCA9fiBte3lvdSBoYXZlIGFuIGVycm9yIGluIHlvdXIgc3FsIHN5bnRheH1pICkgLy8gMSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRJRCBhcyBhbiBlbXB0eSBBUlJBWVJFRiknCik7CgpteSAkQ291bnQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0NPVU5UJywKICAgIFRpY2tldE51bWJlciA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICA9PiAncncnLAopOwokU2VsZi0+SXMoCiAgICAkQ291bnQsCiAgICAxLAogICAgJ1RpY2tldFNlYXJjaCgpIChDT1VOVDpUaWNrZXROdW1iZXIpJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciA9PiBbICRUaWNrZXR7VGlja2V0TnVtYmVyfSwgJzEyMzQnIF0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXROdW1iZXJbQVJSQVldKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgID0+IDEwMCwKICAgIFRpdGxlICAgICAgPT4gJFRpY2tldHtUaXRsZX0sCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpdGxlKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgID0+IDEwMCwKICAgIFRpdGxlICAgICAgPT4gWyAkVGlja2V0e1RpdGxlfSwgJ1NvbWVUaXRsZUFCQycgXSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGl0bGVbQVJSQVldKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgID0+IDEwMCwKICAgIEN1c3RvbWVySUQgPT4gJFRpY2tldHtDdXN0b21lcklEfSwKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3VzdG9tZXJJRCknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICA9PiAxMDAsCiAgICBDdXN0b21lcklEID0+IFsgJFRpY2tldHtDdXN0b21lcklEfSwgJ0xVTFUnIF0sCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkN1c3RvbWVySURbQVJSQVldKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgID0+IDEwMCwKICAgIEN1c3RvbWVySUQgPT4gWydMVUxVJ10sCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgIHNjYWxhciAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3VzdG9tZXJJRFtBUlJBWV0pJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICA9PiAxMDAsCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkVGlja2V0e0N1c3RvbWVyVXNlcn0sCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3VzdG9tZXJVc2VyKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgPT4gMTAwLAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gWyAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSwgJzEyMzQnIF0sCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3VzdG9tZXJVc2VyW0FSUkFZXSknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciAgICAgID0+ICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgIFRpdGxlICAgICAgICAgICAgID0+ICRUaWNrZXR7VGl0bGV9LAogICAgQ3VzdG9tZXJJRCAgICAgICAgPT4gJFRpY2tldHtDdXN0b21lcklEfSwKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9LAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlcixUaXRsZSxDdXN0b21lcklELEN1c3RvbWVyVXNlcklEKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyICAgICAgPT4gWyAkVGlja2V0e1RpY2tldE51bWJlcn0sICAgJ0FCQycgXSwKICAgIFRpdGxlICAgICAgICAgICAgID0+IFsgJFRpY2tldHtUaXRsZX0sICAgICAgICAgICcxMjMnIF0sCiAgICBDdXN0b21lcklEICAgICAgICA9PiBbICRUaWNrZXR7Q3VzdG9tZXJJRH0sICAgICAnMTIxMzQyMScgXSwKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+IFsgJFRpY2tldHtDdXN0b21lclVzZXJJRH0sICdpYWRhc2QnIF0sCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TnVtYmVyLFRpdGxlLEN1c3RvbWVySUQsQ3VzdG9tZXJVc2VyW0FSUkFZXSknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyID0+IFsgJFRpY2tldHtUaWNrZXROdW1iZXJ9LCAnQUJDJyBdLAogICAgU3RhdGVUeXBlICAgID0+ICdDbG9zZWQnLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TnVtYmVyLFN0YXRlVHlwZTpDbG9zZWQpJywKKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgID0+IDEwMCwKICAgIFRpY2tldE51bWJlciA9PiBbICRUaWNrZXR7VGlja2V0TnVtYmVyfSwgJ0FCQycgXSwKICAgIFN0YXRlVHlwZSAgICA9PiAnT3BlbicsCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICA9PiAncncnLAopOwokU2VsZi0+RmFsc2UoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0TnVtYmVyLFN0YXRlVHlwZTpPcGVuKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgID0+IDEwMCwKICAgIE1JTUVCYXNlX0JvZHkgICAgICAgPT4gJ3dyaXRlIHBlcmwgbW9kdWxlcycsCiAgICBDb25kaXRpb25JbmxpbmUgICAgID0+IDEsCiAgICBDb250ZW50U2VhcmNoUHJlZml4ID0+ICcqJywKICAgIENvbnRlbnRTZWFyY2hTdWZmaXggPT4gJyonLAogICAgU3RhdGVUeXBlICAgICAgICAgICA9PiAnQ2xvc2VkJywKICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6TUlNRUJhc2VfQm9keSxTdGF0ZVR5cGU6Q2xvc2VkKScsCik7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgID0+IDEwMCwKICAgIE1JTUVCYXNlX0JvZHkgICAgICAgPT4gJ3dyaXRlIHBlcmwgbW9kdWxlcycsCiAgICBDb25kaXRpb25JbmxpbmUgICAgID0+IDEsCiAgICBDb250ZW50U2VhcmNoUHJlZml4ID0+ICcqJywKICAgIENvbnRlbnRTZWFyY2hTdWZmaXggPT4gJyonLAogICAgU3RhdGVUeXBlICAgICAgICAgICA9PiAnT3BlbicsCiAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgISRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpNSU1FQmFzZV8sU3RhdGVUeXBlOk9wZW4pJywKKTsKCiRUaWNrZXRPYmplY3QtPk1vdmVUaWNrZXQoCiAgICBRdWV1ZSAgICAgICAgICAgICAgPT4gJ0p1bmsnLAogICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgokVGlja2V0T2JqZWN0LT5Nb3ZlVGlja2V0KAogICAgUXVldWUgICAgICAgICAgICAgID0+ICdSYXcnLAogICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgpteSAlSEQgPSAkVGlja2V0T2JqZWN0LT5IaXN0b3J5VGlja2V0R2V0KAogICAgU3RvcFllYXIgID0+IDQwMDAsCiAgICBTdG9wTW9udGggPT4gMSwKICAgIFN0b3BEYXkgICA9PiAxLAogICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgIEZvcmNlICAgICA9PiAxLAopOwpteSAkUXVldWVMb29rdXBJRCA9ICRRdWV1ZU9iamVjdC0+UXVldWVMb29rdXAoIFF1ZXVlID0+ICRIRHtRdWV1ZX0gKTsKJFNlbGYtPklzKAogICAgJFF1ZXVlTG9va3VwSUQsCiAgICAkSER7UXVldWVJRH0sCiAgICAnSGlzdG9yeVRpY2tldEdldCgpIENoZWNrIGhpc3RvcnkgcXVldWUnLAopOwoKbXkgJFRpY2tldE1vdmUgPSAkVGlja2V0T2JqZWN0LT5Nb3ZlVGlja2V0KAogICAgUXVldWUgICAgICAgICAgICAgID0+ICdKdW5rJywKICAgIFRpY2tldElEICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICBTZW5kTm9Ob3RpZmljYXRpb24gPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRNb3ZlLAogICAgJ01vdmVUaWNrZXQoKScsCik7CgpteSAkVGlja2V0U3RhdGUgPSAkVGlja2V0T2JqZWN0LT5TdGF0ZVNldCgKICAgIFN0YXRlICAgID0+ICdvcGVuJywKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldFN0YXRlLAogICAgJ1N0YXRlU2V0KCknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyID0+IFsgJFRpY2tldHtUaWNrZXROdW1iZXJ9LCAnQUJDJyBdLAogICAgU3RhdGVUeXBlICAgID0+ICdPcGVuJywKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlcixTdGF0ZVR5cGU6T3BlbiknLAopOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyID0+IFsgJFRpY2tldHtUaWNrZXROdW1iZXJ9LCAnQUJDJyBdLAogICAgU3RhdGVUeXBlICAgID0+ICdDbG9zZWQnLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldE51bWJlcixTdGF0ZVR5cGU6Q2xvc2VkKScsCik7Cgpmb3IgbXkgJENvbmRpdGlvbiAoCiAgICAnKFNvbWUmJkFnZW50KScsCiAgICAnU29tZSYmQWdlbnQnLAogICAgJyhTb21lK0FnZW50KScsCiAgICAnIChTb21lK0FnZW50KScsCiAgICAnIChTb21lK0FnZW50KSAgJywKICAgICdTb21lJiZBZ2VudCcsCiAgICAnU29tZStBZ2VudCcsCiAgICAnIFNvbWUrQWdlbnQnLAogICAgJ1NvbWUrQWdlbnQgJywKICAgICcgU29tZStBZ2VudCAnLAogICAgJyghU29tZVdvcmRTaG91bGROb3RGb3VuZHx8KFNvbWUrQWdlbnQpKScsCiAgICAnKChTb21lK0FnZW50KXx8KFNvbWVBZ2VudE5vdEZvdW5kfHxBZ2VudE5vdEZvdW5kKSknLAogICAgJyJTb21lIEFnZW50IFNvbWUiJywKICAgICcoIlNvbWUgQWdlbnQgU29tZSIpJywKICAgICchIlNvbWUgU29tZSBBZ2VudCInLAogICAgJyghIlNvbWUgU29tZSBBZ2VudCIpJywKICAgICkKewogICAgJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKCiAgICAgICAgIyByZXN1bHQgKHJlcXVpcmVkKQogICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCgogICAgICAgICMgcmVzdWx0IGxpbWl0CiAgICAgICAgTGltaXQgICAgICAgICAgICAgICA9PiAxMDAwLAogICAgICAgIE1JTUVCYXNlX0Zyb20gICAgICAgPT4gJENvbmRpdGlvbiwKICAgICAgICBDb25kaXRpb25JbmxpbmUgICAgID0+IDEsCiAgICAgICAgQ29udGVudFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICAgICAgQ29udGVudFNlYXJjaFN1ZmZpeCA9PiAnKicsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFBlcm1pc3Npb24gICAgICAgICAgPT4gJ3J3JywKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAgICAgIlRpY2tldFNlYXJjaCgpIChIQVNIOk1JTUVCYXNlX0Zyb20sQ29uZGl0aW9uSW5saW5lLE1JTUVCYXNlX0Zyb209JyRDb25kaXRpb24nKSIsCiAgICApOwp9Cgpmb3IgbXkgJENvbmRpdGlvbiAoCiAgICAnKFNvbWVOb3RGb3VuZFdvcmQmJkFnZW50Tm90Rm91bmRXb3JkKScsCiAgICAnU29tZU5vdEZvdW5kV29yZHx8QWdlbnROb3RGb3VuZFdvcmQnLAogICAgJyBTb21lTm90Rm91bmRXb3JkfHxBZ2VudE5vdEZvdW5kV29yZCcsCiAgICAnU29tZU5vdEZvdW5kV29yZCYmQWdlbnROb3RGb3VuZFdvcmQnLAogICAgJ1NvbWVOb3RGb3VuZFdvcmQmJkFnZW50Tm90Rm91bmRXb3JkICAnLAogICAgJyhTb21lTm90Rm91bmRXb3JkIEFnZW50Tm90Rm91bmRXb3JkKScsCiAgICAnU29tZU5vdEZvdW5kV29yZCYmQWdlbnROb3RGb3VuZFdvcmQnLAogICAgJyhTb21lV29yZFNob3VsZE5vdEZvdW5kfHwoIVNvbWUrIUFnZW50KSknLAogICAgJygoU29tZU5vdEZvdW5kJiZBZ2VudCl8fChTb21lQWdlbnROb3RGb3VuZHx8QWdlbnROb3RGb3VuZCkpJywKICAgICchIlNvbWUgQWdlbnQgU29tZSInLAogICAgJyghIlNvbWUgQWdlbnQgU29tZSIpJywKICAgICciU29tZSBTb21lIEFnZW50IicsCiAgICAnKCJTb21lIFNvbWUgQWdlbnQiKScsCiAgICApCnsKICAgICVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCgogICAgICAgICMgcmVzdWx0IChyZXF1aXJlZCkKICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAoKICAgICAgICAjIHJlc3VsdCBsaW1pdAogICAgICAgIExpbWl0ICAgICAgICAgICAgICAgPT4gMTAwMCwKICAgICAgICBNSU1FQmFzZV9Gcm9tICAgICAgID0+ICRDb25kaXRpb24sCiAgICAgICAgQ29uZGl0aW9uSW5saW5lICAgICA9PiAxLAogICAgICAgIENvbnRlbnRTZWFyY2hQcmVmaXggPT4gJyonLAogICAgICAgIENvbnRlbnRTZWFyY2hTdWZmaXggPT4gJyonLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBQZXJtaXNzaW9uICAgICAgICAgID0+ICdydycsCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICggISRUaWNrZXRJRHN7JFRpY2tldElEfSApLAogICAgICAgICJUaWNrZXRTZWFyY2goKSAoSEFTSDpNSU1FQmFzZV9Gcm9tLENvbmRpdGlvbklubGluZSxNSU1FQmFzZV9Gcm9tPSckQ29uZGl0aW9uJykiLAogICAgKTsKfQoKbXkgJFRpY2tldFByaW9yaXR5ID0gJFRpY2tldE9iamVjdC0+UHJpb3JpdHlTZXQoCiAgICBQcmlvcml0eSA9PiAnMiBsb3cnLAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0UHJpb3JpdHksCiAgICAnUHJpb3JpdHlTZXQoKScsCik7CgojIGdldCB0aWNrZXQgZGF0YQpteSAlVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIHNhdmUgY3VycmVudCBjaGFuZ2VfdGltZQpteSAkQ2hhbmdlVGltZSA9ICRUaWNrZXREYXRhe0NoYW5nZWR9OwoKIyB3YWl0IDUgc2Vjb25kcwpGaXhlZFRpbWVBZGRTZWNvbmRzKDUpOwoKbXkgJFRpY2tldFRpdGxlID0gJFRpY2tldE9iamVjdC0+VGlja2V0VGl0bGVVcGRhdGUoCiAgICBUaXRsZSA9PiAnVmVyeSBsb25nIHRpdGxlIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5JwogICAgICAgIC4gJzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODknCiAgICAgICAgLiAnMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OScKICAgICAgICAuICcwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5JywKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldFRpdGxlLAogICAgJ1RpY2tldFRpdGxlVXBkYXRlKCknLAopOwoKIyBnZXQgdXBkYXRlZCB0aWNrZXQgZGF0YQolVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIGNvbXBhcmUgY3VycmVudCBjaGFuZ2VfdGltZSB3aXRoIG9sZCBvbmUKJFNlbGYtPklzTm90KAogICAgJENoYW5nZVRpbWUsCiAgICAkVGlja2V0RGF0YXtDaGFuZ2VkfSwKICAgICdDaGFuZ2VfdGltZSB1cGRhdGVkIGluIFRpY2tldFRpdGxlVXBkYXRlKCknLAopOwoKIyBjaGVjayBpZiB3ZSBoYXZlIGEgVGlja2V0IFRpdGxlIFVwZGF0ZSBoaXN0b3J5IHJlY29yZApteSBASGlzdG9yeUxpbmVzID0gJFRpY2tldE9iamVjdC0+SGlzdG9yeUdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7Cm15ICRIaXN0b3J5SXRlbSA9IHBvcCBASGlzdG9yeUxpbmVzOwokU2VsZi0+SXMoCiAgICAkSGlzdG9yeUl0ZW0tPntIaXN0b3J5VHlwZX0sCiAgICAnVGl0bGVVcGRhdGUnLAogICAgIlRpY2tldFRpdGxlVXBkYXRlIC0gZm91bmQgSGlzdG9yeUl0ZW0iLAopOwoKJFNlbGYtPklzKAogICAgJEhpc3RvcnlJdGVtLT57TmFtZX0sCiAgICAnJSVTb21lIFRpY2tldF9UaXRsZSUlVmVyeSBsb25nIHRpdGxlIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMuLi4nLAogICAgIlRpY2tldFRpdGxlVXBkYXRlIC0gRm91bmQgbmV3IHRpdGxlIiwKKTsKCiMgZ2V0IHVwZGF0ZWQgdGlja2V0IGRhdGEKJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBzYXZlIGN1cnJlbnQgY2hhbmdlX3RpbWUKJENoYW5nZVRpbWUgPSAkVGlja2V0RGF0YXtDaGFuZ2VkfTsKCiMgd2FpdCA1IHNlY29uZHMKRml4ZWRUaW1lQWRkU2Vjb25kcyg1KTsKCiMgc2V0IHVubG9jayB0aW1lb3V0Cm15ICRVbmxvY2tUaW1lb3V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0VW5sb2NrVGltZW91dFVwZGF0ZSgKICAgIFVubG9ja1RpbWVvdXQgPT4gJERhdGVUaW1lT2JqZWN0LT5Ub0Vwb2NoKCkgKyAxMDAwMCwKICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVW5sb2NrVGltZW91dCwKICAgICdUaWNrZXRVbmxvY2tUaW1lb3V0VXBkYXRlKCknLAopOwoKIyBnZXQgdXBkYXRlZCB0aWNrZXQgZGF0YQolVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIGNvbXBhcmUgY3VycmVudCBjaGFuZ2VfdGltZSB3aXRoIG9sZCBvbmUKJFNlbGYtPklzTm90KAogICAgJENoYW5nZVRpbWUsCiAgICAkVGlja2V0RGF0YXtDaGFuZ2VkfSwKICAgICdDaGFuZ2VfdGltZSB1cGRhdGVkIGluIFRpY2tldFVubG9ja1RpbWVvdXRVcGRhdGUoKScsCik7CgojIHNhdmUgY3VycmVudCBjaGFuZ2VfdGltZQokQ2hhbmdlVGltZSA9ICRUaWNrZXREYXRhe0NoYW5nZWR9OwoKIyBzYXZlIGN1cnJlbnQgcXVldWUKbXkgJEN1cnJlbnRRdWV1ZUlEID0gJFRpY2tldERhdGF7UXVldWVJRH07CgojIHdhaXQgNSBzZWNvbmRzCkZpeGVkVGltZUFkZFNlY29uZHMoNSk7CgpteSAkTmV3UXVldWUgPSAkQ3VycmVudFF1ZXVlSUQgIT0gMSA/IDEgOiAyOwoKIyBzZXQgcXVldWUKbXkgJFRpY2tldFF1ZXVlU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UXVldWVTZXQoCiAgICBRdWV1ZUlEICA9PiAkTmV3UXVldWUsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0UXVldWVTZXQsCiAgICAnVGlja2V0UXVldWVTZXQoKScsCik7CgojIGdldCB1cGRhdGVkIHRpY2tldCBkYXRhCiVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgY29tcGFyZSBjdXJyZW50IGNoYW5nZV90aW1lIHdpdGggb2xkIG9uZQokU2VsZi0+SXNOb3QoCiAgICAkQ2hhbmdlVGltZSwKICAgICRUaWNrZXREYXRhe0NoYW5nZWR9LAogICAgJ0NoYW5nZV90aW1lIHVwZGF0ZWQgaW4gVGlja2V0UXVldWVTZXQoKScsCik7CgojIHJlc3RvcmUgcXVldWUKJFRpY2tldFF1ZXVlU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UXVldWVTZXQoCiAgICBRdWV1ZUlEICA9PiAkQ3VycmVudFF1ZXVlSUQsCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBzYXZlIGN1cnJlbnQgY2hhbmdlX3RpbWUKJENoYW5nZVRpbWUgPSAkVGlja2V0RGF0YXtDaGFuZ2VkfTsKCiMgc2F2ZSBjdXJyZW50IHR5cGUKbXkgJEN1cnJlbnRUaWNrZXRUeXBlID0gJFRpY2tldERhdGF7VHlwZUlEfTsKCiMgd2FpdCA1IHNlY29uZHMKRml4ZWRUaW1lQWRkU2Vjb25kcyg1KTsKCiMgY3JlYXRlIGEgdGVzdCB0eXBlCm15ICRUeXBlSUQgPSAkVHlwZU9iamVjdC0+VHlwZUFkZCgKICAgIE5hbWUgICAgPT4gJ1R5cGUnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKKTsKCiMgc2V0IHR5cGUKbXkgJFRpY2tldFR5cGVTZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRUeXBlU2V0KAogICAgVHlwZUlEICAgPT4gJFR5cGVJRCwKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRUeXBlU2V0LAogICAgJ1RpY2tldFR5cGVTZXQoKScsCik7CgojIGdldCB1cGRhdGVkIHRpY2tldCBkYXRhCiVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgY29tcGFyZSBjdXJyZW50IGNoYW5nZV90aW1lIHdpdGggb2xkIG9uZQokU2VsZi0+SXNOb3QoCiAgICAkQ2hhbmdlVGltZSwKICAgICRUaWNrZXREYXRhe0NoYW5nZWR9LAogICAgJ0NoYW5nZV90aW1lIHVwZGF0ZWQgaW4gVGlja2V0VHlwZVNldCgpJywKKTsKCiMgcmVzdG9yZSB0eXBlCiRUaWNrZXRUeXBlU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0VHlwZVNldCgKICAgIFR5cGVJRCAgID0+ICRDdXJyZW50VGlja2V0VHlwZSwKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIHNldCBhcyBpbnZhbGlkIHRoZSB0ZXN0IHR5cGUKJFR5cGVPYmplY3QtPlR5cGVVcGRhdGUoCiAgICBJRCAgICAgID0+ICRUeXBlSUQsCiAgICBOYW1lICAgID0+ICdUeXBlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBWYWxpZElEID0+IDIsCiAgICBVc2VySUQgID0+IDEsCik7CgojIC0tLQojIElUU01Db3JlCiMgLS0tCgojIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCm15ICRTZXJ2aWNlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCik7CgojIGJ1aWxkIGEgbG9va3VwIGhhc2gKbXkgJVNlcnZpY2VUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXskU2VydmljZVR5cGVMaXN0fTsKCiMgZ2V0IHRoZSBsaXN0IG9mIHNsYSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZwpteSAkU0xBVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKKTsKCiMgYnVpbGQgYSBsb29rdXAgaGFzaApteSAlU0xBVHlwZU5hbWUySUQgPSByZXZlcnNlICV7JFNMQVR5cGVMaXN0fTsKCiMgLS0tCiMgY3JlYXRlIGEgdGVzdCBzZXJ2aWNlCm15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gJ1NlcnZpY2UnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIENvbW1lbnQgPT4gJ1VuaXQgVGVzdCBDb21tZW50JywKICAgIFVzZXJJRCAgPT4gMSwKCiAgICAjIC0tLQogICAgIyBJVFNNQ29yZQogICAgIyAtLS0KICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAjIC0tLQopOwoKIyB3YWl0IDEgc2Vjb25kcwpGaXhlZFRpbWVBZGRTZWNvbmRzKDEpOwoKIyBzZXQgdHlwZQpteSAkVGlja2V0U2VydmljZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlcnZpY2VTZXQoCiAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VJRCwKICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldFNlcnZpY2VTZXQsCiAgICAnVGlja2V0U2VydmljZVNldCgpJywKKTsKCiMgZ2V0IHVwZGF0ZWQgdGlja2V0IGRhdGEKJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyBjb21wYXJlIGN1cnJlbnQgY2hhbmdlX3RpbWUgd2l0aCBvbGQgb25lCiRTZWxmLT5Jc05vdCgKICAgICRDaGFuZ2VUaW1lLAogICAgJFRpY2tldERhdGF7Q2hhbmdlZH0sCiAgICAnQ2hhbmdlX3RpbWUgdXBkYXRlZCBpbiBUaWNrZXRTZXJ2aWNlU2V0KCknLAopOwoKIyBzZXQgYXMgaW52YWxpZCB0aGUgdGVzdCBzZXJ2aWNlCiRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlVXBkYXRlKAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICBOYW1lICAgICAgPT4gJ1NlcnZpY2UnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgIFZhbGlkSUQgICA9PiAyLAogICAgVXNlcklEICAgID0+IDEsCik7CgojIHNhdmUgY3VycmVudCBjaGFuZ2VfdGltZQokQ2hhbmdlVGltZSA9ICRUaWNrZXREYXRhe0NoYW5nZWR9OwoKIyB3YWl0IDUgc2Vjb25kcwpGaXhlZFRpbWVBZGRTZWNvbmRzKDUpOwoKbXkgJFRpY2tldEVzY2FsYXRpb25JbmRleEJ1aWxkID0gJFRpY2tldE9iamVjdC0+VGlja2V0RXNjYWxhdGlvbkluZGV4QnVpbGQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0RXNjYWxhdGlvbkluZGV4QnVpbGQsCiAgICAnVGlja2V0RXNjYWxhdGlvbkluZGV4QnVpbGQoKScsCik7CgojIGdldCB1cGRhdGVkIHRpY2tldCBkYXRhCiVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgY29tcGFyZSBjdXJyZW50IGNoYW5nZV90aW1lIHdpdGggb2xkIG9uZSwgdGhlIGNoYW5nZSB0aW1lIHNob3VsZCBzdGF5IHRoZSBzYW1lCiRTZWxmLT5JcygKICAgICRDaGFuZ2VUaW1lLAogICAgJFRpY2tldERhdGF7Q2hhbmdlZH0sCiAgICAnQ2hhbmdlX3RpbWUgaXMgbm90IHVwZGF0ZWQgaW4gVGlja2V0RXNjYWxhdGlvbkluZGV4QnVpbGQoKScsCik7CgojIHNhdmUgY3VycmVudCBjaGFuZ2VfdGltZQokQ2hhbmdlVGltZSA9ICRUaWNrZXREYXRhe0NoYW5nZWR9OwoKIyBjcmVhdGUgYSB0ZXN0IFNMQQpteSAkU0xBSUQgPSAkU0xBT2JqZWN0LT5TTEFBZGQoCiAgICBOYW1lICAgID0+ICdTTEEnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgIFZhbGlkSUQgPT4gMSwKICAgIENvbW1lbnQgPT4gJ1VuaXQgVGVzdCBDb21tZW50JywKICAgIFVzZXJJRCAgPT4gMSwKCiAgICAjIC0tLQogICAgIyBJVFNNQ29yZQogICAgIyAtLS0KICAgIFR5cGVJRCA9PiAkU0xBVHlwZU5hbWUySUR7T3RoZXJ9LAoKICAgICMgLS0tCik7CgojIHdhaXQgNSBzZWNvbmRzCkZpeGVkVGltZUFkZFNlY29uZHMoNSk7CgojIHNldCBTTEEKbXkgJFRpY2tldFNMQVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNMQVNldCgKICAgIFNMQUlEICAgID0+ICRTTEFJRCwKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRTTEFTZXQsCiAgICAnVGlja2V0U0xBU2V0KCknLAopOwoKIyBnZXQgdXBkYXRlZCB0aWNrZXQgZGF0YQolVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIGNvbXBhcmUgY3VycmVudCBjaGFuZ2VfdGltZSB3aXRoIG9sZCBvbmUKJFNlbGYtPklzTm90KAogICAgJENoYW5nZVRpbWUsCiAgICAkVGlja2V0RGF0YXtDaGFuZ2VkfSwKICAgICdDaGFuZ2VfdGltZSB1cGRhdGVkIGluIFRpY2tldFNMQVNldCgpJywKKTsKCiMgc2V0IGFzIGludmFsaWQgdGhlIHRlc3QgU0xBCiRTTEFPYmplY3QtPlNMQVVwZGF0ZSgKICAgIFNMQUlEICAgPT4gJFNMQUlELAogICAgTmFtZSAgICA9PiAnU0xBJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICBWYWxpZElEID0+IDEsCiAgICBDb21tZW50ID0+ICdVbml0IFRlc3QgQ29tbWVudCcsCiAgICBVc2VySUQgID0+IDEsCik7CgpteSAkVGlja2V0TG9jayA9ICRUaWNrZXRPYmplY3QtPkxvY2tTZXQoCiAgICBMb2NrICAgICAgICAgICAgICAgPT4gJ2xvY2snLAogICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAxLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldExvY2ssCiAgICAnTG9ja1NldCgpJywKKTsKCiMgVGVzdCBDcmVhdGVkVXNlcklEcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgPT4gMTAwLAogICAgQ3JlYXRlZFVzZXJJRHMgPT4gWyAxLCA0NTUsIDMyIF0sCiAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3JlYXRlZFVzZXJJRHNbQXJyYXldKScsCik7CgojIFRlc3QgQ3JlYXRlZFByaW9yaXRpZXMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgID0+IDEwMCwKICAgIENyZWF0ZWRQcmlvcml0aWVzID0+IFsgJzIgbG93JywgJzMgbm9ybWFsJyBdLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkNyZWF0ZWRQcmlvcml0aWVzW0FycmF5XSknLAopOwoKIyBUZXN0IENyZWF0ZWRQcmlvcml0eUlEcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICA9PiAxMDAsCiAgICBDcmVhdGVkUHJpb3JpdHlJRHMgPT4gWyAyLCAzIF0sCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDcmVhdGVkUHJpb3JpdHlJRHNbQXJyYXldKScsCik7CgojIFRlc3QgQ3JlYXRlZFN0YXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgID0+IDEwMCwKICAgIENyZWF0ZWRTdGF0ZXMgPT4gWydjbG9zZWQgc3VjY2Vzc2Z1bCddLAogICAgVXNlcklEICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpDcmVhdGVkU3RhdGVzW0FycmF5XSknLAopOwoKIyBUZXN0IENyZWF0ZWRTdGF0ZUlEcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICA9PiAxMDAsCiAgICBDcmVhdGVkU3RhdGVJRHMgPT4gWzJdLAogICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6Q3JlYXRlZFN0YXRlSURzW0FycmF5XSknLAopOwoKIyBUZXN0IENyZWF0ZWRRdWV1ZXMKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICA9PiAxMDAsCiAgICBDcmVhdGVkUXVldWVzID0+IFsnUmF3J10sCiAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkNyZWF0ZWRRdWV1ZXNbQXJyYXldKScsCik7CgojIFRlc3QgQ3JlYXRlZFF1ZXVlSURzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgID0+IDEwMCwKICAgIENyZWF0ZWRRdWV1ZUlEcyA9PiBbIDIsIDMgXSwKICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkNyZWF0ZWRRdWV1ZUlEc1tBcnJheV0pJywKKTsKCiMgVGVzdCBUaWNrZXRDcmVhdGVUaW1lTmV3ZXJNaW51dGVzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2MCwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0Q3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJNaW51dGVzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyTWludXRlcyA9PiA2MCwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyTWludXRlcyA9PiA2MCknLAopOwoKIyBUZXN0IEFydGljbGVDcmVhdGVUaW1lTmV3ZXJNaW51dGVzCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBBcnRpY2xlQ3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2MCwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICAgICA9PiAncncnLAopOwokU2VsZi0+VHJ1ZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpBcnRpY2xlQ3JlYXRlVGltZU5ld2VyTWludXRlcyA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENyZWF0ZU9sZGVyTWludXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldENyZWF0ZVRpbWVPbGRlck1pbnV0ZXMgPT4gNjAsCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRDcmVhdGVUaW1lT2xkZXJNaW51dGVzID0+IDYwKScsCik7CgojIFRlc3QgVGlja2V0TGFzdENoYW5nZU9sZGVyTWludXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TGFzdENoYW5nZVRpbWVPbGRlck1pbnV0ZXMgPT4gNjAsCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldExhc3RDaGFuZ2VUaW1lT2xkZXJNaW51dGVzID0+IDYwKScsCik7CgojIFRlc3QgQXJ0aWNsZUNyZWF0ZU9sZGVyTWludXRlcwolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgQXJ0aWNsZUNyZWF0ZVRpbWVPbGRlck1pbnV0ZXMgPT4gNjAsCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkFydGljbGVDcmVhdGVUaW1lT2xkZXJNaW51dGVzID0+IDYwKScsCik7CgojIFRlc3QgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZQpteSAkVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwokVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZS0+U3VidHJhY3QoIEhvdXJzID0+IDEgKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAkVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZS0+VG9TdHJpbmcoKSwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6VGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJEYXRlCm15ICRUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyRGF0ZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwokVGlja2V0TGFzdENoYW5nZVRpbWVOZXdlckRhdGUtPlN1YnRyYWN0KCBIb3VycyA9PiAxICk7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TGFzdENoYW5nZVRpbWVOZXdlckRhdGUgPT4gJFRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJEYXRlLT5Ub1N0cmluZygpLAogICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJEYXRlID0+IDYwKScsCik7CgojIFRlc3QgQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUKbXkgJEFydGljbGVDcmVhdGVUaW1lTmV3ZXJEYXRlID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiRBcnRpY2xlQ3JlYXRlVGltZU5ld2VyRGF0ZS0+U3VidHJhY3QoIEhvdXJzID0+IDEgKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBBcnRpY2xlQ3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAkQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUtPlRvU3RyaW5nKCksCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0SURzeyRUaWNrZXRJRH0sCiAgICAnVGlja2V0U2VhcmNoKCkgKEhBU0g6QXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUgPT4gNjApJywKKTsKCiMgVGVzdCBUaWNrZXRMYXN0Q2hhbmdlT2xkZXJEYXRlCm15ICRUaWNrZXRMYXN0Q2hhbmdlT2xkZXJEYXRlID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiRUaWNrZXRMYXN0Q2hhbmdlT2xkZXJEYXRlLT5TdWJ0cmFjdCggSG91cnMgPT4gMSApOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldExhc3RDaGFuZ2VUaW1lT2xkZXJEYXRlID0+ICRUaWNrZXRMYXN0Q2hhbmdlT2xkZXJEYXRlLT5Ub1N0cmluZygpLAogICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRMYXN0Q2hhbmdlVGltZU9sZGVyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENyZWF0ZU9sZGVyRGF0ZQpteSAkVGlja2V0Q3JlYXRlT2xkZXJEYXRlID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiRUaWNrZXRDcmVhdGVPbGRlckRhdGUtPlN1YnRyYWN0KCBIb3VycyA9PiAxICk7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIFRpY2tldENyZWF0ZVRpbWVPbGRlckRhdGUgPT4gJFRpY2tldENyZWF0ZU9sZGVyRGF0ZS0+VG9TdHJpbmcoKSwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldENyZWF0ZVRpbWVPbGRlckRhdGUgPT4gNjApJywKKTsKCiMgVGVzdCBBcnRpY2xlQ3JlYXRlT2xkZXJEYXRlCm15ICRBcnRpY2xlQ3JlYXRlT2xkZXJEYXRlID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiRBcnRpY2xlQ3JlYXRlT2xkZXJEYXRlLT5TdWJ0cmFjdCggSG91cnMgPT4gMSApOwoKJVRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgID0+IDEwMCwKICAgIEFydGljbGVDcmVhdGVUaW1lT2xkZXJEYXRlID0+ICRBcnRpY2xlQ3JlYXRlT2xkZXJEYXRlLT5Ub1N0cmluZygpLAogICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpBcnRpY2xlQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENsb3NlVGltZU5ld2VyRGF0ZQpteSAkVGlja2V0Q2xvc2VUaW1lTmV3ZXJEYXRlID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiRUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUtPlN1YnRyYWN0KCBIb3VycyA9PiAxICk7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgPT4gJFRpY2tldENsb3NlVGltZU5ld2VyRGF0ZS0+VG9TdHJpbmcoKSwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5UcnVlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldENsb3NlVGltZU5ld2VyRGF0ZSA9PiA2MCknLAopOwoKIyBUZXN0IFRpY2tldENsb3NlT2xkZXJEYXRlCm15ICRUaWNrZXRDbG9zZU9sZGVyRGF0ZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwokVGlja2V0Q2xvc2VPbGRlckRhdGUtPlN1YnRyYWN0KCBIb3VycyA9PiAxICk7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRDbG9zZVRpbWVPbGRlckRhdGUgPT4gJFRpY2tldENsb3NlT2xkZXJEYXRlLT5Ub1N0cmluZygpLAogICAgVXNlcklEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldENsb3NlVGltZU9sZGVyRGF0ZSA9PiA2MCknLAopOwoKbXkgJVRpY2tldDIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoIFRpY2tldElEID0+ICRUaWNrZXRJRCApOwokU2VsZi0+SXMoCiAgICAkVGlja2V0MntUaXRsZX0sCiAgICAnVmVyeSBsb25nIHRpdGxlIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5JwogICAgICAgIC4gJzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODknCiAgICAgICAgLiAnMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcsCiAgICAnVGlja2V0R2V0KCkgKFRpdGxlKScsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXQye1F1ZXVlfSwKICAgICdKdW5rJywKICAgICdUaWNrZXRHZXQoKSAoUXVldWUpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldDJ7UHJpb3JpdHl9LAogICAgJzIgbG93JywKICAgICdUaWNrZXRHZXQoKSAoUHJpb3JpdHkpJywKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldDJ7U3RhdGV9LAogICAgJ29wZW4nLAogICAgJ1RpY2tldEdldCgpIChTdGF0ZSknLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0MntMb2NrfSwKICAgICdsb2NrJywKICAgICdUaWNrZXRHZXQoKSAoTG9jayknLAopOwoKbXkgQE1vdmVRdWV1ZUxpc3QgPSAkVGlja2V0T2JqZWN0LT5Nb3ZlUXVldWVMaXN0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVHlwZSAgICAgPT4gJ05hbWUnLAopOwoKJFNlbGYtPklzKAogICAgJE1vdmVRdWV1ZUxpc3RbMF0sCiAgICAnUmF3JywKICAgICdNb3ZlUXVldWVMaXN0KCkgKFJhdyknLAopOwokU2VsZi0+SXMoCiAgICAkTW92ZVF1ZXVlTGlzdFstMV0sCiAgICAnSnVuaycsCiAgICAnTW92ZVF1ZXVlTGlzdCgpIChKdW5rKScsCik7CgpteSAkVGlja2V0QWNjb3VudFRpbWUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2NvdW50VGltZSgKICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgIFRpbWVVbml0ICA9PiAnNC41JywKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0QWNjb3VudFRpbWUsCiAgICAnVGlja2V0QWNjb3VudFRpbWUoKSAxJywKKTsKCm15ICRUaWNrZXRBY2NvdW50VGltZTIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2NvdW50VGltZSgKICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgIFRpbWVVbml0ICA9PiAnNDEyMy41MycsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldEFjY291bnRUaW1lMiwKICAgICdUaWNrZXRBY2NvdW50VGltZSgpIDInLAopOwoKbXkgJFRpY2tldEFjY291bnRUaW1lMyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRUaW1lKAogICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgVGltZVVuaXQgID0+ICc0LDUzJywKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICAkVGlja2V0QWNjb3VudFRpbWUzLAogICAgJ1RpY2tldEFjY291bnRUaW1lKCkgMycsCik7CgpteSAkQWNjb3VudGVkVGltZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRlZFRpbWVHZXQoIFRpY2tldElEID0+ICRUaWNrZXRJRCApOwoKJFNlbGYtPklzKAogICAgJEFjY291bnRlZFRpbWUsCiAgICA0MTMyLjU2LAogICAgJ1RpY2tldEFjY291bnRlZFRpbWVHZXQoKScsCik7CgpteSAkQWNjb3VudGVkVGltZTIgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUFjY291bnRlZFRpbWVHZXQoCiAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKKTsKCiRTZWxmLT5JcygKICAgICRBY2NvdW50ZWRUaW1lMiwKICAgIDQxMzIuNTYsCiAgICAnQXJ0aWNsZUFjY291bnRlZFRpbWVHZXQoKScKKTsKCm15ICRIaXN0b3J5VGlja2V0U3RhdHVzR2V0U3RhcnRPYmogICAgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKbXkgJEhpc3RvcnlUaWNrZXRTdGF0dXNHZXRTdGFydFZhbHVlcyA9ICRIaXN0b3J5VGlja2V0U3RhdHVzR2V0U3RhcnRPYmotPkdldCgpOwoKbXkgJEhpc3RvcnlUaWNrZXRTdGF0dXNHZXRTdG9wT2JqID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiRIaXN0b3J5VGlja2V0U3RhdHVzR2V0U3RvcE9iai0+U3VidHJhY3QoIERheXMgPT4gMSApOwpteSAkSGlzdG9yeVRpY2tldFN0YXR1c0dldFN0b3BWYWx1ZXMgPSAkSGlzdG9yeVRpY2tldFN0YXR1c0dldFN0b3BPYmotPkdldCgpOwoKbXkgJVRpY2tldFN0YXR1cyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoCiAgICBTdG9wWWVhciAgID0+ICRIaXN0b3J5VGlja2V0U3RhdHVzR2V0U3RhcnRWYWx1ZXMtPntZZWFyfSwKICAgIFN0b3BNb250aCAgPT4gJEhpc3RvcnlUaWNrZXRTdGF0dXNHZXRTdGFydFZhbHVlcy0+e01vbnRofSwKICAgIFN0b3BEYXkgICAgPT4gJEhpc3RvcnlUaWNrZXRTdGF0dXNHZXRTdGFydFZhbHVlcy0+e0RheX0sCiAgICBTdGFydFllYXIgID0+ICRIaXN0b3J5VGlja2V0U3RhdHVzR2V0U3RvcFZhbHVlcy0+e1llYXJ9LAogICAgU3RhcnRNb250aCA9PiAkSGlzdG9yeVRpY2tldFN0YXR1c0dldFN0b3BWYWx1ZXMtPntNb250aH0sCiAgICBTdGFydERheSAgID0+ICRIaXN0b3J5VGlja2V0U3RhdHVzR2V0U3RvcFZhbHVlcy0+e0RheX0sCik7CgppZiAoICRUaWNrZXRTdGF0dXN7JFRpY2tldElEfSApIHsKICAgIG15ICVUaWNrZXRIaXN0b3J5ID0gJXsgJFRpY2tldFN0YXR1c3skVGlja2V0SUR9IH07CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFRpY2tldEhpc3Rvcnl7VGlja2V0TnVtYmVyfSwKICAgICAgICAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgIkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKSAoVGlja2V0TnVtYmVyKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e1RpY2tldElEfSwKICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgIkhpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKSAoVGlja2V0SUQpIiwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFRpY2tldEhpc3Rvcnl7Q3JlYXRlVXNlcklEfSwKICAgICAgICAxLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKENyZWF0ZVVzZXJJRCkiLAogICAgKTsKICAgICRTZWxmLT5JcygKICAgICAgICAkVGlja2V0SGlzdG9yeXtRdWV1ZX0sCiAgICAgICAgJ0p1bmsnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKFF1ZXVlKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e0NyZWF0ZVF1ZXVlfSwKICAgICAgICAnUmF3JywKICAgICAgICAiSGlzdG9yeVRpY2tldFN0YXR1c0dldCgpIChDcmVhdGVRdWV1ZSkiLAogICAgKTsKICAgICRTZWxmLT5JcygKICAgICAgICAkVGlja2V0SGlzdG9yeXtTdGF0ZX0sCiAgICAgICAgJ29wZW4nLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKFN0YXRlKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e0NyZWF0ZVN0YXRlfSwKICAgICAgICAnY2xvc2VkIHN1Y2Nlc3NmdWwnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKENyZWF0ZVN0YXRlKSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e1ByaW9yaXR5fSwKICAgICAgICAnMiBsb3cnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKFByaW9yaXR5KSIsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRUaWNrZXRIaXN0b3J5e0NyZWF0ZVByaW9yaXR5fSwKICAgICAgICAnMyBub3JtYWwnLAogICAgICAgICJIaXN0b3J5VGlja2V0U3RhdHVzR2V0KCkgKENyZWF0ZVByaW9yaXR5KSIsCiAgICApOwoKfQplbHNlIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDAsCiAgICAgICAgJ0hpc3RvcnlUaWNrZXRTdGF0dXNHZXQoKScsCiAgICApOwp9CgpteSAkRGVsZXRlID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkRGVsZXRlLAogICAgJ1RpY2tldERlbGV0ZSgpJywKKTsKCm15ICREZWxldGVDaGVjayA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkRGVsZXRlQ2hlY2ssCiAgICAnVGlja2V0RGVsZXRlKCkgd29ya2VkJywKKTsKCm15ICRDdXN0b21lck5vID0gJ0N1c3RvbWVyTm8nIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiMgdGlja2V0IHNlYXJjaCBzb3J0L29yZGVyIHRlc3QKbXkgJFRpY2tldElEU29ydE9yZGVyMSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnU29tZSBUaWNrZXRfVGl0bGUgLSB0aWNrZXQgc29ydC9vcmRlciBieSB0ZXN0cycsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVyTm8gICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3RvYm8ub3JnJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgpteSAlVGlja2V0Q3JlYXRlZCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRFNvcnRPcmRlcjEsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyB3YWl0IDIgc2Vjb25kcwpGaXhlZFRpbWVBZGRTZWNvbmRzKDIpOwoKbXkgJFRpY2tldElEU29ydE9yZGVyMiA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnU29tZSBUaWNrZXRfVGl0bGUgLSB0aWNrZXQgc29ydC9vcmRlciBieSB0ZXN0czInLAogICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lck5vICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90b2JvLm9yZycsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyB3YWl0IDIgc2Vjb25kcwpGaXhlZFRpbWVBZGRTZWNvbmRzKDIpOwoKbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdGF0ZVNldCgKICAgIFN0YXRlICAgID0+ICdvcGVuJywKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRFNvcnRPcmRlcjEsCiAgICBVc2VySUQgICA9PiAxLAopOwoKbXkgJVRpY2tldFVwZGF0ZWQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SURTb3J0T3JkZXIxLAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5Jc05vdCgKICAgICRUaWNrZXRDcmVhdGVke0NoYW5nZWR9LAogICAgJFRpY2tldFVwZGF0ZWR7Q2hhbmdlZH0sCiAgICAnVGlja2V0VXBkYXRlZCBmb3Igc29ydCAtIGNoYW5nZSB0aW1lIHdhcyB1cGRhdGVkJwogICAgICAgIC4gIiAkVGlja2V0Q3JlYXRlZHtDaGFuZ2VkfSBuZSAkVGlja2V0VXBkYXRlZHtDaGFuZ2VkfSIsCik7CgojIGZpbmQgbmV3ZXN0IHRpY2tldCBieSBwcmlvcml0eSwgYWdlCm15IEBUaWNrZXRJRHNTb3J0T3JkZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0FSUkFZJywKICAgIFRpdGxlICAgICAgICA9PiAnJXNvcnQvb3JkZXIgYnkgdGVzdCUnLAogICAgUXVldWVzICAgICAgID0+IFsnUmF3J10sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90b2JvLm9yZycsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnRG93bicsICAgICAnVXAnIF0sCiAgICBTb3J0QnkgICAgICAgPT4gWyAnUHJpb3JpdHknLCAnQWdlJyBdLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBMaW1pdCAgICAgICAgPT4gMSwKKTsKCiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIxLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKFByaW9yaXR5IChEb3duKSwgQWdlIChVcCkpJywKKTsKCiMgZmluZCBvbGRlc3QgdGlja2V0IGJ5IHByaW9yaXR5LCBhZ2UKQFRpY2tldElEc1NvcnRPcmRlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnQVJSQVknLAogICAgVGl0bGUgICAgICAgID0+ICclc29ydC9vcmRlciBieSB0ZXN0JScsCiAgICBRdWV1ZXMgICAgICAgPT4gWydSYXcnXSwKICAgIEN1c3RvbWVySUQgICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3RvYm8ub3JnJywKICAgIE9yZGVyQnkgICAgICA9PiBbICdEb3duJywgICAgICdEb3duJyBdLAogICAgU29ydEJ5ICAgICAgID0+IFsgJ1ByaW9yaXR5JywgJ0FnZScgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIyLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKFByaW9yaXR5IChEb3duKSwgQWdlIChEb3duKSknLAopOwoKIyBmaW5kIGxhc3QgbW9kaWZpZWQgdGlja2V0IGJ5IGNoYW5nZWQgdGltZQpAVGlja2V0SURzU29ydE9yZGVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdBUlJBWScsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdG9iby5vcmcnLAogICAgT3JkZXJCeSAgICAgID0+IFsgJ0Rvd24nLCBdLAogICAgU29ydEJ5ICAgICAgID0+IFsnQ2hhbmdlZCddLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBMaW1pdCAgICAgICAgPT4gMSwKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldElEc1NvcnRPcmRlclswXSwKICAgICRUaWNrZXRJRFNvcnRPcmRlcjEsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgc29ydC9vcmRlciBieSAoQ2hhbmdlZCAoRG93bikpJwogICAgICAgIC4gIiRUaWNrZXRJRHNTb3J0T3JkZXJbMF0gaW5zdGVhZCBvZiAkVGlja2V0SURTb3J0T3JkZXIxIiwKKTsKCiMgZmluZCBvbGRlc3QgbW9kaWZpZWQgYnkgY2hhbmdlZCB0aW1lCkBUaWNrZXRJRHNTb3J0T3JkZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0FSUkFZJywKICAgIFRpdGxlICAgICAgICA9PiAnJXNvcnQvb3JkZXIgYnkgdGVzdCUnLAogICAgUXVldWVzICAgICAgID0+IFsnUmF3J10sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90b2JvLm9yZycsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnVXAnLCBdLAogICAgU29ydEJ5ICAgICAgID0+IFsgJ0NoYW5nZWQnLCBdLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBMaW1pdCAgICAgICAgPT4gMSwKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldElEc1NvcnRPcmRlclswXSwKICAgICRUaWNrZXRJRFNvcnRPcmRlcjIsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgc29ydC9vcmRlciBieSAoQ2hhbmdlZCAoVXApKSknCiAgICAgICAgLiAiJFRpY2tldElEc1NvcnRPcmRlclswXSAgaW5zdGVhZCBvZiAkVGlja2V0SURTb3J0T3JkZXIyIiwKKTsKCm15ICRUaWNrZXRJRFNvcnRPcmRlcjMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0X1RpdGxlIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgdGVzdHMyJywKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnNCBoaWdoJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVyTm8gICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3RvYm8ub3JnJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgojIHdhaXQgMiBzZWNvbmRzCkZpeGVkVGltZUFkZFNlY29uZHMoMik7CgpteSAkVGlja2V0SURTb3J0T3JkZXI0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldF9UaXRsZSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IHRlc3RzMicsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzQgaGlnaCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lck5vICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90b2JvLm9yZycsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyB3YWl0IDIgc2Vjb25kcwpGaXhlZFRpbWVBZGRTZWNvbmRzKDIpOwoKbXkgJFRpY2tldElEU29ydE9yZGVyNSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFRpdGxlICAgICAgICA9PiAnU29tZSBUaWNrZXRfVGl0bGUgLSB0aWNrZXQgc29ydC9vcmRlciBieSB0ZXN0czUgKHdpdGggb3RoZXIgcXVldWUpJywKICAgIFF1ZXVlICAgICAgICA9PiAnTWlzYycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVyTm8gICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3RvYm8ub3JnJywKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgojIGZpbmQgb2xkZXN0IHRpY2tldCBieSBwcmlvcml0eSwgYWdlCkBUaWNrZXRJRHNTb3J0T3JkZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0FSUkFZJywKICAgIFRpdGxlICAgICAgICA9PiAnJXNvcnQvb3JkZXIgYnkgdGVzdCUnLAogICAgUXVldWVzICAgICAgID0+IFsnUmF3J10sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90b2JvLm9yZycsCiAgICBPcmRlckJ5ICAgICAgPT4gWyAnRG93bicsICAgICAnRG93bicgXSwKICAgIFNvcnRCeSAgICAgICA9PiBbICdQcmlvcml0eScsICdBZ2UnIF0sCiAgICBVc2VySUQgICAgICAgPT4gMSwKICAgIExpbWl0ICAgICAgICA9PiAxLAopOwokU2VsZi0+SXMoCiAgICAkVGlja2V0SURzU29ydE9yZGVyWzBdLAogICAgJFRpY2tldElEU29ydE9yZGVyNCwKICAgICdUaWNrZXRUaWNrZXRTZWFyY2goKSAtIHRpY2tldCBzb3J0L29yZGVyIGJ5IChQcmlvcml0eSAoRG93biksIEFnZSAoRG93bikpJywKKTsKCiMgZmluZCBvbGRlc3QgdGlja2V0IGJ5IHByaW9yaXR5LCBhZ2UKQFRpY2tldElEc1NvcnRPcmRlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnQVJSQVknLAogICAgVGl0bGUgICAgICAgID0+ICclc29ydC9vcmRlciBieSB0ZXN0JScsCiAgICBRdWV1ZXMgICAgICAgPT4gWydSYXcnXSwKICAgIEN1c3RvbWVySUQgICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3RvYm8ub3JnJywKICAgIE9yZGVyQnkgICAgICA9PiBbICdVcCcsICAgICAgICdEb3duJyBdLAogICAgU29ydEJ5ICAgICAgID0+IFsgJ1ByaW9yaXR5JywgJ0FnZScgXSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgTGltaXQgICAgICAgID0+IDEsCik7CiRTZWxmLT5JcygKICAgICRUaWNrZXRJRHNTb3J0T3JkZXJbMF0sCiAgICAkVGlja2V0SURTb3J0T3JkZXIyLAogICAgJ1RpY2tldFRpY2tldFNlYXJjaCgpIC0gdGlja2V0IHNvcnQvb3JkZXIgYnkgKFByaW9yaXR5IChVcCksIEFnZSAoRG93bikpJywKKTsKCiMgZmluZCBuZXdlc3QgdGlja2V0CkBUaWNrZXRJRHNTb3J0T3JkZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgPT4gJ0FSUkFZJywKICAgIFRpdGxlICAgICAgICA9PiAnJXNvcnQvb3JkZXIgYnkgdGVzdCUnLAogICAgUXVldWVzICAgICAgID0+IFsnUmF3J10sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90b2JvLm9yZycsCiAgICBPcmRlckJ5ICAgICAgPT4gJ0Rvd24nLAogICAgU29ydEJ5ICAgICAgID0+ICdBZ2UnLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBMaW1pdCAgICAgICAgPT4gMSwKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldElEc1NvcnRPcmRlclswXSwKICAgICRUaWNrZXRJRFNvcnRPcmRlcjQsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgc29ydC9vcmRlciBieSAoQWdlIChEb3duKSknLAopOwoKIyBmaW5kIG9sZGVzdCB0aWNrZXQKQFRpY2tldElEc1NvcnRPcmRlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnQVJSQVknLAogICAgVGl0bGUgICAgICAgID0+ICclc29ydC9vcmRlciBieSB0ZXN0JScsCiAgICBRdWV1ZXMgICAgICAgPT4gWydSYXcnXSwKICAgIEN1c3RvbWVySUQgICA9PiAkQ3VzdG9tZXJObywKICAgIEN1c3RvbWVyVXNlciA9PiAndW5pdHRlc3RAb3RvYm8ub3JnJywKICAgIE9yZGVyQnkgICAgICA9PiAnVXAnLAogICAgU29ydEJ5ICAgICAgID0+ICdBZ2UnLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBMaW1pdCAgICAgICAgPT4gMSwKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldElEc1NvcnRPcmRlclswXSwKICAgICRUaWNrZXRJRFNvcnRPcmRlcjEsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgc29ydC9vcmRlciBieSAoQWdlIChVcCkpJywKKTsKCiMgc29ydCBieSB0aWNrZXQgcXVldWUKQFRpY2tldElEc1NvcnRPcmRlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnQVJSQVknLAogICAgVGl0bGUgICAgICAgID0+ICclc29ydC9vcmRlciBieSB0ZXN0JScsCiAgICBRdWV1ZXMgICAgICAgPT4gWyAnTWlzYycsICdSYXcnIF0sCiAgICBDdXN0b21lcklEICAgPT4gJEN1c3RvbWVyTm8sCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90b2JvLm9yZycsCiAgICBPcmRlckJ5ICAgICAgPT4gJ1VwJywKICAgIFNvcnRCeSAgICAgICA9PiAnUXVldWUnLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBMaW1pdCAgICAgICAgPT4gMSwKKTsKJFNlbGYtPklzKAogICAgJFRpY2tldElEc1NvcnRPcmRlclswXSwKICAgICRUaWNrZXRJRFNvcnRPcmRlcjUsCiAgICAnVGlja2V0VGlja2V0U2VhcmNoKCkgLSB0aWNrZXQgc29ydC9vcmRlciBieSAoUXVldWUgKFVwKSknLAopOwoKJENvdW50ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgID0+ICdDT1VOVCcsCiAgICBUaXRsZSAgICAgICAgPT4gJyVzb3J0L29yZGVyIGJ5IHRlc3QlJywKICAgIFF1ZXVlcyAgICAgICA9PiBbJ1JhdyddLAogICAgQ3VzdG9tZXJJRCAgID0+ICRDdXN0b21lck5vLAogICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdG9iby5vcmcnLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBMaW1pdCAgICAgICAgPT4gMSwKKTsKJFNlbGYtPklzKAogICAgJENvdW50LAogICAgNCwKICAgICdUaWNrZXRUaWNrZXRTZWFyY2goKSAtIHRpY2tldCBjb3VudCBmb3IgY3JlYXRlZCB0aWNrZXRzJywKKTsKCmZvciBteSAkVGlja2V0SUREZWxldGUgKAogICAgJFRpY2tldElEU29ydE9yZGVyMSwgJFRpY2tldElEU29ydE9yZGVyMiwgJFRpY2tldElEU29ydE9yZGVyMywKICAgICRUaWNrZXRJRFNvcnRPcmRlcjQKICAgICkKewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUREZWxldGUsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKSwKICAgICAgICAiVGlja2V0RGVsZXRlKCkiLAogICAgKTsKfQoKIyBhdm9pZCBTdGF0ZVR5cGUgYW5kIFN0YXRlVHlwZUlEIHByb2JsZW1zIGluIFRpY2tldFNlYXJjaCgpCgpteSAlU3RhdGVUeXBlTGlzdCA9ICRTdGF0ZU9iamVjdC0+U3RhdGVUeXBlTGlzdCgKICAgIFVzZXJJRCA9PiAxLAopOwoKIyB5b3UgbmVlZCBhIGhhc2ggd2l0aCB0aGUgc3RhdGUgYXMga2V5IGFuZCB0aGUgcmVsYXRlZCBTdGF0ZVR5cGUgYW5kIFN0YXRlVHlwZUlEIGFzCiMgcmVmZXJlbmNlCm15ICVTdGF0ZUFzS2V5QW5kU3RhdGVUeXBlQXNWYWx1ZTsKZm9yIG15ICRTdGF0ZVR5cGVJRCAoIHNvcnQga2V5cyAlU3RhdGVUeXBlTGlzdCApIHsKICAgIG15IEBMaXN0ID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUdldFN0YXRlc0J5VHlwZSgKICAgICAgICBTdGF0ZVR5cGUgPT4gWyAkU3RhdGVUeXBlTGlzdHskU3RhdGVUeXBlSUR9IF0sCiAgICAgICAgUmVzdWx0ICAgID0+ICdOYW1lJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSEFTSHxJRHxOYW1lCiAgICApOwogICAgZm9yIG15ICRJbmRleCAoQExpc3QpIHsKICAgICAgICAkU3RhdGVBc0tleUFuZFN0YXRlVHlwZUFzVmFsdWV7JEluZGV4fS0+e05hbWV9ID0gJFN0YXRlVHlwZUxpc3R7JFN0YXRlVHlwZUlEfTsKICAgICAgICAkU3RhdGVBc0tleUFuZFN0YXRlVHlwZUFzVmFsdWV7JEluZGV4fS0+e0lEfSAgID0gJFN0YXRlVHlwZUlEOwogICAgfQp9CgojIHRvIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBhIHJlc3VsdCB0aWNrZXQgY3JlYXRlIG9uZQokVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJ1N0YXRlVHlwZVRlc3QnLAogICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lcklEICAgPT4gJzEyMzQ2NScsCiAgICBDdXN0b21lclVzZXIgPT4gJ3VuaXR0ZXN0QG90b2JvLm9yZycsCiAgICBPd25lcklEICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKbXkgJVN0YXRlTGlzdCA9ICRTdGF0ZU9iamVjdC0+U3RhdGVMaXN0KCBVc2VySUQgPT4gMSApOwoKIyBub3cgY2hlY2sgZXZlcnkgcG9zc2libGUgc3RhdGUKZm9yIG15ICRTdGF0ZSAoIHZhbHVlcyAlU3RhdGVMaXN0ICkgewogICAgJFRpY2tldE9iamVjdC0+U3RhdGVTZXQoCiAgICAgICAgU3RhdGUgICAgICAgICAgICAgID0+ICRTdGF0ZSwKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgIFNlbmROb05vdGlmaWNhdGlvbiA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICBteSBAVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgICAgIFJlc3VsdCAgICAgICA9PiAnQVJSQVknLAogICAgICAgIFRpdGxlICAgICAgICA9PiAnJVN0YXRlVHlwZVRlc3QlJywKICAgICAgICBRdWV1ZXMgICAgICAgPT4gWydSYXcnXSwKICAgICAgICBTdGF0ZVR5cGVJRHMgPT4gWyAkU3RhdGVBc0tleUFuZFN0YXRlVHlwZUFzVmFsdWV7JFN0YXRlfS0+e0lEfSBdLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBteSBAVGlja2V0SURzVHlwZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICBSZXN1bHQgICAgPT4gJ0FSUkFZJywKICAgICAgICBUaXRsZSAgICAgPT4gJyVTdGF0ZVR5cGVUZXN0JScsCiAgICAgICAgUXVldWVzICAgID0+IFsnUmF3J10sCiAgICAgICAgU3RhdGVUeXBlID0+IFsgJFN0YXRlQXNLZXlBbmRTdGF0ZVR5cGVBc1ZhbHVleyRTdGF0ZX0tPntOYW1lfSBdLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBpZiAoICRUaWNrZXRJRHNbMF0gKSB7CiAgICAgICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElEc1swXSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgaWYgdGhlcmUgaXMgbm8gcmVzdWx0IHRoZSBTdGF0ZVR5cGVJRCBoYXNuJ3Qgd29ya2VkCiAgICAjIFRlc3QgaWYgdGhlcmUgaXMgYSByZXN1bHQsIGlmIEkgdXNlIFN0YXRlVHlwZUlEICRTdGF0ZUFzS2V5QW5kU3RhdGVUeXBlQXNWYWx1ZXskU3RhdGV9LT57SUR9CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVGlja2V0SURzWzBdLAogICAgICAgICJUaWNrZXRTZWFyY2goKSAtIFN0YXRlVHlwZUlEIC0gZm91bmQgdGlja2V0IiwKICAgICk7CgogICAgIyBpZiBpdCBpcyBub3QgZXF1YWwgdGhlbiB0aGVyZSBpcyBpbiB0aGUgdXNpbmcgb2YgU3RhdGVUeXBlIG9yIFN0YXRlVHlwZUlEIGFuIGVycm9yCiAgICAjIGNoZWNrIGlmIHlvdSBnZXQgdGhlIHNhbWUgcmVzdWx0IGlmIHlvdSB1c2UgdGhlIFN0YXRlVHlwZSBhdHRyaWJ1dGUgb3IgdGhlIFN0YXRlVHlwZUlEcyBhdHRyaWJ1dGUuCiAgICAjIFN0YXRlKCRTdGF0ZSkgU3RhdGVUeXBlKCRTdGF0ZUFzS2V5QW5kU3RhdGVUeXBlQXNWYWx1ZXskU3RhdGV9LT57TmFtZX0pIGFuZCBTdGF0ZVR5cGVJRHMoJFN0YXRlQXNLZXlBbmRTdGF0ZVR5cGVBc1ZhbHVleyRTdGF0ZX0tPntJRH0pCiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEBUaWNrZXRJRHMsCiAgICAgICAgc2NhbGFyIEBUaWNrZXRJRHNUeXBlLAogICAgICAgICJUaWNrZXRTZWFyY2goKSAtIFN0YXRlVHlwZSIsCiAgICApOwp9CgpteSAlVGlja2V0UGVuZGluZyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXMoCiAgICAkVGlja2V0UGVuZGluZ3tVbnRpbFRpbWV9LAogICAgJzAnLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBub3Qgc2V0IiwKKTsKCm15ICREaWZmICAgICAgICAgICAgICAgPSA2MDsKbXkgJEN1cnJlbnRTeXN0ZW1UaW1lICA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub0Vwb2NoKCk7Cm15ICRQZW5kaW5nVGltZVNldERpZmYgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZW5kaW5nVGltZVNldCgKICAgIERpZmYgICAgID0+ICREaWZmLAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0RGlmZiwKICAgICJUaWNrZXRQZW5kaW5nVGltZVNldCgpIC0gUGVuZGluZyBUaW1lIC0gc2V0IGRpZmYiLAopOwoKJVRpY2tldFBlbmRpbmcgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFNlbGYtPklzKAogICAgJFRpY2tldFBlbmRpbmd7UmVhbFRpbGxUaW1lTm90VXNlZH0sCiAgICAkQ3VycmVudFN5c3RlbVRpbWUgKyAkRGlmZiAqIDYwLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBkaWZmIHRpbWUgY2hlY2siLAopOwoKbXkgJFBlbmRpbmdUaW1lU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAogICAgWWVhciAgICAgPT4gJzIwMDMnLAogICAgTW9udGggICAgPT4gJzA4JywKICAgIERheSAgICAgID0+ICcxNCcsCiAgICBIb3VyICAgICA9PiAnMjInLAogICAgTWludXRlICAgPT4gJzA1JywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0LAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBzZXQiLAopOwoKJVRpY2tldFBlbmRpbmcgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKbXkgJFBlbmRpbmdVbnRpbFRpbWUgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgIFllYXIgICA9PiAnMjAwMycsCiAgICAgICAgTW9udGggID0+ICcwOCcsCiAgICAgICAgRGF5ICAgID0+ICcxNCcsCiAgICAgICAgSG91ciAgID0+ICcyMicsCiAgICAgICAgTWludXRlID0+ICcwNScsCiAgICAgICAgU2Vjb25kID0+ICcwMCcsCiAgICB9CiktPlRvRXBvY2goKTsKCiRQZW5kaW5nVW50aWxUaW1lID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPlRvRXBvY2goKSAtICRQZW5kaW5nVW50aWxUaW1lOwoKJFNlbGYtPklzKAogICAgJFRpY2tldFBlbmRpbmd7VW50aWxUaW1lfSwKICAgICctJyAuICRQZW5kaW5nVW50aWxUaW1lLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSByZWFkIGJhY2siLAopOwoKJFBlbmRpbmdUaW1lU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAogICAgWWVhciAgICAgPT4gJzAnLAogICAgTW9udGggICAgPT4gJzAnLAogICAgRGF5ICAgICAgPT4gJzAnLAogICAgSG91ciAgICAgPT4gJzAnLAogICAgTWludXRlICAgPT4gJzAnLAopOwoKJFNlbGYtPlRydWUoCiAgICAkUGVuZGluZ1RpbWVTZXQsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFBlbmRpbmcgVGltZSAtIHJlc2V0IiwKKTsKCiVUaWNrZXRQZW5kaW5nID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5JcygKICAgICRUaWNrZXRQZW5kaW5ne1VudGlsVGltZX0sCiAgICAnMCcsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFBlbmRpbmcgVGltZSAtIG5vdCBzZXQiLAopOwoKJFBlbmRpbmdUaW1lU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAogICAgU3RyaW5nICAgPT4gJzIwMDMtMDktMTQgMjI6MDU6MDAnLAopOwoKJFNlbGYtPlRydWUoCiAgICAkUGVuZGluZ1RpbWVTZXQsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFBlbmRpbmcgVGltZSAtIHNldCBzdHJpbmciLAopOwoKJVRpY2tldFBlbmRpbmcgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFBlbmRpbmdVbnRpbFRpbWUgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgIFN0cmluZyA9PiAnMjAwMy0wOS0xNCAyMjowNTowMCcsCiAgICB9CiktPlRvRXBvY2goKTsKCiRQZW5kaW5nVW50aWxUaW1lID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPlRvRXBvY2goKSAtICRQZW5kaW5nVW50aWxUaW1lOwoKJFNlbGYtPklzKAogICAgJFRpY2tldFBlbmRpbmd7VW50aWxUaW1lfSwKICAgICctJyAuICRQZW5kaW5nVW50aWxUaW1lLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSByZWFkIGJhY2siLAopOwoKJFBlbmRpbmdUaW1lU2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAogICAgU3RyaW5nICAgPT4gJzAwMDAtMDAtMDAgMDA6MDA6MDAnLAopOwoKJFNlbGYtPlRydWUoCiAgICAkUGVuZGluZ1RpbWVTZXQsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFBlbmRpbmcgVGltZSAtIHJlc2V0IHN0cmluZyIsCik7CgolVGlja2V0UGVuZGluZyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXMoCiAgICAkVGlja2V0UGVuZGluZ3tVbnRpbFRpbWV9LAogICAgJzAnLAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBub3Qgc2V0IiwKKTsKCiRQZW5kaW5nVGltZVNldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlbmRpbmdUaW1lU2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKICAgIFN0cmluZyAgID0+ICcyMDAzLTA5LTE0IDIyOjA1OjAwJywKKTsKCiRTZWxmLT5UcnVlKAogICAgJFBlbmRpbmdUaW1lU2V0LAogICAgIlRpY2tldFBlbmRpbmdUaW1lU2V0KCkgLSBQZW5kaW5nIFRpbWUgLSBzZXQgc3RyaW5nIiwKKTsKCm15ICRUaWNrZXRTdGF0ZVVwZGF0ZSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN0YXRlU2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKICAgIFN0YXRlICAgID0+ICdwZW5kaW5nIHJlbWluZGVyJywKKTsKCiVUaWNrZXRQZW5kaW5nID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgJFRpY2tldFBlbmRpbmd7VW50aWxUaW1lfSwKICAgICJUaWNrZXRQZW5kaW5nVGltZVNldCgpIC0gU2V0IHRvIHBlbmRpbmcgLSB0aW1lIHNob3VsZCBzdGlsbCBiZSB0aGVyZSIsCik7CgokVGlja2V0U3RhdGVVcGRhdGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdGF0ZVNldCgKICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCiAgICBTdGF0ZSAgICA9PiAnbmV3JywKKTsKCiVUaWNrZXRQZW5kaW5nID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKCiRTZWxmLT5JcygKICAgICRUaWNrZXRQZW5kaW5ne1VudGlsVGltZX0sCiAgICAnMCcsCiAgICAiVGlja2V0UGVuZGluZ1RpbWVTZXQoKSAtIFNldCB0byBuZXcgLSBQZW5kaW5nIFRpbWUgbm90IHNldCIsCik7CgojIGNoZWNrIHRoYXQgc2VhcmNoZXMgd2l0aCBOZXdlckRhdGUgaW4gdGhlIGZ1dHVyZSBhcmUgbm90IGV4ZWN1dGVkCkZpeGVkVGltZUFkZFNlY29uZHMoIC02MCAqIDYwICk7CgojIFRlc3QgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSAoZnV0dXJlIGRhdGUpCiRUaWNrZXRDcmVhdGVUaW1lTmV3ZXJEYXRlID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiRUaWNrZXRDcmVhdGVUaW1lTmV3ZXJEYXRlLT5BZGQoIEhvdXJzID0+IDEgKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICAgPT4gMTAwLAogICAgVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAkVGlja2V0Q3JlYXRlVGltZU5ld2VyRGF0ZS0+VG9TdHJpbmcoKSwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgIFBlcm1pc3Npb24gICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOlRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgPT4gLTYwKScsCik7CgojIFRlc3QgQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUgKGZ1dHVyZSBkYXRlKQokQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKJEFydGljbGVDcmVhdGVUaW1lTmV3ZXJEYXRlLT5BZGQoIEhvdXJzID0+IDEgKTsKCiVUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgICAgICAgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICBMaW1pdCAgICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBBcnRpY2xlQ3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAkQXJ0aWNsZUNyZWF0ZVRpbWVOZXdlckRhdGUtPlRvU3RyaW5nKCksCiAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc3skVGlja2V0SUR9LAogICAgJ1RpY2tldFNlYXJjaCgpIChIQVNIOkFydGljbGVDcmVhdGVUaW1lTmV3ZXJEYXRlID0+IC02MCknLAopOwoKIyBUZXN0IFRpY2tldENsb3NlVGltZU5ld2VyRGF0ZSAoZnV0dXJlIGRhdGUpCiRUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKJFRpY2tldENsb3NlVGltZU5ld2VyRGF0ZS0+QWRkKCBIb3VycyA9PiAxICk7CgolVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgID0+ICdIQVNIJywKICAgIExpbWl0ICAgICAgICAgICAgICAgICAgICA9PiAxMDAsCiAgICBUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgPT4gJFRpY2tldENsb3NlVGltZU5ld2VyRGF0ZS0+VG9TdHJpbmcoKSwKICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgUGVybWlzc2lvbiAgICAgICAgICAgICAgID0+ICdydycsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRJRHN7JFRpY2tldElEfSwKICAgICdUaWNrZXRTZWFyY2goKSAoSEFTSDpUaWNrZXRDbG9zZVRpbWVOZXdlckRhdGUgPT4gLTYwKScsCik7CgojIHRoZSB0aWNrZXQgaXMgbm8gbG9uZ2VyIG5lZWRlZAokVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKIyB0ZXN0cyBmb3Igc2VhcmNoaW5nIFN0YXRlVHlwZXMgdGhhdCBtaWdodCBub3QgaGF2ZSBzdGF0ZXMKIyB0aGlzIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgbGlzdCByYXRoZXIgdGhlbiBhIGJpZyBTUUwgZXJyb3IKIyB0aGUgcHJvYmxlbSBpcywgd2UgY2FuJ3QgcmVhbGx5IHRlc3QgaWYgdGhlcmUgaXMgYW4gU1FMIGVycm9yIG9yIG5vdAojIHRpY2tldCBzZWFyY2ggcmV0dXJucyBhbiBlbXB0eSBsaXN0IGFueXdheQoKbXkgQE5ld1N0YXRlcyA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXRTdGF0ZXNCeVR5cGUoCiAgICBTdGF0ZVR5cGUgPT4gWyduZXcnXSwKICAgIFJlc3VsdCAgICA9PiAnSUQnLAopOwoKIyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSB2YWxpZCBzdGF0ZXMgZm9yIHN0YXRlIHR5cGUgbmV3CmZvciBteSAkTmV3U3RhdGVJRCAoQE5ld1N0YXRlcykgewogICAgbXkgJVN0YXRlID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUdldCgKICAgICAgICBJRCA9PiAkTmV3U3RhdGVJRCwKICAgICk7CiAgICAkU3RhdGVPYmplY3QtPlN0YXRlVXBkYXRlKAogICAgICAgICVTdGF0ZSwKICAgICAgICBWYWxpZElEID0+IDIsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKfQoKbXkgQFRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgIFJlc3VsdCAgICAgICA9PiAnTElTVCcsCiAgICBMaW1pdCAgICAgICAgPT4gMTAwLAogICAgVGlja2V0TnVtYmVyID0+IFsgJFRpY2tldHtUaWNrZXROdW1iZXJ9LCAnQUJDJyBdLAogICAgU3RhdGVUeXBlICAgID0+ICdOZXcnLAogICAgVXNlcklEICAgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uICAgPT4gJ3J3JywKKTsKJFNlbGYtPkZhbHNlKAogICAgJFRpY2tldElEc1swXSwKICAgICdUaWNrZXRTZWFyY2goKSAoTElTVDpUaWNrZXROdW1iZXIsU3RhdGVUeXBlOm5ldyAobm8gdmFsaWQgc3RhdGVzIG9mIHN0YXRlIHR5cGUgbmV3KScsCik7CgojIGFjdGl2YXRlIHN0YXRlcyBhZ2Fpbgpmb3IgbXkgJE5ld1N0YXRlSUQgKEBOZXdTdGF0ZXMpIHsKICAgIG15ICVTdGF0ZSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICAgICAgSUQgPT4gJE5ld1N0YXRlSUQsCiAgICApOwogICAgJFN0YXRlT2JqZWN0LT5TdGF0ZVVwZGF0ZSgKICAgICAgICAlU3RhdGUsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7Cn0KCiMgY2hlY2sgcmVzcG9uc2Ugb2YgdGlja2V0IHNlYXJjaCBmb3IgaW52YWxpZCB0aW1lc3RhbXBzCmZvciBteSAkU2VhcmNoUGFyYW0gKHF3KEFydGljbGVDcmVhdGVUaW1lIFRpY2tldENyZWF0ZVRpbWUgVGlja2V0UGVuZGluZ1RpbWUpKSB7CiAgICBmb3IgbXkgJFBhcmFtT3B0aW9uIChxdyhPbGRlckRhdGUgTmV3ZXJEYXRlKSkgewogICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICAgICAgJFNlYXJjaFBhcmFtIC4gJFBhcmFtT3B0aW9uID0+ICcyMDAwLTAyLTMxIDAwOjAwOjAwJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICBteSAkRXJyb3JNZXNzYWdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5HZXRMb2dFbnRyeSgKICAgICAgICAgICAgVHlwZSA9PiAnZXJyb3InLAogICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSwKICAgICAgICAgICAgIlNlYXJjaCBub3QgZXhlY3V0ZWQgZHVlIHRvIGludmFsaWQgdGltZSAnMjAwMC0wMi0zMSAwMDowMDowMCchIiwKICAgICAgICAgICAgIlRpY2tldFNlYXJjaCgpIChIYW5kbGluZyBpbnZhbGlkIHRpbWVzdGFtcCBpbiAnJFNlYXJjaFBhcmFtJFBhcmFtT3B0aW9uJykiLAogICAgICAgICk7CiAgICB9Cn0KCiMgQ3JlYXRlIGVudmlyb21lbnQgZm9yIHRlc3RpbmcgRXNjYWxhdGlvbiBPUkRFUiBCWSBtb2RpZmljYXRpb24gZnJvbSB0aGUgYnVnIzEzNDU4LgojIENyZWF0ZSBRdWV1ZXMgd2l0aCBkaWZmZXJlbnQgRXNjYWxhdGlvbiB0aW1lcy4KbXkgQFF1ZXVlQ29uZmlnID0gKAogICAgewogICAgICAgICMgRmlyc3QgY3JlYXRlZCBRdWV1ZSBkb2VzIG5vdCBoYXZlIFVwZGF0ZSB0aW1lIHNldCwgdmFsdWUgaXMgMCBmb3IgY3JlYXRlZCB0aWNrZXQuCiAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJ1F1ZXVlJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgPT4gNTAsCiAgICAgICAgU29sdXRpb25UaW1lICAgICAgPT4gNjAsCiAgICB9LAogICAgewogICAgICAgICMgU2Vjb25kIGNyZWF0ZWQgUXVldWUgZG9lcyBub3QgaGF2ZSBGaXJzdCByZXNwb25zZSB0aW1lIHNldCwgdmFsdWUgaXMgMCBmb3IgY3JlYXRlZCB0aWNrZXQuCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdRdWV1ZScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgICAgIFVwZGF0ZVRpbWUgICA9PiA3MCwKICAgICAgICBTb2x1dGlvblRpbWUgPT4gODAsCiAgICB9LAogICAgewogICAgICAgICMgVGhpcmQgY3JlYXRlZCBRdWV1ZSBkb2VzIG5vdCBoYXZlIFNvbHV0aW9uIHRpbWUgc2V0LCB2YWx1ZSBpcyAwIGZvciBjcmVhdGVkIHRpY2tldC4KICAgICAgICBOYW1lICAgICAgICAgICAgICA9PiAnUXVldWUnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSA9PiA2MCwKICAgICAgICBVcGRhdGVUaW1lICAgICAgICA9PiAzMCwKICAgIH0sCik7CgpteSBAUXVldWVJRHM7CmZvciBteSAkUXVldWVDcmVhdGUgKEBRdWV1ZUNvbmZpZykgewogICAgbXkgJFF1ZXVlSUQgPSAkUXVldWVPYmplY3QtPlF1ZXVlQWRkKAogICAgICAgIFZhbGlkSUQgICAgICAgICA9PiAxLAogICAgICAgIEdyb3VwSUQgICAgICAgICA9PiAxLAogICAgICAgIEZvbGxvd1VwSUQgICAgICA9PiAxLAogICAgICAgIFN5c3RlbUFkZHJlc3NJRCA9PiAxLAogICAgICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgICAgIENvbW1lbnQgICAgICAgICA9PiAnU29tZSBjb21tZW50JywKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICAleyRRdWV1ZUNyZWF0ZX0sCiAgICApOwogICAgcHVzaCBAUXVldWVJRHMsICRRdWV1ZUlEOwp9CgojIENyZWF0ZSBUaWNrZXRzLgpteSBAVGVzdFRpY2tldElEczsKZm9yIG15ICRRdWV1ZUlEIChAUXVldWVJRHMpIHsKICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0IFRpdGxlJywKICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgICAgICBDdXN0b21lcklEICAgPT4gJzEyMzQ2NScsCiAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICdidWd0ZXN0QG90b2JvLm9yZycsCiAgICAgICAgT3duZXJJRCAgICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwogICAgcHVzaCBAVGVzdFRpY2tldElEcywgJFRpY2tldElEOwoKICAgIG15ICRBcnRpY2xlSUQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDAsCiAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgICAgICBGcm9tICAgICAgICAgICAgICAgICA9PiAnQWdlbnQgU29tZSBBZ2VudCBTb21lIEFnZW50IDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgICAgIFRvICAgICAgICAgICAgICAgICAgID0+ICdDdXN0b21lciBBIDxjdXN0b21lci1hQGV4YW1wbGUuY29tPicsCiAgICAgICAgQ2MgICAgICAgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyIEIgPGN1c3RvbWVyLWJAZXhhbXBsZS5jb20+JywKICAgICAgICBSZXBseVRvICAgICAgICAgICAgICA9PiAnQ3VzdG9tZXIgQiA8Y3VzdG9tZXItYkBleGFtcGxlLmNvbT4nLAogICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdzb21lIHNob3J0IGRlc2NyaXB0aW9uJywKICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAndGhlIG1lc3NhZ2UgdGV4dCBQZXJsIG1vZHVsZXMgcHJvdmlkZSBhIHJhbmdlIG9mJywKICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xNScsCiAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJ0FkZE5vdGUnLAogICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICdTb21lIGZyZWUgdGV4dCEnLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgTm9BZ2VudE5vdGlmeSAgICAgICAgPT4gMSwKICAgICk7CgogICAgbXkgJFRpY2tldEVzY2FsYXRpb25JbmRleEJ1aWxkID0gJFRpY2tldE9iamVjdC0+VGlja2V0RXNjYWxhdGlvbkluZGV4QnVpbGQoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKICAgICMgV2FpdCAxIHNlY29uZCB0byBoYXZlIGVzY2FsYXRpb25zLgogICAgRml4ZWRUaW1lQWRkU2Vjb25kcygxKTsKCiAgICAjIFJlbmV3IG9iamVjdHMgYmVjYXVzZSBvZiB0cmFuc2FjdGlvbi4KICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCgKICAgICAgICBPYmplY3RzID0+IFsKICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScsCiAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlOjpCYWNrZW5kOjpJbnRlcm5hbCcsCiAgICAgICAgXSwKICAgICk7CiAgICAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwp9CgojIENyZWF0ZSBUaWNrZXRTZWFyY2ggYnkgRXNjYWxhdGlvbnMgc2NlbmFyaW9zLgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgT3JkZXJCeSA9PiAnVXAnLAogICAgICAgICAgICBTb3J0QnkgID0+ICdFc2NhbGF0aW9uUmVzcG9uc2VUaW1lJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0ID0+IFsgJFRlc3RUaWNrZXRJRHNbMV0sICRUZXN0VGlja2V0SURzWzBdLCAkVGVzdFRpY2tldElEc1syXSBdLAogICAgfSwKICAgIHsKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBPcmRlckJ5ID0+ICdEb3duJywKICAgICAgICAgICAgU29ydEJ5ICA9PiAnRXNjYWxhdGlvblJlc3BvbnNlVGltZScsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdCA9PiBbICRUZXN0VGlja2V0SURzWzJdLCAkVGVzdFRpY2tldElEc1swXSwgJFRlc3RUaWNrZXRJRHNbMV0gXSwKICAgIH0sCiAgICB7CiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgT3JkZXJCeSA9PiAnVXAnLAogICAgICAgICAgICBTb3J0QnkgID0+ICdFc2NhbGF0aW9uVXBkYXRlVGltZScsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdCA9PiBbICRUZXN0VGlja2V0SURzWzBdLCAkVGVzdFRpY2tldElEc1syXSwgJFRlc3RUaWNrZXRJRHNbMV0gXSwKICAgIH0sCiAgICB7CiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgT3JkZXJCeSA9PiAnRG93bicsCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ0VzY2FsYXRpb25VcGRhdGVUaW1lJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0ID0+IFsgJFRlc3RUaWNrZXRJRHNbMV0sICRUZXN0VGlja2V0SURzWzJdLCAkVGVzdFRpY2tldElEc1swXSBdLAogICAgfSwKICAgIHsKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBPcmRlckJ5ID0+ICdVcCcsCiAgICAgICAgICAgIFNvcnRCeSAgPT4gJ0VzY2FsYXRpb25Tb2x1dGlvblRpbWUnLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHQgPT4gWyAkVGVzdFRpY2tldElEc1syXSwgJFRlc3RUaWNrZXRJRHNbMF0sICRUZXN0VGlja2V0SURzWzFdIF0sCiAgICB9LAogICAgewogICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgIE9yZGVyQnkgPT4gJ0Rvd24nLAogICAgICAgICAgICBTb3J0QnkgID0+ICdFc2NhbGF0aW9uU29sdXRpb25UaW1lJywKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0ID0+IFsgJFRlc3RUaWNrZXRJRHNbMV0sICRUZXN0VGlja2V0SURzWzBdLCAkVGVzdFRpY2tldElEc1syXSBdLAogICAgfSwKKTsKZm9yIG15ICRUZXN0IChAVGVzdHMpIHsKICAgIG15IEBUaWNrZXRzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdBUlJBWScsCiAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJ2J1Z3Rlc3RAb3RvYm8ub3JnJywKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgICAgICV7ICRUZXN0LT57Q29uZmlnfSB9LAogICAgKTsKICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAkVGVzdC0+e0V4cGVjdGVkUmVzdWx0fSwKICAgICAgICBcQFRpY2tldHMsCiAgICAgICAgIlRpY2tldFNlYXJjaCgpIC0gU29ydEJ5ICRUZXN0LT57Q29uZmlnfXtTb3J0Qnl9IC0gT3JkZXJCeSAkVGVzdC0+e0NvbmZpZ317T3JkZXJCeX0iCiAgICApOwp9CgojIGNsZWFudXAgaXMgZG9uZSBieSBSZXN0b3JlRGF0YWJhc2UgYnV0IHdlIG5lZWQgdG8gZGVsZXRlIHRoZSB0aWNrZXRzIHRvIGNsZWFudXAgdGhlIGZpbGVzeXN0ZW0gdG9vCm15IEBEZWxldGVUaWNrZXRMaXN0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0FSUkFZJywKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+IFsgJ3VuaXR0ZXN0QG90b2JvLm9yZycsICdidWd0ZXN0QG90b2JvLm9yZycgXSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CmZvciBteSAkVGlja2V0SUQgKEBEZWxldGVUaWNrZXRMaXN0KSB7CiAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwp9CgojIFRlc3QgdGlja2V0IHNlYXJjaCBieSBmdWxsdGV4dCAoc2VlIGJ1ZyMxMzI4NCkuCiMgICBDcmVhdGUgYSB0ZXN0IHRpY2tldCBhbmQgYWRkIGFuIGFydGljbGUgZm9yIHRoaXMgdGlja2V0LgojICAgTm90ZSB0aGF0IGFydGljbGUgc3ViamVjdCBhbmQgdGlja2V0IHRpdGxlIGRpZmZlci4KbXkgJFRlc3RUaWNrZXRUaXRsZSAgPSAndGl0bGUnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKbXkgJEZ1bGx0ZXh0VGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUaXRsZSAgICAgICAgPT4gJFRlc3RUaWNrZXRUaXRsZSwKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGUgICAgICAgID0+ICdvcGVuJywKICAgIEN1c3RvbWVySUQgICA9PiAnMTIzNDY1JywKICAgIEN1c3RvbWVyVXNlciA9PiAnYnVndGVzdEBvdG9iby5vcmcnLAogICAgT3duZXJJRCAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCm15ICRUZXN0QXJ0aWNsZVN1YmplY3QgPSAnc3ViamVjdCcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwpteSAkRnVsbHRleHRBcnRpY2xlSUQgID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQ3JlYXRlKAogICAgVGlja2V0SUQgICAgICAgICAgICAgPT4gJEZ1bGx0ZXh0VGlja2V0SUQsCiAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAwLAogICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgIEZyb20gICAgICAgICAgICAgICAgID0+ICdBZ2VudCBTb21lIEFnZW50IFNvbWUgQWdlbnQgPGVtYWlsQGV4YW1wbGUuY29tPicsCiAgICBUbyAgICAgICAgICAgICAgICAgICA9PiAnQ3VzdG9tZXIgQSA8Y3VzdG9tZXItYUBleGFtcGxlLmNvbT4nLAogICAgQ2MgICAgICAgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyIEIgPGN1c3RvbWVyLWJAZXhhbXBsZS5jb20+JywKICAgIFJlcGx5VG8gICAgICAgICAgICAgID0+ICdDdXN0b21lciBCIDxjdXN0b21lci1iQGV4YW1wbGUuY29tPicsCiAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAkVGVzdEFydGljbGVTdWJqZWN0LAogICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ1NvbWUgdGV4dCcsCiAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xNScsCiAgICBIaXN0b3J5VHlwZSAgICAgICAgICA9PiAnQWRkTm90ZScsCiAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgIFVzZXJJRCAgICAgICAgICAgICAgID0+IDEsCiAgICBOb0FnZW50Tm90aWZ5ICAgICAgICA9PiAxLAopOwoKJEFydGljbGVPYmplY3QtPkFydGljbGVTZWFyY2hJbmRleEJ1aWxkKAogICAgVGlja2V0SUQgID0+ICRGdWxsdGV4dFRpY2tldElELAogICAgQXJ0aWNsZUlEID0+ICRGdWxsdGV4dEFydGljbGVJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKIyBTZWFyY2ggZm9yIHRpY2tldCB0aXRsZSBhcyBmdWxsdGV4dCBwYXJhbWV0ZXIuCkBUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgICAgID0+ICdBUlJBWScsCiAgICBGdWxsdGV4dCAgID0+ICRUZXN0VGlja2V0VGl0bGUsCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdydycsCik7CgojIFZlcmlmeSByZXN1bHQgaGFzIG9uZSBpdGVtIGFuZCBpdCdzIGluZGVlZCB0aGUgdGVzdCB0aWNrZXQuCiRTZWxmLT5Jc0RlZXBseSgKICAgIFxAVGlja2V0SURzLAogICAgWyRGdWxsdGV4dFRpY2tldElEXSwKICAgICJUaWNrZXRTZWFyY2goKSAtIHNlYXJjaCB0aWNrZXQgdGl0bGUgJyRUZXN0VGlja2V0VGl0bGUnIGFzIGZ1bGx0ZXh0IC0gZm91bmQgb25seSBUaWNrZXRJRCAkRnVsbHRleHRUaWNrZXRJRCIKKTsKCiMgU2VhcmNoIGZvciBhcnRpY2xlIHN1YmplY3QgYXMgZnVsbHRleHQgcGFyYW1ldGVyLgpAVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgUmVzdWx0ICAgICA9PiAnQVJSQVknLAogICAgRnVsbHRleHQgICA9PiAkVGVzdEFydGljbGVTdWJqZWN0LAogICAgVXNlcklEICAgICA9PiAxLAogICAgUGVybWlzc2lvbiA9PiAncncnLAopOwoKIyBWZXJpZnkgcmVzdWx0IGhhcyBvbmUgaXRlbSBhbmQgaXQncyBpbmRlZWQgdGhlIHRlc3QgdGlja2V0LgokU2VsZi0+SXNEZWVwbHkoCiAgICBcQFRpY2tldElEcywKICAgIFskRnVsbHRleHRUaWNrZXRJRF0sCiAgICAiVGlja2V0U2VhcmNoKCkgLSBzZWFyY2ggYXJ0aWNsZSBzdWJqZWN0ICckVGVzdEFydGljbGVTdWJqZWN0JyBhcyBmdWxsdGV4dCAtIGZvdW5kIG9ubHkgVGlja2V0SUQgJEZ1bGx0ZXh0VGlja2V0SUQiCik7CgokU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgIFRpY2tldElEID0+ICRGdWxsdGV4dFRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJUaWNrZXRJRCAkRnVsbHRleHRUaWNrZXRJRCAtIGRlbGV0ZWQiLAopOwoKIyBUZXN0IFRpY2tldENvdW50QnlBdHRyaWJ1dGUoKSBmdW5jdGlvbi4KIyBFbmFibGUgVGlja2V0IFR5cGUuCiRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPlNldCgKICAgIEtleSAgID0+ICdUaWNrZXQ6OlR5cGUnLAogICAgVmFsdWUgPT4gMSwKKTsKCiMgQ3JlYXRlIHRlc3QgZW52aXJvbm1lbnQuCm15ICRQcmlvcml0eU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpOwpteSAkUmFuZG9tSUQgICAgICAgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwpteSBAUHJpb3JpdGllczsKbXkgQFNlcnZpY2VzOwpteSBAU0xBczsKbXkgQFN0YXRlczsKbXkgQFR5cGVzOwpteSBAUXVldWVzOwoKZm9yIG15ICRJbmRleCAoIDEgLi4gMyApIHsKCiAgICAjIENyZWF0ZSB0ZXN0IHF1ZXVlcy4KICAgIG15ICRRdWV1ZU5hbWUgPSAkSW5kZXggLiAnUXVldWUnIC4gJFJhbmRvbUlEOwogICAgbXkgJFF1ZXVlSUQgICA9ICRRdWV1ZU9iamVjdC0+UXVldWVBZGQoCiAgICAgICAgTmFtZSAgICAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICAgICAgVmFsaWRJRCAgICAgICAgID0+IDEsCiAgICAgICAgR3JvdXBJRCAgICAgICAgID0+IDEsCiAgICAgICAgRm9sbG93VXBJRCAgICAgID0+IDEsCiAgICAgICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICAgICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICAgICAgU2lnbmF0dXJlSUQgICAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgICAgICAgID0+ICdVbml0IFRlc3QgQ29tbWVudCcsCiAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICApIHx8IGRpZSAiUXVldWVBZGQoKSBlcnJvci4iOwoKICAgIHB1c2ggQFF1ZXVlcywgewogICAgICAgIElEICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgTmFtZSA9PiAkUXVldWVOYW1lLAogICAgfTsKCiAgICAjIENyZWF0ZSB0ZXN0IHByaW9yaXRpZXMuCiAgICBteSAkUHJpb3JpdHlOYW1lID0gJEluZGV4IC4gJ1ByaW8nIC4gJFJhbmRvbUlEOwogICAgbXkgJFByaW9yaXR5SUQgICA9ICRQcmlvcml0eU9iamVjdC0+UHJpb3JpdHlBZGQoCiAgICAgICAgTmFtZSAgICA9PiAkUHJpb3JpdHlOYW1lLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApIHx8IGRpZSAiUHJpb3JpdHlBZGQoKSBlcnJvci4iOwoKICAgIHB1c2ggQFByaW9yaXRpZXMsIHsKICAgICAgICBJRCAgID0+ICRQcmlvcml0eUlELAogICAgICAgIE5hbWUgPT4gJFByaW9yaXR5TmFtZSwKICAgIH07CgogICAgIyBDcmVhdGUgdGVzdCBzZXJ2aWNlcy4KICAgIG15ICRTZXJ2aWNlTmFtZSA9ICRJbmRleCAuICdTZXJ2aWNlJyAuICRSYW5kb21JRDsKICAgIG15ICRTZXJ2aWNlSUQgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBDb21tZW50ID0+ICdVbml0IFRlc3QgQ29tbWVudCcsCiAgICAgICAgVXNlcklEICA9PiAxLAoKICAgICAgICAjIC0tLQogICAgICAgICMgSVRTTUNvcmUKICAgICAgICAjIC0tLQogICAgICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICMgLS0tCiAgICApIHx8IGRpZSAiU2VydmljZUFkZCgpIGVycm9yLiI7CgogICAgcHVzaCBAU2VydmljZXMsIHsKICAgICAgICBJRCAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgTmFtZSA9PiAkU2VydmljZU5hbWUsCiAgICB9OwoKICAgICMgQ3JlYXRlIHRlc3QgU0xBcy4KICAgIG15ICRTTEFOYW1lID0gJEluZGV4IC4gJ1NMQScgLiAkUmFuZG9tSUQ7CiAgICBteSAkU0xBSUQgICA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBDb21tZW50ID0+ICdVbml0IFRlc3QgQ29tbWVudCcsCiAgICAgICAgVXNlcklEICA9PiAxLAoKICAgICAgICAjIC0tLQogICAgICAgICMgSVRTTUNvcmUKICAgICAgICAjIC0tLQogICAgICAgIFR5cGVJRCA9PiAkU0xBVHlwZU5hbWUySUR7T3RoZXJ9LAoKICAgICAgICAjIC0tLQogICAgKSB8fCBkaWUgIlNMQUFkZCgpIGVycm9yLiI7CgogICAgcHVzaCBAU0xBcywgewogICAgICAgIElEICAgPT4gJFNMQUlELAogICAgICAgIE5hbWUgPT4gJFNMQU5hbWUsCiAgICB9OwoKICAgICMgQ3JlYXRlIHRlc3Qgc3RhdGVzLgogICAgbXkgJFN0YXRlTmFtZSA9ICRJbmRleCAuICdTdGF0ZScgLiAkUmFuZG9tSUQ7CiAgICBteSAkU3RhdGVJRCAgID0gJFN0YXRlT2JqZWN0LT5TdGF0ZUFkZCgKICAgICAgICBOYW1lICAgID0+ICRTdGF0ZU5hbWUsCiAgICAgICAgQ29tbWVudCA9PiAnVW5pdCBUZXN0IENvbW1lbnQnLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBUeXBlSUQgID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKSB8fCBkaWUgIlN0YXRlQWRkKCkgZXJyb3IuIjsKCiAgICBwdXNoIEBTdGF0ZXMsIHsKICAgICAgICBJRCAgID0+ICRTdGF0ZUlELAogICAgICAgIE5hbWUgPT4gJFN0YXRlTmFtZSwKICAgIH07CgogICAgIyBDcmVhdGUgdGVzdCB0eXBlcy4KICAgIG15ICRUeXBlTmFtZSA9ICRJbmRleCAuICdUeXBlJyAuICRSYW5kb21JRDsKICAgIG15ICRUeXBlSUQgICA9ICRUeXBlT2JqZWN0LT5UeXBlQWRkKAogICAgICAgIE5hbWUgICAgPT4gJFR5cGVOYW1lLAogICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApIHx8IGRpZSAiVHlwZUFkZCgpIGVycm9yLiI7CgogICAgcHVzaCBAVHlwZXMsIHsKICAgICAgICBJRCAgID0+ICRUeXBlSUQsCiAgICAgICAgTmFtZSA9PiAkVHlwZU5hbWUsCiAgICB9Owp9CgojIENyZWF0ZSB0ZXN0IGNhc2VzIGZvciBkaWZmZXJlbnQgZnVuY3Rpb24gb3V0Y29tZS4KQFRlc3RzID0gKAogICAgewogICAgICAgIFF1ZXVlSUQgICAgPT4gJFF1ZXVlc1swXS0+e0lEfSwKICAgICAgICBQcmlvcml0eUlEID0+ICRQcmlvcml0aWVzWzBdLT57SUR9LAogICAgICAgIFN0YXRlSUQgICAgPT4gJFN0YXRlc1swXS0+e0lEfSwKICAgICAgICBTZXJ2aWNlSUQgID0+ICRTZXJ2aWNlc1swXS0+e0lEfSwKICAgICAgICBTTEFJRCAgICAgID0+ICRTTEFzWzJdLT57SUR9LAogICAgICAgIFR5cGVJRCAgICAgPT4gJFR5cGVzWzBdLT57SUR9LAogICAgfSwKICAgIHsKICAgICAgICBRdWV1ZUlEICAgID0+ICRRdWV1ZXNbMV0tPntJRH0sCiAgICAgICAgUHJpb3JpdHlJRCA9PiAkUHJpb3JpdGllc1syXS0+e0lEfSwKICAgICAgICBTdGF0ZUlEICAgID0+ICRTdGF0ZXNbMV0tPntJRH0sCiAgICAgICAgU2VydmljZUlEICA9PiAkU2VydmljZXNbMV0tPntJRH0sCiAgICAgICAgU0xBSUQgICAgICA9PiAkU0xBc1syXS0+e0lEfSwKICAgICAgICBUeXBlSUQgICAgID0+ICRUeXBlc1sxXS0+e0lEfSwKICAgIH0sCiAgICB7CiAgICAgICAgUXVldWVJRCAgICA9PiAkUXVldWVzWzJdLT57SUR9LAogICAgICAgIFByaW9yaXR5SUQgPT4gJFByaW9yaXRpZXNbMl0tPntJRH0sCiAgICAgICAgU3RhdGVJRCAgICA9PiAkU3RhdGVzWzBdLT57SUR9LAogICAgICAgIFNlcnZpY2VJRCAgPT4gJFNlcnZpY2VzWzFdLT57SUR9LAogICAgICAgIFNMQUlEICAgICAgPT4gJFNMQXNbMl0tPntJRH0sCiAgICAgICAgVHlwZUlEICAgICA9PiAkVHlwZXNbMF0tPntJRH0sCiAgICB9LAogICAgewogICAgICAgIFF1ZXVlSUQgICAgPT4gJFF1ZXVlc1syXS0+e0lEfSwKICAgICAgICBQcmlvcml0eUlEID0+ICRQcmlvcml0aWVzWzBdLT57SUR9LAogICAgICAgIFN0YXRlSUQgICAgPT4gJFN0YXRlc1swXS0+e0lEfSwKICAgICAgICBTZXJ2aWNlSUQgID0+ICRTZXJ2aWNlc1sxXS0+e0lEfSwKICAgICAgICBTTEFJRCAgICAgID0+ICRTTEFzWzJdLT57SUR9LAogICAgICAgIFR5cGVJRCAgICAgPT4gJFR5cGVzWzJdLT57SUR9LAogICAgfSwKICAgIHsKICAgICAgICBRdWV1ZUlEICAgID0+ICRRdWV1ZXNbMl0tPntJRH0sCiAgICAgICAgUHJpb3JpdHlJRCA9PiAkUHJpb3JpdGllc1syXS0+e0lEfSwKICAgICAgICBTdGF0ZUlEICAgID0+ICRTdGF0ZXNbMF0tPntJRH0sCiAgICAgICAgU2VydmljZUlEICA9PiAkU2VydmljZXNbMl0tPntJRH0sCiAgICAgICAgU0xBSUQgICAgICA9PiAkU0xBc1syXS0+e0lEfSwKICAgICAgICBUeXBlSUQgICAgID0+ICRUeXBlc1sxXS0+e0lEfSwKICAgIH0sCiAgICB7CiAgICAgICAgUXVldWVJRCAgICA9PiAkUXVldWVzWzFdLT57SUR9LAogICAgICAgIFByaW9yaXR5SUQgPT4gJFByaW9yaXRpZXNbMF0tPntJRH0sCiAgICAgICAgU3RhdGVJRCAgICA9PiAkU3RhdGVzWzFdLT57SUR9LAogICAgICAgIFNlcnZpY2VJRCAgPT4gJFNlcnZpY2VzWzBdLT57SUR9LAogICAgICAgIFNMQUlEICAgICAgPT4gJFNMQXNbMl0tPntJRH0sCiAgICAgICAgVHlwZUlEICAgICA9PiAkVHlwZXNbMl0tPntJRH0sCiAgICB9LAogICAgewogICAgICAgIFF1ZXVlSUQgICAgPT4gJFF1ZXVlc1sxXS0+e0lEfSwKICAgICAgICBQcmlvcml0eUlEID0+ICRQcmlvcml0aWVzWzBdLT57SUR9LAogICAgICAgIFN0YXRlSUQgICAgPT4gJFN0YXRlc1sxXS0+e0lEfSwKICAgICAgICBTZXJ2aWNlSUQgID0+ICRTZXJ2aWNlc1swXS0+e0lEfSwKICAgICAgICBTTEFJRCAgICAgID0+ICRTTEFzWzJdLT57SUR9LAogICAgICAgIFR5cGVJRCAgICAgPT4gJFR5cGVzWzBdLT57SUR9LAogICAgfSwKICAgIHsKICAgICAgICBRdWV1ZUlEICAgID0+ICRRdWV1ZXNbMV0tPntJRH0sCiAgICAgICAgUHJpb3JpdHlJRCA9PiAkUHJpb3JpdGllc1syXS0+e0lEfSwKICAgICAgICBTdGF0ZUlEICAgID0+ICRTdGF0ZXNbMl0tPntJRH0sCiAgICAgICAgU2VydmljZUlEICA9PiAkU2VydmljZXNbMF0tPntJRH0sCiAgICAgICAgU0xBSUQgICAgICA9PiAkU0xBc1syXS0+e0lEfSwKICAgICAgICBUeXBlSUQgICAgID0+ICRUeXBlc1sxXS0+e0lEfSwKICAgIH0sCiAgICB7CiAgICAgICAgUXVldWVJRCAgICA9PiAkUXVldWVzWzJdLT57SUR9LAogICAgICAgIFByaW9yaXR5SUQgPT4gJFByaW9yaXRpZXNbMl0tPntJRH0sCiAgICAgICAgU3RhdGVJRCAgICA9PiAkU3RhdGVzWzFdLT57SUR9LAogICAgICAgIFNlcnZpY2VJRCAgPT4gJFNlcnZpY2VzWzBdLT57SUR9LAogICAgICAgIFNMQUlEICAgICAgPT4gJFNMQXNbMl0tPntJRH0sCiAgICAgICAgVHlwZUlEICAgICA9PiAkVHlwZXNbMF0tPntJRH0sCiAgICB9LAogICAgewogICAgICAgIFF1ZXVlSUQgICAgPT4gJFF1ZXVlc1swXS0+e0lEfSwKICAgICAgICBQcmlvcml0eUlEID0+ICRQcmlvcml0aWVzWzJdLT57SUR9LAogICAgICAgIFN0YXRlSUQgICAgPT4gJFN0YXRlc1swXS0+e0lEfSwKICAgICAgICBTZXJ2aWNlSUQgID0+ICRTZXJ2aWNlc1swXS0+e0lEfSwKICAgICAgICBTTEFJRCAgICAgID0+ICRTTEFzWzJdLT57SUR9LAogICAgICAgIFR5cGVJRCAgICAgPT4gJFR5cGVzWzJdLT57SUR9LAogICAgfSwKKTsKCnVuZGVmIEBUaWNrZXRJRHM7CmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CiAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgJXskVGVzdH0sCiAgICAgICAgVGl0bGUgICAgICAgID0+ICdVbml0IFRlc3QgdGlja2V0JywKICAgICAgICBDdXN0b21lck5vICAgPT4gJ1VuaXQgVGVzdCBjdXN0b21lcicsCiAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICd1bml0dGVzdEBvdG9iby5vcmcnLAogICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICBPd25lcklEICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CiAgICBwdXNoIEBUaWNrZXRJRHMsICRUaWNrZXRJRDsKCn0KCiMgQ3JlYXRlIHRlc3QgZXhwZWN0ZWQgb3V0Y29tZS4KQFRlc3RzID0gKAogICAgewogICAgICAgIEF0dHJpYnV0ZSAgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgIEV4cGVjdGVkQ291bnQgPT4gewogICAgICAgICAgICAkU2VydmljZXNbMF0tPntOYW1lfSA9PiA2LAogICAgICAgICAgICAkU2VydmljZXNbMV0tPntOYW1lfSA9PiAzLAogICAgICAgICAgICAkU2VydmljZXNbMl0tPntOYW1lfSA9PiAxLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEF0dHJpYnV0ZSAgICAgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgRXhwZWN0ZWRDb3VudCA9PiB7CiAgICAgICAgICAgICRTZXJ2aWNlc1swXS0+e0lEfSA9PiA2LAogICAgICAgICAgICAkU2VydmljZXNbMV0tPntJRH0gPT4gMywKICAgICAgICAgICAgJFNlcnZpY2VzWzJdLT57SUR9ID0+IDEsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgQXR0cmlidXRlICAgICA9PiAnU0xBJywKICAgICAgICBFeHBlY3RlZENvdW50ID0+IHsKICAgICAgICAgICAgJFNMQXNbMl0tPntOYW1lfSA9PiAxMCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBBdHRyaWJ1dGUgICAgID0+ICdTTEFJRCcsCiAgICAgICAgRXhwZWN0ZWRDb3VudCA9PiB7CiAgICAgICAgICAgICRTTEFzWzJdLT57SUR9ID0+IDEwLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEF0dHJpYnV0ZSAgICAgPT4gJ1F1ZXVlJywKICAgICAgICBFeHBlY3RlZENvdW50ID0+IHsKICAgICAgICAgICAgJFF1ZXVlc1swXS0+e05hbWV9ID0+IDIsCiAgICAgICAgICAgICRRdWV1ZXNbMV0tPntOYW1lfSA9PiA0LAogICAgICAgICAgICAkUXVldWVzWzJdLT57TmFtZX0gPT4gNCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBBdHRyaWJ1dGUgICAgID0+ICdRdWV1ZUlEJywKICAgICAgICBFeHBlY3RlZENvdW50ID0+IHsKICAgICAgICAgICAgJFF1ZXVlc1swXS0+e0lEfSA9PiAyLAogICAgICAgICAgICAkUXVldWVzWzFdLT57SUR9ID0+IDQsCiAgICAgICAgICAgICRRdWV1ZXNbMl0tPntJRH0gPT4gNCwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBBdHRyaWJ1dGUgICAgID0+ICdQcmlvcml0eScsCiAgICAgICAgRXhwZWN0ZWRDb3VudCA9PiB7CiAgICAgICAgICAgICRQcmlvcml0aWVzWzBdLT57TmFtZX0gPT4gNCwKICAgICAgICAgICAgJFByaW9yaXRpZXNbMl0tPntOYW1lfSA9PiA2LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEF0dHJpYnV0ZSAgICAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgIEV4cGVjdGVkQ291bnQgPT4gewogICAgICAgICAgICAkUHJpb3JpdGllc1swXS0+e0lEfSA9PiA0LAogICAgICAgICAgICAkUHJpb3JpdGllc1syXS0+e0lEfSA9PiA2LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEF0dHJpYnV0ZSAgICAgPT4gJ1N0YXRlJywKICAgICAgICBFeHBlY3RlZENvdW50ID0+IHsKICAgICAgICAgICAgJFN0YXRlc1swXS0+e05hbWV9ID0+IDUsCiAgICAgICAgICAgICRTdGF0ZXNbMV0tPntOYW1lfSA9PiA0LAogICAgICAgICAgICAkU3RhdGVzWzJdLT57TmFtZX0gPT4gMSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBBdHRyaWJ1dGUgICAgID0+ICdTdGF0ZUlEJywKICAgICAgICBFeHBlY3RlZENvdW50ID0+IHsKICAgICAgICAgICAgJFN0YXRlc1swXS0+e0lEfSA9PiA1LAogICAgICAgICAgICAkU3RhdGVzWzFdLT57SUR9ID0+IDQsCiAgICAgICAgICAgICRTdGF0ZXNbMl0tPntJRH0gPT4gMSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBBdHRyaWJ1dGUgICAgID0+ICdUeXBlJywKICAgICAgICBFeHBlY3RlZENvdW50ID0+IHsKICAgICAgICAgICAgJFR5cGVzWzBdLT57TmFtZX0gPT4gNCwKICAgICAgICAgICAgJFR5cGVzWzFdLT57TmFtZX0gPT4gMywKICAgICAgICAgICAgJFR5cGVzWzJdLT57TmFtZX0gPT4gMywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBBdHRyaWJ1dGUgICAgID0+ICdUeXBlSUQnLAogICAgICAgIEV4cGVjdGVkQ291bnQgPT4gewogICAgICAgICAgICAkVHlwZXNbMF0tPntJRH0gPT4gNCwKICAgICAgICAgICAgJFR5cGVzWzFdLT57SUR9ID0+IDMsCiAgICAgICAgICAgICRUeXBlc1syXS0+e0lEfSA9PiAzLAogICAgICAgIH0sCiAgICB9LAopOwoKIyBDaGVjayByZXF1aXJlZCBwYXJhbXMuCm15ICRUaWNrZXRDb3VudCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENvdW50QnlBdHRyaWJ1dGUoCiAgICBUaWNrZXRJRHMgPT4gXEBUaWNrZXRJRHMsCik7CiRTZWxmLT5GYWxzZSgKICAgICRUaWNrZXRDb3VudCwKICAgICJUaWNrZXRDb3VudEJ5QXR0cmlidXRlKCkgbmVlZCBBdHRyaWJ1dGUgcGFyYW0uIgopOwokVGlja2V0Q291bnQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDb3VudEJ5QXR0cmlidXRlKAogICAgQXR0cmlidXRlID0+ICdTZXJ2aWNlJywKICAgIFRpY2tldElEcyA9PiBbXSwKKTsKJFNlbGYtPlRydWUoCiAgICAhSXNIYXNoUmVmV2l0aERhdGEoJFRpY2tldENvdW50KSwKICAgICJUaWNrZXRDb3VudEJ5QXR0cmlidXRlKCkgbmVlZCBUaWNrZXRJRHMgYXJyYXkuIgopOwoKIyBSdW4gdmFsaWQgdGVzdHMuCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CiAgICBteSAkVGlja2V0Q291bnQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDb3VudEJ5QXR0cmlidXRlKAogICAgICAgIEF0dHJpYnV0ZSA9PiAkVGVzdC0+e0F0dHJpYnV0ZX0sCiAgICAgICAgVGlja2V0SURzID0+IFxAVGlja2V0SURzLAogICAgKTsKICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAkVGlja2V0Q291bnQsCiAgICAgICAgJFRlc3QtPntFeHBlY3RlZENvdW50fSwKICAgICAgICAiVGlja2V0Q291bnRCeUF0dHJpYnV0ZSgpIGZvciBBdHRyaWJ1dGUgJFRlc3QtPntBdHRyaWJ1dGV9IGNvcnJlY3QsIgogICAgKTsKfQoKIyBUZXN0IFRpY2tldENvdW50QnlBdHRyaWJ1dGUoKSBmdW5jdGlvbiB3aXRoIG1vcmUgdGhlbiAxMDAwIGVudHJpZXMuCkBUaWNrZXRJRHMgICA9ICggQFRpY2tldElEcywgMTAwIC4uIDExMDAgKTsKJFRpY2tldENvdW50ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q291bnRCeUF0dHJpYnV0ZSgKICAgIEF0dHJpYnV0ZSA9PiAnU2VydmljZScsCiAgICBUaWNrZXRJRHMgPT4gXEBUaWNrZXRJRHMsCik7CiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoJFRpY2tldENvdW50KSwKICAgICJUaWNrZXRDb3VudEJ5QXR0cmlidXRlKCkgZm9yIG1vcmUgdGhlbiAxMDAwIGVudHJpZXMgY29ycmVjdCIKKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/Selenium/Agent/Admin/AdminCustomerUserService.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FkbWluL0FkbWluQ3VzdG9tZXJVc2VyU2VydmljZS50CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpSZWdpc3RlckRyaXZlcjsgICAgIyBTZXQgdXAgJEtlcm5lbDo6T00gYW5kICRtYWluOjpTZWxmCnVzZSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtOwoKb3VyICRTZWxmOwoKbXkgJFNlbGVuaXVtID0gS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bS0+bmV3KCBMb2dFeGVjdXRlQ29tbWFuZEFjdGl2ZSA9PiAxICk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBEaXNhYmxlIGNoZWNrIGVtYWlsIGFkZHJlc3MuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgICAgICBWYWx1ZSA9PiAwCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBDdXN0b21lclVzZXIuCiAgICAgICAgbXkgJEN1c3RvbWVyVXNlck5hbWUgPSAiQ3VzdG9tZXJVc2VyIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJEN1c3RvbWVyVXNlcklEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyktPkN1c3RvbWVyVXNlckFkZCgKICAgICAgICAgICAgVXNlckZpcnN0bmFtZSAgPT4gJEN1c3RvbWVyVXNlck5hbWUsCiAgICAgICAgICAgIFVzZXJMYXN0bmFtZSAgID0+ICRDdXN0b21lclVzZXJOYW1lLAogICAgICAgICAgICBVc2VyQ3VzdG9tZXJJRCA9PiAkQ3VzdG9tZXJVc2VyTmFtZSwKICAgICAgICAgICAgVXNlckxvZ2luICAgICAgPT4gJEN1c3RvbWVyVXNlck5hbWUsCiAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgID0+ICRDdXN0b21lclVzZXJOYW1lIC4gJ0Bsb2NhbGhvc3QuY29tJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ3VzdG9tZXJVc2VySUQsCiAgICAgICAgICAgICJDdXN0b21lclVzZXJBZGQgLSAkQ3VzdG9tZXJVc2VySUQiLAogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgU2VydmljZS4KICAgICAgICBteSAkU2VydmljZU5hbWUgPSAnU29tZVNlcnZpY2UnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkU2VydmljZUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlQWRkKAogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnU29tZSBDb21tZW50JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICJTZXJ2aWNlQWRkIC0gJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbi4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWydhZG1pbiddLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIEFkbWluQ3VzdG9tZXJVc2VyU2VydmljZSBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5DdXN0b21lclVzZXJTZXJ2aWNlIik7CgogICAgICAgICMgQ2hlY2sgb3ZlcnZpZXcgQWRtaW5DdXN0b21lclVzZXJTZXJ2aWNlLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0ZpbHRlclNlcnZpY2VzIiwgICAgICdjc3MnICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ3VzdG9tZXJVc2VyU2VhcmNoIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDdXN0b21lcnMiLCAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlcnZpY2UiLCAgICAgICAgICAgICdjc3MnICk7CgogICAgICAgICMgQ2hlY2sgYnJlYWRjcnVtYiBvbiBPdmVydmlldyBzY3JlZW4uCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnLkJyZWFkQ3J1bWInLCAnY3NzJyApLAogICAgICAgICAgICAiQnJlYWRjcnVtYiBpcyBmb3VuZCBvbiBPdmVydmlldyBzY3JlZW4uIiwKICAgICAgICApOwoKICAgICAgICAjIEZpbHRlciBmb3Igc2VydmljZS4gSXQgaXMgYXV0byBjb21wbGV0ZSwgc3VibWl0IGlzIG5vdCBuZWNlc3NhcnkuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRmlsdGVyU2VydmljZXMiLCAnY3NzJyApLT5zZW5kX2tleXMoJFNlcnZpY2VOYW1lKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIkU2VydmljZU5hbWUiLCAnbGlua190ZXh0JyApLT5pc19kaXNwbGF5ZWQoKSwKICAgICAgICAgICAgIiRTZXJ2aWNlTmFtZSBzZXJ2aWNlIGZvdW5kIG9uIHBhZ2UiLAogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRmlsdGVyU2VydmljZXMiLCAnY3NzJyApLT5jbGVhcigpOwoKICAgICAgICAjIFRlc3Qgc2VhcmNoIGZpbHRlciBmb3IgQ3VzdG9tZXJVc2VyLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0N1c3RvbWVyVXNlclNlYXJjaCIsICdjc3MnICktPmNsZWFyKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ3VzdG9tZXJVc2VyU2VhcmNoIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRDdXN0b21lclVzZXJOYW1lKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU2VhcmNoJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEN1c3RvbWVyVXNlck5hbWUgKSA+IC0xLAogICAgICAgICAgICAiQ3VzdG9tZXJVc2VyICRDdXN0b21lclVzZXJOYW1lIGZvdW5kIG9uIHBhZ2UiLAogICAgICAgICk7CgogICAgICAgICMgQWxsb2NhdGUgdGVzdCBzZXJ2aWNlIHRvIHRlc3QgY3VzdG9tZXIgdXNlci4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdDdXN0b21lclVzZXJMb2dpbj0kQ3VzdG9tZXJVc2VyTmFtZScgKV0iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENoZWNrIGJyZWFkY3J1bWIgb24gYWxsb2NhdGUgc2NyZWVuLgogICAgICAgIG15ICRDb3VudCA9IDE7CiAgICAgICAgZm9yIG15ICRCcmVhZGNydW1iVGV4dCAoCiAgICAgICAgICAgICdNYW5hZ2UgQ3VzdG9tZXIgVXNlci1TZXJ2aWNlIFJlbGF0aW9ucycsCiAgICAgICAgICAgICdBbGxvY2F0ZSBTZXJ2aWNlcyB0byBDdXN0b21lciBVc2VyIFwnJwogICAgICAgICAgICAuICRDdXN0b21lclVzZXJOYW1lIC4gJyAnCiAgICAgICAgICAgIC4gJEN1c3RvbWVyVXNlck5hbWUgLiAnICgnCiAgICAgICAgICAgIC4gJEN1c3RvbWVyVXNlck5hbWUgLiAnKVwnJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJy5CcmVhZENydW1iIGxpOmVxKCRDb3VudCknKS50ZXh0KCkudHJpbSgpIiksCiAgICAgICAgICAgICAgICAkQnJlYWRjcnVtYlRleHQsCiAgICAgICAgICAgICAgICAiQnJlYWRjcnVtYiB0ZXh0ICckQnJlYWRjcnVtYlRleHQnIGlzIGZvdW5kIG9uIHNjcmVlbiIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRDb3VudCsrOwogICAgICAgIH0KCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEB2YWx1ZT0nJFNlcnZpY2VJRCddIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1NhdmUnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBDaGVjayB0ZXN0IGN1c3RvbWVyIHVzZXIgYWxsb2NhdGlvbiB0byB0ZXN0IHNlcnZpY2UuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICRTZXJ2aWNlTmFtZSwgJ2xpbmtfdGV4dCcgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDdXN0b21lclVzZXJTZWFyY2giLCAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0N1c3RvbWVyVXNlclNlYXJjaCIsICdjc3MnICktPnNlbmRfa2V5cygkQ3VzdG9tZXJVc2VyTmFtZSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1NlYXJjaCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2lucHV0W2NvbnRhaW5zKFxAdGl0bGUsIFwnVG9nZ2xlIGFjdGl2ZSBzdGF0ZSBmb3IgJEN1c3RvbWVyVXNlck5hbWUnICldIiktPmlzX3NlbGVjdGVkKCksCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJTZXJ2aWNlICRTZXJ2aWNlTmFtZSBpcyBhY3RpdmUgZm9yIEN1c3RvbWVyVXNlciAkQ3VzdG9tZXJVc2VyTmFtZSIsCiAgICAgICAgKSB8fCBkaWU7CgogICAgICAgICMgUmVtb3ZlIHRlc3QgY3VzdG9tZXIgdXNlciBhbGxvY2F0aW9ucyBmcm9tIHRlc3Qgc2VydmljZS4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTZWxlY3RBbGxJdGVtc1NlbGVjdGVkIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU2F2ZSddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENoZWNrIGlmIHRoZXJlIGlzIGFueSB0ZXN0IHNlcnZpY2UgYWxsb2NhdGlvbiB0b3dhcmRzIHRlc3QgY3VzdG9tZXIgdXNlcgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0N1c3RvbWVyVXNlckxvZ2luPSRDdXN0b21lclVzZXJOYW1lJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRmlsdGVyU2VydmljZXMiLCAnY3NzJyApLT5zZW5kX2tleXMoJFNlcnZpY2VOYW1lKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQHRpdGxlPVwnVG9nZ2xlIGFjdGl2ZSBzdGF0ZSBmb3IgJFNlcnZpY2VOYW1lXCddIiktPmlzX3NlbGVjdGVkKCksCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJTZXJ2aWNlICRTZXJ2aWNlTmFtZSBpcyBub3QgYWN0aXZlIGZvciBDdXN0b21lclVzZXIgJEN1c3RvbWVyVXNlck5hbWUiLAogICAgICAgICkgfHwgZGllOwoKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBEZWxldGUgY3JlYXRlZCB0ZXN0IGN1c3RvbWVyIHVzZXIuCiAgICAgICAgaWYgKCRTZXJ2aWNlSUQpIHsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkRlbGV0ZWQgU2VydmljZUN1c3RvbWVyVXNlciAtICRTZXJ2aWNlTmFtZSA8PT4gJEN1c3RvbWVyVXNlck5hbWUiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMICA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ID8iLAogICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkU2VydmljZUlEIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiRGVsZXRlZCBTZXJ2aWNlIC0gJFNlcnZpY2VOYW1lIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICgkQ3VzdG9tZXJVc2VySUQpIHsKICAgICAgICAgICAgJEN1c3RvbWVyVXNlck5hbWUgPSAkREJPYmplY3QtPlF1b3RlKCRDdXN0b21lclVzZXJOYW1lKTsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMICA9PiAiREVMRVRFIEZST00gY3VzdG9tZXJfdXNlciBXSEVSRSBjdXN0b21lcl9pZCA9ID8iLAogICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkQ3VzdG9tZXJVc2VyTmFtZSBdLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkRlbGV0ZWQgQ3VzdG9tZXJVc2VyIC0gJEN1c3RvbWVyVXNlck5hbWUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgICAgICMgTWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0LgogICAgICAgIGZvciBteSAkQ2FjaGUgKHF3KCBDdXN0b21lclVzZXIgU2VydmljZSApKSB7CiAgICAgICAgICAgICRDYWNoZU9iamVjdC0+Q2xlYW5VcCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJENhY2hlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCik7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/Selenium/Agent/Admin/AdminITSMCIPAllocate.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bTsKCm91ciAkU2VsZjsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtLT5uZXc7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsnYWRtaW4nXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZG1pbklUU01DSVBBbGxvY2F0ZSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pbklUU01DSVBBbGxvY2F0ZSIpOwoKICAgICAgICAjIGNoZWNrIGZvciBDcml0aWNhbGl0eSDihpQgSW1wYWN0IGZpZWxkcwogICAgICAgIG15IEBQcmlvcml0eSA9IChxdygxdmVyeWxvdyAybG93IDNub3JtYWwgNGhpZ2ggNXZlcnloaWdoKSk7CiAgICAgICAgZm9yIG15ICRJbXBhY3QgKEBQcmlvcml0eSkgewogICAgICAgICAgICBmb3IgbXkgJENyaXRpY2FsaXR5IChAUHJpb3JpdHkpIHsKICAgICAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjUHJpb3JpdHlJRCRJbXBhY3QtJENyaXRpY2FsaXR5IiwgJ2NzcycgKTsKICAgICAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cik7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/Selenium/Agent/Admin/AdminUser.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FkbWluL0FkbWluVXNlci50CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpSZWdpc3RlckRyaXZlcjsgICAgIyBTZXQgdXAgJEtlcm5lbDo6T00gYW5kICRtYWluOjpTZWxmCnVzZSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtOwoKb3VyICRTZWxmOwoKbXkgJFNlbGVuaXVtID0gS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bS0+bmV3KCBMb2dFeGVjdXRlQ29tbWFuZEFjdGl2ZSA9PiAxICk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBEbyBub3QgY2hlY2sgZW1haWwgYWRkcmVzc2VzLgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICAgICAgVmFsdWUgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIEVuYWJsZSBTZXJ2aWNlLgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OlNlcnZpY2UnLAogICAgICAgICAgICBWYWx1ZSA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZG1pblVzZXIgc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFkbWluVXNlcjtJbmNsdWRlSW52YWxpZD0xIik7CgogICAgICAgICMgY2hlY2sgb3ZlcnZpZXcgQWRtaW5Vc2VyCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSIsICAgICAgICAgICAgICdjc3MnICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0aGVhZCB0ciB0aCIsICdjc3MnICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0Ym9keSB0ciB0ZCIsICdjc3MnICk7CgogICAgICAgICMgQ2hlY2sgYnJlYWRjcnVtYiBvbiBPdmVydmlldyBzY3JlZW4uCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnLkJyZWFkQ3J1bWInLCAnY3NzJyApLAogICAgICAgICAgICAiQnJlYWRjcnVtYiBpcyBmb3VuZCBvbiBPdmVydmlldyBzY3JlZW4uIiwKICAgICAgICApOwoKICAgICAgICAjIENoZWNrIGZvciB0ZXN0IGFnZW50IGluIEFkbWluVXNlci4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRUZXN0VXNlckxvZ2luICkgPiAtMSwKICAgICAgICAgICAgIiRUZXN0VXNlckxvZ2luIGZvdW5kIG9uIHBhZ2UiLAogICAgICAgICk7CgogICAgICAgICMgQ2hlY2sgc2VhcmNoIGZpZWxkLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlYXJjaCIsICdjc3MnICktPnNlbmRfa2V5cygkVGVzdFVzZXJMb2dpbik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1NlYXJjaCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRlc3RVc2VyTG9naW4gKSA+IC0xLAogICAgICAgICAgICAiJFRlc3RVc2VyTG9naW4gZm91bmQgb24gcGFnZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGVjayBhZGQgYWdlbnQgcGFnZS4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWRtaW5Vc2VyO1N1YmFjdGlvbj1BZGQnICldIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgZm9yIG15ICRJRCAoCiAgICAgICAgICAgIHF3KFVzZXJGaXJzdG5hbWUgVXNlckxhc3RuYW1lIFVzZXJMb2dpbiBVc2VyRW1haWwpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjJElEIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBicmVhZGNydW1iIG9uIEFkZCBzY3JlZW4uCiAgICAgICAgbXkgJENvdW50ID0gMTsKICAgICAgICBmb3IgbXkgJEJyZWFkY3J1bWJUZXh0ICggJ0FnZW50IE1hbmFnZW1lbnQnLCAnQWRkIEFnZW50JyApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcuQnJlYWRDcnVtYiBsaTplcSgkQ291bnQpJykudGV4dCgpLnRyaW0oKSIpLAogICAgICAgICAgICAgICAgJEJyZWFkY3J1bWJUZXh0LAogICAgICAgICAgICAgICAgIkJyZWFkY3J1bWIgdGV4dCAnJEJyZWFkY3J1bWJUZXh0JyBpcyBmb3VuZCBvbiBzY3JlZW4iCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQ291bnQrKzsKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgY2xpZW50IHNpZGUgdmFsaWRhdGlvbi4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNVc2VyRmlyc3RuYW1lIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCIiKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTdWJtaXQiLCAgICAgICAgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI1VzZXJGaXJzdG5hbWUnKS5oYXNDbGFzcygnRXJyb3InKSIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJzEnLAogICAgICAgICAgICAnQ2xpZW50IHNpZGUgdmFsaWRhdGlvbiBjb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBpbnB1dCB2YWx1ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBSZWxvYWQgcGFnZS4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pblVzZXI7U3ViYWN0aW9uPUFkZCIpOwoKICAgICAgICAjIENyZWF0ZSBhIHJlYWwgdGVzdCBhZ2VudC4KICAgICAgICBteSAkUmFuZG9tSUQgICAgID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkVXNlclJhbmRvbUlEID0gJ1Rlc3RBZ2VudCcgLiAkUmFuZG9tSUQ7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjVXNlckZpcnN0bmFtZSIsICdjc3MnICktPnNlbmRfa2V5cygkVXNlclJhbmRvbUlEKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNVc2VyTGFzdG5hbWUiLCAgJ2NzcycgKS0+c2VuZF9rZXlzKCRVc2VyUmFuZG9tSUQpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1VzZXJMb2dpbiIsICAgICAnY3NzJyApLT5zZW5kX2tleXMoJFVzZXJSYW5kb21JRCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjVXNlckVtYWlsIiwgICAgICdjc3MnICktPnNlbmRfa2V5cyggJFVzZXJSYW5kb21JRCAuICdAbG9jYWxob3N0LmNvbScgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTdWJtaXQiLCAgICAgICAgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIFRlc3Qgc2VhcmNoIGZpbHRlciBieSBhZ2VudCAkVXNlclJhbmRvbUlELgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFkbWluVXNlciIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlYXJjaCIsICdjc3MnICktPmNsZWFyKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU2VhcmNoIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRVc2VyUmFuZG9tSUQpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTZWFyY2gnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBFZGl0IHJlYWwgdGVzdCBhZ2VudCB2YWx1ZXMuCiAgICAgICAgbXkgJEVkaXRSYW5kb21JRCA9ICdFZGl0ZWRUZXN0QWdlbnQnIC4gJFJhbmRvbUlEOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAkVXNlclJhbmRvbUlELCAnbGlua190ZXh0JyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2hlY2sgYnJlYWRjcnVtYiBvbiBFZGl0IHNjcmVlbi4KICAgICAgICAkQ291bnQgPSAxOwogICAgICAgIGZvciBteSAkQnJlYWRjcnVtYlRleHQgKCAnQWdlbnQgTWFuYWdlbWVudCcsICdFZGl0IEFnZW50OiAnIC4gJFVzZXJSYW5kb21JRCApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcuQnJlYWRDcnVtYiBsaTplcSgkQ291bnQpJykudGV4dCgpLnRyaW0oKSIpLAogICAgICAgICAgICAgICAgJEJyZWFkY3J1bWJUZXh0LAogICAgICAgICAgICAgICAgIkJyZWFkY3J1bWIgdGV4dCAnJEJyZWFkY3J1bWJUZXh0JyBpcyBmb3VuZCBvbiBzY3JlZW4iCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQ291bnQrKzsKICAgICAgICB9CgogICAgICAgICMgRWRpdCBzb21lIHZhbHVlcy4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNVc2VyRmlyc3RuYW1lIiwgJ2NzcycgKS0+Y2xlYXIoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNVc2VyRmlyc3RuYW1lIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRFZGl0UmFuZG9tSUQpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1VzZXJMYXN0bmFtZSIsICAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1VzZXJMYXN0bmFtZSIsICAnY3NzJyApLT5zZW5kX2tleXMoJEVkaXRSYW5kb21JRCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU3VibWl0IiwgICAgICAgICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBDaGVjayBpcyB0aGVyZSBub3RpZmljYXRpb24gYWZ0ZXIgYWdlbnQgaXMgdXBkYXRlZC4KICAgICAgICBteSAkTm90aWZpY2F0aW9uID0gJ0FnZW50IHVwZGF0ZWQhJzsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcuTWVzc2FnZUJveC5Ob3RpY2UgcDpjb250YWlucygkTm90aWZpY2F0aW9uKScpLmxlbmd0aCIpLAogICAgICAgICAgICAiJE5vdGlmaWNhdGlvbiAtIG5vdGlmaWNhdGlvbiBpcyBmb3VuZC4iCiAgICAgICAgKTsKCiAgICAgICAgIyBUZXN0IHNlYXJjaCBmaWx0ZXIgYnkgYWdlbnQgJEVkaXRSYW5kb21JRC4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTZWFyY2giLCAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlYXJjaCIsICdjc3MnICktPnNlbmRfa2V5cygkRWRpdFJhbmRvbUlEKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU2VhcmNoJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2hlY2sgbmV3IGFnZW50IHZhbHVlcy4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJFVzZXJSYW5kb21JRCwgJ2xpbmtfdGV4dCcgKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjVXNlckZpcnN0bmFtZScsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAkRWRpdFJhbmRvbUlELAogICAgICAgICAgICAiI1VzZXJGaXJzdG5hbWUgc3RvcmVkIHZhbHVlIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjVXNlckxhc3RuYW1lJywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICRFZGl0UmFuZG9tSUQsCiAgICAgICAgICAgICIjVXNlckxhc3RuYW1lIHN0b3JlZCB2YWx1ZSIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI1VzZXJMb2dpbicsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAkVXNlclJhbmRvbUlELAogICAgICAgICAgICAiI1VzZXJMb2dpbiBzdG9yZWQgdmFsdWUiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNVc2VyRW1haWwnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgIiRVc2VyUmFuZG9tSURcQGxvY2FsaG9zdC5jb20iLAogICAgICAgICAgICAiI1VzZXJFbWFpbCBzdG9yZWQgdmFsdWUiLAogICAgICAgICk7CgogICAgICAgICMgU2V0IGFkZGVkIHRlc3QgYWdlbnQgdG8gaW52YWxpZC4KICAgICAgICAkU2VsZW5pdW0tPklucHV0RmllbGRWYWx1ZVNldCgKICAgICAgICAgICAgRWxlbWVudCA9PiAnI1ZhbGlkSUQnLAogICAgICAgICAgICBWYWx1ZSAgID0+IDIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTdWJtaXQiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgVGVzdCBzZWFyY2ggZmlsdGVyIGJ5IGFnZW50ICRVc2VyUmFuZG9tSUQuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU2VhcmNoIiwgJ2NzcycgKS0+Y2xlYXIoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTZWFyY2giLCAnY3NzJyApLT5zZW5kX2tleXMoJFVzZXJSYW5kb21JRCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1NlYXJjaCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENoZWNrIGNsYXNzIG9mIGludmFsaWQgQWdlbnQgaW4gdGhlIG92ZXJ2aWV3IHRhYmxlLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRyLkludmFsaWQiLCAnY3NzJyApLAogICAgICAgICAgICAiVGhlcmUgaXMgYSBjbGFzcyAnSW52YWxpZCcgZm9yIHRlc3QgQWdlbnQiLAogICAgICAgICk7CgogICAgICAgICMgVGVzdGluZyBidWcjMTM0NjMgKGh0dHBzOi8vYnVncy5vdHJzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjMpLAogICAgICAgICMgICB1cGRhdGluZyBBZ2VudCBkYXRhLCByZW1vdmVzIGl0J3MgJ015IFF1ZXVlJyBhbmQgJ015IFNlcnZpY2VzJyBwcmVmZXJlbmNlcy4KICAgICAgICBteSAkUXVldWVOYW1lID0gJ1Rlc3RRdWV1ZScgLiAkUmFuZG9tSUQ7CiAgICAgICAgbXkgJFF1ZXVlSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICBHcm91cElEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICAgICAgICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgICAgICAgICBTaWduYXR1cmVJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICA9PiAnU2VsZW5pdW0gVGVzdCcsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFF1ZXVlSUQsCiAgICAgICAgICAgICJRdWV1ZUlEICRRdWV1ZUlEIGlzIGNyZWF0ZWQuIiwKICAgICAgICApOwoKICAgICAgICBteSAkU2VydmljZU5hbWUgPSAnVGVzdFNlcnZpY2UnIC4gJFJhbmRvbUlEOwogICAgICAgIG15ICRTZXJ2aWNlSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VBZGQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBDb21tZW50ID0+ICdTZWxlbml1bSBUZXN0JywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICJTZXJ2aWNlSUQgJFNlcnZpY2VJRCBpcyBjcmVhdGVkLiIKICAgICAgICApOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50UHJlZmVyZW5jZXMgbm90aWZpY2F0aW9uIHNldHRpbmcgc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFByZWZlcmVuY2VzO1N1YmFjdGlvbj1Hcm91cDtHcm91cD1Ob3RpZmljYXRpb25TZXR0aW5ncyIKICAgICAgICApOwoKICAgICAgICAjIFNlbGVjdCB0ZXN0IGNyZWF0ZWQgUXVldWUgYXMgJ015IFF1ZXVlJyBhbmQgdXBkYXRlIHByZWZlcmVuY2UuCiAgICAgICAgJFNlbGVuaXVtLT5JbnB1dEZpZWxkVmFsdWVTZXQoCiAgICAgICAgICAgIEVsZW1lbnQgPT4gJyNRdWV1ZUlEJywKICAgICAgICAgICAgVmFsdWUgICA9PiAkUXVldWVJRCwKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI1F1ZXVlSUQnKS5jbG9zZXN0KCcuV2lkZ2V0U2ltcGxlJykuZmluZCgnLlNldHRpbmdVcGRhdGVCb3gnKS5maW5kKCdidXR0b24nKS50cmlnZ2VyKCdjbGljaycpOyIKICAgICAgICApOwoKICAgICAgICAjIFdhaXQgZm9yIHRoZSBBSkFYIGNhbGwgdG8gZmluaXNoLgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgRWxlbWVudE1pc3NpbmcgPT4KICAgICAgICAgICAgICAgICIvL2lbY29udGFpbnMoXEBjbGFzcyxcJ2ZhIGZhLWNpcmNsZS1vLW5vdGNoIGZhLXNwaW5cJyldIgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAicmV0dXJuICFcJCgnI1F1ZXVlSUQnKS5jbG9zZXN0KCcuV2lkZ2V0U2ltcGxlJykuaGFzQ2xhc3MoJ0hhc092ZXJsYXknKSIKICAgICAgICApOwoKICAgICAgICAjIFNlbGVjdCB0ZXN0IGNyZWF0ZWQgU2VydmljZSBhcyAnTXkgU2VydmljZScgYW5kIHVwZGF0ZSBwcmVmZXJlbmNlLgogICAgICAgICRTZWxlbml1bS0+SW5wdXRGaWVsZFZhbHVlU2V0KAogICAgICAgICAgICBFbGVtZW50ID0+ICcjU2VydmljZUlEJywKICAgICAgICAgICAgVmFsdWUgICA9PiAkU2VydmljZUlELAogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjU2VydmljZUlEJykuY2xvc2VzdCgnLldpZGdldFNpbXBsZScpLmZpbmQoJy5TZXR0aW5nVXBkYXRlQm94JykuZmluZCgnYnV0dG9uJykudHJpZ2dlcignY2xpY2snKTsiCiAgICAgICAgKTsKCiAgICAgICAgIyBXYWl0IGZvciB0aGUgQUpBWCBjYWxsIHRvIGZpbmlzaC4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEVsZW1lbnRNaXNzaW5nID0+CiAgICAgICAgICAgICAgICAiLy9pW2NvbnRhaW5zKFxAY2xhc3MsXCdmYSBmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluXCcpXSIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgInJldHVybiAhXCQoJyNTZXJ2aWNlSUQnKS5jbG9zZXN0KCcuV2lkZ2V0U2ltcGxlJykuaGFzQ2xhc3MoJ0hhc092ZXJsYXknKSIKICAgICAgICApOwoKICAgICAgICAjIFJlZnJlc2ggc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRSZWZyZXNoKCk7CgogICAgICAgICMgVmVyaWZ5IHNlbGVjdGVkICdNeSBRdWV1ZScgYW5kICdNeSBTZXJ2aWNlJyBwcmVmZXJlbmNlIHZhbHVlcy4KICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnI1F1ZXVlSUQgOnNlbGVjdGVkJykudGV4dCgpLnRyaW0oKSIpLAogICAgICAgICAgICAkUXVldWVOYW1lLAogICAgICAgICAgICAiU2VsZWN0ZWQgUXVldWUgJyRRdWV1ZU5hbWUnIGlzIGluICdNeSBRdWV1ZSciLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyNTZXJ2aWNlSUQgOnNlbGVjdGVkJykudGV4dCgpLnRyaW0oKSIpLAogICAgICAgICAgICAkU2VydmljZU5hbWUsCiAgICAgICAgICAgICJTZWxlY3RlZCBTZXJ2aWNlICckU2VydmljZU5hbWUnIGlzIGluICdNeSBTZXJ2aWNlcyciLAogICAgICAgICk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQWRtaW5Vc2VyIHNjcmVlbi4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pblVzZXIiKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTZWFyY2giLCAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlYXJjaCIsICdjc3MnICktPnNlbmRfa2V5cygkVGVzdFVzZXJMb2dpbik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1NlYXJjaCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAkVGVzdFVzZXJMb2dpbiwgJ2xpbmtfdGV4dCcgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIFN1Ym1pdCBub3QgY2hhbmdlZCBBZ2VudCBkYXRhLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdCIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZ2VudFByZWZlcmVuY2VzIG5vdGlmaWNhdGlvbiBzZXR0aW5nIHNjcmVlbi4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRQcmVmZXJlbmNlcztTdWJhY3Rpb249R3JvdXA7R3JvdXA9Tm90aWZpY2F0aW9uU2V0dGluZ3MiCiAgICAgICAgKTsKCiAgICAgICAgIyBWZXJpZnkgJ015IFF1ZXVlJyBhbmQgJ015IFNlcnZpY2UnIHZhbHVlcyBhcmUgbm90IG1vZGlmaWVkLgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjUXVldWVJRCA6c2VsZWN0ZWQnKS50ZXh0KCkudHJpbSgpIiksCiAgICAgICAgICAgICRRdWV1ZU5hbWUsCiAgICAgICAgICAgICJTZWxlY3RlZCBRdWV1ZSAnJFF1ZXVlTmFtZScgaXMgaW4gJ015IFF1ZXVlJyIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnI1NlcnZpY2VJRCA6c2VsZWN0ZWQnKS50ZXh0KCkudHJpbSgpIiksCiAgICAgICAgICAgICRTZXJ2aWNlTmFtZSwKICAgICAgICAgICAgIlNlbGVjdGVkIFNlcnZpY2UgJyRTZXJ2aWNlTmFtZScgaXMgaW4gJ015IFNlcnZpY2VzJyIsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgYW5vdGhlciB0ZXN0IHVzZXIuCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4yID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4yLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbjIsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjaGVkdWxlckRCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRhZW1vbjo6U2NoZWR1bGVyREInKTsKCiAgICAgICAgZm9yIG15ICRUZXN0IChxdyhDaGFuZ2VVc2VyTG9naW4gU2V0VG9JbnZhbGlkKSkgewoKICAgICAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZG1pblVzZXIgc2NyZWVuLgogICAgICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pblVzZXIiKTsKCiAgICAgICAgICAgICMgUmVtb3ZlIHNjaGVkdWxlZCBhc3luY2hyb25vdXMgdGFza3MgZnJvbSBEQiwgYXMgdGhleSBtYXkgaW50ZXJmZXJlIHdpdGggdGVzdHMgcnVuIGxhdGVyLgogICAgICAgICAgICBteSBAQWxsVGFza3MgPSAkU2NoZWR1bGVyREJPYmplY3QtPlRhc2tMaXN0KAogICAgICAgICAgICAgICAgVHlwZSA9PiAnQXN5bmNocm9ub3VzRXhlY3V0b3InLAogICAgICAgICAgICApOwogICAgICAgICAgICBmb3IgbXkgJFRhc2sgKEBBbGxUYXNrcykgewogICAgICAgICAgICAgICAgaWYgKCAkVGFzay0+e05hbWV9IGVxICdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24tUmVtb3ZlU2Vzc2lvbkJ5VXNlcigpJyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTY2hlZHVsZXJEQk9iamVjdC0+VGFza0RlbGV0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgVGFza0lEID0+ICRUYXNrLT57VGFza0lEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICAgICAgICAgIiRUZXN0IC0gVGFza0lEICRUYXNrLT57VGFza0lEfSBpcyBkZWxldGVkIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTZWFyY2giLCAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTZWFyY2giLCAnY3NzJyApLT5zZW5kX2tleXMoJFRlc3RVc2VyTG9naW4pOwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU2VhcmNoJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICBpZiAoICRUZXN0IGVxICdDaGFuZ2VVc2VyTG9naW4nICkgewogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjVXNlciBhOmNvbnRhaW5zKCRUZXN0VXNlckxvZ2luKScpLmxlbmd0aDsiCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAkVGVzdFVzZXJMb2dpbiwgJ2xpbmtfdGV4dCcgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnI1VzZXJMb2dpbicpLmxlbmd0aDsiCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNVc2VyTG9naW4iLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgICAgICAgICAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QgLSBVc2VyTG9naW4gdmFsdWUgaXMgY29ycmVjdCIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1VzZXJMb2dpbiIsICdjc3MnICktPnNlbmRfa2V5cygnLWVkaXQnKTsKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdCIsICAgICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRUZXN0VXNlckxvZ2luIC49ICctZWRpdCc7CiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNVc2VyIGE6Y29udGFpbnMoJFRlc3RVc2VyTG9naW4pJykubGVuZ3RoOyIKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICRUZXN0VXNlckxvZ2luLCAnbGlua190ZXh0JyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjVmFsaWRJRCcpLmxlbmd0aDsiCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNWYWxpZElEIiwgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgICAgICAiJFRlc3QgLSBWYWxpZElEIHZhbHVlIGlzIGNvcnJlY3QiLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPklucHV0RmllbGRWYWx1ZVNldCgKICAgICAgICAgICAgICAgICAgICBFbGVtZW50ID0+ICcjVmFsaWRJRCcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICA9PiAyLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTdWJtaXQiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEBBbGxUYXNrcyA9ICRTY2hlZHVsZXJEQk9iamVjdC0+VGFza0xpc3QoCiAgICAgICAgICAgICAgICBUeXBlID0+ICdBc3luY2hyb25vdXNFeGVjdXRvcicsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBmb3IgbXkgJFRhc2sgKEBBbGxUYXNrcykgewogICAgICAgICAgICAgICAgaWYgKCAkVGFzay0+e05hbWV9IGVxICdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24tUmVtb3ZlU2Vzc2lvbkJ5VXNlcigpJyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJFRhc2stPntUYXNrSUR9LAogICAgICAgICAgICAgICAgICAgICAgICAiJFRlc3QgLSBUYXNrIChOYW1lICdSZW1vdmVTZXNzaW9uQnlVc2VyKCknLCBUYXNrSUQgJFRhc2stPntUYXNrSUR9KSBpcyBmb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2NoZWR1bGVyREJPYmplY3QtPlRhc2tEZWxldGUoCiAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tJRCA9PiAkVGFzay0+e1Rhc2tJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICIkVGVzdCAtIFRhc2tJRCAkVGFzay0+e1Rhc2tJRH0gaXMgZGVsZXRlZCIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgICMgQ2xlYW51cC4KCiAgICAgICAgIyBEZWxldGUgUXVldWUuCiAgICAgICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CiAgICAgICAgbXkgJFN1Y2Nlc3MgID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBwZXJzb25hbF9xdWV1ZXMgV0hFUkUgcXVldWVfaWQgPSAkUXVldWVJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJEZWxldGUgcGVyc29uYWwgcXVldWVzIC0gJFF1ZXVlSUQiLAogICAgICAgICk7CiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHF1ZXVlIFdIRVJFIGlkID0gJFF1ZXVlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiRGVsZXRlIFF1ZXVlIC0gJFF1ZXVlSUQiLAogICAgICAgICk7CgogICAgICAgICMgRGVsZXRlIFNlcnZpY2UuCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHBlcnNvbmFsX3NlcnZpY2VzIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkRlbGV0ZSBwZXJzb25hbCBzZXJ2aWNlcyAtICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSAkU2VydmljZUlEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkRlbGV0ZSBTZXJ2aWNlIC0gJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QuCiAgICAgICAgZm9yIG15ICRDYWNoZSAocXcoUXVldWUgU2VydmljZSkpIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgICAgICBUeXBlID0+ICRDYWNoZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgfQoKKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/Selenium/Agent/AgentStatistics/Add.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FnZW50U3RhdGlzdGljcy9BZGQudAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bTsKCm91ciAkU2VsZjsKCm15ICRTZWxlbml1bSA9IEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0tPm5ldyggTG9nRXhlY3V0ZUNvbW1hbmRBY3RpdmUgPT4gMSApOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgbXkgJEhlbHBlciAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwogICAgICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKICAgICAgICBteSAkU0xBT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKICAgICAgICBteSAkU3RhdHNPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0cycpOwogICAgICAgIG15ICRDb25maWdPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSBAU2VydmljZUlEczsKICAgICAgICBteSBAU0xBSURzOwoKICAgICAgICAjIEFkZCB0ZXN0IHNlcnZpY2VzIGFuZCBTTEFzLgogICAgICAgIGZvciAoIDEgLi4gNSApIHsKICAgICAgICAgICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAiVGVzdFNlcnZpY2UgLSAiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKCiAgICAgICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgICJTZXJ2aWNlICRTZXJ2aWNlSUQgaGFzIGJlZW4gY3JlYXRlZC4iLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnPERFRkFVTFQ+JywKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBBY3RpdmUgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAU2VydmljZUlEcywgJFNlcnZpY2VJRDsKCiAgICAgICAgICAgIG15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgICAgICAgICAgICAgIE5hbWUgICAgPT4gIlRlc3RTTEEgLSAiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKCiAgICAgICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgICAgIFR5cGVJRCA9PiAxLAoKICAgICAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNMQUlELAogICAgICAgICAgICAgICAgIlNMQSAkU0xBSUQgaGFzIGJlZW4gY3JlYXRlZC4iLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBTTEFJRHMsICRTTEFJRDsKCiAgICAgICAgfQoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHVzZXIgYW5kIGxvZ2luLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdzdGF0cycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRDb25maWdPYmplY3QtPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBDaGVjayBhZGQgc3RhdGlzdGljcyBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1BZGQiKTsKCiAgICAgICAgZm9yIG15ICRTdGF0aXN0aWNzIChxdyhEeW5hbWljTWF0cml4IER5bmFtaWNMaXN0IFN0YXRpYykpIHsKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgICAgICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnYVtkYXRhLXN0YXRpc3RpYy1wcmVzZWxlY3Rpb249JFN0YXRpc3RpY3NdJykubGVuZ3RoOyIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJ2FbZGF0YS1zdGF0aXN0aWMtcHJlc2VsZWN0aW9uPSRTdGF0aXN0aWNzXScpLmxlbmd0aDsiKSwKICAgICAgICAgICAgICAgICJUaGVyZSBpcyBhIGxpbmsgZm9yIGFkZGluZyAnJFN0YXRpc3RpY3MnIHN0YXRpc3RpY3MiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgQFRlc3RzID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgID0+ICdTdGF0aXN0aWMgRHluYW1pY01hdHJpeCcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpLAogICAgICAgICAgICAgICAgT2JqZWN0ICAgICAgICAgICA9PiAnS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpUaWNrZXQnLAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnRHluYW1pY01hdHJpeCcsCiAgICAgICAgICAgICAgICBYQXhpcyAgICAgICAgICAgID0+ICdYQXhpc1NlcnZpY2VJRHMnLAogICAgICAgICAgICAgICAgWUF4aXMgICAgICAgICAgICA9PiAnWUF4aXNTTEFJRHMnLAogICAgICAgICAgICAgICAgUmVzdHJpY3Rpb25JRCAgICA9PiAnUmVzdHJpY3Rpb25zUXVldWVJRHMnLAogICAgICAgICAgICAgICAgUmVzdHJpY3Rpb252YWx1ZSA9PiAzLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICA9PiAnU3RhdGlzdGljIER5bmFtaWNNYXRyaXgnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgICAgICAgICAgICAgIE9iamVjdCAgICAgICAgICAgID0+ICdLZXJuZWw6OlN5c3RlbTo6U3RhdHM6OkR5bmFtaWM6OlRpY2tldCcsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnRHluYW1pY01hdHJpeCcsCiAgICAgICAgICAgICAgICBYQXhpcyAgICAgICAgICAgICA9PiAnWEF4aXNDcmVhdGVUaW1lJywKICAgICAgICAgICAgICAgIFlBeGlzICAgICAgICAgICAgID0+ICdZQXhpc1NMQUlEcycsCiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbklEICAgICA9PiAnUmVzdHJpY3Rpb25zUXVldWVJRHMnLAogICAgICAgICAgICAgICAgUmVzdHJpY3Rpb252YWx1ZSAgPT4gMywKICAgICAgICAgICAgICAgIFNlbGVjdGVkVGltZUZpZWxkID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgPT4gJ1N0YXRpc3RpYyAtIFRpY2tldEFjY291bnRlZFRpbWUnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgICAgICAgICAgICAgIE9iamVjdCAgICAgICAgICAgPT4gJ0tlcm5lbDo6U3lzdGVtOjpTdGF0czo6RHluYW1pYzo6VGlja2V0QWNjb3VudGVkVGltZScsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdEeW5hbWljTWF0cml4JywKICAgICAgICAgICAgICAgIFhBeGlzICAgICAgICAgICAgPT4gJ1hBeGlzS2luZHNPZlJlcG9ydGluZycsCiAgICAgICAgICAgICAgICBZQXhpcyAgICAgICAgICAgID0+ICdZQXhpc1NMQUlEcycsCiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbklEICAgID0+ICdSZXN0cmljdGlvbnNTZXJ2aWNlSURzJywKICAgICAgICAgICAgICAgIFJlc3RyaWN0aW9udmFsdWUgPT4gJFNlcnZpY2VJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgPT4gJ1N0YXRpc3RpYyAtIFRpY2tldFNvbHV0aW9uUmVzcG9uc2VUaW1lJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgICAgICBPYmplY3QgICAgICAgICAgID0+ICdLZXJuZWw6OlN5c3RlbTo6U3RhdHM6OkR5bmFtaWM6OlRpY2tldFNvbHV0aW9uUmVzcG9uc2VUaW1lJywKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0R5bmFtaWNNYXRyaXgnLAogICAgICAgICAgICAgICAgWEF4aXMgICAgICAgICAgICA9PiAnWEF4aXNLaW5kc09mUmVwb3J0aW5nJywKICAgICAgICAgICAgICAgIFlBeGlzICAgICAgICAgICAgPT4gJ1lBeGlzU0xBSURzJywKICAgICAgICAgICAgICAgIFJlc3RyaWN0aW9uSUQgICAgPT4gJ1Jlc3RyaWN0aW9uc1NlcnZpY2VJRHMnLAogICAgICAgICAgICAgICAgUmVzdHJpY3Rpb252YWx1ZSA9PiAkU2VydmljZUlEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICAgID0+ICdTdGF0aXN0aWMgLSBUaWNrZXRMaXN0JyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgICAgICBPYmplY3QgICAgICAgICAgICAgPT4gJ0tlcm5lbDo6U3lzdGVtOjpTdGF0czo6RHluYW1pYzo6VGlja2V0TGlzdCcsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgPT4gJ0R5bmFtaWNMaXN0JywKICAgICAgICAgICAgICAgIFlBeGlzICAgICAgICAgICAgICA9PiAnWUF4aXNPcmRlckJ5JywKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgICA9PiAnVGlja2V0TnVtYmVyJywKICAgICAgICAgICAgICAgIFJlc3RyaWN0aW9uSUQgICAgICA9PiAnUmVzdHJpY3Rpb25zU2VydmljZUlEcycsCiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbnZhbHVlICAgPT4gJFNlcnZpY2VJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGVja0ludmFsaWRGb3JtYXQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSBAU3RhdHNGb3JtYXREeW5hbWljTWF0cml4ID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGb3JtYXQgICAgICAgICA9PiAnUHJpbnQnLAogICAgICAgICAgICAgICAgUHJldmlld0NvbnRlbnQgPT4gJ1ByZXZpZXdDb250ZW50UHJpbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGb3JtYXQgICAgICAgICA9PiAnRDM6OlN0YWNrZWRBcmVhQ2hhcnQnLAogICAgICAgICAgICAgICAgUHJldmlld0NvbnRlbnQgPT4gJ1ByZXZpZXdDb250ZW50RDNTdGFja2VkQXJlYUNoYXJ0JywKCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZvcm1hdCAgICAgICAgID0+ICdEMzo6TGluZUNoYXJ0JywKICAgICAgICAgICAgICAgIFByZXZpZXdDb250ZW50ID0+ICdQcmV2aWV3Q29udGVudEQzTGluZUNoYXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRm9ybWF0ICAgICAgICAgPT4gJ0QzOjpCYXJDaGFydCcsCiAgICAgICAgICAgICAgICBQcmV2aWV3Q29udGVudCA9PiAnUHJldmlld0NvbnRlbnREM0JhckNoYXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBteSBAU3RhdHNGb3JtYXREeW5hbWljTGlzdCA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRm9ybWF0ICAgICAgICAgPT4gJ1ByaW50JywKICAgICAgICAgICAgICAgIFByZXZpZXdDb250ZW50ID0+ICdQcmV2aWV3Q29udGVudFByaW50JywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIEFkZCBuZXcgc3RhdGlzdGljcy4KICAgICAgICBmb3IgbXkgJFN0YXRzRGF0YSAoQFRlc3RzKSB7CgogICAgICAgICAgICAjIEdvIHRvIGFkZCBzdGF0aXN0aWNzIHNjcmVlbi4KICAgICAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1BZGQiKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBkYXRhLXN0YXRpc3RpYy1wcmVzZWxlY3Rpb24sIFwnJFN0YXRzRGF0YS0+e1R5cGV9XCcgKV0iKS0+Y2xpY2soKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNUaXRsZSIpLmxlbmd0aDsnICk7CgogICAgICAgICAgICAjIENoZWNrIHRpdGxlIG9mIHRoZSBwYWdlIChzZWUgYnVnICMxMzk0MikKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5nZXRfdGl0bGUoKSwKICAgICAgICAgICAgICAgICdBZGQgTmV3IFN0YXRpc3RpYyAtIFN0YXRpc3RpY3MgLSAnIC4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9kdWN0TmFtZScpLAogICAgICAgICAgICAgICAgIkNoZWNrIHRpdGxlIG9mIHRoZSBwYWdlIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgU2V0IHZhbHVlcyBmb3IgbmV3IHN0YXRpc3RpY3MgLSBHZW5lcmFsIFNwZWNpZmljYXRpb25zLgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNUaXRsZSIsICdjc3MnICktPnNlbmRfa2V5cyggJFN0YXRzRGF0YS0+e1RpdGxlfSApOwogICAgICAgICAgICBteSAkRGVzY3JpcHRpb24gPSAnRGVzY3JpcHRpb24gJyAuICRTdGF0c0RhdGEtPntUaXRsZX07CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0Rlc2NyaXB0aW9uIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICRTZWxlbml1bS0+SW5wdXRGaWVsZFZhbHVlU2V0KAogICAgICAgICAgICAgICAgRWxlbWVudCA9PiAnI09iamVjdE1vZHVsZScsCiAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICRTdGF0c0RhdGEtPntPYmplY3R9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU2F2ZSddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgIyBDaGVjayBYLWF4aXMgY29uZmlndXJhdGlvbiBkaWFsb2cuCiAgICAgICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRSZWZyZXNoKCk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoJyQoIi5FZGl0WEF4aXMiKS5jbGljaygpOycpOwogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAgICAgJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiLkRpYWxvZy5Nb2RhbCIpLmxlbmd0aCAmJiAkKCIjRGlhbG9nQnV0dG9uMSIpLmxlbmd0aDsnCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICRTdGF0c0RhdGEtPntPYmplY3R9IG5lICdLZXJuZWw6OlN5c3RlbTo6U3RhdHM6OkR5bmFtaWM6OlRpY2tldExpc3QnICkgewogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5JbnB1dEZpZWxkVmFsdWVTZXQoCiAgICAgICAgICAgICAgICAgICAgRWxlbWVudCA9PiAnI0VkaXREaWFsb2cgc2VsZWN0JywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICRTdGF0c0RhdGEtPntYQXhpc30sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgU2V0IGludmFsaWQgZGF0ZSBmb3IgQ3JlYXRlVGltZSAoMzEuMDYuKS4KICAgICAgICAgICAgICAgICMgU2VlIGJ1ZyAjMTM5MzggKGh0dHBzOi8vYnVncy5vdHJzLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5MzgpLgogICAgICAgICAgICAgICAgaWYgKCAkU3RhdHNEYXRhLT57WEF4aXN9IGVxICdYQXhpc0NyZWF0ZVRpbWUnICkgewogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+SW5wdXRGaWVsZFZhbHVlU2V0KAogICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50ID0+ICcjWEF4aXNDcmVhdGVUaW1lU3RvcE1vbnRoJywKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICA9PiA2LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5JbnB1dEZpZWxkVmFsdWVTZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgPT4gJyNYQXhpc0NyZWF0ZVRpbWVTdG9wRGF5JywKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICA9PiAzMSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0RpYWxvZ0J1dHRvbjEiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgISQoIi5EaWFsb2cuTW9kYWwiKS5sZW5ndGg7JyApOwoKICAgICAgICAgICAgIyBDaGVjayBlcnJvciBtZXNzYWdlIGlmIHRoZXJlIGlzIHNldCB3cm9uZyBpbnZhbGlkIGRhdGUgZm9yIHgtYXhpcwogICAgICAgICAgICBpZiAoICRTdGF0c0RhdGEtPntYQXhpc30gJiYgJFN0YXRzRGF0YS0+e1hBeGlzfSBlcSAnWEF4aXNDcmVhdGVUaW1lJyApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJy5QcmV2aWV3IHAuRXJyb3InKS50ZXh0KCkudHJpbSgpOyIpLAogICAgICAgICAgICAgICAgICAgICJDcmVhdGVUaW1lOiBUaGUgc2VsZWN0ZWQgZGF0ZSBpcyBub3QgdmFsaWQuIiwKICAgICAgICAgICAgICAgICAgICAiVGhlcmUgaXMgbWVzc2FnZSBmb3IgaW52YWxpZCBkYXRlIGZvciBDcmVhdGVUaW1lIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIuRWRpdFhBeGlzIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIi5EaWFsb2cuTW9kYWwiKS5sZW5ndGggJiYgJCgiI0RpYWxvZ0J1dHRvbjEiKS5sZW5ndGg7JwogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPklucHV0RmllbGRWYWx1ZVNldCgKICAgICAgICAgICAgICAgICAgICBFbGVtZW50ID0+ICcjWEF4aXNDcmVhdGVUaW1lU3RvcE1vbnRoJywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgID0+IDEyLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+SW5wdXRGaWVsZFZhbHVlU2V0KAogICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgPT4gJyNYQXhpc0NyZWF0ZVRpbWVTdG9wRGF5JywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgID0+IDMxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEaWFsb2dCdXR0b24xIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAhJCgiLkRpYWxvZy5Nb2RhbCIpLmxlbmd0aDsnICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQ2hlY2sgWS1heGlzIGNvbmZpZ3VyYXRpb24gZGlhbG9nLgogICAgICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkUmVmcmVzaCgpOwogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCckKCIuRWRpdFlBeGlzIikuY2xpY2soKTsnKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIuRGlhbG9nLk1vZGFsIikubGVuZ3RoOycgKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gJCgiI0VkaXREaWFsb2cgc2VsZWN0IikubGVuZ3RoICYmICQoIiNEaWFsb2dCdXR0b24xIikubGVuZ3RoOycgKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+SW5wdXRGaWVsZFZhbHVlU2V0KAogICAgICAgICAgICAgICAgRWxlbWVudCA9PiAnI0VkaXREaWFsb2cgc2VsZWN0JywKICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gJFN0YXRzRGF0YS0+e1lBeGlzfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggJFN0YXRzRGF0YS0+e09iamVjdH0gZXEgJ0tlcm5lbDo6U3lzdGVtOjpTdGF0czo6RHluYW1pYzo6VGlja2V0TGlzdCcgKSB7CgogICAgICAgICAgICAgICAgIyBXYWl0IGZvciBsb2FkIHNlbGVjdGVkIFlBeGlzLgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjJFN0YXRzRGF0YS0+e1lBeGlzfScpLmxlbmd0aDsiCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgU2VsZWN0IG9yZGVyIGJ5IG9wdGlvbi4KICAgICAgICAgICAgICAgICRTZWxlbml1bS0+SW5wdXRGaWVsZFZhbHVlU2V0KAogICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgPT4gIiNFZGl0RGlhbG9nICMkU3RhdHNEYXRhLT57WUF4aXN9IiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICRTdGF0c0RhdGEtPntPcmRlckJ5fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGlhbG9nQnV0dG9uMSIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAhJCgiLkRpYWxvZy5Nb2RhbCIpLmxlbmd0aDsnICk7CgogICAgICAgICAgICAjIENoZWNrIFJlc3RyaWN0aW9ucyBjb25maWd1cmF0aW9uIGRpYWxvZy4KICAgICAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZFJlZnJlc2goKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgnJCgiLkVkaXRSZXN0cmljdGlvbnMiKS5jbGljaygpOycpOwogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAgICAgJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiLkRpYWxvZy5Nb2RhbCIpLmxlbmd0aCAmJiAkKCIjRWRpdERpYWxvZyBzZWxlY3QiKS5sZW5ndGg7JwogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGVuaXVtLT5JbnB1dEZpZWxkVmFsdWVTZXQoCiAgICAgICAgICAgICAgICBFbGVtZW50ID0+ICcjRWRpdERpYWxvZyBzZWxlY3QnLAogICAgICAgICAgICAgICAgVmFsdWUgICA9PiAkU3RhdHNEYXRhLT57UmVzdHJpY3Rpb25JRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIFdhaXQgZm9yIGxvYWQgc2VsZWN0ZWQgUmVzdHJpY3Rpb24uCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjJFN0YXRzRGF0YS0+e1Jlc3RyaWN0aW9uSUR9JykubGVuZ3RoOyIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgQWRkIHJlc3RyaWN0aW9uLgogICAgICAgICAgICAkU2VsZW5pdW0tPklucHV0RmllbGRWYWx1ZVNldCgKICAgICAgICAgICAgICAgIEVsZW1lbnQgPT4gIiNFZGl0RGlhbG9nICMkU3RhdHNEYXRhLT57UmVzdHJpY3Rpb25JRH0iLAogICAgICAgICAgICAgICAgVmFsdWUgICA9PiAkU3RhdHNEYXRhLT57UmVzdHJpY3Rpb252YWx1ZX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEaWFsb2dCdXR0b24xIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICEkKCIuRGlhbG9nLk1vZGFsIikubGVuZ3RoOycgKTsKCiAgICAgICAgICAgICMgQ2hhbmdlIHByZXZpZXcgZm9ybWF0IHRvIFByaW50LgogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnYnV0dG9uW2RhdGEtZm9ybWF0PVByaW50XScpLmNsaWNrKCk7Iik7CiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICAgICAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjUHJldmlld0NvbnRlbnRQcmludCIpLmNzcygiZGlzcGxheSIpID09PSAiYmxvY2siOycKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjUHJldmlld0NvbnRlbnRQcmludCcpLmNzcygnZGlzcGxheScpOyIpIGVxICdibG9jaycsCiAgICAgICAgICAgICAgICAiUHJpbnQgZm9ybWF0IGlzIGRpc3BsYXllZCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSBAU3RhdHNGb3JtYXQgPSBAU3RhdHNGb3JtYXREeW5hbWljTWF0cml4OwoKICAgICAgICAgICAgaWYgKCAkU3RhdHNEYXRhLT57VHlwZX0gZXEgJ0R5bmFtaWNMaXN0JyApIHsKICAgICAgICAgICAgICAgIEBTdGF0c0Zvcm1hdCA9IEBTdGF0c0Zvcm1hdER5bmFtaWNMaXN0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgbXkgJFN0YXRzRm9ybWF0IChAU3RhdHNGb3JtYXQpIHsKCiAgICAgICAgICAgICAgICAjIENoYW5nZSBwcmV2aWV3IGZvcm1hdC4KICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCdidXR0b25bZGF0YS1mb3JtYXQ9XCIkU3RhdHNGb3JtYXQtPntGb3JtYXR9XCJdJykuY2xpY2soKTsiKTsKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnIyRTdGF0c0Zvcm1hdC0+e1ByZXZpZXdDb250ZW50fScpLmNzcygnZGlzcGxheScpID09PSAnYmxvY2snOyIKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjJFN0YXRzRm9ybWF0LT57UHJldmlld0NvbnRlbnR9JykuY3NzKCdkaXNwbGF5Jyk7IikgZXEKICAgICAgICAgICAgICAgICAgICAgICAgJ2Jsb2NrJywKICAgICAgICAgICAgICAgICAgICAiU3RhY2tlZEFyZWEgZm9ybWF0IGlzIGRpc3BsYXllZCIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENoZWNrIHRoZSBvcHRpb25zIGZvciB0aGUgY2FjaGUgZmllbGQgaW4gdGhlIGdlbmVyYWwgc2VjdGlvbi4KICAgICAgICAgICAgaWYgKCAkU3RhdHNEYXRhLT57U2VsZWN0ZWRUaW1lRmllbGR9ICkgewoKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJyNDYWNoZSBvcHRpb25bdmFsdWU9XCIxXCJdJykudmFsKCkgPT0gMSAmJiBcJCgnI0NhY2hlIG9wdGlvblt2YWx1ZT1cIjFcIl0nKVswXS5pbm5lckhUTUwgPT0gJ1llcyc7IgogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgJ0ZvdW5kIGVsZW1lbnQgIlllcyIgaW4gQ2FjaGUgdGhlIHNlbGVjdCBmaWVsZC4nLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjQ2FjaGUgb3B0aW9uW3ZhbHVlPVwiMVwiXScpLnZhbCgpID09IDE7IiksCiAgICAgICAgICAgICAgICAgICAgJ0ZvdW5kIG5vIGVsZW1lbnQgIlllcyIgaW4gdGhlIENhY2hlIHNlbGVjdCBmaWVsZC4nLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBTYXZlIGFuZCBmaW5pc2ggdGVzdCBzdGF0aXN0aWNzLgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTYXZlQW5kRmluaXNoIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgIyBTb3J0IGRlY3JlYXNpbmcgYnkgU3RhdHNJRC4KICAgICAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPU92ZXJ2aWV3O0RpcmVjdGlvbj1ERVNDO09yZGVyQnk9SUQ7U3RhcnRIaXQ9MSIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgR2V0IHN0YXRzIElEcy4KICAgICAgICAgICAgbXkgJFN0YXRzSURzID0gJFN0YXRzT2JqZWN0LT5HZXRTdGF0c0xpc3QoCiAgICAgICAgICAgICAgICBBY2Nlc3NSdyA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRDb3VudCAgICAgICA9IHNjYWxhciBAeyRTdGF0c0lEc307CiAgICAgICAgICAgIG15ICRTdGF0c0lETGFzdCA9ICRTdGF0c0lEcy0+WyAkQ291bnQgLSAxIF07CgogICAgICAgICAgICAjIENoZWNrIGZvciBjcmVhdGVkIHN0YXRzIG9uIG92ZXJ2aWV3IHNjcmVlbi4KICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFN0YXRzRGF0YS0+e1RpdGxlfSApID4gLTEsCiAgICAgICAgICAgICAgICAiVGVzdCBzdGF0aXN0aWMgaXMgY3JlYXRlZCAtICRTdGF0c0RhdGEtPntUaXRsZX0gIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBDaGVjayBoYW5kbGluZyBvZiBpbnZhbGlkIGZvcm1hdHMgaW4gdGhlIGVkaXQgc2NyZWVuLgogICAgICAgICAgICBpZiAoICRTdGF0c0RhdGEtPntDaGVja0ludmFsaWRGb3JtYXR9ICkgewogICAgICAgICAgICAgICAgbXkgJFN0YXQgPSAkU3RhdHNPYmplY3QtPlN0YXRzR2V0KAogICAgICAgICAgICAgICAgICAgIFN0YXRJRCA9PiAkU3RhdHNJRExhc3QsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgUHJlcGFyZSBzdGF0IGRhdGEgZm9yIGFuIHVwZGF0ZS4KICAgICAgICAgICAgICAgIG15ICVEYXRhID0gKAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgICAgICA9PiAkU3RhdC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgPT4gJFN0YXQtPntEZXNjcmlwdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgVmFsaWQgICAgICAgICAgICAgICAgID0+ICRTdGF0LT57VmFsaWR9LAogICAgICAgICAgICAgICAgICAgIFRpbWVab25lICAgICAgICAgICAgICA9PiAkU3RhdC0+e1RpbWVab25lfSwKICAgICAgICAgICAgICAgICAgICBTdW1Sb3cgICAgICAgICAgICAgICAgPT4gJFN0YXQtPntTdW1Sb3d9LAogICAgICAgICAgICAgICAgICAgIFN1bUNvbCAgICAgICAgICAgICAgICA9PiAkU3RhdC0+e1N1bUNvbH0sCiAgICAgICAgICAgICAgICAgICAgQ2FjaGUgICAgICAgICAgICAgICAgID0+ICRTdGF0LT57Q2FjaGV9LAogICAgICAgICAgICAgICAgICAgIFNob3dBc0Rhc2hib2FyZFdpZGdldCA9PiAkU3RhdC0+e1Nob3dBc0Rhc2hib2FyZFdpZGdldH0sCiAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiAgICAgICAgICAgID0+ICRTdGF0LT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICAgICAgRm9ybWF0ICAgICAgICAgICAgICAgID0+IFsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgSW52YWxpZCBmb3JtYXQuCiAgICAgICAgICAgICAgICAgICAgICAgICdEMzo6QmFyQ2hhcnQgIj48YnIgLz4nLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFN0YXRzT2JqZWN0LT5TdGF0c1VwZGF0ZSgKICAgICAgICAgICAgICAgICAgICBTdGF0SUQgPT4gJFN0YXRzSURMYXN0LAogICAgICAgICAgICAgICAgICAgIEhhc2ggICA9PiBcJURhdGEsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgJFN1Y2Nlc3MgLy8gMCwKICAgICAgICAgICAgICAgICAgICAnU3RhdHNVcGRhdGUoKSAtIGFkZCBpbnZhbGlkIGZvcm1hdCcKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBHbyB0byB0aGUgc3RhdCBlZGl0IHNjcmVlbi4KICAgICAgICAgICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50U3RhdGlzdGljcztTdWJhY3Rpb249RWRpdDtTdGF0SUQ9JFN0YXRzSURMYXN0IgogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSBidXR0b24gY29udGFpbnMgZXhwZWN0ZWQgZm9ybWF0IGF0dHJpYnV0ZSB2YWx1ZS4KICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCdyZXR1cm4gJCgiYnV0dG9uLlN3aXRjaFByZXZpZXdGb3JtYXQiKS5kYXRhKCJmb3JtYXQiKScpIC8vICcnLAogICAgICAgICAgICAgICAgICAgICdEMzo6QmFyQ2hhcnQgIj48YnIgLz4nLAogICAgICAgICAgICAgICAgICAgICdQcmV2aWV3IGJ1dHRvbiBmb3JtYXQgYXR0cmlidXRlJwogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIEdvIGJhY2sgdG8gdGhlIHN0YXRzIG92ZXJ2aWV3IHNjcmVlbi4KICAgICAgICAgICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50U3RhdGlzdGljcztTdWJhY3Rpb249T3ZlcnZpZXc7RGlyZWN0aW9uPURFU0M7T3JkZXJCeT1JRDtTdGFydEhpdD0xIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBEZWxldGUgY3JlYXRlZCB0ZXN0IHN0YXRpc3RpY3MuCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoJ3dpbmRvdy5Db3JlLkFwcC5QYWdlTG9hZENvbXBsZXRlID0gZmFsc2U7Jyk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50U3RhdGlzdGljcztTdWJhY3Rpb249RGVsZXRlQWN0aW9uO1N0YXRJRD0kU3RhdHNJRExhc3RcJyApXSIKICAgICAgICAgICAgKS0+Y2xpY2soKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggQWxlcnRQcmVzZW50ID0+IDEgKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5hY2NlcHRfYWxlcnQoKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgICAgICdyZXR1cm4gdHlwZW9mKENvcmUpID09ICJvYmplY3QiICYmIHR5cGVvZihDb3JlLkFwcCkgPT0gIm9iamVjdCIgJiYgQ29yZS5BcHAuUGFnZUxvYWRDb21wbGV0ZScKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICAgICAicmV0dXJuICFcJCgnYVtocmVmKj1cIkFjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPUVkaXQ7U3RhdElEPSRTdGF0c0lETGFzdFwiXScpLmxlbmd0aDsiCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgIlN0YXRzRGF0YSBzdGF0aXN0aWMgaXMgZGVsZXRlZCAtICRTdGF0c0RhdGEtPntUaXRsZX0gIgogICAgICAgICAgICApIHx8IGRpZTsKICAgICAgICB9CgogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIENsZWFuIHVwIHRlc3QgZGF0YS4KICAgICAgICBmb3IgbXkgJFNMQUlEIChAU0xBSURzKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTZXJ2aWNlU2xhIC0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2xhIFdIRVJFIGlkID0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTTEFEZWxldGUgLSAkU0xBSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKEBTZXJ2aWNlSURzKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9jdXN0b21lcl91c2VyIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTZXJ2aWNlQ3VzdG9tZXJVc2VyIGRlbGV0ZWQgLSAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkRlbGV0ZWQgU2VydmljZSAtICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgICAgICMgTWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0LgogICAgICAgIGZvciBteSAkQ2FjaGUgKAogICAgICAgICAgICBxdyAoU2VydmljZSBTTEEgU3RhdHMpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRDYWNoZU9iamVjdC0+Q2xlYW5VcCggVHlwZSA9PiAkQ2FjaGUgKTsKICAgICAgICB9CiAgICB9Cik7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/Selenium/Agent/AgentStatistics/Import.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FnZW50U3RhdGlzdGljcy9JbXBvcnQudAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2UgdjUuMjQ7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpSZWdpc3RlckRyaXZlcjsgICAgIyBTZXQgdXAgJFNlbGYgYW5kICRLZXJuZWw6Ok9NCnVzZSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtOwoKb3VyICRTZWxmOwoKbXkgJFNlbGVuaXVtID0gS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bS0+bmV3KCBMb2dFeGVjdXRlQ29tbWFuZEFjdGl2ZSA9PiAxICk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewogICAgICAgIG15ICRIZWxwZXIgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKICAgICAgICBteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CiAgICAgICAgbXkgJFNMQU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyk7CgogICAgICAgIG15ICRDb25maWcgPSB7CgogICAgICAgICAgICAjIFNlcnZpY2UgZGF0YQogICAgICAgICAgICBTZXJ2aWNlcyA9PiBbCiAgICAgICAgICAgICAgICB7IE5hbWUgPT4gIlRlc3RTZXJ2aWNlIC0gIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCkgfSwKICAgICAgICAgICAgICAgIHsgTmFtZSA9PiAiVGVzdFNlcnZpY2UgLSAiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSB9LAogICAgICAgICAgICBdLAoKICAgICAgICAgICAgIyBTTEEgZGF0YQogICAgICAgICAgICBTTEFzID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUZXN0U0xBIC0gJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Rlc3RTTEEgLSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfTsKCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIEFkZCBTZXJ2aWNlcy4KICAgICAgICBteSBAU2VydmljZUlEczsKICAgICAgICBTRVJWSUNFOgogICAgICAgIGZvciBteSAkU2VydmljZSAoICRDb25maWctPntTZXJ2aWNlc30tPkAqICkgewoKICAgICAgICAgICAgbmV4dCBTRVJWSUNFIHVubGVzcyAkU2VydmljZTsKICAgICAgICAgICAgbmV4dCBTRVJWSUNFIHVubGVzcyAkU2VydmljZS0+JSo7CgogICAgICAgICAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgICAgICAgICAleyRTZXJ2aWNlfSwKCiAgICAgICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAiU2VydmljZSAkU2VydmljZUlEIGhhcyBiZWVuIGNyZWF0ZWQuIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBBZGQgc2VydmljZSBhcyBkZWZhdWx0IHNlcnZpY2UgZm9yIGFsbCBjdXN0b21lcnMuCiAgICAgICAgICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJzxERUZBVUxUPicsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBwdXNoIEBTZXJ2aWNlSURzLCAkU2VydmljZUlEOwogICAgICAgIH0KCiAgICAgICAgIyBBZGQgU0xBcyBhbmQgY29ubmVjdCB0aGVtIHdpdGggdGhlIFNlcnZpY2VzLgogICAgICAgIG15IEBTTEFJRHM7CiAgICAgICAgU0xBOgogICAgICAgIGZvciBteSAkU0xBICggQHsgJENvbmZpZy0+e1NMQXN9IH0gKSB7CgogICAgICAgICAgICBuZXh0IFNMQSB1bmxlc3MgJFNMQTsKICAgICAgICAgICAgbmV4dCBTTEEgdW5sZXNzICRTTEEtPiUqOwoKICAgICAgICAgICAgbXkgJFNMQUlEID0gJFNMQU9iamVjdC0+U0xBQWRkKAogICAgICAgICAgICAgICAgJXskU0xBfSwKCiAgICAgICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgICAgIFR5cGVJRCA9PiAxLAoKICAgICAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTTEFJRCwKICAgICAgICAgICAgICAgICJTTEEgJFNMQUlEIGhhcyBiZWVuIGNyZWF0ZWQuIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBAU0xBSURzLCAkU0xBSUQ7CiAgICAgICAgfQoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHVzZXIgYW5kIGxvZ2luLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdzdGF0cycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NjcmlwdEFsaWFzJyk7CiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1JbXBvcnQiKTsKCiAgICAgICAgIyBJbXBvcnQgdGVzdCBzZWxlbml1bSBzdGF0aXN0aWMuCiAgICAgICAgbXkgJExvY2F0aW9uTm90RXhpc3RpbmdPYmplY3QgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0hvbWUnKQogICAgICAgICAgICAuICIvc2NyaXB0cy90ZXN0L3NhbXBsZS9TdGF0cy9TdGF0cy5TdGF0aWMuTm90RXhpc3RpbmcueG1sIjsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNGaWxlIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRMb2NhdGlvbk5vdEV4aXN0aW5nT2JqZWN0KTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J0ltcG9ydCddW1xAdHlwZT0nc3VibWl0J10iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcuRGlhbG9nLk1vZGFsICNEaWFsb2dCdXR0b24xJykubGVuZ3RoOyIKICAgICAgICApOwoKICAgICAgICAjIENvbmZpcm0gSlMgZXJyb3IuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGlhbG9nQnV0dG9uMSIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gIVwkKCcuRGlhbG9nLk1vZGFsJykubGVuZ3RoOyIgKTsKCiAgICAgICAgIyBWZXJpZnkgZXJyb3IgY2xhc3MuCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI0ZpbGUuRXJyb3InKS5sZW5ndGg7IgogICAgICAgICAgICApLAogICAgICAgICAgICAnMScsCiAgICAgICAgICAgICdJbXBvcnQgZmlsZSBmaWVsZCBoYXMgY2xhc3MgZXJyb3InLAogICAgICAgICk7CgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50U3RhdGlzdGljcztTdWJhY3Rpb249SW1wb3J0Iik7CgogICAgICAgICMgSW1wb3J0IHRlc3Qgc2VsZW5pdW0gc3RhdGlzdGljLgogICAgICAgIG15ICRMb2NhdGlvbiA9ICRDb25maWdPYmplY3QtPkdldCgnSG9tZScpCiAgICAgICAgICAgIC4gIi9zY3JpcHRzL3Rlc3Qvc2FtcGxlL1N0YXRzL1N0YXRzLlRpY2tldE92ZXJ2aWV3LmRlLnhtbCI7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRmlsZSIsICdjc3MnICktPnNlbmRfa2V5cygkTG9jYXRpb24pOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nSW1wb3J0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ3JlYXRlIHBhcmFtcyBmb3IgaW1wb3J0IHRlc3Qgc3RhdHMuCiAgICAgICAgbXkgJVN0YXRzVmFsdWVzID0gKAogICAgICAgICAgICBUaXRsZSAgICAgICA9PiAnw5xiZXJibGljayDDvGJlciBhbGxlIFRpY2tldHMgaW0gU3lzdGVtJywKICAgICAgICAgICAgT2JqZWN0ICAgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdBa3R1ZWxsZXIgU3RhdHVzIGFsbGVyIGltIFN5c3RlbSBiZWZpbmRsaWNoZXIgVGlja2V0cyBvaG5lIFplaXRiZXNjaHLDpG5rdW5nLicsCiAgICAgICAgICAgIEZvcm1hdCAgICAgID0+ICdEMzo6QmFyQ2hhcnQnLAogICAgICAgICk7CgogICAgICAgICMgQ2hlY2sgZm9yIHRoZSBpbXBvcnRlZCB2YWx1ZXMgb24gdGVzdCBzdGF0LgogICAgICAgIGZvciBteSAkU3RhdHNWYWx1ZSAoIHNvcnQga2V5cyAlU3RhdHNWYWx1ZXMgKSB7CiAgICAgICAgICAgICRTZWxlbml1bS0+Y29udGVudF9jb250YWlucygKICAgICAgICAgICAgICAgICRTdGF0c1ZhbHVlc3skU3RhdHNWYWx1ZX0sCiAgICAgICAgICAgICAgICAiZm91bmQgZXhwZWN0ZWQgcGFyYW0gJFN0YXRzVmFsdWUgZm9yIGltcG9ydGVkIHN0YXQgLSAkU3RhdHNWYWx1ZXN7JFN0YXRzVmFsdWV9IgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZ2VudFN0YXRpc3RpY3MgT3ZlcnZpZXcgc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPU92ZXJ2aWV3O0RpcmVjdGlvbj1ERVNDO09yZGVyQnk9SUQ7U3RhcnRIaXQ9MTsiCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFN0YXRzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRzJyk7CgogICAgICAgICMgR2V0IHN0YXRzIElEcy4KICAgICAgICBteSAkU3RhdHNJRHMgPSAkU3RhdHNPYmplY3QtPkdldFN0YXRzTGlzdCgKICAgICAgICAgICAgQWNjZXNzUncgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSAkQ291bnQgICAgICAgPSBzY2FsYXIgQHskU3RhdHNJRHN9OwogICAgICAgIG15ICRTdGF0c0lETGFzdCA9ICRTdGF0c0lEcy0+WyAkQ291bnQgLSAxIF07CgogICAgICAgICMgQ2hlY2sgZm9yIGltcG9ydGVkIHN0YXRzIG9uIG92ZXJ2aWV3IHNjcmVlbi4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRTdGF0c1ZhbHVlc3tUaXRsZX0gKSA+IC0xLAogICAgICAgICAgICAiSW1wb3J0ZWQgc3RhdCAkU3RhdHNWYWx1ZXN7VGl0bGV9IC0gZm91bmQgb24gb3ZlcnZpZXcgc2NyZWVuIgogICAgICAgICk7CgogICAgICAgICMgR28gdG8gaW1wb3J0ZWQgc3RhdCB0byBydW4gaXQuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1FZGl0O1N0YXRJRD0kU3RhdHNJRExhc3RcJyApXSIpCiAgICAgICAgICAgIC0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENoYW5nZSBwcmV2aWV3IGZvcm1hdCB0byBQcmludC4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bY29udGFpbnMoXEBkYXRhLWZvcm1hdCwgXCdQcmludCcpXSIpLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNQcmV2aWV3Q29udGVudFByaW50OnZpc2libGUnKS5sZW5ndGg7IgogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyNQcmV2aWV3Q29udGVudFByaW50JykuY3NzKCdkaXNwbGF5JykiKSBlcSAnYmxvY2snLAogICAgICAgICAgICAiUHJpbnQgZm9ybWF0IGlzIGRpc3BsYXllZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjUHJldmlld0NvbnRlbnREM0JhckNoYXJ0JykuY3NzKCdkaXNwbGF5JykiKSBlcSAnbm9uZScsCiAgICAgICAgICAgICJCYXIgZm9ybWF0IGlzIG5vdCBkaXNwbGF5ZWQiLAogICAgICAgICk7CgogICAgICAgICMgQ2hhbmdlIHByZXZpZXcgZm9ybWF0IHRvIEJhci4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bY29udGFpbnMoXEBkYXRhLWZvcm1hdCwgXCdEMzo6QmFyQ2hhcnQnKV0iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjUHJldmlld0NvbnRlbnREM0JhckNoYXJ0OnZpc2libGUnKS5sZW5ndGg7IgogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyNQcmV2aWV3Q29udGVudEQzQmFyQ2hhcnQnKS5jc3MoJ2Rpc3BsYXknKTsiKSBlcSAnYmxvY2snLAogICAgICAgICAgICAiQmFyIGZvcm1hdCBpcyBkaXNwbGF5ZWQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnI1ByZXZpZXdDb250ZW50UHJpbnQnKS5jc3MoJ2Rpc3BsYXknKSIpIGVxICdub25lJywKICAgICAgICAgICAgIlByaW50IGZvcm1hdCBpcyBub3QgZGlzcGxheWVkIiwKICAgICAgICApOwoKICAgICAgICAjIFRvZ2dsZSBHZW5lcmFsIFNwZWNpZmljYXRpb24uCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGFyaWEtY29udHJvbHMsIFwnQ29yZV9VSV9BdXRvZ2VuZXJhdGVkSURfMCcpXSIpLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcuV2lkZ2V0U2ltcGxlOmNvbnRhaW5zKEdlbmVyYWwgU3BlY2lmaWNhdGlvbikuRXhwYW5kZWQnKS5sZW5ndGg7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjVGl0bGUiLCAnY3NzJyApLT5zZW5kX2tleXMoIiAtIFVwZGF0ZWQiKTsKCiAgICAgICAgIyBDaGVjayBYLWF4aXMgY29uZmlndXJhdGlvbiBkaWFsb2cuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIuRWRpdFhBeGlzIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnLkRpYWxvZy5Nb2RhbCAjRWRpdERpYWxvZyBhLlJlbW92ZUJ1dHRvbiBpJykubGVuZ3RoOyIgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRWRpdERpYWxvZyBhLlJlbW92ZUJ1dHRvbiBpIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnLkRpYWxvZy5Nb2RhbCAjRWRpdERpYWxvZyAuVGFibGVMaWtlLkFkZDp2aXNpYmxlJykubGVuZ3RoOyIgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5JbnB1dEZpZWxkVmFsdWVTZXQoCiAgICAgICAgICAgIEVsZW1lbnQgPT4gJyNFZGl0RGlhbG9nIHNlbGVjdCcsCiAgICAgICAgICAgIFZhbHVlICAgPT4gJ1hBeGlzU2VydmljZUlEcycsCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEaWFsb2dCdXR0b24xIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiAhXCQoJy5EaWFsb2cuTW9kYWwnKS5sZW5ndGg7IiApOwoKICAgICAgICAjIENoZWNrIFktYXhpcyBjb25maWd1cmF0aW9uIGRpYWxvZy4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi5FZGl0WUF4aXMiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcuRGlhbG9nLk1vZGFsICNFZGl0RGlhbG9nIGEuUmVtb3ZlQnV0dG9uIGknKS5sZW5ndGg7IiApOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNFZGl0RGlhbG9nIGEuUmVtb3ZlQnV0dG9uIGkiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcuRGlhbG9nLk1vZGFsICNFZGl0RGlhbG9nIC5UYWJsZUxpa2UuQWRkOnZpc2libGUnKS5sZW5ndGg7IiApOwoKICAgICAgICAkU2VsZW5pdW0tPklucHV0RmllbGRWYWx1ZVNldCgKICAgICAgICAgICAgRWxlbWVudCA9PiAnI0VkaXREaWFsb2cgc2VsZWN0JywKICAgICAgICAgICAgVmFsdWUgICA9PiAnWUF4aXNTTEFJRHMnLAogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGlhbG9nQnV0dG9uMSIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gIVwkKCcuRGlhbG9nLk1vZGFsJykubGVuZ3RoOyIgKTsKCiAgICAgICAgIyBDaGVjayBSZXN0cmljdGlvbnMgY29uZmlndXJhdGlvbiBkaWFsb2cuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vc3Bhbltjb250YWlucyguLFwnRmlsdGVyXCcpXSIpLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcuRGlhbG9nLk1vZGFsJykubGVuZ3RoOyIgKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0VkaXREaWFsb2cgc2VsZWN0JykubGVuZ3RoOyIgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5JbnB1dEZpZWxkVmFsdWVTZXQoCiAgICAgICAgICAgIEVsZW1lbnQgPT4gJyNFZGl0RGlhbG9nIHNlbGVjdCcsCiAgICAgICAgICAgIFZhbHVlICAgPT4gJ1Jlc3RyaWN0aW9uc1F1ZXVlSURzJywKICAgICAgICApOwoKICAgICAgICAjIFdhaXQgZm9yIGxvYWQgc2VsZWN0ZWQgUmVzdHJpY3Rpb24gLSBRdWV1ZUlEcy4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiAkKCIjUmVzdHJpY3Rpb25zUXVldWVJRHMiKS5sZW5ndGg7JyApOwoKICAgICAgICAjIEFkZCByZXN0cmljdGlvbiBwZXIgUXVldWUgLSBKdW5rLgogICAgICAgICRTZWxlbml1bS0+SW5wdXRGaWVsZFZhbHVlU2V0KAogICAgICAgICAgICBFbGVtZW50ID0+ICcjRWRpdERpYWxvZyAjUmVzdHJpY3Rpb25zUXVldWVJRHMnLAogICAgICAgICAgICBWYWx1ZSAgID0+IDMsCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEaWFsb2dCdXR0b24xIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiAhXCQoJy5EaWFsb2cuTW9kYWwnKS5sZW5ndGg7IiApOwoKICAgICAgICAjIFNhdmUgYW5kIGZpbmlzaCBlZGl0LgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQG5hbWU9J1NhdmVBbmRGaW5pc2gnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBTb3J0IGRlY3JlYXNpbmcgYnkgU3RhdHNJRC4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1PdmVydmlldztEaXJlY3Rpb249REVTQztPcmRlckJ5PUlEO1N0YXJ0SGl0PTEiCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgaW1wb3J0ZWQgdGVzdCBzdGF0cy4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgKICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50U3RhdGlzdGljcztTdWJhY3Rpb249RGVsZXRlQWN0aW9uO1N0YXRJRD0kU3RhdHNJRExhc3RcJyldIgogICAgICAgICktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggQWxlcnRQcmVzZW50ID0+IDEgKTsKICAgICAgICAkU2VsZW5pdW0tPmFjY2VwdF9hbGVydCgpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICdyZXR1cm4gdHlwZW9mKENvcmUpID09ICJvYmplY3QiICYmIHR5cGVvZihDb3JlLkFwcCkgPT0gIm9iamVjdCIgJiYgQ29yZS5BcHAuUGFnZUxvYWRDb21wbGV0ZTsnCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiAhXCQoJ2FbaHJlZio9XCJBY3Rpb249QWdlbnRTdGF0aXN0aWNzO1N1YmFjdGlvbj1FZGl0O1N0YXRJRD0kU3RhdHNJRExhc3RcIl0nKS5sZW5ndGg7IgogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIkFjdGlvbj1BZ2VudFN0YXRpc3RpY3M7U3ViYWN0aW9uPUVkaXQ7U3RhdElEPSRTdGF0c0lETGFzdCIgKSA9PSAtMSwKICAgICAgICAgICAgIlRlc3Qgc3RhdGlzdGljIGlzIGRlbGV0ZWQgLSAkU3RhdHNJRExhc3QgIgogICAgICAgICk7CgogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIENsZWFuIHVwIHRlc3QgZGF0YS4KICAgICAgICBmb3IgbXkgJFNMQUlEIChAU0xBSURzKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTZXJ2aWNlU2xhIC0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2xhIFdIRVJFIGlkID0gJFNMQUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTTEFEZWxldGUgLSAkU0xBSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKEBTZXJ2aWNlSURzKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9jdXN0b21lcl91c2VyIFdIRVJFIHNlcnZpY2VfaWQgPSAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJTZXJ2aWNlQ3VzdG9tZXJVc2VyIGRlbGV0ZWQgLSAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkRlbGV0ZWQgU2VydmljZSAtICRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgICAgICMgTWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0LgogICAgICAgIGZvciBteSAkQ2FjaGUgKHF3KFNlcnZpY2UgU0xBIFN0YXRzKSkgewogICAgICAgICAgICAkQ2FjaGVPYmplY3QtPkNsZWFuVXAoIFR5cGUgPT4gJENhY2hlICk7CiAgICAgICAgfQogICAgfQopOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/Selenium/Agent/AgentTicketActionCommon/AgentTicketFreeText.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FnZW50VGlja2V0QWN0aW9uQ29tbW9uL0FnZW50VGlja2V0RnJlZVRleHQudAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2UgdjUuMjQ7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpSZWdpc3RlckRyaXZlcjsgICAgIyBzZXQgdXAgJFNlbGYgYW5kICRLZXJuZWw6Ok9NCnVzZSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtOwoKb3VyICRTZWxmOwoKbXkgJFNlbGVuaXVtID0gS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bS0+bmV3KCBMb2dFeGVjdXRlQ29tbWFuZEFjdGl2ZSA9PiAxICk7CgojIENyZWF0ZSBsb2NhbCBmdW5jdGlvbiBmb3Igd2FpdCBvbiBBSkFYIHVwZGF0ZS4Kc3ViIFdhaXRGb3JBSkFYIHsKICAgIHJldHVybgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAhJCgic3Bhbi5BSkFYTG9hZGVyOnZpc2libGUiKS5sZW5ndGgnCiAgICAgICAgKTsKfQoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKICAgICAgICBteSAkVGlja2V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgICAgICBteSAkUXVldWVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwogICAgICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKICAgICAgICBteSAkU0xBT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKICAgICAgICBteSAkU3RhdGVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpOwogICAgICAgIG15ICREQk9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CiAgICAgICAgbXkgJEhlbHBlciAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICBteSAkUmFuZG9tSUQgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRTdWNjZXNzOwoKICAgICAgICAjIERvIG5vdCBjaGVjayBSaWNoVGV4dC4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnRnJvbnRlbmQ6OlJpY2hUZXh0JywKICAgICAgICAgICAgVmFsdWUgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIEVuYWJsZSB0aWNrZXQgcmVzcG9uc2libGUgZmVhdHVyZS4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpSZXNwb25zaWJsZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmFibGUgdGlja2V0IHNlcnZpY2UgZmVhdHVyZS4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IGN1c3RvbWVyIHVzZXIuCiAgICAgICAgbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKQogICAgICAgICAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgdXNlci4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICMgR2V0IHRlc3QgdXNlciBJRC4KICAgICAgICBteSAkVGVzdFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHRpY2tldC4KICAgICAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnVGl0bGUnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgICAgICAgICAgQ3VzdG9tZXJJRCAgID0+ICdTZWxlbml1bUN1c3RvbWVyJywKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIE93bmVySUQgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgICAgICJUaWNrZXRJRCAkVGlja2V0SUQgaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBxdWV1ZS4KICAgICAgICBteSAkUXVldWVOYW1lID0gJ1F1ZXVlJyAuICRSYW5kb21JRDsKICAgICAgICBteSAkUXVldWVJRCAgID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICBHcm91cElEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICAgICAgICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgICAgICAgICBTaWduYXR1cmVJRCAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgID0+ICdTb21lIGNvbW1lbnQnLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkUXVldWVJRCwKICAgICAgICAgICAgIlF1ZXVlSUQgJFF1ZXVlSUQgaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyAtLS0KICAgICAgICAjIElUU01Db3JlCiAgICAgICAgIyAtLS0KCiAgICAgICAgIyBHZXQgdGhlIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZy4KICAgICAgICBteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBCdWlsZCBhIGxvb2t1cCBoYXNoLgogICAgICAgIG15ICVTZXJ2aWNlVHlwZU5hbWUySUQgPSByZXZlcnNlICV7JFNlcnZpY2VUeXBlTGlzdH07CgogICAgICAgICMgR2V0IHRoZSBsaXN0IG9mIHNsYSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZy4KICAgICAgICBteSAkU0xBVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAogICAgICAgICk7CgogICAgICAgICMgQnVpbGQgYSBsb29rdXAgaGFzaC4KICAgICAgICBteSAlU0xBVHlwZU5hbWUySUQgPSByZXZlcnNlICV7JFNMQVR5cGVMaXN0fTsKCiAgICAgICAgIyAtLS0KCiAgICAgICAgIyBDcmVhdGUgdGVzdCBzZXJ2aWNlLgogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICdTZXJ2aWNlJyAuICRSYW5kb21JRDsKICAgICAgICBteSAkU2VydmljZUlEICAgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAkU2VydmljZVR5cGVOYW1lMklEe1RyYWluaW5nfSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICAgICAgIlNlcnZpY2VJRCAkU2VydmljZUlEIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgQWRkIG1lbWJlciBjdXN0b21lciB1c2VyIHRvIHRoZSB0ZXN0IHNlcnZpY2UuCiAgICAgICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICAgICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBTTEEuCiAgICAgICAgbXkgJFNMQU5hbWUgPSAnU0xBJyAuICRSYW5kb21JRDsKICAgICAgICBteSAkU0xBSUQgICA9ICRTTEFPYmplY3QtPlNMQUFkZCgKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBbJFNlcnZpY2VJRF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNMQU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gJFNMQVR5cGVOYW1lMklEe090aGVyfSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAiU0xBSUQgJFNMQUlEIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgR2V0ICdvcGVuJyB0eXBlIElELgogICAgICAgIG15ICVMaXN0VHlwZSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVUeXBlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICBteSAlUmV2ZXJzZUxpc3RUeXBlID0gcmV2ZXJzZSAlTGlzdFR5cGU7CiAgICAgICAgbXkgJE9wZW5JRCAgICAgICAgICA9ICRSZXZlcnNlTGlzdFR5cGV7Im9wZW4ifTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBzdGF0ZSAodHlwZSAnb3BlbicpLgogICAgICAgIG15ICRTdGF0ZU5hbWUgPSAnU3RhdGUnIC4gJFJhbmRvbUlEOwogICAgICAgIG15ICRTdGF0ZUlEICAgPSAkU3RhdGVPYmplY3QtPlN0YXRlQWRkKAogICAgICAgICAgICBOYW1lICAgID0+ICRTdGF0ZU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICA9PiAkT3BlbklELAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN0YXRlSUQsCiAgICAgICAgICAgICJTdGF0ZUlEICRTdGF0ZUlEIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgTG9naW4gYXMgdGVzdCB1c2VyLgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgRGVmaW5lIGZpZWxkIElEcyBhbmQgZnJvbnRlbmQgbW9kdWxlcy4KICAgICAgICBteSAlRnJlZVRleHRGaWVsZHMgPSAoCiAgICAgICAgICAgIE5vTWFuZGF0b3J5ID0+IHsKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICAgICAgTmV3UXVldWVJRCAgICAgICA9PiAnUXVldWUnLAogICAgICAgICAgICAgICAgTmV3T3duZXJJRCAgICAgICA9PiAnT3duZXInLAogICAgICAgICAgICAgICAgTmV3UmVzcG9uc2libGVJRCA9PiAnUmVzcG9uc2libGUnLAogICAgICAgICAgICAgICAgTmV3U3RhdGVJRCAgICAgICA9PiAnU3RhdGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBNYW5kYXRvcnkgPT4gewogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICAgICA9PiAnU2VydmljZU1hbmRhdG9yeScsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgICAgID0+ICdTTEFNYW5kYXRvcnknLAogICAgICAgICAgICAgICAgTmV3UXVldWVJRCAgICAgICA9PiAnUXVldWVNYW5kYXRvcnknLAogICAgICAgICAgICAgICAgTmV3T3duZXJJRCAgICAgICA9PiAnT3duZXJNYW5kYXRvcnknLAogICAgICAgICAgICAgICAgTmV3UmVzcG9uc2libGVJRCA9PiAnUmVzcG9uc2libGVNYW5kYXRvcnknLAogICAgICAgICAgICAgICAgTmV3U3RhdGVJRCAgICAgICA9PiAnU3RhdGVNYW5kYXRvcnknLAogICAgICAgICAgICB9CiAgICAgICAgKTsKCiAgICAgICAgbXkgQE1hbmRhdG9yeVRlc3RzID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdEaXNhYmxlIE5vTWFuZGF0b3J5IGFuZCBNYW5kYXRvcnkgZmllbGRzLCBjaGVjayBOb01hbmRhdG9yeSBmaWVsZCBJRHMnLAogICAgICAgICAgICAgICAgQ2hlY2tGaWVsZHMgICA9PiAnTm9NYW5kYXRvcnknLAogICAgICAgICAgICAgICAgTm9NYW5kYXRvcnkgICA9PiAwLAogICAgICAgICAgICAgICAgTWFuZGF0b3J5ICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXhwZWN0ZWRFeGlzdCA9PiAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdFbmFibGUgTm9NYW5kYXRvcnkgYW5kIGRpc2FibGUgTWFuZGF0b3J5IGZpZWxkcywgY2hlY2sgTm9NYW5kYXRvcnkgZmllbGQgSURzJywKICAgICAgICAgICAgICAgIENoZWNrRmllbGRzICAgPT4gJ05vTWFuZGF0b3J5JywKICAgICAgICAgICAgICAgIE5vTWFuZGF0b3J5ICAgPT4gMSwKICAgICAgICAgICAgICAgIE1hbmRhdG9yeSAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEV4cGVjdGVkRXhpc3QgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAnRGlzYWJsZSBOb01hbmRhdG9yeSBhbmQgZW5hYmxlIE1hbmRhdG9yeSBmaWVsZHMsIGNoZWNrIE1hbmRhdG9yeSBmaWVsZCBJRHMnLAogICAgICAgICAgICAgICAgQ2hlY2tGaWVsZHMgICA9PiAnTWFuZGF0b3J5JywKICAgICAgICAgICAgICAgIE5vTWFuZGF0b3J5ICAgPT4gMCwKICAgICAgICAgICAgICAgIE1hbmRhdG9yeSAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEV4cGVjdGVkRXhpc3QgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAnRW5hYmxlIE5vTWFuZGF0b3J5IGFuZCBNYW5kYXRvcnkgZmllbGRzLCBjaGVjayBNYW5kYXRvcnkgZmllbGQgSURzJywKICAgICAgICAgICAgICAgIENoZWNrRmllbGRzICAgPT4gJ01hbmRhdG9yeScsCiAgICAgICAgICAgICAgICBOb01hbmRhdG9yeSAgID0+IDEsCiAgICAgICAgICAgICAgICBNYW5kYXRvcnkgICAgID0+IDEsCiAgICAgICAgICAgICAgICBFeHBlY3RlZEV4aXN0ID0+IDEsCiAgICAgICAgICAgIH0KICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJFRlc3QgKEBNYW5kYXRvcnlUZXN0cykgewoKICAgICAgICAgICAgc3VidGVzdCAiVGVzdCBjYXNlIGZvciAnbWFuZGF0b3J5JzogJFRlc3QtPntOYW1lfSIgPT4gc3ViIHsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJE5vTWFuZGF0b3J5RmllbGQgKCB2YWx1ZXMgJEZyZWVUZXh0RmllbGRze05vTWFuZGF0b3J5fS0+JSogKSB7CgogICAgICAgICAgICAgICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldEZyZWVUZXh0IyMjJE5vTWFuZGF0b3J5RmllbGQiLAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e05vTWFuZGF0b3J5fSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZvciBteSAkTWFuZGF0b3J5RmllbGQgKCB2YWx1ZXMgJXsgJEZyZWVUZXh0RmllbGRze01hbmRhdG9yeX0gfSApIHsKCiAgICAgICAgICAgICAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0RnJlZVRleHQjIyMkTWFuZGF0b3J5RmllbGQiLAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+e01hbmRhdG9yeX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIE5hdmlnYXRlIHRvIHpvb20gdmlldyBvZiBjcmVhdGVkIHRlc3QgdGlja2V0LgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRUaWNrZXRab29tO1RpY2tldElEPSRUaWNrZXRJRCIpOwoKICAgICAgICAgICAgICAgICMgV2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQuCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiI7JyApOwoKICAgICAgICAgICAgICAgICMgRm9yY2Ugc3ViIG1lbnVzIHRvIGJlIHZpc2libGUgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBjbGljayBvbmUgb2YgdGhlIGxpbmtzLgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNuYXYtTWlzY2VsbGFuZW91cyB1bCcpLmNzcygnaGVpZ2h0JywgJ2F1dG8nKTsiKTsKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjbmF2LU1pc2NlbGxhbmVvdXMgdWwnKS5jc3MoJ29wYWNpdHknLCAnMScpOyIpOwogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiBcJCgnI25hdi1NaXNjZWxsYW5lb3VzIHVsJykuY3NzKCdoZWlnaHQnKSAhPT0gJzBweCcgJiYgXCQoJyNuYXYtTWlzY2VsbGFuZW91cyB1bCcpLmNzcygnb3BhY2l0eScpID09ICcxJzsiCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgQ2xpY2sgb24gJ0ZyZWUgRmllbGRzJyBhbmQgc3dpdGNoIHdpbmRvdy4KICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudFRpY2tldEZyZWVUZXh0O1RpY2tldElEPSRUaWNrZXRJRCcgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICAgICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAgICAgICAgICMgV2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIuQ2FuY2VsQ2xvc2VQb3B1cCIpLmxlbmd0aDsnICk7CgogICAgICAgICAgICAgICAgIyBHZXQgTm9NYW5kYXRvcnkvTWFuZGF0b3J5IGZpZWxkcyBmb3IgZXhpc3QgY2hlY2tpbmcuCiAgICAgICAgICAgICAgICBteSAkQ2hlY2tGaWVsZHMgPSAkVGVzdC0+e0NoZWNrRmllbGRzfTsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJEZpZWxkSUQgKCBzb3J0IGtleXMgJXsgJEZyZWVUZXh0RmllbGRzeyRDaGVja0ZpZWxkc30gfSApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkVGVzdC0+e0V4cGVjdGVkRXhpc3R9ID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiBcJCgnIyRGaWVsZElEJykubGVuZ3RoOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmllbGRJRCAkRmllbGRJRCBkb2Vzbid0IGV4aXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjJEZpZWxkSUQnKS5sZW5ndGg7IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmllbGRJRCAkRmllbGRJRCBleGlzdHMiLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRDaGVja0ZpZWxkcyBlcSAnTWFuZGF0b3J5JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJ2xhYmVsW2Zvcj0kRmllbGRJRF0uTWFuZGF0b3J5JykubGVuZ3RoOyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpZWxkSUQgJEZpZWxkSUQgaXMgbWFuZGF0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBDbG9zZSB0aGUgd2luZG93IGFuZCBzd2l0Y2ggYmFjayB0byB0aGUgZmlyc3Qgc2NyZWVuLgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIuQ2FuY2VsQ2xvc2VQb3B1cCIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBEZWZpbmUgZmllbGQgdmFsdWVzLgogICAgICAgIG15ICVTZXRGcmVlVGV4dEZpZWxkcyA9ICgKICAgICAgICAgICAgU2VydmljZUlEICAgICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICBTTEFJRCAgICAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgTmV3UXVldWVJRCAgICAgICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgTmV3T3duZXJJRCAgICAgICA9PiAkVGVzdFVzZXJJRCwKICAgICAgICAgICAgTmV3UmVzcG9uc2libGVJRCA9PiAkVGVzdFVzZXJJRCwKICAgICAgICAgICAgTmV3U3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICApOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIHpvb20gdmlldyBvZiBjcmVhdGVkIHRlc3QgdGlja2V0LgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD0kVGlja2V0SUQiKTsKCiAgICAgICAgIyBXYWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZC4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiI7JyApOwoKICAgICAgICAjIEZvcmNlIHN1YiBtZW51cyB0byBiZSB2aXNpYmxlIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gY2xpY2sgb25lIG9mIHRoZSBsaW5rcy4KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI25hdi1NaXNjZWxsYW5lb3VzIHVsJykuY3NzKCdoZWlnaHQnLCAnYXV0bycpOyIpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjbmF2LU1pc2NlbGxhbmVvdXMgdWwnKS5jc3MoJ29wYWNpdHknLCAnMScpOyIpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI25hdi1NaXNjZWxsYW5lb3VzIHVsJykuY3NzKCdoZWlnaHQnKSAhPT0gJzBweCcgJiYgXCQoJyNuYXYtTWlzY2VsbGFuZW91cyB1bCcpLmNzcygnb3BhY2l0eScpID09ICcxJzsiCiAgICAgICAgKTsKCiAgICAgICAgIyBDbGljayBvbiAnRnJlZSBGaWVsZHMnIGFuZCBzd2l0Y2ggd2luZG93LgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudFRpY2tldEZyZWVUZXh0O1RpY2tldElEPSRUaWNrZXRJRCcgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIFdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIi5DYW5jZWxDbG9zZVBvcHVwIikubGVuZ3RoOycgKTsKCiAgICAgICAgIyBGaWxsIGFsbCBmcmVlIHRleHQgZmllbGRzLgogICAgICAgIEZSRUVURVhURklFTERTOgogICAgICAgIGZvciBteSAkRmllbGRJRCAoIHNvcnQga2V5cyAlU2V0RnJlZVRleHRGaWVsZHMgKSB7CgogICAgICAgICAgICBuZXh0IEZSRUVURVhURklFTERTIGlmICRGaWVsZElEIGVxICdTTEFJRCc7CgogICAgICAgICAgICAkU2VsZW5pdW0tPklucHV0RmllbGRWYWx1ZVNldCgKICAgICAgICAgICAgICAgIEVsZW1lbnQgPT4gIiMkRmllbGRJRCIsCiAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICRTZXRGcmVlVGV4dEZpZWxkc3skRmllbGRJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIFdhaXQgZm9yIEFKQVggdG8gZmluaXNoLgogICAgICAgICAgICBXYWl0Rm9yQUpBWCgpOwoKICAgICAgICAgICAgaWYgKCAkRmllbGRJRCBlcSAnU2VydmljZUlEJyApIHsKCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPklucHV0RmllbGRWYWx1ZVNldCgKICAgICAgICAgICAgICAgICAgICBFbGVtZW50ID0+ICIjU0xBSUQiLAogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gJFNldEZyZWVUZXh0RmllbGRze1NMQUlEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBXYWl0IGZvciBBSkFYIHRvIGZpbmlzaC4KICAgICAgICAgICAgICAgIFdhaXRGb3JBSkFYKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgVGVzdCBjYXNlcyAtIGFsbCBmaWVsZHMgYXJlIHNldCBleGNlcHQgZXhhY3RseSBvbmUsIGFuZCBpbiB0aGUgbGFzdCBjYXNlIGFsbCBmaWVsZHMgYXJlIHNldC4KICAgICAgICBteSBAQ2xlYXJUZXN0cyA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdDbGVhciBTZXJ2aWNlIGZpZWxkJywKICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICdDbGVhciBTTEEgZmllbGQgYW5kIHNldCBiYWNrIFNlcnZpY2UgZmllbGQnLAogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0NsZWFyIFF1ZXVlIGZpZWxkIGFuZCBzZXQgYmFjayBTTEEgZmllbGQnLAogICAgICAgICAgICAgICAgU0xBSUQgICAgICA9PiAkU0xBSUQsCiAgICAgICAgICAgICAgICBOZXdRdWV1ZUlEID0+ICcnLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnQ2xlYXIgT3duZXIgZmllbGQgYW5kIHNldCBiYWNrIFF1ZXVlIGZpZWxkJywKICAgICAgICAgICAgICAgIFRpbWUgICAgICAgPT4gNDAsCiAgICAgICAgICAgICAgICBOZXdRdWV1ZUlEID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgTmV3T3duZXJJRCA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnQ2xlYXIgUmVzcG9uc2libGUgZmllbGQgYW5kIHNldCBiYWNrIE93bmVyIGZpZWxkJywKICAgICAgICAgICAgICAgIE5ld093bmVySUQgICAgICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgICAgICBOZXdSZXNwb25zaWJsZUlEID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdDbGVhciBTdGF0ZSBmaWVsZCBhbmQgc2V0IGJhY2sgUmVzcG9uc2libGUgZmllbGQnLAogICAgICAgICAgICAgICAgTmV3UmVzcG9uc2libGVJRCA9PiAkVGVzdFVzZXJJRCwKICAgICAgICAgICAgICAgIE5ld1F1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBOZXdTdGF0ZUlEICAgICAgID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdTZXQgYmFjayBTdGF0ZSBmaWVsZCAtIGFsbCBmaWVsZHMgYXJlIHNldCcsCiAgICAgICAgICAgICAgICBOZXdTdGF0ZUlEID0+ICRTdGF0ZUlELAogICAgICAgICAgICB9CiAgICAgICAgKTsKCiAgICAgICAgIyBSdW4gdGVzdCAtIGluIGVhY2ggaXRlcmF0aW9uIGV4YWN0bHkgb25lIGZpZWxkIGlzIGVtcHR5LCBsYXN0IGNhc2UgaXMgY29ycmVjdC4KICAgICAgICBmb3IgbXkgJFRlc3QgKEBDbGVhclRlc3RzKSB7CgogICAgICAgICAgICBzdWJ0ZXN0ICJUZXN0IGNhc2UgZm9yICdjbGVhcic6ICRUZXN0LT57TmFtZX0iID0+IHN1YiB7CgogICAgICAgICAgICAgICAgdHJ5X29rIHsKICAgICAgICAgICAgICAgICAgICBteSAkRXhwZWN0ZWRFcnJvckZpZWxkSUQ7CgogICAgICAgICAgICAgICAgICAgIFRFU1RGSUVMRDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEZpZWxkSUQgKCBzb3J0IGtleXMgJFRlc3QtPiUqICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBURVNURklFTEQgaWYgJEZpZWxkSUQgZXEgJ05hbWUnOwogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IFRFU1RGSUVMRCBpZiAkRmllbGRJRCBlcSAnVGltZSc7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRUZXN0LT57JEZpZWxkSUR9IGVxICcnICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEV4cGVjdGVkRXJyb3JGaWVsZElEID0gJEZpZWxkSUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+SW5wdXRGaWVsZFZhbHVlU2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCA9PiAiIyRGaWVsZElEIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gJFRlc3QtPnskRmllbGRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lICAgID0+ICRUZXN0LT57VGltZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIFdhaXQgZm9yIEFKQVggdG8gZmluaXNoLgogICAgICAgICAgICAgICAgICAgICAgICBXYWl0Rm9yQUpBWCgpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBXYWl0IHVudGlsIG9wZW5lZCBmaWVsZCAoZHVlIHRvIGVycm9yKSBoYXMgY2xvc2VkLgogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuICQoImRpdi5qc3RyZWUtd2hvbGVyb3c6dmlzaWJsZSIpLmxlbmd0aCA9PSAwOycgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBTdWJtaXQuCiAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjc3VibWl0UmljaFRleHQiLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAgICAgICAgICAgICAjIENoZWNrIGlmIGNsYXNzIEVycm9yIGV4aXN0cyBpbiBleHBlY3RlZCBmaWVsZCBJRC4KICAgICAgICAgICAgICAgICAgICBpZiAoJEV4cGVjdGVkRXJyb3JGaWVsZElEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9rKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjJEV4cGVjdGVkRXJyb3JGaWVsZElELkVycm9yJykubGVuZ3RoOyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpZWxkSUQgJEV4cGVjdGVkRXJyb3JGaWVsZElEIGlzIGVtcHR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgcmVzZXQgZm9jdXMgdG8gY2xlYXIgc2VsZWN0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI1RpdGxlJykuZm9jdXMoKTsiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MoIkFsbCBtYW5kYXRvcnkgZmllbGRzIGFyZSBmaWxsZWQgLSBzdWNjZXNzZnVsIGZyZWUgdGV4dCBmaWVsZHMgdXBkYXRlIik7CgogICAgICAgICAgICAgICAgICAgICAgICAjIFN3aXRjaCBiYWNrIHRvIHRoZSBtYWluIHdpbmRvdy4KICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQuYWN0aXZlID09IDA7IgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICMgRGVmaW5lIG1lc3NhZ2VzIGluIHRpY2tldCBoaXN0b3J5IHNjcmVlbi4KICAgICAgICBteSAlRnJlZUZpZWxkTWVzc2FnZXMgPSAoCiAgICAgICAgICAgIFNlcnZpY2VVcGRhdGUgICAgID0+ICJDaGFuZ2VkIHNlcnZpY2UgdG8gXCIkU2VydmljZU5hbWVcIiAoJFNlcnZpY2VJRCkuIiwKICAgICAgICAgICAgU0xBVXBkYXRlICAgICAgICAgPT4gIkNoYW5nZWQgU0xBIHRvIFwiJFNMQU5hbWVcIiAoJFNMQUlEKS4iLAogICAgICAgICAgICBPd25lclVwZGF0ZSAgICAgICA9PiAiQ2hhbmdlZCBvd25lciB0byBcIiRUZXN0VXNlckxvZ2luXCIgKCRUZXN0VXNlcklEKS4iLAogICAgICAgICAgICBSZXNwb25zaWJsZVVwZGF0ZSA9PiAiQ2hhbmdlZCByZXNwb25zaWJsZSB0byBcIiRUZXN0VXNlckxvZ2luXCIgKCRUZXN0VXNlcklEKS4iLAogICAgICAgICAgICBRdWV1ZVVwZGF0ZSAgICAgICA9PiAiQ2hhbmdlZCBxdWV1ZSB0byBcIiRRdWV1ZU5hbWVcIiAoJFF1ZXVlSUQpIGZyb20gXCJSYXdcIiAoMikuIiwKICAgICAgICAgICAgU3RhdGVVcGRhdGUgICAgICAgPT4gIkNoYW5nZWQgc3RhdGUgZnJvbSBcIm5ld1wiIHRvIFwiJFN0YXRlTmFtZVwiLiIKICAgICAgICApOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50VGlja2V0SGlzdG9yeSBvZiBjcmVhdGVkIHRlc3QgdGlja2V0LgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0SGlzdG9yeTtUaWNrZXRJRD0kVGlja2V0SUQiKTsKCiAgICAgICAgZm9yIG15ICRBY3Rpb24gKCBzb3J0IGtleXMgJUZyZWVGaWVsZE1lc3NhZ2VzICkgewoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEZyZWVGaWVsZE1lc3NhZ2VzeyRBY3Rpb259ICkgPiAtMSwKICAgICAgICAgICAgICAgICJBY3Rpb24gJEFjdGlvbiBpcyBjb21wbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDbGVhbnVwCiAgICAgICAgIyBEZWxldGUgY3JlYXRlZCB0ZXN0IHRpY2tldC4KICAgICAgICAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgVGlja2V0IGRlbGV0aW9uIGNvdWxkIGZhaWwgaWYgYXBhY2hlIHN0aWxsIHdyaXRlcyB0byB0aWNrZXQgaGlzdG9yeS4gVHJ5IGFnYWluIGluIHRoaXMgY2FzZS4KICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgc2xlZXAgMzsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJUaWNrZXRJRCAkVGlja2V0SUQgaXMgZGVsZXRlZCIKICAgICAgICApOwoKICAgICAgICAjIERlbGV0ZSBjdXN0b21lciB1c2VyIHJlZmVyZW5jZWQgZm9yIHNlcnZpY2UuCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgV0hFUkUgY3VzdG9tZXJfdXNlcl9sb2dpbiA9ID8iLAogICAgICAgICAgICBCaW5kID0+IFsgXCRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gXSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkRlbGV0ZWQgc2VydmljZSByZWxhdGlvbnMgZm9yICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4iLAogICAgICAgICk7CgogICAgICAgICMgRGVsZXRlIHNsYSByZWZlcmVuY2VkIGZvciBzZXJ2aWNlLgogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlX3NsYSBXSEVSRSBzZXJ2aWNlX2lkID0gJFNlcnZpY2VJRCBPUiBzbGFfaWQgPSAkU0xBSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiUmVsYXRpb24gU0xBSUQgJFNMQUlEIHJlZmVyZW5jZWQgdG8gc2VydmljZSBJRCAkU2VydmljZUlEIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgLS0tCiAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICMgLS0tCiAgICAgICAgIyBEZWxldGUgY3JlYXRlZCB0ZXN0IHNlcnZpY2UgcHJlZmVyZW5jZXMuCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2VfcHJlZmVyZW5jZXMgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZUlEICRTZXJ2aWNlSUQgcHJlZmVyZW5lY2VzIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgLS0tCgogICAgICAgICMgRGVsZXRlIGNyZWF0ZWQgdGVzdCBzZXJ2aWNlLgogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTZXJ2aWNlSUQgJFNlcnZpY2VJRCBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIERlbGV0ZSBjcmVhdGVkIHRlc3QgU0xBLgogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzbGEgV0hFUkUgaWQgPSAkU0xBSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU0xBSUQgJFNMQUlEIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgRGVsZXRlIGNyZWF0ZWQgdGVzdCBzdGF0ZS4KICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gdGlja2V0X3N0YXRlIFdIRVJFIGlkID0gJFN0YXRlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU3RhdGVJRCAkU3RhdGVJRCBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIERlbGV0ZSBjcmVhdGVkIHRlc3QgcXVldWUuCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHF1ZXVlIFdIRVJFIGlkID0gJFF1ZXVlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiUXVldWVJRCAkUXVldWVJRCBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKCiAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QuCiAgICAgICAgZm9yIG15ICRDYWNoZSAocXcoVGlja2V0IFNlcnZpY2UgU0xBIFN0YXRlIFF1ZXVlKSkgewogICAgICAgICAgICAkQ2FjaGVPYmplY3QtPkNsZWFuVXAoIFR5cGUgPT4gJENhY2hlICk7CiAgICAgICAgfQogICAgfQopOwoKJFNlbGVuaXVtLT5jbG9zZTsKJFNlbGVuaXVtLT5xdWl0OwoKZG9uZV90ZXN0aW5nKCk7Cg==</File>
        <File Location="scripts/test/Selenium/Agent/AgentITSMService.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bTsKCm91ciAkU2VsZjsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtLT5uZXc7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3Qgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICJTZXJ2aWNlIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICA9PiAnU2VsZW5pdW0gVGVzdCBTZXJ2aWNlJywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZSBpcyBjcmVhdGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNlcnZpY2Ugc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNU2VydmljZSIpOwoKICAgICAgICAjIGNoZWNrIG92ZXJ2aWV3IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNoZWNrIGZvciBsaW5rIHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHNjcmVlbgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9JFNlcnZpY2VJRCIgKSA+IC0xLAogICAgICAgICAgICAiTGluayB0byBBZ2VudElUU01TZXJ2aWNlWm9vbSBmb3IgU2VydmljZSBJRCAkU2VydmljZUlEIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IERCIG9iamVjdAogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IHNlcnZpY2UgcHJlZmVyZW5jZXMKICAgICAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9wcmVmZXJlbmNlcyBXSEVSRSBzZXJ2aWNlX2lkID0gJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTZXJ2aWNlIHByZWZlcmVuY2VzIGlzIGRlbGV0ZWQgLSBJRCAkU2VydmljZUlEIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IHNlcnZpY2UKICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBpcyBkZWxldGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICdTZXJ2aWNlJwogICAgICAgICk7CiAgICB9Cik7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/Selenium/Agent/AgentITSMServicePrint.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bTsKCm91ciAkU2VsZjsKCm15ICRTZWxlbml1bSA9IEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0tPm5ldzsKCmlmICggJFNlbGVuaXVtLT57YnJvd3Nlcl9uYW1lfSBuZSAnZmlyZWZveCcgKSB7CiAgICBza2lwX2FsbCgiUERGIHRlc3RzIGFyZSBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgb24gRmlyZWZveCIpOwp9CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3Qgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICJTZXJ2aWNlIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICA9PiAnU2VsZW5pdW0gVGVzdCBTZXJ2aWNlJywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZSBpcyBjcmVhdGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVNlcnZpY2Vab29tO1NlcnZpY2VJRD0kU2VydmljZUlEIik7CgogICAgICAgICMgY2xpY2sgb24gcHJpbnQKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNU2VydmljZVByaW50O1NlcnZpY2VJRD0kU2VydmljZUlEXCcgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgIyBzd2l0Y2ggdG8gYW5vdGhlciB3aW5kb3cKICAgICAgICBteSAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCBmb3Igc29tZSBzZWNvbmRzIHVudGlsIHByaW50IHNjcmVlbiBpcyBsb2FkZWQKICAgICAgICBBQ1RJVkVTTEVFUDoKICAgICAgICBmb3IgKCAxIC4uIDIwICkgewogICAgICAgICAgICBpZiAoIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAicHJpbnRlZCBieSIgKSA+IC0xLCApIHsKICAgICAgICAgICAgICAgIGxhc3QgQUNUSVZFU0xFRVA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2xlZXAgMTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIHByaW50ZWQgdmFsdWVzIG9mIHRlc3Qgc2VydmljZQogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIiRTZXJ2aWNlTmFtZSIgKSA+IC0xLAogICAgICAgICAgICAiU2VydmljZTogJFNlcnZpY2VOYW1lIC0gZm91bmQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiT3BlcmF0aW9uYWwiICkgPiAtMSwKICAgICAgICAgICAgIkN1cnJlbnQgSW5jaWRlbnQ6IE9wZXJhdGlvbmFsIC0gZm91bmQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiMyBub3JtYWwiICkgPiAtMSwKICAgICAgICAgICAgIkNyaXRpY2FsaXR5OiAzIG5vcm1hbCAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBjbGVhbiB1cCBzZXJ2aWNlIGRhdGEKICAgICAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZV9wcmVmZXJlbmNlcyBXSEVSRSBzZXJ2aWNlX2lkID0gJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTZXJ2aWNlIHByZWZlcmVuY2VzIGlzIGRlbGV0ZWQgLSBJRCAkU2VydmljZUlEIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IHNlcnZpY2UKICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBpcyBkZWxldGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICdTZXJ2aWNlJwogICAgICAgICk7CgogICAgfQopOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/Selenium/Agent/AgentITSMServiceZoom.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bTsKCm91ciAkU2VsZjsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtLT5uZXc7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3Qgc2VydmljZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICJTZXJ2aWNlIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBWYWxpZElEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICA9PiAnU2VsZW5pdW0gVGVzdCBTZXJ2aWNlJywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZSBpcyBjcmVhdGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHNjcmVlbiB3aXRoIG5vIFNlcnZpY2VJRCwgZXhwZWN0aW5nIGVycm9yIG1lc3NhZ2Ugc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPSIpOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ05vIFNlcnZpY2VJRCBpcyBnaXZlbiEnICkgPiAtMSwKICAgICAgICAgICAgIkVycm9yIG1lc3NhZ2Ugd2l0aG91dCBzZXJ2aWNlIElEIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNU2VydmljZVpvb20gc2NyZWVuIHdpdGggd3JvbmcgU2VydmljZUlELCBleHBlY3RpbmcgZXJyb3IgbWVzc2FnZSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9YXNkIik7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnU2VydmljZUlEIGFzZCBub3QgZm91bmQgaW4gZGF0YWJhc2UhJyApID4gLTEsCiAgICAgICAgICAgICJFcnJvciBtZXNzYWdlIHdpdGggd3Jvbmcgc2VydmljZSBJRCAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNlcnZpY2Vab29tIHNjcmVlbiB3aXRoIGNvcnJlY3QgU2VydmljZUlECiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPSRTZXJ2aWNlSUQiKTsKCiAgICAgICAgIyBjaGVjayBmb3IgQWdlbnRJVFNNU2VydmljZVpvb20gZmllbGRzCiAgICAgICAgbXkgQEVsZW1lbnRMaXN0ID0gKCAnQ29udGVudENvbHVtbicsICdTaWRlYmFyQ29sdW1uJyApOwogICAgICAgIGZvciBteSAkRWxlbWVudENoZWNrIChARWxlbWVudExpc3QpIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi4kRWxlbWVudENoZWNrIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJTZXJ2aWNlOiAkU2VydmljZU5hbWUiICkgPiAtMSwKICAgICAgICAgICAgIlNlcnZpY2U6ICRTZXJ2aWNlTmFtZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBzZXJ2aWNlIHByZWZlcmVuY2VzCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2VfcHJlZmVyZW5jZXMgV0hFUkUgc2VydmljZV9pZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBwcmVmZXJlbmNlcyBpcyBkZWxldGVkIC0gSUQgJFNlcnZpY2VJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBzZXJ2aWNlCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2UgV0hFUkUgaWQgPSAkU2VydmljZUlEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlNlcnZpY2UgaXMgZGVsZXRlZCAtIElEICRTZXJ2aWNlSUQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAnU2VydmljZScKICAgICAgICApOwogICAgfQopOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/Selenium/Agent/AgentITSMSLA.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bTsKCm91ciAkU2VsZjsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtLT5uZXc7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgU0xBCiAgICAgICAgbXkgJFNMQU5hbWUgPSAiU0xBIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNMQUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICdTZWxlbml1bSB0ZXN0IFNMQScsCiAgICAgICAgICAgIFR5cGVJRCAgPT4gMiwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTTEFJRCwKICAgICAgICAgICAgIlNMQSBpcyBjcmVhdGVkIC0gSUQgJFNMQUlEIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNU0xBIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVNMQSIpOwoKICAgICAgICAjIGNoZWNrIG92ZXJ2aWV3IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNoZWNrIGZvciBsaW5rIHRvIEFnZW50SVRTTVNMQVpvb20gc2NyZWVuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiQWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9JFNMQUlEIiApID4gLTEsCiAgICAgICAgICAgICJMaW5rIHRvIEFnZW50SVRTTVNMQVpvb20gZm9yIFNMQSBJRCAkU0xBSUQgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBTTEEKICAgICAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzbGEgV0hFUkUgaWQgPSAkU0xBSUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU0xBIGlzIGRlbGV0ZWQgLSBJRCAkU0xBSUQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAnU0xBJwogICAgICAgICk7CiAgICB9Cik7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/Selenium/Agent/AgentITSMSLAPrint.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bTsKCm91ciAkU2VsZjsKCm15ICRTZWxlbml1bSA9IEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0tPm5ldzsKCmlmICggJFNlbGVuaXVtLT57YnJvd3Nlcl9uYW1lfSBuZSAnZmlyZWZveCcgKSB7CiAgICBza2lwX2FsbCgiUERGIHRlc3RzIGFyZSBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgb24gRmlyZWZveCIpOwp9CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgU0xBCiAgICAgICAgbXkgJFNMQU5hbWUgPSAiU0xBIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNMQUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJFNMQU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lID0+IDEyMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgPT4gMTgwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICA9PiA1ODAsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgID0+ICdTZWxlbml1bSB0ZXN0IFNMQScsCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNMQUlELAogICAgICAgICAgICAiU0xBIGlzIGNyZWF0ZWQgLSBJRCAkU0xBSUQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01TTEFab29tIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9JFNMQUlEIik7CgogICAgICAgICMgY2xpY2sgb24gcHJpbnQgbWVudQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01TTEFQcmludDtTTEFJRD0kU0xBSURcJyApXSIpLT5jbGljaygpOwoKICAgICAgICAjIHN3aXRjaCB0byBhbm90aGVyIHdpbmRvdwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHByaW50IHNjcmVlbiBpcyBsb2FkZWQKICAgICAgICBBQ1RJVkVTTEVFUDoKICAgICAgICBmb3IgKCAxIC4uIDIwICkgewogICAgICAgICAgICBpZiAoIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAicHJpbnRlZCBieSIgKSA+IC0xLCApIHsKICAgICAgICAgICAgICAgIGxhc3QgQUNUSVZFU0xFRVA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2xlZXAgMTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIHByaW50ZWQgdmFsdWVzIG9mIHRlc3QgU0xBCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiJFNMQU5hbWUiICkgPiAtMSwKICAgICAgICAgICAgIlNlcnZpY2U6ICRTTEFOYW1lIC0gZm91bmQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiQ2FsZW5kYXIgRGVmYXVsdCIgKSA+IC0xLAogICAgICAgICAgICAiQ2FsZW5kYXI6IENhbGVuZGFyIERlZmF1bHQgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFJlc3BvbmRUaW1lID0gKCAxMjAsIDE4MCwgNTgwICk7CiAgICAgICAgZm9yIG15ICRUaW1lIChAUmVzcG9uZFRpbWUpIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRpbWUgLiAiIG1pbnV0ZXMiICkgPiAtMSwKICAgICAgICAgICAgICAgICJSZXNwb25kICRUaW1lIG1pbnV0ZXMgLSBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IFNMQQogICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNsYSBXSEVSRSBpZCA9ICRTTEFJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTTEEgaXMgZGVsZXRlZCAtIElEICRTTEFJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICdTTEEnCiAgICAgICAgKTsKICAgIH0KKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/Selenium/Agent/AgentITSMSLAZoom.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bTsKCm91ciAkU2VsZjsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtLT5uZXc7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tc2VydmljZScgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgU0xBCiAgICAgICAgbXkgJFNMQU5hbWUgPSAiU0xBIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFNMQUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJFNMQU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lID0+IDEyMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgPT4gMTgwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICA9PiA1ODAsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgID0+ICdTZWxlbml1bSB0ZXN0IFNMQScsCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgID0+IDIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNMQUlELAogICAgICAgICAgICAiU0xBIGlzIGNyZWF0ZWQgLSBJRCAkU0xBSUQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01TTEFab29tIHNjcmVlbiB3aXRoIG5vIFNMQUlELCBleHBlY3RpbmcgZXJyb3IgbWVzc2FnZSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01TTEFab29tO1NMQUlEPSIpOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ05vIFNMQUlEIGlzIGdpdmVuIScgKSA+IC0xLAogICAgICAgICAgICAiRXJyb3IgbWVzc2FnZSB3aXRob3V0IFNMQSBJRCAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVNMQVpvb20gc2NyZWVuIHdpdGggd3JvbmcgU0xBSUQsIGV4cGVjdGluZyBlcnJvciBtZXNzYWdlIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9YXNkIik7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnU0xBSUQgYXNkIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnICkgPiAtMSwKICAgICAgICAgICAgIkVycm9yIG1lc3NhZ2Ugd2l0aCB3cm9uZyBTTEEgSUQgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01TTEFab29tIHNjcmVlbiB3aXRoIGNvcnJlY3QgU0xBSUQKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01TTEFab29tO1NMQUlEPSRTTEFJRCIpOwoKICAgICAgICAjIGNoZWNrIGZvciBBZ2VudElUU01TTEFab29tIGZpZWxkcwogICAgICAgIG15IEBFbGVtZW50TGlzdCA9ICggJ0NvbnRlbnRDb2x1bW4nLCAnU2lkZWJhckNvbHVtbicgKTsKICAgICAgICBmb3IgbXkgJEVsZW1lbnRDaGVjayAoQEVsZW1lbnRMaXN0KSB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIuJEVsZW1lbnRDaGVjayIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiU0xBOiAkU0xBTmFtZSIgKSA+IC0xLAogICAgICAgICAgICAiU0xBOiAkU0xBTmFtZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGZvciByZXNwb25kIHRpbWVzCiAgICAgICAgbXkgQFJlc3BvbmRUaW1lID0gKCAxMjAsIDE4MCwgNTgwICk7CiAgICAgICAgZm9yIG15ICRUaW1lIChAUmVzcG9uZFRpbWUpIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRpbWUgLiAiIG1pbnV0ZXMiICkgPiAtMSwKICAgICAgICAgICAgICAgICJSZXNwb25kICRUaW1lIG1pbnV0ZXMgLSBmb3VuZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IFNMQQogICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHNsYSBXSEVSRSBpZCA9ICRTTEFJRCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTTEEgaXMgZGVsZXRlZCAtIElEICRTTEFJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICdTTEEnCiAgICAgICAgKTsKICAgIH0KKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/Selenium/Agent/AgentTicketService.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL0FnZW50L0FnZW50VGlja2V0U2VydmljZS50CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwp1c2UgVGVzdDI6OlYwOwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlJlZ2lzdGVyT007ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NCnVzZSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9IEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0tPm5ldyggTG9nRXhlY3V0ZUNvbW1hbmRBY3RpdmUgPT4gMSApOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkSGVscGVyICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKICAgICAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAgICAgIyBkbyBub3QgY2hlY2sgZW1haWwgYWRkcmVzc2VzCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgICAgICBWYWx1ZSA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgZW5hYmxlIHRpY2tldCBzZXJ2aWNlIGZlYXR1cmUKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gMQogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAndXNlcnMnIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIG9iamVjdAogICAgICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdHdvIHRlc3Qgc2VydmljZXMKICAgICAgICBteSAoIEBTZXJ2aWNlSURzLCBAU2VydmljZU5hbWVzICk7CiAgICAgICAgZm9yIG15ICRTZXJ2aWNlIChxdyhQYXJlbnQgQ2hpbGQpKSB7CiAgICAgICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICRTZXJ2aWNlIC4gJ1NlcnZpY2UnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAgICAgbXkgJFNlcnZpY2VJRCAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJ1NlbGVuaXVtIFRlc3QnLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAoKICAgICAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgKTsKICAgICAgICAgICAgb2soICRTZXJ2aWNlSUQsICJTZXJ2aWNlIElEICRTZXJ2aWNlSUQgaXMgY3JlYXRlZCIgKTsKICAgICAgICAgICAgcHVzaCBAU2VydmljZUlEcywgICAkU2VydmljZUlEOwogICAgICAgICAgICBwdXNoIEBTZXJ2aWNlTmFtZXMsICRTZXJ2aWNlTmFtZTsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHNlY29uZCBzZXJ2aWNlIHRvIGJlIGNoaWxkIG9mIGZpcnN0IG9uZQogICAgICAgIG15ICRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlEc1sxXSwKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZXNbMV0sCiAgICAgICAgICAgIFBhcmVudElEICA9PiAkU2VydmljZUlEc1swXSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICApOwogICAgICAgIG9rKCAkU3VjY2VzcywgIlNlcnZpY2UgSUQgJFNlcnZpY2VJRHNbMV0gaXMgbm93IGNoaWxkIHNlcnZpY2UiICk7CgogICAgICAgICMgdXBkYXRlIHBhcmVudCBzZXJ2aWNlIHRvIGludmFsaWQgc3RhdHVzLCBidWcgIzExODE2CiAgICAgICAgIyB0ZXN0IGlmIGNoaWxkIHNlcnZpY2UgYXJlIHZpc2libGUgd2hlbiBwYXJlbnQgaXMgaW52YWxpZAogICAgICAgICRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlEc1swXSwKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZXNbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAyLAogICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgKTsKICAgICAgICBvayggJFN1Y2Nlc3MsICJQYXJlbnQgU2VydmljZSBJRCAkU2VydmljZUlEc1swXSBpcyBpbnZhbGlkIiApOwoKICAgICAgICAjIGdldCB0aWNrZXQgb2JqZWN0CiAgICAgICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB0aWNrZXRzCiAgICAgICAgbXkgQFRpY2tldElEczsKICAgICAgICBmb3IgbXkgJExvY2sgKHF3KGxvY2sgdW5sb2NrKSkgewogICAgICAgICAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICdTZWxlbml1bSBUZXN0IFRpY2tldCcsCiAgICAgICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICAgICAgTG9jayAgICAgICAgICA9PiAkTG9jaywKICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJ29wZW4nLAogICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlEc1sxXSwKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgICAgPT4gJ1NlbGVuaXVtQ3VzdG9tZXInLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAnU2VsZW5pdW1DdXN0b21lckBsb2NhbGhvc3QuY29tJywKICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgb2soICRUaWNrZXRJRCwgIlRpY2tldCBJRCAkVGlja2V0SUQgaXMgY3JlYXRlZCIgKTsKICAgICAgICAgICAgcHVzaCBAVGlja2V0SURzLCAkVGlja2V0SUQ7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRUaWNrZXRTZXJ2aWNlIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0U2VydmljZSIpOwoKICAgICAgICAjIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyB0aWNrZXRzIHdpdGggIk15IFNlcnZpY2VzIiBmaWx0ZXIKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRUaWNrZXRTZXJ2aWNlO1NlcnZpY2VJRD0wO1wnICldIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5jb250ZW50X2NvbnRhaW5zKAogICAgICAgICAgICAnTm8gdGlja2V0IGRhdGEgZm91bmQuJywKICAgICAgICAgICAgIk5vIHRpY2tldHMgZm91bmQgd2l0aCAnTXkgU2VydmljZXMnIGZpbHRlciIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBmb3IgcGFyZW50IHRlc3Qgc2VydmljZSBmaWx0ZXIgYnV0dG9uIGFuZCBjbGljayBvbiBpdAogICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudFRpY2tldFNlcnZpY2U7U2VydmljZUlEPSRTZXJ2aWNlSURzWzBdO1wnICldIgogICAgICAgICk7CiAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgJEVsZW1lbnQtPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjbGljayBvbiBjaGlsZCBzZXJ2aWNlCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50VGlja2V0U2VydmljZTtTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07XCcgKV0iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIGRpZmZlcmVudCB2aWV3cyBmb3IgZmlsdGVycwogICAgICAgIGZvciBteSAkVmlldyAocXcoU21hbGwgTWVkaXVtIFByZXZpZXcpKSB7CgogICAgICAgICAgICAjIGdvIHRvIGRlZmF1bHQgc21hbGwgdmlldwogICAgICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0U2VydmljZTtTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07Vmlldz1TbWFsbCIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2xpY2sgb24gdmlld2VyIGNvbnRyb2xsZXIKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdGaWx0ZXI9VW5sb2NrZWQ7Vmlldz0kVmlldztTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07U29ydEJ5PUFnZTtPcmRlckJ5PVVwO1ZpZXc9U21hbGw7XCcgKV0iCiAgICAgICAgICAgICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgYWxsIGV4cGVjdGVkIHRpY2tldHMgYXJlIHByZXNlbnQKICAgICAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewoKICAgICAgICAgICAgICAgIG15ICVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBsb2NrZWQgYW5kIHVubG9ja2VkIHRpY2tldHMKICAgICAgICAgICAgICAgIGlmICggJFRpY2tldERhdGF7TG9ja30gZXEgJ3VubG9jaycgKSB7CgogICAgICAgICAgICAgICAgICAgICMgY2xpY2sgb24gJ0F2YWlsYWJsZSB0aWNrZXQnIGZpbHRlcgogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07U29ydEJ5PUFnZTtPcmRlckJ5PVVwO1ZpZXc9JFZpZXc7RmlsdGVyPVVubG9ja2VkXCcgKV0iCiAgICAgICAgICAgICAgICAgICAgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciB1bmxvY2tlZCB0aWNrZXRzIHdpdGggJ0F2YWlsYWJsZSB0aWNrZXRzJyBmaWx0ZXIgb24KICAgICAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmNvbnRlbnRfY29udGFpbnMoCiAgICAgICAgICAgICAgICAgICAgICAgICRUaWNrZXREYXRhe1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICAgICAgICAgICAgICJUaWNrZXQgZm91bmQgb24gcGFnZSB3aXRoICdBdmFpbGFibGUgdGlja2V0cycgZmlsdGVyIC0gJFRpY2tldERhdGF7VGlja2V0TnVtYmVyfSAiLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2xpY2sgb24gJ0FsbCB0aWNrZXQnIGZpbHRlcgogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07U29ydEJ5PUFnZTtPcmRlckJ5PVVwO1ZpZXc9JFZpZXc7RmlsdGVyPUFsbFwnICldIgogICAgICAgICAgICAgICAgICAgICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgdW5sb2NrZWQgdGlja2V0cyB3aXRoICdBbGwgdGlja2V0cycgZmlsdGVyIG9uCiAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5jb250ZW50X2NvbnRhaW5zKAogICAgICAgICAgICAgICAgICAgICAgICAkVGlja2V0RGF0YXtUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAgICAgICAgICAgICAiVGlja2V0IGZvdW5kIG9uIHBhZ2Ugd2l0aCAnQWxsIHRpY2tldHMnIGZpbHRlciBvbiAtICRUaWNrZXREYXRhe1RpY2tldE51bWJlcn0gIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgY2xpY2sgb24gJ0FsbCB0aWNrZXQnIGZpbHRlcgogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07U29ydEJ5PUFnZTtPcmRlckJ5PVVwO1ZpZXc9JFZpZXc7RmlsdGVyPUFsbFwnICldIgogICAgICAgICAgICAgICAgICAgICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgbG9ja2VkIHRpY2tldHMgd2l0aCAgJ0FsbCB0aWNrZXQnIGZpbHRlcgogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+Y29udGVudF9jb250YWlucygKICAgICAgICAgICAgICAgICAgICAgICAgJFRpY2tldERhdGF7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2tlZCBUaWNrZXQgZm91bmQgb24gcGFnZSB3aXRoICdBbGwgdGlja2V0cycgZmlsdGVyIG9uIC0gJFRpY2tldERhdGF7VGlja2V0TnVtYmVyfSAiLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2xpY2sgb24gJ0F2YWlsYWJsZSB0aWNrZXQnIGZpbHRlcgogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdTZXJ2aWNlSUQ9JFNlcnZpY2VJRHNbMV07U29ydEJ5PUFnZTtPcmRlckJ5PVVwO1ZpZXc9JFZpZXc7RmlsdGVyPVVubG9ja2VkXCcgKV0iCiAgICAgICAgICAgICAgICAgICAgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBsb2NrZWQgdGlja2V0cyB3aXRoICdBdmFpbGFibGUgdGlja2V0cycgZmlsdGVyIG9uCiAgICAgICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5jb250ZW50X2xhY2tzKAogICAgICAgICAgICAgICAgICAgICAgICAkVGlja2V0RGF0YXtUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAgICAgICAgICAgICAiRGlkIG5vdCBmaW5kIGxvY2tlZCB0aWNrZXQgLSAkVGlja2V0RGF0YXtUaWNrZXROdW1iZXJ9IC0gd2l0aCAnQXZhaWxhYmxlIHRpY2tldHMnIGZpbHRlciIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IHRpY2tldHMKICAgICAgICBmb3IgbXkgJFRpY2tldElEIChAVGlja2V0SURzKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgVGlja2V0IGRlbGV0aW9uIGNvdWxkIGZhaWwgaWYgYXBhY2hlIHN0aWxsIHdyaXRlcyB0byB0aWNrZXQgaGlzdG9yeS4gVHJ5IGFnYWluIGluIHRoaXMgY2FzZS4KICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICBzbGVlcCAzOwogICAgICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG9rKCAkU3VjY2VzcywgIlRpY2tldCBJRCAkVGlja2V0SUQgaXMgZGVsZXRlZCIgKTsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIGNyZWF0ZWQgdGVzdCBzZXJ2aWNlCiAgICAgICAgZm9yIG15ICRTZXJ2aWNlRGVsZXRlIChAU2VydmljZUlEcykgewogICAgICAgICAgICAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlRGVsZXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgb2soICRTdWNjZXNzLCAiU2VydmljZSBJRCAkU2VydmljZURlbGV0ZSBpcyBkZWxldGVkIiwgKTsKICAgICAgICB9CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgZm9yIG15ICRDYWNoZSAocXcgKFRpY2tldCBTZXJ2aWNlKSkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJENhY2hlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/Selenium/Output/PDFTicket.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL091dHB1dC9QREZUaWNrZXQudAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJPTTsgICAgIyBzZXQgdXAgJEtlcm5lbDo6T00KdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW07CgpteSAkU2VsZW5pdW0gPSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtLT5uZXcoIExvZ0V4ZWN1dGVDb21tYW5kQWN0aXZlID0+IDEgKTsKCmRpYWcgJFNlbGVuaXVtLT57YnJvd3Nlcl9uYW1lfTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgIG15ICRIZWxwZXIgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CiAgICAgICAgbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQ7CgogICAgICAgICMgRG8gbm90IGNoZWNrIGVtYWlsIGFkZHJlc3Nlcy4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmFibGUgdGlja2V0IFJlc3BvbnNpYmxlIGZlYXR1cmUuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6UmVzcG9uc2libGUnLAogICAgICAgICAgICBWYWx1ZSA9PiAxCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmFibGUgdGlja2V0IFR5cGUgZmVhdHVyZS4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpUeXBlJywKICAgICAgICAgICAgVmFsdWUgPT4gMQogICAgICAgICk7CgogICAgICAgICMgRW5hYmxlIHRpY2tldCBzZXJ2aWNlIGZlYXR1cmUuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBRdWV1ZS4KICAgICAgICBteSAkUXVldWVOYW1lID0gJ1F1ZScgLiAkUmFuZG9tSUQ7CiAgICAgICAgbXkgJFF1ZXVlSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICBHcm91cElEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgU3lzdGVtQWRkcmVzc0lEID0+IDEsCiAgICAgICAgICAgIFNhbHV0YXRpb25JRCAgICA9PiAxLAogICAgICAgICAgICBTaWduYXR1cmVJRCAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgID0+ICdTZWxlbml1bSBRdWV1ZScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgb2soCiAgICAgICAgICAgICRRdWV1ZUlELAogICAgICAgICAgICAiQ3JlYXRlZCBRdWV1ZUlEICRRdWV1ZUlEIgogICAgICAgICk7CgogICAgICAgICMgLS0tCiAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICMgLS0tCgogICAgICAgICMgZ2V0IHRoZSBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgZnJvbSBnZW5lcmFsIGNhdGFsb2cKICAgICAgICBteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBidWlsZCBhIGxvb2t1cCBoYXNoCiAgICAgICAgbXkgJVNlcnZpY2VUeXBlTmFtZTJJRCA9IHJldmVyc2UgJXskU2VydmljZVR5cGVMaXN0fTsKCiAgICAgICAgIyBnZXQgdGhlIGxpc3Qgb2Ygc2xhIHR5cGVzIGZyb20gZ2VuZXJhbCBjYXRhbG9nCiAgICAgICAgbXkgJFNMQVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIGEgbG9va3VwIGhhc2gKICAgICAgICBteSAlU0xBVHlwZU5hbWUySUQgPSByZXZlcnNlICV7JFNMQVR5cGVMaXN0fTsKCiAgICAgICAgIyBHZXQgdGhlIGN1cnJlbnQgc2V0dGluZyBmb3IgY3VzdG9tZXIgdGlja2V0IHByaW50CiAgICAgICAgbXkgJUN1c3RvbWVyVGlja2V0UHJpbnRTeXNDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyktPlNldHRpbmdHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJ0N1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI0N1c3RvbWVyVGlja2V0UHJpbnQnLAogICAgICAgICk7CgogICAgICAgICMgTWFrZSBzdXJlIEN1c3RvbWVyVGlja2V0IHByaW50IGlzIGVuYWJsZWQuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0N1c3RvbWVyRnJvbnRlbmQ6Ok1vZHVsZSMjI0N1c3RvbWVyVGlja2V0UHJpbnQnLAogICAgICAgICAgICBWYWx1ZSA9PiAkQ3VzdG9tZXJUaWNrZXRQcmludFN5c0NvbmZpZ3tFZmZlY3RpdmVWYWx1ZX0sCiAgICAgICAgKTsKCiAgICAgICAgIyAtLS0KCiAgICAgICAgIyBDcmVhdGUgU2VydmljZS4KICAgICAgICBteSAkU2VydmljZU5hbWUgPSAnU2VydmknIC4gJFJhbmRvbUlEOwogICAgICAgIG15ICRTZXJ2aWNlSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VBZGQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1NlbGVuaXVtIFNlcnZpY2UnLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICApOwogICAgICAgIG9rKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiQ3JlYXRlZCBTZXJ2aWNlSUQgJFNlcnZpY2VJRCIKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBTTEEuCiAgICAgICAgbXkgJFNMQU5hbWUgPSAnU0wnIC4gJFJhbmRvbUlEOwogICAgICAgIG15ICRTTEFJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFBZGQoCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAkU0xBVHlwZU5hbWUySUR7T3RoZXJ9LAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgPT4gWyRTZXJ2aWNlSURdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICA9PiAkU0xBTmFtZSwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgPT4gNTAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgPT4gMjAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICA9PiAnU2VsZW5pdW0gU0xBJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICApOwogICAgICAgIG9rKAogICAgICAgICAgICAkUXVldWVJRCwKICAgICAgICAgICAgIkNyZWF0ZWQgU0xBSUQgJFF1ZXVlSUQiCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgVHlwZS4KICAgICAgICBteSAkVHlwZU5hbWUgPSAnVHlwZScgLiAkUmFuZG9tSUQ7CiAgICAgICAgbXkgJFR5cGVJRCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKS0+VHlwZUFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkVHlwZU5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgb2soCiAgICAgICAgICAgICRUeXBlSUQsCiAgICAgICAgICAgICJDcmVhdGVkIFR5cGVJRCAkVHlwZUlEIgogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIFVzZXJzLgogICAgICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKICAgICAgICBteSBAVXNlcnM7CiAgICAgICAgZm9yICggMSAuLiAyICkgewoKICAgICAgICAgICAgIyBDcmVhdGUgdGVzdCBVc2VyIGFuZCBsb2dpbi4KICAgICAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgICAgIEdyb3VwcyA9PiBbJ3VzZXJzJ10sCiAgICAgICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAgICAgIyBHZXQgdXNlciBkYXRhLgogICAgICAgICAgICBteSAlVXNlckRhdGEgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICBVc2VyID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBAVXNlcnMsIFwlVXNlckRhdGE7CiAgICAgICAgfQoKICAgICAgICAjIENyZWF0ZSBDdXN0b21lciBDb21wYW55LgogICAgICAgIG15ICVDdXN0b21lckNvbXBhbnkgPSAoCiAgICAgICAgICAgIEN1c3RvbWVySUQgICAgICAgICAgICAgPT4gJ0N1c3RvbWVyJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgQ3VzdG9tZXJDb21wYW55TmFtZSAgICA9PiAnQ29tcGFueScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueVN0cmVldCAgPT4gJ1N0cmVldCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueVpJUCAgICAgPT4gJ1pJUCcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueUNpdHkgICAgPT4gJ0NpdHknIC4gJFJhbmRvbUlELAogICAgICAgICAgICBDdXN0b21lckNvbXBhbnlDb3VudHJ5ID0+ICdDb3VudHJ5JyAuICRSYW5kb21JRCwKICAgICAgICAgICAgQ3VzdG9tZXJDb21wYW55VVJMICAgICA9PiAnVVJMJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgQ3VzdG9tZXJDb21wYW55Q29tbWVudCA9PiAnQ29tbWVudCcgLiAkUmFuZG9tSUQsCiAgICAgICAgKTsKICAgICAgICBteSAkQ3VzdG9tZXJDb21wYW55SUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJDb21wYW55JyktPkN1c3RvbWVyQ29tcGFueUFkZCgKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICVDdXN0b21lckNvbXBhbnksCiAgICAgICAgKTsKICAgICAgICBvaygKICAgICAgICAgICAgJEN1c3RvbWVyQ29tcGFueUlELAogICAgICAgICAgICAiQ3JlYXRlZCBDdXN0b21lckNvbXBhbnlJRCAkQ3VzdG9tZXJDb21wYW55SUQiCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgQ3VzdG9tZXIgVXNlci4KICAgICAgICBteSAlQ3VzdG9tZXJVc2VyID0gKAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lICA9PiAnQ3VzdG9tZXJGaXJzdE5hbWUnIC4gJFJhbmRvbUlELAogICAgICAgICAgICBVc2VyTGFzdG5hbWUgICA9PiAnQ3VzdG9tZXJMYXN0TmFtZScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIFVzZXJDdXN0b21lcklEID0+ICRDdXN0b21lckNvbXBhbnlJRCwKICAgICAgICAgICAgVXNlckxvZ2luICAgICAgPT4gJ0N1c3RvbWVyTG9naW4nIC4gJFJhbmRvbUlELAogICAgICAgICAgICBVc2VyUGFzc3dvcmQgICA9PiAnQ3VzdG9tZXJQYXNzJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgVXNlckVtYWlsICAgICAgPT4gJ0N1c3RvbWVyRW1haWwnIC4gJFJhbmRvbUlEIC4gJ0BleGFtcGxlLmNvbScsCiAgICAgICAgKTsKICAgICAgICBteSAkQ3VzdG9tZXJVc2VySUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyktPkN1c3RvbWVyVXNlckFkZCgKICAgICAgICAgICAgU291cmNlICA9PiAnQ3VzdG9tZXJVc2VyJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgICAgICVDdXN0b21lclVzZXIsCiAgICAgICAgKTsKICAgICAgICBvaygKICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklELAogICAgICAgICAgICAiQ3JlYXRlZCBDdXN0b21lclVzZXJJRCAkQ3VzdG9tZXJVc2VySUQiCiAgICAgICAgKTsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgVXNlcklEID0+ICRDdXN0b21lclVzZXJJRCwKICAgICAgICAgICAgS2V5ICAgID0+ICdVc2VyTGFuZ3VhZ2UnLAogICAgICAgICAgICBWYWx1ZSAgPT4gJ2VuJywKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBUaWNrZXRzLgogICAgICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICAgICAgbXkgQFRpY2tldHM7CiAgICAgICAgZm9yIG15ICRDb3VudCAoIDEgLi4gMyApIHsKICAgICAgICAgICAgbXkgJFRpY2tldE51bWJlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZU51bWJlcigpOwogICAgICAgICAgICBteSAkVGlja2V0VGl0bGUgID0gJ1RpY2tldCcgLiAkQ291bnQgLiAkUmFuZG9tSUQ7CiAgICAgICAgICAgIG15ICVUaWNrZXQgICAgICAgPSAoCiAgICAgICAgICAgICAgICBUTiAgICAgICAgICAgID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgID0+ICRUaWNrZXRUaXRsZSwKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBMb2NrICAgICAgICAgID0+ICd1bmxvY2snLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBTTEFJRCAgICAgICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgICAgPT4gJEN1c3RvbWVyQ29tcGFueUlELAogICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VyICA9PiAkQ3VzdG9tZXJVc2VySUQsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgID0+ICRVc2Vyc1swXS0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRVc2Vyc1sxXS0+e1VzZXJJRH0sCgogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG9rKAogICAgICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAgICAgIkNyZWF0ZWQgVGlja2V0SUQgJFRpY2tldElEIgogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBUaWNrZXRzLCB7CiAgICAgICAgICAgICAgICBJRCAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgTnVtYmVyID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgICAgICBUaXRsZSAgPT4gJFRpY2tldFRpdGxlLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBSZWNyZWF0ZSBUaWNrZXRPYmplY3QgdG8gbGV0IGV2ZW50IGhhbmRsZXJzIHJ1biBhbHNvIGZvciB0cmFuc2FjdGlvbiBtb2RlLgogICAgICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCgKICAgICAgICAgICAgT2JqZWN0cyA9PiBbCiAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgICAgICAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICAgICAjIENyZWF0ZSBBcnRpY2xlcy4KICAgICAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgICAgICBteSBAQXJ0aWNsZXMgICAgICA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ2hhbm5lbE5hbWUgICAgICAgICAgPT4gJ0VtYWlsJywKICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ0Zyb20gJyAuICRSYW5kb21JRCAuICcgQSA8ZW1haWxAZXhhbXBsZS5jb20+JywKICAgICAgICAgICAgICAgIFRvICAgICAgICAgICAgICAgICAgID0+ICdUbyAnIC4gJFJhbmRvbUlEIC4gJyBBIDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ0ZpcnN0IEFydGljbGUgU3ViamVjdCAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ0ZpcnN0IEFydGljbGUgYm9keSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJ0VtYWlsQ3VzdG9tZXInLAogICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgPT4gJ0N1c3RvbWVyIHNlbnQgYW4gZW1haWwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDaGFubmVsTmFtZSAgICAgICAgICA9PiAnSW50ZXJuYWwnLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDAsCiAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICA9PiAnRnJvbSAnIC4gJFJhbmRvbUlEIC4gJyBCIDxlbWFpbEBleGFtcGxlLmNvbT4nLAogICAgICAgICAgICAgICAgVG8gICAgICAgICAgICAgICAgICAgPT4gJ1RvICcgLiAkUmFuZG9tSUQgLiAnIEIgPGVtYWlsQGV4YW1wbGUuY29tPicsCiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAnU2Vjb25kIEFydGljbGUgU3ViamVjdCAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ1NlY29uZCBBcnRpY2xlIGJvZHkgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdBZGROb3RlJywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICdBZ2VudCBjcmVhdGVkIG5vdGUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDaGFubmVsTmFtZSAgICAgICAgICA9PiAnRW1haWwnLAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ3N5c3RlbScsCiAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ09UT0JPIFN5c3RlbSA8b3RvYm9AbG9jYWxob3N0PicsCiAgICAgICAgICAgICAgICBDYyAgICAgICAgICAgICAgICAgICA9PiAnQ2MgJyAuICRSYW5kb21JRCAuICcgQyA8ZW1haWxAZXhhbXBsZS5jb20+JywKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdUaGlyZCBBcnRpY2xlIFN1YmplY3QgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdUaGlyZCBBcnRpY2xlIGJvZHkgJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdTZW5kQXV0b1JlcGx5JywKICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICdTZW50IGF1dG8gcmVwbHknLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIG15IEBBcnRpY2xlSURzOwogICAgICAgIGZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVzKSB7CiAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQ2hhbm5lbCgKICAgICAgICAgICAgICAgIENoYW5uZWxOYW1lID0+ICRBcnRpY2xlLT57Q2hhbm5lbE5hbWV9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJEFydGljbGVJRCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUNyZWF0ZSgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgID0+ICRUaWNrZXRzWzBdLT57SUR9LAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICV7JEFydGljbGV9LAogICAgICAgICAgICApOwogICAgICAgICAgICBvaygKICAgICAgICAgICAgICAgICRBcnRpY2xlSUQsCiAgICAgICAgICAgICAgICAiQ3JlYXRlZCBBcnRpY2xlSUQgJEFydGljbGVJRCIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAQXJ0aWNsZUlEcywgJEFydGljbGVJRDsKICAgICAgICB9CgogICAgICAgICMgQ3JlYXRlIER5bmFtaWMgRmllbGRzLgogICAgICAgIG15ICRSYW5kb21OdW1iZXIgID0gJEhlbHBlci0+R2V0UmFuZG9tTnVtYmVyOwogICAgICAgIG15ICVEeW5hbWljRmllbGRzID0gKAogICAgICAgICAgICBEcm9wZG93biA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdERkRyb3Bkb3duJyAuICRSYW5kb21OdW1iZXIsCiAgICAgICAgICAgICAgICBMYWJlbCAgICAgID0+ICdERkRyb3Bkb3duJyAuICRSYW5kb21OdW1iZXIsCiAgICAgICAgICAgICAgICBGaWVsZE9yZGVyID0+IDk5OTAsCiAgICAgICAgICAgICAgICBGaWVsZFR5cGUgID0+ICdEcm9wZG93bicsCiAgICAgICAgICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgICAgICAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZhbHVlICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIDAgPT4gJ05vdERGU2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAxID0+ICdZZXNERlNlbGVjdGVkJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0YWJsZVZhbHVlcyA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFJlb3JkZXIgPT4gMCwKICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTXVsdGlzZWxlY3QgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnREZNdWx0aXNlbGVjdCcgLiAkUmFuZG9tTnVtYmVyLAogICAgICAgICAgICAgICAgTGFiZWwgICAgICA9PiAnREZNdWx0aXNlbGVjdCcgLiAkUmFuZG9tTnVtYmVyLAogICAgICAgICAgICAgICAgRmllbGRPcmRlciA9PiA5OTkwLAogICAgICAgICAgICAgICAgRmllbGRUeXBlICA9PiAnTXVsdGlzZWxlY3QnLAogICAgICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICB5ZWFyICA9PiAneWVhcicsCiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoID0+ICdtb250aCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlZWsgID0+ICd3ZWVrJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0YWJsZVZhbHVlcyA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFJlb3JkZXIgPT4gMCwKICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVGV4dCA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdERlRleHQnIC4gJFJhbmRvbU51bWJlciwKICAgICAgICAgICAgICAgIExhYmVsICAgICAgPT4gJ0RGVGV4dCcgLiAkUmFuZG9tTnVtYmVyLAogICAgICAgICAgICAgICAgRmllbGRPcmRlciA9PiA5OTkwLAogICAgICAgICAgICAgICAgRmllbGRUeXBlICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICBPYmplY3RUeXBlID0+ICdBcnRpY2xlJywKICAgICAgICAgICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnJywKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUmVvcmRlciA9PiAwLAogICAgICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIG15ICVEeW5hbWljRmllbGRWYWx1ZXMgPSAoCiAgICAgICAgICAgIFRleHQgICAgICAgID0+ICJERlRleHQkUmFuZG9tSUQiLAogICAgICAgICAgICBEcm9wZG93biAgICA9PiAnMScsCiAgICAgICAgICAgIE11bHRpc2VsZWN0ID0+IFsKICAgICAgICAgICAgICAgICdtb250aCcsCiAgICAgICAgICAgICAgICAneWVhcicsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICAgICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgICAgIG15IEBEeW5hbWljRmllbGRJRHM7CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRUeXBlICggc29ydCBrZXlzICVEeW5hbWljRmllbGRzICkgewoKICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZElEID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgICAgICAgICAgICAgJXsgJER5bmFtaWNGaWVsZHN7JER5bmFtaWNGaWVsZFR5cGV9IH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBvaygKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRJRCwKICAgICAgICAgICAgICAgICJDcmVhdGVkIER5bmFtaWNGaWVsZCAkRHluYW1pY0ZpZWxkc3skRHluYW1pY0ZpZWxkVHlwZX0tPntOYW1lfSAtIElEICREeW5hbWljRmllbGRJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQER5bmFtaWNGaWVsZElEcywgJER5bmFtaWNGaWVsZElEOwoKICAgICAgICAgICAgIyBTZXQgRHluYW1pY0ZpZWxkIHZhbHVlIHRvIHRpY2tldCBvciBhcnRpY2xlIGFjY29yZGluZ2x5LgogICAgICAgICAgICBteSAkT2JqZWN0SUQgPSAkVGlja2V0c1swXS0+e0lEfTsKICAgICAgICAgICAgaWYgKCAkRHluYW1pY0ZpZWxkc3skRHluYW1pY0ZpZWxkVHlwZX0tPntPYmplY3RUeXBlfSBlcSAnQXJ0aWNsZScgKSB7CiAgICAgICAgICAgICAgICAkT2JqZWN0SUQgPSAkQXJ0aWNsZUlEc1swXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBTZXQgdGhlIHZhbHVlIGZyb20gdGhlIGR5bmFtaWMgZmllbGQuCiAgICAgICAgICAgIG15ICREeW5hbWljRmllbGRDb25maWcgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgICAgICBOYW1lID0+ICREeW5hbWljRmllbGRzeyREeW5hbWljRmllbGRUeXBlfS0+e05hbWV9LAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkVmFsdWUgPSAkRHluYW1pY0ZpZWxkVmFsdWVzeyREeW5hbWljRmllbGRUeXBlfTsKCiAgICAgICAgICAgICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRPYmplY3RJRCwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgRW5hYmxlIGNyZWF0ZWQgRHluYW1pY0ZpZWxkcyB0byBiZSB2aXNpYmxlIGluIEFnZW50VGlja2V0UHJpbnQuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0UHJpbnQjIyNEeW5hbWljRmllbGQnLAogICAgICAgICAgICBWYWx1ZSA9PiB7CiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkc3tEcm9wZG93bn0tPntOYW1lfSAgICA9PiAxLAogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZHN7TXVsdGlzZWxlY3R9LT57TmFtZX0gPT4gMSwKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRze1RleHR9LT57TmFtZX0gICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmFibGUgY3JlYXRlZCBEeW5hbWljRmllbGRzIHRvIGJlIHZpc2libGUgaW4gQ3VzdG9tZXJUaWNrZXRQcmludC4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRQcmludCMjI0R5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRze0Ryb3Bkb3dufS0+e05hbWV9ICAgID0+IDEsCiAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkc3tNdWx0aXNlbGVjdH0tPntOYW1lfSA9PiAxLAogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZHN7VGV4dH0tPntOYW1lfSAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIEVuYWJsZSBUaWNrZXQgYXR0cmlidXRlcyBpbiBDdXN0b21lclRpY2tldFpvb20gc2NyZWVuID0+IEN1c3RvbWVyVGlja2V0UHJpbnQuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0Wm9vbSMjI0F0dHJpYnV0ZXNWaWV3JywKICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgT3duZXIgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgID0+IDEsCiAgICAgICAgICAgICAgICBRdWV1ZSAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUmVzcG9uc2libGUgPT4gMSwKICAgICAgICAgICAgICAgIFNMQSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBTZXJ2aWNlICAgICA9PiAxLAogICAgICAgICAgICAgICAgU3RhdGUgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBMaW5rIGZpcnN0IGFuZCBzZWNvbmQgdGlja2V0IGFzIHBhcmVudC1jaGlsZC4KICAgICAgICBteSAkTGlua09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CiAgICAgICAgbXkgJFN1Y2Nlc3MgICAgPSAkTGlua09iamVjdC0+TGlua0FkZCgKICAgICAgICAgICAgU291cmNlT2JqZWN0ID0+ICdUaWNrZXQnLAogICAgICAgICAgICBTb3VyY2VLZXkgICAgPT4gJFRpY2tldHNbMF0tPntJRH0sCiAgICAgICAgICAgIFRhcmdldE9iamVjdCA9PiAnVGlja2V0JywKICAgICAgICAgICAgVGFyZ2V0S2V5ICAgID0+ICRUaWNrZXRzWzFdLT57SUR9LAogICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1BhcmVudENoaWxkJywKICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgb2soCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiVGlja2VkSUQgJFRpY2tldHNbMF0tPntJRH0gYW5kICRUaWNrZXRzWzFdLT57SUR9IGxpbmtlZCBhcyBwYXJlbnQtY2hpbGQiCiAgICAgICAgKTsKCiAgICAgICAgIyBMaW5rIGZpcnN0IGFuZCB0aGlyZCB0aWNrZXQgYXMgY2hpbGQtcGFyZW50LgogICAgICAgICRTdWNjZXNzID0gJExpbmtPYmplY3QtPkxpbmtBZGQoCiAgICAgICAgICAgIFNvdXJjZU9iamVjdCA9PiAnVGlja2V0JywKICAgICAgICAgICAgU291cmNlS2V5ICAgID0+ICRUaWNrZXRzWzJdLT57SUR9LAogICAgICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFRhcmdldEtleSAgICA9PiAkVGlja2V0c1swXS0+e0lEfSwKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdQYXJlbnRDaGlsZCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgIG9rKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlRpY2tlZElEICRUaWNrZXRzWzJdLT57SUR9IGFuZCAkVGlja2V0c1sxXS0+e0lEfSBsaW5rZWQgYXMgcGFyZW50LWNoaWxkIgogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgVXNlciBhbmQgbG9naW4uCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50VGlja2V0Wm9vbSBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRUaWNrZXRab29tO1RpY2tldElEPSRUaWNrZXRzWzBdLT57SUR9Iik7CgogICAgICAgICMgQ2xpY2sgdG8gcHJpbnQgdGlja2V0IGluIEFnZW50IGludGVyZmFjZSwgbWFraW5nIHN1cmUgdGhhdCB0aGUgbGluayBpcyB2aXNpYmxlIGZpcnN0CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNuYXYtTWlzY2VsbGFuZW91cy1jb250YWluZXInKS5jc3MoJ2hlaWdodCcsICdhdXRvJyk7Iik7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNuYXYtTWlzY2VsbGFuZW91cy1jb250YWluZXInKS5jc3MoJ29wYWNpdHknLCAnMScpOyIpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcjbmF2LU1pc2NlbGxhbmVvdXMtY29udGFpbmVyJykuY3NzKCdoZWlnaHQnKSAhPT0gJzBweCcgJiYgXCQoJyNuYXYtTWlzY2VsbGFuZW91cy1jb250YWluZXInKS5jc3MoJ29wYWNpdHknKSA9PSAnMSc7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWdlbnRUaWNrZXRQcmludDtUaWNrZXRJRD0kVGlja2V0c1swXS0+e0lEfScgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgIyBTd2l0Y2ggdG8gQWdlbnRUaWNrZXRQcmludCBwb3AgdXAgd2luZG93LgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyBTcGVjaWFsIGFwcHJvYWNoIGlzIHVzZWQgZm9yIHdhaXRpbmcgZm9yIFBERiBkb2N1bWVudCB0byBiZSBsb2FkZWQgZnVsbHkgYmVmb3JlIGNoZWNraW5nIGl0J3MgY29udGVudC4KICAgICAgICAjIFRoaXMgaXMgc3VwcG9ydGVkIGFuZCB0ZXN0ZWQgaW4gTW96aWxsYSBGaXJlZm94IGJyb3dzZXIuCiAgICAgICAgIyRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImVuZE9mQ29udGVudCIpLmxlbmd0aCA9PT0gMicgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBzY2VuYXJpb3MuCiAgICAgICAgbXkgQFRlc3RzID0gKAoKICAgICAgICAgICAgIyBUaWNrZXQgaW5mb3JtYXRpb24uCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAiVGlja2V0IyRUaWNrZXRzWzBdLT57TnVtYmVyfSIsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gIlRpY2tldCMkVGlja2V0c1swXS0+e051bWJlcn0gdmFsdWUgaXMgY29ycmVjdCIsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVGlja2V0c1swXS0+e1RpdGxlfSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnVGlja2V0VGl0bGUgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAicHJpbnRlZCBieSAkVGVzdFVzZXJMb2dpbiAkVGVzdFVzZXJMb2dpbiAoJFRlc3RVc2VyTG9naW5cQGxvY2FsdW5pdHRlc3QuY29tKSwiLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdQcmludGVkQnkgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gInByaW50ZWQgYnkgJEN1c3RvbWVyVXNlcntVc2VyRmlyc3RuYW1lfSAkQ3VzdG9tZXJVc2Vye1VzZXJMYXN0bmFtZX0iLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdQcmludGVkQnkgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0N1c3RvbWVyJwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1N0YXRlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU3RhdGUgbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnb3BlbicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1N0YXRlIHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0FnZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0FnZSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICcwIG0nLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdBZ2UgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQWNjb3VudGVkIHRpbWUnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdBY2NvdW50ZWQgdGltZSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0ZpcnN0IFJlc3BvbnNlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRmlyc3QgUmVzcG9uc2UgVGltZSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1NvbHV0aW9uIFRpbWUnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdBY2NvdW50ZWQgdGltZSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnUHJpb3JpdHkgbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdQcmlvcml0eSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDcmVhdGVkJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ3JlYXRlZCBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdRdWV1ZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1F1ZXVlIGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFF1ZXVlTmFtZSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnUXVldWUgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnTG9jaycsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0xvY2sgbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICd1bmxvY2snLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdMb2NrIHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQ3VzdG9tZXJJRCcsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0N1c3RvbWVySUQgbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQ3VzdG9tZXJDb21wYW55e0N1c3RvbWVySUR9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDdXN0b21lcklEIHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ093bmVyJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnT3duZXIgbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVXNlcnNbMF0tPntVc2VyTG9naW59LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdPd25lciBmaXJzdCByb3cgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnKCcgLiAkVXNlcnNbMF0tPntVc2VyRmlyc3RuYW1lfSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnT3duZXIgc2Vjb25kIHJvdyB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFVzZXJzWzBdLT57VXNlckxhc3RuYW1lfSAuICcpJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnT3duZXIgdGhpcmQgcm93IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnUmVzcG9uc2libGUnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdSZXNwb25zaWJsZSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRVc2Vyc1sxXS0+e1VzZXJMb2dpbn0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1Jlc3BvbnNpYmxlIGZpcnN0IHJvdyB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICcoJyAuICRVc2Vyc1sxXS0+e1VzZXJGaXJzdG5hbWV9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdSZXNwb25zaWJsZSBzZWNvbmQgcm93IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVXNlcnNbMV0tPntVc2VyTGFzdG5hbWV9IC4gJyknLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdSZXNwb25zaWJsZSB0aGlyZCByb3cgdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdUeXBlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnVHlwZSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRUeXBlTmFtZSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnVHlwZSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU2VydmljZSBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZXJ2aWNlTmFtZSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU2VydmljZSB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdTTEEnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTTEEgbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU0xBTmFtZSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnU0xBIHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyBUaWNrZXQgRHluYW1pYyBGaWVsZHMuCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkRHluYW1pY0ZpZWxkc3tEcm9wZG93bn0tPntMYWJlbH0gLiAnOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0R5bmFtaWNGaWVsZCBEcm9wZG93biBsYWJlbCBpcyBjb3JyZWN0IGZvciBUaWNrZXQnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1llc0RGU2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdEeW5hbWljRmllbGQgRHJvcGRvd24gdmFsdWUgaXMgY29ycmVjdCBmb3IgVGlja2V0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICREeW5hbWljRmllbGRze011bHRpc2VsZWN0fS0+e0xhYmVsfSAuICc6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRHluYW1pY0ZpZWxkIE11bHRpc2VsZWN0IGxhYmVsIGlzIGNvcnJlY3QgZm9yIFRpY2tldCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnbW9udGgsIHllYXInLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdEeW5hbWljRmllbGQgTXVsdGlzZWxlY3QgdmFsdWUgaXMgY29ycmVjdCBmb3IgVGlja2V0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgTGlua2VkIE9iamVjdHMuCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnUGFyZW50OicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1BhcmVudDogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRUaWNrZXRzWzJdLT57TnVtYmVyfSAuICc6ICcgLiAkVGlja2V0c1syXS0+e05hbWV9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdQYXJlbnQ6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQ2hpbGQ6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ2hpbGQ6IGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVGlja2V0c1sxXS0+e051bWJlcn0gLiAnOiAnIC4gJFRpY2tldHNbMV0tPntOYW1lfSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ2hpbGQ6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAjIEN1c3RvbWVyIGluZm9ybWF0aW9uLgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0N1c3RvbWVyIEluZm9ybWF0aW9uJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ3VzdG9tZXIgSW5mb3JtYXRpb24gaGVhZGVyIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0ZpcnN0bmFtZTonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdGaXJzdG5hbWU6IGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEN1c3RvbWVyVXNlcntVc2VyRmlyc3RuYW1lfSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnRmlyc3RuYW1lOiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdMYXN0bmFtZTonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdMYXN0bmFtZTogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQ3VzdG9tZXJVc2Vye1VzZXJMYXN0bmFtZX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0xhc3RuYW1lOiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdVc2VybmFtZTonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdVc2VybmFtZTogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQ3VzdG9tZXJVc2Vye1VzZXJMb2dpbn0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1VzZXJuYW1lOiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdFbWFpbDonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdFbWFpbDogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQ3VzdG9tZXJVc2Vye1VzZXJFbWFpbH0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0VtYWlsOiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDdXN0b21lcjonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDdXN0b21lcjogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQ3VzdG9tZXJDb21wYW55e0N1c3RvbWVyQ29tcGFueU5hbWV9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDdXN0b21lcjogdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnU3RyZWV0OicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1N0cmVldDogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQ3VzdG9tZXJDb21wYW55e0N1c3RvbWVyQ29tcGFueVN0cmVldH0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1N0cmVldDogdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnWmlwOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1ppcDogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQ3VzdG9tZXJDb21wYW55e0N1c3RvbWVyQ29tcGFueVpJUH0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1ppcDogdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnQ2l0eTonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDaXR5OiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJDb21wYW55Q2l0eX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0NpdHk6IHZhbHVlIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0NvdW50cnk6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ291bnRyeTogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQ3VzdG9tZXJDb21wYW55e0N1c3RvbWVyQ29tcGFueUNvdW50cnl9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDb3VudHJ5OiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdVUkw6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnVVJMOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRDdXN0b21lckNvbXBhbnl7Q3VzdG9tZXJDb21wYW55VVJMfSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnVVJMOiB2YWx1ZSBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDb21tZW50OicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0NvbW1lbnQ6IGxhYmVsIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEN1c3RvbWVyQ29tcGFueXtDdXN0b21lckNvbXBhbnlDb21tZW50fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ29tbWVudDogdmFsdWUgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAjIEFydGljbGUgIzMgaW5mb3JtYXRpb24uCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnRnJvbTonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdGcm9tOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdPVE9CTyBTeXN0ZW0nLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdGcm9tOiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzMnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1RvOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1RvOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDYzonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdGcm9tOiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdDYyAnIC4gJFJhbmRvbUlEIC4gJyBDJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ2M6IHZhbHVlIGlzIGNvcnJlY3QgZm9yIEFydGljbGUjMycsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnU3ViamVjdDonLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTdWJqZWN0OiBsYWJlbCBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRBcnRpY2xlc1syXS0+e1N1YmplY3R9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTdWJqZWN0OiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzMnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0NyZWF0ZWQ6JywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ3JlYXRlZDogbGFiZWwgaXMgY29ycmVjdCcsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnYnkgc3lzdGVtJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQ3JlYXRlZDogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMzJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWxsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRBcnRpY2xlc1syXS0+e0JvZHl9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdCb2R5OiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzMnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyBBcnRpY2xlICMyIGluZm9ybWF0aW9uLgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0Zyb20gJyAuICRSYW5kb21JRCAuICcgQicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0Zyb206IHZhbHVlIGlzIGNvcnJlY3QgZm9yIEFydGljbGUjMicsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICdUbyAnIC4gJFJhbmRvbUlEIC4gJyBCJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnVG86IHZhbHVlIGlzIGNvcnJlY3QgZm9yIEFydGljbGUjMicsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FnZW50JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRBcnRpY2xlc1sxXS0+e1N1YmplY3R9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdTdWJqZWN0OiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzInLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnYnkgYWdlbnQnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDcmVhdGVkOiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzInLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBZ2VudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkQXJ0aWNsZXNbMV0tPntCb2R5fSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnQm9keTogdmFsdWUgaXMgY29ycmVjdCBmb3IgQXJ0aWNsZSMyJywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyBBcnRpY2xlICMxIGluZm9ybWF0aW9uLgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ0Zyb20gJyAuICRSYW5kb21JRCAuICcgQScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0Zyb206IHZhbHVlIGlzIGNvcnJlY3QgZm9yIEFydGljbGUjMScsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnVG8gJyAuICRSYW5kb21JRCAuICcgQScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1RvOiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzEnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEFydGljbGVzWzBdLT57U3ViamVjdH0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1N1YmplY3Q6IHZhbHVlIGlzIGNvcnJlY3QgZm9yIEFydGljbGUjMScsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnYnkgY3VzdG9tZXInLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdDcmVhdGVkOiB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzEnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJER5bmFtaWNGaWVsZHN7VGV4dH0tPntMYWJlbH0gLiAnOicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0R5bmFtaWNGaWVsZCBUZXh0IGxhYmVsIGlzIGNvcnJlY3QgZm9yIEFydGljbGUjMScsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkRHluYW1pY0ZpZWxkVmFsdWVze1RleHR9LAogICAgICAgICAgICAgICAgTWVzc2FnZSAgID0+ICdEeW5hbWljRmllbGQgVGV4dCB2YWx1ZSBpcyBjb3JyZWN0IGZvciBBcnRpY2xlIzEnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEFydGljbGVzWzBdLT57Qm9keX0sCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ0JvZHk6IHZhbHVlIGlzIGNvcnJlY3QgZm9yIEFydGljbGUjMScsCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgPT4gJ0FsbCcsCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAjIFBhZ2luYXRpb24uCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAnUGFnZSAxJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICA9PiAnUGFnZSAxIGlzIGNvcnJlY3QnLAogICAgICAgICAgICAgICAgSW50ZXJmYWNlID0+ICdBbGwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJ1BhZ2UgMicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgPT4gJ1BhZ2UgMiBpcyBjb3JyZWN0JywKICAgICAgICAgICAgICAgIEludGVyZmFjZSA9PiAnQWdlbnQnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgojIFZlcmlmeSB2YWx1ZXMgaW4gdGhlIFBERiBnZW5lcmF0ZWQgYnkgQWdlbnRUaWNrZXRQcmludC4KIyBBcHBhcmVudGx5IGl0IGlzIG5vdCB0cml2aWFsIHRvIGdldCB0byB0aGUgdGV4dCBvZiB0aGUgUERGLiBVbmRlciBjaHJvbWUgdGhlIEhUTUwgaXMgbm90IGluZm9ybWF0aXZlOgojJzxodG1sPjxoZWFkPjwvaGVhZD48Ym9keSBzdHlsZT0iaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsgbWFyZ2luOjBweDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDgyLCA4NiwgODkpOyI+PGVtYmVkIG5hbWU9IkUxMEFGM0E5OUU2ODE5MkM4NjI1QjY0NDdBOEJDRUI1IiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6IDA7IHRvcDogMDsiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHNyYz0iYWJvdXQ6YmxhbmsiIHR5cGU9ImFwcGxpY2F0aW9uL3BkZiIgaW50ZXJuYWxpZD0iRTEwQUYzQTk5RTY4MTkyQzg2MjVCNjQ0N0E4QkNFQjUiPjwvYm9keT48L2h0bWw+JwojIFNvIGxldCdzIHNraXAgdGhlIGFjdHVhbCB0ZXN0cy4KICAgICAgICBteSAkQWdlbnRQYWdlU291cmNlID0gJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKTsKICAgICAgICBmb3IgbXkgJFRlc3QgKEBUZXN0cykgewogICAgICAgICAgICBpZiAoICRUZXN0LT57SW50ZXJmYWNlfSBlcSAnQWxsJyB8fCAkVGVzdC0+e0ludGVyZmFjZX0gZXEgJ0FnZW50JyApIHsKICAgICAgICAgICAgICAgIG15ICRUb0RvID0gdG9kbyAiSFRNTCBjb250ZW50IGRvZXMgbm90IGNvbnRhaW4gdGhlIHRleHQgb2YgdGhlIFBERiI7CgogICAgICAgICAgICAgICAgbGlrZSgKICAgICAgICAgICAgICAgICAgICAkQWdlbnRQYWdlU291cmNlLAogICAgICAgICAgICAgICAgICAgIHFyL1xRJFRlc3QtPntWYWx1ZX1cRS8sCiAgICAgICAgICAgICAgICAgICAgIkFnZW50IC0gJFRlc3QtPntNZXNzYWdlfSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIENsb3NlIEFnZW50VGlja2V0UHJpbnQgUERGIHBvcCB1cCB3aW5kb3cgYW5kIHN3aXRjaCB3aW5kb3cuCiAgICAgICAgJFNlbGVuaXVtLT5jbG9zZTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKCiAgICAgICAgIyBMb2dpbiBjdXN0b21lciB1c2VyLgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdDdXN0b21lcicsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRDdXN0b21lclVzZXJ7VXNlckxvZ2lufSwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJEN1c3RvbWVyVXNlcntVc2VyUGFzc3dvcmR9LAogICAgICAgICk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQ3VzdG9tZXJUaWNrZXRab29tIG9mIGNyZWF0ZWQgZmlyc3QgdGlja2V0LgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWN1c3RvbWVyLnBsP0FjdGlvbj1DdXN0b21lclRpY2tldFpvb207VGlja2V0TnVtYmVyPSRUaWNrZXRzWzBdLT57TnVtYmVyfSIKICAgICAgICApOwoKICAgICAgICAjIENsaWNrIHRvIHByaW50IHRpY2tldCBpbiBDdXN0b21lciBpbnRlcmZhY2UuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjb29vSGVhZGVyIC5vb29mby1tb3JlX3YiLCAnY3NzJyApLT5jbGljazsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdDdXN0b21lclRpY2tldFByaW50O1RpY2tldElEPSRUaWNrZXRzWzBdLT57SUR9JyApXSIpLT5jbGljazsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIFNwZWNpYWwgYXBwcm9hY2ggaXMgdXNlZCBmb3Igd2FpdGluZyBmb3IgUERGIGRvY3VtZW50IHRvIGJlIGxvYWRlZCBmdWxseSBiZWZvcmUgY2hlY2tpbmcgaXQncyBjb250ZW50LgogICAgICAgICMgQ3VycmVudGx5IHRoaXMgaXMgc3VwcG9ydGVkIGluIE1vemlsbGEgRmlyZWZveCBicm93c2VyLgogICAgICAgICMkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlbmRPZkNvbnRlbnQiKS5sZW5ndGggPT09IDEnICk7CgogICAgICAgICMgVmVyaWZ5IHZhbHVlcyBpbiB0aGUgUERGIGdlbmVyYXRlZCBieSBDdXN0b21lclRpY2tldFByaW50LgogICAgICAgICMgQXBwYXJlbnRseSBpdCBpcyBub3QgdHJpdmlhbCB0byBnZXQgdG8gdGhlIHRleHQgb2YgdGhlIFBERi4gVW5kZXIgY2hyb21lIHRoZSBIVE1MIGlzIG5vdCBpbmZvcm1hdGl2ZToKICAgICAgICBteSAkQ3VzdG9tZXJQYWdlU291cmNlID0gJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKTsKICAgICAgICBmb3IgbXkgJFRlc3QgKEBUZXN0cykgewogICAgICAgICAgICBpZiAoICRUZXN0LT57SW50ZXJmYWNlfSBlcSAnQWxsJyB8fCAkVGVzdC0+e0ludGVyZmFjZX0gZXEgJ0N1c3RvbWVyJyApIHsKICAgICAgICAgICAgICAgIG15ICRUb0RvID0gdG9kbyAiSFRNTCBjb250ZW50IGRvZXMgbm90IGNvbnRhaW4gdGhlIHRleHQgb2YgdGhlIFBERiI7CgogICAgICAgICAgICAgICAgbGlrZSgKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJQYWdlU291cmNlLAogICAgICAgICAgICAgICAgICAgIHFyL1xRJFRlc3QtPntWYWx1ZX1cRS8sCiAgICAgICAgICAgICAgICAgICAgIkN1c3RvbWVyIC0gJFRlc3QtPntNZXNzYWdlfSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFRlc3QtPntJbnRlcmZhY2V9IGVxICdBZ2VudCcgKSB7CiAgICAgICAgICAgICAgICB1bmxpa2UoCiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyUGFnZVNvdXJjZSwKICAgICAgICAgICAgICAgICAgICBxci9cUSRUZXN0LT57VmFsdWV9XEUvLAogICAgICAgICAgICAgICAgICAgICJDdXN0b21lciAtICRUZXN0LT57TWVzc2FnZX0gLSBub3QgdmlzaWJsZSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIERlbGV0ZSB0ZXN0IFRpY2tldHMuCiAgICAgICAgZm9yIG15ICRUaWNrZXQgKCByZXZlcnNlIEBUaWNrZXRzICkgewogICAgICAgICAgICAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXQtPntJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBUaWNrZXQgZGVsZXRpb24gY291bGQgZmFpbCBpZiBhcGFjaGUgc3RpbGwgd3JpdGVzIHRvIHRpY2tldCBoaXN0b3J5LiBUcnkgYWdhaW4gaW4gdGhpcyBjYXNlLgogICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgIHNsZWVwIDM7CiAgICAgICAgICAgICAgICAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0LT57SUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG9rKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiVGlja2V0SUQgJFRpY2tldC0+e0lEfSBpcyBkZWxldGVkIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgRGVsZXRlIHRlc3QgRHluYW1pY0ZpZWxkcy4KICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZElEIChARHluYW1pY0ZpZWxkSURzKSB7CgogICAgICAgICAgICAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgICAgICAgICAgICAgIElEICAgICA9PiAkRHluYW1pY0ZpZWxkSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgb2soCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJEeW5hbWljRmllbGQgSUQgJER5bmFtaWNGaWVsZElEIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBEZWxldGUgdGVzdCBkYXRhIGZyb20gdGhlIERCLgogICAgICAgIG15IEBEZWxldGVEYXRhID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTUUwgICAgID0+ICJERUxFVEUgRlJPTSBjdXN0b21lcl91c2VyIFdIRVJFIGxvZ2luID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kICAgID0+ICRDdXN0b21lclVzZXJJRCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkN1c3RvbWVyVXNlcklEICRDdXN0b21lclVzZXJJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gY3VzdG9tZXJfY29tcGFueSBXSEVSRSBjdXN0b21lcl9pZCA9ID8iLAogICAgICAgICAgICAgICAgQmluZCAgICA9PiAkQ3VzdG9tZXJDb21wYW55SUQsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDdXN0b21lckNvbXBhbnlJRCAkQ3VzdG9tZXJDb21wYW55SUQgaXMgZGVsZXRlZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNRTCAgICAgPT4gIkRFTEVURSBGUk9NIHRpY2tldF90eXBlIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJUeXBlSUQgJFR5cGVJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kICAgID0+ICRTTEFJRCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlNlcnZpY2UtU0xBIHJlbGF0aW9uIGRlbGV0ZWQiLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTUUwgICAgID0+ICJERUxFVEUgRlJPTSBzbGEgV0hFUkUgaWQgPSA/IiwKICAgICAgICAgICAgICAgIEJpbmQgICAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiU0xBSUQgJFNMQUlEIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgIyBJVFNNQ29yZQogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTUUwgICAgID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlX3ByZWZlcmVuY2VzIFdIRVJFIHNlcnZpY2VfaWQgPSA/IiwKICAgICAgICAgICAgICAgIEJpbmQgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlNlcnZpY2UgcHJlZmVyZW5jZXMgZm9yICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCIsCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTUUwgICAgID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJTZXJ2aWNlSUQgJFNlcnZpY2VJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gcXVldWUgV0hFUkUgaWQgPSA/IiwKICAgICAgICAgICAgICAgIEJpbmQgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJRdWV1ZUlEICRRdWV1ZUlEIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwogICAgICAgIGZvciBteSAkSXRlbSAoQERlbGV0ZURhdGEpIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMICA9PiAkSXRlbS0+e1NRTH0sCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCRJdGVtLT57QmluZH0gXSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgb2soCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICRJdGVtLT57TWVzc2FnZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIENsZWFyIGNhY2hlLgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCk7CiAgICB9Cik7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/Selenium/Output/Preferences/Agent/CustomService.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL091dHB1dC9QcmVmZXJlbmNlcy9BZ2VudC9DdXN0b21TZXJ2aWNlLnQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwp1c2UgVGVzdDI6OlYwOwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlJlZ2lzdGVyRHJpdmVyOyAgICAjIFNldCB1cCAkS2VybmVsOjpPTSBhbmQgJG1haW46OlNlbGYKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW07CgpvdXIgJFNlbGY7CgpteSAkU2VsZW5pdW0gPSBLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtLT5uZXcoIExvZ0V4ZWN1dGVDb21tYW5kQWN0aXZlID0+IDEgKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBlbmFibGUgdGhlIHNlcnZpY2VzCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgIFZhbHVlID0+ICcxJywKICAgICAgICApOwoKICAgICAgICAjIGRvbid0IGtlZXAgY2hpbGRyZW4gc2VydmljZXMKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlOjpLZWVwQ2hpbGRyZW4nLAogICAgICAgICAgICBWYWx1ZSA9PiAnMCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2dpbgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRlc3QgdXNlciBJRAogICAgICAgIG15ICRUZXN0VXNlcklEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CiAgICAgICAgb2soICRUZXN0VXNlcklELCAnZm91bmQgdXNlcicgKTsKCiAgICAgICAgIyBnZXQgc2VydmljZSBvYmplY3QKICAgICAgICBteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CgogICAgICAgICMgY3JlYXRlIHR3byB0ZXN0IHNlcnZpY2VzCiAgICAgICAgbXkgQFNlcnZpY2VJRHM7CiAgICAgICAgbXkgQFNlcnZpY2VOYW1lczsKICAgICAgICBmb3IgbXkgJFNlcnZpY2UgKHF3KFBhcmVudCBDaGlsZCkpIHsKICAgICAgICAgICAgbXkgJFNlcnZpY2VOYW1lID0gJFNlcnZpY2UgLiAnU2VydmljZScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgICAgICBteSAkU2VydmljZUlEICAgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgICAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICAgICAgVmFsaWRJRCA9PiAyLCAgICAgICAgICAgICAgICAgIyBpbnZhbGlkCiAgICAgICAgICAgICAgICBDb21tZW50ID0+ICdTZWxlbml1bSBUZXN0JywKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAgICAgIlNlcnZpY2UgSUQgJFNlcnZpY2VJRCBpcyBjcmVhdGVkIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBAU2VydmljZUlEcywgICAkU2VydmljZUlEOwogICAgICAgICAgICBwdXNoIEBTZXJ2aWNlTmFtZXMsICRTZXJ2aWNlTmFtZTsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHNlY29uZCBzZXJ2aWNlIHRvIGJlIGNoaWxkIG9mIGZpcnN0IG9uZSBhbmQgZW5hYmxlIGl0CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSURzWzFdLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lc1sxXSwKICAgICAgICAgICAgUGFyZW50SUQgID0+ICRTZXJ2aWNlSURzWzBdLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBJRCAkU2VydmljZUlEc1sxXSBpcyBub3cgY2hpbGQgc2VydmljZSIKICAgICAgICApOwoKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgZ28gdG8gYWdlbnQgcHJlZmVyZW5jZXMKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRQcmVmZXJlbmNlcztTdWJhY3Rpb249R3JvdXA7R3JvdXA9Tm90aWZpY2F0aW9uU2V0dGluZ3MiCiAgICAgICAgKTsKCiAgICAgICAgIyB2ZXJpZnkgY2hpbGQgc2VydmljZSBpcyBub3Qgc2hvd24KICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAicmV0dXJuIFwkKCcjU2VydmljZUlEIG9wdGlvblt2YWx1ZT1cIiRTZXJ2aWNlSURzWzFdXCJdJykubGVuZ3RoOyIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgJ0NoaWxkIHNlcnZpY2UgaXMgbm90IHNob3duJywKICAgICAgICApOwoKICAgICAgICAjIHR1cm4gb24ga2VlcCBjaGlsZHJlbiBzZXR0aW5nCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZTo6S2VlcENoaWxkcmVuJywKICAgICAgICAgICAgVmFsdWUgPT4gJzEnLAogICAgICAgICk7CgogICAgICAgICMgcmVmcmVzaCB0aGUgcGFnZQogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFByZWZlcmVuY2VzO1N1YmFjdGlvbj1Hcm91cDtHcm91cD1Ob3RpZmljYXRpb25TZXR0aW5ncyIKICAgICAgICApOwoKICAgICAgICAjIHZlcmlmeSBjaGlsZCBzZXJ2aWNlIGlzIHNob3duIChidWcjMTE4MTYpCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI1NlcnZpY2VJRCBvcHRpb25bdmFsdWU9XCIkU2VydmljZUlEc1sxXVwiXScpLmxlbmd0aDsiCiAgICAgICAgICAgICksCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICdDaGlsZCBzZXJ2aWNlIGlzIHNob3duJywKICAgICAgICApOwoKICAgICAgICAjIGFkZCBjaGlsZCBzZXJ2aWNlIHRvICdNeSBTZXJ2aWNlcycgcHJlZmVyZW5jZQogICAgICAgICRTZWxlbml1bS0+SW5wdXRGaWVsZFZhbHVlU2V0KAogICAgICAgICAgICBFbGVtZW50ID0+ICcjU2VydmljZUlEJywKICAgICAgICAgICAgVmFsdWUgICA9PiAkU2VydmljZUlEc1sxXSwKICAgICAgICApOwoKICAgICAgICAjIHNhdmUgdGhlIHNldHRpbmcsIHdhaXQgZm9yIHRoZSBhamF4IGNhbGwgdG8gZmluaXNoIGFuZCBjaGVjayBpZiBzdWNjZXNzIHNpZ24gaXMgc2hvd24KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNTZXJ2aWNlSUQnKS5jbG9zZXN0KCcuV2lkZ2V0U2ltcGxlJykuZmluZCgnLlNldHRpbmdVcGRhdGVCb3gnKS5maW5kKCdidXR0b24nKS50cmlnZ2VyKCdjbGljaycpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI1NlcnZpY2VJRCcpLmNsb3Nlc3QoJy5XaWRnZXRTaW1wbGUnKS5oYXNDbGFzcygnSGFzT3ZlcmxheScpIgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAicmV0dXJuIFwkKCcjU2VydmljZUlEJykuY2xvc2VzdCgnLldpZGdldFNpbXBsZScpLmZpbmQoJy5mYS1jaGVjaycpLmxlbmd0aCIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgInJldHVybiAhXCQoJyNTZXJ2aWNlSUQnKS5jbG9zZXN0KCcuV2lkZ2V0U2ltcGxlJykuaGFzQ2xhc3MoJ0hhc092ZXJsYXknKSIKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBkZWxldGUgcGVyc29uYWwgc2VydmljZXMgY29ubmVjdGlvbgogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBwZXJzb25hbF9zZXJ2aWNlcyBXSEVSRSBzZXJ2aWNlX2lkID0gJFNlcnZpY2VJRHNbMV0iLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiRGVsZXRlIHBlcnNvbmFsIHNlcnZpY2UgY29ubmVjdGlvbiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IHNlcnZpY2VzCiAgICAgICAgZm9yIG15ICRJbmRleCAoIDAgLi4gMSApIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gJFNlcnZpY2VJRHNbJEluZGV4XSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiRGVsZXRlIHNlcnZpY2UgLSAkU2VydmljZUlEc1skSW5kZXhdIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgIFR5cGUgPT4gJ1NlcnZpY2UnLAogICAgICAgICk7CiAgICB9LAopOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/Selenium/Output/TicketZoom/TicketInformation.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL091dHB1dC9UaWNrZXRab29tL1RpY2tldEluZm9ybWF0aW9uLnQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCiMgY29yZSBtb2R1bGVzCnVzZSBQT1NJWCBxdyggZmxvb3IgKTsKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bTsKCm91ciAkU2VsZjsKCm15ICRTZWxlbml1bSA9IEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0tPm5ldyggTG9nRXhlY3V0ZUNvbW1hbmRBY3RpdmUgPT4gMSApOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgbXkgJEhlbHBlciAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CiAgICAgICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgICAgICMgRGlzYWJsZSAnVGlja2V0IEluZm9ybWF0aW9uJywgJ0N1c3RvbWVyIEluZm9ybWF0aW9uJyBhbmQgJ0xpbmtlZCBPYmplY3RzJyB3aWRnZXRzIGluIEFnZW50VGlja2V0Wm9vbSBzY3JlZW4uCiAgICAgICAgZm9yIG15ICRXaWRnZXREaXNhYmxlIChxdygwMTAwLVRpY2tldEluZm9ybWF0aW9uIDAyMDAtQ3VzdG9tZXJJbmZvcm1hdGlvbiAwMzAwLUxpbmtUYWJsZSkpIHsKICAgICAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgICAgIFZhbGlkID0+IDAsCiAgICAgICAgICAgICAgICBLZXkgICA9PiAiVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tIyMjV2lkZ2V0cyMjIyRXaWRnZXREaXNhYmxlIiwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICcnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBlbmFibGUgdGlja2V0IHNlcnZpY2UsIHR5cGUsIHJlc3BvbnNpYmxlCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gMQogICAgICAgICk7CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6VHlwZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpUeXBlJywKICAgICAgICAgICAgVmFsdWUgPT4gMQogICAgICAgICk7CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6UmVzcG9uc2libGUnLAogICAgICAgICAgICBWYWx1ZSA9PiAxLAogICAgICAgICk7CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6UmVzcG9uc2libGUnLAogICAgICAgICAgICBWYWx1ZSA9PiAxCiAgICAgICAgKTsKCiAgICAgICAgIyBVc2UgYSBjYWxlbmRhciB3aXRoIHRoZSBzYW1lIGJ1c2luZXNzIGhvdXJzIGZvciBldmVyeSBkYXkgc28gdGhhdCB0aGUgVVQgcnVucyBjb3JyZWN0bHkKICAgICAgICAjIG9uIGV2ZXJ5IGRheSBvZiB0aGUgd2VlayBhbmQgb3V0c2lkZSB1c3VhbCBidXNpbmVzcyBob3Vycy4KICAgICAgICBteSAlV2VlazsKICAgICAgICBteSBARGF5cyA9IHF3KFN1biBNb24gVHVlIFdlZCBUaHUgRnJpIFNhdCk7CiAgICAgICAgZm9yIG15ICREYXkgKEBEYXlzKSB7CiAgICAgICAgICAgICRXZWVreyREYXl9ID0gWyAwIC4uIDIzIF07CiAgICAgICAgfQogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIEtleSAgID0+ICdUaW1lV29ya2luZ0hvdXJzJywKICAgICAgICAgICAgVmFsdWUgPT4gXCVXZWVrLAogICAgICAgICk7CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpbWVXb3JraW5nSG91cnMnLAogICAgICAgICAgICBWYWx1ZSA9PiBcJVdlZWssCiAgICAgICAgKTsKCiAgICAgICAgIyBEaXNhYmxlIGRlZmF1bHQgVmFjYXRpb24gZGF5cy4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnVGltZVZhY2F0aW9uRGF5cycsCiAgICAgICAgICAgIFZhbHVlID0+IHt9LAogICAgICAgICk7CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpbWVWYWNhdGlvbkRheXMnLAogICAgICAgICAgICBWYWx1ZSA9PiB7fSwKICAgICAgICApOwoKICAgICAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgcmVzcG9uc2libGUgdXNlci4KICAgICAgICBteSAkUmVzcG9uc2libGVVc2VyID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbJ2FkbWluJ10sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICMgR2V0IHRlc3QgdXNlciByZXNwb25zaWJsZSBJRC4KICAgICAgICBteSAkUmVzcG9uc2libGVVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRSZXNwb25zaWJsZVVzZXIsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCB1c2VyLgogICAgICAgIG15ICRVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsnYWRtaW4nXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgIyBHZXQgdGVzdCB1c2VyIGxvZ2luIElELgogICAgICAgIG15ICRVc2VyTG9naW5JRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIEdldCB0ZXN0IHRpY2tldCBkYXRhLgogICAgICAgIG15ICRSYW5kb21JRCAgID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAlVGlja2V0RGF0YSA9ICgKICAgICAgICAgICAgQWdlICAgICAgICAgICA9PiAnMCBtJywKICAgICAgICAgICAgVHlwZSAgICAgICAgICA9PiAiVHlwZSRSYW5kb21JRCIsCiAgICAgICAgICAgIFNlcnZpY2UgICAgICAgPT4gIlNlcnZpY2UkUmFuZG9tSUQiLAogICAgICAgICAgICBTTEEgICAgICAgICAgID0+ICJTTEEkUmFuZG9tSUQiLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICJRdWV1ZSRSYW5kb21JRCIsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJzUgdmVyeSBoaWdoJywKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAnb3BlbicsCiAgICAgICAgICAgIExvY2tlZCAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgIFJlc3BvbnNpYmxlICAgPT4gJFJlc3BvbnNpYmxlVXNlciwKICAgICAgICAgICAgQ3JlYXRlZEJ5VXNlciA9PiAkVXNlck9iamVjdC0+VXNlck5hbWUoIFVzZXJJRCA9PiAkVXNlckxvZ2luSUQgKSwKICAgICAgICApOwoKICAgICAgICBteSAkVHlwZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgdHlwZS4KICAgICAgICBteSAkVHlwZUlEID0gJFR5cGVPYmplY3QtPlR5cGVBZGQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFRpY2tldERhdGF7VHlwZX0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRUeXBlSUQsCiAgICAgICAgICAgICJUeXBlSUQgJFR5cGVJRCBpcyBjcmVhdGVkIgogICAgICAgICk7CgogICAgICAgIG15ICRRdWV1ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHF1ZXVlLgogICAgICAgIG15ICRRdWV1ZUlEID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgID0+ICRUaWNrZXREYXRhe1F1ZXVlfSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgIEdyb3VwSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICBTeXN0ZW1BZGRyZXNzSUQgPT4gMSwKICAgICAgICAgICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICAgICAgICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgPT4gJ1NlbGVuaXVtIFF1ZXVlJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFF1ZXVlSUQsCiAgICAgICAgICAgICJRdWV1ZUlEICRRdWV1ZUlEIGlzIGNyZWF0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyAtLS0KICAgICAgICAjIElUU01Db3JlCiAgICAgICAgIyAtLS0KCiAgICAgICAgIyBHZXQgdGhlIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZy4KICAgICAgICBteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBCdWlsZCBhIGxvb2t1cCBoYXNoLgogICAgICAgIG15ICVTZXJ2aWNlVHlwZU5hbWUySUQgPSByZXZlcnNlICV7JFNlcnZpY2VUeXBlTGlzdH07CgogICAgICAgICMgR2V0IHRoZSBsaXN0IG9mIHNsYSB0eXBlcyBmcm9tIGdlbmVyYWwgY2F0YWxvZy4KICAgICAgICBteSAkU0xBVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAogICAgICAgICk7CgogICAgICAgICMgQnVpbGQgYSBsb29rdXAgaGFzaC4KICAgICAgICBteSAlU0xBVHlwZU5hbWUySUQgPSByZXZlcnNlICV7JFNMQVR5cGVMaXN0fTsKCiAgICAgICAgIyAtLS0KCiAgICAgICAgIyBDcmVhdGUgdGVzdCBzZXJ2aWNlLgogICAgICAgIG15ICRTZXJ2aWNlSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlQWRkKAogICAgICAgICAgICBOYW1lICAgID0+ICRUaWNrZXREYXRhe1NlcnZpY2V9LAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJ1NlbGVuaXVtIFNlcnZpY2UnLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICAjIElUU01Db3JlCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+ICRTZXJ2aWNlVHlwZU5hbWUySUR7VHJhaW5pbmd9LAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAiU2VydmljZUlEICRTZXJ2aWNlSUQgaXMgY3JlYXRlZCIKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IFNMQSB3aXRoIGxvdyBlc2NhbGF0aW9uIHRpbWVzLCBzbyB3ZSB0cmlnZ2VyIHdhcm5pbmcgaW4gJ1RpY2tldCBJbmZvcm1hdGlvbicgd2lkZ2V0LgogICAgICAgIG15ICVFc2NhbGF0aW9uVGltZXMgPSAoCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lID0+IDMwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICA9PiA0MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgPT4gNTAsCiAgICAgICAgKTsKICAgICAgICBteSAkU0xBSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUFkZCgKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+ICRTTEFUeXBlTmFtZTJJRHtPdGhlcn0sCgogICAgICAgICAgICAjIC0tLQogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICA9PiBbJFNlcnZpY2VJRF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgID0+ICRUaWNrZXREYXRhe1NMQX0sCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lID0+ICRFc2NhbGF0aW9uVGltZXN7Rmlyc3RSZXNwb25zZVRpbWV9LAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICA9PiAkRXNjYWxhdGlvblRpbWVze1VwZGF0ZVRpbWV9LAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICA9PiAkRXNjYWxhdGlvblRpbWVze1NvbHV0aW9uVGltZX0sCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgID0+ICdTZWxlbml1bSBTTEEnLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTTEFJRCwKICAgICAgICAgICAgIlNMQUlEICRTTEFJRCBpcyBjcmVhdGVkIgogICAgICAgICk7CgogICAgICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgICAgICBteSAkRHluYW1pY0ZpZWxkVmFsdWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkVmFsdWUnKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBkeW5hbWljIGZpZWxkLgogICAgICAgIG15ICREeW5hbWljRmllbGROYW1lID0gIkRGVGV4dCRSYW5kb21JRCI7CiAgICAgICAgbXkgJER5bmFtaWNGaWVsZElEICAgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJER5bmFtaWNGaWVsZE5hbWUsCiAgICAgICAgICAgIExhYmVsICAgICAgPT4gIkRGTGFiZWwiLAogICAgICAgICAgICBGaWVsZE9yZGVyID0+IDk5OTEsCiAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJ1RleHQnLAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJER5bmFtaWNGaWVsZElELAogICAgICAgICAgICAiRHluYW1pY0ZpZWxkSUQgJER5bmFtaWNGaWVsZElEIGlzIGNyZWF0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmFibGUgdGVzdCBkeW5hbWljIGZpZWxkIHRvIHNob3cgaW4gQWdlbnRUaWNrZXRab29tIHNjcmVlbiBpbiAnVGlja2V0IEluZm9ybWF0aW9uJyB3aWRnZXQuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Wm9vbSMjI0R5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGROYW1lID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCB0aWNrZXQuCiAgICAgICAgbXkgJEN1c3RvbWVyICAgID0gIkN1c3RvbWVyJFJhbmRvbUlEIjsKICAgICAgICBteSAkVGl0bGVSYW5kb20gPSAiVGl0bGUkUmFuZG9tSUQiOwogICAgICAgIG15ICRUaWNrZXRJRCAgICA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAkVGl0bGVSYW5kb20sCiAgICAgICAgICAgIFF1ZXVlICAgICAgICAgPT4gJFRpY2tldERhdGF7UXVldWV9LAogICAgICAgICAgICBUeXBlSUQgICAgICAgID0+ICRUeXBlSUQsCiAgICAgICAgICAgIExvY2sgICAgICAgICAgPT4gJFRpY2tldERhdGF7TG9ja2VkfSwKICAgICAgICAgICAgUHJpb3JpdHkgICAgICA9PiAkVGlja2V0RGF0YXtQcmlvcml0eX0sCiAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJFRpY2tldERhdGF7U3RhdGV9LAogICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIFNMQUlEICAgICAgICAgPT4gJFNMQUlELAogICAgICAgICAgICBDdXN0b21lcklEICAgID0+ICRDdXN0b21lciwKICAgICAgICAgICAgUmVzcG9uc2libGVJRCA9PiAkUmVzcG9uc2libGVVc2VySUQsCiAgICAgICAgICAgIE93bmVySUQgICAgICAgPT4gJFVzZXJMb2dpbklELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VyTG9naW5JRCwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgICAgICJUaWNrZXRJRCAkVGlja2V0SUQgaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBBZGQgZHluYW1pYyBmaWVsZCB2YWx1ZSB0byB0aGUgdGVzdCB0aWNrZXQuCiAgICAgICAgbXkgJERGVmFsdWUgPSAiREZWYWx1ZVRleHQkUmFuZG9tSUQiOwogICAgICAgIG15ICRTdWNjZXNzID0gJER5bmFtaWNGaWVsZFZhbHVlT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICAgICAgRmllbGRJRCAgICA9PiAkRHluYW1pY0ZpZWxkSUQsCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIE9iamVjdElEICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIFZhbHVlICAgICAgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFZhbHVlVGV4dCA9PiAkREZWYWx1ZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJEeW5hbWljRmllbGQgdmFsdWUgYWRkZWQgdG8gdGhlIHRlc3QgdGlja2V0IiwKICAgICAgICApOwoKICAgICAgICAjIExvZ2luIGFzIHRlc3QgdXNlci4KICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRDb25maWdPYmplY3QtPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZ2VudFRpY2tldFpvb20gZm9yIHRlc3QgY3JlYXRlZCB0aWNrZXQuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRUaWNrZXRab29tO1RpY2tldElEPSRUaWNrZXRJRCIpOwoKICAgICAgICAjIFZlcmlmeSBpdHMgcmlnaHQgc2NyZWVuLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRpdGxlUmFuZG9tICkgPiAtMSwKICAgICAgICAgICAgIlRpY2tldCAkVGl0bGVSYW5kb20gZm91bmQgb24gcGFnZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBWZXJpZnkgdGhlcmUgaXMgbm8gJ1RpY2tldCBJbmZvcm1hdGlvbicgd2lkZ2V0LCBpdCdzIGRpc2FibGVkLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIiRUaWNrZXREYXRhe1NlcnZpY2V9IiApID09IC0xLAogICAgICAgICAgICAiVGlja2V0IEluZm9ybWF0aW9uIHdpZGdldCBpcyBkaXNhYmxlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBSZXNldCAnVGlja2V0IEluZm9ybWF0aW9uJyB3aWRnZXQgc3lzY29uZmlnLCBlbmFibGUgaXQgYW5kIHJlZnJlc2ggc2NyZWVuLgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20jIyNXaWRnZXRzIyMjMDEwMC1UaWNrZXRJbmZvcm1hdGlvbicsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgICdMb2NhdGlvbicgPT4gJ1NpZGViYXInLAogICAgICAgICAgICAgICAgJ01vZHVsZScgICA9PiAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRpY2tldFpvb206OlRpY2tldEluZm9ybWF0aW9uJywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkUmVmcmVzaCgpOwoKICAgICAgICAjIFZlcmlmeSB0aGVyZSBpcyAnVGlja2V0IEluZm9ybWF0aW9uJyB3aWRnZXQsIGl0J3MgZW5hYmxlZC4KICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnLkhlYWRlcj5oMicsICdjc3MnICktPmdldF90ZXh0KCksCiAgICAgICAgICAgICdUaWNrZXQgSW5mb3JtYXRpb24nLAogICAgICAgICAgICAnVGlja2V0IEluZm9ybWF0aW9uIHdpZGdldCBpcyBlbmFibGVkJywKICAgICAgICApOwoKICAgICAgICAjIFZlcmlmeSB0aGVyZSBpcyBubyBjb2xsYXBzZWQgZWxlbWVudHMgb24gdGhlIHNjcmVlbi4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vZGl2W2NvbnRhaW5zKFxAY2xhc3MsIFwnV2lkZ2V0U2ltcGxlIEV4cGFuZGVkJyldIiksCiAgICAgICAgICAgICJUaWNrZXQgSW5mb3JtYXRpb24gV2lkZ2V0IGlzIGV4cGFuZGVkIiwKICAgICAgICApOwoKICAgICAgICAjIFRvZ2dsZSB0byBjb2xsYXBzZSAnVGlja2V0IEluZm9ybWF0aW9uJyB3aWRnZXQuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQHRpdGxlLCBcJ1Nob3cgb3IgaGlkZSB0aGUgY29udGVudCcgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gJCgiZGl2LldpZGdldFNpbXBsZS5Db2xsYXBzZWQiKS5sZW5ndGgnCiAgICAgICAgKTsKCiAgICAgICAgIyBWZXJpZnkgdGhlcmUgaXMgY29sbGFwc2VkIGVsZW1lbnQgb24gdGhlIHNjcmVlbi4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vZGl2W2NvbnRhaW5zKFxAY2xhc3MsIFwnV2lkZ2V0U2ltcGxlIENvbGxhcHNlZCcpXSIpLAogICAgICAgICAgICAiVGlja2V0IEluZm9ybWF0aW9uIFdpZGdldCBpcyBjb2xsYXBzZWQiLAogICAgICAgICk7CgogICAgICAgICMgQWRkIGFydGljbGUgdG8gdGlja2V0LgogICAgICAgIG15ICRBcnRpY2xlSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlOjpCYWNrZW5kOjpFbWFpbCcpLT5BcnRpY2xlQ3JlYXRlKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdzb21lIHNob3J0IGRlc2NyaXB0aW9uJywKICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ3RoZSBtZXNzYWdlIHRleHQnLAogICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgICAgICA9PiAnSVNPLTg4NTktMTUnLAogICAgICAgICAgICBNaW1lVHlwZSAgICAgICAgICAgICA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdFbWFpbEN1c3RvbWVyJywKICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgPT4gJ1NvbWUgZnJlZSB0ZXh0IScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEFydGljbGVJRCwKICAgICAgICAgICAgIkFydGljbGVJRCAkQXJ0aWNsZUlEIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgQWRkIGFjY291bnRlZCB0aW1lIHRvIHRoZSB0aWNrZXQuCiAgICAgICAgbXkgJEFjY291bnRlZFRpbWUgPSAxMjM7CiAgICAgICAgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2NvdW50VGltZSgKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgIFRpbWVVbml0ICA9PiAkQWNjb3VudGVkVGltZSwKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJBY2NvdW50ZWQgVGltZSAkQWNjb3VudGVkVGltZSBhZGRlZCB0byB0aWNrZXQiCiAgICAgICAgKTsKCiAgICAgICAgIyBSZWZyZXNoIHNjcmVlbiB0byBnZXQgYWNjb3VudGVkIHRpbWUgdmFsdWUuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZFJlZnJlc2goKTsKCiAgICAgICAgIyBWZXJpZnkgJ1RpY2tldCBJbmZvcm1hdGlvbicgd2lkZ2V0IHZhbHVlcy4KICAgICAgICBmb3IgbXkgJFRpY2tldEluZm9ybWF0aW9uQ2hlY2sgKCBzb3J0IGtleXMgJVRpY2tldERhdGEgKSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vcFtjb250YWlucyhcQHRpdGxlLCBcJyRUaWNrZXREYXRheyRUaWNrZXRJbmZvcm1hdGlvbkNoZWNrfScgKV0iKSwKICAgICAgICAgICAgICAgICIkVGlja2V0SW5mb3JtYXRpb25DaGVjayAtICRUaWNrZXREYXRheyRUaWNrZXRJbmZvcm1hdGlvbkNoZWNrfSBmb3VuZCBpbiBUaWNrZXQgSW5mb3JtYXRpb24gd2lkZ2V0IgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBWZXJpZnkgY3VzdG9tZXIgbGluayB0byAnQ3VzdG9tZXIgSW5mb3JtYXRpb24gQ2VudGVyJy4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyO0N1c3RvbWVySUQ9JEN1c3RvbWVyJyApXSIpLAogICAgICAgICAgICAiQ3VzdG9tZXIgbGluayB0byAnQ3VzdG9tZXIgSW5mb3JtYXRpb24gQ2VudGVyJyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBWZXJpZnkgYWNjb3VudGVkIHRpbWUgdmFsdWUuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCBxcXw8cCBjbGFzcz0iVmFsdWUiPiRBY2NvdW50ZWRUaW1lPC9wPnwgKSA+IC0xLAogICAgICAgICAgICAiQWNjb3VudGVkIFRpbWUgZm91bmQgaW4gVGlja2V0IEluZm9ybWF0aW9uIFdpZGdldCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBWZXJpZnkgZHluYW1pYyBmaWVsZCB2YWx1ZSBpbiAnVGlja2V0IEluZm9ybWF0aW9uJyB3aWRnZXQuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL3NwYW5bY29udGFpbnMoXEB0aXRsZSwgXCckREZWYWx1ZScgKV0iKSwKICAgICAgICAgICAgIkR5bmFtaWNGaWVsZCB2YWx1ZSAtICRERlZhbHVlIGZvdW5kIGluIFRpY2tldCBJbmZvcm1hdGlvbiB3aWRnZXQiLAogICAgICAgICk7CgogICAgICAgICMgUmVjcmVhdGUgVGlja2V0T2JqZWN0IHRvIGxldCBldmVudCBoYW5kbGVycyBydW4gYWxzbyBmb3IgdHJhbnNhY3Rpb24gbW9kZS4KICAgICAgICAkS2VybmVsOjpPTS0+T2JqZWN0c0Rpc2NhcmQoCiAgICAgICAgICAgIE9iamVjdHMgPT4gWwogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgICAgICAgICBdLAogICAgICAgICk7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICAgICAjIFJlZnJlc2ggc2NyZWVuIHRvIGJlIHN1cmUgZXNjYWxhdGlvbiB0aW1lIHdpbGwgZ2V0IGxhdGVzdCB0aW1lcy4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkUmVmcmVzaCgpOwoKICAgICAgICAjIEdldCB0aWNrZXQgZGF0YSBmb3IgZXNjYWxhdGlvbiB0aW1lIHZhbHVlcy4KICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEV4dGVuZGVkID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBWZXJpZnkgZXNjYWxhdGlvbiB0aW1lcywgd2FybmluZyBzaG91bGQgYmUgYWN0aXZlLgogICAgICAgIGZvciBteSAkRXNjYWxhdGlvblRpbWUgKCBzb3J0IGtleXMgJUVzY2FsYXRpb25UaW1lcyApIHsKICAgICAgICAgICAgJEVzY2FsYXRpb25UaW1lID0gZmxvb3IoICRUaWNrZXR7JEVzY2FsYXRpb25UaW1lfSAvIDYwICk7CgogICAgICAgICAgICAjIENoZWNrIGlmIHdhcm5pbmcgaXMgdmlzaWJsZS4KICAgICAgICAgICAgJFNlbGYtPlRydWUoCgogICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgRXNjYWxhdGlvblRpbWUgb3IgRXNjYWxhdGlvblRpbWUgKyAxIChvbmUgbWludXRlIHRvbGVyYW5jZSwgc2luY2UgaXQgZmFpbHMgb24gZmFzdCBzeXN0ZW1zKS4KICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgICIvL3BbXEBjbGFzcz0nV2FybmluZyddW1xAdGl0bGU9J1NlcnZpY2UgVGltZTogJEVzY2FsYXRpb25UaW1lIG0nIG9yIFxAdGl0bGU9J1NlcnZpY2UgVGltZTogIgogICAgICAgICAgICAgICAgICAgICAgICAuICggJEVzY2FsYXRpb25UaW1lICsgMSApIC4gIiBtJ10iCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgIkVzY2FsYXRpb24gVGltZSAkRXNjYWxhdGlvblRpbWUgbSAsIGZvdW5kIGluIFRpY2tldCBJbmZvcm1hdGlvbiBXaWRnZXQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDbGVhbnVwIHRlc3QgZGF0YS4KICAgICAgICAjIERlbGV0ZSBkeW5hbWljIGZpZWxkIHZhbHVlLgogICAgICAgICRTdWNjZXNzID0gJER5bmFtaWNGaWVsZFZhbHVlT2JqZWN0LT5WYWx1ZURlbGV0ZSgKICAgICAgICAgICAgRmllbGRJRCAgPT4gJER5bmFtaWNGaWVsZElELAogICAgICAgICAgICBPYmplY3RJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJEeW5hbWljRmllbGQgdmFsdWUgcmVtb3ZlZCBmcm9tIHRoZSB0ZXN0IHRpY2tldCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgZHluYW1pYyBmaWVsZC4KICAgICAgICAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgICAgICAgICAgSUQgICAgID0+ICREeW5hbWljRmllbGRJRCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJEeW5hbWljRmllbGRJRCAkRHluYW1pY0ZpZWxkSUQgaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgdGVzdCB0aWNrZXQuCiAgICAgICAgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIFRpY2tldCBkZWxldGlvbiBjb3VsZCBmYWlsIGlmIGFwYWNoZSBzdGlsbCB3cml0ZXMgdG8gdGlja2V0IGhpc3RvcnkuIFRyeSBhZ2FpbiBpbiB0aGlzIGNhc2UuCiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgIHNsZWVwIDM7CiAgICAgICAgICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiVGlja2V0SUQgJFRpY2tldElEIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIEdldCBkZWxldGUgdGVzdCBkYXRhLgogICAgICAgIG15IEBEZWxldGVEYXRhID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTUUwgICAgID0+ICJERUxFVEUgRlJPTSB0aWNrZXRfdHlwZSBXSEVSRSBpZCA9ICRUeXBlSUQiLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiVHlwZUlEICRUeXBlSUQgaXMgZGVsZXRlZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNRTCAgICAgPT4gIkRFTEVURSBGUk9NIHNlcnZpY2Vfc2xhIFdIRVJFIHNsYV9pZCA9ICRTTEFJRCIsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJTZXJ2aWNlLVNMQSByZWxhdGlvbiBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gc2xhIFdIRVJFIGlkID0gJFNMQUlEIiwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlNMQUlEICRTTEFJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gc2VydmljZV9wcmVmZXJlbmNlcyBXSEVSRSBzZXJ2aWNlX2lkID0gJFNlcnZpY2VJRCIsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJTZXJ2aWNlIHByZWZlcmVuY2VzIGZvciAkU2VydmljZUlEIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU1FMICAgICA9PiAiREVMRVRFIEZST00gc2VydmljZSBXSEVSRSBpZCA9ICRTZXJ2aWNlSUQiLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiU2VydmljZUlEICRTZXJ2aWNlSUQgaXMgZGVsZXRlZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFNRTCAgICAgPT4gIkRFTEVURSBGUk9NIHF1ZXVlIFdIRVJFIGlkID0gJFF1ZXVlSUQiLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiUXVldWVJRCAkUXVldWVJRCBpcyBkZWxldGVkIiwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIERlbGV0ZSB0ZXN0IGNyZWF0ZWQgaXRlbXMuCiAgICAgICAgZm9yIG15ICRJdGVtIChARGVsZXRlRGF0YSkgewogICAgICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gJEl0ZW0tPntTUUx9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgJEl0ZW0tPntNZXNzYWdlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgICAgICAjIE1ha2Ugc3VyZSBjYWNoZSBpcyBjb3JyZWN0LgogICAgICAgIGZvciBteSAkQ2FjaGUgKHF3KCBUaWNrZXQgVHlwZSBTTEEgU2VydmljZSBRdWV1ZSBEeW5hbWljRmllbGQgKSkgewogICAgICAgICAgICAkQ2FjaGVPYmplY3QtPkNsZWFuVXAoIFR5cGUgPT4gJENhY2hlICk7CiAgICAgICAgfQogICAgfQopOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/Selenium/Output/ToolBar/TicketService.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gc2NyaXB0cy90ZXN0L1NlbGVuaXVtL091dHB1dC9Ub29sQmFyL1RpY2tldFNlcnZpY2UudAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6UmVnaXN0ZXJEcml2ZXI7ICAgICMgU2V0IHVwICRLZXJuZWw6Ok9NIGFuZCAkbWFpbjo6U2VsZgp1c2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bTsKCm91ciAkU2VsZjsKCm15ICRTZWxlbml1bSA9IEtlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0tPm5ldyggTG9nRXhlY3V0ZUNvbW1hbmRBY3RpdmUgPT4gMSApOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgbXkgJEhlbHBlciAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CiAgICAgICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgICAgICBteSAkR3JvdXBPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CgogICAgICAgICMgR2V0IHJhbmRvbSB2YXJpYWJsZS4KICAgICAgICBteSAkUmFuZG9tSUQgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwoKICAgICAgICAjIEVuYWJsZSBBZ2VudFRpY2tldFNlcnZpY2UgdG9vbGJhciBpY29uLgogICAgICAgIG15ICVBZ2VudFRpY2tldFNlcnZpY2UgPSAoCiAgICAgICAgICAgIENzc0NsYXNzID0+ICdTZXJ2aWNlVmlldycsCiAgICAgICAgICAgIEljb24gICAgID0+ICdmYSBmYS13cmVuY2gnLAogICAgICAgICAgICBNb2R1bGUgICA9PiAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRvb2xCYXI6OlRpY2tldFNlcnZpY2UnLAogICAgICAgICAgICBQcmlvcml0eSA9PiAnMTAzMDAzNScsCiAgICAgICAgKTsKCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0Zyb250ZW5kOjpUb29sQmFyTW9kdWxlIyMjMjAwLVRpY2tldDo6QWdlbnRUaWNrZXRTZXJ2aWNlJywKICAgICAgICAgICAgVmFsdWUgPT4gXCVBZ2VudFRpY2tldFNlcnZpY2UsCiAgICAgICAgKTsKCiAgICAgICAgIyBBbGxvd3MgZGVmaW5pbmcgc2VydmljZXMgZm9yIHRpY2tldHMuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBzZXJ2aWNlLgogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICdTZWxlbml1bScgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRTZXJ2aWNlSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VBZGQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgICAgICMgSVRTTUNvcmUKICAgICAgICAgICAgIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKCiAgICAgICAgICAgICMgLS0tCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlcnZpY2VJRCwKICAgICAgICAgICAgIlNlcnZpY2UgSUQgJFNlcnZpY2VJRCBpcyBjcmVhdGVkIgogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgZ3JvdXAuCiAgICAgICAgbXkgJEdyb3VwTmFtZSA9ICJHcm91cCIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRHcm91cElEICAgPSAkR3JvdXBPYmplY3QtPkdyb3VwQWRkKAogICAgICAgICAgICBOYW1lICAgID0+ICRHcm91cE5hbWUsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRHcm91cElELAogICAgICAgICAgICAiR3JvdXAgSUQgJEdyb3VwSUQgaXMgY3JlYXRlZCIKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHF1ZXVlLgogICAgICAgIG15ICRRdWV1ZU5hbWUgPSAnUXVldWUnIC4gJFJhbmRvbUlEOwogICAgICAgIG15ICRRdWV1ZUlEICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVBZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgR3JvdXBJRCAgICAgICAgID0+ICRHcm91cElELAogICAgICAgICAgICBTeXN0ZW1BZGRyZXNzSUQgPT4gMSwKICAgICAgICAgICAgU2FsdXRhdGlvbklEICAgID0+IDEsCiAgICAgICAgICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgPT4gJ1NlbGVuaXVtIFF1ZXVlJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFF1ZXVlSUQsCiAgICAgICAgICAgICJRdWV1ZSBJRCAkUXVldWVJRCBpcyBjcmVhdGVkIgogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgdGlja2V0LgogICAgICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgICAgICAgICAgVGl0bGUgICAgICAgICA9PiAnU2VsZW5pdW0gdGVzdCB0aWNrZXQnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgID0+ICRRdWV1ZU5hbWUsCiAgICAgICAgICAgIExvY2sgICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgU3RhdGUgICAgICAgICA9PiAnb3BlbicsCiAgICAgICAgICAgIEN1c3RvbWVySUQgICAgPT4gJ1NlbGVuaXVtQ3VzdG9tZXJJRCcsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciAgPT4gJ3Rlc3RAbG9jYWxob3N0LmNvbScsCiAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgT3duZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIFJlc3BvbnNpYmxlSUQgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgICAgICJUaWNrZXQgSUQgJFRpY2tldElEIGlzIGNyZWF0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCB1c2VyLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICRHcm91cE5hbWUgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgIyBHZXQgdGVzdCB1c2VyIElELgogICAgICAgIG15ICRUZXN0VXNlcklEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgVXBkYXRlICdNeSBTZXJ2aWNlJyBwcmVmZXJlbmNlIGZvciB0ZXN0IGNyZWF0ZWQgdXNlci4KICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKICAgICAgICBteSAkU3VjY2VzcyAgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gJwogICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gcGVyc29uYWxfc2VydmljZXMgKHNlcnZpY2VfaWQsIHVzZXJfaWQpCiAgICAgICAgICAgICAgICBWQUxVRVMgKD8sID8pCiAgICAgICAgICAgICcsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFNlcnZpY2VJRCwgXCRUZXN0VXNlcklEIF0KICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgJ015IHNlcnZpY2UgcHJlZmVyZW5jZSB1cGRhdGVkIGZvciB0ZXN0IHVzZXInCiAgICAgICAgKTsKCiAgICAgICAgIyBMb2dpbiB0ZXN0IHVzZXIuCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudERhc2hib2FyZCIpOwoKICAgICAgICAjIENsaWNrIG9uIHRvb2wgYmFyIEFnZW50VGlja2V0U2VydmljZS4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAdGl0bGUsIFwnVGlja2V0cyBpbiBNeSBTZXJ2aWNlczpcJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgVmVyaWZ5IHRoYXQgdGVzdCBpcyBvbiB0aGUgY29ycmVjdCBzY3JlZW4uCiAgICAgICAgbXkgJEV4cGVjdGVkVVJMID0gIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0U2VydmljZSI7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9jdXJyZW50X3VybCgpLCAkRXhwZWN0ZWRVUkwgKSA+IC0xLAogICAgICAgICAgICAiVG9vbEJhciBpY29uICdUaWNrZXQgaW4gbXkgU2VydmljZXMnIHNob3J0Y3V0IC0gc3VjY2VzcyIKICAgICAgICApOwoKICAgICAgICAjIFJldHVybiBiYWNrIHRvIGRhc2hib2FyZCBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnREYXNoYm9hcmQiKTsKCiAgICAgICAgIyBDaGFuZ2UgdGVzdCB1c2VyIGdyb3VwIHBlcm1pc3Npb24gZm9yIHdoaWNoIHF1ZXVlLXRpY2tldCBpcyBpbiB0byBSTy4KICAgICAgICAjICAgVG9vbGJhciBpY29uIHNob3VsZCBiZSByZW1vdmVkLCBzZWUgYnVnIzEyMjY5IGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICRTdWNjZXNzID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uR3JvdXBVc2VyQWRkKAogICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cElELAogICAgICAgICAgICBVSUQgICAgICAgID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgIHJvICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgbW92ZV9pbnRvID0+IDAsCiAgICAgICAgICAgICAgICBjcmVhdGUgICAgPT4gMCwKICAgICAgICAgICAgICAgIG93bmVyICAgICA9PiAwLAogICAgICAgICAgICAgICAgcHJpb3JpdHkgID0+IDAsCiAgICAgICAgICAgICAgICBydyAgICAgICAgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICdDaGFuZ2VkIHRlc3QgdXNlciBncm91cCBwZXJtaXNzaW9uIHRvIFJPJwogICAgICAgICk7CgogICAgICAgICMgUmVmcmVzaCBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZFJlZnJlc2goKTsKCiAgICAgICAgIyBWZXJpZmllZCB0b29sIGJhciAnVGlja2V0IGluIG15IFNlcnZpY2VzJyBpY29uIGlzIHJlbW92ZWQuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnLlNlcnZpY2VWaWV3JykubGVuZ3RoID09PSAwOyIpLAogICAgICAgICAgICAiVG9vbEJhciBpY29uICdUaWNrZXQgaW4gbXkgU2VydmljZXMnIGlzIHJlbW92ZWQgd2hlbiBhZ2VudCBkb2Vzbid0IGhhdmUgUlcgYWNjZXNzIHRvIHRpY2tldCIKICAgICAgICApOwoKICAgICAgICAjIENoYW5nZSBzZXR0aW5ncyBUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFNlcnZpY2UjIyNWaWV3QWxsUG9zc2libGVUaWNrZXRzIHRvICdZZXMnLgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFNlcnZpY2UjIyNWaWV3QWxsUG9zc2libGVUaWNrZXRzJywKICAgICAgICAgICAgVmFsdWUgPT4gMQogICAgICAgICk7CgogICAgICAgICMgUmVmcmVzaCBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZFJlZnJlc2goKTsKCiAgICAgICAgIyBWZXJpZmllZCB0b29sIGJhciAnVGlja2V0IGluIG15IFNlcnZpY2VzJyBpY29uIGlzIHNob3duLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJy5TZXJ2aWNlVmlldycpLmxlbmd0aCA9PT0gMTsiKSwKICAgICAgICAgICAgIlRvb2xCYXIgaWNvbiAnVGlja2V0IGluIG15IFNlcnZpY2VzJyBpcyBzaG93biB3aGVuIGFnZW50IGRvZXNuJ3QgaGF2ZSBSVyBhY2Nlc3MgdG8gdGlja2V0IGFuZCBzZXR0aW5ncyAnVmlld0FsbFBvc3NpYmxlVGlja2V0cycgaXMgZW5hYmxlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgdGVzdCB0aWNrZXQuCiAgICAgICAgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBUaWNrZXQgZGVsZXRpb24gY291bGQgZmFpbCBpZiBhcGFjaGUgc3RpbGwgd3JpdGVzIHRvIHRpY2tldCBoaXN0b3J5LiBUcnkgYWdhaW4gaW4gdGhpcyBjYXNlLgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICBzbGVlcCAzOwogICAgICAgICAgICAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJUaWNrZXQgSUQgJFRpY2tldElEIGlzIGRlbGV0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgcGVyc29uYWwgc2VydmljZSBmcm9tIERCLgogICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMICA9PiAiREVMRVRFIEZST00gcGVyc29uYWxfc2VydmljZXMgV0hFUkUgdXNlcl9pZCA9ID8iLAogICAgICAgICAgICBCaW5kID0+IFsgXCRUZXN0VXNlcklEIF0sCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICdQZXJzb25hbCBzZXJ2aWNlIGNvbm5lY3Rpb24gaXMgZGVsZXRlZCcKICAgICAgICApOwoKICAgICAgICAjIERlbGV0ZSB0ZXN0IHNlcnZpY2UuCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBzZXJ2aWNlIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFNlcnZpY2VJRCBdLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2VydmljZSBJRCAkU2VydmljZUlEIGlzIGRlbGV0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgdGVzdCBxdWV1ZS4KICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIHF1ZXVlIFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFF1ZXVlSUQgXSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlF1ZXVlIElEICRRdWV1ZUlEIGlzIGRlbGV0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgdGVzdCB1c2VyIGZyb20gZ3JvdXAuCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBncm91cF91c2VyIFdIRVJFIGdyb3VwX2lkID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJEdyb3VwSUQgXSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIkdyb3VwICRHcm91cE5hbWUgLSBUZXN0VXNlciByZWxhdGlvbiBpcyBkZWxldGVkIgogICAgICAgICk7CgogICAgICAgICMgRGVsZXRlIHRlc3QgZ3JvdXAuCiAgICAgICAgJEdyb3VwTmFtZSA9ICREQk9iamVjdC0+UXVvdGUoJEdyb3VwTmFtZSk7CiAgICAgICAgJFN1Y2Nlc3MgICA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGdyb3Vwc190YWJsZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJEdyb3VwTmFtZSBdLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiR3JvdXAgJEdyb3VwTmFtZSBpcyBkZWxldGVkIgogICAgICAgICk7CgogICAgICAgICMgTWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0LgogICAgICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwogICAgICAgIGZvciBteSAkQ2FjaGUgKAogICAgICAgICAgICBxdyAoVGlja2V0IFNlcnZpY2UgUXVldWUgR3JvdXApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRDYWNoZU9iamVjdC0+Q2xlYW5VcCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJENhY2hlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="var/httpd/htdocs/js/ITSM.Agent.ConfirmDialog.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoKCgovLyBUT0RPOgovL1JlbW92ZSB0aGlzIGxpbmUgYW5kIGZpeCBKU0RvYwovLyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpKYXZhU2NyaXB0OjpFU0xpbnQpCgoKCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UKICogQGV4cG9ydHMgVGFyZ2V0TlMgYXMgSVRTTS5BZ2VudC5Db25maXJtRGlhbG9nCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIENvbmZpcm1EaWFsb2cuCiAqLwpJVFNNLkFnZW50LkNvbmZpcm1EaWFsb2cgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUgU2VyaWFsaXplRGF0YQogICAgICogQG1lbWJlcm9mIElUU00uQWdlbnQuQ29uZmlybURpYWxvZwogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBxdWVyeSBzdHJpbmcgb2YgdGhlIGRhdGEKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBEYXRhIC0gVGhlIGRhdGEgdGhhdCBzaG91bGQgYmUgY29udmVydGVkLgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIENvbnZlcnRzIGEgZ2l2ZW4gaGFzaCBpbnRvIGEgcXVlcnkgc3RyaW5nLgogICAgICovCiAgICBmdW5jdGlvbiBTZXJpYWxpemVEYXRhKERhdGEpIHsKICAgICAgICB2YXIgUXVlcnlTdHJpbmcgPSAnJzsKICAgICAgICAkLmVhY2goRGF0YSwgZnVuY3Rpb24gKEtleSwgVmFsdWUpIHsKICAgICAgICAgICAgUXVlcnlTdHJpbmcgKz0gJzsnICsgZW5jb2RlVVJJQ29tcG9uZW50KEtleSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoVmFsdWUpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBRdWVyeVN0cmluZzsKICAgIH0KCiAgICAvKioKICAgICAqIEB2YXJpYWJsZQogICAgICogQHByaXZhdGUKICAgICAqICAgICBUaGlzIHZhcmlhYmxlIHN0b3JlcyB0aGUgcGFyYW1ldGVycyB0aGF0IGFyZSBwYXNzZWQgZnJvbSB0aGUgRFRMIGFuZCBjb250YWluIGFsbCB0aGUgZGF0YSB0aGF0IHRoZSBkaWFsb2cgbmVlZHMuCiAgICAgKi8KICAgIHZhciBEaWFsb2dEYXRhID0gW107CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwcml2YXRlCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqIEBkZXNjcmlwdGlvbiBTaG93cyB3YWl0aW5nIGRpYWxvZyB1bnRpbCBzZWFyY2ggc2NyZWVuIGlzIHJlYWR5LgogICAgICovCiAgICBmdW5jdGlvbiBTaG93V2FpdGluZ0RpYWxvZyhQb3NpdGlvblRvcCl7CiAgICAgICAgdmFyIERpdkhUTUwgPSBDb3JlLlRlbXBsYXRlLlJlbmRlcignQWdlbnQvSVRTTUNvcmUvTG9hZGluZ0RpYWxvZycsIHsKICAgICAgICAgICAgU3BhblRleHQ6IENvcmUuQ29uZmlnLkdldCgnTG9hZGluZ01zZycpCiAgICAgICAgfSk7CiAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coRGl2SFRNTCwgJycsIFBvc2l0aW9uVG9wLCAnQ2VudGVyJywgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7RXZlbnRPYmplY3R9IGV2ZW50IG9iamVjdCBvZiB0aGUgY2xpY2tlZCBlbGVtZW50LgogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gc2hvd3MgYSBjb25maXJtYXRpb24gZGlhbG9nIHdpdGggMiBidXR0b25zOiBZZXMgYW5kIE5vCiAgICAgKi8KICAgIFRhcmdldE5TLlNob3dDb25maXJtRGlhbG9nID0gZnVuY3Rpb24gKEV2ZW50KSB7CgogICAgICAgIHZhciBMb2NhbERpYWxvZ0RhdGEsCiAgICAgICAgICAgIFBvc2l0aW9uVG9wLAogICAgICAgICAgICBEYXRhLAogICAgICAgICAgICBCdXR0b25zOwoKICAgICAgICAvLyBnZXQgZ2xvYmFsIHNhdmVkIERpYWxvZ0RhdGEgZm9yIHRoaXMgZnVuY3Rpb24KICAgICAgICBMb2NhbERpYWxvZ0RhdGEgPSBEaWFsb2dEYXRhWyQoRXZlbnQudGFyZ2V0KS5hdHRyKCdpZCcpXTsKCiAgICAgICAgLy8gZGVmaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGlhbG9nCiAgICAgICAgUG9zaXRpb25Ub3AgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCkgKyAoJCh3aW5kb3cpLmhlaWdodCgpICogMC4zKTsKCiAgICAgICAgLy8gc2hvdyB3YWl0aW5nIGRpYWxvZwogICAgICAgIFNob3dXYWl0aW5nRGlhbG9nKFBvc2l0aW9uVG9wKTsKCiAgICAgICAgLy8gYWpheCBjYWxsIHRvIHRoZSBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSB0ZW1wbGF0ZQogICAgICAgIERhdGEgPSBMb2NhbERpYWxvZ0RhdGEuRGlhbG9nQ29udGVudFF1ZXJ5U3RyaW5nOwogICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpLCBEYXRhLCBmdW5jdGlvbiAoUmVzcG9uc2UpIHsKCiAgICAgICAgICAgIC8vICdDb25maXJtYXRpb24nIG9wZW5zIGEgZGlhbG9nIHdpdGggMiBidXR0b25zOiBZZXMgYW5kIE5vCiAgICAgICAgICAgIGlmIChSZXNwb25zZS5EaWFsb2dUeXBlID09PSAnQ29uZmlybWF0aW9uJykgewoKICAgICAgICAgICAgICAgIC8vIGRlZmluZSB5ZXMgYW5kIG5vIGJ1dHRvbnMKICAgICAgICAgICAgICAgIEJ1dHRvbnMgPSBbewogICAgICAgICAgICAgICAgICAgIExhYmVsOiBMb2NhbERpYWxvZ0RhdGEuVHJhbnNsYXRlZFRleHQuWWVzLAogICAgICAgICAgICAgICAgICAgIENsYXNzOiAiUHJpbWFyeSIsCgogICAgICAgICAgICAgICAgICAgIC8vIGRlZmluZSB0aGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgJ1llcycgYnV0dG9uIGlzIHByZXNzZWQKICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgWWVzIGFuZCBObyBidXR0b25zIHRvIHByZXZlbnQgbXVsdGlwbGUgc3VibWl0cwogICAgICAgICAgICAgICAgICAgICAgICAkKCdkaXYuRGlhbG9nOnZpc2libGUgZGl2LkNvbnRlbnRGb290ZXIgYnV0dG9uJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZGlyZWN0IHRvIHRoZSBtb2R1bGUgdGhhdCBkb2VzIHRoZSBjb25maXJtZWQgYWN0aW9uIGFmdGVyIHByZXNzaW5nIHRoZSBZZXMgYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJykgKyBMb2NhbERpYWxvZ0RhdGEuQ29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmcgKyBTZXJpYWxpemVEYXRhKENvcmUuQXBwLkdldFNlc3Npb25JbmZvcm1hdGlvbigpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgTGFiZWw6IExvY2FsRGlhbG9nRGF0YS5UcmFuc2xhdGVkVGV4dC5ObywKICAgICAgICAgICAgICAgICAgICBUeXBlOiAiQ2xvc2UiCiAgICAgICAgICAgICAgICB9XTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gJ01lc3NhZ2UnIG9wZW5zIGEgZGlhbG9nIHdpdGggMSBidXR0b246IE9rCiAgICAgICAgICAgIGVsc2UgaWYgKFJlc3BvbnNlLkRpYWxvZ1R5cGUgPT09ICdNZXNzYWdlJykgewoKICAgICAgICAgICAgICAgIC8vIGRlZmluZSBPayBidXR0b24KICAgICAgICAgICAgICAgIEJ1dHRvbnMgPSBbewogICAgICAgICAgICAgICAgICAgIExhYmVsOiBMb2NhbERpYWxvZ0RhdGEuVHJhbnNsYXRlZFRleHQuT2ssCiAgICAgICAgICAgICAgICAgICAgQ2xhc3M6ICJQcmltYXJ5IiwKICAgICAgICAgICAgICAgICAgICBUeXBlOiAiQ2xvc2UiCiAgICAgICAgICAgICAgICB9XTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gc2hvdyB0aGUgY29uZmlybWF0aW9uIGRpYWxvZyB0byBjb25maXJtIHRoZSBhY3Rpb24KICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coUmVzcG9uc2UuSFRNTCwgTG9jYWxEaWFsb2dEYXRhLkRpYWxvZ1RpdGxlLCBQb3NpdGlvblRvcCwgIkNlbnRlciIsIHRydWUsIEJ1dHRvbnMpOwogICAgICAgICAgICAkKCdhLkFzUG9wdXBEaWFsb2cnKS51bmJpbmQoJ2NsaWNrLkFzUG9wdXBEaWFsb2cnKS5iaW5kKCdjbGljay5Bc1BvcHVwRGlhbG9nJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgQ29yZS5VSS5Qb3B1cC5PcGVuUG9wdXAgKCQodGhpcykuYXR0cignaHJlZicpLCAnQWN0aW9uJyk7CiAgICAgICAgICAgICAgICBDb3JlLlVJLkRpYWxvZy5DbG9zZURpYWxvZygkKCcuRGlhbG9nOnZpc2libGUnKSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0sICdqc29uJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtFdmVudE9iamVjdH0gZXZlbnQgb2JqZWN0IG9mIHRoZSBjbGlja2VkIGVsZW1lbnQuCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBzaG93cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2l0aCAyIGJ1dHRvbnM6IFllcyBhbmQgTm8KICAgICAqLwogICAgVGFyZ2V0TlMuQmluZENvbmZpcm1EaWFsb2cgPSBmdW5jdGlvbiAoRGF0YSkgewogICAgICAgIERpYWxvZ0RhdGFbRGF0YS5FbGVtZW50SURdID0gRGF0YTsKCiAgICAgICAgLy8gYmluZGluZyBhIGNsaWNrIGV2ZW50IHRvIHRoZSBkZWZpbmVkIGVsZW1lbnQKICAgICAgICAkKERpYWxvZ0RhdGFbRGF0YS5FbGVtZW50SURdLkVsZW1lbnRTZWxlY3RvcikuYmluZCgnY2xpY2snLCBJVFNNLkFnZW50LkNvbmZpcm1EaWFsb2cuU2hvd0NvbmZpcm1EaWFsb2cpOwogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5BZ2VudC5Db25maXJtRGlhbG9nIHx8IHt9KSk7Cg==</File>
        <File Location="var/httpd/htdocs/js/ITSM.Agent.CustomerSearch.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNCBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgSVRTTS5BZ2VudC5DdXN0b21lclNlYXJjaAogKiBAbWVtYmVyb2YgSVRTTS5BZ2VudAogKiBAYXV0aG9yIFJvdGhlciBPU1MgR21iSAogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciB0aGUgY3VzdG9tZXIgc2VhcmNoLgogKi8KSVRTTS5BZ2VudC5DdXN0b21lclNlYXJjaCA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBuYW1lIEluaXQKICAgICAqIEBtZW1iZXJvZiBJVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSAkRWxlbWVudCAtIFRoZSBqUXVlcnkgb2JqZWN0IG9mIHRoZSBpbnB1dCBmaWVsZCB3aXRoIGF1dG9jb21wbGV0ZS4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBJbml0aWFsaXplcyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCRFbGVtZW50KSB7CgogICAgICAgIGlmIChpc0pRdWVyeU9iamVjdCgkRWxlbWVudCkpIHsKCiAgICAgICAgICAgIENvcmUuVUkuQXV0b2NvbXBsZXRlLkluaXQoJEVsZW1lbnQsIGZ1bmN0aW9uIChSZXF1ZXN0LCBSZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBVUkwgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb246ICdBZ2VudEN1c3RvbWVyU2VhcmNoJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm06IFJlcXVlc3QudGVybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heFJlc3VsdHM6IENvcmUuVUkuQXV0b2NvbXBsZXRlLkdldENvbmZpZygnTWF4UmVzdWx0c0Rpc3BsYXllZCcpCiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgICRFbGVtZW50LmRhdGEoJ0F1dG9Db21wbGV0ZVhIUicsIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoVVJMLCBEYXRhLCBmdW5jdGlvbiAoUmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBWYWx1ZURhdGEgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQucmVtb3ZlRGF0YSgnQXV0b0NvbXBsZXRlWEhSJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChSZXN1bHQsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlRGF0YS5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5MYWJlbCArICIgKCIgKyB0aGlzLlZhbHVlICsgIikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLlZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3cgOiB0aGlzLkxhYmVsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlKFZhbHVlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfRXZlbnQsIFVJKSB7CiAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQudmFsKFVJLml0ZW0uc2hvdyk7CgogICAgICAgICAgICAgICAgICAgIC8vIHNldCBoaWRkZW4gZmllbGQgU2VsZWN0ZWRDdXN0b21lclVzZXIKICAgICAgICAgICAgICAgICAgICAvLyBlc2NhcGUgcG9zc2libGUgY29sb25zICg6KSBpbiBlbGVtZW50IGlkIGJlY2F1c2UgalF1ZXJ5IGNhbiBub3QgaGFuZGxlIGl0IGluIGlkIGF0dHJpYnV0ZSBzZWxlY3RvcnMKICAgICAgICAgICAgICAgICAgICAkKCcjJyArIENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKCRFbGVtZW50LmF0dHIoJ2lkJykpICsgJ1NlbGVjdGVkJykudmFsKFVJLml0ZW0udmFsdWUpOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ0N1c3RvbWVyU2VhcmNoJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLy8gYmVmb3JlIHVubG9hZCByZW1vdmUgb2xkIHNlbGVjdGVkIGRhdGEuIElmIHRoZSBwYWdlIGlzIHJlbG9hZGVkICh3aXRoIEY1KSB0aGlzIGRhdGEgc3RheXMgaW4gdGhlIGZpZWxkIGFuZCBpbnZva2VzIGFuIGFqYXggcmVxdWVzdCBvdGhlcndpc2UKICAgICAgICAkKHdpbmRvdykub24oJ2JlZm9yZXVubG9hZC5DdXN0b21lclNlYXJjaCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgLy8gZXNjYXBlIHBvc3NpYmxlIGNvbG9ucyAoOikgaW4gZWxlbWVudCBpZCBiZWNhdXNlIGpRdWVyeSBjYW4gbm90IGhhbmRsZSBpdCBpbiBpZCBhdHRyaWJ1dGUgc2VsZWN0b3JzCiAgICAgICAgICAgICQoJyMnICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoJEVsZW1lbnQuYXR0cignaWQnKSkgKyAnU2VsZWN0ZWQnKS52YWwoJycpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHJldHVybiBUYXJnZXROUzsKfShJVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoIHx8IHt9KSk7Cg==</File>
        <File Location="var/httpd/htdocs/js/ITSM.Agent.Service.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNCBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKCi8qKgogKiBAbmFtZXNwYWNlIEFnZW50CiAqIEBhdXRob3IgUm90aGVyIE9TUyBHbWJICiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBiZWhhdmlvdXJzIGZvciBJVFNNIFNlcnZpY2UuCiAqLwogSVRTTS5BZ2VudC5TZXJ2aWNlID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qKgogICAgICogQG5hbWUgSW5pdAogICAgICogQG1lbWJlcm9mIEFnZW50LlNlcnZpY2UKICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYWN0aW9ucyBmb3IgSVRTTSBTZXJ2aWNlLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24oKSB7CgogICAgICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgICAgICB2YXIgJE1hc3RlckFjdGlvbkxpbmsgPSAkKHRoaXMpLmZpbmQoJy5NYXN0ZXJBY3Rpb25MaW5rJyk7CiAgICAgICAgICAgIC8vIG9ubHkgYWN0IGlmIHRoZSBsaW5rIHdhcyBub3QgY2xpY2tlZCBkaXJlY3RseQogICAgICAgICAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9ICRNYXN0ZXJBY3Rpb25MaW5rLmF0dHIoJ2hyZWYnKTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfTsKCiAgICBDb3JlLkluaXQuUmVnaXN0ZXJOYW1lc3BhY2UoVGFyZ2V0TlMsICdBUFBfTU9EVUxFJyk7CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuU2VydmljZSB8fCB7fSkpOwo=</File>
        <File Location="var/httpd/htdocs/js/ITSM.Agent.ServiceZoom.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNCBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKCi8qKgogKiBAbmFtZXNwYWNlIEFnZW50CiAqIEBhdXRob3IgUm90aGVyIE9TUyBHbWJICiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBiZWhhdmlvdXJzIGZvciBJVFNNIFNlcnZpY2UgWm9vbS4KICovCiBJVFNNLkFnZW50LlNlcnZpY2Vab29tID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qKgogICAgICogQG5hbWUgSW5pdAogICAgICogQG1lbWJlcm9mIEFnZW50LlNlcnZpY2UKICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYWN0aW9ucyBmb3IgSVRTTSBTZXJ2aWNlIFpvb20uCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbigpIHsKCiAgICAgICAgJCgndWwuQWN0aW9ucyBhLkFzUG9wdXAnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgQ29yZS5VSS5Qb3B1cC5PcGVuUG9wdXAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdBY3Rpb24nKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwoKICAgICAgICAkKCd1bC5BY3Rpb25zIGEuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaGlzdG9yeS5iYWNrKCk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbGxvY2F0aW9uIGxpc3QgZm9yIGxpbmsgb2JqZWN0IHRhYmxlLgogICAgICAgIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLlNldEFsbG9jYXRpb25MaXN0KCk7CiAgICB9OwoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEUnKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5BZ2VudC5TZXJ2aWNlWm9vbSB8fCB7fSkpOwo=</File>
        <File Location="var/httpd/htdocs/js/ITSM.Agent.SLA.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNCBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKCi8qKgogKiBAbmFtZXNwYWNlIEFnZW50CiAqIEBhdXRob3IgUm90aGVyIE9TUyBHbWJICiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBiZWhhdmlvdXJzIGZvciBJVFNNIFNMQS4KICovCiBJVFNNLkFnZW50LlNMQSA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBuYW1lIEluaXQKICAgICAqIEBtZW1iZXJvZiBBZ2VudC5TTEEKICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYWN0aW9ucyBmb3IgSVRTTSBTTEEuCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbigpIHsKCiAgICAgICAgJCgnLk1hc3RlckFjdGlvbicpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgICAgIHZhciAkTWFzdGVyQWN0aW9uTGluayA9ICQodGhpcykuZmluZCgnLk1hc3RlckFjdGlvbkxpbmsnKTsKICAgICAgICAgICAgLy8gb25seSBhY3QgaWYgdGhlIGxpbmsgd2FzIG5vdCBjbGlja2VkIGRpcmVjdGx5CiAgICAgICAgICAgIGlmIChFdmVudC50YXJnZXQgIT09ICRNYXN0ZXJBY3Rpb25MaW5rLmdldCgwKSkgewogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJE1hc3RlckFjdGlvbkxpbmsuYXR0cignaHJlZicpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9OwoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEUnKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5BZ2VudC5TTEEgfHwge30pKTsK</File>
        <File Location="var/httpd/htdocs/js/ITSM.Agent.SLAZoom.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNCBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKCi8qKgogKiBAbmFtZXNwYWNlIEFnZW50CiAqIEBhdXRob3IgUm90aGVyIE9TUyBHbWJICiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBiZWhhdmlvdXJzIGZvciBJVFNNIFNMQSBab29tLgogKi8KIElUU00uQWdlbnQuU0xBWm9vbSA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBuYW1lIEluaXQKICAgICAqIEBtZW1iZXJvZiBBZ2VudC5TTEEKICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYWN0aW9ucyBmb3IgSVRTTSBTTEEgWm9vbS4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uKCkgewoKICAgICAgICAkKCd1bC5BY3Rpb25zIGEuQXNQb3B1cCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICBDb3JlLlVJLlBvcHVwLk9wZW5Qb3B1cCgkKHRoaXMpLmF0dHIoJ2hyZWYnKSwgJ0FjdGlvbicpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CgogICAgICAgICQoJ3VsLkFjdGlvbnMgYS5IaXN0b3J5QmFjaycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICBoaXN0b3J5LmJhY2soKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwogICAgfTsKCiAgICBDb3JlLkluaXQuUmVnaXN0ZXJOYW1lc3BhY2UoVGFyZ2V0TlMsICdBUFBfTU9EVUxFJyk7CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuU0xBWm9vbSB8fCB7fSkpOwo=</File>
        <File Location="var/httpd/htdocs/js/ITSM.Agent.Zoom.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNCBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgSVRTTS5BZ2VudC5ab29tCiAqIEBleHBvcnRzIFRhcmdldE5TIGFzIENvcmUuSVRTTS5UaWNrZXRab29tCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIElUU00uCiAqLwpJVFNNLkFnZW50Llpvb20gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBJVFNNVGFibGVIZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSB0YWJsZS4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMuCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoSVRTTVRhYmxlSGVpZ2h0KSB7CgogICAgICAgIENvcmUuVUkuUmVzaXphYmxlLkluaXQoJCgnI0lUU01UYWJsZUJvZHknKSwgSVRTTVRhYmxlSGVpZ2h0LCBmdW5jdGlvbiAoX2V2ZW50LCBfdWksIEhlaWdodCkgewoKICAgICAgICAgICAgLy8gcmVtZW1iZXIgbmV3IGhlaWdodCBmb3IgbmV4dCByZWxvYWQKICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChUYXJnZXROUy5SZXNpemVUaW1lT3V0U2Nyb2xsZXIpOwogICAgICAgICAgICBUYXJnZXROUy5SZXNpemVUaW1lT3V0U2Nyb2xsZXIgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBDb3JlLkFnZW50LlByZWZlcmVuY2VzVXBkYXRlKCdVc2VyQ29uZmlnSXRlbVpvb21UYWJsZUhlaWdodCcsIEhlaWdodCk7CiAgICAgICAgICAgIH0sIDEwMDApOwogICAgICAgIH0pOwogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5BZ2VudC5ab29tIHx8IHt9KSk7Cg==</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/ITSM.Agent.Default.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIERlZmF1bHQgU2V0dGluZ3MKICovCgpAbWVkaWEgc2NyZWVuLHByb2plY3Rpb24sdHYsaGFuZGhlbGQgewoKLyoqCiAqIEBzdWJzZWN0aW9uICBGbGFnCiAqLwoKZmllbGRzZXQuVGFibGVMaWtlIGRpdi5WYWx1ZSAuRmxhZyB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLXRvcDogM3B4Owp9CgojU2VydmljZUluY2lkZW50U3RhdGVDb250YWluZXIgLkZsYWcsCi5TaWRlYmFyQ29sdW1uIGZpZWxkc2V0LlRhYmxlTGlrZSBkaXYuVmFsdWUgLkZsYWcgewogICAgbWFyZ2luLXRvcDogN3B4Owp9Cgp1bC5JVFNNRmxhZyB7CiAgICBtYXJnaW4tdG9wOiA1cHg7Cn0KCnVsLklUU01GbGFnIGRpdi5WYWx1ZSAuRmxhZyB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLXRvcDogM3B4Owp9CgouUlRMIGZpZWxkc2V0LlRhYmxlTGlrZSBkaXYuVmFsdWUgLkZsYWcgewogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDVweDsKfQoKLkZsYWcgc3Bhbi5ncmF5bGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6I2NkY2RjZDsKfQoKLkZsYWcgc3Bhbi5ncmVlbmxlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGJlZjRkOwp9CgouRmxhZyBzcGFuLnllbGxvd2xlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkZDUwOwp9CgouRmxhZyBzcGFuLnJlZGxlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNmZjUwNWU7Cn0KCi5GbGFnIHNwYW4ucHVycGxlbGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6I2IyM2FlZTsKfQoKLkZsYWcgc3Bhbi5vcmFuZ2VsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojZmY4YzAwOwp9CgouRmxhZyBzcGFuLmN5YW5sZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojNzljZGNkOwp9CgouRmxhZyBzcGFuLndoaXRlbGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6I2ZmZmZmZjsKfQoKLkZsYWcgc3Bhbi5ibGFja2xlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA7Cn0KCi8qKgogKiBAbm90ZSAgICAgVGhlc2UgY2xhc3NlcyBhcmUgdXNlZCBmb3IgYSBMYWJlbCBhbmQgYSBEaXYgd2l0aCBjbGFzcyAnRmllbGQnLAogKiAgICAgICAgICAgdGhhdCBhcmUgaW5zaWRlIGEgRmllbGQgRGl2IC4KICovCgpsYWJlbC5TdWJFbGVtZW50IHsKICAgIHdpZHRoOiA0MCUgIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogMTBweDsKfQoKZGl2LlN1YkVsZW1lbnQgewogICAgbWFyZ2luLWxlZnQ6IDQwJSAhaW1wb3J0YW50Owp9CgpkaXYuU3ViRWxlbWVudCBpbnB1dC5XNTBwYyB7CiAgICB3aWR0aDogMzMlOwp9CgovKioKICogQHN1YnNlY3Rpb24gTm9Eb3VibGVCb3JkZXJzCiAqLwoKLkNvbnRlbnQuTm9Eb3VibGVCb3JkZXJzIHsKICAgIGJvcmRlci1sZWZ0OiAwIG5vbmUgIzAwMDAwMDsKICAgIGJvcmRlci1yaWdodDogMCBub25lICMwMDAwMDA7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgU3RhbmRhcmQgV2lkdGhzCiAqLwouVzVwYyB7CiAgICB3aWR0aDogNSU7Cn0KCi5XMTVwYyB7CiAgICB3aWR0aDogMTUlOwp9CgouVzMwcGMgewogICAgd2lkdGg6IDMwJTsKfQoKfS8qIGVuZCBtZWRpYSAqLwo=</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/ITSM.Agent.Detail.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIElUU01EZXRhaWxzCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAc3Vic2VjdGlvbiAgSGVhZGxpbmUKICovCgovKioKICogQHN1YnNlY3Rpb24gIElUU00gdHJlZQogKi8KI0lUU01UcmVlIHsKICAgIG1hcmdpbi10b3A6IDIwcHg7Cn0KCgovKioKICogQHN1YnNlY3Rpb24gIElUU00gdGFibGUgYm9keQogKi8KI0lUU01UYWJsZUJvZHkgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cn0KCiNJVFNNVGFibGVCb2R5IC5TY3JvbGxlciB7CiAgICBoZWlnaHQ6IDE0MHB4OwogICAgb3ZlcmZsb3cteTogc2Nyb2xsOwp9CgovKioKICogQHN1YnNlY3Rpb24gIENvbnRyb2xSb3cgSWNvbnMKICovCgoKLklUU01JdGVtVmlldyB7CiAgICBmbG9hdDogcmlnaHQ7Cn0KCi5SVEwgLklUU01JdGVtVmlldyB7CiAgICBmbG9hdDogbGVmdDsKfQoKCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLk9uZUlUU01JdGVtLkFjdGl2ZSBzcGFuLAouQ29udHJvbFJvdyAuSVRTTUl0ZW1WaWV3Lkljb25zIC5PbmVJVFNNSXRlbS5BY3RpdmU6aG92ZXIgc3BhbiB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAwOwp9CgouQ29udHJvbFJvdyAuSVRTTUl0ZW1WaWV3Lkljb25zIC5BbGxJVFNNSXRlbXMgc3BhbiwKLkNvbnRyb2xSb3cgLklUU01JdGVtVmlldy5JY29ucyAuQWxsSVRTTUl0ZW1zOmhvdmVyIHNwYW4gewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTZweDsKfQoKLkNvbnRyb2xSb3cgLklUU01JdGVtVmlldy5JY29ucyAuQWxsSVRTTUl0ZW1zLkFjdGl2ZSBzcGFuLAouQ29udHJvbFJvdyAuSVRTTUl0ZW1WaWV3Lkljb25zIC5BbGxJVFNNSXRlbXMuQWN0aXZlOmhvdmVyIHNwYW4gewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2cHg7Cn0KCi5Db250cm9sUm93IC5JVFNNRmlsdGVyLkljb25zIC5BY3RpdmUgc3BhbiB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNnB4Owp9CgovKioKICogQHN1YnNlY3Rpb24gIEl0ZW1Sb3cKICogQG5vdGUgICAgICAgIGNvbnRhaW5zIHJhbmRvbSBpdGVtcyBhbmQgaXMgcG9zaXRpb25lZCBpbiB0aGUgc2lkZWJhcgogKi8KCi5JdGVtUm93IHsKICAgIG1hcmdpbi1sZWZ0OiA0MCU7Cn0KCi5SVEwgLkl0ZW1Sb3cgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDQwJTsKfQoKLkl0ZW1Sb3cgbGkgewogICAgcGFkZGluZzogM3B4IDAgNXB4IDhweDsKfQoKLlJUTCAuSXRlbVJvdyBsaSB7CiAgICBwYWRkaW5nOiAzcHggOHB4IDVweCAwOwp9CgouSXRlbVJvdyBhIHsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgY29sb3I6ICMwMDA7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoKLkl0ZW1Sb3cgYTpob3ZlciB7CiAgICBjb2xvcjogIzY2NjsKfQoKfSAvKiBlbmQgQG1lZGlhICovCg==</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/ITSM.Print.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIENTUyBmb3IgcHJpbnRpbmcKICovCgpAbWVkaWEgcHJpbnQgewoKCiNJVFNNVGFibGUgewogICAgZGlzcGxheTogbm9uZTsKfQoKfSAvKiBlbmQgQG1lZGlhICovCg==</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/ITSM.Table.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIFRhYmxlcwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gIE92ZXJ2aWV3IFNtYWxsIFZpZXcgVGFibGUKICovCgouVGFibGVTbWFsbCB0aGVhZC5JVFNNSGVhZGVyIHNwYW4gewogICAgY29sb3I6ICM0QTRBNEE7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgdGFibGUgZWxlbWVudHMgd2l0aG91dCBoaWdobGlnaHQKICovCgouRGF0YVRhYmxlTm9IaWdobGlnaHQgdGJvZHkgdHIgdGQgewogICAgaGVpZ2h0OiAzMHB4Owp9CgouRGF0YVRhYmxlTm9IaWdobGlnaHQgdGJvZHkgdHIgdGQgaW5wdXQsCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0ciB0ZCBzZWxlY3R7CiAgICB3aWR0aDogODUlOwp9CgouRGF0YVRhYmxlTm9IaWdobGlnaHQgdGJvZHkgdHI6aG92ZXIgdGQgewogICAgYmFja2dyb3VuZDogbm9uZTsKICAgIC1tb3otYm94LXNoYWRvdzogbm9uZTsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAgIGJveC1zaGFkb3c6IG5vbmU7Cn0KLkRhdGFUYWJsZU5vSGlnaGxpZ2h0IHRyLkV2ZW46aG92ZXIgdGQsCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0ci5FdmVuOmhvdmVyLkxhc3QgdGQgewogICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTsKfQoKLkRhdGFUYWJsZU5vSGlnaGxpZ2h0IHRib2R5IHRyLkxhc3Q6aG92ZXIgdGQgewogICAgYmFja2dyb3VuZDogbm9uZTsKICAgIC1tb3otYm94LXNoYWRvdzogbm9uZTsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAgIGJveC1zaGFkb3c6IG5vbmU7Cn0KCn0K</File>
        <File Location="var/packagesetup/ITSMCore.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIHZhcjo6cGFja2FnZXNldHVwOjpJVFNNQ29yZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Ok91dHB1dDo6VGVtcGxhdGU6OlByb3ZpZGVyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkVmFsdWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcsCik7Cgo9aGVhZDEgTkFNRQoKdmFyOjpwYWNrYWdlc2V0dXA6OklUU01Db3JlIC0gY29kZSB0byBleGVjdXRlIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1jdXQKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJENvZGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCd2YXI6OnBhY2thZ2VzZXR1cDo6SVRTTUNvcmUnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0gYmxlc3Mge30sICRUeXBlOwoKICAgICMgRm9yY2UgYSByZWxvYWQgb2YgWlpaQXV0by5wbSBhbmQgWlpaQUF1dG8ucG0gdG8gZ2V0IHRoZSBmcmVzaCBjb25maWd1cmF0aW9uIHZhbHVlcy4KICAgIGZvciBteSAkTW9kdWxlICggc29ydCBrZXlzICVJTkMgKSB7CiAgICAgICAgaWYgKCAkTW9kdWxlID1+IG0vWlpaQUE/dXRvXC5wbSQvICkgewogICAgICAgICAgICBkZWxldGUgJElOQ3skTW9kdWxlfTsKICAgICAgICB9CiAgICB9CgogICAgIyBDcmVhdGUgY29tbW9uIG9iamVjdHMgd2l0aCBmcmVzaCBkZWZhdWx0IGNvbmZpZy4KICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCgpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIENvZGVJbnN0YWxsKCkKCnJ1biB0aGUgY29kZSBpbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVJbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZUluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNyZWF0ZSBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTUNvcmUKICAgICRTZWxmLT5fQ3JlYXRlSVRTTUR5bmFtaWNGaWVsZHMoKTsKCiAgICAjIHNldCBkZWZhdWx0IENJUCBtYXRyaXgKICAgICRTZWxmLT5fQ0lQRGVmYXVsdE1hdHJpeFNldCgpOwoKICAgICMgYWRkIHRoZSBncm91cCBpdHNtLXNlcnZpY2UKICAgICRTZWxmLT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2l0c20tc2VydmljZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0dyb3VwIGZvciBJVFNNIFNlcnZpY2UgbWFzayBhY2Nlc3MgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nLAogICAgKTsKCiAgICAjIGZpbGwgdXAgZW1wdHkgdHlwZV9pZCByb3dzIGluIHNlcnZpY2UgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEKCk7CgogICAgIyBmaWxsIHVwIGVtcHR5IGNyaXRpY2FsaXR5IHJvd3MgaW4gc2VydmljZSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSgpOwoKICAgICMgZmlsbCB1cCBlbXB0eSB0eXBlX2lkIHJvd3MgaW4gc2xhIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U0xBVHlwZUlEKCk7CgogICAgIyBzZXQgcHJlZmVyZW5jZXMgZm9yIHNvbWUgR2VuZXJhbENhdGFsb2cgZW50cmllcwogICAgIyB0aGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGluIENvZGVJbnN0YWxsCiAgICAjIChGb3IgVXBncmFkZXMgdGhpcyBpcyBkb25lIGFscmVhZHkgaW4gdGhlIEdlbmVyYWxDYXRhbG9nIHBhY2thZ2UpCiAgICAkU2VsZi0+X1NldFByZWZlcmVuY2VzKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlUmVpbnN0YWxsKCkKCnJ1biB0aGUgY29kZSByZWluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVJlaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVSZWluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNldCBkZWZhdWx0IENJUCBtYXRyaXgKICAgICRTZWxmLT5fQ0lQRGVmYXVsdE1hdHJpeFNldCgpOwoKICAgICMgYWRkIHRoZSBncm91cCBpdHNtLXNlcnZpY2UKICAgICRTZWxmLT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2l0c20tc2VydmljZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0dyb3VwIGZvciBJVFNNIFNlcnZpY2UgbWFzayBhY2Nlc3MgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nLAogICAgKTsKCiAgICAjIGZpbGwgdXAgZW1wdHkgdHlwZV9pZCByb3dzIGluIHNlcnZpY2UgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEKCk7CgogICAgIyBmaWxsIHVwIGVtcHR5IGNyaXRpY2FsaXR5IHJvd3MgaW4gc2VydmljZSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSgpOwoKICAgICMgZmlsbCB1cCBlbXB0eSB0eXBlX2lkIHJvd3MgaW4gc2xhIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U0xBVHlwZUlEKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVXBncmFkZSgpCgpydW4gdGhlIGNvZGUgdXBncmFkZSBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZSgpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZXQgZGVmYXVsdCBDSVAgbWF0cml4CiAgICAkU2VsZi0+X0NJUERlZmF1bHRNYXRyaXhTZXQoKTsKCiAgICAjIGZpbGwgdXAgZW1wdHkgdHlwZV9pZCByb3dzIGluIHNlcnZpY2UgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEKCk7CgogICAgIyBmaWxsIHVwIGVtcHR5IGNyaXRpY2FsaXR5IHJvd3MgaW4gc2VydmljZSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSgpOwoKICAgICMgZmlsbCB1cCBlbXB0eSB0eXBlX2lkIHJvd3MgaW4gc2xhIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U0xBVHlwZUlEKCk7CgogICAgIyBtYWtlIGR5bmFtaWMgZmllbGRzIGludGVybmFsCiAgICAkU2VsZi0+X01ha2VEeW5hbWljRmllbGRzSW50ZXJuYWwoKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIENvZGVVbmluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIHVuaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVW5pbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZVVuaW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgcmVtb3ZlIER5bmFtaWMgRmllbGRzIGFuZCBpdHMgdmFsdWVzCiAgICAkU2VsZi0+X0R5bmFtaWNGaWVsZHNEZWxldGUoKTsKCiAgICAjIGRlYWN0aXZhdGUgdGhlIGdyb3VwIGl0c20tc2VydmljZQogICAgJFNlbGYtPl9Hcm91cERlYWN0aXZhdGUoCiAgICAgICAgTmFtZSA9PiAnaXRzbS1zZXJ2aWNlJywKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfR2V0SVRTTUR5bmFtaWNGaWVsZHNEZWZpbml0aW9uKCkKCnJldHVybnMgdGhlIGRlZmluaXRpb24gZm9yIElUU01Db3JlIHJlbGF0ZWQgZHluYW1pYyBmaWVsZHMKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9HZXRJVFNNRHluYW1pY0ZpZWxkc0RlZmluaXRpb24oKTsKCj1jdXQKCnN1YiBfR2V0SVRTTUR5bmFtaWNGaWVsZHNEZWZpbml0aW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWZpbmUgYWxsIGR5bmFtaWMgZmllbGRzIGZvciBJVFNNQ29yZQogICAgcmV0dXJuICgKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0lUU01Dcml0aWNhbGl0eScsCiAgICAgICAgICAgIExhYmVsICAgICAgPT4gJ0NyaXRpY2FsaXR5JywKICAgICAgICAgICAgRmllbGRUeXBlICA9PiAnRHJvcGRvd24nLAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgIFRyYW5zbGF0YWJsZVZhbHVlcyA9PiAxLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlcyAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICcxIHZlcnkgbG93JyAgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgICAgICcyIGxvdycgICAgICAgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgICAgICAnMyBub3JtYWwnICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgICAgICAgICAgJzQgaGlnaCcgICAgICA9PiAnNCBoaWdoJywKICAgICAgICAgICAgICAgICAgICAnNSB2ZXJ5IGhpZ2gnID0+ICc1IHZlcnkgaGlnaCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgID0+ICdJVFNNSW1wYWN0JywKICAgICAgICAgICAgTGFiZWwgICAgICA9PiAnSW1wYWN0JywKICAgICAgICAgICAgRmllbGRUeXBlICA9PiAnRHJvcGRvd24nLAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSAgICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlVmFsdWVzID0+IDEsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgJzEgdmVyeSBsb3cnICA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgICAgICAgICAgJzIgbG93JyAgICAgICA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgICAgICczIG5vcm1hbCcgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgICAgICAgICAnNCBoaWdoJyAgICAgID0+ICc0IGhpZ2gnLAogICAgICAgICAgICAgICAgICAgICc1IHZlcnkgaGlnaCcgPT4gJzUgdmVyeSBoaWdoJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICk7Cn0KCj1oZWFkMiBfQ3JlYXRlSVRTTUR5bmFtaWNGaWVsZHMoKQoKY3JlYXRlcyBhbGwgZHluYW1pYyBmaWVsZHMgdGhhdCBhcmUgbmVjZXNzYXJ5IGZvciBJVFNNQ29yZQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0NyZWF0ZUlUU01EeW5hbWljRmllbGRzKCk7Cgo9Y3V0CgpzdWIgX0NyZWF0ZUlUU01EeW5hbWljRmllbGRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFZhbGlkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMb29rdXAoCiAgICAgICAgVmFsaWQgPT4gJ3ZhbGlkJywKICAgICk7CgogICAgIyBnZXQgYWxsIGN1cnJlbnQgZHluYW1pYyBmaWVsZHMKICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgICMgZ2V0IHRoZSBsaXN0IG9mIG9yZGVyIG51bWJlcnMgKGlzIGFscmVhZHkgc29ydGVkKS4KICAgIG15IEBEeW5hbWljZmllbGRPcmRlckxpc3Q7CiAgICBmb3IgbXkgJER5bmFtaWNmaWVsZCAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewogICAgICAgIHB1c2ggQER5bmFtaWNmaWVsZE9yZGVyTGlzdCwgJER5bmFtaWNmaWVsZC0+e0ZpZWxkT3JkZXJ9OwogICAgfQoKICAgICMgZ2V0IHRoZSBsYXN0IGVsZW1lbnQgZnJvbSB0aGUgb3JkZXIgbGlzdCBhbmQgYWRkIDEKICAgIG15ICROZXh0T3JkZXJOdW1iZXIgPSAxOwogICAgaWYgKEBEeW5hbWljZmllbGRPcmRlckxpc3QpIHsKICAgICAgICAkTmV4dE9yZGVyTnVtYmVyID0gJER5bmFtaWNmaWVsZE9yZGVyTGlzdFstMV0gKyAxOwogICAgfQoKICAgICMgZ2V0IHRoZSBkZWZpbml0aW9uIGZvciBhbGwgZHluYW1pYyBmaWVsZHMgZm9yIElUU00KICAgIG15IEBEeW5hbWljRmllbGRzID0gJFNlbGYtPl9HZXRJVFNNRHluYW1pY0ZpZWxkc0RlZmluaXRpb247CgogICAgIyBjcmVhdGUgYSBkeW5hbWljIGZpZWxkcyBsb29rdXAgdGFibGUKICAgIG15ICVEeW5hbWljRmllbGRMb29rdXA7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmIHJlZiAkRHluYW1pY0ZpZWxkIG5lICdIQVNIJzsKICAgICAgICAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGQ7CiAgICB9CgogICAgIyBjcmVhdGUgb3IgdXBkYXRlIGR5bmFtaWMgZmllbGRzCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoQER5bmFtaWNGaWVsZHMpIHsKCiAgICAgICAgbXkgJENyZWF0ZUR5bmFtaWNGaWVsZDsKCiAgICAgICAgIyBjaGVjayBpZiB0aGUgZHluYW1pYyBmaWVsZCBhbHJlYWR5IGV4aXN0cwogICAgICAgIGlmICggcmVmICREeW5hbWljRmllbGRMb29rdXB7ICREeW5hbWljRmllbGQtPntOYW1lfSB9IG5lICdIQVNIJyApIHsKICAgICAgICAgICAgJENyZWF0ZUR5bmFtaWNGaWVsZCA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIGlmIHRoZSBmaWVsZCBleGlzdHMgY2hlY2sgaWYgdGhlIHR5cGUgbWF0Y2ggd2l0aCB0aGUgbmVlZGVkIHR5cGUKICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICREeW5hbWljRmllbGRMb29rdXB7ICREeW5hbWljRmllbGQtPntOYW1lfSB9LT57RmllbGRUeXBlfQogICAgICAgICAgICBuZSAkRHluYW1pY0ZpZWxkLT57RmllbGRUeXBlfQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyByZW5hbWUgdGhlIGZpZWxkIGFuZCBjcmVhdGUgYSBuZXcgb25lCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRVcGRhdGUoCiAgICAgICAgICAgICAgICAleyAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSB9LAogICAgICAgICAgICAgICAgTmFtZSAgID0+ICREeW5hbWljRmllbGRMb29rdXB7ICREeW5hbWljRmllbGQtPntOYW1lfSB9LT57TmFtZX0gLiAnT2xkJywKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJENyZWF0ZUR5bmFtaWNGaWVsZCA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSBpZiB0aGUgZmllbGQgZXhpc3RzIGFuZCB0aGUgdHlwZSBtYXRjaCwgdXBkYXRlIGl0IHRvIHRoZSBJVFNNIGRlZmluaXRpb24KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRVcGRhdGUoCiAgICAgICAgICAgICAgICAleyREeW5hbWljRmllbGR9LAogICAgICAgICAgICAgICAgSUQgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfS0+e0lEfSwKICAgICAgICAgICAgICAgIEZpZWxkT3JkZXIgPT4gJER5bmFtaWNGaWVsZExvb2t1cHsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0tPntGaWVsZE9yZGVyfSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gJFZhbGlkSUQsCiAgICAgICAgICAgICAgICBSZW9yZGVyICAgID0+IDAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIG5ldyBmaWVsZCBoYXMgdG8gYmUgY3JlYXRlZAogICAgICAgIGlmICgkQ3JlYXRlRHluYW1pY0ZpZWxkKSB7CgogICAgICAgICAgICAjIGNyZWF0ZSBhIG5ldyBmaWVsZAogICAgICAgICAgICBteSAkRmllbGRJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkQWRkKAogICAgICAgICAgICAgICAgSW50ZXJuYWxGaWVsZCA9PiAxLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgICAgICBMYWJlbCAgICAgICAgID0+ICREeW5hbWljRmllbGQtPntMYWJlbH0sCiAgICAgICAgICAgICAgICBGaWVsZE9yZGVyICAgID0+ICROZXh0T3JkZXJOdW1iZXIsCiAgICAgICAgICAgICAgICBGaWVsZFR5cGUgICAgID0+ICREeW5hbWljRmllbGQtPntGaWVsZFR5cGV9LAogICAgICAgICAgICAgICAgT2JqZWN0VHlwZSAgICA9PiAkRHluYW1pY0ZpZWxkLT57T2JqZWN0VHlwZX0sCiAgICAgICAgICAgICAgICBDb25maWcgICAgICAgID0+ICREeW5hbWljRmllbGQtPntDb25maWd9LAogICAgICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAkVmFsaWRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIHVubGVzcyAkRmllbGRJRDsKCiAgICAgICAgICAgICMgaW5jcmVhc2UgdGhlIG9yZGVyIG51bWJlcgogICAgICAgICAgICAkTmV4dE9yZGVyTnVtYmVyKys7CiAgICAgICAgfQogICAgfQoKICAgICMgbWFrZSBkeW5hbWljIGZpZWxkcyBpbnRlcm5hbAogICAgJFNlbGYtPl9NYWtlRHluYW1pY0ZpZWxkc0ludGVybmFsOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX1NldFByZWZlcmVuY2VzKCkKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9TZXRQcmVmZXJlbmNlcygpCgo9Y3V0CgpzdWIgX1NldFByZWZlcmVuY2VzIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgbXkgJU1hcCA9ICgKICAgICAgICBPcGVyYXRpb25hbCA9PiAnb3BlcmF0aW9uYWwnLAogICAgICAgIFdhcm5pbmcgICAgID0+ICd3YXJuaW5nJywKICAgICAgICBJbmNpZGVudCAgICA9PiAnaW5jaWRlbnQnLAogICAgKTsKCiAgICBOQU1FOgogICAgZm9yIG15ICROYW1lICggc29ydCBrZXlzICVNYXAgKSB7CgogICAgICAgIG15ICRJdGVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIE5hbWUgID0+ICROYW1lLAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBOQU1FIGlmICEkSXRlbTsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbS0+e0l0ZW1JRH0sCiAgICAgICAgICAgIEtleSAgICA9PiAnRnVuY3Rpb25hbGl0eScsCiAgICAgICAgICAgIFZhbHVlICA9PiBbICRNYXB7JE5hbWV9IF0sCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0NJUERlZmF1bHRNYXRyaXhTZXQoKQoKc2V0IHRoZSBkZWZhdWx0IEM8Q0lQPiBtYXRyaXgKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9DSVBEZWZhdWx0TWF0cml4U2V0KCk7Cgo9Y3V0CgpzdWIgX0NJUERlZmF1bHRNYXRyaXhTZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjdXJyZW50IGFsbG9jYXRpb24gbGlzdAogICAgbXkgJExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlJyktPkFsbG9jYXRlTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkTGlzdDsKICAgIHJldHVybiBpZiByZWYgJExpc3QgbmUgJ0hBU0gnOwoKICAgICMgc2V0IG5vIG1hdHJpeCBpZiBhbHJlYWR5IGRlZmluZWQKICAgIHJldHVybiBpZiAleyRMaXN0fTsKCiAgICAjIGRlZmluZSB0aGUgYWxsb2NhdGlvbnMKICAgIG15ICVBbGxvY2F0aW9uOwogICAgJEFsbG9jYXRpb257JzEgdmVyeSBsb3cnfS0+eycxIHZlcnkgbG93J30gICA9ICcxIHZlcnkgbG93JzsKICAgICRBbGxvY2F0aW9ueycxIHZlcnkgbG93J30tPnsnMiBsb3cnfSAgICAgICAgPSAnMSB2ZXJ5IGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMSB2ZXJ5IGxvdyd9LT57JzMgbm9ybWFsJ30gICAgID0gJzIgbG93JzsKICAgICRBbGxvY2F0aW9ueycxIHZlcnkgbG93J30tPnsnNCBoaWdoJ30gICAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzEgdmVyeSBsb3cnfS0+eyc1IHZlcnkgaGlnaCd9ICA9ICczIG5vcm1hbCc7CiAgICAkQWxsb2NhdGlvbnsnMiBsb3cnfS0+eycxIHZlcnkgbG93J30gICAgICAgID0gJzEgdmVyeSBsb3cnOwogICAgJEFsbG9jYXRpb257JzIgbG93J30tPnsnMiBsb3cnfSAgICAgICAgICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMiBsb3cnfS0+eyczIG5vcm1hbCd9ICAgICAgICAgID0gJzIgbG93JzsKICAgICRBbGxvY2F0aW9ueycyIGxvdyd9LT57JzQgaGlnaCd9ICAgICAgICAgICAgPSAnMyBub3JtYWwnOwogICAgJEFsbG9jYXRpb257JzIgbG93J30tPnsnNSB2ZXJ5IGhpZ2gnfSAgICAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzMgbm9ybWFsJ30tPnsnMSB2ZXJ5IGxvdyd9ICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMyBub3JtYWwnfS0+eycyIGxvdyd9ICAgICAgICAgID0gJzIgbG93JzsKICAgICRBbGxvY2F0aW9ueyczIG5vcm1hbCd9LT57JzMgbm9ybWFsJ30gICAgICAgPSAnMyBub3JtYWwnOwogICAgJEFsbG9jYXRpb257JzMgbm9ybWFsJ30tPnsnNCBoaWdoJ30gICAgICAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzMgbm9ybWFsJ30tPnsnNSB2ZXJ5IGhpZ2gnfSAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzQgaGlnaCd9LT57JzEgdmVyeSBsb3cnfSAgICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnNCBoaWdoJ30tPnsnMiBsb3cnfSAgICAgICAgICAgID0gJzMgbm9ybWFsJzsKICAgICRBbGxvY2F0aW9ueyc0IGhpZ2gnfS0+eyczIG5vcm1hbCd9ICAgICAgICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc0IGhpZ2gnfS0+eyc0IGhpZ2gnfSAgICAgICAgICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc0IGhpZ2gnfS0+eyc1IHZlcnkgaGlnaCd9ICAgICAgPSAnNSB2ZXJ5IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzUgdmVyeSBoaWdoJ30tPnsnMSB2ZXJ5IGxvdyd9ICA9ICczIG5vcm1hbCc7CiAgICAkQWxsb2NhdGlvbnsnNSB2ZXJ5IGhpZ2gnfS0+eycyIGxvdyd9ICAgICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNSB2ZXJ5IGhpZ2gnfS0+eyczIG5vcm1hbCd9ICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNSB2ZXJ5IGhpZ2gnfS0+eyc0IGhpZ2gnfSAgICAgID0gJzUgdmVyeSBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc1IHZlcnkgaGlnaCd9LT57JzUgdmVyeSBoaWdoJ30gPSAnNSB2ZXJ5IGhpZ2gnOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTUNyaXRpY2FsaXR5IGFuZCBJVFNNSW1wYWN0CiAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbJ1RpY2tldCddLAogICAgICAgIEZpZWxkRmlsdGVyID0+IHsKICAgICAgICAgICAgSVRTTUNyaXRpY2FsaXR5ID0+IDEsCiAgICAgICAgICAgIElUU01JbXBhY3QgICAgICA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZvciBJVFNNQ3JpdGljYWxpdHkgYW5kIElUU01JbXBhY3QKICAgIG15ICVQb3NzaWJsZVZhbHVlczsKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWZ9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICAkUG9zc2libGVWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30gfHwge307CiAgICB9CgogICAgIyBnZXQgdGhlIGNyaXRpY2FsaXR5IGxpc3QKICAgIG15ICVDcml0aWNhbGl0eUxpc3QgPSAleyAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fSB9OwoKICAgICMgZ2V0IHRoZSBpbXBhY3QgbGlzdAogICAgbXkgJUltcGFjdExpc3QgPSAleyAkUG9zc2libGVWYWx1ZXN7SVRTTUltcGFjdH0gfTsKCiAgICAjIGdldCBwcmlvcml0eSBsaXN0CiAgICBteSAlUHJpb3JpdHlMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JyktPlByaW9yaXR5TGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlUHJpb3JpdHlMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVByaW9yaXR5TGlzdDsKCiAgICAjIGNyZWF0ZSB0aGUgYWxsb2NhdGlvbiBtYXRyaXgKICAgIG15ICVBbGxvY2F0aW9uTWF0cml4OwogICAgSU1QQUNUOgogICAgZm9yIG15ICRJbXBhY3QgKCBzb3J0IGtleXMgJUFsbG9jYXRpb24gKSB7CgogICAgICAgIG5leHQgSU1QQUNUIGlmICEkSW1wYWN0TGlzdHskSW1wYWN0fTsKCiAgICAgICAgQ1JJVElDQUxJVFk6CiAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoIHNvcnQga2V5cyAleyAkQWxsb2NhdGlvbnskSW1wYWN0fSB9ICkgewoKICAgICAgICAgICAgbmV4dCBDUklUSUNBTElUWSBpZiAhJENyaXRpY2FsaXR5TGlzdHskQ3JpdGljYWxpdHl9OwoKICAgICAgICAgICAgIyBleHRyYWN0IHByaW9yaXR5CiAgICAgICAgICAgIG15ICRQcmlvcml0eSA9ICRBbGxvY2F0aW9ueyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fTsKCiAgICAgICAgICAgIG5leHQgQ1JJVElDQUxJVFkgaWYgISRQcmlvcml0eUxpc3RSZXZlcnNleyRQcmlvcml0eX07CgogICAgICAgICAgICAjIGV4dHJhY3QgcHJpb3JpdHkgaWQKICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkUHJpb3JpdHlMaXN0UmV2ZXJzZXskUHJpb3JpdHl9OwoKICAgICAgICAgICAgJEFsbG9jYXRpb25NYXRyaXh7JEltcGFjdH0tPnskQ3JpdGljYWxpdHl9ID0gJFByaW9yaXR5SUQ7CiAgICAgICAgfQogICAgfQoKICAgICMgc2F2ZSB0aGUgbWF0cml4CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlJyktPkFsbG9jYXRlVXBkYXRlKAogICAgICAgIEFsbG9jYXRlRGF0YSA9PiBcJUFsbG9jYXRpb25NYXRyaXgsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0dyb3VwQWRkKCkKCmFkZCBhIGdyb3VwCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3RoZS1ncm91cC1uYW1lJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGhlIGdyb3VwIGRlc2NyaXB0aW9uLicsCiAgICApOwoKPWN1dAoKc3ViIF9Hcm91cEFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIERlc2NyaXB0aW9uKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAjIGdldCBsaXN0IG9mIGFsbCBncm91cHMKICAgIG15ICVHcm91cExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMaXN0KCk7CgogICAgIyByZXZlcnNlIHRoZSBncm91cCBsaXN0IGZvciBlYXNpZXIgbG9va3VwCiAgICBteSAlR3JvdXBMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJUdyb3VwTGlzdDsKCiAgICAjIGNoZWNrIGlmIGdyb3VwIGFscmVhZHkgZXhpc3RzCiAgICBteSAkR3JvdXBJRCA9ICRHcm91cExpc3RSZXZlcnNleyAkUGFyYW17TmFtZX0gfTsKCiAgICAjIHJlYWN0aXZhdGUgdGhlIGdyb3VwCiAgICBpZiAoJEdyb3VwSUQpIHsKCiAgICAgICAgIyBnZXQgY3VycmVudCBncm91cCBkYXRhCiAgICAgICAgbXkgJUdyb3VwRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cEdldCgKICAgICAgICAgICAgSUQgICAgID0+ICRHcm91cElELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHJlYWN0aXZhdGUgZ3JvdXAKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBVcGRhdGUoCiAgICAgICAgICAgICVHcm91cERhdGEsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyBhZGQgdGhlIGdyb3VwCiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cEFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIENvbW1lbnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9ufSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgbG9va3VwIHRoZSBuZXcgZ3JvdXAgaWQKICAgIG15ICROZXdHcm91cElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgYWRkIHVzZXIgcm9vdCB0byB0aGUgZ3JvdXAKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckFkZCgKICAgICAgICBHSUQgICAgICAgID0+ICROZXdHcm91cElELAogICAgICAgIFVJRCAgICAgICAgPT4gMSwKICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgcm8gICAgICAgID0+IDEsCiAgICAgICAgICAgIG1vdmVfaW50byA9PiAxLAogICAgICAgICAgICBjcmVhdGUgICAgPT4gMSwKICAgICAgICAgICAgb3duZXIgICAgID0+IDEsCiAgICAgICAgICAgIHByaW9yaXR5ICA9PiAxLAogICAgICAgICAgICBydyAgICAgICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9Hcm91cERlYWN0aXZhdGUoKQoKZGVhY3RpdmF0ZSBhIGdyb3VwCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fR3JvdXBEZWFjdGl2YXRlKAogICAgICAgIE5hbWUgPT4gJ3RoZS1ncm91cC1uYW1lJywKICAgICk7Cgo9Y3V0CgpzdWIgX0dyb3VwRGVhY3RpdmF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvb2t1cCBncm91cCBpZAogICAgbXkgJEdyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoCiAgICAgICAgR3JvdXAgPT4gJFBhcmFte05hbWV9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISRHcm91cElEOwoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICMgZ2V0IGN1cnJlbnQgZ3JvdXAgZGF0YQogICAgbXkgJUdyb3VwRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cEdldCgKICAgICAgICBJRCAgICAgPT4gJEdyb3VwSUQsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgZGVhY3RpdmF0ZSBncm91cAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwVXBkYXRlKAogICAgICAgICVHcm91cERhdGEsCiAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0UmV2ZXJzZXtpbnZhbGlkfSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0ZpbGx1cEVtcHR5U2VydmljZVR5cGVJRCgpCgpmaWxsIHVwIGVtcHR5IGVudHJpZXMgaW4gdGhlIHR5cGVfaWQgY29sdW1uIG9mIHRoZSBzZXJ2aWNlIHRhYmxlCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEKCk7Cgo9Y3V0CgpzdWIgX0ZpbGx1cEVtcHR5U2VydmljZVR5cGVJRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNlcnZpY2UgdHlwZSBsaXN0CiAgICBteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICk7CgogICAgIyBlcnJvciBoYW5kbGluZwogICAgaWYgKCAhJFNlcnZpY2VUeXBlTGlzdCB8fCByZWYgJFNlcnZpY2VUeXBlTGlzdCBuZSAnSEFTSCcgfHwgISV7JFNlcnZpY2VUeXBlTGlzdH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBmaW5kIGFueSBpdGVtIGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBJVFNNOjpTZXJ2aWNlOjpUeXBlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzb3J0IGlkcwogICAgbXkgQFNlcnZpY2VUeXBlS2V5TGlzdCA9IHNvcnQga2V5cyAleyRTZXJ2aWNlVHlwZUxpc3R9OwoKICAgICMgdXBkYXRlIHR5cGVfaWQKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc2VydmljZQogICAgICAgICAgICBTRVQgdHlwZV9pZCA9ID8KICAgICAgICAgICAgV0hFUkUgdHlwZV9pZCA9IDAKICAgICAgICAgICAgT1IgdHlwZV9pZCBJUyBOVUxMIiwKICAgICAgICBCaW5kID0+IFsgXCRTZXJ2aWNlVHlwZUtleUxpc3RbMF0gXSwKICAgICk7Cn0KCj1oZWFkMiBfRmlsbHVwRW1wdHlTZXJ2aWNlQ3JpdGljYWxpdHkoKQoKZmlsbCB1cCBlbXB0eSBlbnRyaWVzIGluIHRoZSBDPGNyaXRpY2FsaXR5PiBjb2x1bW4gb2YgdGhlIHNlcnZpY2UgdGFibGUKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSgpOwoKPWN1dAoKc3ViIF9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbJ1RpY2tldCddLAogICAgICAgIEZpZWxkRmlsdGVyID0+IHsKICAgICAgICAgICAgSVRTTUNyaXRpY2FsaXR5ID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZm9yIElUU01Dcml0aWNhbGl0eSBhbmQgSVRTTUltcGFjdAogICAgbXkgJVBvc3NpYmxlVmFsdWVzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGRDb25maWdBcnJheVJlZn0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgICAgICRQb3NzaWJsZVZhbHVlc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e1Bvc3NpYmxlVmFsdWVzfSB8fCB7fTsKICAgIH0KCiAgICAjIGdldCB0aGUgY3JpdGljYWxpdHkgbGlzdAogICAgbXkgQENyaXRpY2FsaXR5S2V5TGlzdCA9IHNvcnQga2V5cyAleyAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fSB9OwoKICAgICMgZXJyb3IgaGFuZGxpbmcKICAgIGlmICggIUBDcml0aWNhbGl0eUtleUxpc3QgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgZmluZCBhbnkgcG9zc2libGUgdmFsdWVzIGZvciBJVFNNQ3JpdGljYWxpdHkgaW4gZHluYW1pYyBmaWVsZCBjb25maWd1cmF0aW9uISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyB1cGRhdGUgY3JpdGljYWxpdHkgd2l0aCB0aGUgZmlyc3QgY3JpdGljYWxpdHkgZW50cnkKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc2VydmljZQogICAgICAgICAgICBTRVQgY3JpdGljYWxpdHkgPSA/CiAgICAgICAgICAgIFdIRVJFIGNyaXRpY2FsaXR5ID0gJycKICAgICAgICAgICAgT1IgY3JpdGljYWxpdHkgSVMgTlVMTCIsCiAgICAgICAgQmluZCA9PiBbIFwkQ3JpdGljYWxpdHlLZXlMaXN0WzBdIF0sCiAgICApOwp9Cgo9aGVhZDIgX0ZpbGx1cEVtcHR5U0xBVHlwZUlEKCkKCmZpbGwgdXAgZW1wdHkgZW50cmllcyBpbiB0aGUgdHlwZV9pZCBjb2x1bW4gb2YgdGhlIHNsYSB0YWJsZQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0ZpbGx1cEVtcHR5U0xBVHlwZUlEKCk7Cgo9Y3V0CgpzdWIgX0ZpbGx1cEVtcHR5U0xBVHlwZUlEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgc2xhIHR5cGUgbGlzdAogICAgbXkgJFNMQVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpTTEE6OlR5cGUnLAogICAgKTsKCiAgICAjIGVycm9yIGhhbmRsaW5nCiAgICBpZiAoICEkU0xBVHlwZUxpc3QgfHwgcmVmICRTTEFUeXBlTGlzdCBuZSAnSEFTSCcgfHwgISV7JFNMQVR5cGVMaXN0fSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGZpbmQgYW55IGl0ZW0gaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIElUU006OlNMQTo6VHlwZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc29ydCBpZHMKICAgIG15IEBTTEFUeXBlS2V5TGlzdCA9IHNvcnQga2V5cyAleyRTTEFUeXBlTGlzdH07CgogICAgIyB1cGRhdGUgdHlwZV9pZAogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzbGEKICAgICAgICAgICAgU0VUIHR5cGVfaWQgPSA/CiAgICAgICAgICAgIFdIRVJFIHR5cGVfaWQgPSAwCiAgICAgICAgICAgIE9SIHR5cGVfaWQgSVMgTlVMTCIsCiAgICAgICAgQmluZCA9PiBbIFwkU0xBVHlwZUtleUxpc3RbMF0gXSwKICAgICk7Cn0KCj1oZWFkMiBfTWFrZUR5bmFtaWNGaWVsZHNJbnRlcm5hbCgpCgpDb252ZXJ0cyB0aGUgZHluYW1pYyBmaWVsZHMgdG8gaW50ZXJuYWwgZmllbGRzLCB3aGljaCBtZWFucyB0aGF0IHRoZXkgY2FuIG5vdCBiZSBkZWxldGVkIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fTWFrZUR5bmFtaWNGaWVsZHNJbnRlcm5hbCgpOwoKPWN1dAoKc3ViIF9NYWtlRHluYW1pY0ZpZWxkc0ludGVybmFsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdGhlIGRlZmluaXRpb24gZm9yIGFsbCBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTQogICAgbXkgQER5bmFtaWNGaWVsZHMgPSAkU2VsZi0+X0dldElUU01EeW5hbWljRmllbGRzRGVmaW5pdGlvbjsKCiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoQER5bmFtaWNGaWVsZHMpIHsKCiAgICAgICAgIyBzZXQgYXMgaW50ZXJuYWwgZmllbGQKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIGR5bmFtaWNfZmllbGQKICAgICAgICAgICAgICAgIFNFVCBpbnRlcm5hbF9maWVsZCA9IDEKICAgICAgICAgICAgICAgIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcJER5bmFtaWNGaWVsZC0+e05hbWV9LAogICAgICAgICAgICBdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfRHluYW1pY0ZpZWxkc0RlbGV0ZSgpCgpkZWxldGUgZmllbGRzIG9mIGZpZWxkIHR5cGUgU2VydmljZQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0R5bmFtaWNGaWVsZHNEZWxldGUoKTsKCj1jdXQKCnN1YiBfRHluYW1pY0ZpZWxkc0RlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgIG15ICREeW5hbWljRmllbGRWYWx1ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGRWYWx1ZScpOwoKICAgICMgZ2V0IHRoZSBsaXN0IG9mIGFsbCBkeW5hbWljIGZpZWxkcyAodmFsaWQgYW5kIGludmFsaWQgb25lcykKICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICAjIGRlbGV0ZSB0aGUgZHluYW1pYyBmaWVsZHMKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkICggQHskRHluYW1pY0ZpZWxkTGlzdH0gKSB7CgogICAgICAgICMgY2hlY2sgaWYgZmllbGQgc2hvdWxkIGJlIGRlbGV0ZWQKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCB1bmxlc3MgJER5bmFtaWNGaWVsZC0+e0ZpZWxkVHlwZX0gZXEgJ1NlcnZpY2UnOwoKICAgICAgICAjIGRlbGV0ZSBhbGwgZmllbGQgdmFsdWVzCiAgICAgICAgbXkgJFZhbHVlc0RlbGV0ZVN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkVmFsdWVPYmplY3QtPkFsbFZhbHVlc0RlbGV0ZSgKICAgICAgICAgICAgRmllbGRJRCA9PiAkRHluYW1pY0ZpZWxkLT57SUR9LAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyB2YWx1ZXMgY291bGQgYmUgZGVsZXRlZAogICAgICAgIGlmICgkVmFsdWVzRGVsZXRlU3VjY2VzcykgewoKICAgICAgICAgICAgIyBkZWxldGUgZmllbGQKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGREZWxldGUoCiAgICAgICAgICAgICAgICBJRCAgICAgPT4gJER5bmFtaWNGaWVsZC0+e0lEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkIG5vdCBkZWxldGUgZHluYW1pYyBmaWVsZCAnJER5bmFtaWNGaWVsZC0+e05hbWV9JyEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB2YWx1ZXMgY291bGQgbm90IGJlIGRlbGV0ZWQKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkIG5vdCBkZWxldGUgdmFsdWVzIGZvciBkeW5hbWljIGZpZWxkICckRHluYW1pY0ZpZWxkLT57TmFtZX0nISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=</File>
        <File Location="doc/en/ITSMCore.pdf" Permission="644" Encode="Base64">JVBERi0xLjUKJeTw7fgKNCAwIG9iago8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCA4MjgvSGVpZ2h0IDI1My9Db2xvclNwYWNlL0RldmljZUdyYXkvQml0c1BlckNvbXBvbmVudAo4L0RlY29kZVBhcm1zPDwvQml0c1BlckNvbXBvbmVudCA4L0NvbG9ycyAxL0NvbHVtbnMgODI4L1ByZWRpY3RvciAyPj4vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aAoyNDQzPj4Kc3RyZWFtCnja7d2LddpYAgZgUkGYCqKtIGwFZisIqWCYCsJUsGwFw1QwuIJlKli5gpUrGKhgTQVZJ465AoORhB7X6PvOmXMSGzsaSf/VfWswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgF5LktEwSR7/kC3WNf3K8TSp/LOr5cN1nufZ5PxnsodsnTV5EE9XJh2s19mDW/+yUzke34S/bcf1XLflz5f89P34Gq/qMP1Y8JPb1WrV1FHkr8wmS9NMBKpdzcnk0+FlS+q4bef/vOzn70dXeLbTmxIf3i4WjZQfk38ffGGTLlNJKP/wPvZw+HVRw69+eH/hL/jH9V3P0X/LfX47XzRwFNmRZ99muVyLQwnT+YejX//XvIb201+X/oY6jiK2ouo/ZX/iblL/o+fr8S/fzqXn0uTEkp1fF7JTX+vzfHakp/BlnJ+uev+yrOEfWH+48Bf8PZOdRsKz+nTyW7/P9bud7SGYfzn9zc2ojhP4okVatrYyHshOI+F57Si205V0vH72lq88FDaTeq7V7LeLojN5kJ06y7J8bf2PV77559Sj5xWnuo/vBoOHbL2q69wlk+GJ7+z+/bv0VL3iKsccQnZuT7csRsPkoGS7ndZ8HMl08PhUTz40WnZeZX1t+bK+u02ztMUh5q919kq8yey83gGfjKd7rdGmuutHyXj8saH27lVG58XQdpND2LJTJTvfPrr42E7b78jg+OD3mZwcK2rSgzHLu2X7pYzsFHiS5GfONDtOnEynTdcSrzE6d/O0g6OQnSJhyIWn8Xv5cLBPeM5FZzNNOzkM2Sn0IMnNfnvXeFV+NnsvPMXbOp3dubJTKDtJtrudPzffIk2WN8Jz2t4swPtpZ32RslOsARNqba2cqNk8/+jR23aq9Tm4nXU3BiY7xbIT5l23M8titMq3eq5wInv19uAfMdTXZKfEfbmbFLhJ2q/U17OO6yrkas9dP5Blp2B2Qm/Bu3aOcLjKNXqucUphNfk1ix3XZWWnYHbC7Kl3bR1jfpb1FS4DqdYQ/C2eZmBfsxOuQbzZyVfbtqO14DyeknWosXU+5aKv2QlRiDc7e+H5cyI5e31s3VdjZSfi7OwNoOtr21sCHUH3iewUvCcXXzrITr5DVnfB3mMngqJEdsr2s22HbR5nrr/Agyf32IlhroXslB3fabf8zzWOPXjCYyeKAS/ZKZadUOS13L2Tq7X1/cGTK0eiuFtlp9gdGW7hzy2vTgwzH/s+JzRcg00ykJ03k50wnP1Ty7WF3K4kP/V7Zk4oReIYKZadQtkJN3D7rY5wy/R7PnWoNkcyvU92Sq59a//+DVWVfo+PhqkgkWziIDtFshM+3UWRF/bi73WlLXTXR7JP7dee1gfCXqkFLkSur6uLIiYMy/a60vY1rp6C3LDF39b9rDyfH+ocLsJodic17bDurs89baHJGcu+W8/lb+/2AXuuAZztstnb9bibDp5dAXeVbxEr3dyJZpzrqULQv62PfywtO1NmJJNpfmOJjob2w3h6jxs84SS8i+aYksd6QJr28GJMHgvxg1esTcf7VenR/hZ6tW/lXlBob/V4asGuq9PcpHgfRSc18PKqko2zPi8f/Rpbc4cX1df4ouO+2TsHlp/HfHWOR6fDVc/qK+U3mKCTq3PcZr7s6tB2w4KyIztvMTuPd+60o0fPbl5Duwvv4rw679yq8Xl4f+4TXb0DtJPNEuIS+hpl5+31FXzXzayYMC7Y2xtH8RG3vV3CYwqPCkuk2RmPs2zdw6sxHI8O3+w6PXin8bF36HbRVJWdKOtsT9O1ejhu8L0g287OPEaGo/F4f8S0i+mg6mwxFh/Pc3R7F57nOkCB7QeG01n++dPBCjSV/Vx2Ilm9kxt169kahOH/fvxhkxQq+PPvkmq/1qaPOsbxnb6ufQuXolihMVqG+dTtD1AaG41xTo411wWLsfy+6q2XfObkxDinT3aKBiG3r3rryzfNBY2x/JCdwg+R0NnVdqsjLLru8Rzi+Na+yU7xCthu6XPbe4Na+7ZXdH1eyc5by064ei2fLGuu9x6+sVRcZad4dsLyzZar3LtJqn3e6yOchU0iO28tO62/J/6HsJdcr5cbx7u3oeyUuXqtNldDlS2Wmn4nQqsvkh4T2SmRnY6mxoTNsHs9/X43FSSWcXzZqZSdVmcw7bLT83dd7x77kcwfk51K2Wm1r3j3z/b7HSK7eVSxFCHtZOfbuph0cVH/6nQ6yi78FW81O8/vCux1L9v3e2Dx7UREs4dtK9l5auxetL/Z0wucNuO6ntaVpuV2tRRgtPrWwXc/fuh5dgbD6fAhjWUJQivZee4gueDiP28lUNvASqXshA0NWm60D0fjQbYaEJU2srN76V/lOZShe7KuZmKl7OjwouXshP02KzZ2c1OY62poVMrO7n/EduK0nZ1q4UmysGizy+yE8f2+v62dtrIThuMrhSe/6qy2jTaqZCeM7/e8s5jWsrO3WW3p2y6/2rm+o6yQnTAVtG+bO9BZdnJ9u+XDk2vr1NnOqJCd0FPQ+4EWWsvOXq2tXGPhaTis7hpblezkNg31Bhhay06+yfJYbE+KVnnyr5iu9+VRpbOz7Phl1/Q0O3tdZY8337xYwb33iul6W+gls9NMowvZKdtseXz0zM7fscl8f2v1Wju3SmVn/0g8dmg1O4fhGdzNX79nh7PZ++aiUyI7yWRy0+CBIDulwzO4W5yeoTWaHb7Oo+Y7NmTn9rXGV5KMDl9o1fNFNHSQnf02w1PtZ7lKj5b00xefnNUbnQIvSDzBbGbaz85guLp58bVtmmb5l+CMRqPJy5fe1P969qrZER26yM7BIGkuGtngIRsMR0ffFfWtdjep/YatmB3RoaPsHPY6F9PEoVXLTjRLFokpOy2NlQ/nX0r+xP20iYWCVbJTdFiKfthtttjafnHjxccI7tewQ2thtzMPHY60QNqc3jidF624bReLpu7X7GOpj29X87W7hb061NNMs82k1R0UiqWnweQcGW56xSZd2SyAl2aTWjdvKlpzm/58rp2zWDV6UMP56OZceB8LlPU6yzxxiOuJN5l8Oh2c5coNC6fjMx4fKfvvszQVHDjf8BiOH/97+nM6yB5SpwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDL/B9n0iy4KZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8L0NvbG9yU3BhY2UvRGV2aWNlUkdCL1NNYXNrIDQgMCBSL1R5cGUvWE9iamVjdC9TdWJ0eXBlL0ltYWdlL1dpZHRoIDgyOC9IZWlnaHQgMjUzL0JpdHNQZXJDb21wb25lbnQKOC9EZWNvZGVQYXJtczw8L0JpdHNQZXJDb21wb25lbnQgOC9Db2xvcnMgMy9Db2x1bW5zIDgyOC9QcmVkaWN0b3IgMTU+Pi9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoCjE4NDg+PgpzdHJlYW0KeNrt3Gtu2zoQgNG48JK6/xVkT6qBAEZao7FEkeLM8Bz0133gOpRIfqJyfdu27QMAgNh+GQIAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQBAtAEAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgAg2gAAEG0AAIg2AADRBgCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAABEGwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AADRBgCAaAMAQLQBABRzNwSF3W6/f/4Htu1zzR88rKpXBNPHzW8Zp8P9sG2bUVh5wa034fMWmyUYc8cUsJ7zAydtqy+1j3+30jzPXmzAcxYvniANq5mhK8/vtKWf1TLFSg0lbzxz4eTWYADrcdJmhTUmQOhJ7dzIAPLFSVvWRyjjAHgew64h2jDxUvI0CboNO4how2RDeoJuM4yINubNsWKJoHjAYmg1cwog2lBsum34JxedwDWrmW5LmQS+XHeFXJMC4y6EsWWRBWfQrd6w0Jl0HTcIg5mLr/yoOSHNQyCF52Ll4Kd5kff96qKNlMVm7gGpK2TP6qcz+oav8UzE77QVKTa/DgVU6g+aN4KGMXTMKdq4qNjkGqDbODmGuk20MXbOyDXAakmvDcKoijY8jAJY33Kkm24TbfSfKlY0AEZsGbpNtNFtknglCugMdJtoI0GxGS4AdLBow3wDoPI+snMrcdgm2mifGIoNgIDbE6LNlFBsAAxhTxFtmF0AlNpZHLaJNkwGAJwIINpMKgDotMU4XxBt7JoGig0AEG0A5H6y5TyHbaKNDhPAMRsAQboN0YYpBEACDttEGwC0JIIn276Mp2jD8woAINo88QB4suWqrcd1EW0AcKwMPNmyrLshyPWsA1ByaXKQA285aQv3EImdDFa7mfevjSadBU20ARYyuHoKPFrt64/JmIJzh+m8HhUH7Lo0/6xWLhZVl6DmW92ODqINJDWEvtWvyTVzELweBcBTE8ZZtAGAkgDRlotf+ACsbBZPEG0AVE5D6QaiLQrn/4C16226GXBEGwAkoNsQbQDQ6OIXBbqNZfmeNmjZKrzOZoX7fP+t/voF1KM/pDmIaAN2PdnbM3Crv3Zbl/+iboP/8XoUGjcV72hwq5/3CK/nH5cARFvu5RJXDRa5mY/WmwmIaAOAmXnk1A1E2/yHSIMA0HHBdNiGaAMAD7og2gBAt8Xj5FK0AcCobtMZiDY84gAAog0ASMXbatHmjgfAyjmftz2iDXMGABBtAMB4zjtFGwCc5R0Fog0PKwBAFHdDIOmgr9djj6Q3dpkfBOxNNThpc/fD2ND5yPn2qswPYlHFMIo2Os+Nx18xYShZbBlzR5xhb7I3BeT1qGca4ECxPf6uyYu9iSmctAEhYsiHBBBtgCRSbG4bEG0AJTZgZQCINoDoebT/I/mNH3cLiDYgvf1BE2onVmyL3HUg2gASd5uDnMhcHfjOV34Ak7fkWSclR4PAiY5ig7mctAGdHY2bKXuzYgueazsvkOvCUpy0AUO67VAVXXnk1tCIyiBsTINoA7i62y5It7YgUGxhW82lQbQBTOu2QenWfH4jC86P4bi7y0VBtAFM7rbviXBmbz7ZGbIAEG2AbmsMr7ch1etASLEFv6kMAqINYNQW2yWnrnlJpwkUGwTkKz8Ae+1fH1ITuItAtAF23E8fDz0NbbweBSaEkf8VERcIjnLSBjaSOUMXZ/Rcx8iD4IANnpy0AZNDYeKpmxoQkZDIbds2owDvp8pLWNhURo+wJih/FVwXEG2AaNAEQDVejwKBPKOqb71pNUC0AYytt7aGU2mAaAOY33AAC/KVHwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AABEGwCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAAAQbQAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAACiDQBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAADRBgAg2gAAEG0AAKINAIBI/gCkqoRBCmVuZHN0cmVhbQplbmRvYmoKOCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDMwMD4+CnN0cmVhbQp42nWRTU7DQAyF95zCF4hre8YzY6nKAvEj2FVkh1gkbcKGCnXF9fFMiigClFgjx/H33kvgBAzkF0MWvwn2R+/uvV7/PU+AZinAh3edYUwKR4ipfDVv8AS7P7bYCrpEsKaYqDYsIMlQfDlnTJqqgc3DkeDm3SHXA2zuGCRiLplhWCCoorBBxxxQRWA4PG+JVImm2YuJciQSJq54s15kS8xz/zI8NhhnB2issIRkGTrJWEzPpNF6bQvEOvVM63IXfLQE4pHXXgr7ZN63ElkuzkOT6mLEGIIbjYyW7Ce+ehsPxGFepdyn2zB/ociaYuIq4vIUfVbFUiSmxbPSdxZHq0rNUiIG/0SdKKFGPsulRDxpi7LS3B7xIm51vHwyT+cJN/bt8Ov/7a4+AYjzeyEKZW5kc3RyZWFtCmVuZG9iagoxMiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDM0Pj4Kc3RyZWFtCnjaUyhUMFQwAEJDBXMjIDJQSM4F8tyBOJ0gHcgFAIfqDEcKZW5kc3RyZWFtCmVuZG9iagoyOCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDc2OT4+CnN0cmVhbQp42u2ZO2/bMBDH934KfgGx9+DrAENDgTZAt7Teig6OZXdphnTp1+9Rb9E2HCTO0giORYoJeHfU/fg/KubJoAH9oImkP2D2j3p3p99fJ+2nrfn4BQ06yy6Q2R4NC1kSb6oYbQQx2+bHBoAQIBFADAAPBwDGqf+A9c/tV/N5a8ASJL1ydHp1KZhvd2cG/4x2xUqgkM2CqTCKZUqdRTzs6wqRQzae6irpEB4Ad6gtAIoAOtY26FjT9TVWDGF0ZhniZEoDtenE3OE2QagLlpwfZm3qSoLb5EUCbFwtmy6EXVP7PqLg6opi/oVITdiPSgJ88H2MOk7jX/dtG7cuUTfjs4ImptLBI7wwbJ7NrdkjzunUyJbGyIHo2D9Gn70El+rURYkaDRx5imZ/6J5efqo+nQ1mblCidZEXBtVYXTmRvucB1t776l1LmkyAZ1ym6Sz/h53xBhyQt+hDSUKmlZJiD7tQu56AvJdpxg+3HGuCcau7DgLYkFJh8eJSrXisUFyEYpGzb4MFR4uIJRYHxYI5K4IWE8iHSfNaLYxAzrU63wKSFSLrfdOqJvVymrWDQ13xplNFlxna68wDV5O0Xl0SdOpvKP1dAXoPECwy9NUQlKWhFwskU8FZSdSCCPa+3etziTtoQFvVXcjVsqrj1vPF3Ee6ZVUXwUpyo9vzui6EvrRt9arpSlYJV1dcp2T2xdwrYmvvdkAnljJ3Z1jcUNUSWWEp8WhGVSMcTqY6HFq846YnZXYUKg6xnbjBTnJp2OLFoT8Zzk+DoasgnyNrPukmx4XDK3P/W8Yv0vHVGV9IGIOzycch2dXDKDlNQSs0OHbJmxNba7Cr0qX5GMGfzLm/sXwxBptwfC1xnMsXQ8GnQjieyi7EMLeR2AqUNlak1t4LANYCzhOd5Ov+jWSLSfELscSifUchuaprmklm2kMXXn3JehaNuZ0VjbX3GjSWOXsejb59MpYlefM3y1YI3kZ25lF1Mk23v813c3/uUOVtcKqlIUab0vAfAselrfsP/wDv7Jy1CmVuZHN0cmVhbQplbmRvYmoKMzEgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMTA+PgpzdHJlYW0KeNpTKFQwVDAAQkMFcyMgMlBIzgXy3IE4HSddqKBnbGlhqlAO5OmamZnqmRubKOQqmJhZILg5CsEKgQpOIQr6boYKlnqWZkZmCiFpYA3m5noWFhYKISnRNgaGJsYgbBcb4qXgGgK3IZALAFfEH9UKZW5kc3RyZWFtCmVuZG9iagozNCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDI1Mj4+CnN0cmVhbQp42mVQuW7DMAzd+xX8ASu8dAGBhqIH2i2ot6KDndhZahSZ+vul5dhpUUgE+UhR5HtwAQK0QxDZLsJxMvRsdt78fQu7J4LscuAA7QjivVNk4OQ0C7Sn9z2i94j9YEaIURGZkOxDyrkw7ZFoQOauNByzve5y0SVJvi+ENS6NWGkUpI4WzGmuDMdqzOMvfyof7Ss8tnABJzl5+LZlWV3ECBNoSCv4hDc4bGSMMGXHIqqVuASnwgYoqpMk0CyZWYjdy4Tw8PWn+zarCcG7KHqdtsFl3j/R5oYYXUrpKpgJhIlNrLAIJ3SLe6rsNNhOcV60thj5lfS60OHuByDgY20KZW5kc3RyZWFtCmVuZG9iagozNyAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDIxNz4+CnN0cmVhbQp42m1Qy04DMQy88xX+gQ1j5+FEqnJAKkjcKnJDHHbbXS700BO/X7dhSyVQYtnjiaPx0ImYYIdJxS5ofzT0YvF5y0+NHp+ZiitJErXFmpJdKJ7a4X0DxAhMswUDGgBhsH3FpVThDZhniIx1EC32eiw19CbHqTKudR28UYsHj9yx5Asz768hstzlQ/1or7RtdCLnS470fVEUnELpSCHlFXzRG+3+rHM/NaQUnfrwM3eDffKfxYek6nLOffVVS+Dogqjx3RFzAFnMjdSd8fxbT7zKXwXtHs4Fylb4CmVuZHN0cmVhbQplbmRvYmoKNDAgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAzMDM+PgpzdHJlYW0KeNp1UctOAzEMvPMV/oENfiROLFV7QAIkbhV7Qxxa2HKhh574fZxstrQgdhMlk8QzYxtOQID+E2T2gfB2dPTo8+PPeoJgpgJfjgYLURMcIWpZwSc8wxbuJrh9ILBgygrTASJLiJJh4ByKJZjeXzaITIgJ/YuIO0Xcz4jiZzsbX6enRkExSFSuHL41jk4hwYg6RWHErDWshdxP1w6VA2teLXZ05fFCQHIKpAoDoQZdPZbF054Wvztzz+nHb90vJrpnuUh7OFOmHHKJndPjSHzSPHpBpKUxkrWbkbGn5aOuzNZmU6qK1UmONZKXGpL3jMxGps3K6Tdk7vAgfoJIqYxVpkLJTcIfOu1hrdpFf8VK6tXTFLLEc/k6/K/HXt76KnuLS1lSpXn+rbC9+Qa7l4deCmVuZHN0cmVhbQplbmRvYmoKNDMgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNDY+PgpzdHJlYW0KeNptULtuwzAM3PsV/AGpJCVREhBoKJAW6BbUW9HBieUuzZCpvx/Kso0ALSSCzyN4BzcgQH0EkfUjXK6aval97/5lgOdXgmyzsMAwa5GT9dnBMH0eEENAPFc1QowekQlJV1HOhemARBWZx2I4Zp0ec/G9SOFcCJe4GKet2SGN1HNOrVMvizHPD34qX8M7HAe4gXU5BfhtF3kbMcIVvKQt+YEPOP2h84gyIsFG51fcnnbkP8SNxGhTSp061Xm5xYVsRfXAVZGmgKudUBYlNZWwclZRuhArn2Ik+AZJxaR1ZtEA2yyS31f0uAkrsimwcTo93QHmwmX1CmVuZHN0cmVhbQplbmRvYmoKNDYgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA1MTI+PgpzdHJlYW0KeNq1VD1v2zAQ3fsr+AfM3vHIIwkEHAq0Abql1VZ0sCU5SzOkS/5+HinKceS0yODYps6Pku7jveOZR8OG8GUTHX5kxgegW6z7C/tobM4q5glol63XYB6M17SCP+anuTNfBvP5G5tsszo1w9F4J9ZLNDsXbcrBDNOvGyLHRIHw8UR7JTrMRIK9fS6/h+/NBXsrXl31wWwpC1yIzczdxWEuOyb8mebiYZJrr34dXmeqzjqNa6odvcr1LJAQ2ZTYwLFaXQNx4Rpg9sWFhl/yjb6gsHxTM+8VJKIRpYXwshd9t71SeOypnki2DLoIyQmuomx+3L6x+ff+jaRRJMflfkuY54mcO8KOF2GuEA4iaIibmORTAQucc2EHeBRi9cQ8E49Y6C3cIw5pm1ILIGcNg3IcZFgdQ1bOi9yOGkb3UNsH866WO7bVS17sJFdm2Em2kS4Ynj6EYcVzfhMTx6S1eWUWrVSZXKHERk0je8/vIljhWfKqXV7eVV1sFZG773BYaK8HtuL9dNqvh68Ji/j/kWI+XFkKoQy4VWL+ECWCzVWJ85D1BLNgeWlUuVo4DoPz6PesCz2110EVT+t8gDCdLC07qXgqO18ZHDHHViWrO25KvkdFkWhD6mkh/PYdzEHJKfQ5qAGS+9Mg7PBfU7sOSnF4LmJsp9TZPtI2xt2nZ7xFXsIKZW5kc3RyZWFtCmVuZG9iago0OSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDI2MT4+CnN0cmVhbQp42m2QPW7DMAyF956CF5BKUr8EAg0F0gLdgnorOtix3aUZMvX6oSzbMNBCJmiSepLeB3cgQF0EifVDuN60etP43vNLB8+vBGIlcoRu1iZn68VBN36eEENAHCYNQkwekQlJjyKRwnRCogmZ+2I4ie7upfjWpDAUwuW/GKej2SH11GrOdTJdl2CeD3ksX907nDu4g3WSA/zWF3mbMMENfMxb8QMfcPlj56gyMQabnF91e9mU/xg3MSWbc27WaablLQ7FZqfjBqQCcFPzI1E9jSWslpVJ46A2qp1iYlAclR2NvtRBJXBQRL8pDjxJMtIQkLxrfd53r7lda6iduBHbGFyeHjDBcU0KZW5kc3RyZWFtCmVuZG9iago1MiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDE2OTY+PgpzdHJlYW0KeNq1WcnOGzcMvvcp5gWsal8Aw4cCbYDe0v63ogf79ziX5pBe+volKVHLzHj5EzuJY49GFNePpKTp26QmCX/VFDT8k9P7V3j6BJ8vq+9vk0jJm+k/eNolYb2bvk7WR374Z/pz+jz98jb9/Juakkhe++ntMllthDVh2ukgYnLT2/mvvZRaSekk/LFSHr2Up1lKA2PHdPj77XdaQllhrNe4xk4BuRFJqUKO05H8mDKZUUT269sopddC+8BilqdBzo6J1VqoAPOU9MIXRu/ukJCfQlEPDn7a1LOrRhIK1JXAwMD/xqvpj08bg/9+2WAMgqqQ3xNTNc9S6wt8v6/YPIEd+sP5BU/UUKlZquNZqpOTKvlX8AZVtbTCRbNU9fwSVZ1I2i54YuwpiHXlPfCFjwmHuC9ap4PSMOVisiWs4akHiF+MBAhQu8+mMj5/A5HWZQzXhFiB38/TR4nkXDWfCUKqVaScnx8xja2OIhm94F3N2NT/YVC0rIGaekOTMjdIEpUTclXhsFO+uA0tDu6SwWfXebslDjExCyYxQIiwRvGwi8WRGBi+OPio0Ptmn2PCzLR4GfEjyzKKEhp/lYooks8fd8pxhilmHXfg12NdR+V18M37zFGJb3C+v86PZqMm8jJS4NwazylRTJMQOYaZuc6L0ht56QySVffZHY25LWq4E2bPIgcuAsRZ9/SgpTYkRwEwEtSeLYF5mYxT0KgkDAAefjxJD9AzUCCs8tegd34F9IwUKcYF7w3ogQyJPhDEUp3tGJgcXjaW3zP5RkmkDWS7gR4jAee9D8GBuc9ld+KXCcXRKvvtRu58al4wNgoP9Zwx+7C66b62rmmr9Vw/tTpi3Fpc5/1c2TyYaUwwwmj3vWIvEYSMXcwoqIWnzmJ8fNhVL4CNldD46asVa34RbKJesB5Qoxaoga6umXEeLQQ+0LL0rMViPE4IohQWnhvk1lghAxemLenUh6QbC+j97qWgpIOAc+09RWdoNMjzpBrvY0PSUT0CDuuiCK3UY9bhOlHdkCvssDgiN9ci1AA1Kv69Wk647G1r0RfaThe77/sA/UC9TX4Is3utYlm1JpWZ6t4LoJigpeIctIbi5SVQNEJau+B9E4sQabTBw01XsK9vNJ2CDWwIRbIF91Ypbkt8Exv+2CLPRVw/YxMrQMqhQRXBmjFESl97o5RugclZK5Rxq43dYWecWoRrG2mylNGht8vzVGgyqusywmzZtXaZltvcbAPCFOKJBaCBoJkWm7wmH/b43N81aVZE3EFz0ZSZEjiPWYnnj4bQD6SHwngzPSBcdy6FfDyxsHAr1STD2fKLXJavu2a5v8ijxbQYDHh6QGgrqB6SkU9ry0OykRs+p1ENlFktxdRsgn5DlBsNOSRCrEFjnNPJSdTZmQiRLlwqdAAKyYxQ0OZSNh4owGKLITdVhNatq4eOt4X1PVv5Gv2jgZ1ntz3L5mrfkw6S3i/cQZzK2hxpm/7uNoU52lvHaGwHJW18VyQxKMpU3k5Wzxo3oisPPI4uXqCzC/G+W3xp1g10EWyhPz4ou+9qvSmMA9rQNLzk3XXZ5lS5kDN5L3NbSvkc75Hla9RVvTgRM+/RxNrO4yFEAUQJf3hvr4QANUyxdPC2wMdEv8zifukYGhlqz8287nu1iJZkPqkWf3WNcoLQpAn7du6GbrGcCL25r3vjWHcq9sIj12oLiYuhbU2N+EJSCww9PYAKWqzmx2ZRm5M0zacSsW3jHK3lyIfmKj4nKSHOiy2U2XA42ao7iEwxm37VPiCYXRha4+wQg6cpLi5ikAY+AHNaegAQrXAX5i7dgzksI2d7sNxGnByzY/EoGzuuD8QisACI/bFVY+pVKXRpVQoLZkmGvDbPe6xKMH3Yd6WU5IJgt4NCsROp28yX4ierSWgHx9uBrWDocxY4znIBDG0vh2jRyXeAyJ7D0ZUfaeThooir5jwAqTB1W7d89kD7U75cyPkAZLGY8fD+pwIzc125qEq3clGVcrM/SbHvT67oiFEIbuGARPUWVwPFaAzfTV9T0/eU5qewYwty+PZ+5wPIPpFwMiFm/aFrWDVQcbVhjR/xdViBkOhrk4FPD9eEbvajkcNU3U6f19CSszBpVyPN4Aza14Vy2wh+wfyJFQg5U1eBN5Eh30SCb9h2OAr9xg4F6i8pM1vMUdplR+NVYSFCNkjoI10Vlrn9lScysuXu8rQ6Ifk2CZOiK3eY3olgbL3ELI/Xblu9FsYomBeCiLGckqqLXvL4/NP/QVyeSAplbmRzdHJlYW0KZW5kb2JqCjU1IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTI5MD4+CnN0cmVhbQp42u1ZS4/kNBC+8yvyBzq4yo/YUisHJFiJ28LcEIfuTpoLe1gu/H3q4XIe0zs0u4htNKOZKIlTrudXn91J97GDztEfdAPSv+suH+juHR2/tfN3T923P0BX+pIwdU9XGsTch+K7p+mXo3MxOnee6QDnhuAcggNSBaWMCEcHMDvE03jAoZD0qYxBByGeR3ByPR48Pbp6ByfQe8z8ZL7IgXhdnafx16cfu++fuo9d70uO3Z/sUegHN3QfupCy3fze/dy934bhN2Ec+MbCOM8jsIMZyRvnjxoUxaYBAo/Go1wBReDmMKLeS8g0j8JPzoWsM0LhGeGoT06p6osmafpMD49eotlmTR70wNxsb3wMLZ000VSGleO+Ob128Fyv08kkwloi6OGCSjfj4Cj5gUqUkkMftcanSarJl/yYzlyjBgESlYry9VJtrWNJMlbNkzmAwWEIUl2qDUBfYtTiQAqLbSxy7HG3HhfDNCxzSK3ATZyZRF7OArfJ0NimU0ZjBShpEKnmOmk8R75vs6PhF/3RUst36zK4MIai1atynFxOfzqZbIw13aDXhH+pvRRsbhpB7kQbaY2uWmFJQahITRVnWwtogEDFTcUWmDdjqSi41Kl7A4IEcR+dTjovAL1RtIZzHPwOlDpiGJ/mJlMVSsRm21ITigggXowAXA/Uyq5HamLX+wTdT+9uDP5xk8MOKfV+SLdJrKEh5DEflcvwuAL11EAiUBuWGVbBUxqDq8gmwDQQsQoDFsFQIFrVSoqHqtcnluGqVMyNlCE2bMG/xGvQOx9qaKw0/53SAwLUHhe5WeRk7LJykvJQJfnOc3GB88LNXMpaTq85wCmwlBF8TUV5MRNmRFvejLCMn+v6ICM+LcvMp0tDFGQTKL7VMsNP7cliGLUPNjEIj7glgm1sWGNTexat8FCQ3MhTZg+aQ+RH4A7GuddNiJr/xSdhp8sSEfvERy2eESpbvUWbrE5c5O66L1ssLMkGrWrlQYl4Fla1Zj29WHNhCT0vDVEdseyzpGWXrftBcHECSdIO5/+42TUTWFuClPch156AebbNhJ6v7pm5f8Gshz463Nne7I9wt/gQ77ZsxCz1ZRqVQjKerBrPaeDLuBCS7wdvZLjzonzSidWqmRZ24/LywSpkzgLUnWqaO7eDi8IFgfnMxz08BznTFjC0HZzyg4CQV7qUXwYbSTDebIPA8E4V8qv5k9GhEqXMYXLU5xjmT2+BWdsstpQOlu0GMwOGqxkZbtfYHHQLT6i88YQ+N0aq9bJdt3SzT7ygXOalN32bpzs4I1Vl9/8gKHRSlpuMxcRm2LEqVdJYsz+PiJO6uo66PGxoMqXtytJYdAy2lcaKWPFZaW+XypXtKTRCXLPTF7Udeuwzc8XDtN3lnrbDOBCxlbe2+9+3XfrMtls7ldLGTmhZeJAmI0N0mx+oye7aw3tMfcL41mSvdm1b/3CzrfjqJ019tSTvRL5abw30SzP7B+qt+a7eKrEfArz11qvtrfVLQsJZqCqspPwT9Gv1VAgkWsoD9dT1np4KKdBednjrqVfbU7c/7UR9g7V+RyZv4R9ha0g/YnoP8XFa7fl7qFutFr3vy+DfWu3Vthrj6aUPCVnezltj+c9prIq/9UfWQ0q0b/KhfmZtt/qh9eY3lmHoc66/vYDQw9p9RtZJz5cXoga1knYvcup34/rGdjykWL93ClZzZRXKFxTlm53/77/5CykT58kKZW5kc3RyZWFtCmVuZG9iago1OCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDExNTQ+PgpzdHJlYW0KeNrdmcuu3DYMhvd9Cr3AqCR1s4CBFwXaAN2lnV3RxVy7aRbppq9fibrY45EvwRy0RpE4x5Z1+UnxC3lk8VWggPAHhaPwF8T1S3j6FK4/6s8fTuL7n1B46S1ZcXoIZYzUQII6qb0Sp9tvRwBjAC73cCGA0wCEgGFC9L4nPALiHYjO/YGcD73PvtepEc2lR+D7/qDCq4cCPGN6pi6+uV/5InqMft76308/ix9P4quQyndG/B3EkpYOnPgitO3Kw5/iV/F5MEpiMAIkWRX+VRbFL58ajX81zAZxiA/FYHsG1EGrtcGGro9WdcFeCOKCL9i04Ao834JgzxecbTI1+iWaGK84BY+pbphOHcbe64X3eN3ydSlOeNor9SxaaWkpiw47hOqeZj9jcLA1x+Ju1spXWVu50gNd6nG36Q33HsbfeNa0dbfcGp7yHen7fHzE2e68FveJ40tk2BBk+hEn0dlpr86tAiEtb21piX05hvjJXJ52q4RkMKz0uBa3sDFj6Zf8Jq44Hhu3doM+OI59dTHDvj/7OHtxEM2Lg+bYIO7Qm7y09zw6mkxacxSEnUaU3pi01XUjr8WhvTYcAT1SDsKk3tGrf0KrynPcggBvM8CPGnBvceS8BNftCKTrFpAQlHTKzqGkV1HSdgkl3UQpjkkoxbu3UdKLoZoEjlHiloqSXkVJN1Gq0ldR0ttQYllNlPQLSnVxCnHdFYCy53kH3DxEGF3I8Rh6/me8oO4ker0jYG6bgHEkOzOXe5RRK8AooxeASW+nwHArA8N37wKTRM4FZBY4Aia1FGDS0xIwaf4pMNy6CZhlfRWYJKQFzJMXB9G8eLNKm2UlJBo8Fk/wlPtINoROKtwJO4+tVRvp4FvbzbEDtMYO95hlJ42fshNbEzvx7m12AJfYSQLH7HBLZQdojR2e/4WdKv2CpVjqDwY4QgeYOJAfZZl1gLhbE6CxKwfly8XbHEO5ptt18UadlZrsjoDaVL2p4Gjo1Gwy8mtAWVgCit++ABVbczLyH5GM/BJQSeAYKG4ZkpFfTUa+BVSc5RuAsrAJKO7Wzkh+ClRVMCrhpgjlgJxWdnsp4eKhidG0I2o2lXCqCxZ6P0cNrqYhXExD2ExDWNMQfkQawqX/4bPAMTX4lIZwNQ1hMw3ht6Uh3FbH4Wwawpc0VBX8P+o4TVpas5NTgwduLeS09qH8NHME0SpBpJYIoiZBpApB9BEE0SJBSeCYIHoiiN8vEkRNgqj8EqS7XsWQBB1rKDh3RRZuYobXbzJDL8zUNZ0t59fsB7Yt2BAXbkHzL6PglXRO7QiFTSWYwU7q+qvYywEawNoBGiyVYHn89AANsBygAbyPQoiHxZjD6QEajEuw9LR4gMY9Xg7QqvQZFNZkHccuap6bsfKnc7O6ZggWnRNC/JpDx6HAiskheq/sY40d93Gk5IAaf+c5WGukUzp/6amP6VtPixjrnOy6nDxi6OavSLzSwcZTlEYY9C67K9idi5IhKlPXxhctZWvCf3JWyvdsl7YUqsEgLOl56Km1n7/7B9DmNiQKZW5kc3RyZWFtCmVuZG9iago2MSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDExMzA+PgpzdHJlYW0KeNrtWcmO5DYMvecr/AOlSCK1GCj4ECAZILdJ+hbkUIsrl8xhcsnvh6QWu6rlZTDdkwISdKvbshYues8k7e5zZzpNP6YLln51d/lEvQ/U/qj/f3jpvv/JdL3qvfXdy41u2qiwh+7l+ttRa+e0Po/UjNYBtbZGG9rK9P1gzVEbM2prT8PBhp5mn/oB003jzoPRcj0cgIZuoM3JpL6NPDJepFl7m/2/Dr+//Nz9+NJ97hT00XV/s0aogg7dpw59LJ0/u1+7j5M5ypD6WlkP9Be86X750Lj5V9PgA3eKwf6kDZKu3pMNcWCrItmrSTnyhZhGrjCnKyncS9Mnn0xlv7CJ3HgLWVPd8Lg1rR1rMyO3qzY3M3fC3SnBvdKAytusNJ2QgTHtfjLkYMNnk9wtukorsiHwDMtahTRj9GlEZk/rr7JrOrprXkO9PG5xXMYH7zaKLJnD6wsyPNLSWxESms6tCuok3vsyn+cKhmTcne9Oq0CSDOMZ7PhLcYsYk9eJ6hgHoPl0MTjGbixq6TW19LG4iOWf3XTck2tnzpt0FZltgjjW8zrYYzFWlpNfB2OzMqwag4IO3hjVO5dO/tEBxEPIwq9ILPWZobeKqK8iSuiVDvFJmELj43kPU4wGFcAvcSV5bI0rMmORK9Xjd1wJULjCV3L45yyDnp0HJ9jMgthNfEwCP9luEX5JlTkr5E5lhfRWWRFsixVVySVWyLJtVoj8Jivmbpp0FZnBl6AiTwexjWyY+ePbwtyAVxb6J8L5ZRfOvVaxDws4B/AbOAcIKzhPo484l7uCc7naj/O03RKgkrJznKf5Beept4bztMMjziclF3Celm3iPMlv4Ty7eYbzSSbBAvMznvMnWwJift5z7CwnVlES5no9GNwKCO/FCaudgiLlKTixK0uyoJU2S3kSYNjiBK5yAmOLE1g5weNfwAlc5URSZc4JEV85gZuckBmvOIFbnMB9nBBtmpzA8MiJ6pivyoiyaiu08O9Ni4AKg3kCWnD1dN6bEtm+JwvjUkpkcSslkhmLKVFa/5gSWSwpEV81y4crHTAep2yAnMgeEC/WR2YoVMoZgl3NmJKm84xJ7tSMSXqrGZPs/ypjqjbsS+ss7sqfZFozf5r7dNJ8K3/692sGQFAuhidiyK5kCnxUFnEpcDi3FTicXwscaf1j4OA1KXDw+JsxJElbjCsyehdXRPcaV5zfiisOW3GF131B8FtVcooyok0zysx9OmkuGliCecyvqxCbrMi4T8cURBhmv9KtWRH0bemDxirKAZ+EPpe9AQYhqOWSG+xWfIHVkhuaJTfUkhvsW8YXWC194VVFDncVOWy+p4JmRQ7wBq/YYF/VDovvsuCham8w5ylLeIxGRROfiDa7oo7TntLJ/3nzn+HNLDC9YwTKiJt/Uzl471QAzF9Vajd9V2lRyoegYsyUmocCiJb3pTkJtvk9RnrPIZWb1HMlA5BPRcwN1vDgOXfQF5c8GnPBRz40/bF6bmbDx+/+AUdMCNAKZW5kc3RyZWFtCmVuZG9iago2NCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDEzNDE+PgpzdHJlYW0KeNrtWsmO3DYQvecr+APNVHEVAaEPARIDuTnpW5BD97Q6l/jgXPL7Ka6iJGqZjAe2gYYtz4gia3lV7zWbFvvMkAH9QWYF/QX28onuPtD1V/n504X9+Asyx50Rhl0eTGrNFQgmOq6cZJf7Hz2A1gC3gS4EsApAICAZROfOAntAHECI6/kkrKPZV3dWcRD17YwQfj+fJD16SMArxnvR+SfDS7iEeFQ/7+c/L7+yny/sM+PSdZr9S8EKxS1Y9okp0+Wbv9nv7OOYFEdKArgwkv6VBtlvHxqD/zTSBnbyNzlhcwVUFKsxlEN39ll1lC9QcIRFSI2gwOudAnbhgquJqXpcfIr+8ibCmgLD3DStHcqFg78eCZQCwqRWchq0VNyIFDRVCOUQrV+RADa6z3CHWMOVfUvrZxgflY0zBhOfhNmYn/o1ZDWW7p5G6S7ZF2pY9sd9OKPqc48ECH3+AUPfM6LySs+FeuRobRPlEinEOIzJI35uaKawWt8mZcu9Sb7yjJeMT8gqWQk53NIT77Fe62t8ID7oa9BuemyAEWw9wpmCzs6tGcEyKiZJyXjHvgmo0IjcaR0rPc+TeCeT6bsiIyYx8lE66E3EsI6D7b4RZlCOw+0IMxAkt9KscUPDHjfCjFVuxPVzbvjRyA3/W5MbXjvzmuQLXdLQ0GfKbfVZjKrmQRgpPAh3mzwI9hc8KPHu8mA7vsKDEEiTBzV0Y9B7PGin1mLHe/EAVcfRqf9PhNsQm30S3HgBqECIyOWz7otAeiepyaLTl/z4rHQfDYtIsUPUsIJ3eu1jQ6o9asQZa9RI66v6xpG5aI3zRjzSaOiFhIZ4Cxq+c0IDnLRRcSOD0qzHeE0bG9+3ZXMDaYb0jZ99U3eO6wqZ0W7Yvsd5ZDd8OBKSAgq5Nu2HGHxc3ke2o5IALPw1OUGF6fqZ6dCMBB72mWkBx5sed3QyaNMkGfSgVDu/AJpfU1p31i3gWtUPZkrPYRbOOG5MyVcoFXtNyanbxK4wnubmLJLPjFgSgZOytu4BhGZqq4DESL3lXMcUS7aVoxxk7tUx2lS5VVDhlaAiHAe11RCvRVRYsXD45aSV5JEm6feT1vyNxVRilT6zdPlwfLWQCi25E3JNSKXdE9IwY1VI4/q6TWTXqnqZNxFSPxqEdCN31c69kk1tasoE/9OI7K5smpasyW4um41s7SHZXLW/LZtzf0/ZfMrmdyabFCqX5TvOe8gmoWPzzsuMJfEwEFYquSA+HTmrkIq7sn9eqKXFPbW0Ykst4/q6OxrY1/MmaunnRrXsAuX3Ux5F0uiuJogVi0BwTyQttkTM4lwk12zvieSKfbEnknNQnyL5FMnvTSQdcgX2/UTSrwutANOq2lLZA+Ko0HAoO+CFOMLeUa6EraPctL7uijB/UWQwLXGE6qC3TlUtUh1FURmsCQFmEYDeE8UwYyFafnQqig3b5ogogmraN3uiuAJmQwdb7NgWRfI5M46dfh1/sVON0kYzuaHCXRDFOP5WUYw+56Iopa56IHpaprYtisHyQhSjv6Oi+JVAfSWI+yf9X04UlRVcveVQf08UvUmfXz6qnufs7ctD20blLMfVg3zpdk8r3eZppVtsG13z4881t40un1Yey3eUR4uT/YJb7Bfc7p6xa54XusWecc32njyu29+WR/c8j3zuGb/6njEpSv0GwckYza1U6R2CchvfImjJpLGWd12SSf+fkOn9hPy9z7/TUB+vDREO2xfKouhbgtB4V0KasUqiqlLiu89LGeBWWYosBRRenpin/PGH/wDpZ5rUCmVuZHN0cmVhbQplbmRvYmoKNjggMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxNzAwPj4Kc3RyZWFtCnja1VnLrtw2DN33K/wD4+r9AAwvCrQBukt7d0UX8/B00yySTX4/JCVK8mtm7s1cIEHiTCzLInlIHlJy97mTnYA/svMK/oru/AnuPsD1X/n97aX79Q/ZxT465bqXKwyq0Juou5fLP4MQ1gpxmuCSQngjhJJCwlIyxlHJQUg5CaWO40H5CLOPcTRpUNrTKAX9fzxoeHTVQh5lulcBn0xnupS6Nr+X8d+XP7vfX7rPXa9jsN1X1Mj0XvjuU2dc4Jv/u7+7j9WcXoL6oldOw7/aye6vDxuDXzYNPuANG+yOQhrQ1TmwIYxoVQB7BSgHWJBpAIU8XkDhSBfgk0y9GMDFZUzqhajYNSo4dL6MKmOD8mBRWkzhFK8Yipmv9Fx1bXqnsurgJ6mnpP5RAuwhDAw6LU4XG6c9zoiojE8zJpee0GzJT/EdXJUcSSP2NIOomVcRyKPKTHtRcd9+ePuKYTEePL6EsSi129frmGPzZJv4FDwDsQAhSZhp3ivipd9eO6QRmgfrSjQG0FNiYGRvrk86oF5sIs5I+G3IQ5+DX6Xso7XJseSMMCyWJhwBQJkfALQI6cnWpNRyZYxEUJrkJdDwHXhdDxsRIjY9TsuUOCPvXDWP46xsrzImxZfRc7E5h2g8z2UrskxGjIyBGDDetzFA5q9N2wUkaSrY31UXXou1nHSa32qbPbcLqnglqPTCg6C2AeFyQLwWUeXVSiChygzzffQpe6HN2/nzkrXGZ+eJ6gxZkHjpERaU0vYuyqyCCpQunJvMPTGm7GHtOCgSOK1DlUevneF/JvmAPHMx+3MXvqxO8fyO3wQBnoqB1dAbsZleZn9jXCG/grhWLbuSxvSStJPFkiRXF70v08i5RjFTTASgSslexMpbS26iNMUuszA3+BzQ08T1P/1e5UrcE8Rq2UstF7K3W5ocmkeH4BbgwLWMYy0A3w3MPJS9640OWbe1fL2S32hbG42YORj9R5FzoUfJTirUJVNxyvHySJrBy72IbiPNlq0DrLvIE6NlkydZZh5FrZDU651z85yqK7SUd8dI5hR4TBUkaKwgwtQKVRWkhbMIFpqUZBblrFuyLL8F/smdBI9gulfFsR5wL4aJSqM5x95gHHiQypFxmMDalRhmdabRY4Lr2jYk5uAGDENmq9sQrvAXCURBXkMlryHSK4mxbHTEWA4hBfhy8MtGECnbR6MhkqTuhc2ETS7g9hSUpHjWli6CYm0EtwVNc2XSfHYr8y22kTiO76ELiINzZMG7tEZeU4EYCo+NUooQQDZurgF5t+eyub80ZJ0J6Rnb4PXdzNM6McYcNXRIUzS4gU0jzGmpcSklkPuY5E/a1TF4tdoIP+tiaebz+V8Z31uzy//qnfhfB7WQfZP/T1PxMtV1VduKp7I+eKT3MTQbuVZqaSvbTadsaCtS51tfeqxrUhF2+txTUuAnlistwTkxAHUn2m3sFNumVul2t4lqWbFSixcLy6ilETxkgKpEqqR5fsFtWchlD5/xkLpzFqIyuxP/a6to59beUVaYuidDGqDzDGMbe3MXxKlE2jieaIam9mFNI7OnmvrUP/GaSiHRXJuRBRC+2UNwTdmrPBXIQp+57iFFUcWpyX+Um5vLGbxEHis34KjikwVd2spbbsiN8p1oQGZuxPHC2s17VhQ029RPbZ9bVGSKo3cSR1Mop4qbUX82j2lj+ih2eUy/E485EReyobKMIfcQapjRv23oH4FgDhF5c97sisqzugmDnOJ9dAW09pr0o33b16VjEjVsBu1TeVN7aOltWCOgh90C2CJwx8rZMd4GWlvHozQGfTvSQEuqMh9qlaQujnnonC/aPki35+qRz11W3q4bOrBwaKx1S2t5ZpNlr3RtXmDFKOsN82vB1PFhMHnL3By6TalE+aHQyB0L5tvntfa0H5tpv7d/z2PP5x2DTaGUe7xj3nP/PJP9k/DOTel0RHWuCq+bKjqaei53QevV2/Ld4Q3c5dIhkGr0hCi32+b/PFRnguyVarrS12Qa56xz9YTsLjivIa589iLjbEs1J47VsaN29Qwnd6PPZQMrbe+5PKzYgL60nd6FEVwPhi/kYyzHbUYwPyQj4EkYjBVazxTw1Gy3BlBzoTklX0vcsdltJOsNLntKos74AIInXxN90bn5VVg9nOjWud4pexOSks/mh2ld3okB2g/eB+cgn7TJn7zLbfrovRVezvs+hMAEcC6f0nVQuC7MqacdYE+iz3mZTkbHQiDjwVncgp3t/BNkNX5pw8dfvgGPaCfxCmVuZHN0cmVhbQplbmRvYmoKNzEgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMjg1Pj4Kc3RyZWFtCnja1VnJjuM2EL3nK/gDZljcCRg6BEgGyG2SvgU52JacS+YwueT3U1VcRMlyb2N3xuhWqyUutb16pIriqwCh8AdE0PirxOkLPn3C6692/+lJ/PgLiCST1148nYVxTlqlhY7SJiOexj/2Sjmn1HHCC5QKVikNCnBCSGnQsFcAk9L6MOx0SNj7kAabX4I7DqD4/2FnsOlsFBwgP+tILdOJL63P3X0c/nz6Vfz8JL4KaVJ04l9UVlsZVBBfhPWxPvwtfhefL4xSEtAYJbU3+Nd4EL992nj5TzMfQCbnNNmvxI6cUSyHaaoqNRXxqurdUrAxUkezkK5sHOI+u1nvs8u9Rw+OgysOpkcIqFviC4fwM3i8W8PtrQ0jx1NAGHZAExwdRyjluShueVq+mZBnoHAdRlYCdA3hmNuKQr0Ebi+SWWLV8uguvPZWb80oxSgZLzXYS0eZpaPsFUcFT6qySXAq5phAlm9bOLVry8dbGcLvDn6wCHMe445zQnAcVJVVw9mLgelYLny29vkk1DluKwez28zSbV7JiHSQ3baMF+Uvec8vo1beWrP0p6UGve9J4O24OX8zJlap67A5PJe7411yF8WatBT/zuRFDGrVtR/G26YNaJAe0jaxN03ervtxwjBXxUcz7CzRCgacreowUtaB12AVLOZ48EXXccrgodQjIJmpQpPUMxW+K5tqnwZdNmyhICHzUkFG8O0RClHJUBNwG6LTnSCKflrJvxlG5/Y1S9HdH3jcYiGaCealhem2+NcqSOTTKxubLW3f7qO32XeF9Y+Z9XVZJFAxcPE1WaMNZniEmeJn2f7Ct4XDS3YE3V4AJVgeeprmJMpvob5Zq/e+FWSx/HQx2J5ukZTfhgVvJcTvGAunJRYOnkS3TcfG2rCJhxhltPpj8LCh4odj4jZEbbTBRT0+R9TnuxB1wE8ev5JPwEt3J2ruhyLy0lh3xZTajExswCXyZVT7+zK4sUm6mK5nbTPDqU0zHpPWTbBS2/CotF4++68G5t5cb5WXwT0YaG7C/xb3A1aFR+b//x083sgEDwaecQkeXD5bVF7HOBY3Ds7HjwHOSr3vAzS32Uk4XMmVt8/sJM7qTp980dmV/DvsJFaho/qWijitQuswWXgMufzWpQyHGwEDldNXWqSrSsyK1woaISD5vlrNFQLKMK5rKFUqAjzZ3GlRFXxh//SahHMBaSbU4q/GLIhFm8mXsBBqFQH/NOUMqhJMa6EnsgoVtSVNyUCOGlCnWt/oax556DJZSy5xS8us3K9PX0W4odpm5/16KsBskSW+RJNFuWpbrfQg8KDQW15MaDKNwt8T8LGKnFhIx2mdF5AV6n/2NLuzA0nqC0nYCyWYMxMHbk4JK8HnMTNJ0e6ZEEAVIM7QEuRY0o9QRV1H4rIEL/uLuvVl1VxqzT3IBRT2jiPZuTzvReTbNKU+nfYzAFoIaSgY3yrOZViPUZMr6mleGgrTtzzDV+4CkdlvlvShanmVzuVjmO3pT5JYdqP3an3FAiIm7cvMlIuKVJ+ONMzU6Bbla6WajegzPDX4loOt5Pms6nIS/CLVgaMzVD/a7MttxpgnG7cAkWfmFdFAPlrYVKuueNQwto/ijONnQrGxuPVHbDvvnQzGlkO29piP2bY42IcgY9z+Sh523vHHBMzLzJQDFIpm1w8HNg4TjW8ZUQ48CinOBGtdkoAMqqpCm/XUzz/8B5bibjMKZW5kc3RyZWFtCmVuZG9iago3NCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDExOTI+PgpzdHJlYW0KeNrlWcmO3DYQvecr+APNsLgLEHQwYBvwzUnfghzULckX+2Bf8vup4qZdHvfMAO1p2HKbi2p59Vgskew7AybwDzAn8a9g12/Y+ojPl/L77sz+/ACs4pWVlp0H7JSe60qxc/dPLYQxQlx6fEAIp4WQIABFQVU1EmoB0Asp2+YkXYWz26rRsRPMpQER/t+cFA4NSkALsS09jfTX8Eg5TH675t/zJ/b+zL4zripv2H9kkeZOOPaNaetz4yv7m30e3eGA5gsurcJ/lQX218eNzh+bDp+okR22rQCNtlqLPviGvPLor0DjEIvgGkIBbYcGV+EpmFiNuNip6wI61YCpCUPsEwmHIGycVARdIL6EwsOT7VAuzm2hIVldGiI4dRJHv+aS+nG80yiyL08RjXE7aXQKrkkIOYMxSajPaKHmKCnNrUwoSd+cfHKxt9HKEGnA+AuhC0hBRwDHBvtxhiHt+J7qi0mJSvn9QeV57T4iVZ0FEuUIg4vJEwMLo1aagPxLgCW5pAEgoNDIFJSE4EaAso6ovJjWZRdyT8Y/USevDwCXjXCbTMIFIeolOiE2Lsa+qjMKyRSJim9hamYOjaESWtHBJlKUSICBBuCVMTHS0mEsTIXCpb5GgQuqR+MaYkOncBaqUwOt5uYEStPSb2cTV9nA0roIXpDkFDwaCGozzvGVbtEbYZkKOiRfUqUTV2AqMeootDAzIyYcpQHlxhXY5rlxlpwEfWlqUZV8JcIkYKiZw54IHicLbOHqza0hjZP46C9mn5Cdcc40fjbGL6zOAn6wGJmAOcCYeiebDxHDZFxYA4EjIsdghmuhYcQipvGAPyRtuDsoJQ60XU3YZ15EszG3aD3OzkNMn1HILarIKQyozJtCoGP3c9VC+5yXGlUvqJaUF0MoNfg5QzbW8002LjINmbefaqbIDMt95Zf36Wi7TFsQCM0rD5nafS4aShEBA6xUvoBqZbj2aqEfo9Pk3CDrSaIZoxTjMObfBHJJ6AXkND7mY0yeJITS1Lh6qb4ye1koGAJ5N5uvlWeHYVYIgAIulRpR8AkFNUdB76DwEy9ndcsOLVd1Kf0iTXH+U0oZZCj31dqBGMYG6p1IUp0rww6CltcTL+zSizzzcOM4DFkSkPcKKtxwM17sJ6Fnj1ZHICXpuwWJU5OCZ08vWb3Wm2XnjDFhAmUtdCi8GAvPWZJ4Hiu9xy8GfaesjFUQ+T+B5QlMlaC4MPDAVN1E7u3RV2rDjblf+vaRFaQifgA8ib0OPQf50OxdA/f2yIvffdyBuTfyPvvEQzqu3EPS9xC6pOAtEdhU3LvfisC3VhTKa262qvfHJvVemfHGiK7BcaHs70V03EL1L9ceWgO3W98Dj87zNZp3WZC8zImRdpZD/tTfPjGSr3Ri5JRe6F+z8KknRutjuVc+MRo10OEf9sUwucKtFz1RMlg/4nqdXMGtNe74bDdy0DF2R9X6NH9Bf0kPtrV+lQrTYIUpKn/oeF5yVt9NLnqltT698z1ZG5dQvPUtzXjvu0Ui6xz33uelTrfLUYPykuTinPEIPN8oVXZ5gxOvslOqaE7W0I3kNR2x+5XzSx8+//E/lZn8aQplbmRzdHJlYW0KZW5kb2JqCjc3IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTAzNT4+CnN0cmVhbQp42u1Zy67bNhDd5yv4A2Jn+CZgaBEgDdBdWu+KLGxL7iZZJJv+fmf4kCX5kUS2bxT04l5ZlkhzZs4cHo4o8UWgAPpD4RX9gzh8pqv3dPwznN9uxW+/o4gyOuXE9ii0tdKAEipIE7XYdn9vAKwF2Pd0IIA3AAoBaUCMsVW4AcQelNq1jfKReu9ia/JNtPsWIX1vG01NRw24w3ytArf0h3QodRydu/bj9g/xbiu+CKljsOJfclYZ6cGLz8K4UC8+ib/Eh1NQEikIkMpp+tQOxZ/vL9z8eiFsEA1f1IDdLgWY/EWfY4mRvMsHg5AAQN826CiMvU3BxgpG6QfUT/tWQcHDOYq/OweUz2ST+0Pft3aTh+fDUTZUPxzY78tB18ZcHKq42zaG/Tl0gIbjgIR7QXZCAD1FQhvp1E0kONWUT3buBg7cS23GNEmRaZ8dYiIQGNyMqpKjOJsid3UA7Qa+FcPcT/fVSKUWQY1xAnUdgccsdyo3KZ88cI4MSt6OAz53ccl56vkTyXSLAcvpZGERnSJKH/CVT3fwCUnvVDArJRRLlvm5koUmyGj+9yRbuhAiymitqmAGLY32GcyUtbwqD6s0HvWZyQeY1pZSijP7YEIbSj7UpoKcQLEj1CjN3+L15flhz+YHFzB2SeYnFlJ7yWCyWD3Z27vTNaG+gihdiOdo6Sla5gpaPtEpxTRMPELPXgvxNLGXlDcvLQyKihltXEFnmpexIIyyU+6mnI9gM3crw+PWA+WcDGbtOV9VFaKoDLHg10eEx2i2Vk7Sg9ktzTZP0mwT9Mw+MzIu0uzZSnhq72rCqe0wqmGIJQMRbMjmuA9TUmNK6ZBou0/ML2M8VoW1VVLZWqHNvcKTV4PnizE6m3o/iMFkOu9cLioqOet3JmzHj/pQzphn5c591xOkdzJiZcPot5o3CDgO8mPYHUhrMVxbUWmN1pqVKSie96NSqApLP3a7tLeNtwnem/HVXnAc703kyiC31JqOeJMjmYxQUE+/5YjORk4tOY91DEIiCU0clXGJF0eKNLCCgwptE0qYudpLVCllSi4l2UDYnKrBDOgplEyGAUB/tZIiwU0p5cIvzeuiITeIeEdCU2z+G7E9QR+N0tR+VR87Xn+eoo9BahVm9p9Q0y7Rx5kCYX40MTYJGK1d1Vany0zbdY8VTWOodMX1ieYCYF5CVY03kiqPV1V9VdWVqKpVIL26qaqHJ1WdWseZ/ZWoKs993uWp5nlH4VlVpzVUZ/n1CegFDF5AH61H6TS+6uMvqI9unfo4fgHZOGel16a8ghwu80vIy6+BvAwhXJTHtnFWb07vUjna3qWp5otnt/eYZ69atRsIOkzFhOBph8TYIB1Y8qw4xLsCMA/5w5v/AOOosHkKZW5kc3RyZWFtCmVuZG9iago4MCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDk0MD4+CnN0cmVhbQp42u1XO4/bMAze+yv0B6KSkizJQOChQHtAt2uzFR2c2OnSG65L/35JSrLlPO+RbEWrc0xJfInfR1k9K1RA/1AFQ/9B7Z7o7YHGr+n5aaM+fkHV6tYbrzZ7EpqoXWvVZvixBmgagO1IAwGCAzAISKqwbTuDa0AcwZi+W5nQ0uq+7VwSYrPtEOR3t7I0tbeAPaZ3E3lm3MkwZl89h+7n5qv6vFHPSts2Nuove+R0gKCelPOxvPxW39XjUTigkcIAbbylv9aj+vZwQvhnChxRt01jUuQrTkOOHMexuDQ9K/duadgGCtUvrIOLHSVU0mzWKeXeUwaHrskJ5lcM5Fsrg7YA2tAZqOb7YZ4fyH9n09xunOV0ukkOdGgxmeM1tBfGUc6TrYsH7ij814ZdF9rKem3Q5YgP/cDZj8nXm2XlWtTNImpSNU6DoSBLyYuVY3d2w6yLJhgzyQ8QuWxgvQKBoSBExLzNBlku04SagwxL3uwybx50JEjnvJEaOyZXdwyuQHBjeyLFScLebBt2e4HekkBaxTnoq+AaOAquKGNJFSKn/ECZzcqOAq8tnQh/YeB8NP1wrlqK/uKi9YWx5CizM2k+FxDh+92FfUAkDU2HS0wy3olJjIlL8wya+DrQGKj5epb7XrbLXDlxUntTTkCD2mObfT9t8Qje2J4hvdKu6OBl5OBZLi2NRo3t1JO2Moxzh+3vJdhER6QWfOW/swUJpXjZC1uKu/KlzI9eoFCC6nHCzJD5OAsKaJClu6nTdshwGFzqwPN22NcQyhYO04uhLJ+RcxaHsvP4AA4xOLOewNBmuGfCrOH3vtoJUYd459LhcfuyMWC1s+EVZZP8+F8yN2JsQ9zZ2ouXv/1dKLvVjn4t7b+FszG191wy5QLDlXtY+W+5CQZXCitVRzg6yNu2AeOdxnjfu+HVlAkY3pmW5d2x96mcy+Wj/GaUDE46b3piIpHev4g8YtTRlQthtdfyRxkTXbOdv8jYLsKZixDhFq2lVEDk+2QNwnLbHWu3p0tdaCT7F+Mrq4hU6vuF8EeaSX7Qm4cUyUJDPoVMYSc0y0w65qJDLuNOPJsIRMpmT5FGIw04dquYw0w8I5XEpUE5SyTGBuJ65qGU0DmUVBxTAsNZDFN/kCPldiUskBnncp2+9UAltnAltlNsWn9+r7xvdLAuf4BPr+kT/BR6fQg6xljIlLrjHsWCjYb10pqpVrk7iOvtEq2phbQTGXcr31Cxwa5JUItXGejxwz8ffcQpCmVuZHN0cmVhbQplbmRvYmoKODUgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA1ODA+PgpzdHJlYW0KeNq1Vctu2zAQvPcr+ANmd7l8AoYOBdoAvaX1rejBtqRckkNy6e93lqJUR5aBPlLba4qkNLOzD9E8GzaEL5vk8CNzfsLsDvZwNT4bW0oU8wOzXbE+BvNkfMzz5NF8Nffmw8G8/8Sm2BJdNIfReCfWSzI7l2wuwRz6b3six0SB8PFEx0h0GogEa8fSfT98rhDsrfjoFCPYlBgIYgtzQ/C5KxiyIzqH5cGPh9d+RmddTLOjbfbK0wsaz1ASnNkxRRsbj3oIjoXoNMxES4AsQyoBWvAvkc2Xu43Fl4cNSrjIadqvdDyM5NyI8XxF8wZ0LuI+v+LUZDCSzzESH3uiUYiRC1zf9KGNlUEusg09iJOVUho28hL2EzygWQZAw0rpUBDSEnhitXnFF7jiiWnUGrnlwiY1pLJPjRr1pDhVjoeFE0K7lAlixRoxL0UjlvMUxvXiywaTkI0hrOgWaaCBaXGqapePs/olEBBWtzTP6lhyfxXnVw3VDx37/eQBjW8kFOUSiFdUVajmUq1oybDSkZNQbcn1H0r9ty5ysdgked1F/X/pomxDcStO6vvOyX4u7xqWJlk7a+3HVkZFOyf65cVTa+gUfnWOQgFak7uTKFN7+Zvt5X6nvaZVJG7eVx3upo4LcryjqrX31RLxK0SXpyZEC0wl2pyrkBLbbeq04/3cRB1Tu1ch6uNc95oDijRA8nCaxhFV6P00H1271vWrisMBISWHdkBEHC7ilxOiTW8dZiHbRGj9mNAReSm38xbP/bufr2yc1gplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2JqCjw8L1R5cGUvT2JqU3RtL04gMjAwL0ZpcnN0IDE3ODgvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAzNjM1Pj4Kc3RyZWFtCnja7VtrbxvHFf3eX7EfzQBZzvuRJmqTGG6NBqlhp0BawR8kmW7YyqYg0UXy73vO7JKcXd6h5ERA06KAiH3c2fs45947sw/lTnXadsl3Gn8WB6EzznU6d9anzqjORWx05zM2posQGIy3DsO67H1ncJ2K2IZO66w6E6FH687kTjtrOvxprzzUYRtSZxNseNs53ekIazQWU4adTidvOg8fMpRiiM4pdR4OqUAH4AbMBgM/VOwCTJqkuhDhEAYHyL1JXYQ8KN0Vl6Lr6H6E8gSXEuJJFtuMEFxnFZxOobMa12ccGwahbGctpFrDeU+3EL6NCEEDAJsABALsbI7w0AEgg9PaIQKHMDRQc9EjODjsFQLU8NBrhbBiQFTOME6EpaAHRn3CaZ19FwAXQmWE1jJWhIirqD1EAGdgNCoCD0ijIR8YF22Chwg+OrIXFXZ8JLTYIa3AA+7AVbgbfUEdoHhcoWPETuZgwBYYRYSeQAYAbAw4rQFbjAoeJuiJMKgBYIwgRAOjSOY0IIxJAzG4EhNN4GxMgQFCT8oMEHqyYWJBTwbPGhzEnMg2SFAFDbCkLAcn7AQOztjBFQZAJA32jDLYccxMUEhEDYhJhA1Zgh2kHbMjGYBgoDQZgGAU9FhNVJkA8NAgQ5NlzoDlZOkhAkiOuY2xDgTC9eRgAJ4nENnBDeQnDKJSkvfUAYOeLmgYDHRBw2AAPQZlkkIge9ASEmsHapjvhiYist4AjRSZrsj2lArV0AOHmdjYQeZrJmhiMlKU4aumKFtmJUzkMFRtykBTw3BWsKNBU1bISNZLVpEV6REHU9gyINYk6jDrwOrP2IGH2jFGtgGkKKhSrF/sgEZkZzawAJiyhQEQlS30gye4ggPsOvKAXcccQTC5pCFxK2kI3nJJQxjITEOq84H1xj6CQqB7uWQhiMwlC0FkLlkIInPJQhCJumNxwgJyFjt0B1xpYJsTCNBgIydHRnEVoMYObAEZNijssE5AS84oVY02kXNiftOM0swjzT1HFumVimSGtlXpgZlRMQ+oR2lPchggK0STGMUs0+xryrDbuRI+Q6VTyjBWthVlS+OgXctoS8SW4bJ9KMd4WSjKMWBDWB0j9mWPIZuCGmP2ZY/6Pa15Rs38UYFhFyYCOzMJV4FjWMEqoJg1daoIHHWg5oiEKGBEuswqVDFTSMUJCOrCWmIIoXDDHKaLKjOJbaGpzBMkY+hYmUSxvzGtgB6qh1Ah5ziRkJkA0AyhQg+zwxyE5gPNtINGyT0WBHuvYW6b4drEIsEYQ9BQ7I7TAIsCrcUQUos2jz3HamAv8KUKkKqff778/s+X/1hdbbH3/J3qPCbDl2dny2eb9zz1THdhPPPidnP1arU9X754+mz53erHLcZf/H319bD5atg8f3129htc91GDv/vpZrX88v37zXb56sPllkffrN//c/nV5vbN6vZcwQH1evnH5fPl1+d6OPgSl71a/mHz3Wb59MnVDxc329Vtrxdw8yViOQcb3qa+pKPTPXLMe9UH6x/ZoplY1KE3zJWUexCLibiPOj6SxTsYWW/e96aKMoU+I0e8cr1VzEnf28ENdIVHt2vmdl02vWVO+dij4dGNpB4/XntkN6nesg2p1LMD0w/MSo9Mra2pdT71DssAlChc0FjdqB7d/5FjtcfcOhd6TriYoXp0zeIIWv2jGz4m17qeywcDUjG7ORdh3z0yxm6CsTY9F8WYHXsP0874Ht35kUN1AsYKrYFLQAdsNR0BEV4/uuEjjG1Ch2DjB7ic3p3SPVaCo+FZB14+4/r15/TiX9jKjy+XZ4z/oE+/Fmz+5/z4v6JfuFzB2qvTu47wl5fP+Xvyw3Z789lyufrx4t3N9aq/2rxbbraby83y5sPl9fqqv7n+3ZelaXzxopx4ubrZ3K23m9uffvtsfb36Yt9HckQfGWZex3tuhdmSjwk4S2nzf0r/C3Pj3cX6erv57IfV9fXm9yUr+vVmTzjunHreuXhlwTQfVmAdgtsMjzkz6fCYCXqHDD2yn1PPxwAOK9zAG0OYT4HPeEyvQnxsML9Zv1tv786fPN1cffpqe3G7XTy5gRgz+OvltxfvVhNRKiZ2S4tPMAg3cNUZnsiTE2aR1eSEXWQ9OeEW2ZQTo1ncr+No5t0gUzvf4sG5nST7Sgm0hOoQTsTqEC6k6hAO5OrQL/hU4XAcFny4cDiOCz5jaLhoRg/zzEGz4OOHvRK74EOI/aFb8FHE/pAeVP7Sgcpf2q/8TQs+otgf5gUfVDS8Wy8mq9Gpi+sFH1/sFa15PLg8XvMJo9C+PlXulPhAZHqO4+LsHELWaXLOlmvz7ByuNUoIoMrPaQx/Wr+5O8/F0/JMtWy1GbZGwqJepj65+3BZ6WM27GGpx/GxSO2oK46O+MxULPicRhKoBZ/nSBJeE0UJzSRRAkRNFiXIJythOB/nj8I3Vdkfj+bzPMkeMtRaUYJktTJIyFsro4QUtiJKgMKKIBkAa0WQEA+fO94LhTFHUMQmEhjMZ5iSOXDiRIwMOHEiRrxEhIhXiAiBCCcCBB6cCBBocOl+FNIAwv7kJyS9hQII9EoyBv78AZ1aGWjyRpSAJm9FCbD2TpQAOO9FCZDzQZQAOh8f0hLmGJQuw0eCpa04NW7zsPUtcGs14UizMVN0p6P5DFWKAWQGGV9QEmR8wUkQ8WXpBBFflk4Q8WX+h3B/xKiG+SnbDJilE5JoDnSGLEpAZxRBMoAviiAZwBdFkAzgizJIgC+KIMHp6O9HwqpjJGITCozmKzPJHDiJIkgWnEQRJAsfkwiSBbBJBMkC2CSCZAFsEkFCQHxTdz8Wx13GuTYWICWJtWxBShJRYlgiSA7AJhEkB2CzCJIDsFkEyQHYLIKEeLS4jL2/JRQohmYT4tBcYhi2yQ/b/ACQnT/S7HUTZIzWWQTZge4sgwy6s4wyKMsyynlhlIiyXxglguzVwigRZMRj1ANA9uYYityEAqONEruetwujRJC8WxglguQZlwiSDwujRJB8XBgtg5QWRssoAVht7sfiON9CaEIBD7XY9AI40SJGAZxoEaMAXLWIUQCuWsQoAFctYhSAqxExQjxGXvTPxsUjKNpJgcHGiE0vgBIjgwRKjAgSlYkYReBqRIwicDUiRrQvQgTzzXuA040i7zqQGW5ZyyciZWuGuypja4CHZjWK+DHK0KT8OHSflefDcmb5/V//xm9nfM597N5/uL5+fSSyChkty1zQaD2yzJZ3ZQ2ZwdLUyTLjsewze5mtZRFpJgqCDz0mJlHmU+yjb8hU4jsfUeZM7BuXWRcw4cgyEzx43MtCy/+JIEBhkkWe779kEeH3TpbZABgbKk1MfWzIMFXyVe4oixNqArJE24ZM2z4aWcb3wrYhc9Gigcgym3zF3Exmda+SLDPQmRv2sH7p1SGGVnpNBUEBTC3LvEOaeFnmMt/bNmQWNdBwxEY4GRoyXeXDVIT6PohsFTa/i4tVgQw34ULYwy2uIBjuIQXBsDCVEAwPEoSQ+mQaMq0xhcgyb3ydN7O6yL3Ksswm25QZ5puVZVjE1nWRT9RFPlEXeVraEatOWeairmSz+jV87CHndw30tECdqVrdrEA9AGsUmtPodblRaOXDi0bNMBkbdWHQuKJrEIv+3+IV+ZAb/Fi62cgVrFt6LcNcw5VPwDXlTSlp7ppXWT0vHMlCWxZP6IwndNoHFNyRvtyW1aV9ZKtlzJ5yMDysJc1l7oQjdcc6kqW2rG5oRzJ3QhYf5guyJCqsSBuyyYQylTkUjt9fp93DYqA9izvnhgyTzaEYpzIXTTWTTmUWs2WIDZnSvWnIDN/ORQlPftasq0qdyjxkQTdkqu7csxi4frUNGb+uMY0YsLjVDcyMc1jqN2JQqrnIm603Q3tBMFuxYeV18GUmUxE3bbIvXEjkKM/Hs5xw8xWiXOxDThxWj9PrTPZV857JDPLFSrUyXU3E9uJ9KpuCOZNhJdQy5lzuvZZlNoE8qb5O+Ggx9Zgky4zjuxX5bqZe8atm0Lhxe7q6296Vb/vLa+PyUnu9vV59/nb19q1SzinFfwyIFlv8oFeFzK+U8XPDfsC4sDo78aXoi4vb1fst/3OiuPLt6sdt+SJXNhlGMxq/N6P5OJgp5y/PTn6wuTcWa2NZNgbdgyHGdznux13MZye/0JwZenG7+lf5CvlgdXhDIFglcmlEkiHh2LwZUKUHPEd0I+RGjegT5TCej4dxwZ+d/J5T9rIFhx2M0mAcqScHxQkzwkLDvnLeH3gKq9FBe3biM95n69u77R6qby7u9lAtv958gLOf2nnKjG6HGlzdjqH46QY/ozo7+RHoztKgb6fctvOlBP12YK0AMYLlVnXSzo3OXxnUll2jEmyV9ZLCyfvmA7DjvD4C62tg9cGorcMN7fJnPoQ6tDyEzDot+4TgaoQD5+3F8CvX7tpFGDnBsbGH354rM44Zdd8Hn5vAFx4C38yxRw7K7wohjrIxJ3aN7GSvPHrDXVEZayrjSSqHGhmSacdrakATD/W6C6FAcTXCtnN5PFfcjlX6+6EZ7a/d6bKH6aLm2eVKngdY637h7cFedK32O39bUOdA+sgc+FkAnObN1rzlmrf8EN7q3uYbEwdx9CNe7k0VTivMe3B3V+P51TD9+bE0ykTkx+m/7vP2Aak8eXtQcTQEtYvQfGSEoWq8q2p2Wg1R1UgUHYjA7cjbEWilYjwsckpG72a3K447HV0UohvI9Poj03EW9cd0flel3XgnMaTdAPEu7Uwj7er1im+tAmdp4ggcXbuYpsUunLKqejt2wV3qmZEIf6yvbhWWP4zFBr/TBKQJAfWE5v2vLBJ9OpIsRDKmUt3P/W6q+zdzfQrgCmVuZHN0cmVhbQplbmRvYmoKMzU0IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNTIxPj4Kc3RyZWFtCnjaXZRBb6MwEIXv/Aofu6qqYAN2IkVIgEGKVtvdNq202hsBJ4vaGGTIIf++MM+pqiIF6WPGM/NebK+Knd7ZbmKrP65v9mZix862zoz9xTWGHcypswEXrO2ayRO9m3M9BKviVz081mfDVs9P/55//r1/unTN21jb9iHv39uH15eKS9aaI1JfroNhwvNO76/jZM47e+zZdhuwuchceZzcld1lbX8wP5Zvv11rXGdP7O612NOX/WUY3s3Z2ImFQZpSOY7Zmr4141A3xtX2ZIJtOD8p21bzkwbGtt/iSYhlh2Pzv3aUHs/p85unC4kQJEAcFIHWoJgo8rGEKPYxCdqAFFHia65BCWhDJCUoA2Wggkj5yTTIZ5ZEawGqiDLE5kZEmCWBogyzJFCUY+oEivISBEUFJkugSGsQFGmfCUUlJkugofQxaKgiIkndeViBqDvncEJGIAWKQagiqTuPoEhKkM9UIJ9JfvLY96NZuHdXZiA4IXNQDiJ3uYQGqUG+H7nLFdyV5C7fIKZCEGoq6NvAXQV9GdxV0JfBQQV9OSZT0Ff4GPQVUKSgT0ORgj6NORX0lTdfoHje4H4n89u+vp0DXpJcXmF9FPpsfw6+HQMhICQi44TARhQFCOOJCIS/VJBVIkZ5ob8Os5y75bb4vCyai3Pz6aUrhe6F5Qh31nzeOkM/LKvo9wGXGx3dCmVuZHN0cmVhbQplbmRvYmoKMzU1IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNTg2Pj4Kc3RyZWFtCnjaXZRBb6MwEIXv/Aofu1pVwTbYQYoigQEph263TXvYIwEni7YBRMgh/35h3jS7KlKQPsaemfdiz8rt8l3XTmL1c+zrvZ/Ese2a0V/661h7cfCntgukEk1bT0z0rs/VEKzcUzX8qM5erH49Pb+41+8v17b+c6m65vHVn64f1fj4/lZKIxp/xOq32+CFYt7l+9tl8uddd+zFZhMIsZq3tZdpvImHtOkP/tvy7Xls/Nh2J/Hw7vb0ZX8dhg9/9t0kwmC7pXQS7dV94y9DVfux6k4+2ITzsxWbcn62ge+aL/FYY9vhWP+uRloezcvnt9wupEKQAkmQBq1BEZHmWEwUccyAEpAlijnnGhSDEiJjQCmIs2SgFOSILPeZg3hfQbRWoJIoRWwuS4ScMfSl6CyGvgwaYujLChD0OfQZQ1+eg6Av55XQV6CzGIoKjkFRqYkMVZdhCaLqUsIXo0EWFIGQxVB1qaHIGBCvtCBeSe7KiOtRL5K9NikITpgMlIHIXWmgweQgrkfuSgt3DbkrE8RsCEJOC30J3LXQl8JdC30pHLTQl6EzC32OY9DnoMhCXw5FFvpy9Gmhj/8HC30Fazd3pwrz70tC14HPvfy8BZ+3RhZkhyyhVYe8GnFpv9wapaBUU2WlcFKVAy2pVKgMyCEmQTgBipxVGidAlyBo0xkIDimOQalagzgLuaAi7FM5yFF1iV6iHMSxAoQsUQlCFgv3NFau+e6F/7u2jJNlDt7HYH0dx3ko0bCkcbdMprbz93k69MOyi35/AUOWSZgKZW5kc3RyZWFtCmVuZG9iagozNTggMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMz4+CnN0cmVhbQp42qv/Tx3wAwBey0gxCmVuZHN0cmVhbQplbmRvYmoKMzU5IDAgb2JqCjw8L0xlbmd0aDEgMTk3OTkvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA5NjI0Pj4Kc3RyZWFtCnjazXwJdFxHlWhVvd60dav3vft1v14kdWttqSVbktVSa7Mk2/KudmJLsiQriVe8xTGJHRIgwYTtEMJkAmQGEibDYcKTk5BAnIRA4ASYMxk4DD/A5/A/PwfCnMyZz5n5Zhji1r+33utWtyw7ywD/q6z3blXdV3W3uvdWvScTSgipIncSgbRs2d7clhv76w5ouQS/M3OnT4o93cIMIdQH9b84cGzx8On582eh/iQhNY7FQ7cdWHf33VlCjH9PSONjNy3MztOjs48R0nMS8NM3QYO+VzcA9S9DPXLT4ZNnHvhq1Xeh/o+EGN44dHRu9vIPhTwhQzCf5r7Ds2eOCQ8YtxIyNgr44pHZwwunNROzUL+JEDZ27PjCsXXpzUcJmYD5yReIhnWyS0QLfRfYFLSMK3e6j7RR5IIYiPIjEmKCG1WrZPLA0Dz5K0L+wITXl3Uw98O0WST0k9jHBHaJPyKQt/o5A+UIOYL47DVWQ8hyl+bh/A/Yd5YvQz20fFmpF/DI3yyvK2t/YVW9MN6PyNfKxlPqRTyZJEWZ7Jwayoni+DPEuHVc1m3fMyW3e+W63MwB8cLOKZlFZ79mAP7n5qT93lBIJjmZZKXBiyCD7MxAo0yTsjhzoFFmSXFelL8xKWtiey7W0crs0NyQrBuaCslCNLfthqmQFPJemBLlyUloyuS8otyFUFcuJy4p2LPzch00qTVRbsH+FsT8xuSUCNRcmBXlysmpGWgRsa8SoTRC6RnvTC6X88o0kctJMpmcWsjlGmUhKcI4mugsUKbNTk7JWmlA1kkDwEdOpjONsiYpAV3i/JJ2/4CIPUixV6EAr7IwMzQnCw0h6MyKF8QLMMFSizYKTG6dmpn0zm7LTUm5UE6UM9unoM+LrKnzN8rapKzPJi4SpkhKB1VpQAKJSwOzMtt/QKZzQIWsbWiU9UkRSa3Kzj2jIftFHEHOzOQQZWaQk2pIXtRXkezQQEOoKPuKZLkuKpVRaAJIyALfM+LQBWkW9cLlRbwoU1n0ApEFKkE70uygMkXVNR6XI/AU8a6wVvpQdZIzdLGqUgBle6VQriHUKNcklxgbkudnBxtlYxIQRVGuzo7h4wBIAzm5BmvboFYDtUbZBMPUcpGIIIE5mFc2ZmfECzOibAShNcq1yfEdU0ua+cFcRK5ZkM40yubk+Nap8e1KozcE7VbebkkuEVN259SSyZSV6eyAbEqgzYIlDyxV46UGLjJ1gCaE6OTUEgoPuB24APrFaRtCEjxWgL1KPz4CSwFbcsDJCNA/Aq3lqrqGApcIsUograxMNlyklHJdWZNkibChHVOySRoQh+QqML5KCQxuQJyB6Z8ymykxkoGBCzNLFl1C/lDCGwYx2YA3a6JRtieXKN4dIGe8O5NLAt5dySUN3t3JJS3ePcklHd69ySU93n3JJQPe/cmlCrzXJ6WC3GXdDEhYEptkuhcXSKPcUNLpKHa+R+lMlHTGip3Hlc5Aksg1iXfBXxD4CwBdIvCH9xDwh/cw8Id3CfjDewT4w3sU+MN7DPjDexz4w3sd8If3ZFLs4WbamIRpzTNiFnQ7k+WqhKWXRFttSsqNCbkRVmEzLIAR8RpalGa7JPSI18XwIvctRdVSh9zcsKSl9qEpcGTIYGupZK7ubkuKHZzeFODRoasngdW55uTYThxP8mgyuEHqWmqjdmSuHQQAFK9NMKyK2a5GuSPZ5OxplNNvhQoWPAfonaAT4oiKTeIIrnyQ5cYLF0akEXAVUxAiwLOCO0hTareBSLvARTnkWkDTgNeMcjS5IptYuNAkiWLPBRhvXTmK2KSMJWugBTBFeQadRmbr1BNMFETvEywmeHID6EgN4JMlji0NwxLOrl6PM+jMlLjBsjPzYH3Z2XnoZtlZL8Az6MhWPzMLZIF7l4ZBmRLMMAz8wY3PAuOtMYmkuEwNeAlQghYsS3vVqDAichTlRMB1UnGVK3OB7tcX5CBCqzamykHqARF1F7tkA+8flkZwUtReT1F8yIwqYbJjqknsgZCL1KuNItJVUIEuCrWNpdFdUd5aZq1qSkLb7i2hJFtQ1QymAKtZLqh3AziKJpTisFybnZr0QsgUe3JNS03UBgu0r6x3m3eyrDez5rPXe6I/KXclrjfhQFJel7gAtKF9AVPXRAWFNslN8ESWs4y2WdAJmqUEi6UJ1pky6iD4HQghBcR3YMQjfyy7RS7QRfVI4IVKLCSUU2kcAt/alSjIYRhq6xIhSZWEykmR6RFg2q4scEgvYC1bm+R2WM+j12jfCMNRm1XuAHgsKXfCbRzlNgQCFochlhYkNZFEE5bHAdyUvAjOCoDNAFAEtiQvUt4yCQBv2Yo4QwBsQxwEtiMOAjsQB4GdySfA6/UDtAsgyqHdySeo0jYFkNKWQzyK0B7E49ANiMehGxGPQ3txziwA+3BOBKZxTgRmcE4EZhFnGID9iIPAHOIgMI84CCxwugYAOsDpQmiR04XQTZwuhG7mdCF0C6cLoYOcLoQOcboQOgwyXl9U4BFekzcAeFQB+wA8hkLntQzU3gNhVMU5roCIc4LjUBXnJDzcXRz1FK/xJ04rID5xqwIi+hkYR0W4TQER4awCIsJ7AbenON7tvMbR71BARD+ngIh+Hp5UEe5UQER4nwIiwl2A21sc725e4+jvV0BE/4ACIvoH4UkV4R4FRIR7FRARPpR8okLDCsnqQEI2LMhCZPJMIQ43gs4EUgc7MRH2Y1XEQUKk8umAs7ZaR4SWhCUVarObbVIo3GFO65zUke4wt0shBs3pOI3p7OY6iV6UpPxmqZ0x+ldMo83vd2vpZwXG8rNMwy5JVy5IEjut1bArfytQDdulvXKnhrHdAF/5Eu4t1wMFF5mT1JC6cTk2OZWpAqNwjkOrnUx4eY1MK7Xck9EQ0zsSaZ0UjgEh6VSbw26+GPZ4wvgrSZKHftYD1/wcZgZ0eZJNLf8DewXGji3p5gczXoKj7ca+aQYQ3QJgDamOCnp7YklHBlmso0MZ1m7TSff7AiHJ55fYlMNn9Tng4rfzcd9Y7iEvA8020qLQXA3NznEYkropEF2NjN2tVnOZSui1QSaLszhwhs50uki+TaeTqsWUaEYWEuNNL4muqjpTZXMDfZGz4uva0QTqIZXLf2Cn2DeJh/hJNBP2U41Ax4gGJtLQA0QQbDA9l5LNJVklrd6diCAP4Vg8HtLruMTaO63ptLPN4bRGU3F2Kuyw+A3t+R+36/1mj1f4vUG0WYL6y/mbX17or/KEHNbbzlrtPldFJdtlczC79cpXv/nPhNsLaIctgr1YiY9ESUemzapQIxCNVtAsEDCFvSBp27iOarVkr6I9v98f9UfiIaBDD9QRB5JXUGSqDWr6WEyS7Km2dAdLd7RzmEWy9+77PQrizecTdc310UcfCzTWdmxo/Lsn6dFdg7fukzxswCNdbByyPVj/mbpw/nxbS3fkRZBK3fJltpO9SOKkJQNWTgVKhHNEYFRgtwNt2mmi1drGgVTNNNFo/JqJWDwcDUd0ek+C2G16EFg8JoV1OrvNkWrrBF05kWBsjwEHaWxgO0y1brO5dd3wTV3nF3sbLUaPxVRr2jy1/5H9ex9ZzE2wC5LdZq9wdh8cOn3WaXBYHbUefXz7508c+PwNcdApyvELIMda4ibJTD2Xm4ai4LRUEAqCM5sJMbvNLqcdEI1pHVgRcSAxJeKzKAIzp+g/3TMycs++f0WR/evknhtyjz7KLu19eP/+h/cqorry9AcOHPhAvgFNFOe3wfwiac4kr689frYTjIQiivYiXHshdfpQm1K1pxRAsofob9F4l5AMusUjhb353/4Sb7+kphOS0y0qxIQ87uCX8PI1UqCnEujxkvpMDFsYoQtaqtEIe7mFA2l2hqR4iadDioR0elfCujKpregXVIJefhXnfzXq9iEZQ1hhG+WQxxH+DdKiUOAI87nRXj7MvkOayYZMd4xqtGDPTNAJTHdOT3VEq9FpF4AIOg2i8Y2DyXCv5OeSaSaNUgzsImZA60HnUWYnXFkl9gQGle7s4CsSVMduDgf3n5p7bP/+x+bmNppMIZfJkl6fOdTXdyjjy7j2IdWP0LOS50eStXf20f37H52tM3hM7qjB2X+kH/5VGu5C36HK7/0gvyCJZyKqb1jQaVmJdwBqgyRgjUrWqLoKzYrYOkIl8kMHGELq2P5wxOeO5F+Mub0SQrQv5maXwt4rzyNdv/kNl+kAXn/1K4+k0AC+8RK4VWumlpuRYkBrue6XC6NKxVGuPK/ogv4cxvCRukwUeEI7OAfKh7EoFaY1sDj8ArLiI96YFNPqneBX41ycKG0Qb7l/fWp/sDpm8wSsdW5/hxhz+8IZEFtzg8XskgIWUyDlo49wG72x55a+Eju0kGDGx3kQKGNkX3EpWIg52q4BfsrXAc4Xor9Gy3/Wo4hLewrMO1Tk7nLRzl9nz4HvjGWkkMVYqQEexzQQNIFFWlRUlESiTVHkbkVNZvDlcV0sLphLteW0gmdPsW9Fwz6f9Gilx1jjqXxU9LjFqMcUMPz0fxi8RvYcTP8cckk/+Wa1iVJTNdXm571hoC3rjpiq80t0S7WpSN/9wL+fRDIhdyVbkzo/8UVj5dTFaTlVFO/sdEDyGL26/CeCbheAJr+eHgq62CXRdeVrHqnCQH+Y3+kSRRcb8UjVlfkW+rhL5EfKfE2+AmvSBDaLmgDPpC4/8I7q8oNVF9aAH4joSpYcrLgmVrLaIKK8MvXQ7OxDu3fjdequ9ExP73RHx3Rvz0z6D4/OzDw6N8ev2cOZviPZ7JG+zOGsQgPKIgWysAENEEl0VAMS0hD0BWyvlqpGaacTdsgN7EF7wO8FXIsU04N5FP10ydoCX43Omoc3+vCNXV03ph5HVUme16xRpzNqffxxdql3sbfnpt7nuHbAcvKymPL5UsGfF+TSJVSDXNJkmIxlRupdTKujYwaq1YGX0sBKoeg6zxEd3HR0kej1wjTQu+K23KjBbH/3OhiiozEZiUQrwBloFGJBjzF0VcWsobOJFcUKCMCYQ1llnRtYiqgCbo8p7o29HsnOxjLjMbfoqK6tqXHAGpPmNp8ZUCSfvW1zrzPuDjb53RGzzmWrvPLfFC0oGvFFHLBC3Q5TDc4TdcZrouaF+3cpytl1/4LZKdQazbUmo9ZaSTu5mhSVKbpaXmb3ga7qSIqkM6kQhPkoimIMIhmYtZYukGIsUf1hfX19qr6ttblDioJDdPEFrQR/JQMpiyk8AwDe7SAAtqJFdoep2hR02Uabk8/6Xf4ExBqx/cbOdKJPJ2gMxmfDDkfY8rOf7fEYLSZLVf25SMM3C4rt2t/bNu1LjtWagl491YTXhXzNvv9ViEeNoGPOCRE0RCOARtH06O3ABZuG1eAb55kMxmm/FtdkirRJsQa0PfdqjwjExgurw1kISKgyWCLOAOOaf+1YqzfssprqJtq7tk7u/tnA8eG+o1F/2Gmq9uyN9g2NTOxabB85PVgZSbj8Tqk6FGiLNqZqxC/37W2NBZ0Bp1Rhl5pjiaTR1Lw12zedAj4CoJgdoBPYWWQCKHRhL/rvwqoBoh3EJkkR1ZFgIC84ETVChlhbOOz9bMzni3wW5UYvge/weIJX/p0Hn2pcPETxW5Ajnwa/GsS5wGHx6AOOe5qUxD5wGCtOS/EZxVhREjvYLnH43Nat54cjPlekYaQ+Md4Y8LDnIEg8sP3O0dE7t9NbeH7+QMt4Xd14C73Fq+QRyO+97AVYYkCDHayPjoHnXImDfPW54nENdw9gbAIQEQOHriir4MrnorrfVYgWs9/wO22d3RwwfPcZQ8DMng+7aoxXnrfaqNXCBitN3pDNmo/Tn1hsOHctSPdhmLuebHo66q8WCCTl47IfNihW2IBxVyUIwYIP92YckA9DkkPOqb1qRy5TA1TWkzqwmDjmWAU69eAahLXodaZVuoXT9cK3dQGLRaz46MeAfktA922h3m0TdZ+6yxCwWv2G996vC9nYC1FfRdWVS2YbtVlpNv8cMGQzs8GqCl/Ubsn30C6LHczDkv8+fdHC91wEkmA2xOXqz3islUA1SJbRFcFG6mAbB3rVC4VFq5LodHZy9bKhqh+EXW7pHy31Tp9dftTud0XYYXP+n7gdUUZtLqdH8v3bbwMRj2JPEsy5wPNRJfoU0lDo26uYb3u0nUcfoqeFJJi7TBpSbRfnXTDm30/70HTzGz0xI31v/hfcjh901bMj1rwrCBlCBORHX0dTDru5L5Ng/TexEMwdJx/OVDph71wBLoyBQp2gUDf3AToMysFxPSbq0wW1KltSfykCSohj8fjpxz1qALJ9ptnNEZQFUoaQy2VsPh9kWHFfLCxiwh2LRA1lwb4s4Dp5tsh3IdylpFg1bspD1L2zeehYf+ZotmWHP+z50LZt/ZltW/tZCBZSDrIRj79+5Nzk5PkRyUshzmWnR0dnZkZHp7kM+kEGE+w1zAPJgUylG3aZlaoMFBYZc2BME8AFomGvyMGP5u2FVr6nWeSIZb3Ant8PUJ0/LoUwj4xGYwp7xSC4Kh8GNi0l/NGHFK52+grnD65dza3AWj+wyEIKU3Gfjm80TqKF/SDQmM8ib8ijYl+Q5/4L6DhO5hWOomttVNG9B0t3qt6MtAqvEN8WS7ByGSNMEiexKIT3yMqWG3RWdPyws4UQ3lZgWVEmPX+Tx15rs1ZUxqvHd+7Ktrp0dkuN2991Y/umU5nsmQkW6kg6QhUmrdawd3x0ulowGUS3q8E9en7z1nMjRdt9jdvu/Vfbrh+1xRXHo9ja9htajbSGDQdhLrTiRRX3z23Er8E+6IFyI34Jdth3rhixIosQ6FgEWSwqrMWgmUKSdo5/hKElC7DB1HG1BZUNDuH7Gy/s4QqIGkCBLehi4YkStFzGFAqF4qGYPRaLhEN8CwpuSAlliuez6VclxxF9qANsgIkRV/6r1bvS9U1eraXWHvD59rXsuGNw9HR24NRw/mN2qtOMNUNM686azEJFwOZ1OMXh927addfQ6NmRhw7rG3oKMY/KoO8G8pFx2QscBgx6ptPxMxYH7J3wCE9D8YhM2cF7C9au0xO9jpwzUL3+2shg7SoeNEM/yGSx5AkFC1QN0Q8oqLdJsJ2MSBV6L8jBXjwdWJVUpNRzPsUKYhIVfTfgJuQGXMlphNKLs9FOn01bpXPVsrNxZ3PQ5QrmP8djxX6Em8b3BYIuyGl0ip67WBfoOUE6yQczxjiIzk0FfRXoT1D9VQMsWgY7SUjMQd0GMFxQeAVVs3N/MVVxo/OqKyAjHggAlL82ai7jSCYJSXYm020tMH1DLCrVRStLN/eY+HWmV1LBjrewekf40ycDNztaBZ3fXFmhuSE6ttGRSw2fGOh/z1Bqyhv23LdzZza7Y0eWu/Hs2VO2SntUX+FwClTqTrcE25TV0BCoWuXS8X0FCKsCbCVMNj8VpFRDVeE4CV/C0DKNJz7BQoLuzdi1VDnKWOQorDRJCZNQFH7UJKW4++ScmK/y3/S5CX7Kmu7qKzht7/YUC912cJlwvZLOvmxKgRlP734eSS0vg0YJeYq9QsL8WygBtP1rQpaX+Tnw93i7oLa/Wdw/m4HHEOnPVIhOg16jZGLIp1kJWoLgXMnDim1FJ5j7KsQjie9rlVQ9ri8PR+bCytY7mTnu8FiebC2w9GOr2yG5Pv2VnW532PZ8480r3OQ/+oo1anXZP/w8KdBJvgV0Fs5qHNc5q/mW5HGH+W9xuCsPKPoUcmD3HeT2TFUjxCs61gZreKPi6h24nrXTBr1O0Gqd45Bmlvp4D8FGRNFNc48RXMHIuLAF+gjuYDE+FLrUpd5B2qPKD1/q19T+NWyhzYnpak2ZQawyjHOSc2/32tZRBvN3DrWR1JGGwRUbt4JMwuQWtHGue5SGlbttSLZR+6ws3Dm5Rbyl+ZPpgvm/K/v/9mZkralr/UCRzd3t1+CQc2WOtKsxDNY6P4fpUei1Fw5jgqWHMV5kkaDbWixpzX317R7SZEfvGJ+4fXT09onxO0bP1A81NAzVK9dnzw8Pn0enMnJ+snVTQ8Om1taJhoaJVjVP7II8McTzRMg3XJBvVJbmGyupsFPNNZAwlDa+rlHzDYK9VyWTpYiZYDGhLO1UBeFW8o0/S1b5Es8qF1BDmrKsUolDhX3D3yj8qwKhIBAvrwhKJXeVeIIl6dO4GolK0jHnqpytHHElHSvpw8eKkerqdCxano6tjkzptdKxcDEba93hE0KuYjrmhHTsIZTJd3xqPhbxOgP5TSUBiK9N+jmej31xXLZMTj3lx6RizAt3XKg53pixoh8uLtVi1qLsvMAICD2GHn9mNYKyLVEReA8hmhllRRfSGa/aj+uaQGzHpcKFytMYZV2LJAj+P1LYfBcPa3T2q+2HnqoXHSarYK/2tAQLZuPc1QrB2RkMQuIo9jf+y8qSrqlPoBzcsPd4AeSQJnsVsiPXOGQKjhdel/m1QH14NRroXACdlyDlMhVJKZ6Q+Mu0NKYeSubBz6CKZ4nO4kkbMIYuoHAKBYvE7TGa7NZAf9Pmjq71Gzs6c22pA/4aq9HiMFrWRSZ8iXh6tG39DS0DxyPTFo+lwhoMCF3+gKlW7O9sGYnHorU2p6nK6PB0OrymKpM4kG7dGEu2It8muBxiF0h9MVeFPZRwtxaCEIO8E50AD0WFQ6NiropYkHZSHdXrzpWikxJkyFXL8AADUPUMnPcKlhrA6kmdlaeqEQxgEYd97Qy1JINV3kTSrc7u6IadTZikNmFEHkFoxGE1GKur3uN1eKMdu6hNdDmDGdR3BqH8b+1WjZbbP/jySuaE1bdB4czCD8qcxZSSu3HeyOjdJY05/pYbFi3EG/UATaW4+MpcSS6hRl8P33rkyGmeS8MeJOxhTsg+Dp09eyjP85De7u5egPjeYXmZ2YAeD+l9yoGbHTVPMmoUf11MkngDYXcXD6mQHA9xx83OwtkhP6Pih1Rlh1P030XDs3qvucLsN3xdH3ZbRcOFDxl8ZuYIOqst+XmzDc+a6Gdqa20hmyX/Eu222miBtl8CbXVk+9MRPE/TFqhzES2sAi05p9dBFg85DMM1rcRrbNJq7oatmvbuYjvs0oDcOhKPxs02s1N9Uaic/sVjkN6tJpznd04nPwx8MaR5UBe0GMLmnVvNYYMlqHtQE/La/LpDW2rjdqdh00FdwAEi9lYY8/MWO2WRy5cjjPNUVe2OWq35n/04arH+gIpWK18Dy3n6KvAVIesyFRDk9ZoVudcItEzsvF6Sl0YaouV5afEtQbz8uA1TU/pqzOm3nTlV4TbaY6YPf7wm6vLb3nvc6neFjBc+vsXmjng+9anqGtFus3zpiVqbW3I/+GlvyO4wP/aEYqtd3FbbyHsylR4qaHE3VTj9iRQ2SKoKwPestY+KFNRR2HuthaZop420RmORSF1U1c7qzVOAKZunVWfG2GhWjP6+U+GRwrZJL8XtI9n2I+2TSVwHnR3t69R1sPuuW6sq1A2TYKzoHavsb93dRSO4NJZJX2fvOgopGOw78Cx5F+6VaBrIk8DF/rWyz2D3Ft+PbeDvx7zq9wOcIR//fIBO46cEfjpRC86m1lvrcdgA0RjT8a9QYqVvdKR0SZD9xW0bNty2Ywe/ZjZuzOBv5Z4vHDz4hT3K9czZ06fP4i+Pp+hUQvx8vy4ThbwCDAlfPkGaek5Q3o4Vjr0dxB6NqsfeK28zFW/XCTZDlsN4xr/BZHZLZuOnzR52Cd8H88j101hFzFnrM+ypwDmb4fKfwHc9acokYCrwsppzhSMR5F6jKfluAfxsXGpo16lvdwpHtJ0Fpos0FAWi16foT8Gn5r/sCVh+Gk1kGvzdLovPEbXZYvNNA/Pp/s7z/3AE/arodlt/U7c13DgQF11huyloizV17d/Q+77ue7j/uEx/CbJpJ+fGZSPYbCMEBq2g1QsQGASqFSB8YoBgt4NV6vZCiLCVu+FUER+iLuSdEJSpVnP9p5Tg0k7agbkoWKqyO1p5tae+E1Jf2pXy3ymtHFrD6qXTO5sGzkxGRr3RsMvmTLQHu6T+JltA8Jgdnsrqh76DYYe2BUTXB+nXe2Y7Nx5ebzHZwq46UyjYHUv3GKgh6DQ6av4WBRXyulz3o83ugctJ/m4/iNoL8i+HtLBG8aWlkgytvBsK+JVX/FJEX8yECu/kOtSTdmUZpkKpDrYDCGrAiJh/0xEz0R5r0B1uyF/6PE0iCe9DS3qf5HJY6N0uWIZ/9zL//gx0dAXoSZPhTDZFBT1+VSVQQUPBotBj3A46AOnrBQzh2r2Fz4ZKPv9Ik45IZyQKmcxqWa8l7IK7TBc/U5H0mMXtPNg7cW5jfLunujbotngbxPrRxFjKGXFb7FXxEA1qQk4aQpH/h9W63kN/3HtLf/Z41mWvjNRa/FZPLBNND1ZXVxga/JWa/7B7keNPVBkLfoK+yV7g+6N0JgWeFFYpGBCwxYRF9VuflS9ayrcwdWVvstXkXHXxyI5+1Q5m90Km75bM0KH1qXtOVld5wn5X30F3WyY4MNDc0t/fQr/Td3AD/Nt0x8jGr3wmJHj9jpDecmMmkf/ccHv7MP5yv9Kz/Adm5n5F+QaD7b3KndiiK2/RaPETt8KbF/rPcV3+9/qAxR3V/SZ/mRvrjexSyFNjvPKsBezUWEPzKCXlm7YeEFQtzOchMQgEvZn1nmq0ybHSI2a+p7Gt7AyBkHjc6423xVsbE96YN5pIFPYzRVl1lrlafUynpkkgsDKx/ayj72Amc7BvVmpcP9fTM7euWZI7OxvqOzvrWwYGWvCXbt3euG6mq2tm3UyPbbCp88Z0+sbOtn7r/+yoq+9I19V15MXuhkR3d6KhW/1OAAT5JvtuQe8WftymKzlOYNP4BYNvvPCFXqne6+tK9F7iIztXdmhlDOxarfF2bgio82bQPfvuVRpXDKFM74zg9fuslp81TKhnIxqqfgTKs1TYloEu7HhAbofdlXIgXNqey1h4zAvW+l12GKimA2OeRUlUCx93SmxVfSEY9Nf4yy/0nqDfjBBc8retwCBA3/Kt5CfkOEReX8Zt5u95gXr4N6c4r3hDGF9HOlS7xCXDhaUv2oP9J+G03+GptWp8drO5qromkLQn20zD7VZ7bY2OmdxVZr0WclLJ3plS9BmByyfARsfJFnJfprKfGiq8EHALGVG92aSDHFXg30stVtGKCtu4sbZG0OsN09WVzGAIjuOOhW9C49jAO4lBf9MaD6qYuUx4AlbbxJaJLZs3wcRjw4N9vevXtbdFQpGoZJciIYven6D6wiZlxb+VguqOZgVIF1LEUlAZQg9PsligGfauzn6b4LW5/LT2EZvgszkBiGBzWunNqL2mL6i9Jgmbnws8EqBPPx50Onynra6Aq0Kz77TNGXQZNPuwjXccVzr2HFc69vCOxx/n3yNT8gK5AGbjzjgKXwqrXyqgKeFHvOlVppNbMZgyG2kjv6N76BFSQwLqt8c7+btj/u3xJv7tcVW7OqA6Hg63E+LU4xisHv9dWDl0DRH173DVv66dNvX8H1i+ryP8vWc/+XG8/2jkQy/lw/kfaFs0DwOuHq2RqM8pf6+r3Z4PLz+tbVn5i17lh7WyUfAQb+C32MuT1Lr8BjtPKsmf8Yd9jIyzE+ivrtH/fX5Wff0xet4a513T1wb0PXMd+l65em5q/a/Tw+rK50Q63s5zQkrBY794ZzSw312bx/8XP+wGlY9/I3XsK9fnhe1857Sz47jHukbfi386e+Ljf5EEhK/gNztr9O3A713exhj34jcqq9qOXt32J+XjKOlnwrXnvB49bPBPSyvslwPstuvMP4bnwat+3uDv+/7rc4MfLc6zbsWWqPGt7Ur4S4UusIP+d6SLA39e3b8d2yjYAL14fV7oL4n7Hcn3Qf6/U1x77vF3Jrt3ERMCEI6v8h/018T0x5qbfeTq8UHHdfQQ0TIXaWaVYN8vkT0sS9azCPjIdaSHTcBv5P8vP/5HWU9mMkzxL45KZfEU5MS/J+vpfW97mDb43UAOkb8gP6Sud1luoZfKypurCxt8R+Uu9lppEWLFMvqW5V61PHN10RigTFyjfPSPVF7VvKqd136vvOiarlnmy8oX32F5Tb+tpNy3RvleoRgm3mW5VFFXVh4vLZXiOyyfr0qXlY8Xy2feRnmMlzexVAeuKo9VP1ZTe40y80cqv6r5lfG08T/Li+n0Ncrl8lK74R2W+2r/o1DME+a/fxvlvxeKJWCZsnzZmraes/5v25jtLtsb9uE/W/lL+4+U4vig48tvu/wId2JsiNwEu7VPER3s2BpIN/kweKh7axz41xv8P2M6ALs+qsGDbwvfASJMiQVqCsyIgUZUWCBtNKnCGuKj+1RYSzz0rArroP1+FTaSdiqTLDlKjpHbyHFyM1kEak4SEfxkC2mFIpId0LIA963kFPTPkYPkBJklR8g8tE3CM0fJLdA/x5/qB5yTgH8U2k9AvY6PdhJGPwG7y2YoizAGYpwi+0kTPHWUHIZWZbzjMM6tpBGwZwHvEGAeAehW3tu8xvzDcD8MbYeA9nqShPluVUcXyTYY6wT8Hien4Yq0DsNcRziVm/lzwJPou3pU0Q90XT3XADx9CO4p6G3hpRu4P0CGoK17DfzG4hNrya3Qt4tTeAL6kTaxZPTrjViQqSLRE4CFmjsGbSfg+RNcIk1cB4vQvwU4x9OL8WfIy9umlij9aE6myn+EcWyJ6AeeHEkFBdKA4NPrDTGDxSAYlNqgrkXn0/Fa5cAl4zcqvqH5BhhOBdRrBi6RDC+8LpDBpQi9d+uUnLl3akmYH1yKYe3rhjvBzDL3zu2YQpQc/DzdY6gz2AxCdcMzdPkDsuYjS4wMPqGd15HBwf8LCCAEzwplbmRzdHJlYW0KZW5kb2JqCjM2MiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDEzPj4Kc3RyZWFtCnjaq/9PZfAAABWrURAKZW5kc3RyZWFtCmVuZG9iagozNjMgMCBvYmoKPDwvTGVuZ3RoMSAyMTIxMS9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDEwNDM3Pj4Kc3RyZWFtCnja3XwJeBvHeejM7GIXWCyOXRwUCVIEuAR4ACApkgB4iQJPSSRFUjchiSIpkZJs64osX3KiuJYTW2rj16RpmsOx49htkua1BeU4Tm238XMTp+3nxm1ekjZpc7RNnbymeS9pkzQXwf7/LACCFCVbaZr3voexdmdm/5357/+fmaUJJYTYyX1EIC0Tu5tbpzY8moCe5+Hf7NE7zwe7PspkQmgltN997OzxU3fOv/kCtD9GiMN//OQ9x95RPRImxPkyIZvOn1iYm6d/OvcXhKTTAJ88AR3yb0mPQftuaNeeOHX+7t+R3Q9B+xFCFHLyzNG5L+375ucIGYG2ZcOpubvPCq86JwmZgPFJ8PTcqYW7H5wA+InPE8KOnD23cLYzOX6GkF0d8PwJIrIg/XVigWdX2BT0jJp3epi00mZo4yP+CxLighvNN8nksaF58gIhP2XCt5YlQsTHaHOQ0N/AZ/Qn7Hn+ikBe69cDpYN0IDz7RwbjLHeIj+X+ir20/ENo25d/aLYLcOT0cgf7BvT/ON9///KmVe3CeN8j/2fVeGa7OF6WxIJZsndqKBMMjn6COHeOZqXdB6ay7YFsfWb2WPDK3qksC8/9oZVYydGjxpFAKJQlmSwZMAavAg8GZvvjWRrLBmePxbMsFpwPZl+YzIqRA1frqTIwdHQoKw1NhbJCOLPr4FTICAWuTAWzk5PQlc4EgtkOrHVkMsFFE3puPlsPXflWMNuCz1sQ8oXJqSBgc2UumFUmp2ahJ4jPFKwlsZacDcxmMplAlkYzGSNLJqcWMpl4VogFYRwxPAeYWQYmp7IWoz8rGf1ARyZLZ+NZMWYAXsH5RcuR/iA+QYwDJgZ4zQqzQ0ezQmMIHg4ErwSvwASLLZYwELlzanYyMLcrM2VkQplgNr17Cp4FkLT8/PGsJZaVB6JXCTM5JUHT6DeA40b/XJYdOZalRwGLrKUxnpVjQUTVPnD0EyI5EsQRsunZDILMDnJUrbGrsp0MDPU3hoq8t8VWy0IxR6FRQGEA6J4NDl0x5lAunF8kgDzNBgOAZAFLkI4xN2hOYb/O69laeIsEVkgrfUmNcYKu2hUBhB0wQpnGUDzriC0yNpSdnxuMZ50xAAwGs+rACL4OFaM/k3Vgaxe0HNCKZ10wjJuzJAgcOArzZp0Ds8Ers8GsE5gWz7pjo3umFsX5wUxt1rFg3B3ParHRnVOju83OQAj6Pbxfjy0S18DeqUWXayBL5/qzrijqLGhy/6KKFwdcstQPkhDCk1OLyDygtv8KyBenbQwZ8FqhHjCf4ytgCtiTAUq2Av5boXe1qK4jwEVCPAZwayBLeq9SSrmsPDGySNjQnqmsy+gPDmXtoHyKAQrXH5yF6Z/WNEqcpL//yuyiLkWzl6OBGmCTF2jzRONZX2yR4t0PfMZ7WWxRwPuG2KKI9/LYogXvFbFFCe+B2KKM98rYohXvVbFFG94bYkaB71lpFjhsBJuydBoNJJ5tLHnoLz58g/kwWvIwUnx4zny4MUayjujPQV810LcR8AoCfXgPAX14rwH68G4AfXivBfrwHgb68B4B+vBeB/ThvR7ow3ssFuzhahqPwbTabHAAZDs7wEUJphdDXW2KZePRbByssBkMYGvwOlI05joM9Ig3hAgg9S1F0VJ/trlx0UJ9Q1PgyJDATaWcufZxayyY4Pi2ARwdunYSsM51J8d+4v8YjyaDvUbHYiv1IXHtwADAeH2EwSrmOuLZRKyprCeeTb4WKGjwUQBPgUyIPxxsCm5Fywdebr9yZauxFVzFFIQI8KzgDpKU+rzA0g5wUf6sG8BE8JphDpa1DUQXrjQZwWDPFRivczVIsMkcKytCD0AGs7PoNNI7p55iQSEYeIpFhIpMPzpSK/hkg0Mbw2DCA2vtcRadmRk32MDsPGjfwNw8PGYDcwGoz6IjW/vOHKAF7t0YBmEaMMMw0Ac3PguMt84khukyRfASIAQLaJblmlFhRKQozJGA66TpKlfmAtl3FfgQhF5LJM8HowdY1F18lLXy58PGVpwUpddTZB8Sk+cw2TPVFOyBkIvY5zuDiFdBBFIYWttLo7spvPXUOi8pA3V7cwkmAwVRzWIKsJbkgnh7wVE0IReHs+6BqckAhMxgT6ZpsYl6wUC3rHq6KzC56ml63Xdv9EZfLNsRvdGE/bFsZ/QK4Ib6BURdFxQE2pRtgjcGOMmomwWZoFoaYCxNYGfmqIPgdyCEFABvQom3/qL0FqlAF9VjgBcq0ZBQJo/jEPjWjmiBD8PQ6oyGjDwn8pQUid4KRPtMA4f0AmzZ05RtB3vedp3+7TAc9XqyCaiPxLIpuI0i34aAwcFhiKUFTo3FUIWzo1DdEbsKzgoq41ChWJmIXaW8ZxIqvGcnwgxBZRfCYGU3wmBlD8JgZW/sKfB6fVDbBzXKa/tjT1GzbwpqZl8G4SjWDiAcrx1EOF47hHC8No1zDkDlMM6JlRmcEyuzOCdW5hBmGCpHEAYrRxEGK/MIg5UFjlc/1I5xvLB2nOOFtRMcL6zdwvHC2q0cL6zdxvHC2kmOF9ZOAY+7igI8zVvZXqieMatboHoWmc5baWi9AcJoHuacWUWY2zkMzcOch5e7i6PewVv8jTvNKr5xl1lF8LthnDzAPWYVAS6YVQS4F2B7iuO9kbc4+JvMKoJfNKsI/mZ4Mw9wn1lFgF8xqwhwP8BuLo53ibc4+ANmFcHfYlYR/K3wZh7gQbOKAA+ZVQS4HHvKJrJCstofzVoXskLt5N2FOBwHmQmkHlZiQViP2YmfhIjyzMYytyoRoSWqt4VafZrXCNUktKRURv3JhNZuhBh0J+toRPJp9Qa9ahi5caOdMfoBJlpyR8ot9P0CY7k5JrLnjaUrhsHutIhs6SMCFdk+y9J9ImP7ob70u7i23AEYXGZW4iCetBv0oWwUOnxkLBxisj+alIyaCMyZbGv1+7TLmsOh8X9wpS9jPddO6PK9bGz5s+wDRCWRRWl+MB2AgSnZj8vSGQY1OgFVldjDguyLLkpkkEUSCRzT5/NKxhl/mbfe52VjHl3RPWH4B+8t/8tyF3k3XQJUytN+eL1sFEai5XSMo+eN4VASHyaVTBYx9EqSIbqdangTohkdqHnJrYp2F5PbokxEfJf+rWkIlv6MVC0vs1vZJ0k5qSQN6UglFQUXYMpGiAhcEekxIghemJMzw1tX4zEscnm0FhGuidTVhWR+T7SnKM5cRsMhgd2qq4pLHM09N2L1OJ2ArtXqhw4q58ap/9eCosNttz3zjNepCpLA3uq125be9BW6j3AdOAxIHQId8JIqEiGJdKsXMKIj8ES0COICAfFOA1e9oxK1WMi0KaSNGzdGNobrQoCHDNgRP6IXykss1IpNORkxDF8b8IglE+1Q19qYe+yeA7l/Q3ZQ256Z9pbavq6vfS051Lx778Cr36ILB7YdmdMc7D6Hdmgyscfz2S0/oYNbci2Dg8P9ue+izrQs/5CdZJ8mDaQlDRpMBUqEi0RgVGBvBBwtM8RiqRwFlMUZIopV4likriZiAC4VUeLzIufqIkaNJPm8fn9bawoYWObHfmRpBCTKOcpOyjan1To5s/PS6NilyZkJq81pk51155Izj88c/sBcx21R9ma3zW63JMYu789cHm23qFa721phHHzyloXfng5WEZQz8vUx4KubVJBYuoHzUaTISAsVhAIjNY0QrUIr3+AHQGdSAuUifmRfCTt15B9nIP3bS319l2aXKbKQLJ++s/W2nZ//PHt+5rHZo49Om6xbevPj9++8NLH0LPALcbABDkHSnI7dWKJ8D6e6NlRrSrR2HYkaIV+hooXoj9AI385leYYb5FUa4vev0fFuXXW4TXTAHNw/xQtKkORxkgCnAGo/tJlA2QI8EactVBS9o6D+PgHRCZByA/CR5A0F/VqZ3lt0DyH6A5z0KRrkk39dczgRpZPsec2haj9148yfw0eITEGH7mUvkRbSm+6uo6IFdJ2hXUgXZSoRiyhZFgAHOgMsAl0SRTIDyFRxDrWQJiMCqlJnRY3y+67RHY7eKiVLphKIKmDaxm7VXPHTnceePHz4yWOJo3VOza5YR/fsfXBs7MG90f01jzp03fFJCibwPU2prgEgAK3YYHM7dEvD+OW9ey+Pb/C9hP6lwMdzwMdq0pSOqgIDdAsuZEGysBInAohXk42esOEJ541Vk0z+hQqVvBcLYYXNaVR3OPTcrXBzarrTodN3eRzAUOfS/dB20MbcFx265mQXsZV7lVY49KJsyfsBJwf6TgflKKGiXd+zP1KYQi8OuHQ/H6t/+Yf0q1xP6tPoOClQeBF0F0ajVJgRwYiq8npSETYiFrks6o/UcU6DVSPnVznnl+YDFo/drXq2xYf26U6n1nF0izLUZbWqbi3atneIciXJNW0+ksrTsvwzdh7mD5FQemOwzGaVLYDECGgroEBNzobDEUME/TS9cx2Vfav5yV00KImFsvM+h8OW+18P5Xnq1Og7baCgttxP6IY6u0uz05n7PgOqy5mgOXO/SS8qul21/SD3aJG3dBnw0Ul1upJzFVEpMV+daOF2ETi82na5XOn/RuLe5zClOdjtdhRMAiLT+4t2+RX2x8RAfQpqikAxClCBgJO9CGF8tUIZxPCFI+G8cRbsUZDqgA1CiXlihKLJMvYyCNapf1txMFX5NroDzSG7RSpR8JxoqkscFRbJPeKgKj229DcmfqouS7m76GUXK+J4AXhQSWrToQ0KQ4GIkHKsSATAKkkgXOdDfShiVkdLUSqjXM1vc+kO2SHmdmt20AHVbaV/4FbZ82516T6XJomsf+kVu9ttZ5ecbvvSc6xddXO/jv7js+A/XGBUKAnwpnlXAV497yoikUgN14tV3sHva2IljgEC42f3vXtu7t37zGt66N6JiXuHzOu/Pzk9/eTxE08eOvTkif2XxyDQmFdSjC0N+ZgNkVCiInBHJOi3GLjRvJH46JjPB1yp8lUGygFWNyIyqEchvhglPGnTCzGafmBq06ap1CtmxvWdrm3bul55hT3fdrCz83Ay98OC2uR+Z8+W3vHc35M8T3YJ5cCTJBkmW9OD9WXMItERK4WrZEGrpSJl4kUiQZ4j0ePgpuC/o0SWhRlAuVIGsQ30dXfC+4l4zKgN28BNiSaWILwIulOe9kDWk2piRXbCcyDIb1p7CvOxNpJnbXvE9MGCzd29P9y5oyncbjh8Lr+iatql/W8dNVned37HLVXNtQ3p+ppNZTZFdslL50ql0OG2+xsD5WVeXZIVXfVKzba5R2ZNqWTeeUQzBI/m8+lOiyLZ6JZSMZkygigEOXYrSabbaiA9oTzPg6gLqmyhCxBbhOnSbK+hoaG1oXVTc8KIgKfmboXHlzpUocgqgYVM+k3qy4ReZgKwk6LotCpyZc148qtuh9MLodDZeaBtIBnroNSl/aXRU7uj91sxl8UqW0X3tonhTjMfQ5lu2pdMz+nazq7eVoXGhPrBWOcoSpiSWtB5BvJNICVEEIkokItc5egbgQo2A1ZQOcozMMwpqixohwnSbkTiNRGMOSWeGR0zSKeuKMdi0ESJgW2UbWRc8v/zTLvqUVVl/I5tM81j3en9yc7jA5tvC7q8qiIHDmzafmhq19YDnd23DCgtbYpT9Sr7BlPRzlqPp2lHd2JXc0NEU+0eOVjf19HVW+GL7exv291i+tIakE0XyMaPvh2ZL0xjPClYDcD4idcwavNOxFtiLPlgHmINwLVX0Jm/wnOgvwPP4XC4lt7HubngdnB3wePIv7PbeJyGucBZ8XgIjnslq4DgDA5jxWGZPqMYvPIazX3WAW347m3b7x7WXKqenE6mplNuDMyO3JHtF4aHL2ynj/IodqTjcCp1uANbHAcD6L2L/RHZQGrS1V7GcwVwmyuhGa4bSFldncj9A6gdNU2P5qXm8YCo2IIu5H4gum02l5j7oaDbfbbvfcfisrI/0uyydel+m12xsTdJisPtX3qB9dvsfO6NwN0PQ1ypJa3pZszUQxUKBBVY70DOwgQeW1Y78FqILXW1kXxskQVuAoLAERJMhPyIUVmS39qEd+nsK4LLVib/3u/ZfDYXNHyq4hY+9WGbB1ZBH3rR6md/7HZCjLEpHvrR3F4P4HmfJDk1xbb0KfqEl1K7LTfNenD9R+DCqtgLsD7bmA6UexQmIrcYXWFWbT2sJ0FYcjHQCStsQpmxKulrkEFpX7d6VbftlT+3g7TY+9TcX+Re5LqymbbaVFV3Yurk9NhNPUnCvPt4vhNO18CUbJonO2LJYsFMdtrD7agrK1EeloKhvFbybIOGWB9qQcipSfTF3Fk+52dcupTbQn+7U7M73B7VZmO7UEd1qC39HvrwONi4yuwQPmPkxMchuFpEOjKa3TA5la6SAImy0YKlV4/KuHCYyUsskA6tfY7ociAeGqvoWCbtrYJlUVWsKho2MEJHwmFraYROJFYn0kgNK/HjaAX0p3wPoHy+e+C2zb239fXMl2uOR3Y3N+9ub9/d3LQ7QZchHe1FcgfivcMXxsbuGexq7oVMtjk119M1m0rO9PTMpYDWCaA1zv4xT2t5gdYapBUI8CMpwgxSVUprFad17XN0GXkg06KvoRWyRJPWYkTzeVeliUCyvpbWB05u3nxbf+fcxsLWR+BIVzOnNbGnqXl3gtkH7xkbvXe4s7kflw3sI9zwv7SpJ2d0zHX3zCQTs5xYrltxnkvbSZz773XWzei1q0sXzvBanMTC4JfyawZ/fgMiH46LqxsedVsLlJnyowd3bnLZFYfVobo2VaYOtrdmOmujPlmzqrLqbNnTtv3clvT5UWb31frsutXqkGRbx2xXz2xKtYtOWXapWl3l0IWx7fdsM/MLUze/cV3d9L+Gbvp/obqp3UA3j/b039YLutk9X1Gim3Bl34AkdwqFNNyUBtpGLwx1N9MwrNdHknM93bOp1Gw3MKBIL+T6dliRN5COdAJ6YJ0MeRR+u2EhC+iduaCqzbUQ4UuhUCjUEKr3405BiK9PwTsUhGQuQ1Zno2WwtA4lICUFs1Fzb910sLdlrMyuKG4lOJfccWd/38nNPbf009xXjzrpXkvraD3VtJ6ZVH21za3YlbrW/rvGd93b13Fy5GOTo9b4gAE4AhvpHvZ1wPrYaHYjSCdMJJnIErlopbLMt2f8sGwB4UC8xa01kIiPgZSMAhx0w3Ogd6HkDRMqk8aI2kDqa41aiM2GTQ5EdcnnM7XvmgjdZgaKwoL8742zdk2zn0UpbVfdbnX79s2VLW7F5vA72Ecbw8fdqurOzXFf+Rj4SNfxLUOaR3VbJC6PDogJdtC+HrI9PVxfwSSLBmiyEZmKIpBhsXApVI9aQTRc0apQNNwllJOxeBzMqSfenWiDIaKRcDxiKy6cuEwwO+LbUWZ+9DqcIVO1vjdsN3akRNkmSpLm601mFspPdg+dSafPDG65BVzjB/dv2rQ/lcRrki7DmnJi/EyXXumSbYokyLYNC/t6k5tNVdwSS6ObTMxt3jybKGgiJRNw+WewO4PE041Bcz3PrYlSccbCSS9dEtbAinDtkrDdRFm7xuPRd0yhLHr7G0ebij5utpUJb8jk/omLIdC3s36gzmywD3P/9rfRFFleJn0w3TvZY5DHwexUBgm9BL22RUo/sbycbYsCDN/HfYJ9AGAEvs/JyBe4L9wLl+8ATSFcQwbLrLJIcKHLvTpGsfWX9nXyGp8dztuUXEa/47M5bF8ZLRBBQzbVrts/+6UoNOz/nP6tEvw7fqx47Kr9D75FCriQtwMuhT1w/w12St5eugduDrc0ZcpI6Ic8qoPc8/FEM0/tzEjmR0OzzFhlSbBYykYhyzJd4mh2EzytINiJIBKAMEkqgUhXrOon6FALDzOmGXaQFHAI5Y1meAN5ryd+n6nWmFJ+Zy+StKWgBD3phu3xojYcauvao/vOdjLhzMG8Tmzo310/VJ/71jUKQl/Aa1dDsiMZ6y/o7vfBZg0y+bSpuibhZVzKRQ2uLmhwAJ6sdPLFfP5JJu24OfVG+uj79+uqQ+sbjO5oKRK0AGH71IHclznChon9V1awh9XLSryrA9zX7DFU/zx7DHX957duPd9vXntaM8nkVFvbVDKZaX36wtDQhdFRXDiM9mAAwjCUnO0xcZgAnxcHvcKY253uyCdJPI5KuOVSVpL0IDvL6dhrpT3Xcuk6aU/XXFWBZxVHuotpT9OeBBMG7hoZvWsw1ZT7EberX8PsZ7A5mWtKHO7umk60T3d3H07kffb18tkVKqpLUoFR01mvk89eA/PaOYP2+vPZ6+cMVHcsnef64VxJGvrAU8fX5gymvp8DejeSi08HMILmiS0rerWibptB1zQHWJ5R0HN2ca1ZFELzCsAq6+CcwahsWsdGUhWO1HhXNutrTDp9a0WeoruCbrulyhHe3lyQcdn0FmZ3u2E91nmg6d9X7GGqc5Ry2hohH/oI0NbGz33W33+oHi2cAFVZxqJGXbSmFs99kvnAmt93qFu1Vy+v7Dv48/sO0NHokBRV6T7SsrW/e/fhponW6P5qmyLbFeuG/kjzABsaaB+MnthxYdthm0OWlPF4tLHR5Rvoa+irDdXKDtUmWQOVsVh9o+YIdrX07TjIacBN+zZ2BRKYudFsnHPeIlougY8VBHFa4sEUpVRgbACSJwQobMGuAiQrcMW0CHKi2toaD/pjj+ZFegvpT+TarKiQNT1VWSbpFpsj6A801m1XNU3djhKZt2tulX46txgJWFyK06O0gtwwQ+JHPWd0u+riOrf8Y/pt+jNYlfaa2qTzDY6y0g2OgNnJ6KWSzkxaze/ch8OW1XZT3PYo7ODTL2un52ZPIVpjQ8M7QDl+BpH01SO33HKEVvCo+uq20dFtWDf3qpYhviukAvdb/LS41VG9stVRQSrqV7Y6cH9BitQJ7SVbC8ky+re6+CnRZVXc4qcFt8vmEn/3o6JLYTan3WbNtVvtVFHoy8wqqprdlruN/qbNbuoqzM9ehvkjhf0Oo0q9dr+jumS/I0LC4brIhoLtIEJ1uNVRQKwEr/weA3tOE95rcdtsTvHSHYikJjwq6A6bS3jLXZCoWN90SfIzxe2kaq4d8FJstD33MqBst9GXJdmBGL+BRj2e3F/Tt3lxP2z5Z/RFJkKMC6arasrdkBPljzqK+VBtY+3qfKiwH1vY2CtLrWREL+qq0/6e99hcdl1+8kOSR3XZHnmX4nK45A8+GVZUj/Olz6gu1W793F9bFVV3/NmfOVx2u/ULXzB1qgNyTitpJen05nJqEVXQHYYnEXhSeFGWWGnGXVVUtXLOy1ayCVSqpj6SP6HTCnvI6AaKfiAhXatreWX7ktZ7eqhx+wYfE5xWSUp37Z4rP5zaf4CnKQMNo5CdMCvo3NaJs126y+FmVkURjBMHjMa2ExnaxvXxi9tGGgYitBEUEtbeQNRVJq3e1yl7nfs6xup9HfqI2+3IPedw22j9T9FYaZvqtoIUnR1onB7FodD3Yk1X7fbcMYK5MoQp9jSsyWpoEvNgmqRzhX76g2I/rN6wH3NpVsdzaVbIpSGWpiAfqeRnHoH8WTZneSU/yqYzeKwNC2k3OCJ3wF3h9wKgM4Jn2f6SxAQlwSOguc3b9uWTqeSpiYlTqdSpiX3T0/v2Tk/vVQ4/cfzEBw9PP3Hi+BOHex+/fOXxx69cfpzbFf5xwnfZHxM/2ZD2uRVGt0EnOJV8to4Js77iRfLqmUylkmV/7/I4HfqbZNkBzvEjihOsR82fN20fEb2q7BSPSQznGAdiFaCznrSnN1WA3uHCIH92kV9oI82iWCK5elJXZzS2o/WWii5VILWISWGfRJZD9Mcgu9xlp279Zkdy1/ZNOzx2l91rlSpO9C6c6xn6BG3r0lQHRES7stwz0zQ43tyiuxXJbU32nM6kbh97Jb+n8zn2PMTEc2a+X1cwEVg5g3ZRWTgOViJNE0nyrnbIcYifVBApEIUvvBFegKB6PXgzwLSR1vZwCA+/zYR/5XRmZV+/kN7kPcOqTUm5jSbnuvvODkYnK526qjoaR1p2tWyaiKkRi+pSPpn7Z67Pk26X8oxEn2ufHxy8tbuyUnGqPns8NtmaGjFksEHl87hriccCL4Ne4j4+4+eB/BS8mn+5YgEPAQkLJAfHSeme/sYqnqhBmJSLWYqRz08SeXsz/UFbqE2j3wN0BnT8fODLqi7TfjB6bSD33/6VutHAnkX1eRbwsNLfVsHkz9E0yCS1nKNfA3ySZCS9tY0Kci1ghF/2XIfdkmSZBp6vsNtUqSRJ1KaMsFF3Da9Lj7dX61cKd+gL30fIuADZfLy77/xI4+5qSdbAHVRsru7MbDqyqzoR2iC7PDTKgN1xZHruWzUVW8P0rzqPp4fP9FZWiC5Z8di8fki3x6Z1l+pxWATqVlz4QcUrDt30B/RH7K+An1Fy6OlyznYzqamwQOopiAyIwzNRzFZW9K4CM8lLRYjSh5m0hyfU0arG2hqUU/2qs8p8Jr2ykSXzxcPqdHp+JtE53zt6om3blRmrxaFvmHxbxca9mzoOhIdb2scb68fa6HPpW7u7j/cOn+vf+ydP1DK3y2cNfeiw0ZC7Y3p7fLyleaIlNhI38+me5SX6Kj8jakhHwBMwu/mVFnpw8yOAorz8xBtee3RSuitP/9ol5L4jum2qBxQh90mu6WfxqNliW3qzze5WIbk7yI+MgLcw4AOQJ+DaD3wt+lbOJJ5UCTPocX2C6Wur3VUbfADoSKCv1c1v23h2h6rN1rS367oma6sv9HGv7tN98J/uzc14db/u5Reex1wmj5A+SJa6n9bz62cFJKzxb+zOFNakYFoBdBCUPFDSlXk6HK3BQxJ/nhnJZMEhyvl0xvdIVcxndyk+i9OlKm67WuurCJV3hu2QZ0uCHHDbnTbFqQdC+DkVRKR2mOOn5AipYfi3agZcn8V4xprpBb5exSh2iX/LGMDMC9lGR4rc867ingrZpxpQy70agCu1yL0kJICIFmRfhrSGc6MCrE7cbmqnHp+u6xKyTvqUjz7r8ZfpuWHfp0oYx3UHcCW/Ari68t8Q8q8R8yeLKC78hrB1zSTDRaFwaXC5IF24X/9piNN1oBnD6QGnbH7pgym1gC6FEImCp8Ote9yM9PMtSL4O8lnG6ushQKXqEy1xeD9ihMON5sajeXZuOr8UolH03eaSyMyW9DxqNXlUadNMR1smwTe5NMfQwbqBhvpt5apDkVzW4JGUgmzRkUHs6+1z6baDPZaj6Cbvcujivv741rpwEBTepSgNm5buL2EZIzHQtSe5zjeCP6lByvLaVgkps8DOWEqsAI9ezI/EAukAPGYPrP+Ux636SKjaq1/XRvTrq+chsApJ8/k0KbmOotLHfZppOJovN7y+1lJiXb5IfyJUw9qvKl3BP0gdwe5LqA3nAV+NuOsEnibx4JP3buhANrhF+pTsssPyI7dDdir3a+AjhGmH3aXabD/7oKpwPUssp+lB9iLkvh4epCvzGzEb6zEdEs14seI08XCdBwjaZb1w6S33yDIMd+LO87eqTvUFsfd7D1/59jZRU5y2ni/fc+/fdUpue/4Mu2K5j/axP4F5TH2uLPkmtpxs2FikIWmusQtRCrMdyWhwOU7cecctsCSwyhceeOvdsvWTqycRt3z34Sv/slXkc3WRb9IdtIY48PyV+xrcJaXTnH340bCD2NtxwmSkIEqU5Ahkxvyjob/5Jn5epJvn7+A3AkyBdff/IBE2vpSjMhsn71/OEX2RQH6bg/yWbxpjBfQwxGTaCTlmBUmQ4Y/Hdbbi9rwC5X4PPQqb4d/YoOfzYDd5YFVvJm0LR8PgAHH/4QYadgPf+J5SlXM6uMp9YJ0+Nt9Zu1r1NFC9yvU6+Vk8U8m7QI4VpDJdrpv6iCdLbJ5/NzWWd9p68UjPVJq21lR+IyGxcT0kjl1vvlqY7xE+3/oxBJmGn46UxJCVrmIM0V9nDCmgc8v66IB8W8lFmqVnQIUC/ItYIppnTdzJ7MUIMW3BJHqH00mIM+As9+lc3fKuo+RLWGlVa1DXHTSNO5G5FxwldQq+UnVrDrv2DK+oqsbxqF8+LLwf1hkT4LX+zTwpcwepwsIBhyAq/VSShZEA7xJKuzImaAuRiURk6aIdliaUwGL9BLStkvUoOH3bjEptNnAEisJm+Apewa2+ILzX/rre49uA+DIx302nINYoTFAuvu5pzTczGfQVhw7s3Q10jtfVRiL1teAbHHJVSVqH64TVO6XorvgmiM+7+lOu/I72el9t64n2AgwHYb//6M7eU33RBBVqFpKNA5G+0/2tw05FDARoMw3oTTtbRh48cPmrbx56++m2HYmYJKkS07ccG7nvw+MPf/9d0XRbcndTqqHpUC9lL+15eGrXY/NNEZulvDsdG21KP3QgGU8HymUx93mLrbx83+Wt4/cMnH7lV/e844DL7xeckuC0VYdOfGju3f90b+4BZ/uW0TNtyd70Qnv+b+rzfyk/4+r5AXCbHwX9+XO/8et4//zWy5/KPbhcbwmLp6CJJ1vmD79R4n97b9kNz//SEl7563zzx+5g22At+kX8u4rle8n3lv+FPYhr/F/ej/0qOczeRlqu+/wV/n3wjcfoeG2Ynxu/JOD3zA3w+8t15v7Jfx4f1kP6+f0JcyzmfX1jCt15+L+5ORxY7vo0/t/4sT0m/oJMWtijN6aFtZLamx7/EO4DXOfZn/3X6RMf/z3EEF7Cb9zWedaM35K9jjEe4GuX1X0HSPyXKqMDZIKx6895I3xY7L8WVzpHqtjJG8zfgWdfa35f5N8I/Od/4EeL85TxTNT8vVpSv579/rqJF+tfB78byWL3L1f2r0c3CjpAf+XGtNAvwAruZmS7G8/FbjB3583x7qZp0yBH/e61Pod+g9Ssq1fr0fC1a+UFa7Ji7GWpa+MwyDgFixkLPBtnVhIHG6phYZJi5fBPIj3k/9ffcyRFXgSeN5N28oclfu9p0k7/Cfc6Sn6fITGmEOtr8v9OkoB/Fdf0vxXWkjd6b5oE4F8I8NmIOP2/xCb6D6RVePmmXqmHf71kllwhz+KB2c9VpujvryrfXVtY102VC+yrpUWoL5bx1ywPQ/mi8EVRWqdMQXnvdcrf/WKKpRbK70veNeWN1y1XV5Xv31yRW+UrJeWlawusswrljT9n+b5tz6rycmlR6m+yvNPuXlUOFcvp11Eu8PICL/+wtqinoby8fnE4f0HlNJRXnXvWlI+vX1zBNeXWmyy/6xaLZcR9dZ3yr8WSw6J5i2Wf9pD2VX1W/7Cn0vOw589/mcXr9O7zHvP+d14+5xvMl6zv62uL3+sfKZZza8pD/h+VtZTd/Qsqz99M2YB/B41r01thNf0Ogl/zNpJu8qvgLd/h8ONfpEHNSo7BqpyKNvC8Ol+hY50SHVpmnREnrc3XBdJBW/N1kdTQW/N1C6mgv5avS9D/O/m6E2Lbn5IBcoacJfeQc+QWcpycIOdJkLTCSm0TlCDZAz0LcN9J7oDnR8lt5HYyR06TeeibhHfOAP4L0I9v9QHMeYA/A/23Q7uej3YeRr8dIl4zlOMwBkLcQY6QJnjrDDkFveZ452CcuyBjOQvt4+QkQJ6G2l38afM68w/D/RT0nQTcG0gM5rsrP3qQ7IKxbod/58idcEVch2Gu0xzLcf4e0BSsvHbUYBXgde1cON5x6D0J7XOQDTQBf7B0Aw+OkSGA6F7nrfia99bj4WqIfRzn2wEKsQ2WzPTaoxd4bXL6doBFiZ6FvtthlNs5p5q4bI7D8wngCO6Sj36C/OmuqUVKH85kqfk/Izq7SOT+j21tqxZII1af6bJGrLpVsJqtQalFqpR4S+l/3vmC7QXxBVAoG7Qd/c+TNC+8LZDBxVr60M6pbPqhqUVhfnAxgq1nrfeB+qUfOrpnCkEy8Humx1pv9VoFtfETdPktWfFti4wMPmWZl8jg4H8AzSD0MQplbmRzdHJlYW0KZW5kb2JqCjI1OCAwIG9iago8PC9UeXBlL09ialN0bS9OIDEzMi9GaXJzdCAxMjM1L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNDE1NT4+CnN0cmVhbQp42tVd2ZIbuZV9n6/IN0vjkIh9cSgqQt01bSvci1stu23TfKCKWRJjSsUKktXT+vs5F0CSSFaCmbUqpRCDuWA75x5cXADJLKFNxSqhbSW4wbevlBSVMKwyyuGbV84ofIuKM4eERlZceKTEVa45JdUVt4LSmop7RYlDYZQYV6WlxJ6KRmKLq47hsuWVZAKJraikULhsZSUVWiOsqqSxlFhX0jlKbCrFGSW21DxK7CqlJSVGg60WVGqlPOVyvNLcIbETlZaU3clK63CgKm2p8U5XhlGBWlaGA5NwtjJSaxyYymhOV3xlDLUZOY3jyO55ZbzHLc8qKzgS48Qq1COQzlrC7nXlGMAJryonFR1YopAOTOW8BBPeV14okORd5RXzYIJXXiMhKKm8Ay7JGAhnlu6BaCY18QWmmWF015A5QIJksAfnEtyBVc6VoHQeRyaUYnHkJa5xDrtxWEbCZhxWYTgiW4byOOoATSgPqDiy0V3UIaWAeTjaAm4oL+qQTsAuHHUoBmrIHFxJ0C9RN1dkOclRr/JUm0AdWoQjEgzsUFGZXDvoRgrUYThZHmVyo8COhJTQTk53UUogXEpGGjN0F/VaLXEXMuXWAZcEPu448ShRB+ijI5TnyOgS3HDnGJWC8jzjdJekSnwKhbtek0ZhIu4tcYpWcO+BVZIuWcwB+zNO0kPJgpH5JH07YhgHUiGRokuKaFV0AFFIKkCT2OmWoXaTShhg4QjCYZYYQfXMkZk8HUBD4Zan3ojaOAOL1BvJ5siG1JyTIMJNXIXg6YDkjcK5RNrQoRVsTf2QKwAklXMNRDIUZaArqUJPxR2pKZkFQ4ZKt6iDuionW1vK6NAdZKjGo88QX0RHBYHiAKcSVwUqYhV1B1REl+hIBMyUjLpE6BGCLET3FJpL5yYUgLaIQAKcjoBwVGXJfZCiyS1ID00EO0FN1B0V9UxJ+JRy5IRwYJHr1avJu+X2on51Xp+fo5efMdCNT43Pe5zjmoFVzRwfjQ/6mlWMyXn84BIzSGNl/IS8lP4spj8sT8j9R9IHafGF75PJa7Tll8mfV+9Wk9Nnm+v39L8+2y5Xl//9krPnJyeTv83X9eU2OCJWvZ38bV3/hhMdTn6sf98G14yTk5P/Ggsu2YOLl3GZHJcfGS7Vg0uUcdkMFwQ5Lly6B5cs4/I5Lj4iXAFbDy5VxBVN1OASI8PFe3DpMi6e45Ijw9XnD00Zl8hxqRHhUgN0aMu4ZI5LjwxXnw5dGZfKcZmR4erToS/jysdlM6Zx2fTrUJTjDZOPy5i0jQtXjw5FOd4wrXHZjwxXjw5FOd6IJkq47JjiDTdAh+V4w+TxhuUjw9Wnw3K8YfN4w4qR4erTYTnesHm8YccSb6gU9/bpsBxv2DzesGpkuPp0WI43bB5vWD0iXHyAvcrxhs3jDWtGhqvPXuV4w+bxhrUjw9XjN2Q53rB5vGHdiHANmFfKcrxh83jDPlS8oWgdGB8W7+ftVjzio/R0z4pULk/XKJ+J96gcc96DrRxz2DzmcOwJsMloz1BW3c4fjtVATOV4w+bxhuNPgKmxU7oXylRRr6HcugdLOcZweYzhxBNgacqRSYPJJgFfzxqhLMcULo8pnHwCHGdJZ7LdbxrthbJND55yLOHyWMKpx8ejRcqT/F7o/zyWbYf2mXIM4fIYwj1UDGFSemovQKlF4j/oqaet5bigSHdyLTZR1TRjWLM7mhPb8lK+FC+Dsr9brjfUmBiXfD/f7LiafLu6RjtfSL5rsmotuba6cSGUCUMdT5J9n45tG0sjA5sNi2E4UHvsJKEGsy1hy6luhSql1pXYLbf6OKMmY9TZnFGbM1oitKXXQqyhmz7fNE0f6FPux1drsrQ92lStGKhUe5GwzlYdJ8vmZPmcLD+ALJcHZr40yJvU1PO9U8kHs11vyjqxzRzSjQCG8i/2PY8GFoJOpFMZKg02pJ8m4DFdTrvPGK3A7d7oOlreh3znmm3e51J9N4ae44Z2maE9zwydTnoMnUdzXtyTiibibHqGLYykYxNEK9q9NwuPLojjddFg1cT6LT8VxtTjYvK5mGQuJjlATD4fs/yxEOc8ef1sutJH0VHIdxbGwfSPNVvbOF90l7t30D2iak03imyMUVSdFjounPgQQ6McnStHD1FOHhx78zRu6PHczSOqqjXxuzdTT6mqRVKUzwaB1CbbE/nFR0kadeWhnx8S+vl8WdCXgq8Dq+zaPZBL3fQUF9MQt00gZ3qW/lRrGlxs4W2sajN2e0LF+EBLw24eK/ohsaLPYkV6XHEQuzpNuKmtt2W6rZxh4cSuD7LUB0U+B+mxTj6pTwgbuGKkcHkbLrmsUJc/Iokcsu2AHMxNj6g+sDqze0NoG0RHj+LlXvEJUFR8MmijeFFQvMslIIdLoHvq+BX0ANeSg8zh668E/n17hO+gIPUIlfNhvhI+xIEcWktex7nQrMyFflrv0EvhQ3gLlXsLlXsL01rK6/QWBwPGA23e7TZFFmll72wffYRIhLc3vVoLw3dcxNK8ZXabw/JfBtaNdTmVBaB1lBIFqM26cms/0Kdy0mIoLYI+CE2ig6YkBfeIveMB1qy5zpXucqX7/nGxPTDwp1o1POCjHEP0mC2fr6fWN1DE2KDcfvzSqgNeNBvnOVY5QqzzVGbwDD04dRmnyHGq8eC8k5cxZZytbqjHjvMOWrZl7Hksxs1XgP022nZl3I8Zdz3BLgbPNvcahxRHHt6KsUxh5MmDEW4fceX5Fm7rNmuAd3YDrWkJb9Hgx0FDW+FPQ4thHbSknpJP3gX7shyVvMKTcMTLHPmcIz5Ojr6IrkSRM8HG7oHvucNjcw+dzw1Ea6NZdXvoVkAtxBfa4RmZ9zatOYfI41OhxkvRF/VaqoOy1APlV9QD77Mblj3ykUA3PVENmKW3ggSh7/Yg1H04LZWtdNqJ5PvFmdaCTD5NON8fN4s3qnmSbbdP2yOl1lRRPGIEffhY4/EHu7qZUPWwRzi4z9VhcnWY/t28AydkR6QOk+2n6pv7rY+qlNZku8TKF1HKUVaOK0WwXCmtEd0NUYrOleLHo5TwfKnLfjSgH1kdreWIEhNfQh1dTAz1IyJ75oLeu7NXRzrpUUc+ykg+InUcmTYcC25aP3PwMa1V7ad+tMyCrRSAmbMe9bQWdSQfkXr6lqZytYhcLSJXixiilnzCKeUdJ5zH4rdsY8ksskdRk9W1PL5d3A5feyzaWpOR+Wqs1E8Ibf6wsCzrgBXNJ+87WWmiZdnxO4xbzlNF/myHzHdrpR4QHct8M0SaR/ZbMs4mmlnDzozJ/MVRv0nT/MQxk8djjnS2tWQk77u83oP+zjFRkZ0e5eT7/NLmyhnwlGHZbeW/X8xm41aXp4m4vJ9aZs9y72jsnCnvsWQP9KlWF2hNAUS2VsOz55tUYXlG6x5Czz7Or7b1+qXM688Gg4awG10wdc1YvWyFDq6f1WYY7t7iTqyol23x5svAqrB2p/PH6OWx3YxdJaKjkqSPUmDYPNNwnjShCqy25Jk9ppma38OqyiKLZBqZzw5lHvOrmO5tvVldr8/qTRWre/f5qkbpH+odQtWM7pdbnG+moZDZYe60I9mfPW7RUv5p3NGq4vZPFVekq7jIWsUVxyrOVau4BFLFxY8qTkuqONmtYhg6azdHDEUT50GzyevLy9V2E97ruONwX1yKcDqKU+3i4thyg51kpgH5VZZ/l3yTbCYOYfx1uUCeyFh0TqWsep+VZ1kj85HruLHatOkmBlfCoA8w2M78qd7+/FHrN/Oroflld35bym8O8pvO/OnnmgPy+4E21HtDxGN68+ftbRi7QXQXVRRG06ibIIrd1LZBaNGd3wzNr7vz+6H5u92MKXZE185vujui0UPzD+2Idm+J+K7BytyhI+rYBeOviKv4ksmmUcFXmi4vZ4ps+gM0B15Osy4vZ0vkat4uznaTa/XQ/EPJ9XuG4ouVKtvdua0byITtdk6u5Jz04ei3c07T+PP4Kv7y/MAyzgwtTx9YJg8xBzITe74Tx0g1nbIzyXck+dnm9GhRgifHs/M1On03so0OcPJDvVjOv1n9PiXOTHiFsEiFfruu59vV+tn383f1P6v/W24/Vh9Rz3pdnz8/+lD1jV9SXW8/rtZNMNfEWCotiqXAjmJtelhytwxA5zZNRXCiHAK69WpxfVavn/2++G15tTj/9Hv1n2eC0SuPOfvP8+exyYgAT+fb+tnpn3DLoHDcFI75PzL5B8b+8Dyi++mqvnwdwsU4wiIa284Chz+sFvXk75v6p+vtxfISlNLF7+fv64sN8v14/WkzZSEwPD05EeFgfXKimisgb/Lj/BPFN2na25SzjwTJUDsjB9t9O9/OL1YfSLJqaqSfSTE18M9G2Jli6Mx6pvxUWzGzYqrhYY03M0c3/MzpqbB6BpDw6ALfhlLMODdTh9ucu6mVuC+RXOPcGHhBiW9cpyqcnXFrp9rj27OpEQbfFp1Zz4Tg8Gr0WnSJY4c0Ziakg+d1M0EtQbuEQ32OzSRnU8Xpve0Sx0jrDFDIKeLbGbCGNiJuQduATlmcI482Uy8EvmPZ0qJ+rgDZI0TAN7dT5cRMCZwzP1MS7UR7leGBBWscjimNrcJ1tMVoCa44lVNJDBH0XnqNGNUyeg23h//GN7wyvY0cxzOt0UZ6qTbap9EOQ6+UV34GTFOJNs2CSZSNJuFVKD8yTyZBC4JJDEyig0kECybRLJrEkklQQjARqJLJNLBsMI1w0TTGBNMQDcE08NSY3UXTkDnJNExF03AZTYOh0iNfMA1MG02jkmlUNI02wTTktdCPomnQ6GAapAmmUTyaRupoGplMw5NprAum0UBIppFOR9PAlGQazIOiaeicTIPQ3kKK0TQwAZnJuqmyuO8kpGWCqbSxwVQoN0zccQ5TsQpthmlgIoSpmkcTcXq1u0dZCE+4I1N5XOMIx3Bs1JR7T2aeaasQ3cL0ViUTMny7aXwjvA9l4DNDzwrSgv+ZethotvOj38HvT365fr8NHfPNKZ3TDTH5Zr6pw923P//77V//+cefr5dn/7uZXy5efLO6WISMp/XmbL28gt8Mr0kP48ib018+b7b1pzeX56swAn1Ybrbrz89eL1bv6+eTn9aLer28/PDszQLOf7n9/By1X11d1J9oLGDwJ6e/wnRy8mt4K3sq8t3qz29Of5hfTZpc2UjQbsjk9eaMSsIEl03och3mp5pNfkGj/oG5nYb/ufpLvfzwMaV6/duHX5cLOHxYJJT2DQ0RL2DD6kX4GwfhzwJwJ2eTN3Bcy7PXlx8u6opNvruYf9jQG4J5KP4zxohX8HeXq039ijX/HGv9O6H5NOogr1lgliisaWSOIQSl/m55UQtc8Qdjcct6dIX1me1/Ls9WC/C/Y/LFXxJNiznqWYWQJI6W71Z/v1widY2K1bGKu2Xzrx9++vnbt1n9kML1xXx9QznpjdgPoxwmSDnpZdQPqhxny8JRKhOOREj3QoQ/YUF/i4LLgnBMUTP6iGaKtDaySTOSTDZG3kI2xfKHKIe7m9Jpth/+H+lbLtQKZW5kc3RyZWFtCmVuZG9iagozNjQgMCBvYmoKPDwvVHlwZS9YUmVmL0lEWzxhZWY3ZDQ5NjE2M2QwYjkyMGMyYzRiMmMyMTBiNWY0Mz48YWVmN2Q0OTYxNjNkMGI5MjBjMmM0YjJjMjEwYjVmNDM+XS9Sb290CjEgMCBSL0luZm8gMiAwIFIvU2l6ZSAzNjUvV1sxIDIgMl0vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA3NDg+PgpzdHJlYW0KeNot1VlbVVUAx+GzyBFJiyiVJMUJUXEAxQlFBRUHUEoMzREVRdREMVFRHJpnbZ7LbJ61WbNBq4tu+gp9gO68t/Ou1c37rN/ezznPYQP/k8lkbtzICTmZoziC5pAZlMmE3O5MRp7A8ZB/LpuZ3OyN5rJ0Y20oyE/XgrzPKQc3ydM4KXuhN/qgL/qhP3IxAHmhoCu9381euz4MvpJyoNwQhnSkHCQ3h6EXUt4it4TCv1PeKlvCsNqU+XJrKOpJeZvcFoZfS1kgd4TigSlvlztDyfWUd8i2UPb/Ww2Wu0J5Xsohsj1UXk45VN7vVBiqqtO1O13bF2pKUw6THaGuM2WRPBDqW1LeJTtD48WUw+UDTiNQHJrOpxsjER/sV9iAjdiEzXgYo9CNYziOHpzAKZzGgxiNR/AoHsPjeAJP4ik8jTE4i/V4CM/gWZzBc3geY1GC9/EhXsce7EV8avvQgXHYjwPoxEHEp/EGDqELpTiMIziKN/EW3sY7OIfxeBfn8R4+wEf4GJ/gU0zARHyGz/EFvsQFXMTXKMM3mIlZmI05qMJcvIBJmIdqzMcCLEQNarEIk7EYS/Ai6rAUy7AcKzAFU1GPBqzEKjTiJdyNe1CO1WjCGtyLZqzFOsT/7gq8jC1owVZsw3a0YgemYSfasAuvoB278Spew3RUYga+9ccfP8Z3uITv8QN+dDd++stO8Ye5gp/wC37Gb/gVv+MqrnlFkdMf+FPGNQvhUkM65SBuWC/0Rh/0RT/0Ry4GIA9xtOJUxYGKsxTHKE5QHJ44N3Fk4rTEQYkzEsejEHEy4lDEAYijUIwRGIWRGIPRKMFYlGIcJmA8JmEiylCOyZiCqZiOCkxDFSoxAzMxC7MxBwswF/NQjfmoxULUYDEWoQ5LsAxLsQLLsRL1aEAjVmENVqMJh7EJ67ARrdiOPdiNLuzFfhzCwdB6Nfvl1Zaffsk96A7t2W+10H49XTuFY+HMP9lrZyuy/PVvJvMflX6VSQplbmRzdHJlYW0KZW5kb2JqCnN0YXJ0eHJlZgo1MjIwNQolJUVPRgo=</File>
    </Filelist>
    <DatabaseInstall Type="post">
        <TableCreate Type="post" Name="cip_allocate">
            <Column AutoIncrement="true" Name="id" PrimaryKey="true" Required="true" Type="BIGINT"></Column>
            <Column Name="criticality" Required="true" Size="200" Type="VARCHAR"></Column>
            <Column Name="impact" Required="true" Size="200" Type="VARCHAR"></Column>
            <Column Name="priority_id" Required="true" Type="SMALLINT"></Column>
            <Column Name="create_time" Required="false" Type="DATE"></Column>
            <Column Name="create_by" Required="false" Type="INTEGER"></Column>
            <Column Name="change_time" Required="false" Type="DATE"></Column>
            <Column Name="change_by" Required="false" Type="INTEGER"></Column>
            <ForeignKey ForeignTable="ticket_priority">
                <Reference Foreign="id" Local="priority_id">
                </Reference>
            </ForeignKey>
            <ForeignKey ForeignTable="users">
                <Reference Foreign="id" Local="create_by">
                </Reference>
                <Reference Foreign="id" Local="change_by">
                </Reference>
            </ForeignKey>
        </TableCreate>
        <TableAlter Type="post" Name="service">
            <ColumnAdd Name="type_id" Required="false" Type="INTEGER"></ColumnAdd>
            <ColumnAdd Name="criticality" Required="false" Size="200" Type="VARCHAR"></ColumnAdd>
        </TableAlter>
        <TableAlter Type="post" Name="sla">
            <ColumnAdd Name="type_id" Required="false" Type="INTEGER"></ColumnAdd>
            <ColumnAdd Name="min_time_bet_incidents" Required="false" Type="INTEGER"></ColumnAdd>
        </TableAlter>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Core::IncidentState</Data>
            <Data Key="name" Translatable="1" Type="Quote">Operational</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Core::IncidentState</Data>
            <Data Key="name" Translatable="1" Type="Quote">Warning</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Core::IncidentState</Data>
            <Data Key="name" Translatable="1" Type="Quote">Incident</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Service::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">End User Service</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Service::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Front End</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Service::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Back End</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Service::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">IT Management</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Service::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Reporting</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Service::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">IT Operational</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Service::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Demonstration</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Service::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Project</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Service::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Training</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Service::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Underpinning Contract</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::Service::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Other</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::SLA::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Availability</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::SLA::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Response Time</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::SLA::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Recovery Time</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::SLA::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Resolution Rate</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::SLA::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Transactions</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::SLA::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Errors</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
        <Insert Type="post" Table="general_catalog">
            <Data Key="general_catalog_class" Type="Quote">ITSM::SLA::Type</Data>
            <Data Key="name" Translatable="1" Type="Quote">Other</Data>
            <Data Key="valid_id">1</Data>
            <Data Key="create_time">current_timestamp</Data>
            <Data Key="create_by">1</Data>
            <Data Key="change_time">current_timestamp</Data>
            <Data Key="change_by">1</Data>
        </Insert>
    </DatabaseInstall>
    <DatabaseUpgrade Type="post">
        <TableAlter Type="post" Name="cip_allocate" Version="3.2.91">
            <ForeignKeyDrop ForeignTable="general_catalog">
                <Reference Foreign="id" Local="criticality_id">
                </Reference>
                <Reference Foreign="id" Local="impact_id">
                </Reference>
            </ForeignKeyDrop>
        </TableAlter>
        <TableAlter Type="post" Name="cip_allocate" Version="3.2.91">
            <ColumnAdd Name="criticality" Required="true" Size="200" Type="VARCHAR"></ColumnAdd>
            <ColumnAdd Name="impact" Required="true" Size="200" Type="VARCHAR"></ColumnAdd>
        </TableAlter>
        <TableAlter Type="post" Name="service" Version="3.2.91">
            <ColumnAdd Name="criticality" Required="false" Size="200" Type="VARCHAR"></ColumnAdd>
        </TableAlter>
    </DatabaseUpgrade>
    <DatabaseUninstall Type="pre">
        <TableDrop Type="pre" Name="cip_allocate">
        </TableDrop>
        <TableAlter Type="pre" Name="service">
            <ColumnDrop Name="type_id"></ColumnDrop>
            <ColumnDrop Name="criticality"></ColumnDrop>
        </TableAlter>
        <TableAlter Type="pre" Name="sla">
            <ColumnDrop Name="type_id"></ColumnDrop>
            <ColumnDrop Name="min_time_bet_incidents"></ColumnDrop>
        </TableAlter>
    </DatabaseUninstall>
</otrs_package>